<?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>Olivier Pons</title>
	<atom:link href="http://olivierpons.fr/feed/" rel="self" type="application/rss+xml" />
	<link>http://olivierpons.fr</link>
	<description>Ma Vie, mon univers et mes restes</description>
	<lastBuildDate>Tue, 15 May 2012 08:55:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Diablo III : vraiment multilingue !</title>
		<link>http://olivierpons.fr/2012/05/15/diablo-iii-vraiment-multilingue/</link>
		<comments>http://olivierpons.fr/2012/05/15/diablo-iii-vraiment-multilingue/#comments</comments>
		<pubDate>Tue, 15 May 2012 08:12:54 +0000</pubDate>
		<dc:creator>Olivier Pons</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[jeux]]></category>
		<category><![CDATA[la vie sur le net]]></category>
		<category><![CDATA[diablo]]></category>
		<category><![CDATA[diablo 3]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[jeu]]></category>

		<guid isPermaLink="false">http://olivierpons.fr/?p=2998</guid>
		<description><![CDATA[Le jeu Diablo III est enfin sorti, et quelques petites bourdes sont amusantes. J&#8217;espère que vous parlez couramment Russe&#160;:]]></description>
			<content:encoded><![CDATA[<p>Le jeu Diablo III est enfin sorti, et quelques petites bourdes sont amusantes. J&#8217;espère que vous parlez couramment Russe&nbsp;:</p>
<p><a href="/img/diablo_3.png" title="Diablo 3 le site avec du texte de toutes les langues" target="_blank"><img src="/img/diablo_3.png" alt="Diablo 3 le site avec du texte de toutes les langues" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://olivierpons.fr/2012/05/15/diablo-iii-vraiment-multilingue/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sencha / ExtJS : comment garder une colonne triée avec une grid ?</title>
		<link>http://olivierpons.fr/2012/05/07/sencha-extjs-comment-garder-une-colonne-triee-avec-une-grid/</link>
		<comments>http://olivierpons.fr/2012/05/07/sencha-extjs-comment-garder-une-colonne-triee-avec-une-grid/#comments</comments>
		<pubDate>Mon, 07 May 2012 08:49:44 +0000</pubDate>
		<dc:creator>Olivier Pons</dc:creator>
				<category><![CDATA[développement]]></category>
		<category><![CDATA[développement Internet]]></category>
		<category><![CDATA[programmation javascript]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[ExtJs]]></category>
		<category><![CDATA[extjs4]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[jsonp]]></category>

		<guid isPermaLink="false">http://olivierpons.fr/?p=2988</guid>
		<description><![CDATA[Quand on fait une grille de données (datagrid) et qu&#8217;on la lie avec un magasin (store) c&#8217;est facile. On peut autoriser à trier par colonnes dans la datagrid. Seul problème&#160;: si le store est un stocké sur le serveur, il fait une seule fois l&#8217;appel et ensuite c&#8217;est la datagrid qui gère les tris. Quand [...]]]></description>
			<content:encoded><![CDATA[<p>Quand on fait une grille de données (<strong><code>datagrid</code></strong>) et qu&#8217;on la lie avec un magasin (<strong><code>store</code></strong>) c&#8217;est facile.</p>
<p>On peut autoriser à trier par colonnes dans la <strong><code>datagrid</code></strong>.</p>
<p>Seul problème&nbsp;: si le <strong><code>store</code></strong> est un stocké sur le serveur, il fait une seule fois l&#8217;appel et ensuite c&#8217;est la <strong><code>datagrid</code></strong> qui gère les tris.</p>
<p>Quand on modifie un enregistrement, il est envoyé au serveur, le serveur l&#8217;enregistre, et renvoie le résultat de ce qu&#8217;il a enregistré. Généralement, il renvoie exactement ce qu&#8217;il a reçu. Le seul problème, c&#8217;est qu&#8217;<strong>au retour, la grille ne rafraichit pas l&#8217;ordre de tri selon les colonnes qu&#8217;on a choisies</strong>.</p>
<p>Exemple concret&nbsp;: vous avez une grille avec plein de noms. Vous cliquez sur la colonne &laquo;&nbsp;nom&nbsp;&raquo;, pour la trier par ordre alphabétique. Vous changez le nom &laquo;&nbsp;Albert&nbsp;&raquo; par &laquo;&nbsp;Zoé&nbsp;&raquo;. Voici ce qu&#8217;il se passe&nbsp;:</p>
<ul>
<li>Le <strong><code>store</code></strong> envoie <strong><code>id=54, nom="Zoé"</code></strong> au serveur&nbsp;;</li>
<li>Le serveur fait la modification en base, et renvoie <strong><code>id=54, nom="Zoé"</code></strong> en retour&nbsp;;</li>
<li>Le store reçoit <strong><code>id=54, nom="Zoé"</code></strong>, fait son changement en interne et le transmet à la <strong><code>datagrid</code></strong>&nbsp;;</li>
<li>La <strong><code>datagrid</code></strong> se rafraichit <strong><em>mais ne change pas le tri</em></strong> et laisse <strong><code>"Zoé"</code></strong> à la même place.</li>
</ul>
<p>La solution&nbsp;: dans le store, lors de l&#8217;événement qui signale que le résultat de l&#8217;écriture a été intégré (&laquo;&nbsp;<strong><code>write</code></strong>&laquo;&nbsp;) il faut forcer l&#8217;appel à <strong><code>sort();</code></strong> qui sera répercuté sur la <strong><code>datagrid</code></strong> automatiquement.</p>
<p>Voici mon code (raccourci à l&#8217;extrême sur ma classe de store qui gère les exceptions et plein d&#8217;autres choses)&nbsp;:</p>
<pre>Ext.define('Ext.data.StoreHandleErrors', {
    extend: 'Ext.data.Store',
    alias: 'data.storehandleerrors',

    constructor: function(config) {
        this.callParent([config]);

        this.on(
            'write',
            function(me, opts) {
                this.sort();
            },
            this
        );
    }
});</pre>
]]></content:encoded>
			<wfw:commentRss>http://olivierpons.fr/2012/05/07/sencha-extjs-comment-garder-une-colonne-triee-avec-une-grid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PDO, MySQL et erreurs détaillées : comment faire</title>
		<link>http://olivierpons.fr/2012/04/30/pdo-mysql-et-erreurs-detaillees-comment-faire/</link>
		<comments>http://olivierpons.fr/2012/04/30/pdo-mysql-et-erreurs-detaillees-comment-faire/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 14:13:06 +0000</pubDate>
		<dc:creator>Olivier Pons</dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[exception]]></category>
		<category><![CDATA[queries]]></category>
		<category><![CDATA[query]]></category>

		<guid isPermaLink="false">http://olivierpons.fr/?p=2986</guid>
		<description><![CDATA[Voici mon ancien code d&#8217;exécution des requêtes SQL&#160;: $stmt = self::$_pdo->prepare($sql); if ($stmt===false) { } foreach ($tab as $key=>$valeur) { $stmt->bindValue($key, $valeur); } $stmt->execute(); if ($stmt===false) { throw new Exception( "Erreur execution de la requete :\n\"".$sql."\"\n". "Paramètres de la requete :\n\"".var_export($tab, true)."\"\n". "Details de l'erreur : \n".var_export(self::$_pdo->errorInfo(), true) ); } Le seul (gros) problème, c&#8217;est [...]]]></description>
			<content:encoded><![CDATA[<p>Voici mon ancien code d&#8217;exécution des requêtes SQL&nbsp;:</p>
<pre>$stmt = self::$_pdo->prepare($sql);
if ($stmt===false) {
}
foreach ($tab as $key=>$valeur) {
    $stmt->bindValue($key, $valeur);
}
$stmt->execute();
if ($stmt===false) {
    throw new Exception(
        "Erreur execution de la requete :\n\"".$sql."\"\n".
        "Paramètres de la requete :\n\"".var_export($tab, true)."\"\n".
        "Details de l'erreur : \n".var_export(self::$_pdo->errorInfo(), true)
    );
}</pre>
<p>Le seul (gros) problème, c&#8217;est sur erreur d&#8217;exécution, il n&#8217;y avait aucune explication claire (détail = erreur 0&#215;00). J&#8217;ai trouvé la solution&nbsp;: il faut dire de lever une exception si erreur&nbsp;:</p>
<pre>self::$_pdo->setAttribute(
    PDO::ATTR_ERRMODE,
    PDO::ERRMODE_EXCEPTION
);</pre>
<p>Et maintenant, tout problème d&#8217;exécution de query lève une exception qui contient une erreur vraiment détaillée et utile de la requête.</p>
]]></content:encoded>
			<wfw:commentRss>http://olivierpons.fr/2012/04/30/pdo-mysql-et-erreurs-detaillees-comment-faire/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ExtJs : dériver un Store &#171;&#160;générique&#160;&#187; et s&#8217;en servir</title>
		<link>http://olivierpons.fr/2012/04/26/extjs-deriver-un-store-generique-et-sen-servir/</link>
		<comments>http://olivierpons.fr/2012/04/26/extjs-deriver-un-store-generique-et-sen-servir/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 13:35:52 +0000</pubDate>
		<dc:creator>Olivier Pons</dc:creator>
				<category><![CDATA[développement]]></category>
		<category><![CDATA[développement Internet]]></category>
		<category><![CDATA[programmation javascript]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[ExtJs]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[proxies]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[sencha]]></category>
		<category><![CDATA[Store]]></category>

		<guid isPermaLink="false">http://olivierpons.fr/?p=2978</guid>
		<description><![CDATA[Ça fait plus d&#8217;une journée que je cherche comment faire un Store générique, c&#8217;est à dire que j&#8217;ai plusieurs Store qui sont tous basés sur le même modèle avec le même type de proxy, etc. Donc au lieu de faire un copier coller pour chaque Store, j&#8217;ai cherché comment en faire un &#171;&#160;générique&#160;&#187; auquel je [...]]]></description>
			<content:encoded><![CDATA[<p>Ça fait plus d&#8217;une journée que je cherche comment faire un <code>Store</code> générique, c&#8217;est à dire que j&#8217;ai plusieurs Store qui sont tous basés sur le même modèle avec le même type de proxy, etc.</p>
<p>Donc au lieu de faire un copier coller pour chaque <code>Store</code>, j&#8217;ai cherché comment en faire un &laquo;&nbsp;générique&nbsp;&raquo; auquel je pourrai appliquer une configuration &laquo;&nbsp;par défaut&nbsp;&raquo;.</p>
<p>Voilà le code complet résultat, avec les fonctions qui gère les erreurs possibles renvoyées par Php (session expirée, problème d&#8217;écriture en base de données, etc).</p>
<p>Ce qui m&#8217;a pris le plus de temps à trouver c&#8217;est que pour &laquo;&nbsp;surcharger&nbsp;&raquo; le constructeur, ça n&#8217;est pas la fonction classique &laquo;&nbsp;<code><strong>initComponent: function(){ }</strong></code>&nbsp;&raquo; mais la fonction de base <code><strong>"constructor: function(config) { }"</strong></code>.</p>
<p>Il ne faut, de plus, surtout pas oublier d&#8217;appeler le parent, non pas via <code><strong>this.callParent();</strong></code> mais via <code><strong>this.callParent([config]);</strong></code>.</p>
<p>Ci suit du code, le code de plus d&#8217;une journée de travail, en deux parties (j&#8217;espère qu&#8217;il sauvera du temps à des personnes, ou qu&#8217;il les mettra sur la bonne voie&nbsp;!)&nbsp;:</p>
<ul>
<li>première partie = la surcharge</li>
<li>seconde partie = exemple d&#8217;utilisation de cette surcharge</li>
</ul>
<h3>Première partie&nbsp;: code de la classe</h3>
<pre>Ext.define('Ext.data.StoreHandleErrors', {
    extend: 'Ext.data.Store',
    alias: 'data.storehandleerrors',

    constructor: function(config) {
        /* (!!) Réécriture par dessus certaines propriétés
         *      du proxy : si jamais elles existent déjà,
         *      elles vont être réécrites.
         */
        config.autoLoad= true;
        config.autoSync= true;
        config.proxy.type= 'ajax';
        config.proxy.reader= {
            type: 'json',
            successProperty: 'success',
            root: 'data',
            messageProperty: 'message'
        };
        config.proxy.writer= {
            type: 'json',
            writeAllFields: true,
            root: 'data'
        };
        config.proxy.listeners= {

            exception: function(proxy, response, operation) {

                var error=operation.getError(),
                    title='Erreur du serveur';

                if (error instanceof Array) {
                  error=error.join("");
                }   

                switch(response.status) {

                case 200:
                    if (response.responseText!='') {
                        var b = Ext.JSON.decode(response.responseText);
                        if (b.title) {
                            title=b.title;
                        }
                        if (b.success==false) {
                            if (b.timeout==true) {
                                windowLoginPanel.show();
                            }
                        }
                    }
                    break;

                case -1:
                    var error=
                        'Le serveur met trop de temps à répondre'+
                        '

'+
                        'On ne peut rien faire, essayez '+
                        'd\'actualiser la page.';
                    break;

                case 500:
                    var error=
                        'Le serveur a une erreur interne.'+
                        '

'+
                        'On ne peut rien faire, essayez '+
                        'd\'actualiser la page.';
                    break;

                default:
                    var error=
                        'Erreur renvoyée par le serveur non gérée.'+
                        'Détails&nbsp;:'+
                        response.statusText+
                        '

'+
                        'On ne peut rien faire, essayez '+
                        'd\'actualiser la page.';
                    break;
                }
                Ext.MessageBox.show({
                    title: title,
                    msg: error,
                    icon: Ext.MessageBox.ERROR,
                    buttons: Ext.Msg.OK
                });
            }
        };
        this.callParent([config]);
        this.on(
            'write',
            function(proxy, operation) {
                if ( (operation.action == 'create') ||
                  (operation.action == 'update')
                ) {
                    var m = this.getById(
                        parseInt(
                            operation.resultSet.records[0].internalId
                        )
                    );
                } else if (operation.action == 'destroy') {
                    var m = this.getAt(0);
                }
                if (m) {
                    this.panelGridEtEdit.gsGrid.getSelectionModel().select(m);
                } else {
                    this.panelGridEtEdit.gsGrid.getSelectionModel().deselectAll();
                }
                Ext.example.msg(
                    Ext.String.capitalize(operation.action),
                    operation.resultSet.message
                );
            },
            this
        );
    }
});
</pre>
<h3>Seconde partie&nbsp;: utilisation de la classe</h3>
<pre>
    var storeAdresses = Ext.create('Ext.data.StoreHandleErrors', {
        model: 'Intranet.Adresse',
        proxy: {
            api: {
                read: '/json/intranet/liste/adresses/',
                create:  '/json/intranet/item/adresse/?mode=create',
                update:  '/json/intranet/item/adresse/?mode=update',
                destroy: '/json/intranet/item/adresse/?mode=destroy'
            }
        }
    });
</pre>
]]></content:encoded>
			<wfw:commentRss>http://olivierpons.fr/2012/04/26/extjs-deriver-un-store-generique-et-sen-servir/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Php Code Sniffer : changer l&#8217;indentation</title>
		<link>http://olivierpons.fr/2012/04/20/php-code-sniffer-changer-lindentation/</link>
		<comments>http://olivierpons.fr/2012/04/20/php-code-sniffer-changer-lindentation/#comments</comments>
		<pubDate>Fri, 20 Apr 2012 15:21:57 +0000</pubDate>
		<dc:creator>Olivier Pons</dc:creator>
				<category><![CDATA[développement]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[codesniffer]]></category>
		<category><![CDATA[indent]]></category>
		<category><![CDATA[indentation]]></category>
		<category><![CDATA[sniffer]]></category>

		<guid isPermaLink="false">http://olivierpons.fr/?p=2971</guid>
		<description><![CDATA[PHPCodeSniffer est un super outil de vérification de qualité de code. Le seul souci c&#8217;est qu&#8217;il vérifie en ayant une indentation de 4. Tous mes sources sont basés sur une indentation de 2. La solution&#160;: chercher où se trouve le fichier&#160;: CodeSniffer/Standards/Generic/Sniffs/WhiteSpace/ScopeIndentSniff.php éditer à la main le fichier et changer la valeur&#160;: public $indent = [...]]]></description>
			<content:encoded><![CDATA[<p>PHPCodeSniffer est un super outil de vérification de qualité de code.<br />
Le seul souci c&#8217;est qu&#8217;il vérifie en ayant une indentation de <strong>4</strong>.</p>
<p>Tous mes sources sont basés sur une indentation de <strong>2</strong>.</p>
<p>La solution&nbsp;:</p>
<ul>
<li>chercher où se trouve le fichier&nbsp;:<br />
<code>CodeSniffer/Standards/Generic/Sniffs/WhiteSpace/ScopeIndentSniff.php</code>
</li>
<li>éditer à la main le fichier et changer la valeur&nbsp;:<br />
<code>public $indent = <strong>4</strong>;</code><br />
en&nbsp;:<br />
<code>public $indent = <strong>2</strong>;</code>
</li>
</ul>
<p>Pour information, mon fichier se trouvait ici (Ubutunu 10.04)&nbsp;:<br />
<code>/usr/share/php/PHP/CodeSniffer/Standards/Generic/Sniffs/WhiteSpace/ScopeIndentSniff.php</code></p>
<p>La seconde modification c&#8217;est pour les variables passées à l&#8217;intérieur des fonctions&nbsp;: de la même façon le code est censé avoir une indentation de <strong>4</strong>.</p>
<p>C&#8217;est dans le fichier&nbsp;:<br />
<code>CodeSniffer/Standards/PEAR/Sniffs/Functions/FunctionCallSignatureSniff.php</code></p>
<p>Qu&#8217;il vous faudra modifier&nbsp;:<br />
<code>$expectedIndent = ($functionIndent + <strong>4</strong>);</code><br />
par&nbsp;:<br />
<code>$expectedIndent = ($functionIndent + <strong>2</strong>);</code></p>
<p>Pour information, mon fichier se trouvait ici (Ubutunu 10.04)&nbsp;:<br />
<code>/usr/share/php/PHP/CodeSniffer/Standards/PEAR/Sniffs/Functions/FunctionCallSignatureSniff.php</code></p>
]]></content:encoded>
			<wfw:commentRss>http://olivierpons.fr/2012/04/20/php-code-sniffer-changer-lindentation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux, MySQL, utf8 : requêtes et queries : comment éviter le décalage du résultat</title>
		<link>http://olivierpons.fr/2012/04/16/linux-mysql-utf8-requetes-et-queries-comment-eviter-le-decalage-du-resultat/</link>
		<comments>http://olivierpons.fr/2012/04/16/linux-mysql-utf8-requetes-et-queries-comment-eviter-le-decalage-du-resultat/#comments</comments>
		<pubDate>Mon, 16 Apr 2012 09:45:31 +0000</pubDate>
		<dc:creator>Olivier Pons</dc:creator>
				<category><![CDATA[développement]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[ligne de commande]]></category>
		<category><![CDATA[ligne de commandes]]></category>

		<guid isPermaLink="false">http://olivierpons.fr/?p=2965</guid>
		<description><![CDATA[Peut être avez-vous déjà rencontré ce problème&#160;: vous faites toute une base de données en utf-8. En suivant les recommandations ici, c&#8217;est facile. Le seul problème, et ils ne donnent pas de solution, c&#8217;est que lorsqu&#8217;on fait les requêtes, les résultats sont bien renvoyés en utf-8 mais il y a un décalage s&#8217;il y a [...]]]></description>
			<content:encoded><![CDATA[<p>Peut être avez-vous déjà rencontré ce problème&nbsp;: vous faites toute une base de données en utf-8.</p>
<p>En suivant les recommandations <a href="http://doc.ubuntu-fr.org/mysql#configuration_en_utf-8" title="Configuration serveur mysql en utf-8" target="_blank">ici</a>, c&#8217;est facile. Le seul problème, et ils ne donnent pas de solution, c&#8217;est que lorsqu&#8217;on fait les requêtes, les résultats sont bien renvoyés en utf-8 mais il y a un décalage s&#8217;il y a des accents&nbsp;:</p>
<p><img src="/img/mysql.shell.decalage.01.png" alt="Image qui montre un décalage de résultat d'une requête mysql en ligne de commande" /></p>
<p>Comment faire pour éviter ce décalage&nbsp;? Facile. La solution <a href="http://www.alsacreations.com/tuto/lire/615-installation-configuration-MySQL.html" title="Installation et configuration de MySQL" target="_blank">ici</a>.</p>
<p>En fait dans votre fichier de configuration, il faut aussi configurer le client, pas uniquement le serveur.</p>
<p>Il faut ajouter la directive &laquo;&nbsp;default-character-set = utf8&#8243; dans le fichier de configuration&nbsp;:</p>
<pre>sudo vim /etc/mysql/my.cnf

[client]
port    = 3306
socket    = /var/run/mysqld/mysqld.sock
default-character-set = utf8</pre>
<p>Et puis relancer le service&nbsp;:</p>
<pre>sudo service mysql restart</pre>
<p>Et voici le résultat&nbsp;: tout est rentré dans l&#8217;ordre&nbsp;:</p>
<p><img src="/img/mysql.shell.decalage.02.png" alt="Image qui montre le problème résolu de décalage de résultat d'une requête mysql en ligne de commande" /></p>
]]></content:encoded>
			<wfw:commentRss>http://olivierpons.fr/2012/04/16/linux-mysql-utf8-requetes-et-queries-comment-eviter-le-decalage-du-resultat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Résultats de tests de papdevis</title>
		<link>http://olivierpons.fr/2012/04/11/resultats-de-tests-de-papdevis/</link>
		<comments>http://olivierpons.fr/2012/04/11/resultats-de-tests-de-papdevis/#comments</comments>
		<pubDate>Wed, 11 Apr 2012 08:54:19 +0000</pubDate>
		<dc:creator>Olivier Pons</dc:creator>
				<category><![CDATA[développement]]></category>
		<category><![CDATA[développement Internet]]></category>
		<category><![CDATA[gestion de projet]]></category>
		<category><![CDATA[devis]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[papdevis]]></category>
		<category><![CDATA[particulier]]></category>
		<category><![CDATA[particuliers]]></category>
		<category><![CDATA[professionnel]]></category>
		<category><![CDATA[professionnels]]></category>
		<category><![CDATA[qualité]]></category>
		<category><![CDATA[site]]></category>
		<category><![CDATA[sites]]></category>

		<guid isPermaLink="false">http://olivierpons.fr/?p=2961</guid>
		<description><![CDATA[Voici un outil qui teste la qualité d&#8217;un site. Il fonctionne bien&#160;: http://tools.pingdom.com Les tests ont été assez bons, pour mon premier site développé en tant que freelance&#160;:]]></description>
			<content:encoded><![CDATA[<p>Voici un outil qui teste la qualité d&#8217;un site. Il fonctionne bien&nbsp;:</p>
<p><a href="http://tools.pingdom.com" title="Test the Load Time of a Web Page" target="_blank">http://tools.pingdom.com</a></p>
<p>Les tests ont été assez bons, pour mon premier site développé en tant que freelance&nbsp;:</p>
<p><a href="/img/stats.papdevis.1.png" title="Image des statistiques de tests du site Papdevis.fr" target="_blank"><img src="/img/stats.papdevis.1.png" alt="Statistiques du site www.papdevis.fr" /></a></p>
<p><a href="/img/stats.papdevis.2.l.png" title="Image détaillée des statistiques détaillées de tests du site Papdevis.fr" target="_blank"><img src="/img/stats.papdevis.2.png" alt="Statistiques détaillées du site www.papdevis.fr" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://olivierpons.fr/2012/04/11/resultats-de-tests-de-papdevis/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ExtJS et grids : double click, comment faire, howto ?</title>
		<link>http://olivierpons.fr/2012/03/26/extjs-et-grids-double-click-comment-faire-howto/</link>
		<comments>http://olivierpons.fr/2012/03/26/extjs-et-grids-double-click-comment-faire-howto/#comments</comments>
		<pubDate>Mon, 26 Mar 2012 10:35:13 +0000</pubDate>
		<dc:creator>Olivier Pons</dc:creator>
				<category><![CDATA[développement]]></category>
		<category><![CDATA[développement Internet]]></category>
		<category><![CDATA[programmation javascript]]></category>
		<category><![CDATA[ExtJs]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[programmation]]></category>

		<guid isPermaLink="false">http://olivierpons.fr/?p=2947</guid>
		<description><![CDATA[Cela fait une bonne heure que je cherche comment avoir le double click sur une grid générée dynamiquement. C&#8217;est très simple : Ce code ne fonctionnait pas, donc si vous êtes dans le même cas que moi, n&#8217;ayez pas peur&#160;: this.gridAttributs = Ext.create('Ext.grid.Panel', { &#160;&#160;&#160;&#160;border: 0, &#160;&#160;&#160;&#160;store: this.store, &#160;&#160;&#160;&#160;columns: [ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{ text: "id", dataIndex: 'id', [...]]]></description>
			<content:encoded><![CDATA[<p>Cela fait une bonne heure que je cherche comment avoir le double click sur une grid générée dynamiquement.</p>
<p>C&#8217;est très simple :</p>
<p>Ce code ne fonctionnait <strong>pas</strong>, donc si vous êtes dans le même cas que moi, n&#8217;ayez pas peur&nbsp;:</p>
<pre>
this.gridAttributs = Ext.create('Ext.grid.Panel', {
&nbsp;&nbsp;&nbsp;&nbsp;border: 0,
&nbsp;&nbsp;&nbsp;&nbsp;store: this.store,
&nbsp;&nbsp;&nbsp;&nbsp;columns: [
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ text: "id", dataIndex: 'id', sortable: true },
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ ... },
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ ... }
&nbsp;&nbsp;&nbsp;&nbsp;],
&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-weight:bolder; background-color:rgb(255,220,220);">celldblclick: function(evt, elem, opts ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('dblclick');
&nbsp;&nbsp;&nbsp;&nbsp;}</span>
});
</pre>
<p>Voici le code qui fonctionne&nbsp;:</p>
<pre>
this.gridAttributs = Ext.create('Ext.grid.Panel', {
&nbsp;&nbsp;&nbsp;&nbsp;border: 0,
&nbsp;&nbsp;&nbsp;&nbsp;store: this.store,
&nbsp;&nbsp;&nbsp;&nbsp;columns: [
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ text: "id", dataIndex: 'id', sortable: true },
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ ... },
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ ... }
&nbsp;&nbsp;&nbsp;&nbsp;]
});
<span style="font-weight:bolder; background-color:rgb(220,255,220);">this.gridAttributs.on('cellDblClick', function(evt, elem, opts ) {
&nbsp;&nbsp;&nbsp;&nbsp;console.log('dblclick');
});</span>
</pre>
<p>J&#8217;espère vous avoir évité de perdre l&#8217;heure que moi même j&#8217;ai perdu&nbsp;! <img src='http://olivierpons.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://olivierpons.fr/2012/03/26/extjs-et-grids-double-click-comment-faire-howto/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MySQL : solution à &#171;&#160;Can&#8217;t find any matching row in the user table&#160;&#187;</title>
		<link>http://olivierpons.fr/2012/03/22/mysql-solution-a-cant-find-any-matching-row-in-the-user-table/</link>
		<comments>http://olivierpons.fr/2012/03/22/mysql-solution-a-cant-find-any-matching-row-in-the-user-table/#comments</comments>
		<pubDate>Thu, 22 Mar 2012 10:46:42 +0000</pubDate>
		<dc:creator>Olivier Pons</dc:creator>
				<category><![CDATA[développement]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mémo mysql]]></category>

		<guid isPermaLink="false">http://olivierpons.fr/?p=2934</guid>
		<description><![CDATA[Voilà quel était mon problème, et j&#8217;espère vous aider en vous apportant une solution si vous avez ce problème&#160;: j&#8217;ai fait un dump complet de toutes les bases de données mysql dans un gros fichier, via l&#8217;ordre mysqldump&#160;: mysqldump -u root -pmonmotdepasse --all-databases > a_integrer.sql Ensuite j&#8217;ai copié le fichier sur l&#8217;ordinateur destination, et j&#8217;ai [...]]]></description>
			<content:encoded><![CDATA[<p>Voilà quel était mon problème, et j&#8217;espère vous aider en vous apportant une solution si vous avez ce problème&nbsp;:</p>
<p>j&#8217;ai fait un dump complet de toutes les bases de données mysql dans un gros fichier, via l&#8217;ordre <code>mysqldump</code>&nbsp;:</p>
<p><code>mysqldump -u root -pmonmotdepasse --all-databases > a_integrer.sql</code></p>
<p>Ensuite j&#8217;ai copié le fichier sur l&#8217;ordinateur destination, et j&#8217;ai ré-injecté le sql dans la base de données, ce qui a tout ré-intégré de manière transparente&nbsp;:</p>
<p><code>mysqldump -u root -pmonmotdepasse &lt; a_integrer.sql</code></p>
<p>Le seul problème, c&#8217;est que, sur l&#8217;ordinateur destination, impossible de se connecter sur la base de données, alors que l&#8217;utilisateur avait bien été intégré dans la base. En me connectant à la base, j&#8217;ai voulu modifier le mot de passe, mais <strong>impossible</strong>. L&#8217;erreur était la suivante&nbsp;:</p>
<p><code>Can't find any matching row in the user table</code></p>
<p>Donc impossible de changer le mot de passe alors que l&#8217;utilisateur existe bien.</p>
<p>La solution qui a fonctionné est la suivante : <strong>supprimer puis recréer l&#8217;utilisateur avec les droits d&#8217;accès adéquats</strong>.</p>
<p>
Faites la même chose&nbsp;:</p>
<ul>
<li>un <code style="font-weight:bolder">mysqldump</code> total&nbsp;;</li>
<li>ré-injection sur l&#8217;ordinateur destination&nbsp;;</li>
<li>si problème avec les mots de passe&nbsp;: suppression à la main du compte <code style="font-weight:bolder">mysql</code> concerné, puis re-création avec les bons droits.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://olivierpons.fr/2012/03/22/mysql-solution-a-cant-find-any-matching-row-in-the-user-table/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kamini : petite piqure de rappel : parce qu&#8217;on est&#8230;</title>
		<link>http://olivierpons.fr/2012/03/20/kamini-petite-piqure-de-rappel-parce-quon-est/</link>
		<comments>http://olivierpons.fr/2012/03/20/kamini-petite-piqure-de-rappel-parce-quon-est/#comments</comments>
		<pubDate>Tue, 20 Mar 2012 08:56:48 +0000</pubDate>
		<dc:creator>Olivier Pons</dc:creator>
				<category><![CDATA[humour]]></category>
		<category><![CDATA[la vie sur le net]]></category>
		<category><![CDATA[chanson]]></category>
		<category><![CDATA[kamini]]></category>
		<category><![CDATA[song]]></category>

		<guid isPermaLink="false">http://olivierpons.fr/?p=2928</guid>
		<description><![CDATA[J&#8217;aimerais faire un lien vers une vidéo de Kamini, et j&#8217;espère que si vous ne la connaissez pas, vous fera un peu sourire&#160;:]]></description>
			<content:encoded><![CDATA[<p>J&#8217;aimerais faire un lien vers une vidéo de Kamini, et j&#8217;espère que si vous ne la connaissez pas, vous fera un peu sourire&nbsp;:</p>
<p><object width="480" height="270"><param name="movie" value="http://www.youtube.com/v/P696IBdMP6w?version=3&amp;hl=fr_FR"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/P696IBdMP6w?version=3&amp;hl=fr_FR" type="application/x-shockwave-flash" width="480" height="270" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://olivierpons.fr/2012/03/20/kamini-petite-piqure-de-rappel-parce-quon-est/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

