<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Le Potlatch</title>
	<atom:link href="http://www.lepotlatch.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lepotlatch.org</link>
	<description>C&#039;est pas un cadeau</description>
	<lastBuildDate>Sun, 08 Jan 2012 07:27:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Durée de vie des produits et obsolescence programmée</title>
		<link>http://www.lepotlatch.org/2011/11/duree-de-vie-des-produits-et-obsolescence-programmee/</link>
		<comments>http://www.lepotlatch.org/2011/11/duree-de-vie-des-produits-et-obsolescence-programmee/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 17:43:38 +0000</pubDate>
		<dc:creator>Damien Ravé</dc:creator>
				<category><![CDATA[Ecologie]]></category>
		<category><![CDATA[consommation]]></category>
		<category><![CDATA[déchets]]></category>
		<category><![CDATA[économie]]></category>
		<category><![CDATA[environnement]]></category>
		<category><![CDATA[industrie]]></category>
		<category><![CDATA[société]]></category>

		<guid isPermaLink="false">http://www.lepotlatch.org/?p=341</guid>
		<description><![CDATA[J&#8217;ai écrit un article sur l&#8217;obsolescence programmée, qui pose la question suivante : que faire si l&#8217;on veut acheter des produits fiables ? A-t-on réellement le choix ? Sans vouloir vous gâcher la surprise, la conclusion est : il y &#8230; <a href="http://www.lepotlatch.org/2011/11/duree-de-vie-des-produits-et-obsolescence-programmee/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai écrit un article sur l&#8217;obsolescence programmée, qui pose la question suivante : que faire si l&#8217;on veut acheter des produits fiables ? A-t-on réellement le choix ? Sans vouloir vous gâcher la surprise, la conclusion est : il y a du boulot !</p>
<p>A lire sur www.commentreparer.com : <strong><a href="http://www.commentreparer.com/pages/voir/id/12/Duree-de-vie-des-produits-qui-veut-encore-de-l-obsolescence-programmee">Durée de vie des produits : qui a envie de l&#8217;obsolescence programmée ?</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lepotlatch.org/2011/11/duree-de-vie-des-produits-et-obsolescence-programmee/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Outil de recherche de sites pour le linkbuilding et blog référencement</title>
		<link>http://www.lepotlatch.org/2011/09/outil-de-recherche-de-sites-pour-le-linkbuilding-et-blog-referencement/</link>
		<comments>http://www.lepotlatch.org/2011/09/outil-de-recherche-de-sites-pour-le-linkbuilding-et-blog-referencement/#comments</comments>
		<pubDate>Fri, 09 Sep 2011 16:45:41 +0000</pubDate>
		<dc:creator>Damien Ravé</dc:creator>
				<category><![CDATA[Développement PHP]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[linkbuilding]]></category>
		<category><![CDATA[référencement]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://www.lepotlatch.org/?p=339</guid>
		<description><![CDATA[J&#8217;ai la joie de vous présenter mon nouveau projet d&#8217;application d&#8217;aide au référencement. Qu&#8217;est-ce donc ? A qui s&#8217;adresse-t-elle ? Lisez : Vous souhaitez développer les liens pour votre campagne de référencement mais trouver les bons sites où vous référencer &#8230; <a href="http://www.lepotlatch.org/2011/09/outil-de-recherche-de-sites-pour-le-linkbuilding-et-blog-referencement/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="photo right droite alignright" src="http://link-builder.fr/blog/wp-content/uploads/capture-ecran-outil-linkbuilding-beta-300x270.png" alt="Logiciel de référencement" /> J&#8217;ai la joie de vous présenter mon nouveau projet d&#8217;<strong>application d&#8217;aide au référencement</strong>. Qu&#8217;est-ce donc ? A qui s&#8217;adresse-t-elle ? Lisez :</p>
<p>Vous souhaitez <strong>développer les liens</strong> pour votre campagne de référencement mais trouver les bons sites où vous référencer vous prend trop de temps ? Vous avez défini quelques dizaines de mots-clés et vous aimeriez <strong>tester toutes les combinaisons de blogs/annuaire/site web/actualités ou vidéo</strong> sur ce thème. Et vous aimeriez bien avoir les 50 ou  100 meilleurs résultats sur toutes ces combinaisons de mots-clés.</p>
<p>Oui, mais vous n&#8217;avez pas le temps de lancer 4000 requêtes à la main, une par une. Et puis Excel commence à atteindre ses limites pour <strong>trier et classer les 400000 sites</strong> qu&#8217;elles renvoient. Pas facile de regrouper les sites par domaine, de trouver les concurrents, de prioriser les plus importants ou de connaître leurs principales métriques. Et puis vous aimeriez <strong>envoyer des demandes de liens personnalisés</strong> (par e-mail, par formulaire) ou commenter sur les blogs en gardant une trace de toutes les demandes, mais là aussi c&#8217;est vite chronophage.</p>
<p>Vous avez besoin d&#8217;un <a href="http://link-builder.fr">outil de linkbuilding qui prend en charge tout le processus de recherche, de qualification et de suivi des liens</a>. C&#8217;est à cela que sert LinkBuilder.</p>
<p>Actuellement en bêta privée, cet outil a pour but de vous faire gagner du temps dans votre création de liens.</p>
<p>En complément, obtenez des <a href="http:/link-builder.fr/blog">conseils sur le référencement et le netlinking</a> sur mon blog référencement.</p>
<h2><a href="http://link-builder.fr">LinkBuilder : l&#8217;application de recherche de liens</a></h2>
]]></content:encoded>
			<wfw:commentRss>http://www.lepotlatch.org/2011/09/outil-de-recherche-de-sites-pour-le-linkbuilding-et-blog-referencement/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Utiliser les tags Zend_Cache_Frontend_Page avec un site participatif</title>
		<link>http://www.lepotlatch.org/2011/07/utiliser-les-tags-zend_cache_frontend_page-avec-un-site-participatif/</link>
		<comments>http://www.lepotlatch.org/2011/07/utiliser-les-tags-zend_cache_frontend_page-avec-un-site-participatif/#comments</comments>
		<pubDate>Wed, 13 Jul 2011 00:20:45 +0000</pubDate>
		<dc:creator>Damien Ravé</dc:creator>
				<category><![CDATA[Développement PHP]]></category>
		<category><![CDATA[application Web]]></category>
		<category><![CDATA[tutoriel]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Zend]]></category>

		<guid isPermaLink="false">http://www.lepotlatch.org/?p=331</guid>
		<description><![CDATA[Ayant mis en place le système de cache de Zend Framework avec un <a href="http://www.commentreparer.com">site participatif</a> où les internautes publient des contenus des dizaines de fois par jour, je partage mon expérience sur cette fonctionnalité peu documentée. Et sur ses limitations. <a href="http://www.lepotlatch.org/2011/07/utiliser-les-tags-zend_cache_frontend_page-avec-un-site-participatif/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Il y a des domaines où le Zend Framework, en dépit de ses immenses possibilités, manque un peu de clarté. Si utiliser le frontend Page (qui met en cache l&#8217;intégralité d&#8217;une page en fonction de la requête : GET, POST, COOKIE, etc.) est particulièrement facile avec Zend_Cache, gérer efficacement la purge des pages est moins évident.</p>
<p>Sur un <a href="http://www.groupe-sos.org">site institutionnel</a> mis à jour peu fréquemment (une fois par jour) et à trafic modéré, la méthode classique de vidage complet du cache (<code>$cache->clean()</code>) peut être employée. Pendant les minutes qui suivent, les visiteurs du site subiront quelques ralentissements, le temps que le cache se reconstitue.</p>
<p>Mais sur un <a href="http://www.commentreparer.com">site participatif</a> où les internautes publient des contenus des dizaines de fois par jour, cette méthode simple atteint ses limites. Pour améliorer les performances du cache, il devient important d&#8217;être sélectif dans l&#8217;invalidation des pages, en se restreignant uniquement à celles qui sont affectées par le changement. C&#8217;est ici qu&#8217;intervient le système de tags de Zend_Cache.</p>
<h2>Les tags</h2>
<p>Il est possible d&#8217;associer des tags spécifiques à chacune des pages ou urls définies dans le cache. On pourra ensuite supprimer, au moment de la mise à jour, uniquement les pages concernées. Supposons que vous ayez une page d&#8217;accueil listant des actus ainsi que les dernières questions d&#8217;utilisateurs, un moteur de recherche de questions, et des pages d&#8217;articles HTML qui changent rarement. Lorsqu&#8217;un utilisateur ajoute une question, on voudra mettre à jour l&#8217;accueil et les pages de résultats du moteur de recherche, mais pas les pages HTML. On définira donc des tags appropriés à chaque sous forme d&#8217;un tableau associatif, dans la déclaration des regexp :</p>
<pre><code>
$frontendOptions = array(

    <span class="commentaire">// Options de base du cache de page</span>,

    <span class="commentaire">// Liste des pages avec leurs tags</span>
    'regexps' => array(

        '^/$' => array(
            'cache' => true,
            'specific_lifetime' => 3600,
            'tags' => array('index','questions','actus')
            ),

        '^/reparations/liste' => array(
            'cache' => true,
            'tags' => array('questions')),

        '^/pages' => array(
            'cache' => true,
            'tags' => array('pages')),

        '^/[0-9]+/.*' => array(
            'cache' => true,
            'tags' => array('questions')
            )
    )
);
</code></pre>
<p>Lors de la mise à jour d&#8217;une fiche, on appellera, juste après avoir enregistré les modifications dans la base de données, la méthode de vidage du cache pour chaque tag :</p>
<pre><code>
<span class="commentaire">// On sauve une question en BDD
// On suppose que le cache a été instancié dans le bootstrap
// et est accessible dans la variable App::$cache</span>
App::$cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, 'index');
App::$cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, 'liste');

</code></pre>
<div class="encadre">Remarque : on peut passer un array de tags à la méthode clean(), mais elle fonctionne en mode AND et non OR : seules seront supprimées les pages vérifiant TOUS les tags, et non la liste de toutes les pages vérifiant UN tag. Pour supprimer toutes les pages répondant à une liste de tags, il faut appeler la méthode plusieurs fois. En ce qui me concerne, je règle cette question en l&#8217;appelant via une méthode App::viderCache($tags) qui prend un array en argument et les supprime un par un.</div>
<h2>Un cache plus sélectif ?</h2>
<p>Vous pourrez, à juste titre, trouver que ce système d&#8217;invalidation de cache reste très approximatif. Après tout, si notre site comporte 100000 questions, remettre à jour le tag <strong>questions</strong> va purger tous ces contenus d&#8217;un coup, ce qui n&#8217;est pas très efficace. Je ne crois pas que Zend_Cache propose un système plus précis via les Regexp, mais on peut ruser en segmentant à la main ses enregistrements. Par exemple, vous pouvez parfaitement créer une règle qui concerne toutes les questions dont l&#8217;identifiant se termine par le chiffre 1, et lui affecter le tag question_1, puis ceux qui terminent par 2 auront question_2, etc. jusqu&#8217;à 0. En regexp, on aura quelque chose comme ça (à tester) :</p>
<pre><code>
'regexps' => array(
    '^/[0-9]*1/.*' => array(
        'cache' => true,
        'tags' => array('questions_1')
    ),
    '^/[0-9]*2/.*' => array(
        'cache' => true,
        'tags' => array('questions_2')
    ),
    <span class="commentaire">etc.</span>
);
</code></pre>
<p>Lorsqu&#8217;on voudra invalider le cache après avoir mis à jour ou créé une question, on pourra donc appeler la fonction clean() avec le tag correspondant au dernier chiffre de l&#8217;identifiant de cette question. Ainsi à chaque mise à jour, on ne touchera qu&#8217;à 1/10<sup>ème</sup> des caches. Mais on peut aller encore plus loin : il y a peut-être une limite au nombre de regexps des Frontends Zend, mais je pense qu&#8217;on peut sans problème utiliser les 2 derniers chiffres en itérant de 00 à 99 (en traitant séparément les enregistrements de 1 à 9) avec une boucle for qui ajoute des lignes au tableau regexps et génère les tags appropriés :</p>
<pre><code>
$regexps = array(

    <span class="commentaire">// Pages de base</span>

);

for ($i = 0; $i <= 99; $i++)
{

    if (strlen($i) == 1)
    {
        $regexps[] = array(
            '^/' . $i . '/.*' => array(
                'cache' => true,
                'tags' => array('questions_' . $i)
            )
        );

    }
    $ids = str_pad($i, 2, '0', STR_PAD_LEFT);

    $regexps[] = array(
        '^/[0-9]*' . $ids . '/.*' => array(
            'cache' => true,
            'tags' => array('questions_' . $ids)
        )
    );
)
</code></pre>
<p>Les plus aventureux pourraient même tester un regexp à 3 chiffres, ou pourquoi pas couvrir l&#8217;intégralité des identifiants de la base (1 à 5000, 1 à 10000 ?), mais à partir d&#8217;une certaine taille le chargement du cache risque de devenir coûteux en ressources mémoire et CPU. Il faut trouver le bon compromis pour avoir un rechargement assez régulier mais sans trop multiplier les tags. </p>
<h2>Le cas des codes Google Analytics/Google Adsense</h2>
<p>Si vous utilisez des cookies pour authentifier des utilisateurs et que vous voulez bénéficier du cache, vous souhaitez probablement que chaque utilisateur ait une page en cache adaptée à son profil (compte, informations personnelles, contenus personnalisés, etc.). Dans ce cas vous activerez l&#8217;option <code>cache_with_cookies_variables</code> et <code>make_id_with_cookie_variables</code> du Frontend. Malheureusement, les scripts Google Analytics et Google Adsense génèrent leurs propres cookies pour TOUS les utilisateurs, ce qui fait que le cache est régénéré même pour les utilisateurs non authentifiés (qui devraient tous avoir le même contenu sur une url donnée). Pire, ces cookies changent de valeur à chaque rechargement de page, si bien que le cache est invalidé à chaque fois.</p>
<p><a href="http://blog.feryn.eu/2009/06/zend_cache_frontend_page-google-analytics-cookies/">Un blog a identifié ce problème et propose une solution</a> que j&#8217;ai adaptée : créer une classe Frontend_Page personnalisée qui ne tient pas compte des cookies Google. Cette classe hérite de Zend_Cache_Frontend_Cache et redéfinit uniquement la méthode _makePartialId() qui boucle sur les différentes variables pour créer un identifiant unique. Il suffit d&#8217;éliminer les Cookies commençant par un double underscore (__utmz, __utma, etc.) pour qu&#8217;ils ne soient pas pris en compte dans la création de l&#8217;identifiant unique :</p>
<pre><code>
<span class="commentaire">// Partie à modifier dans la méthode _makePartialId()</span>
case 'Cookie':
    if (isset($_COOKIE)) {
     $my_cookie = $_COOKIE;
     foreach($my_cookie as $key=>$val){
        // remove google analytics cookie
        if(false !== strpos($key,"__")){
            unset($my_cookie[$key]);
        }

     }
     $var = $my_cookie;
    } else {
      $var = null;
    }
    break;
</pre>
<p></code></p>
<h2>Conclusion</h2>
<p>En dépit de ces limitations, le cache de pages est un outil pratique, car il couvre l'ensemble d'un site sans nécessiter de s'intercaler dans chacun des contrôleurs de l'application (sauf lors de l'invalidation, bien sûr). On lui pardonnera donc son côté un peu trop radical. Pour un travail d'orfèvre (cache par page, par requête SQL), on pourra lui préférer d'autres Frontends comme Zend_Cache_Frontend_Output ou Zend_Cache_Core. Mais il faudra le déployer partout dans l'application, en plus de définir les tags, ce qui est plus laborieux. A vous de voir.</p>
<h2>Code complet</h2>
<h3>Dans le bootstrap (class App) :</h3>
<pre><code>
class App {

    public $cache;

    <span class="commentaire">// functions d'instanciation du MVC, DB, etc.</span>

    /**
    * Active le cache de pages
    *
    */
    public function usePageCache()
    {

        $debug_cache = true; <span class="commentaire">// Activé en développement, pas en production</span>
        $frontendOptions = array(
            'lifetime' => 86400,
            'cache_id_prefix' => 'cr_',
            'automatic_serialization' => true,
            'debug_header' => $debug_cache,
            'automatic_cleaning_factor' => 100, <span class="commentaire">// Une fois sur 100, il vide les caches obsolètes automatiquement</span>

            <span class="commentaire">// On désactive le cache par défaut, on le réactivera plus tard par Regexp</span>
            'default_options' => array(
                'cache' => false,
                'cache_with_get_variables' => true,
                'cache_with_post_variables' => false,
                'cache_with_session_variables' => true,
                'cache_with_files_variables' => false,
                'cache_with_cookie_variables' => true, <span class="commentaire">// Uniquement si vous voulez cacher les pages des utilisateurs loggés</span>
                'make_id_with_get_variables' => true,
                'make_id_with_post_variables' => true,
                'make_id_with_session_variables' => true,
                'make_id_with_files_variables' => true,
                'make_id_with_cookie_variables' => true,<span class="commentaire">// Pour les utilisateurs loggés</span>

            ),
            <span class="commentaire">// On ne cache que les pages correspondant aux URL ci-dessous</span>
            'regexps' => array(

                '^/$' => array(
                    'cache' => true,
                    'specific_lifetime' => 3600,
                    'tags' => array('index','questions','actus')
                    ),

                '^/reparations/liste' => array(
                    'cache' => true,
                    'tags' => array('questions')),

                '^/pages' => array(
                    'cache' => true,
                    'tags' => array('pages')),

                '^/[0-9]+/.*' => array(
                    'cache' => true,
                    'tags' => array('questions')
                    )
            )
        );
        $backendOptions = array(
            'cache_dir' => ROOT_PATH . '/tmp'
        );

        $front = new My_CacheFrontendPageGA($frontendOptions);
        App::$cache = Zend_Cache::factory(
            $front,
            'File',
            $frontendOptions,
            $backendOptions
        );

        App::$cache->start();

    /**
    * Vide le cache : intégralement ou selon une liste de tags
    *
    * @param array $tags
    */
    function viderCache($tags = null)
    {
        if (is_array($tags))
        {
            foreach ($tags as $tag)
            {
                $tag = array($tag);
                App::$cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, $tag);
            }
        }
        else
        {
            App::$cache->clean();
        }
    }
</code></pre>
<h3>Fichier de classe library/My/CacheFrontendPageGA.php</h3>
<pre><code>&lt;?php
class My_CacheFrontendPageGA extends Zend_Cache_Frontend_Page {

    /**
     * Make a partial id depending on options
     *
     * @param  string $arrayName Superglobal array name
     * @param  bool   $bool1     If true, cache is still on even if there are some variables in the superglobal array
     * @param  bool   $bool2     If true, we have to use the content of the superglobal array to make a partial id
     * @return mixed|false Partial id (string) or false if the cache should have not to be used
    */
    protected function _makePartialId($arrayName, $bool1, $bool2)
    {
        switch ($arrayName) {
        case 'Get':
            $var = $_GET;
            break;
        case 'Post':
            $var = $_POST;
            break;
        case 'Session':
            if (isset($_SESSION)) {
                $var = $_SESSION;
            } else {
                $var = null;
            }
            break;
        case 'Cookie':
            if (isset($_COOKIE)) {
              $my_cookie = $_COOKIE;
              foreach($my_cookie as $key=>$val){
                 // remove google analytics cookie
                 if(false !== strpos($key,"__")){
                     unset($my_cookie[$key]);
                 }

              }
              $var = $my_cookie;
           } else {
               $var = null;
           }
           break;
        case 'Files':
            $var = $_FILES;
            break;
        default:
            return false;
        }
        if ($bool1) {
            if ($bool2) {
                return serialize($var);
            }
            return '';
        }
        if (count($var) > 0) {
            return false;
        }
        return '';
    }

}

</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.lepotlatch.org/2011/07/utiliser-les-tags-zend_cache_frontend_page-avec-un-site-participatif/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Modèle de tableau de fonctionnalités pour la création d&#8217;un site Web</title>
		<link>http://www.lepotlatch.org/2011/05/modele-de-tableau-de-fonctionnalites-pour-la-creation-dun-site-web/</link>
		<comments>http://www.lepotlatch.org/2011/05/modele-de-tableau-de-fonctionnalites-pour-la-creation-dun-site-web/#comments</comments>
		<pubDate>Sun, 22 May 2011 09:54:14 +0000</pubDate>
		<dc:creator>Damien Ravé</dc:creator>
				<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[cahier des charges]]></category>
		<category><![CDATA[création de site]]></category>
		<category><![CDATA[modèle]]></category>
		<category><![CDATA[site web]]></category>

		<guid isPermaLink="false">http://www.lepotlatch.org/?p=312</guid>
		<description><![CDATA[Il y a quelques mois j&#8217;ai publié un modèle de cahier des charges pour la création d&#8217;un site Web qui m&#8217;a valu pas mal de retours positifs. Ce cahier des charges était plutôt léger sur les spécifications fonctionnelles (le listing &#8230; <a href="http://www.lepotlatch.org/2011/05/modele-de-tableau-de-fonctionnalites-pour-la-creation-dun-site-web/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Il y a quelques mois j&#8217;ai publié un <a href="http://www.lepotlatch.org/2010/09/modele-de-cahier-des-charges-de-site-web/">modèle de cahier des charges pour la création d&#8217;un site Web</a> qui m&#8217;a valu pas mal de retours positifs.</p>
<p>Ce cahier des charges était plutôt léger sur les <strong>spécifications fonctionnelles</strong> (le listing des fonctionnalités), et j&#8217;indiquais aux lecteurs qu&#8217;ils pouvaient me solliciter pour obtenir un exemple de tableau de fonctionnalités à intégrer en annexe.</p>
<p>Deux internautes m&#8217;ayant demandé ce document cette semaine, j&#8217;ai réalisé un modèle-type de <strong>liste de fonctionnalités pour un site d&#8217;e-commerce</strong> que je vous propose en téléchargement :</p>
<div class="encadre">
<h2>Télécharger <a href="http://www.lepotlatch.org/wp-content/uploads/2011/05/tableau-de-fonctionnalites.xls">Exemple de tableau de fonctionnalités pour un site de vente en ligne</a></h2>
</div>
<p>Il s&#8217;agit évidemment d&#8217;exemples génériques à compléter en fonction de vos besoins réels.</p>
<p>Une fois rempli par vos soins ce tableau pourra être remis au <a href="http://www.creation-site-78.fr">prestataire chargé de la création du site</a> qui devra répondre à chaque ligne s&#8217;il peut le faire &laquo;&nbsp;en standard&nbsp;&raquo;, &laquo;&nbsp;en option&nbsp;&raquo; (prix à spécifier à part dans son devis) ou si c&#8217;est impossible.</p>
<p>Le mieux est de ne mettre qu&#8217;<strong>une seule fonctionnalité par ligne</strong> : évitez par exemple de placer sur une ligne <em>&laquo;&nbsp;des actualités triées par catégories et par auteur, contenant des vidéos avec une page d&#8217;archives, reprises en une du site&nbsp;&raquo;</em> car la réponse que vous obtiendrez ne sera pas forcément facile à décoder.</p>
<p>N&#8217;hésitez pas à suggérer des améliorations dans les commentaires. Et si vous cherchez une <a href="http://link-builder.fr">solution de référencement pour votre site, c&#8217;est ici</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lepotlatch.org/2011/05/modele-de-tableau-de-fonctionnalites-pour-la-creation-dun-site-web/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ma dernière réalisation : CommentReparer.com, le site pour tout réparer</title>
		<link>http://www.lepotlatch.org/2011/05/ma-derniere-realisation-commentreparer-com-le-site-pour-tout-reparer/</link>
		<comments>http://www.lepotlatch.org/2011/05/ma-derniere-realisation-commentreparer-com-le-site-pour-tout-reparer/#comments</comments>
		<pubDate>Tue, 03 May 2011 07:04:50 +0000</pubDate>
		<dc:creator>Damien Ravé</dc:creator>
				<category><![CDATA[Développement PHP]]></category>
		<category><![CDATA[Ecologie]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[application Web]]></category>
		<category><![CDATA[développement durable]]></category>
		<category><![CDATA[écologie]]></category>
		<category><![CDATA[site web]]></category>

		<guid isPermaLink="false">http://www.lepotlatch.org/?p=290</guid>
		<description><![CDATA[<img src="http://www.lepotlatch.org/wp-content/uploads/2011/05/logo2.png" alt="" title="Logo CommentReparer.com" width="278" height="99" class="photo right" />Votre tondeuse a lâché ? Votre réveil-matin s'obstine à sonner à 6h17 ? Votre lave-vaisselle fuit de toutes parts ? Bref, un objet cassé vous empoisonne la vie et vous avez une furieuse envie de le jeter pour le remplacer par un beau produit tout neuf ? Et si vous tentiez de le réparer ? <a href="http://www.commentreparer.com">Apprenez à réparer sur CommentReparer.com</a>. <a href="http://www.lepotlatch.org/2011/05/ma-derniere-realisation-commentreparer-com-le-site-pour-tout-reparer/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.commentreparer.com"><img src="http://www.lepotlatch.org/wp-content/uploads/2011/05/logo2.png" alt="" title="Logo CommentReparer.com" width="278" height="99" class="photo right" /></a>Votre tondeuse a lâché ? Votre réveil-matin s&#8217;obstine à sonner à 6h17 ? Votre lave-vaisselle fuit de toutes parts ? Bref, un objet cassé vous empoisonne la vie et vous avez une furieuse envie de le jeter pour le remplacer par un beau produit tout neuf ?</p>
<p>Et si vous tentiez de le réparer ? Sur <a href="http://www.commentreparer.com">CommentReparer.com</a>, demandez un coup de main et, avec un peu de chance, vous prolongerez la durée de vie de votre matériel de quelques mois ou années, pour une poignée euros.</p>
<p>Sans compter que vous éviterez un <a href="http://www.commentreparer.com/pages/voir/id/1/Pourquoi-reparer">double gâchis écologique</a> (les déchets de votre ancien matériel, la production et le transport du nouveau). Alors c&#8217;est sûr, ça ne marche pas à tous les coups, mais ça ne coûte rien d&#8217;essayer !</p>
<h2>Le site : <a href="http://www.commentreparer.com">CommentReparer.com</a></h2>
]]></content:encoded>
			<wfw:commentRss>http://www.lepotlatch.org/2011/05/ma-derniere-realisation-commentreparer-com-le-site-pour-tout-reparer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Désintox consumériste : mon fils perdu dans un magasin bio</title>
		<link>http://www.lepotlatch.org/2011/04/desintox-consumeriste-mon-fils-perdu-dans-un-magasin-bio/</link>
		<comments>http://www.lepotlatch.org/2011/04/desintox-consumeriste-mon-fils-perdu-dans-un-magasin-bio/#comments</comments>
		<pubDate>Tue, 19 Apr 2011 06:06:30 +0000</pubDate>
		<dc:creator>Damien Ravé</dc:creator>
				<category><![CDATA[Ecologie]]></category>
		<category><![CDATA[Pensées]]></category>
		<category><![CDATA[achat]]></category>
		<category><![CDATA[agriculture]]></category>
		<category><![CDATA[bio]]></category>
		<category><![CDATA[citoyens]]></category>
		<category><![CDATA[développement durable]]></category>
		<category><![CDATA[durable]]></category>
		<category><![CDATA[écologie]]></category>
		<category><![CDATA[marketing]]></category>

		<guid isPermaLink="false">http://www.lepotlatch.org/?p=296</guid>
		<description><![CDATA[<img src="http://www.lepotlatch.org/wp-content/uploads/2011/04/fils-bio-dark-vador.jpg" alt="" title="Dark Vador apprend à son fils qu&#039;il ne pourra plus collectionner les autocollants Transformers" width="280" height="199" class="photo right wp-image-307" />La première fois dans un magasin bio, tu restes au moins cinq bonnes minutes devant chaque produit, avec des interrogations devant l'étiquette, du genre "ah ouais, cette brioche coûte quand même quatre fois plus cher que celle que j'achète d'habitude", ou "comment ça, il n'y a pas de vin à moins de 6,50 euros ???". Tu te reposes, à chaque item de ta liste, la question essentielle : "est-ce que j'en ai <strong>vraiment</strong> besoin ?". <a href="http://www.lepotlatch.org/2011/04/desintox-consumeriste-mon-fils-perdu-dans-un-magasin-bio/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.lepotlatch.org/wp-content/uploads/2011/04/fils-bio-dark-vador.jpg" alt="" title="Dark Vador apprend à son fils qu&#039;il ne pourra plus collectionner les autocollants Transformers" width="280" height="199" class="photo right wp-image-307" />Quand on touche au bio une fois, c&#8217;est hyper-addictif. Tu commences par une <a href="http://www.amap-plaisir.org">Amap</a> qui te fournit tes légumes, et puis c&#8217;est l&#8217;engrenage. Plus tu manges bio, plus tu veux manger bio. Tu te mets à regarder des documentaires terrifiants sur les <a href="http://www.solutionslocales-lefilm.com/">ravages de l&#8217;agriculture intensive</a> ou les <a href="http://www.artevod.com/notre_poison_quotidien">pesticides qui empoisonnent nos assiettes</a>, pour au final vouloir remplacer un par un tous les aliments de ta liste de course par leur équivalent bio. </p>
<p>La première fois dans un magasin bio, tu restes au moins cinq bonnes minutes devant chaque produit, avec des interrogations devant l&#8217;étiquette, du genre &laquo;&nbsp;ah ouais, cette brioche coûte quand même quatre fois plus cher que celle que j&#8217;achète d&#8217;habitude&nbsp;&raquo;, ou &laquo;&nbsp;comment ça, il n&#8217;y a pas de vin à moins de 6,50 euros ???&nbsp;&raquo;. Tu te reposes, à chaque item de ta liste, la question essentielle : &laquo;&nbsp;est-ce que j&#8217;en ai <strong>vraiment</strong> besoin ?&nbsp;&raquo;. Et tu te mets à regarder en tout petit le prix au kilo pour trouver le conditionnement le plus rentable sur la durée. Tu finis par éliminer certains produits de luxe deux à trois fois plus chers, pour te rabattre sur les valeurs sûres : oublie la confiture de figues qui te fait envie, ce sera FRAISES, 1 KILO, POINT.</p>
<p>Pour un enfant, on pourrait croire que c&#8217;est plus facile puisqu&#8217;il se fout de prendre les produits les plus chers, et bien non. Mon gamin de cinq ans, sommé de choisir un petit déj aux rayons idoines (pâtisseries, biscuits, céréales), a subi des tourments bien plus grands encore. Pensez donc : sans marketing outrancier (ou alors mauvais, petits moyens obligent), il ne trouva point de mascotte sur l&#8217;emballage pour aiguiller son choix. Et comment il fait le petit consommateur quand il a pas un tigre sympa ou un bonhomme rigolo sur le paquet ? Quand il a pas d&#8217;autocollants Beyblade, de magnets Transformers, de figurine Dora ou de livret Charlotte aux Fraises qui le décide à choisir un produit plutôt qu&#8217;un autre ? Ben il fait comme nous, bien obligé : il réfléchit.</p>
<p>Il voit les produits en vrai dans leur emballage transparent, pas sur une photo retouchée aux couleurs saturées qui rend ultra-désirables des aliments tout à fait insipides. Il doit <strong>imaginer</strong> leur goût et, c&#8217;est le plus dur, se demander ce qu&#8217;il <strong>aime</strong>.</p>
<p>Bien sûr, la première fois, il a rusé, en se rattachant à du connu : il a choisi la seule boîte sous carton qui montrait en photo d&#8217;alléchantes madeleines dégoulinantes de confiture d&#8217;abricot (en fait sèches et friables et même pas bio, l&#8217;arnaque) qu&#8217;il n&#8217;a pas mangées. Mais la semaine suivante, il a bien regardé les céréales, vu celles au miel qui lui faisaient envie, et opté pour ces dernières malgré un packaging réduit à sa plus simple expression. Ben du coup, il les a toutes mangées, et il en a repris dès qu&#8217;il les a eues finies. Goût = 1, Marketing = 0.</p>
<p>Le sevrage est en cours, pour notre fils et nous, et nous avons bien l&#8217;intention d&#8217;aller jusqu&#8217;au bout. Car au delà de la désintoxication du marketing, c&#8217;est surtout sa sensibilité au goût des aliments qu&#8217;on veut développer. [Mode Jean-Pierre Coffe ON] Nan parce que quand même, il y a tellement de trucs bons à manger que c&#8217;est dommage de se laisser refiler de la merde, même bien emballée. Il faut apprendre à se débarrasser de certains réflexes de facilité. Le goût, ça se mérite.[Mode Jean-Pierre Coffe OFF]</p>
<p>Alors faites l&#8217;expérience, sortez au moins une fois vos charmants bambins dans une boutique bio et observez-les choisir. Et commencez la cure de désintox&#8230; </p>
]]></content:encoded>
			<wfw:commentRss>http://www.lepotlatch.org/2011/04/desintox-consumeriste-mon-fils-perdu-dans-un-magasin-bio/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Délire du jour : mieux que les MILF, les SMILF</title>
		<link>http://www.lepotlatch.org/2011/04/delire-du-jour-mieux-que-les-milf-les-smilf/</link>
		<comments>http://www.lepotlatch.org/2011/04/delire-du-jour-mieux-que-les-milf-les-smilf/#comments</comments>
		<pubDate>Sun, 17 Apr 2011 07:08:32 +0000</pubDate>
		<dc:creator>Damien Ravé</dc:creator>
				<category><![CDATA[Détournements]]></category>
		<category><![CDATA[délire]]></category>
		<category><![CDATA[futile]]></category>
		<category><![CDATA[graphisme]]></category>
		<category><![CDATA[photoshop]]></category>
		<category><![CDATA[retouche]]></category>
		<category><![CDATA[rigolo]]></category>

		<guid isPermaLink="false">http://www.lepotlatch.org/?p=287</guid>
		<description><![CDATA[<a href="http://smilf.lepotlatch.org/"><img src="http://www.lepotlatch.org/wp-content/uploads/2011/04/sushiman-smilf1-186x300.jpg" alt="" title="Mieux qu&#039;une MILF, un SMILF" width="186" height="300" class="alignright size-medium wp-image-288" /><br />
<h2>Voir le site SMILF</h2>
</a>

<p>Pour ceux qui prétendraient ne pas connaître le mot MILF, il s'agit d'une abréviation pour Mother I'd Like to F..k, soit en français correct "une mère de famille digne d'éloge". </p>

<p>Quant à Sushi Man, c'est le nom tout aussi exotique des cuisiniers japonais chargés de la fabrication des sushis.</p>

<p>Je ne sais par quel glissement langagier ces deux sujets apparemment non miscibles en sont venus à se télescoper, mais voilà le résultat. Etonnant, non ?</p> <a href="http://www.lepotlatch.org/2011/04/delire-du-jour-mieux-que-les-milf-les-smilf/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://smilf.lepotlatch.org/"><img src="http://www.lepotlatch.org/wp-content/uploads/2011/04/sushiman-smilf1-186x300.jpg" alt="" title="Mieux qu&#039;une MILF, un SMILF" width="186" height="300" class="alignright size-medium wp-image-288" /></p>
<h2>Voir le site SMILF</h2>
<p></a></p>
<p>Pour ceux qui prétendraient ne pas connaître le mot MILF, il s&#8217;agit d&#8217;une abréviation pour Mother I&#8217;d Like to F..k, soit en français correct &laquo;&nbsp;une mère de famille digne d&#8217;éloge&nbsp;&raquo;. </p>
<p>Quant à Sushi Man, c&#8217;est le nom tout aussi exotique des cuisiniers japonais chargés de la fabrication des sushis.</p>
<p>Je ne sais par quel glissement langagier ces deux sujets apparemment non miscibles en sont venus à se télescoper, mais voilà le résultat. Etonnant, non ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lepotlatch.org/2011/04/delire-du-jour-mieux-que-les-milf-les-smilf/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Etendre un Zend_Db_Table_Row avec des propriétés customisées</title>
		<link>http://www.lepotlatch.org/2011/04/etendre-un-zend_db_table_row-avec-des-proprietes-customisees/</link>
		<comments>http://www.lepotlatch.org/2011/04/etendre-un-zend_db_table_row-avec-des-proprietes-customisees/#comments</comments>
		<pubDate>Sun, 03 Apr 2011 07:04:55 +0000</pubDate>
		<dc:creator>Damien Ravé</dc:creator>
				<category><![CDATA[Développement PHP]]></category>
		<category><![CDATA[développement]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[Zend]]></category>

		<guid isPermaLink="false">http://www.lepotlatch.org/?p=277</guid>
		<description><![CDATA[La famille Zend_Db_Table offre aux développeurs d&#8217;applications un ORM simple, mais parfois certaines manipulations évidentes s&#8217;avèrent impossibles. Mettons nous en situation Dans mon cas, j&#8217;ai souvent l&#8217;habitude d&#8217;appeler un objet depuis un autre. Par exemple, j&#8217;appelle l&#8217;objet Magazine associé à &#8230; <a href="http://www.lepotlatch.org/2011/04/etendre-un-zend_db_table_row-avec-des-proprietes-customisees/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>La famille Zend_Db_Table offre aux développeurs d&#8217;applications un ORM simple, mais parfois certaines manipulations évidentes s&#8217;avèrent impossibles.</p>
<h2>Mettons nous en situation</h2>
<p>Dans mon cas, j&#8217;ai souvent l&#8217;habitude d&#8217;appeler un objet depuis un autre. Par exemple, j&#8217;appelle l&#8217;objet Magazine associé à un Article par la méthode $article-&gt;getMagazine(). C&#8217;est pratique, ça permet des enchassements de méthodes assez rigolos genre $article-&gt;getMagazine()-&gt;getCouverture()-&gt;getUrl(). Jusqu&#8217;ici, pas de problème : il suffit d&#8217;écrire la méthode getMagazine() dans ma classe Article héritant de Zend_Db_Table_Row, et les autres méthodes dans les autres classes.</p>
<p>Mais que se passe-t-il si j&#8217;appelle huit fois de suite la méthode getMagazine() ? Il instanciera bêtement l&#8217;objet magazine huit fois de suite, avec huit requêtes SQL successives. Pas très optimal question performances. J&#8217;aimerais donc stocker l&#8217;objet Magazine, une fois instancié, dans une variable de la classe Article, et lui ressortir l&#8217;objet stocké les sept fois suivantes. Et là, ça coince.</p>
<div class="encadre"><strong>Note</strong> : on pourra me rétorquer qu&#8217;il suffit de stocker l&#8217;objet $magazine une bonne fois pour toutes lors de l&#8217;exécution. C&#8217;est vrai et ça règle la question pour les situations simples où l&#8217;on ne traite que d&#8217;un unique article, mais dès qu&#8217;on commence à avoir plusieurs objets possédant chacun un ou plusieurs objets associés, on est obligé de stocker les variables dans un tableau associatif, et là je me dis : pour rester dans une logique POO et faciliter le déboguage, autant stocker l&#8217;info directement dans l&#8217;objet concerné.</div>
<h2>Les limites de Zend_Db_Table_Row</h2>
<p>Une classe héritant de Zend_Db_Table_Row possède un nombre défini de propriétés accessibles, qui correspondent rigoureusement aux colonnes de la table SQL associée. Si vous tentez, naïvement, de définir une nouvelle variable du type $magazine-&gt;variable1 = 50, il génère une erreur car il n&#8217;est pas prévu de pouvoir lui associer d&#8217;autres variables que celles de sa table.</p>
<p>Comment contourner cette limite ? J&#8217;ai trouvé la réponse sur le forum du Zend Framework :</p>
<ul>
<li>créer une nouvelle classe héritant de Zend_Db_Table_Row, par exemple My_DbTableRow</li>
<li>créer dans cette classe une variable $_otherData qui contiendra les variables customisées. Ce tableau s&#8217;ajoute aux tableaux associatifs $_data et $_cleanData utilisés par la classe pour stocker les colonnes de la table</li>
<li>surcharger les méthodes accesseurs (__get(), __set(), __isset() et __unset()) de l&#8217;objet Zend_Db_Table_Row pour qu&#8217;il vérifie si une variable donnée existe dans le tableau $_otherData en plus du tableau $_data</li>
</ul>
<p>Mais l&#8217;auteur ne livrait pas le code correspondant, j&#8217;ai donc suivi ses recommandations et je vous livre ci-dessous le code de ma classe :</p>
<p><code>
<pre>&lt;?php
class My_DbTableRow extends Zend_Db_Table_Row_Abstract
{
    protected $_otherData = array();

    function __set($var, $value)
    {
        if (in_array($var,$this-&gt;getTable()-&gt;info('cols')))
        {
            parent::__set($var, $value);
        }
        else
        {
            $this-&gt;_otherData[$var] = $value;
        }
    }

    function __get($var)
    {
        if (isset($this-&gt;_data[$var]))
        {
            return parent::__get($var);;
        }
        else
        {
            return $this-&gt;_otherData[$var] ;
        }
    }

    function __isset($var)
    {
        if (isset($this-&gt;_otherData[$var]))
        {
            return true;
        }
        else
        {
            return parent::__isset($var);
        }
    }

    function __unset($var)
    {
        if (isset($this-&gt;_otherData[$var]))
        {
            unset ($this-&gt;_otherData[$var]);
        }
        else
        {
            parent::__unset($var);
        }
    }
}
</pre>
<p></code></p>
<p>Au passage, j&#8217;ajoute ma classe My_DbTable qui étend la classe Zend_Db_Table_Row en utilisant par défaut le nouvel objet My_DbTableRow &laquo;&nbsp;extensible&nbsp;&raquo;.</p>
<h2>Usage</h2>
<p>Avec ces classes, vous pouvez donc créer des objets Zend_Db_Table_Row &laquo;&nbsp;extensibles&nbsp;&raquo; et leur affecter à l&#8217;exécution des nouvelles variables qui n&#8217;existent pas dans la table. Attention, vous ne pourrez évidemment pas sauver ces propriétés dans la base de données.</p>
<p>Pour revenir à mon exemple de code initial, voici comment je pourrais écrire mon code :</p>
<p><code>
<pre>
<span class="commentaires">// Fichier Articles.php</span>
class Articles extends My_DbTable {
    protected $_rowClass = 'Article';
}

class Article extends My_DbTableRow {
    function getMagazine()
    {
        <span class="commentaires">// On vérifie si une variable a déjà été définie avec le même nom que la fonction et on l'instancie si besoin</span>
        if (!isset($this-&gt;getMagazine))
        {
            <span class="commentaires">// On peut utiliser la méthode magique find*() si on a défini
            // les relations entre les tables $this-&gt;findMagazines();</span>
            $this-&gt;getMagazine = <span class="commentaires">// code pour instancer le magazine</span>
        }
        return $this-&gt;getMagazine;
    }
}</pre>
<p></code></p>
<p>Ainsi lorsque j&#8217;appellerai la méthode $article-&gt;getMagazine(), il n&#8217;instanciera qu&#8217;une seule fois l&#8217;objet magazine, et me renverra le contenu de la variable getMagazine les fois suivantes.</p>
<p>N&#8217;hésitez pas à me signaler toute erreur ou suggestion d&#8217;amélioration.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lepotlatch.org/2011/04/etendre-un-zend_db_table_row-avec-des-proprietes-customisees/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Et si on facturait à la prise-de-tête du client ?</title>
		<link>http://www.lepotlatch.org/2011/03/et-si-on-facturait-a-la-prise-de-tete-du-client/</link>
		<comments>http://www.lepotlatch.org/2011/03/et-si-on-facturait-a-la-prise-de-tete-du-client/#comments</comments>
		<pubDate>Sat, 26 Mar 2011 17:28:07 +0000</pubDate>
		<dc:creator>Damien Ravé</dc:creator>
				<category><![CDATA[Pensées]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[argent]]></category>
		<category><![CDATA[autoentrepreneur]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[client]]></category>

		<guid isPermaLink="false">http://www.lepotlatch.org/?p=238</guid>
		<description><![CDATA[<img class="alignright size-medium wp-image-267 photo" title="tete-du-client-freelance_03" src="http://www.lepotlatch.org/wp-content/uploads/2011/03/tete-du-client-freelance_03-214x300.jpg" alt="" width="214" height="300" />Dans mon boulot de tous les jours et dans mon activité d'auto-entrepreneur, j'ai constaté ce contraste : on tombe sur des bons payeurs qui alignent 30000 euros et qui te laissent travailler parce qu'il te font entièrement confiance ; alors que celui qui t'a filé 500 euros à contrecoeur va te rappeler dix fois par jour parce qu'il n'est pas satisfait de la couleur d'un pixel ou de la justification du texte.

D'où l'idée suivante : ne devrait-on pas faire payer le client en fonction de son potentiel de casse-pieds ? Les ceux qui disent toujours "oui, c'est super, merci" paieraient pas cher, et les relous jamais contents paieraient plein pot.  <a href="http://www.lepotlatch.org/2011/03/et-si-on-facturait-a-la-prise-de-tete-du-client/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.lepotlatch.org/wp-content/uploads/2011/03/tete-du-client-freelance_03.jpg"><img class="alignright size-medium wp-image-267 photo" title="tete-du-client-freelance_03" src="http://www.lepotlatch.org/wp-content/uploads/2011/03/tete-du-client-freelance_03-214x300.jpg" alt="" width="214" height="300" /></a>Je suis depuis peu auto-entrepreneur dans la <a href="http://www.creation-site-78.fr">conception de sites Web et de logos</a>, et je découvre le monde merveilleux de la prospection commerciale.</p>
<p>Précisons que je suis un très mauvais commercial, que je ne &laquo;&nbsp;rentre&nbsp;&raquo; de budgets que par mes amis et connaissances immédiates et que je préfère travailler pour des <a href="http://linavenir.wordpress.com">bonnes causes</a> et des <a href="http://www.traducteur-chinois.fr">indépendants en démarrage d&#8217;activité</a>, c&#8217;est à dire que l&#8217;argent ne coule pas à flot. Mais je m&#8217;en fous parce que j&#8217;ai déjà un travail à plein temps qui nourrit ma famille. Bref.</p>
<p>En réalisant mes premiers logos, j&#8217;ai constaté un piège dans la manière dont j&#8217;abordais le chiffrage des devis : je m&#8217;étais fixé une échelle mentale du genre &laquo;&nbsp;je veux gagner 50 euros de l&#8217;heure / un logo pour une petite boîte demande 6 heures de travail / je facture 300 euros&nbsp;&raquo;. Et puis j&#8217;ai eu des demandes d&#8217;amis qui n&#8217;avaient pas un rond, pour qui j&#8217;ai fait un devis à 60 euros (net d&#8217;impôt). La dernière fois, j&#8217;avais l&#8217;impression de brader mon boulot, jusqu&#8217;à ce que je trouve, après une petite heure de travail, quelques &laquo;&nbsp;pistes&nbsp;&raquo; présentables à affiner, que je proposai à cet ami pour &laquo;&nbsp;orienter&nbsp;&raquo; le travail. Quelle ne fut pas ma surprise lorsqu&#8217;il valida, sans plus de discours, l&#8217;une des pistes proposées. Pas de changement de typo, pas d&#8217;essais de couleur. Il a dit : &laquo;&nbsp;c&#8217;est magnifique, je prends la 1f&nbsp;&raquo;. C&#8217;était décidé.</p>
<p>En lui envoyant son logo, je calculai rapidement qu&#8217;il m&#8217;avait payé proportionnellement plus cher qu&#8217;un client pour qui j&#8217;aurais consacré six heures de travail ou dix ou vingt, parce qu&#8217;il m&#8217;aurait demandé d&#8217;autres pistes, des corrections de détail, des retouches quasi invisibles, avant de revenir à la première version&#8230; En résumé, ce client &laquo;&nbsp;facile&nbsp;&raquo; était beaucoup plus rentable qu&#8217;un client un peu plus cher mais casse-bonbons.</p>
<p>Dans mon boulot de tous les jours, j&#8217;ai déjà constaté ce contraste, où l&#8217;on rencontre un jour des bons payeurs qui alignent 30000 euros et qui te laissent travailler parce qu&#8217;il te font entièrement confiance alors que celui qui t&#8217;a filé 500 euros à contrecoeur va te rappeler dix fois par jour parce qu&#8217;il n&#8217;est pas satisfait de la couleur d&#8217;un pixel ou de la justification du texte.</p>
<p>D&#8217;où l&#8217;idée suivante : <strong>ne devrait-on pas faire payer le client en fonction de son potentiel de casse-pieds ? </strong>Les ceux qui disent toujours &laquo;&nbsp;oui, c&#8217;est super, merci&nbsp;&raquo; paieraient pas cher, et les relous jamais contents paieraient plein pot. Je sais me direz-vous, ça existe, ça s&#8217;appelle &laquo;&nbsp;faire payer les heures réelles&nbsp;&raquo; mais le client n&#8217;en veut pas parce qu&#8217;il a l&#8217;impression (parfois légitime) que le prestataire va en profiter pour faire traîner le boulot.</p>
<p>Non, j&#8217;aimerais bien trouver une méthode pour &laquo;&nbsp;sentir&nbsp;&raquo; le poisson avant de le ferrer, avant de lui donner un prix. Peut-être qu&#8217;il s&#8217;agit juste d&#8217;instinct ou d&#8217;expérience, et qu&#8217;avec le temps j&#8217;arriverai à le faire sans même m&#8217;en rendre compte. Peut-être qu&#8217;il y a des manières de procéder qui permettraient de le savoir en amont. J&#8217;en ai deux qui me viennent à l&#8217;esprit :</p>
<ul>
<li>avant de signer un gros projet, démarrer un petit projet &laquo;&nbsp;pas cher&nbsp;&raquo; (et pas long), voire carrément offert, et tâter le terrain. Par exemple, avant de réaliser un site à 3000 euros, s&#8217;accorder pour lui faire un logo et étudier la relation qui se met en place.</li>
<li>contractualiser le nombre d&#8217;allers-retours sous forme d&#8217;options : si tu veux 10 propositions de logos avec possibilité de revenir dessus 6 fois, tu paies 3000 ; si tu acceptes de choisir parmi une liste de 3 propositions et que tu as droit à une seule variation après ça, tu paies 300.</li>
</ul>
<p>J&#8217;imagine que je ne suis pas le seul à m&#8217;être posé la question et à rêver de séparer le bon grain de l&#8217;ivraie. Et vous les entrepreneurs, vous faites comment ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lepotlatch.org/2011/03/et-si-on-facturait-a-la-prise-de-tete-du-client/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>La vie sans Adsense : 7 euros de perdus, combien de trouvés ?</title>
		<link>http://www.lepotlatch.org/2011/03/la-vie-sans-adsense-7-euros-de-perdus-combien-de-trouves/</link>
		<comments>http://www.lepotlatch.org/2011/03/la-vie-sans-adsense-7-euros-de-perdus-combien-de-trouves/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 21:26:11 +0000</pubDate>
		<dc:creator>Damien Ravé</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[adsense]]></category>
		<category><![CDATA[argent]]></category>
		<category><![CDATA[autoentrepreneur]]></category>
		<category><![CDATA[monétisation]]></category>
		<category><![CDATA[référencement]]></category>

		<guid isPermaLink="false">http://www.lepotlatch.org/?p=229</guid>
		<description><![CDATA[J'expliquais dans un billet récent ma décision de supprimer les publicités Adsense sur mon blog pour chercher d'autres sources de monétisation.
Après deux mois sans pubs Adsense, voici un premier bilan de la situation <a href="http://www.lepotlatch.org/2011/03/la-vie-sans-adsense-7-euros-de-perdus-combien-de-trouves/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>J&#8217;expliquais dans un billet récent <a href="../2011/01/pour-augmenter-mes-revenus-sur-mon-blog-j-arrete-adsense/">ma décision de supprimer les publicités Adsense sur mon blog pour chercher d&#8217;autres sources de monétisation</a>.<br />
Après deux mois sans pubs Adsense, voici un premier bilan de la situation :</p>
<ul>
<li>le manque-à-gagner en publicité pour ces deux mois, si l&#8217;on se base aux statistiques des mois précédents, se monte à environ 7 euros (pour rappel, j&#8217;avais un CPM assez faiblard, et environ 5000 visites par mois)</li>
<li>j&#8217;ai récupéré du temps que je passais à surveiller les taux de clics Adsense qui vivotaient laborieusement, je le passe désormais à des activités plus &laquo;&nbsp;enrichissantes&nbsp;&raquo; : lire et répondre aux commentaires, par exemple.</li>
<li>mon blog a généré environ 250 visites vers mon activité de <a title="Création de sites Web" href="http://www.creation-site-78.fr">création de sites web</a>. Sur ces visites, j&#8217;ai reçu une demande de devis crédible pour la refonte graphique de 2 blogs.</li>
<li>l&#8217;article sur Adsense a lui-même pas mal buzzé (<a href="http://www.homo-economicus.com/blogueurs-et-strategies-de-monetisation-de-contenu_1993/">là</a>, <a href="http://influence-pc.fr/17-03-2011-l%E2%80%99impact-nefast-de-la-publicite-sur-une-page-web">là </a>ou <a href="http://mart-e.be/post/faut-il-se-servir-de-son-blog-comme-moyen-dauto-promotion">là</a>), et m&#8217;a valu un déjeuner avec un lecteur qui avait un projet à me proposer. Pas rémunérateur mais intéressant.</li>
</ul>
<h2>Conclusions provisoires et possibilités futures</h2>
<p><strong>Côté argent :</strong></p>
<p>Dans l&#8217;absolu, je n&#8217;ai pas touché un seul centime, c&#8217;est vrai. Néammoins ces deux prospects me paraissent un premier pas encourageant.</p>
<p>Comment l&#8217;évaluer financièrement ? Si on veut se lancer dans des calculs statistiques (un peu à l&#8217;arrache), on peut dire qu&#8217;un devis rapporte le coût moyen d&#8217;une prestation multiplié par le pourcentage de devis qui se concrétisent réellement. Etant débutant (et sélectif) en matière de prospection commerciale, je vais partir sur des valeurs faibles : 300 euros de prestation pour 10% de signatures. Le calcul est vite fait : 300&#215;10% = <strong>30 euros</strong>. C&#8217;est de l&#8217;argent virtuel, mais l&#8217;argent de Google est tout aussi virtuel tant qu&#8217;on n&#8217;a pas atteint le seuil de versement.</p>
<p>N&#8217;empêche, je ne me baserais pas sur un tel chiffre pour évaluer définitivement le potentiel d&#8217;un site, en particulier parce qu&#8217;il repose sur UN seul devis et qu&#8217;il pourrait bien se passer six mois sans demande, ce qui ramènerait la moyenne proche de zéro (à noter que sur la même période, Adwords m&#8217;a apporté 10 demandes de devis pour un investissement de 30 euros, ce qui est déjà plus régulier et permet d&#8217;en tirer des grands enseignements).</p>
<p><strong>Côté référencement :</strong></p>
<p>Un autre élément à prendre en compte est le référencement naturel. Au contraire des publicités (type Adwords) qui n&#8217;impactent la fréquentation de mon site que pendant que j&#8217;alimente le compte, les <a href="http://link-builder.fr">liens que je crée entre mon blog et mon site pro</a> sont de la bonne matière à SEO. Du coup je peux espérer, d&#8217;ici quelques mois, que le trafic en provenance de Google s&#8217;améliore lentement mais sûrement, et ce sans y injecter d&#8217;argent.</p>
<p><strong>Côté relation avec les visiteurs :</strong></p>
<p>Lorsqu&#8217;un visiteur prend la peine de regarder une pub sur un blog, sa relation avec vous est soit totalement superficielle (il arrive, il clique, il t&#8217;oublie), soit carrément hostile (&laquo;&nbsp;la pub c&#8217;est le mal !&nbsp;&raquo;). Bref, humainement, la pub est loin de créer une situation relationnelle idéale.</p>
<p>Au contraire, passer plus de temps sur les commentaires m&#8217;apporte déjà une interaction plus riche qu&#8217;auparavant. Quand c&#8217;est une demande de devis par formulaire, cela peut déboucher sur des collaborations intéressantes. Quand cela se concrétise sous forme de rendez-vous physique, c&#8217;est le jackpot. J&#8217;ai enfin l&#8217;impression que tout ce déballage d&#8217;idées, de retours d&#8217;expérience, d&#8217;interrogations que constitue un blog avait réellement une utilité : débattre, être impliqué dans des projets, être (un peu) reconnu.</p>
<h2>Conclusion</h2>
<p>Bref, je suis d&#8217;ores et déjà satisfait de ce changement. Le calcul financier gagne à être affiné mais les 7 euros de Google Adsense ne me manquent pas. A bon entendeur !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lepotlatch.org/2011/03/la-vie-sans-adsense-7-euros-de-perdus-combien-de-trouves/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching using disk: basic
Object Caching 850/865 objects using disk: basic

Served from: www.lepotlatch.org @ 2012-05-17 10:18:00 -->
