<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Ziki - Thomas Tourlourat's last published content</title>
    <link>http://www.ziki.com/en/thomas-tourlourat+122581</link>
    <pubDate>Mon, 05 Jul 2010 10:23:10 +0200</pubDate>
    <ttl>120</ttl>
    <description>My aggregated content at ziki.com</description>
    <item>
      <title>Authentification et Autorisation avec Zend AMF</title>
      <link>http://feedproxy.google.com/%7Er/armetiz/%7E3/CHkDYD0DYaU/</link>
      <description>
        <![CDATA[<div class="post_content wiki_text"><p>
  Nous allons voir comment mettre en place <strong>l’authentification</strong> et <strong>l’autorisation</strong> lorsque l’on souhaite travailler avec Zend et le protocole AMF.
</p>
<p>
  Au niveau des pré-requit, vous devez avoir une architecture <strong>Zend et AMF opérationnelle</strong>.<br />
  Aussi, je vous conseils de lire la documentation sur <a href="http://framework.zend.com/manual/fr/zend.auth.introduction.html">Zend_Auth</a> et <a href="http://framework.zend.com/manual/fr/zend.acl.introduction.html">Zend_Acl</a>.<br />
  Vous devez avoir compris la notion de <strong>rôle</strong> et de <strong>ressource</strong>.
</p>
<h3>
  Objectifs
</h3>
<p>
  Si vous fournissez des services à travers le réseau, et qu’ils peuvent avoir un impact sur la cohérence des données, vous vous devez de sécuriser l’accès à ces services.
</p>
<p>
  Sécurisé l’accès signifie restreinte l’accès, mais aussi chiffrer les communications.<br />
  Nous ne traiterons pas la partie chiffrement des échanges, pour cela je vous laissez chercher de la documentation sur HTTPS.
</p>
<h3>
  Point de départ
</h3>
<p>
  Ci-dessous, un exemple de contrôleur Zend offrant des services AMF.
</p>
<div>
  <pre style="font-family: monospace;">
<span style="color: #000000; font-weight: bold;">class</span> ServiceController <span style="color: #000000; font-weight: bold;">extends</span> Zend_Controller_Action
<span style="color: #009900;">{</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> init<span style="color: #009900;">(</span><span style="color: #009900;">)</span>
    <span style="color: #009900;">{</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_helper<span style="color: #339933;">-&gt;</span><span style="color: #004000;">viewRenderer</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setNoRender</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_helper<span style="color: #339933;">-&gt;</span><span style="color: #004000;">layout</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">disableLayout</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">}</span>
 
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> amfAction<span style="color: #009900;">(</span><span style="color: #009900;">)</span>
    <span style="color: #009900;">{</span>
  <span style="color: #000088;">$server</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Amf_Server<span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
 
  <span style="color: #666666; font-style: italic;">//Liste des services</span>
  <span style="color: #000088;">$server</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setClass</span><span style="color: #009900;">(</span> <span style="color: #0000ff;">"Service_User"</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$server</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setClass</span><span style="color: #009900;">(</span> <span style="color: #0000ff;">"Service_Book"</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$server</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setClass</span><span style="color: #009900;">(</span> <span style="color: #0000ff;">"ZendAmfServiceBrowser"</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span>
 
  <span style="color: #666666; font-style: italic;">//Mapping des objets PHP avec les objets ActionScript    </span>
  <span style="color: #000088;">$server</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setClassMap</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'UserDTO'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Model_DTO_User'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$server</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setClassMap</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'BookDTO'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Model_DTO_Book'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
 
  <span style="color: #000088;">$server</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setProduction</span><span style="color: #009900;">(</span><span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
 
  ZendAmfServiceBrowser<span style="color: #339933;">::</span><span style="color: #000088;">$ZEND_AMF_SERVER</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$server</span><span style="color: #339933;">;</span>
 
  <span style="color: #b1b100;">echo</span> <span style="color: #009900;">(</span><span style="color: #000088;">$server</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">handle</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">}</span>
<span style="color: #009900;">}</span>
</pre>
</div>
<p>
  Nous avons donc <span style="text-decoration: underline;">deux services</span>, et <span style="text-decoration: underline;">deux types d’objets</span> pouvant être utilisés.
</p>
<p>
  Vous remarquerez l’utilisation de <a href="www.zamfbrowser.org/">ZamfBrowser</a>, ce service couplé avec une application Adobe AIR permet de travailler facilement avec les services.
</p>
<p>
  Voici à quoi ressemble les prototypes d’un de mes services.
</p>
<div>
  <pre style="font-family: monospace;">
<span style="color: #000000; font-weight: bold;">class</span> Service_Book
<span style="color: #009900;">{</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> createBook <span style="color: #009900;">(</span>Model_DTO_Book <span style="color: #000088;">$oBook</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span><span style="color: #009900;">}</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> readBook <span style="color: #009900;">(</span>Model_DTO_Book <span style="color: #000088;">$oBook</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span><span style="color: #009900;">}</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> updateBook <span style="color: #009900;">(</span>Model_DTO_Book <span style="color: #000088;">$oBook</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span><span style="color: #009900;">}</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> deleteBook <span style="color: #009900;">(</span>Model_DTO_Book <span style="color: #000088;">$oBook</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span><span style="color: #009900;">}</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> isRentBy <span style="color: #009900;">(</span>Model_DTO_User <span style="color: #000088;">$oUser</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span><span style="color: #009900;">}</span>
<span style="color: #009900;">}</span>
</pre>
</div>
<blockquote>
  <p>
    L’autre service est composé lui aussi des méthodes <strong>CRUD</strong> (Create, Read, Update, Delete), ainsi que d’autres fonctions métiers.
  </p>
</blockquote>
<p>
  Sachant que mon application cliente Flash utilise ces services, il est très facile à un utilisateur de découvrir <strong>l’URI de la passerelle AMF</strong>.<br />
  En l’état, une personne ayant l’accès à ma passerelle AMF pourrai utiliser toutes les fonctions de mes services. Ce qui implique qu’il puisse modifier ma base de données.
</p>
<p>
  <em>Remarquer que si l’on supprime le service de ZamfBrowser, l’utilisateur n’aura pas accès à la liste exhaustive des services. Si vous êtes en production, je vous conseils donc de supprimer ce service pour des raisons de sécurité.</em>
</p>
<h3>
  Mise en place de l’authentification
</h3>
<p>
  Nous allons commencer par mettre en place l’authentification,<br />
  Sachant que nous utilisons un client Flash, il est logique d’utiliser <strong>Zend_Amf_Adobe_Auth</strong>.
</p>
<div>
  <pre style="font-family: monospace;">
<span style="color: #000088;">$authAdapter</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Amf_Adobe_Auth<span style="color: #009900;">(</span>APPLICATION_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/config/password.xml'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$server</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setAuth</span><span style="color: #009900;">(</span><span style="color: #000088;">$authAdapter</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span>
</pre>
</div>
<p>
  Avec ces deux lignes, nous avons mis en place l’authentification au niveau du serveur.<br />
  Il vous reste à définir le fichier password.xml
</p>
<div>
  <pre style="font-family: monospace;">
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">"1.0"</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900; font-weight: bold;">&lt;roles<span style="color: #000000; font-weight: bold;">&gt;</span></span>
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;role</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"editor"</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;user</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"stephane"</span> <span style="color: #000066;">password</span>=<span style="color: #ff0000;">"P@ssword01"</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;user</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"robert"</span> <span style="color: #000066;">password</span>=<span style="color: #ff0000;">"P@ssword01"</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
   <span style="color: #009900; font-weight: bold;">&lt;/role<span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900; font-weight: bold;">&lt;/roles<span style="color: #000000; font-weight: bold;">&gt;</span></span>
</pre>
</div>
<p>
  Le fichier password.xml contient les identifiants et les mots de passe des utilisateurs.<br />
  C’est à ce niveau que vous définissez les affectations d’identifiants à un rôle.
</p>
<p>
  Si vous avez besoin de plus de souplesse au niveau de la gestion des identifiants, je vous conseils la lecture de <a href="http://framework.zend.com/manual/fr/zend.auth.adapter.dbtable.html">Authentification avec une table de base de données</a>.
</p>
<p>
  <em>Il est à noter, que si vous ne spécifier aucun identifiant lors de votre connexion au serveur AMF vous serez considéré comme un invité : <strong>Zend_Amf_Constants::GUEST_ROLE</strong></em>
</p>
<h3>
  Mise en place de l’autorisation
</h3>
<p>
  Maintenant que nous avons correctement définit l’authentification, passons à l’autorisation.<br />
  C’est maintenant que nous allons donner les autorisations ou refus d’accès aux services.
</p>
<div>
  <pre style="font-family: monospace;">
<span style="color: #000088;">$acl</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Acl<span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$server</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setAcl</span><span style="color: #009900;">(</span><span style="color: #000088;">$acl</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
</pre>
</div>
<p>
  Avec ces deux lignes, vous avez définit une <strong>Acces Control List</strong>.<br />
  Vous le constatez, aucune autorisation n’est définit; mais il est important de noter que maintenant, <strong>plus personne n’a accès à vos services</strong>.
</p>
<p>
  Pour donner l’accès à nos deux services à n’importe qui, nous allons procéder comme suit :
</p>
<div>
  <pre style="font-family: monospace;">
<span style="color: #000088;">$acl</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Acl<span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$acl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addResource</span> <span style="color: #009900;">(</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Acl_Resource<span style="color: #009900;">(</span><span style="color: #0000ff;">'Service_User'</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$acl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addResource</span> <span style="color: #009900;">(</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Acl_Resource<span style="color: #009900;">(</span><span style="color: #0000ff;">'Service_Book'</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$acl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addResource</span> <span style="color: #009900;">(</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Acl_Resource<span style="color: #009900;">(</span><span style="color: #0000ff;">'ZendAmfServiceBrowser'</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span>
 
<span style="color: #000088;">$acl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">allow</span> <span style="color: #009900;">(</span><span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Service_User'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$acl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">allow</span> <span style="color: #009900;">(</span><span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Service_Book'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$acl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">allow</span> <span style="color: #009900;">(</span><span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'ZendAmfServiceBrowser);
$server-&gt;setAcl($acl);</span>
</pre>
</div>
<p>
  Ci-dessus, nous avons une liste explicite des autorisations.<br />
  Si nous avions voulu faire dans l’implicite, nous aurions procédé ainsi :
</p>
<div>
  <pre style="font-family: monospace;">
<span style="color: #000088;">$acl</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Acl<span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$acl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">allow</span> <span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$server</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setAcl</span><span style="color: #009900;">(</span><span style="color: #000088;">$acl</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
</pre>
</div>
<p>
  Pour aller plus loin dans l’explication, nous allons maintenant définir l’ensemble de nos autorisations.
</p>
<blockquote>
  <p>
    Nous souhaitons que le rôle administrateur est accès à tout, et nous souhaitons que les utilisateurs non authentifiés n’est pas accès aux fonctions de mise à jour.
  </p>
</blockquote>
<p>
  Rappelez-vous, nous avons vu plus haut que vous étiez connecter avec le rôle invité lorsque vous ne spécifiez aucun identifiant.
</p>
<div>
  <pre style="font-family: monospace;">
<span style="color: #000088;">$acl</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Acl<span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
 
<span style="color: #666666; font-style: italic;">//Définition les rôles.</span>
<span style="color: #000088;">$acl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addRole</span> <span style="color: #009900;">(</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Acl_Role<span style="color: #009900;">(</span>Zend_Amf_Constants<span style="color: #339933;">::</span><span style="color: #004000;">GUEST_ROLE</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span>
 
<span style="color: #666666; font-style: italic;">//Définition des autorisations</span>
<span style="color: #000088;">$acl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">allow</span> <span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$acl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">deny</span> <span style="color: #009900;">(</span>Zend_Amf_Constants<span style="color: #339933;">::</span><span style="color: #004000;">GUEST_ROLE</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">"create"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$acl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">deny</span> <span style="color: #009900;">(</span>Zend_Amf_Constants<span style="color: #339933;">::</span><span style="color: #004000;">GUEST_ROLE</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">"update"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$acl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">deny</span> <span style="color: #009900;">(</span>Zend_Amf_Constants<span style="color: #339933;">::</span><span style="color: #004000;">GUEST_ROLE</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">"delete"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
 
<span style="color: #000088;">$server</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setAcl</span><span style="color: #009900;">(</span><span style="color: #000088;">$acl</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
</pre>
</div>
<p>
  <span style="text-decoration: underline;">Premièrement,</span><br />
  Nous avons dû définir le rôle invité pour pouvoir travailler ses autorisations.
</p>
<p>
  <span style="text-decoration: underline;">Deuxièmement,</span><br />
  Nous avons utilisé le principe des listes noires. Si nous avions utilisez un système de liste blanche, nous aurions du définir l’ensemble des rôles, et l’ensemble des autorisations.<br />
  C’est donc en partant du principe que tout le monde a accès à tout, que nous avons fermé les portes aux anonymes.
</p>
<p>
  <span style="text-decoration: underline;"><strong>Explication des fonctions Deny &amp; Allow :</strong></span><br />
  <strong>Zend_Acl::deny</strong> et <strong>Zend_Acl::allow</strong> utilisent les mêmes arguments.<br />
  Le premier paramètre correspond à un rôle, cela ne change pas des ACL Zend classique.<br />
  Le deuxième paramètre correspond à une ressource. Avec Zend AMF, une ressource correspond à un Service.<br />
  Le troisième paramètre correspond ici à la fonction d’un service AMF.
</p>
<p>
  Nous avons utiliser <strong>null</strong> au niveau du deuxième paramètre pour dire : <strong>tout les services</strong>.
</p>
<h3>
  initAcl
</h3>
<p>
  Ce dernier paragraphe pour vous parlez de mon opposition face aux spécifications de la documentation <a href="http://framework.zend.com/manual/1.10/en/zend.amf.server.html">Zend_AMF_Server</a> :
</p>
<blockquote>
  <p>
    <em>If the ACL object is set, and the class being called defines initAcl() method, this method will be called with the ACL object as an argument. The class then can create additional ACL rules and return TRUE, or return FALSE if no access control is required for this class.</em>
  </p>
</blockquote>
<p>
  En gros, il existe une autre manière de définir les autorisations,<br />
  Si vous avez définit un ACL au niveau de votre Serveur AMF. Ce dernier vérifiera l’existence d’une fonction <strong>initAcl</strong> sur les services lorsqu’ils seront appelés.
</p>
<p>
  Cette fonction est ce que l’on appel un <a href="http://fr.wikipedia.org/wiki/Hook_%28informatique%29">Hook</a>, et vous permets de définir les autorisations et refus au sein de la définition même de vos services.<br />
  Autant vous dire que <strong>niveau maintenance et centralisation de l’information c’est très moyen</strong>..<br />
  De plus, si l’on pend l’exemple de <strong>ZendAmfServiceBrowser</strong>, vous allez devoir modifier la définition de ce service, et cela à chaque fois qu’il y aura une nouvelle version ?
</p>
<p>
  Voici un exemple de fonctionnement
</p>
<div>
  <pre style="font-family: monospace;">
<span style="color: #000000; font-weight: bold;">class</span> Service_Book
<span style="color: #009900;">{</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> initAcl <span style="color: #009900;">(</span><span style="color: #000088;">$acl</span><span style="color: #009900;">)</span>
  <span style="color: #009900;">{</span>
    <span style="color: #000088;">$acl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">deny</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'editor'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Services_Book'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'create'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$acl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">deny</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'editor'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Services_Book'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'update'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$acl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">deny</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'editor'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Services_Book'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'delete'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">}</span>
<span style="color: #009900;">}</span>
</pre>
</div>
<p>
  <a href="http://feedads.g.doubleclick.net/~a/vPTcLnwvx9f3xcWkvfRTtZLrFMI/0/da"><img src="http://feedads.g.doubleclick.net/~a/vPTcLnwvx9f3xcWkvfRTtZLrFMI/0/di" /></a><br />
  <a href="http://feedads.g.doubleclick.net/~a/vPTcLnwvx9f3xcWkvfRTtZLrFMI/1/da"><img src="http://feedads.g.doubleclick.net/~a/vPTcLnwvx9f3xcWkvfRTtZLrFMI/1/di" /></a>
</p><img src="http://feeds.feedburner.com/~r/armetiz/~4/CHkDYD0DYaU" height="1" width="1" />
</div>]]>
      </description>
      <pubDate>Mon, 05 Jul 2010 10:23:10 +0200</pubDate>
      <guid isPermaLink="false">tag:ziki.com,2010:/article/12627053</guid>
    </item>
    <item>
      <title>Mise en production de Zend Framework sur un serveur mutualis&#233;</title>
      <link>http://feedproxy.google.com/%7Er/armetiz/%7E3/gczjxtUs6mM/</link>
      <description>
        <![CDATA[<div class="post_content wiki_text"><p>
  <a href="http://www.armetiz.info/wp-content/uploads/2010/06/zend-framework.png"><img title="Zend Framework Logo" src="http://www.armetiz.info/wp-content/uploads/2010/06/zend-framework.png" height="187" alt="Zend Framework Logo" width="185" /></a>Lorsque l’on dispose d’un serveur dédié, la mise en production d’une application Zend Framework est assez simple; il suffit de modifier le <strong>DocumentRoot</strong> du <strong>VirtualHost</strong>.
</p>
<p>
  Si l’on dispose d’un hébergement mutualisé, il faut aussi pouvoir proposer à nos visiteurs un accès au site via <strong>www.domain.tld</strong> et non pas www.domain.tld/public/
</p>
<h3>
  Première solution
</h3>
<p>
  La première solution, consiste à déplacer le fichier /public/index.php à la racine du domaine et de modifier la définition de la constante <strong>APPLICATION_PATH</strong> de ce même fichier.<br />
  Le seul soucis de cette solution, c’est que les appels aux ressources de type <strong>CSS</strong> ou <strong>JS</strong> devront être modifiés pour pointer vers www.domain.tld/public/<br />
  Personnellement, je trouve cela complètement nul…
</p>
<h3>
  Deuxième solution
</h3>
<p>
  La deuxième solution – bien plus élégante – passe par l’ajout d’un .htaccess à la racine du domaine.
</p>
<div>
  <pre style="font-family: monospace;">
RewriteEngine On
# Only apply to URLs on this domain
RewriteCond %{HTTP_HOST} ^(www.)?domain.tld$
 
# Only apply to URLs that aren't already under folder.
RewriteCond %{REQUEST_URI} !^/public/
 
# Don't apply to URLs that go to existing files or folders.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
 
# Rewrite all those to insert /folder.
RewriteRule ^(.*)$ /public/$1
 
# Also redirect the root folder.
RewriteCond %{HTTP_HOST} ^(www.)?domain.tld$
RewriteRule ^(/)?$ public/index.php [L]
</pre>
</div>
<p>
  Là, tout est magique et fonctionne sans <strong>aucune autre modification</strong> de l’application.<br />
  Pour protéger l’accès à vos autres répertoires, et principalement <strong>/application</strong> qui contient surement vos <strong>mots de passe BDD</strong> non chiffrés. Rajouter un fichier .htaccess contenant
</p>
<div>
  <pre style="font-family: monospace;">
deny from all
</pre>
</div>
<p>
  <a href="http://feedads.g.doubleclick.net/~a/6qoxtaobbOrrVj0wl38s5kAjgTQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/6qoxtaobbOrrVj0wl38s5kAjgTQ/0/di" /></a><br />
  <a href="http://feedads.g.doubleclick.net/~a/6qoxtaobbOrrVj0wl38s5kAjgTQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/6qoxtaobbOrrVj0wl38s5kAjgTQ/1/di" /></a>
</p><img src="http://feeds.feedburner.com/~r/armetiz/~4/gczjxtUs6mM" height="1" width="1" />
</div>]]>
      </description>
      <pubDate>Fri, 04 Jun 2010 10:06:56 +0200</pubDate>
      <guid isPermaLink="false">tag:ziki.com,2010:/article/12513474</guid>
    </item>
    <item>
      <title>Ordonner les resultats Doctrine avec une table de composition</title>
      <link>http://feedproxy.google.com/%7Er/armetiz/%7E3/UIr9sMGNEnY/</link>
      <description>
        <![CDATA[<div class="post_content wiki_text"><p>
  <a href="http://www.armetiz.info/wp-content/uploads/2010/05/composition.png"><img title="composition" src="http://www.armetiz.info/wp-content/uploads/2010/05/composition.png" height="69" alt="" width="333" /></a>
</p>
<p>
  Prenons le schéma ci-dessus.<br />
  Au niveau de la définition, nous avons deux entités : <strong>Bureau</strong> ( rooms ) et <strong>Utilisateur</strong> ( users ). Ces deux entités sont liées par une relation <strong>manyToMany</strong> car un utilisateur peut avoir plusieurs bureaux, et un bureau peut avoir plusieurs utilisateurs.<br />
  Pour pouvoir intégrer l’ordonnancement des utilisateurs au sein d’une pièce, nous avons ajouté le champs «&nbsp;<strong>index</strong>&nbsp;» sur la table de liaison.
</p>
<p>
  Grâce à cette définition, nous pouvons avoir les cas suivants :<br />
  - Robert est à la place #2 dans le bureau d’accueil<br />
  - Robert est à la place #1 dans le bureau du président<br />
  - Annie est à la place #1 dans le bureau du président
</p>
<h3>
  Définition des Domain Model Object
</h3>
<p>
  <a href="http://www.armetiz.info/wp-content/uploads/2010/05/doctrine.gif"><img title="doctrine" src="http://www.armetiz.info/wp-content/uploads/2010/05/doctrine.gif" height="53" alt="doctrine" width="191" /></a><br />
  Nous allons maintenant définir les liaisons Doctrine entre ces objets.<br />
  Je n’utiliserai pas la définition YAML.
</p>
<div>
  <pre style="font-family: monospace;">
abstract <span style="color: #000000; font-weight: bold;">class</span> Model_Base_Room <span style="color: #000000; font-weight: bold;">extends</span> Model_Base
<span style="color: #009900;">{</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setTableDefinition<span style="color: #009900;">(</span><span style="color: #009900;">)</span>
    <span style="color: #009900;">{</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setTableName</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'rooms'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasColumn</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'id_room as idRoom'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'integer'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span>
             <span style="color: #0000ff;">'type'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'integer'</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'fixed'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'unsigned'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'primary'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'autoincrement'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'length'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'4'</span><span style="color: #339933;">,</span>
             <span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasColumn</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'title'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'string'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">80</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span>
             <span style="color: #0000ff;">'type'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'string'</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'fixed'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'unsigned'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'primary'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'notnull'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'autoincrement'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'length'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'80'</span><span style="color: #339933;">,</span>
             <span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">}</span>
 
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setUp<span style="color: #009900;">(</span><span style="color: #009900;">)</span>
    <span style="color: #009900;">{</span>
        parent<span style="color: #339933;">::</span><span style="color: #004000;">setUp</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasMany</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'Model_User as users'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span>
             <span style="color: #0000ff;">'refClass'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Model_CompoRoomsUsers'</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'local'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'id_room'</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'foreign'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'id_user'</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">}</span>
<span style="color: #009900;">}</span>
 
abstract <span style="color: #000000; font-weight: bold;">class</span> Model_Base_User <span style="color: #000000; font-weight: bold;">extends</span> Model_Base
<span style="color: #009900;">{</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setTableDefinition<span style="color: #009900;">(</span><span style="color: #009900;">)</span>
    <span style="color: #009900;">{</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setTableName</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'users'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasColumn</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'id_user as idUser'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'integer'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span>
             <span style="color: #0000ff;">'type'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'integer'</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'fixed'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'unsigned'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'primary'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'autoincrement'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'length'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'4'</span><span style="color: #339933;">,</span>
             <span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasColumn</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'firstname'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'string'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">80</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span>
             <span style="color: #0000ff;">'type'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'string'</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'fixed'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'unsigned'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'primary'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'notnull'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'autoincrement'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'length'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'80'</span><span style="color: #339933;">,</span>
             <span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">}</span>
 
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setUp<span style="color: #009900;">(</span><span style="color: #009900;">)</span>
    <span style="color: #009900;">{</span>
        parent<span style="color: #339933;">::</span><span style="color: #004000;">setUp</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasMany</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'Model_Room as rooms'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span>
             <span style="color: #0000ff;">'refClass'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Model_CompoRoomsUsers'</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'local'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'id_user'</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'foreign'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'id_room'</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">}</span>
<span style="color: #009900;">}</span>
 
abstract <span style="color: #000000; font-weight: bold;">class</span> Model_Base_CompoRoomsUsers <span style="color: #000000; font-weight: bold;">extends</span> Model_Base
<span style="color: #009900;">{</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setTableDefinition<span style="color: #009900;">(</span><span style="color: #009900;">)</span>
    <span style="color: #009900;">{</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setTableName</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'compo_rooms_users'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasColumn</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'id_room as idRoom'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'integer'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span>
             <span style="color: #0000ff;">'type'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'integer'</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'fixed'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'unsigned'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'primary'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'autoincrement'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'length'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'4'</span><span style="color: #339933;">,</span>
             <span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasColumn</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'id_user as idUser'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'integer'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span>
             <span style="color: #0000ff;">'type'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'integer'</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'fixed'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'unsigned'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'primary'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'autoincrement'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'length'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'4'</span><span style="color: #339933;">,</span>
             <span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasColumn</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'index'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'integer'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span>
             <span style="color: #0000ff;">'type'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'integer'</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'fixed'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'unsigned'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'primary'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'notnull'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'autoincrement'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'length'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'4'</span><span style="color: #339933;">,</span>
             <span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">}</span>
 
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setUp<span style="color: #009900;">(</span><span style="color: #009900;">)</span>
    <span style="color: #009900;">{</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasOne</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'Model_User as user'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span>
             <span style="color: #0000ff;">'local'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'id_user'</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'foreign'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'id_user'</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
 
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasOne</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'Model_Room as room'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span>
             <span style="color: #0000ff;">'local'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'id_room'</span><span style="color: #339933;">,</span>
             <span style="color: #0000ff;">'foreign'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'id_room'</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">}</span>
<span style="color: #009900;">}</span>
</pre>
</div>
<h3>
  Ordonner avec DQL
</h3>
<p>
  Après cette longue définition, nous pouvons passer au code DQL qui permettra d’ordonner les résultats en fonction de l’index de notre table de liaison.
</p>
<div>
  <pre style="font-family: monospace;">
<span style="color: #000088;">$query</span>  <span style="color: #339933;">=</span> Doctrine_Query<span style="color: #339933;">::</span><span style="color: #004000;">create</span> <span style="color: #009900;">(</span><span style="color: #009900;">)</span>
  <span style="color: #339933;">-&gt;</span><span style="color: #004000;">select</span> <span style="color: #009900;">(</span><span style="color: #0000ff;">"room.*, users.*"</span><span style="color: #009900;">)</span>
  <span style="color: #339933;">-&gt;</span><span style="color: #004000;">from</span> <span style="color: #009900;">(</span><span style="color: #0000ff;">"Model_Room room"</span><span style="color: #009900;">)</span>
  <span style="color: #339933;">-&gt;</span><span style="color: #004000;">leftJoin</span> <span style="color: #009900;">(</span><span style="color: #0000ff;">"room.users users"</span><span style="color: #009900;">)</span>
  <span style="color: #339933;">-&gt;</span><span style="color: #004000;">orderBy</span> <span style="color: #009900;">(</span><span style="color: #0000ff;">"room.id_room, users.Model_CompoRoomsUsers.index ASC"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
</pre>
</div>
<p>
  Prenez note du fait que nous trions dans un premier temps par identifiant de bureau et ensuite par index. Si nous n’utilisions qu’un tri par index, l’ordre des bureaux serai incohérent.
</p>
<h3>
  Pour aller plus loin
</h3>
<p>
  Nous avons décrit le fonctionnement pour ordonner des résultats à partir d’une table de liaison.<br />
  Mais vous pouvez aussi utiliser cette méthode pour conditionner le résultat.
</p>
<p>
  <a href="http://feedads.g.doubleclick.net/~a/X248qSbPV7pvtMsJyiGOImav4CY/0/da"><img src="http://feedads.g.doubleclick.net/~a/X248qSbPV7pvtMsJyiGOImav4CY/0/di" /></a><br />
  <a href="http://feedads.g.doubleclick.net/~a/X248qSbPV7pvtMsJyiGOImav4CY/1/da"><img src="http://feedads.g.doubleclick.net/~a/X248qSbPV7pvtMsJyiGOImav4CY/1/di" /></a>
</p><img src="http://feeds.feedburner.com/~r/armetiz/~4/UIr9sMGNEnY" height="1" width="1" />
</div>]]>
      </description>
      <pubDate>Tue, 01 Jun 2010 08:00:59 +0200</pubDate>
      <guid isPermaLink="false">tag:ziki.com,2010:/article/12490081</guid>
    </item>
    <item>
      <title>Transfer Object Assembler avec Doctrine 1</title>
      <link>http://feedproxy.google.com/%7Er/armetiz/%7E3/sNjrkdkBbto/</link>
      <description>
        <![CDATA[<div class="post_content wiki_text"><p>
  <a href="http://www.armetiz.info/wp-content/uploads/2010/05/doctrine.gif"><img title="doctrine" src="http://www.armetiz.info/wp-content/uploads/2010/05/doctrine.gif" height="53" alt="doctrine" width="191" /></a>Le <a href="http://java.sun.com/blueprints/corej2eepatterns/Patterns/TransferObject.html">pattern Transfert Object</a> <strong>TO</strong>, <strong>Data Transfert Object DTO</strong>, ou encore <strong>Value Object VO</strong> permet d’échanger des données entre deux applications.
</p>
<p>
  Wikipédia : <em>Son but est de simplifier les transferts de données entre les sous-systèmes d’une application logiciel. Les objets de transfert de données sont souvent utilisés en conjonction des objets d’accès aux données.</em>
</p>
<p>
  Qui dit <strong>Transfert Object</strong>, veux aussi dire <a href="http://java.sun.com/blueprints/corej2eepatterns/Patterns/TransferObjectAssembler.html">Transfert Object Assembler</a>.
</p>
<h3>
  Conversion d’object
</h3>
<p>
  Le pattern <strong>Transfert Object Assembler</strong> permet de passer d’un DTO à un Objet d’accès au données, et inversement.<br />
  C’est le moyen le plus simple pour travailler avec le pattern Data Transert Object et un <strong>ORM</strong>.
</p>
<h3>
  Domain Object Model -&gt; Data Transfert Object
</h3>
<p>
  Avec l’<a href="http://www.doctrine-project.org/">ORM Doctrine</a>, le transfert d’un «&nbsp;<strong>Domain Object Model DOM</strong>&nbsp;» ou ici <strong>Doctrine_Record</strong> vers un <strong>DTO</strong> est très simple.<br />
  Il suffit de réaliser un parser qui analyse l’objet issu de Doctrine, et qui remplit les données du DTO.
</p>
<h3>
  Data Transfert Object -&gt; Domain Object Model
</h3>
<p>
  Convertir un DTO vers un DOM peut s’avère plus complexe.<br />
  En effet, Doctrine utilise des collections d’objet qui lui sont propres, mais a aussi besoin de connaitre les clés primaires et leurs contenus pour pouvoir créer un objet. Car un objet issu de Doctrine_Record n’a pas les même propriétés quand il est existant en base de donnée, ou qu’il est en phase d’être sauvegardé.
</p>
<h3>
  Implémentation de Transfer Object Assembler
</h3>
<p>
  Une implémentation du pattern <strong>Transfert Object Assembler</strong> vient de voir le jour après moult et moult péripéties.
</p>
<p>
  Cette implémentation permet donc le transférer de DTOs à partir de DOMs et inversement.<br />
  Associer au pattern Service Layer, cela peut s’avérer être très pratique.
</p>
<p>
  Voici un exemple simple d’utilisation :
</p>
<div>
  <pre style="font-family: monospace;">
<span style="color: #000088;">$oProgram</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ProgramDTO <span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$oProgram</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">title</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">"Dorothe"</span><span style="color: #339933;">;</span>
 
<span style="color: #000088;">$oVideoDTO</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> VideoDTO <span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$oVideoDTO</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">idVideo</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">30</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$oVideoDTO</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">program</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$oProgram</span><span style="color: #339933;">;</span>
 
<span style="color: #000088;">$oAssembler</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$new</span> Assembler <span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$oVideo</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$oAssembler</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">createDomainObject</span> <span style="color: #009900;">(</span><span style="color: #000088;">$oVideoDTO</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$oVideo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">save</span> <span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
</pre>
</div>
<p>
  Nous avons ici créé une nouvelle entrée dans la table programs, et réalisé une liaison entre ce nouvel objet et la vidéo existante d’identifiant 30.<br />
  Le tout one-shot !
</p>
<p>
  L’intérêt de cette implémentation, c’est d’être fonctionnel avec :
</p>
<ul>
  <li>Les objets persistant
  </li>
  <li>Les objets non-persistant
  </li>
  <li>Les compositions d’objets sur N niveau
  </li>
</ul>
<h3>
  Utilisation avec le pattern Service Layer
</h3>
<p>
  Nous allons voir l’exemple le plus simple, soit l’implémentation des méthodes CRUD pour un objet générique.<br />
  L’utilisation du nommage des classes provient de l’utilisation de Zend Framework.
</p>
<div>
  <pre style="font-family: monospace;">
<span style="color: #009933; font-style: italic;">/**
 * @param Model_DTO_Video
 * @return Model_DTO_Video
 */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> create <span style="color: #009900;">(</span>Model_DTO_Video <span style="color: #000088;">$poVideoDTO</span><span style="color: #009900;">)</span>
<span style="color: #009900;">{</span>
  <span style="color: #000088;">$oModelVideo</span>    <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$oAssembler</span>    <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Model_Utils_Assembler <span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$oModelVideo</span>    <span style="color: #339933;">=</span> <span style="color: #000088;">$oAssembler</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">createDomainObject</span><span style="color: #009900;">(</span><span style="color: #000088;">$poVideoDTO</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$oModelVideo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">save</span> <span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$poVideoDTO</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">idShow</span>  <span style="color: #339933;">=</span> <span style="color: #000088;">$oModelVideo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">idShow</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">return</span> <span style="color: #000088;">$poVideoDTO</span><span style="color: #339933;">;</span>
<span style="color: #009900;">}</span>
 
<span style="color: #009933; font-style: italic;">/**
 * @param Model_DTO_Video
 * @return Model_DTO_Video
 */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> read <span style="color: #009900;">(</span>Model_DTO_Video <span style="color: #000088;">$poVideoDTO</span><span style="color: #009900;">)</span>
<span style="color: #009900;">{</span>
  <span style="color: #000088;">$query</span>  <span style="color: #339933;">=</span> Doctrine_Query<span style="color: #339933;">::</span><span style="color: #004000;">create</span> <span style="color: #009900;">(</span><span style="color: #009900;">)</span>
    <span style="color: #339933;">-&gt;</span><span style="color: #004000;">select</span> <span style="color: #009900;">(</span><span style="color: #0000ff;">"video.*"</span><span style="color: #009900;">)</span>
    <span style="color: #339933;">-&gt;</span><span style="color: #004000;">from</span> <span style="color: #009900;">(</span><span style="color: #0000ff;">"Model_Video video"</span><span style="color: #009900;">)</span>
    <span style="color: #339933;">-&gt;</span><span style="color: #004000;">where</span> <span style="color: #009900;">(</span><span style="color: #0000ff;">"video.id_show = ?"</span><span style="color: #339933;">,</span> <span style="color: #000088;">$piIdVideo</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$oModelVideo</span>  <span style="color: #339933;">=</span> <span style="color: #000088;">$query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetchOne</span> <span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$oAssembler</span>  <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Model_Utils_Assembler <span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">return</span> <span style="color: #000088;">$oAssembler</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">createTransfertObject</span> <span style="color: #009900;">(</span><span style="color: #000088;">$oModelVideo</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #009900;">}</span>
 
<span style="color: #009933; font-style: italic;">/**
 * @param Model_DTO_Video
 * @return Model_DTO_Video
 */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> update <span style="color: #009900;">(</span>Model_DTO_Video <span style="color: #000088;">$poVideoDTO</span><span style="color: #009900;">)</span>
<span style="color: #009900;">{</span>
  <span style="color: #000088;">$oModelVideo</span>  <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$oAssembler</span>  <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Model_Utils_Assembler <span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$oModelVideo</span>  <span style="color: #339933;">=</span> <span style="color: #000088;">$oAssembler</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">createDomainObject</span><span style="color: #009900;">(</span><span style="color: #000088;">$poVideoDTO</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$oModelVideo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">save</span> <span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
 
  <span style="color: #b1b100;">return</span> <span style="color: #000088;">$poVideoDTO</span><span style="color: #339933;">;</span>
<span style="color: #009900;">}</span>
 
<span style="color: #009933; font-style: italic;">/**
 * @param Model_DTO_Video
 * @return Model_DTO_Video
 */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> delete <span style="color: #009900;">(</span>Model_DTO_Video <span style="color: #000088;">$poVideoDTO</span><span style="color: #009900;">)</span>
<span style="color: #009900;">{</span>
  <span style="color: #000088;">$oModelVideo</span>  <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$oAssembler</span>  <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Model_Utils_Assembler <span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$oModelVideo</span>  <span style="color: #339933;">=</span> <span style="color: #000088;">$oAssembler</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">createDomainObject</span><span style="color: #009900;">(</span><span style="color: #000088;">$poVideoDTO</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$oModelVideo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">delete</span> <span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
 
  <span style="color: #b1b100;">return</span> <span style="color: #000088;">$poVideoDTO</span><span style="color: #339933;">;</span>
<span style="color: #009900;">}</span>
</pre>
</div>
<h3>
  Téléchargement
</h3>
<p>
  Contenu de l’archive :
</p>
<ul>
  <li>Implémentation du pattern Transfer Object Assembler
  </li>
  <li>Interface du pattern Transfer Object Assembler
  </li>
  <li>Classe de définition d’un DTO
  </li>
</ul>
<p>
  Pour faire fonctionner l’assembler. Vous devez définir une classe qui hérite de Assembler, et ainsi surchargez la propriété $_relationships avec vos liaisons entre DTO et DOM.
</p>
<p>
  <a href="http://www.armetiz.info/wp-content/uploads/2010/05/Transfert_Object_Assembler_Doctrine_1.zip">Transfert_Object_Assembler_Doctrine_1.zip</a> – 3 Ko.
</p>
<p>
  <a href="http://feedads.g.doubleclick.net/~a/Y5tEEIRUArqTN7diJmWbx2zTTzY/0/da"><img src="http://feedads.g.doubleclick.net/~a/Y5tEEIRUArqTN7diJmWbx2zTTzY/0/di" /></a><br />
  <a href="http://feedads.g.doubleclick.net/~a/Y5tEEIRUArqTN7diJmWbx2zTTzY/1/da"><img src="http://feedads.g.doubleclick.net/~a/Y5tEEIRUArqTN7diJmWbx2zTTzY/1/di" /></a>
</p><img src="http://feeds.feedburner.com/~r/armetiz/~4/sNjrkdkBbto" height="1" width="1" />
</div>]]>
      </description>
      <pubDate>Mon, 31 May 2010 12:06:12 +0200</pubDate>
      <guid isPermaLink="false">tag:ziki.com,2010:/article/12490082</guid>
    </item>
    <item>
      <title>Google I/O : Vid&#233;o, Android et Adobe</title>
      <link>http://feedproxy.google.com/%7Er/armetiz/%7E3/AZ20e3I9nKg/</link>
      <description>
        <![CDATA[<div class="post_content wiki_text"><p>
  Pour ceux qui ne suivent pas l’actualité, Google tient en ce moment des conférences appelées <a href="http://code.google.com/intl/fr/events/io/2010/">Google Input/Ouput</a>.
</p>
<h3>
  Format vidéo Internet
</h3>
<p>
  Pour le premier jour de conférence, nous avons eu droit – entre autre – à l’annonce du format vidéo <a href="http://www.webmproject.org/">WebM</a> qui – normalement – devrai devenir le standard vidéo libre du net.<br />
  La raison de ce nouveau format, c’est que l’utilisation du H.264 est soumise à une licence payante. A cause de cela Firefox ne pouvait pas lire les vidéos H.264…<br />
  <a href="http://www.armetiz.info/wp-content/uploads/2010/05/froyo.png"><img title="froyo" src="http://www.armetiz.info/wp-content/uploads/2010/05/froyo.png" height="168" alt="" width="200" /></a>
</p>
<h3>
  Android 2.2
</h3>
<p>
  Autre nouveauté, concernant <strong>Android</strong>.<br />
  Nous avons eu la confirmation de la nouvelle version Android 2.2 nommé Froyo, qui apporte son lot d’amélioration :
</p>
<ul>
  <li>Support complet de <strong>Flash Player 10.1</strong> et <strong>Adobe AIR 2.5</strong>
  </li>
  <li>2 à 5 fois plus rapide que les anciennes version grâce à un nouveau compilateur <strong>Dalvik JIT</strong>
  </li>
  <li>Navigation internet 2 à 3 fois plus rapide grâce à un nouveau moteur Javascript
  </li>
  <li>Installation des applications sur la carte SD possible en natif
  </li>
  <li>Mise à jour automatique des applications installées à partir du Market
  </li>
</ul>
<p>
  Pour ceux qui développent pour Android, la <a href="http://developer.android.com/sdk/android-2.2.html">version 2.2 du SDK</a> est disponible.
</p>
<h3>
  Google TV
</h3>
<p>
  Pour le coups, je ne vais pas m’étendre dessus, je préfère rediriger vers de l’information bien plus précise.<br />
  Vous pouvez donc aller faire un tour sur le 20minutes : <a href="http://www.20minutes.fr/article/405920/High-Tech-Laborieusement-presente-Google-TV-va-t-il-revolutionner-la-tele.php">HIGH-TECH – Via Android et un processeur Intel, Google veut marier la télé et le Web. Tout le Web…</a>
</p>
<h3>
  Adobe
</h3>
<p>
  A cette occasion, Adobe en a profité pour ouvrir l’accès à la Bêta du <a href="http://labs.adobe.com/technologies/flashplayer10/">Player Flash 10.1 pour Android</a> et à la prerelease de <a href="http://blogs.adobe.com/air/2010/05/air_android_prerelease.html">Adobe AIR pour Android</a>.
</p>
<p>
  Alors que Adobe AIR peut s’installer sur Android 2.1, <strong>FP 10.1 doit être installé sur Android 2.2</strong>.<br />
  C’est dommage car très – très – peu de gens disposent de la nouvelle version Android Froyo, mais cela annonce aussi que Google ne devrai pas tarder à mettre à jour les terminaux <img src="http://www.armetiz.info/wp-includes/images/smilies/icon_wink.gif" alt=";)" />
</p>
<p>
  <object height="240" width="400">
    
    
    
    <embed src="http://www.youtube.com/v/yAZYSVr2Bhc&amp;hl=fr_FR&amp;fs=1&amp;rel=0" height="240" width="400" />
  </object>
</p>
<p>
  <a href="http://feedads.g.doubleclick.net/~a/7moMPrmg4-U3Jnfb_sNnywtdTw8/0/da"><img src="http://feedads.g.doubleclick.net/~a/7moMPrmg4-U3Jnfb_sNnywtdTw8/0/di" /></a><br />
  <a href="http://feedads.g.doubleclick.net/~a/7moMPrmg4-U3Jnfb_sNnywtdTw8/1/da"><img src="http://feedads.g.doubleclick.net/~a/7moMPrmg4-U3Jnfb_sNnywtdTw8/1/di" /></a>
</p><img src="http://feeds.feedburner.com/~r/armetiz/~4/AZ20e3I9nKg" height="1" width="1" />
</div>]]>
      </description>
      <pubDate>Fri, 21 May 2010 10:42:25 +0200</pubDate>
      <guid isPermaLink="false">tag:ziki.com,2010:/article/12461656</guid>
    </item>
    <item>
      <title>Statistique Windows Serveur / Workstation</title>
      <link>http://feedproxy.google.com/%7Er/armetiz/%7E3/tzG-wVnLD4E/</link>
      <description>
        <![CDATA[<div class="post_content wiki_text"><p>
  Il existe un outil de statistique/évènement graphique intégré à Windows 2008 Serveur.
</p>
<p>
  Ici, nous allons voir un outil en ligne de commande qui restitue peu d’informations, mais qui peu être utilisé rapidement et sur les versions <strong>Windows Server Core Edition</strong>.
</p>
<p>
  Il s’agit de <strong>net statistics server</strong>.<br />
  Voici la sortie de cette commande.
</p>
<blockquote>
  <p>
    Statistiques depuis 27/04/2010 20:20:14
  </p>
  <p>
    Sessions acceptées<br />
    Déconnexions automatiques<br />
    Déconnexions sur erreur
  </p>
  <p>
    Kilo-octets envoyés<br />
    Kilo-octets reçus
  </p>
  <p>
    Temps de réponse moyen (ms)
  </p>
  <p>
    Erreurs système<br />
    Violations d’autorisation<br />
    Violations de mot de passe
  </p>
  <p>
    Fichiers utilisés<br />
    Périphériques comm. utilisés<br />
    Travaux d’impression mis en file d’attente
  </p>
  <p>
    Saturation des zones tampon
  </p>
</blockquote>
<p>
  Cette commande existe aussi pour les stations de travail : <strong>net statistics workstation</strong>.
</p>
<p>
  <a href="http://feedads.g.doubleclick.net/~a/jaC6FQQxza6pB_MRXYhV4qcl0ms/0/da"><img src="http://feedads.g.doubleclick.net/~a/jaC6FQQxza6pB_MRXYhV4qcl0ms/0/di" /></a><br />
  <a href="http://feedads.g.doubleclick.net/~a/jaC6FQQxza6pB_MRXYhV4qcl0ms/1/da"><img src="http://feedads.g.doubleclick.net/~a/jaC6FQQxza6pB_MRXYhV4qcl0ms/1/di" /></a>
</p><img src="http://feeds.feedburner.com/~r/armetiz/~4/tzG-wVnLD4E" height="1" width="1" />
</div>]]>
      </description>
      <pubDate>Wed, 28 Apr 2010 10:52:35 +0200</pubDate>
      <guid isPermaLink="false">tag:ziki.com,2010:/article/12378048</guid>
    </item>
    <item>
      <title>Enregistrer les sources Flash au format XML</title>
      <link>http://feedproxy.google.com/%7Er/armetiz/%7E3/Tz_lDb2gMkg/</link>
      <description>
        <![CDATA[<div class="post_content wiki_text"><p>
  <a href="http://www.armetiz.info/wp-content/uploads/2009/12/adobe-lq.png"><img title="Adobe" src="http://www.armetiz.info/wp-content/uploads/2009/12/adobe-lq.png" height="72" alt="" width="43" /></a><strong>Adobe Creative Suite 5</strong> va sortir dans les prochains jours, et hormis <strong>l’iPhone packager</strong> qui semblait être le cheval de bataille cette année, les autres améliorations sont passées un peu à la trappe.
</p>
<p>
  Sur <a href="http://labs.adobe.com/technologies/flashcs5/">Adobe Labs</a> ont peut trouver les nouveautés de Flash CS5, et sur le nouveau <a href="http://blog.mediabox.fr/flash-pro-cs5-les-nouveautes">blog de mediabox</a> la traduction Française.
</p>
<p>
  Personnellement, je remarque un point très intéressant : <strong>XML based FLA files</strong>, où encore <strong>Fichiers FLA basés sur le XML</strong>.<br />
  Qu’est-ce que cela signifie ? Mediabox le définit comme tel :
</p>
<blockquote>
  <p>
    En enregistrant votre document .fla, vous constaterez dans votre boite de dialogue <strong>la possibilité d’enregistrer</strong> votre travail sous un <strong>format non compressé .xfl</strong>. Vous aurez alors la <strong>création d’un dossier</strong> reprenant la structure de votre document et de votre librairie. Il sera alors facile à des personnes tiers non familières de Flash, de pouvoir modifier le contenu de la librairie, en changeant les textes, les images etc. Le tout sans avoir besoin de ré-ouvrir votre document dans Flash et de chercher où est le contenu à modifier.
  </p>
</blockquote>
<p>
  Dans tout les cas, cela signifie que nous pourrons accéder à la structure de nos animations sans passer obligatoirement par les <strong>fichiers FLA</strong>, qui sont des fichiers au <strong>format binaire non ouvert</strong>.<br />
  Mais aussi et surtout, nous pourrons indirectement <strong>automatiser certaines tâches</strong> !
</p>
<p>
  Je prends l’exemple d’un <a href="http://www.projet-elearning.com/">projet eLearning</a> où le nombre de FLA dépasse la centaine. Sur chacun de ces FLA il y a des <strong>éléments redondants</strong>.<br />
  Après avoir livré la version de recette au client, celui-ci nous dit qu’il n’aime pas la tête du personnage Dupon.<br />
  Ce personnage est sur 80% des animations réalisées.
</p>
<p>
  Actuellement, plusieurs solutions s’offre à vous. Vous avez utilisé une <strong>librairie partagée</strong>, il va falloir ré-ouvrir tout les FLA, faire la mise à jour des symboles et re-compiler chaque FLA.<br />
  Si vous n’avez pas de librairie partagée, il faudra remplacer à la main le symbole du personnage dans chaque FLA et lancer la compilation sur chacun.
</p>
<p>
  Avec Adobe Flash CS5, il sera possible d’automatiser la modification d’un élément sur l’ensemble des sources. Celle-ci pouvant être enregistrée au format XML, un simple <strong>script PHP</strong> fera l’affaire.<br />
  Il est déjà possible d’<strong>automatiser la compilation de FLA</strong>, <a href="http://www.gskinner.com/blog/archives/2004/08/jsfl_fla_batch.html">gSkinner</a> et <a href="http://www.mikechambers.com/blog/2003/11/01/flashcommand-flash-2004-command-line-compiler/">Mike Chambers</a> l’ont fait.
</p>
<p>
  <a href="http://www.armetiz.info/wp-content/uploads/2009/11/adobe_air.jpg"><img title="Adobe AIR" src="http://www.armetiz.info/wp-content/uploads/2009/11/adobe_air.jpg" height="150" alt="" width="150" /></a>Je n’ai pas pu tester cette nouvelle version de Flash.<br />
  Il faut donc prendre cela au conditionnel, car il n’est pas dit que Adobe ai pensé à réaliser un compilateur de fichier SWF à partir de source XML.
</p>
<p>
  Mais si tout cela s’avère être exact, il n’est pas impossible de voir apparaître des applications Adobe AIR permettant de modifier des éléments au sein d’un groupe de fichier source XML.
</p>
<p>
  Edit : Valerio Virgillito <strong>Ingénieur chez Adobe</strong> a publié un article concernant le format XFL de Flash CS5 : <a href="http://blog.mencio.com/?p=28">XFL and Live Editing</a>.<br />
  On peut y apprendre des informations intéressantes. Comme le fait que le fichier FLA ne sera plus un fichier binaire fermé, mais un <strong>package de fichier compressé XML</strong>; à la sauce des fichiers Docx surement.<br />
  Mais aussi que les modifications des fichiers composants l’animation seront automatiquement pris en compte par Flash CS5. Je vous conseils de regarder la <strong>vidéo</strong> de son article pour une meilleur visibilité.
</p>
<p>
  <a href="http://feedads.g.doubleclick.net/~a/Ju_LI5KvQ95GmM4GxP07iBKWHaM/0/da"><img src="http://feedads.g.doubleclick.net/~a/Ju_LI5KvQ95GmM4GxP07iBKWHaM/0/di" /></a><br />
  <a href="http://feedads.g.doubleclick.net/~a/Ju_LI5KvQ95GmM4GxP07iBKWHaM/1/da"><img src="http://feedads.g.doubleclick.net/~a/Ju_LI5KvQ95GmM4GxP07iBKWHaM/1/di" /></a>
</p><img src="http://feeds.feedburner.com/~r/armetiz/~4/Tz_lDb2gMkg" height="1" width="1" />
</div>]]>
      </description>
      <pubDate>Thu, 22 Apr 2010 10:25:51 +0200</pubDate>
      <guid isPermaLink="false">tag:ziki.com,2010:/article/12352886</guid>
    </item>
    <item>
      <title>Recherche d&#233;veloppeur d&#8217;application Flash / iPhone</title>
      <link>http://feedproxy.google.com/%7Er/armetiz/%7E3/M5oKx3Ql69c/</link>
      <description>
        <![CDATA[<div class="post_content wiki_text"><p>
  Nous recherchons un <strong>stagiaire</strong> ou un <strong>contrat d’apprentissage</strong> pour nous assister sur le développement des <strong>applications frontend</strong>.<br />
  Voici le speach :
</p>
<blockquote>
  <p>
    <em>Konbini recherche un(e) stagiaire développeur d’applications.<br />
    Créée en 2008 par Lucie Beudet et David Creuzot, entrepreneurs chevronnés du Web, la chaîne vidéo <a href="http://www.konbini.com">konbini.com</a> produit et diffuse en exclusivité des programmes de divertissement originaux.<br />
    <a href="http://www.konbini.com"><img title="konbini logo" src="http://www.armetiz.info/wp-content/uploads/2010/03/konbini_logo.jpg" height="120" alt="konbini logo" width="120" /></a><br />
    <strong>Proposition</strong><br />
    1 contrat en tant que développeur d’application / architecte logiciel dans le secteur Internet / video streaming.<br />
    lieu de travail : Paris (France : Ile de France)<br />
    durée du stage : 6 mois ou plus<br />
    début du stage : au plus tôt<br />
    rémunération : selon convention</em>
  </p>
  <p>
    <strong>Votre mission</strong><br />
    Vous serez chargé(e) du développement d’applications pour iPhone / iPad ainsi que de la réalisation de RIA et RDA en ActionScript3 / Flex.
  </p>
  <p>
    Idéalement en formation bac+4/5 vous connaissez ActionScript 3, Cocoa / CocoaTouch, JAVA/J2EE, PHP5, MySQL, JavaScript Ajax et vous êtes à l’aise avec les formats vidéo pour internet et la notion de streaming.<br />
    Une connaissance de l’interface de Flash ainsi que des notion élémentaires de design d’interface seront un plus.
  </p>
  <p>
    Les qualités recherchées sont la rigueur, l’autonomie et l’esprit d’équipe.
  </p>
</blockquote>
<p>
  N’hésiter pas à nous contacter : <strong>thomas.tourlourat [at] konbini [dot] com</strong> ou <strong>thomas [at] tourlourat [dot] com</strong>
</p>
<p>
  <a href="http://feedads.g.doubleclick.net/~a/TOJSY3DnywIlWY5bcmID9nIqQJA/0/da"><img src="http://feedads.g.doubleclick.net/~a/TOJSY3DnywIlWY5bcmID9nIqQJA/0/di" /></a><br />
  <a href="http://feedads.g.doubleclick.net/~a/TOJSY3DnywIlWY5bcmID9nIqQJA/1/da"><img src="http://feedads.g.doubleclick.net/~a/TOJSY3DnywIlWY5bcmID9nIqQJA/1/di" /></a>
</p><img src="http://feeds.feedburner.com/~r/armetiz/~4/M5oKx3Ql69c" height="1" width="1" />
</div>]]>
      </description>
      <pubDate>Tue, 23 Mar 2010 18:50:46 +0100</pubDate>
      <guid isPermaLink="false">tag:ziki.com,2010:/article/12086383</guid>
    </item>
    <item>
      <title>iFrame hauteur et largeur &#224; 100%</title>
      <link>http://feedproxy.google.com/%7Er/armetiz/%7E3/bcwYZVxcaq8/</link>
      <description>
        <![CDATA[<div class="post_content wiki_text"><p>
  Toujours has been, la balise iframe peut se révéler pratique dans certains cas.<br />
  L’exemple d’utilisation qui me vient à l’esprit, c’est l’affichage d’un fichier PDF.
</p>
<p>
  Personnellement, cela me sert pour afficher mon CV sur <a href="http://thomas.tourlourat.com/" title="CV Ingenieur Informatique Lyon">thomas.tourlourat.com</a>
</p>
<p>
  Pour que le PDF utilise toute la zone du navigateur, il faut utiliser la petite astuce CSS suivante :
</p>
<div>
  <pre style="font-family: monospace;">
&lt;style type<span style="color: #00AA00;">=</span><span style="color: #ff0000;">"text/css"</span><span style="color: #00AA00;">&gt;</span>
html<span style="color: #00AA00;">,</span>body
<span style="color: #00AA00;">{</span>
      <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span><span style="color: #933;"><span style="color: #cc66cc;">100</span>%</span><span style="color: #00AA00;">;</span>
     <span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span><span style="color: #933;"><span style="color: #cc66cc;">100</span>%</span><span style="color: #00AA00;">;</span>
      <span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span><span style="color: #933;">0px</span><span style="color: #00AA00;">;</span>
      <span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span><span style="color: #933;">0px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">}</span>
&lt;/style<span style="color: #00AA00;">&gt;</span>
</pre>
</div>
<p>
  Afficher ensuite votre iFrame
</p>
<div>
  <pre style="font-family: monospace;">
&lt;iframe 
      src="http://tourlourat.com/documents/cv_tourlourat_thomas.pdf" 
      id="cv"
      width="100%"
      height="100%"
      scrolling="auto"
      frameborder="0" &gt;
&lt;/iframe&gt;
</pre>
</div>
<p>
  <a href="http://feedads.g.doubleclick.net/~a/8Fuftseg6alXcCp9oqpS5pkrp4I/0/da"><img src="http://feedads.g.doubleclick.net/~a/8Fuftseg6alXcCp9oqpS5pkrp4I/0/di" /></a><br />
  <a href="http://feedads.g.doubleclick.net/~a/8Fuftseg6alXcCp9oqpS5pkrp4I/1/da"><img src="http://feedads.g.doubleclick.net/~a/8Fuftseg6alXcCp9oqpS5pkrp4I/1/di" /></a>
</p><img src="http://feeds.feedburner.com/~r/armetiz/~4/bcwYZVxcaq8" height="1" width="1" />
</div>]]>
      </description>
      <pubDate>Thu, 18 Mar 2010 13:55:11 +0100</pubDate>
      <guid isPermaLink="false">tag:ziki.com,2010:/article/12048036</guid>
    </item>
    <item>
      <title>Liste des pays du monde au format SQL</title>
      <link>http://feedproxy.google.com/%7Er/armetiz/%7E3/PstgEZT4OSc/</link>
      <description>
        <![CDATA[<div class="post_content wiki_text"><p>
  <a href="http://fr.wikipedia.org/wiki/ISO_3166-1">ISO 3166-1</a> définit un <strong>code unique</strong> pour chaque pays du monde. Il en existe trois versions, chacune ayant une définition différente du code :
</p>
<ul>
  <li>La première utilise une entier à trois chiffres.
  </li>
  <li>La deuxième – alpha2 – utilise deux lettres. Cette version est connue pour la définition des <a href="http://fr.wikipedia.org/wiki/Internet_TLD">domaines de premier niveau</a>.
  </li>
  <li>La troisième – alpha3 – utilise trois lettres.
  </li>
</ul>
<p>
  La nouvelle version de <a href="http://www.armetiz.info/tag/konbini/">Konbini</a> nécessite une liste de pays exhaustive. N’ayant trouvé aucune liste au format SQL pour faire un import dans notre SGBDR, nous avons généré la notre.
</p>
<p>
  La table créée par le script s’appelle <strong>«&nbsp;Countrie&nbsp;»</strong> et contient les champs suivants :
</p>
<ul>
  <li>
    <strong>code</strong> : 250
  </li>
  <li>
    <strong>alpha2</strong> : FR
  </li>
  <li>
    <strong>alpha3</strong> : FRA
  </li>
  <li>
    <strong>langCS</strong> : Francie
  </li>
  <li>
    <strong>langDE</strong> : Frankreich
  </li>
  <li>
    <strong>langEN</strong> : France
  </li>
  <li>
    <strong>langES</strong> : Francia
  </li>
  <li>
    <strong>langFR</strong> : France
  </li>
  <li>
    <strong>langIT</strong> : Francia
  </li>
  <li>
    <strong>langNL</strong> : Frankrijk
  </li>
</ul>
<p>
  Le fichier est encodé en UTF8. <a href="http://www.armetiz.info/wp-content/uploads/2010/03/liste_pays_iso3166-1.txt">A télécharger ici</a>
</p>
<p>
  PS : Table générée <a href="http://www.wout-bosteels.be/countries.xml">à partir d’un fichier XML</a>, lui même généré à partir de la page <a href="http://fr.wikipedia.org/wiki/ISO_3166-1">ISO 3166-1</a> de Wikipédia.<br />
  Elle contient <strong>241 Pays</strong>.
</p>
<p>
  <a href="http://feedads.g.doubleclick.net/~a/y8Uc6iQTyjiwdEl0LmJBGOnvPwk/0/da"><img src="http://feedads.g.doubleclick.net/~a/y8Uc6iQTyjiwdEl0LmJBGOnvPwk/0/di" /></a><br />
  <a href="http://feedads.g.doubleclick.net/~a/y8Uc6iQTyjiwdEl0LmJBGOnvPwk/1/da"><img src="http://feedads.g.doubleclick.net/~a/y8Uc6iQTyjiwdEl0LmJBGOnvPwk/1/di" /></a>
</p><img src="http://feeds.feedburner.com/~r/armetiz/~4/PstgEZT4OSc" height="1" width="1" />
</div>]]>
      </description>
      <pubDate>Thu, 04 Mar 2010 15:13:00 +0100</pubDate>
      <guid isPermaLink="false">tag:ziki.com,2010:/article/12048037</guid>
    </item>
    <item>
      <title>Adobe donne le ton aux utilisateurs iPhone / iPad</title>
      <link>http://feedproxy.google.com/%7Er/armetiz/%7E3/kwfKHVHXCtI/</link>
      <description>
        <![CDATA[<div class="post_content wiki_text"><p>
  Avec un simple message, Adobe donne le ton aux utilisateurs <strong>iPhone</strong> qui souhaitent installer le player <strong>Flash</strong>. Et montre que tout est de la faute à <strong>Apple</strong> si Flash n’est pas présent.
</p>
<p>
  Voici une traduction :<br />
  <em>Apple restreint l’utilisation des technologies requises par les produits comme Flash Player. Tant que Apple ne supprimera pas ces restrictions, Adobe ne pourra pas fournir Flash Player pour l’iPhone ou l’iPod Touch.</em>
</p>
<p>
  <a href="http://www.armetiz.info/wp-content/uploads/2010/02/iphone_flash.png"><img title="iphone_flash" src="http://www.armetiz.info/wp-content/uploads/2010/02/iphone_flash.png" height="240" alt="" width="316" /></a>
</p>
<p>
  <a href="http://feedads.g.doubleclick.net/~a/uxgCmb6EGd5vKb1sobrXd0W-TzU/0/da"><img src="http://feedads.g.doubleclick.net/~a/uxgCmb6EGd5vKb1sobrXd0W-TzU/0/di" /></a><br />
  <a href="http://feedads.g.doubleclick.net/~a/uxgCmb6EGd5vKb1sobrXd0W-TzU/1/da"><img src="http://feedads.g.doubleclick.net/~a/uxgCmb6EGd5vKb1sobrXd0W-TzU/1/di" /></a>
</p><img src="http://feeds.feedburner.com/~r/armetiz/~4/kwfKHVHXCtI" height="1" width="1" />
</div>]]>
      </description>
      <pubDate>Thu, 11 Feb 2010 15:49:39 +0100</pubDate>
      <guid isPermaLink="false">tag:ziki.com,2010:/article/11982781</guid>
    </item>
    <item>
      <title>Un bruit a &#233;t&#233; entendu aux alentours de #Lille</title>
      <link>http://feedproxy.google.com/%7Er/armetiz/%7E3/T1kqREoQ-XE/</link>
      <description>
        <![CDATA[<div class="post_content wiki_text"><p>
  L’actualité sur Twitter est une chose impressionnante à voir.
</p>
<p>
  En quelques secondes, suite à un <strong>bruit présent aux alentours de Lille</strong>, de nombreuses personnes sont venues Twitter leurs questionnement.<br />
  C’est à partir de <a href="http://twitter.com">Twitter.com</a> que vous pouvez suivre les dernières nouvelles en regardant le tag <a href="http://twitter.com/#search?q=%23lille">#Lille</a>.
</p>
<p>
  <a href="http://www.armetiz.info/wp-content/uploads/2009/12/twitter.png"><img title="twitter" src="http://www.armetiz.info/wp-content/uploads/2009/12/twitter.png" height="154" alt="" width="154" /></a>A partir des différents Tweet, <a href="http://ow.ly/13amM">une carte</a> a pu être réalisée indiquant les zones où le bruit a été entendu.
</p>
<p>
  <a href="http://www.jeuxvideo.com/forums/1-21816-970585-7-0-1-0-une-explosion-pres-de-chez-moi-a-lille.htm">Le forum de Jeux-Vidéo.com</a> montre aussi une forte réactivité, ainsi que <a href="http://fr.answers.yahoo.com/question/index?qid=20100202135450AAzR8Br">Questions/Réponses de Yahoo</a> dont les réponses sont plutôt foireuses.
</p>
<p>
  Pendant ce temps, <strong>aucun média standard n’a diffusé</strong> de l’information concernant l’évènement.<br />
  Ce qui montre une fois de plus, que les <strong>réseaux sociaux</strong> sont bien plus réactifs, et qu’en cas de crise, il faudra se tourner vers des solutions «&nbsp;underground&nbsp;» pour avoir des informations fraiches.
</p>
<p>
  PS: C’était Thomas Tourlourat sur Armetiz.info; A vous les studios.
</p>
<p>
  <a href="http://feedads.g.doubleclick.net/~a/shn6Vgh0MULwfVSV6gX4pDHAqhE/0/da"><img src="http://feedads.g.doubleclick.net/~a/shn6Vgh0MULwfVSV6gX4pDHAqhE/0/di" /></a><br />
  <a href="http://feedads.g.doubleclick.net/~a/shn6Vgh0MULwfVSV6gX4pDHAqhE/1/da"><img src="http://feedads.g.doubleclick.net/~a/shn6Vgh0MULwfVSV6gX4pDHAqhE/1/di" /></a>
</p><img src="http://feeds.feedburner.com/~r/armetiz/~4/T1kqREoQ-XE" height="1" width="1" />
</div>]]>
      </description>
      <pubDate>Tue, 02 Feb 2010 23:44:18 +0100</pubDate>
      <guid isPermaLink="false">tag:ziki.com,2010:/article/11907494</guid>
    </item>
    <item>
      <title>Lost is back !</title>
      <link>http://feedproxy.google.com/%7Er/armetiz/%7E3/nzkefyw0bVU/</link>
      <description>
        <![CDATA[<div class="post_content wiki_text"><p>
  En bon gros fan de Lost, je dois vous informer que la dernière saison, soit la saison 6 recommence aujourd’hui sur la chaine <strong>ABC des United States of America</strong> !
</p>
<p>
  <img title="Logo lost" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f3/Lost-transparent.png/120px-Lost-transparent.png" height="51" alt="Logo lost" width="120" />
</p>
<p>
  Pour tout les abonnés de Free disposant de la television sur ADSL, vous pouvez retrouver le premier episode en VOD sur TF1 Vision pour 1.99€. Cette version sera en VOST FR.
</p>
<p>
  PS: Je suis comme un fou !<br />
  PS2: Pour ceux et celles qui souhaitent avoir les sous-titres rapidement, voici un must-have : http://lostsub.110mb.com/
</p>
<div>
  <object height="250" width="360">
    
    
    
  </object>
</div>
<div style="width: 360px; font-size: 11px; padding: 2px 0 4px 0; text-align: center;">
  <a href="http://www.wat.tv/video/lost-messageinabottle-tf1vision-25z4j_komn_.html"><strong>LOST_MessageInABottle_TF1VISION</strong></a> sélectionné dans <a href="http://www.wat.tv/guide/serie-us" title="Séries US">Séries US</a> et <a href="http://www.wat.tv/guide/serie-action" title="Séries Action / Aventure">Séries Action / Aventure</a>
</div>
<p>
  <a href="http://feedads.g.doubleclick.net/~a/iJyd5DyodQ1SHXfPeRXKbq6qyKM/0/da"><img src="http://feedads.g.doubleclick.net/~a/iJyd5DyodQ1SHXfPeRXKbq6qyKM/0/di" /></a><br />
  <a href="http://feedads.g.doubleclick.net/~a/iJyd5DyodQ1SHXfPeRXKbq6qyKM/1/da"><img src="http://feedads.g.doubleclick.net/~a/iJyd5DyodQ1SHXfPeRXKbq6qyKM/1/di" /></a>
</p><img src="http://feeds.feedburner.com/~r/armetiz/~4/nzkefyw0bVU" height="1" width="1" />
</div>]]>
      </description>
      <pubDate>Tue, 02 Feb 2010 09:44:59 +0100</pubDate>
      <guid isPermaLink="false">tag:ziki.com,2010:/article/11901590</guid>
    </item>
    <item>
      <title>La r&#233;volution informatique de notre salon: Apple iPad</title>
      <link>http://feedproxy.google.com/%7Er/armetiz/%7E3/kcMv7IDVWX8/</link>
      <description>
        <![CDATA[<div class="post_content wiki_text"><p>
  <a href="http://www.armetiz.info/wp-content/uploads/2010/01/Logo-Apple7-1-253-3.jpg"><img title="Logo Apple" src="http://www.armetiz.info/wp-content/uploads/2010/01/Logo-Apple7-1-253-3.jpg" height="180" alt="" width="156" /></a>Whaou, je ne pensais pas tomber aussi croque love de ce nouvel outil !
</p>
<p>
  Encore un nouveau produit Apple ? Un gros iPhone ?<br />
  Et bien non, il s’agit là d’une <strong>révolution électronique</strong> aussi bien qu’informatique qui va se faire dans notre salon.
</p>
<p>
  <a href="http://www.apple.com/ipad/">iPad</a> va changer notre utilisation de l’informatique, surtout pour les plus jeunes qui vont grandir avec.<br />
  L’intégration du clavier à taille – quasi – réelle offrira une utilisation autre que celle du divertissement. Les étudiants pourront faire leurs dissertations dans le canapé sans faire attention à l’inclinaison de leurs portables…
</p>
<p>
  <strong>L’accès à l’information</strong> va réellement être banalisée à toute la famille de manière totalement naturelle !<br />
  De plus, le prix de départ de <strong>$500 pour la version Wifi</strong> est proche du marché des laptop bas de gamme. On peut donc espérer une belle vie l’iPad !
</p>
<p>
  Voici la présentation officiel :
</p>
<div>
  <object height="275" width="480">
    
    
    
    <embed src="http://www.dailymotion.com/swf/xc0irm&amp;related=0" height="275" width="480" />
  </object><br />
  <strong><a href="http://www.dailymotion.com/video/xc0irm_ipad-la-tablette-dapple-debarque-en_tech">iPad la tablette d'Apple débarque en vidéo</a></strong><br />
  <em>envoyé par <a href="http://www.dailymotion.com/iQuid">iQuid</a>. – <a href="http://www.dailymotion.com/fr/channel/tech">Les derniers test hi-tech en vidéo.</a></em>
</div>
<p>
  <a href="http://feedads.g.doubleclick.net/~a/c1HWKsn5O719W8SyJs5q8JLaS2o/0/da"><img src="http://feedads.g.doubleclick.net/~a/c1HWKsn5O719W8SyJs5q8JLaS2o/0/di" /></a><br />
  <a href="http://feedads.g.doubleclick.net/~a/c1HWKsn5O719W8SyJs5q8JLaS2o/1/da"><img src="http://feedads.g.doubleclick.net/~a/c1HWKsn5O719W8SyJs5q8JLaS2o/1/di" /></a>
</p><img src="http://feeds.feedburner.com/~r/armetiz/~4/kcMv7IDVWX8" height="1" width="1" />
</div>]]>
      </description>
      <pubDate>Thu, 28 Jan 2010 08:22:37 +0100</pubDate>
      <guid isPermaLink="false">tag:ziki.com,2010:/article/11858115</guid>
    </item>
    <item>
      <title>Konbini se dote d&#8217;un nouveau lecteur embed</title>
      <link>http://feedproxy.google.com/%7Er/armetiz/%7E3/4Bc34mKbcbs/</link>
      <description>
        <![CDATA[<div class="post_content wiki_text"><p>
  Nous allons pouvoir faire tourner les vidéos <a href="http://www.konbini.com">Konbiniènes</a> maintenant <img src="http://www.armetiz.info/wp-includes/images/smilies/icon_wink.gif" alt=";)" />
</p>
<p>
  <object height="275" width="490">
    
    
    
    
    <embed src="http://www.konbini.com/embeded_player/kembed.swf" height="275" width="490" />
  </object>
</p>
<p>
  <a href="http://feedads.g.doubleclick.net/~a/cJ-hXQo6hDK176A16YmeSSi6izk/0/da"><img src="http://feedads.g.doubleclick.net/~a/cJ-hXQo6hDK176A16YmeSSi6izk/0/di" /></a><br />
  <a href="http://feedads.g.doubleclick.net/~a/cJ-hXQo6hDK176A16YmeSSi6izk/1/da"><img src="http://feedads.g.doubleclick.net/~a/cJ-hXQo6hDK176A16YmeSSi6izk/1/di" /></a>
</p><img src="http://feeds.feedburner.com/~r/armetiz/~4/4Bc34mKbcbs" height="1" width="1" />
</div>]]>
      </description>
      <pubDate>Wed, 20 Jan 2010 10:34:11 +0100</pubDate>
      <guid isPermaLink="false">tag:ziki.com,2010:/article/11791031</guid>
    </item>
    <item>
      <title>Installer PHPDocumentor avec WAMP</title>
      <link>http://feedproxy.google.com/%7Er/armetiz/%7E3/FzZrUfbA6nU/</link>
      <description>
        <![CDATA[<div class="post_content wiki_text"><p>
  <img title="Logo php" src="http://www.mariosamson.com/wp-content/uploads/2009/11/php-logo.jpg" height="150" alt="Logo php" width="150" /><a href="http://fr.wikipedia.org/wiki/Phpdocumentor">Wikipédia</a> : phpDocumentor est un outil de documentation écrit en PHP. Il est semblable à l’outil de <strong>javadoc</strong>. Il est sous licence LGPL. Il permet d’aider les développeurs à la <strong>documentation</strong> de leur code. Il analyse les commentaires de leurs codes.
</p>
<p>
  Pour pouvoir s’en servir, il faut installer PEAR avant tout.<br />
  J’utilise <strong>WAMP 2.0i</strong> avec <strong>PHP 5.3</strong> et <strong>Apache 2.2</strong>.
</p>
<h3>
  Installation PEAR avec WAMP
</h3>
<p>
  Utiliser l’invite de commande et exécuter go-pear.bat du répertoire d’installation de WAMP.
</p>
<div>
  <pre style="font-family: monospace;">
cd C:\wamp\bin\php\php5.3.0\
go-pear.bat
</pre>
</div>
<p>
  Si comme moi vous avez un jolie Warning, pas de panique, on va faire autrement
</p>
<div>
  <pre style="font-family: monospace;">
cd C:\wamp\bin\php\php5.3.0\
php.exe -d phar.require_hash=0 PEAR\go-pear.phar
</pre>
</div>
<p>
  Ensuite, suivez le tutoriel de <a href="http://www.6ma.fr/tuto/installer+pear+avec+wamp-455">6ma.fr</a> à la lettre et tout se passera bien.
</p>
<h3>
  Installer phpDocumentor avec PEAR
</h3>
<p>
  PEAR est un <strong>gestionnaire de librairie</strong>, c’est lui qui va se charger de l’installation de <strong>PHPDocumentor</strong><br />
  Pour cela, exécuter les commandes suivantes
</p>
<div>
  <pre style="font-family: monospace;">
cd C:\wamp\bin\php\php5.3.0\
php PEAR/pearcmd.php install phpdocumentor
</pre>
</div>
<p>
  Pour utiliser ce petit outil, je vous laissez avec la documentation officiel de <a href="http://www.phpdoc.org/">PHPDocumentor</a> ainsi qu’un tutoriel pour son <a href="http://blog.bsoftco.com/2009/04/24/tutoriel-sur-comment-generer-une-phpdoc-avec-eclipse/">utilisation avec Eclipse</a>.
</p>
<p>
  <a href="http://feedads.g.doubleclick.net/~a/dYNen8cCWw6cJqzYNuFeQVcB37k/0/da"><img src="http://feedads.g.doubleclick.net/~a/dYNen8cCWw6cJqzYNuFeQVcB37k/0/di" /></a><br />
  <a href="http://feedads.g.doubleclick.net/~a/dYNen8cCWw6cJqzYNuFeQVcB37k/1/da"><img src="http://feedads.g.doubleclick.net/~a/dYNen8cCWw6cJqzYNuFeQVcB37k/1/di" /></a>
</p><img src="http://feeds.feedburner.com/~r/armetiz/~4/FzZrUfbA6nU" height="1" width="1" />
</div>]]>
      </description>
      <pubDate>Tue, 19 Jan 2010 15:53:42 +0100</pubDate>
      <guid isPermaLink="false">tag:ziki.com,2010:/article/11782900</guid>
    </item>
    <item>
      <title>[SQL] Afficher les doublons d&#8217;une table</title>
      <link>http://feedproxy.google.com/%7Er/armetiz/%7E3/EjUsPDNscM4/</link>
      <description>
        <![CDATA[<div class="post_content wiki_text"><p>
  Voici la requête SQL qui permet d’afficher les doublons d’une table.
</p>
<div>
  <pre style="font-family: monospace;">
<span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span>
<span style="color: #993333; font-weight: bold;">FROM</span> tableToCheck
<span style="color: #993333; font-weight: bold;">GROUP</span> <span style="color: #993333; font-weight: bold;">BY</span> fieldToCheck
<span style="color: #993333; font-weight: bold;">HAVING</span> count<span style="color: #66cc66;">(</span><span style="color: #66cc66;">*</span><span style="color: #66cc66;">)</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #cc66cc;">1</span>
</pre>
</div>
<p>
  <a href="http://feedads.g.doubleclick.net/~a/9Rz07K-GD8KGwiAxUC9d4CLxDIo/0/da"><img src="http://feedads.g.doubleclick.net/~a/9Rz07K-GD8KGwiAxUC9d4CLxDIo/0/di" /></a><br />
  <a href="http://feedads.g.doubleclick.net/~a/9Rz07K-GD8KGwiAxUC9d4CLxDIo/1/da"><img src="http://feedads.g.doubleclick.net/~a/9Rz07K-GD8KGwiAxUC9d4CLxDIo/1/di" /></a>
</p><img src="http://feeds.feedburner.com/~r/armetiz/~4/EjUsPDNscM4" height="1" width="1" />
</div>]]>
      </description>
      <pubDate>Tue, 12 Jan 2010 15:44:39 +0100</pubDate>
      <guid isPermaLink="false">tag:ziki.com,2010:/article/11715163</guid>
    </item>
    <item>
      <title>[PHP] Convertir IP en entier</title>
      <link>http://feedproxy.google.com/%7Er/armetiz/%7E3/TX7JpihSc8s/</link>
      <description>
        <![CDATA[<div class="post_content wiki_text"><p>
  Voici un petit script PHP qui permet de convertir une adresse IP en entier.
</p>
<blockquote>
  <p>
    127.0.0.1 donne 2130706433
  </p>
</blockquote>
<p>
  Cela peut-être intéressant pour les systèmes de géolocalisation par IP.
</p>
<div>
  <pre style="font-family: monospace;">
<span style="color: #b1b100;">echo</span> ipToDecimal <span style="color: #009900;">(</span><span style="color: #0000ff;">"127.0.0.1"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//Affiche 2130706433</span>
 
<span style="color: #000000; font-weight: bold;">function</span> ipToDecimal <span style="color: #009900;">(</span><span style="color: #000088;">$_pIP</span><span style="color: #009900;">)</span>
<span style="color: #009900;">{</span>
  <span style="color: #000088;">$aIPDecimale</span>  <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span> <span style="color: #009900;">(</span><span style="color: #0000ff;">"."</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_pIP</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
 
  <span style="color: #b1b100;">for</span> <span style="color: #009900;">(</span><span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span> <span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">&lt;</span> <span style="color: #990000;">count</span> <span style="color: #009900;">(</span><span style="color: #000088;">$aIPDecimale</span><span style="color: #009900;">)</span> <span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">)</span>
  <span style="color: #009900;">{</span>
    <span style="color: #000088;">$aIPDecimale</span><span style="color: #009900;">[</span><span style="color: #000088;">$i</span><span style="color: #009900;">]</span> <span style="color: #339933;">=</span> fillZero <span style="color: #009900;">(</span><span style="color: #990000;">decbin</span> <span style="color: #009900;">(</span><span style="color: #000088;">$aIPDecimale</span><span style="color: #009900;">[</span><span style="color: #000088;">$i</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">}</span>
 
  <span style="color: #000088;">$ipDecimal</span>  <span style="color: #339933;">=</span> fillZero <span style="color: #009900;">(</span><span style="color: #990000;">bindec</span> <span style="color: #009900;">(</span><span style="color: #990000;">implode</span> <span style="color: #009900;">(</span><span style="color: #000088;">$aIPDecimale</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">return</span> <span style="color: #000088;">$ipDecimal</span><span style="color: #339933;">;</span>
<span style="color: #009900;">}</span>
 
<span style="color: #000000; font-weight: bold;">function</span> fillZero <span style="color: #009900;">(</span><span style="color: #000088;">$_pBinary</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_pLimit</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">8</span><span style="color: #009900;">)</span>
<span style="color: #009900;">{</span>
  <span style="color: #b1b100;">while</span> <span style="color: #009900;">(</span><span style="color: #990000;">strlen</span> <span style="color: #009900;">(</span><span style="color: #000088;">$_pBinary</span><span style="color: #009900;">)</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$_pLimit</span><span style="color: #009900;">)</span>
  <span style="color: #009900;">{</span>
    <span style="color: #000088;">$_pBinary</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">"0"</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$_pBinary</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">}</span>
  <span style="color: #b1b100;">return</span> <span style="color: #000088;">$_pBinary</span><span style="color: #339933;">;</span>
<span style="color: #009900;">}</span>
</pre>
</div>
<p>
  <a href="http://feedads.g.doubleclick.net/~a/sdlj2Le-aDSl1uDsOKpwzsEjZoU/0/da"><img src="http://feedads.g.doubleclick.net/~a/sdlj2Le-aDSl1uDsOKpwzsEjZoU/0/di" /></a><br />
  <a href="http://feedads.g.doubleclick.net/~a/sdlj2Le-aDSl1uDsOKpwzsEjZoU/1/da"><img src="http://feedads.g.doubleclick.net/~a/sdlj2Le-aDSl1uDsOKpwzsEjZoU/1/di" /></a>
</p><img src="http://feeds.feedburner.com/~r/armetiz/~4/TX7JpihSc8s" height="1" width="1" />
</div>]]>
      </description>
      <pubDate>Tue, 12 Jan 2010 13:12:14 +0100</pubDate>
      <guid isPermaLink="false">tag:ziki.com,2010:/article/11715164</guid>
    </item>
    <item>
      <title>Quitter 123PEOPLE</title>
      <link>http://feedproxy.google.com/%7Er/armetiz/%7E3/Ovrt9yARUDY/</link>
      <description>
        <![CDATA[<div class="post_content wiki_text"><p>
  Taper votre nom sur Google.<br />
  Si vous avez un compte Facebook, LinkedIn, Viadeo et j’en passe; il y a de fortes chances pour que vous soyez présent sur 123People.<br />
  <a href="http://www.armetiz.info/wp-content/uploads/2010/01/123people.png"><img title="123people" src="http://www.armetiz.info/wp-content/uploads/2010/01/123people.png" height="135" alt="123people" width="275" /></a>
</p>
<p>
  Lorsque je me suis désinscris de <a href="http://www.fabienpretre.com/2009/03/paperblog-comment-se-desinscrire.html">Paperblog</a>, j’ai eu envie de me désinscrire de 123People.<br />
  Le soucis, c’est que je ne me suis <strong>jamais inscrit</strong>, ni vous d’ailleurs.
</p>
<p>
  Il a fallut lutter pendant un bon gros mois. Mais en forçant un peu, on y arrive.<br />
  Voici le mail de l’équipe:<br />
</p>
<blockquote>
  Monsieur Tourlourat,
</blockquote>
<p>
  Veuillez comprendre qu´il y de vos homonymes qui veulent bien figurer<br />
  dans notre site et nous ne pouvons pas blocquer votre nom.
</p>
<p>
  Afin de vous aider, veuillez nous envoyer les liens vous concernant que<br />
  vous ne souhaitez plus qu’ils soient affichés en résultat. (123people ne<br />
  trouve et n’affiche des données exclusivement liées à une personne<br />
  puisque la recherche n’est pas liée aux personnes spécifiques, mais aux<br />
  noms)
</p>
<p>
  On fera le nécessaire pour que les liens vous concernant soient blocqués<br />
  définitivement.
</p>
<p>
  Salutations distinguées,
</p>
<p>
  Il y en a marre des sites qui fédèrent d’autres sites sans demander la permission aux propriétaires des informations.
</p>
<p>
  <a href="http://feedads.g.doubleclick.net/~a/5JbNcmflbildgZ2HkPGMMkM04b8/0/da"><img src="http://feedads.g.doubleclick.net/~a/5JbNcmflbildgZ2HkPGMMkM04b8/0/di" /></a><br />
  <a href="http://feedads.g.doubleclick.net/~a/5JbNcmflbildgZ2HkPGMMkM04b8/1/da"><img src="http://feedads.g.doubleclick.net/~a/5JbNcmflbildgZ2HkPGMMkM04b8/1/di" /></a>
</p><img src="http://feeds.feedburner.com/~r/armetiz/~4/Ovrt9yARUDY" height="1" width="1" />
</div>]]>
      </description>
      <pubDate>Tue, 12 Jan 2010 11:16:41 +0100</pubDate>
      <guid isPermaLink="false">tag:ziki.com,2010:/article/11715165</guid>
    </item>
    <item>
      <title>R&#233;siliation abonnement SFR sous engagement</title>
      <link>http://feedproxy.google.com/%7Er/armetiz/%7E3/xpFEiDnLvMM/</link>
      <description>
        <![CDATA[<div class="post_content wiki_text"><p>
  <a href="http://www.armetiz.info/wp-content/uploads/2010/01/logo-sfr.jpg"><img title="logo_sfr" src="http://www.armetiz.info/wp-content/uploads/2010/01/logo-sfr.jpg" height="76" alt="logo_sfr" width="75" /></a>Combien d’entre vous ont vus leurs abonnements téléphoniques reconduits à la suite d’un appel commercial bien mené ?<br />
  Normalement, je leurs dit non à <strong>ces crevards</strong>, sauf que pour 2009 j’ai cru que les opérateurs avaient changés. Que né ni !
</p>
<p>
  On est en 2010, et <strong>les opérateurs téléphoniques se moquent encore des clients qui sont chez eux</strong>. Seuls ceux qui sont en fin de contrat, ou ceux qui vont arrivés sont choyés.<br />
  C’est une honte !
</p>
<p>
  Maintenant, prenons <a href="http://legifrance.gouv.fr/affichCodeArticle.do;jsessionid=273B637D7C0FE7F5AD7E14FCDED64869.tpdjo09v_2?idArticle=LEGIARTI000006292091&amp;cidTexte=LEGITEXT000006069565&amp;dateTexte=20091225">l’article L121-27</a> stipulant : <em>A la suite d’un démarchage par téléphone ou par tout moyen technique assimilable, le professionnel doit adresser au consommateur une confirmation de l’offre qu’il a faite. Le consommateur n’est engagé que par sa signature.</em>
</p>
<p>
  Personnellement, je n’ai jamais rien signé pour être ré-engager.
</p>
<p>
  <a href="http://www.armetiz.info/wp-content/uploads/2010/01/symbole-de-t%C3%A9l%C3%A9phone-portable-thumb1711886.jpg"><img title="symbole-de-téléphone-portable-thumb1711886" src="http://www.armetiz.info/wp-content/uploads/2010/01/symbole-de-t%C3%A9l%C3%A9phone-portable-thumb1711886.jpg" height="120" alt="" width="120" /></a>Fin décembre 2009, j’envoie une lettre A/R demandant l’annulation de mon engagement.<br />
  Le 11 Janvier 2010, je reçois un appel du <strong>service client SFR</strong> m’informant qu’il pouvait annuler mon ré-engagement, mais que je perdrai la réduction de 10% sur ma facture. Tant pis pour les 10% !
</p>
<p>
  Il est honteux de voir comment les opérateurs gèrent leurs clients.<br />
  <a href="http://www.armetiz.info/wp-content/uploads/2010/01/logo_free_1_0.jpg"><img title="logo_free" src="http://www.armetiz.info/wp-content/uploads/2010/01/logo_free_1_0.jpg" height="83" alt="logo_free" width="200" /></a>Vivement que Free révolutionne ce petit monde de chien galeux.
</p>
<p>
  PS: Voici <a href="http://www.armetiz.info/wp-content/uploads/2010/01/resiliation_sfr_anonyme.pdf">la lettre de résiliation</a> que j’ai envoyé, n’hésiter pas à l’utiliser pour vous.<br />
  PS 2: iPhone, Nexus One, HTC…
</p>
<p>
  <a href="http://feedads.g.doubleclick.net/~a/_7JXlJO01n6CsyhHeRvWMDjm1Yc/0/da"><img src="http://feedads.g.doubleclick.net/~a/_7JXlJO01n6CsyhHeRvWMDjm1Yc/0/di" /></a><br />
  <a href="http://feedads.g.doubleclick.net/~a/_7JXlJO01n6CsyhHeRvWMDjm1Yc/1/da"><img src="http://feedads.g.doubleclick.net/~a/_7JXlJO01n6CsyhHeRvWMDjm1Yc/1/di" /></a>
</p><img src="http://feeds.feedburner.com/~r/armetiz/~4/xpFEiDnLvMM" height="1" width="1" />
</div>]]>
      </description>
      <pubDate>Mon, 11 Jan 2010 22:16:08 +0100</pubDate>
      <guid isPermaLink="false">tag:ziki.com,2010:/article/11710128</guid>
    </item>
  </channel>
</rss>
