<?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>AbriCoCotier.fr &#187; JavaScript</title>
	<atom:link href="http://www.abricocotier.fr/tag/javascript/feed" rel="self" type="application/rss+xml" />
	<link>http://www.abricocotier.fr</link>
	<description>Analyses et anticipations sur le web et les nouvelles technologies de demain.</description>
	<lastBuildDate>Tue, 07 Feb 2012 21:17:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Empêcher le copier-coller dans un champs input HTML</title>
		<link>http://www.abricocotier.fr/16065-empecher-le-copier-coller-dans-un-champs-input-html</link>
		<comments>http://www.abricocotier.fr/16065-empecher-le-copier-coller-dans-un-champs-input-html#comments</comments>
		<pubDate>Fri, 28 Oct 2011 16:26:20 +0000</pubDate>
		<dc:creator>Louis</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Tutoriel]]></category>

		<guid isPermaLink="false">http://www.abricocotier.fr/?p=16065</guid>
		<description><![CDATA[J&#8217;ai eu à trouver un moyen d&#8217;empêcher le copier-coller dans un champs input HTML, et donc je partage ici les résultats de mes recherches. C&#8217;est intéressant à plusieurs titres. Sachez qu&#8217;il existe un évènement onPaste sur les champs input (et &#8230; <a href="http://www.abricocotier.fr/16065-empecher-le-copier-coller-dans-un-champs-input-html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai eu à trouver un moyen d&#8217;empêcher le copier-coller dans un champs input HTML, et donc je partage ici les résultats de mes recherches. C&#8217;est intéressant à plusieurs titres. Sachez qu&#8217;il existe un évènement onPaste sur les champs input (et textarea, sans doute), supporté par la large majorité des navigateurs récents (mais pas Opéra). Au passage cet évènement ne semble pas prévu par le W3C (sur la page des <a href="http://en.wikipedia.org/wiki/DOM_events">DOM Events</a>, Wikipedia liste cet événement comme IE only&#8230;).    <span id="more-16065"></span></p>
<p><img src="http://www.abricocotier.fr/wp-content/uploads/2011/10/copier-coller.jpg" alt="" title="copier-coller" width="580" /></p>
<p>Mais bref, pour être sûr et certain, on va utiliser plusieurs méthodes qui s&#8217;assurent que ça fonctionne bien sous tous les navigateurs.</p>
<h2>Bloquer onPaste avec JQuery</h2>
<p>Une solution est <a href="http://www.4guysfromrolla.com/articles/060910-1.aspx">fournie là</a> (et la même est <a href="http://stackoverflow.com/questions/5510129/how-to-disable-ctrlv-paste-with-jquery">redonnée là</a>). J&#8217;ai testé, ça fonctionne niquel : que ce soit le Ctrl+V, le clic droit + coller, bref, ça bloque tout. J&#8217;ai retenu cette solution.</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot;&gt;
   $(document).ready(function () {
      $('#id_of_textbox').bind('paste', function (e) {
         e.preventDefault();
      });
   });
&lt;/script&gt;
</pre>
<p>Sachant que si on veut bloquer le Copier/Couper, on peut rajouter <em>cut </em>et <em>copy </em>dans le <em>bind(&#8216;paste&#8217;</em>, ce qui donnera <em>bind(&#8216;cut copy paste&#8217;</em></p>
<h2>Bloquer le onPaste sans JQuery</h2>
<p>J&#8217;ai trouvé sur le web deux solutions pour rajouter manuellement le onPaste dans le navigateur, et ce sans utiliser JQuery.</p>
<p>La première solution, <a href="http://stackoverflow.com/questions/1226574/disable-copy-paste-into-html-form-using-javascript ">trouvée sur StackOverflow</a> :</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot;&gt;
// Register onpaste on inputs and textareas in browsers that don't
// natively support it.
(function () {
    var onload = window.onload;

    window.onload = function () {
        if (typeof onload == &quot;function&quot;) {
            onload.apply(this, arguments);
        }

        var fields = [];
        var inputs = document.getElementsByTagName(&quot;input&quot;);
        var textareas = document.getElementsByTagName(&quot;textarea&quot;);

        for (var i = 0; i &lt; inputs.length; i++) {
            fields.push(inputs[i]);
        }

        for (var i = 0; i &lt; textareas.length; i++) {
            fields.push(textareas[i]);
        }

        for (var i = 0; i &lt; fields.length; i++) {
            var field = fields[i];

            if (typeof field.onpaste != &quot;function&quot; &amp;&amp; !!field.getAttribute(&quot;onpaste&quot;)) {
                field.onpaste = eval(&quot;(function () { &quot; + field.getAttribute(&quot;onpaste&quot;) + &quot; })&quot;);
            }

            if (typeof field.onpaste == &quot;function&quot;) {
                var oninput = field.oninput;

                field.oninput = function () {
                    if (typeof oninput == &quot;function&quot;) {
                        oninput.apply(this, arguments);
                    }

                    if (typeof this.previousValue == &quot;undefined&quot;) {
                        this.previousValue = this.value;
                    }

                    var pasted = (Math.abs(this.previousValue.length - this.value.length) &gt; 1 &amp;&amp; this.value != &quot;&quot;);

                    if (pasted &amp;&amp; !this.onpaste.apply(this, arguments)) {
                        this.value = this.previousValue;
                    }

                    this.previousValue = this.value;
                };

                if (field.addEventListener) {
                    field.addEventListener(&quot;input&quot;, field.oninput, false);
                } else if (field.attachEvent) {
                    field.attachEvent(&quot;oninput&quot;, field.oninput);
                }
            }
        }
    }
})();
&lt;/script&gt;
</pre>
<h2>En utilisant directement le onPaste</h2>
<p>On peut de toute façon utiliser le <em>onPaste</em>, en oubliant les utilisateurs sous Opera, en utilisant ça, tout simplement :</p>
<pre class="brush: xml; title: ; notranslate">
&lt;input type=&quot;text&quot; onpaste=&quot;return false;&quot; /&gt;
</pre>
<hr />
<p><small><a href="http://www.abricocotier.fr">AbriCoCotier.fr</a>, 2011. |
<a href="http://www.abricocotier.fr/16065-empecher-le-copier-coller-dans-un-champs-input-html">Permalien</a> |
<a href="http://www.abricocotier.fr/16065-empecher-le-copier-coller-dans-un-champs-input-html#comments">2 commentaires</a> | Plugin <a href="http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/">Better Feed</a>, par <a href="http://planetozh.com/">Ozh</a>
<br/>
Rangé dans : <a href="http://www.abricocotier.fr/tag/javascript" rel="tag">JavaScript</a>, <a href="http://www.abricocotier.fr/tag/programmation" rel="tag">Programmation</a>, <a href="http://www.abricocotier.fr/tag/tutoriel" rel="tag">Tutoriel</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.abricocotier.fr/16065-empecher-le-copier-coller-dans-un-champs-input-html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Sensha/ExtJS se lance dans un générateur d&#8217;animations HTML5/CSS3</title>
		<link>http://www.abricocotier.fr/13225-sensha-extjs-generateur-animations-html5-css3-adobe-edge</link>
		<comments>http://www.abricocotier.fr/13225-sensha-extjs-generateur-animations-html5-css3-adobe-edge#comments</comments>
		<pubDate>Fri, 29 Oct 2010 06:33:24 +0000</pubDate>
		<dc:creator>Caroline</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.abricocotier.fr/?p=13225</guid>
		<description><![CDATA[Louis écrivait hier à propos de Adobe Edge, qui serait un Flash Pro orienté vers les nouveaux standards HTML5/CSS3. TechCrunch nous apprend aujourd&#8217;hui que Sencha (l&#8217;entreprise qui se nommait anciennement ExtJS, du même nom que sont produit phare, l&#8217;un des &#8230; <a href="http://www.abricocotier.fr/13225-sensha-extjs-generateur-animations-html5-css3-adobe-edge">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Louis écrivait hier à propos de <a href="http://www.abricocotier.fr/13199-adobe-edge-logiciel-creer-animations-html5-flash">Adobe Edge, qui serait un Flash Pro orienté vers les nouveaux standards HTML5/CSS3</a>. TechCrunch <a href="http://techcrunch.com/2010/10/27/sencha-html5-css3-animator/">nous apprend</a> aujourd&#8217;hui que <a href="http://www.sencha.com/">Sencha</a> (l&#8217;entreprise qui se nommait anciennement ExtJS, du même nom que sont produit phare, l&#8217;un des frameworks JS les plus connus) parie gros sur HTML5/CSS3, et qu&#8217;elle vient de lever, en juin dernier $14 millions de dollars. Et <strong>elle n’a cessé de d’améliorer depuis son framework Sencha Touch</strong>. Il permet aux développeurs de produire des applications compatibles pour iOS comme pour Android. A ceci, Sencha ajoute un nouvel élément : <strong>Sencha Animator</strong>.     <span id="more-13225"></span></p>
<p style="text-align: center;"><img title="hero-animator-sensha-extjs" src="http://www.abricocotier.fr/wp-content/uploads/2010/10/hero-animator-sensha-extjs.jpg" alt="" width="452" /></p>
<p><strong>Si vous avez déjà utilisé Flash auparavant, alors vous ne devriez pas avoir de soucis avec Animator</strong>. C’est un outil permettant de créer des animations en CSS3, qui fonctionneront sur les navigateurs WebKit. Et puis (contrairement à Flash) ces animations ont l’avantage de tourner sur iOS, tout comme sur Android, BlackBerry ou tout autre OS qui supporte WebKit. Faisons maintenant un petit tour du produit, ou tout du moins de la présentation donné par Sencha.</p>
<p>Sencha Animator vous permet de d’animer des objets (textes, formes et images) après configuration de leurs propriétés. Vous pouvez les déplacer, les redimensionner, les avoir en 2D comme en 3D… Avec Sencha Animator, vous tirez avantage du CSS3 en exploitant les flous, les ombres et les reflets, vous créez facilement et rapidement vos animations. Autre gros avantage de Sencha Animator, le code issu de vos créations est du pur CSS3, ce qui signifie une excellente fluidité sur iOS, mais aussi une compatibilité pleine et entière avec toutes les librairies Javascript et pas seulement Sencha.</p>
<p>L’application est disponible sur Mac, Windows et Linux. Aujourd’hui, l’outil est encore brut de décoffrage, il ne s’agit que d’une version Bêta, mais d’autres fonctionnalités, comme le gradient, sont encore en préparation, et arriveront donc d&#8217;ici à court ou moyen terme. Pour les animations de démo, <a href="http://www.sencha.com/products/animator/">c’est ici</a>. Une version standard d’Animator sera vendu à moins de 100 dollars.</p>
<p>Il faut par ailleurs noter que Sencha n’est pas la seule entreprise a concevoir des outils de développement HTML/CSS3, puisqu’Adobe travaille très fort de son côté pour intégrer à ses produits un outil d’édition d’<a href="http://www.abricocotier.fr/13199-adobe-edge-logiciel-creer-animations-html5-flash">HTML5, appelé Edge</a>. Et puis on a aussi Sprout qui propose <a href="http://sproutinc.com/solution/advine/">Advine</a>, un outil d’édition de publicités qui supporte à la fois le HTML5 et Flash.</p>
<hr />
<p><small><a href="http://www.abricocotier.fr">AbriCoCotier.fr</a>, 2010. |
<a href="http://www.abricocotier.fr/13225-sensha-extjs-generateur-animations-html5-css3-adobe-edge">Permalien</a> |
<a href="http://www.abricocotier.fr/13225-sensha-extjs-generateur-animations-html5-css3-adobe-edge#comments">1 commentaire</a> | Plugin <a href="http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/">Better Feed</a>, par <a href="http://planetozh.com/">Ozh</a>
<br/>
Rangé dans : <a href="http://www.abricocotier.fr/tag/adobe" rel="tag">Adobe</a>, <a href="http://www.abricocotier.fr/tag/javascript" rel="tag">JavaScript</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.abricocotier.fr/13225-sensha-extjs-generateur-animations-html5-css3-adobe-edge/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Site Checker, un URL-info fait avec mes mains, sur Google AppEngine</title>
		<link>http://www.abricocotier.fr/12159-site-checker-un-url-info-fait-avec-mes-mains-sur-google-appengine</link>
		<comments>http://www.abricocotier.fr/12159-site-checker-un-url-info-fait-avec-mes-mains-sur-google-appengine#comments</comments>
		<pubDate>Wed, 21 Jul 2010 22:29:49 +0000</pubDate>
		<dc:creator>Louis</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[AppEngine]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Python (et Django)]]></category>

		<guid isPermaLink="false">http://www.abricocotier.fr/?p=12159</guid>
		<description><![CDATA[L&#8217;idée de réaliser un URL-info (pour voir si je serais capable de faire un service aussi utile moi-même) me narguait depuis longtemps. En fait, il s&#8217;avère que ce n&#8217;est pas si difficile. De la même façon que les autres outils &#8230; <a href="http://www.abricocotier.fr/12159-site-checker-un-url-info-fait-avec-mes-mains-sur-google-appengine">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>L&#8217;idée de réaliser un </strong><a href="http://www.abricocotier.fr/2007-urlinfo-pour-connaitre-les-informations-de-bases-dun-site-web"><strong>URL-info</strong></a><strong> (pour voir si je serais capable de faire un service aussi utile moi-même) me narguait depuis longtemps</strong>. En fait, il s&#8217;avère que ce n&#8217;est pas si difficile. De la même façon que les autres outils dont j&#8217;ai déjà expliqué les <a href="http://www.abricocotier.fr/12025-regle-pixel-online-javascript-css-drag-and-drop">développements</a> <a href="http://www.abricocotier.fr/11991-un-client-pour-google-analytics-simplement-en-html-css-et-javascript">a posteriori</a>, je vais dire les grandes lignes de ce qui me vient à l&#8217;esprit après avoir globalement terminé le développement de celui-ci. Avant toute chose, et malgré son évidente proximité avec l&#8217;idéal vers lequel je souhaitais aller, je ne pouvais pas l&#8217;appeler pareil (même si ç&#8217;eût été un hommage), donc <strong>j&#8217;ai trouvé un nom plutôt générique : </strong><a href="http://abricocotierfr.appspot.com/sitechecker"><strong>Site Checker</strong></a>.   <span id="more-12159"></span></p>
<p style="text-align: center;"><img style="border: 2px solid black;" title="site_checker_infos" src="http://www.abricocotier.fr/wp-content/uploads/2010/07/site_checker_infos.jpg" alt="" width="580" height="404" /></p>
<p style="text-align: center;"><em>La &laquo;&nbsp;home-page&nbsp;&raquo; du Site-Checker (une fois qu&#8217;on a entré une URL valide)</em></p>
<p>Plusieurs réflexions, donc :</p>
<p>J&#8217;ai eu des problèmes au début pour savoir quelle librairie de parsing utiliser (j&#8217;avais commencé par minidom, ce qui fut un fiasco, mais j&#8217;ai vite arrété dû au fait qu&#8217;une page web n&#8217;est pas forcément aussi strictement faite qu&#8217;un XML parfait), puis j&#8217;ai eu l&#8217;aide de mon collègue Ali S-O (Ali, je t&#8217;ai promis de te citer <img src='http://www.abricocotier.fr/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' />  ) pour <strong>démarrer sur </strong><a href="http://www.crummy.com/software/BeautifulSoup/"><strong>BeautifulSoup</strong></a> (que j&#8217;avais testé assez lamentablement il y a quelques mois), et je dois avouer que la librairie est sympa. Avec l&#8217;expérience qu&#8217;avait Ali, j&#8217;ai passé très rapidement les étapes de parsing, et quand il s&#8217;agit d&#8217;analyser une page web, autant dire que ça fait déjà une grosse partie du travail qui est abattue.</p>
<p><em>Pour ceux qui me demandent &laquo;&nbsp;pourquoi refaire ce qui existe déjà ?&nbsp;&raquo;, je leur répondrais que je pense qu&#8217;il n&#8217;est pas très simple de faire mieux que l&#8217;existant si on n&#8217;est même pas capable de faire ce qui existe. Et pour être capable de faire ce qui existe, le mieux est de le faire soi-même.</em></p>
<p>J&#8217;admet au passage avoir toujours des <strong>problèmes d&#8217;encodage avec la balise Title</strong> (en utf-8 ou ISO), mais j&#8217;espère trouver comment régler ça, ce qui doit être possible vu que le gars de URL-info le fait.</p>
<p>Comme je le disais, je suis partit pour refaire au moins aussi bien que URL-info. Ça tombe bien, cet outil est également sur GAE, et en python, mais pour ma part je n&#8217;ai pas utilisé jQuery (j&#8217;ai préféré le JS home-made : cela m&#8217;entraine à en faire).</p>
<p>Au début j&#8217;avais mis la barre d&#8217;input de l&#8217;URL en bas, mais en fait <strong>je crois que le plus pratique est bien de la mettre en haut</strong>. C&#8217;est plus pratique, ça &laquo;&nbsp;résume&nbsp;&raquo; ce sur quoi porte l&#8217;analyse en dessous.</p>
<p><strong>Je ne suis pas vraiment content de moi pour la preview des images</strong> : je n&#8217;arrive pas à faire un truc m&#8217;affichant des images ayant une max-height de 100px. Donc là, j&#8217;ai fait comme le gars de URL-info, à savoir height=100px (&laquo;&nbsp;forcé&nbsp;&raquo;), mais ça ne me convient pas : dès qu&#8217;une image est plus petite (hauteur plus faible que 100px), ça la grossit de façon assez peu jolie. A ce niveau là, il y aurait donc moyen de faire mieux.</p>
<p>Pas réussi non-plus à implémenter proprement les onglets. En soit, ce n&#8217;était pas mon but, mais j&#8217;aurais voulu pouvoir mettre un <strong>fond différent en fonction de l&#8217;onglet sur lequel on est</strong>, afin que l&#8217;utilisateur voit où il a cliqué et ce qui est enclenché. Pour l&#8217;instant, à la place, il y a un gros titre en &lt;H2&gt;, mais j&#8217;aimerais quand même un &laquo;&nbsp;onglet&nbsp;&raquo; ou un truc similaire.</p>
<p>Pour ce qui est des expand/collapse des listes<strong>, je l&#8217;ai fait en Javascript &#8216;à la main&#8217;, dans la mesure où je n&#8217;avais pas envie de mettre le fadding</strong> (que lui utilise via jQuery, et que je supporte pas). Je suis contre le fadding dans la mesure où, même si l&#8217;effet est sympa, il est rapidement lourd quand on utilise l&#8217;outil tous les jours.</p>
<p>Je ne suis pas sûr qu&#8217;il utilise la même fonction que moi pour le calcul du temps de téléchargement. Pour ma part, je fais juste un différentiel du temps pris avant et après l&#8217;appel de l&#8217;URL par la fonction urlfetch. Normalement, comme les deux sites fonctionnent sur GAE (et donc utilisent urlfetch, puisque c&#8217;est la seule librairie autorisée pour faire des requêtes HTTP), les temps devraient être exactement les même, mais bon&#8230;</p>
<p>De même,<strong> j&#8217;ai mis pas mal de temps à comprendre comment il calculait la taille en Kb du fichier</strong>. Je ne comprenais pas vraiment comment il pouvait faire, vu que GAE ne permet pas vraiment d&#8217;écrire des fichiers puis de voir la taille via os.environ.getSize()&#8230; En fait, et après quelques comparaisons, <strong>j&#8217;ai fini par comprendre qu&#8217;il prenait la longueur du fichier, il la divisait par 1024 et il tronquait le tout</strong> (pour obtenir un Int). En tout cas, en faisant comme ça, j&#8217;obtiens étonnamment les mêmes résultats que lui&#8230; <img src='http://www.abricocotier.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Pour parler du graphique des liens internes/externes/javascript : je ne sais pas exactement ce qu&#8217;il arrive à aller chercher pour les &laquo;&nbsp;liens Javascript&nbsp;&raquo; (d&#8217;après ce que j&#8217;ai vu, il prends au moins les popups), mais <strong>comme je ne suis en aucun cas sûr de fournir quelque chose de proche de la réalité en parlant de lien &laquo;&nbsp;javascript&nbsp;&raquo;, je préfère ne pas du tout les mettre</strong>, et me limiter aux balises a href. De plus, c&#8217;est la première fois que j&#8217;utilisais <a href="http://code.google.com/intl/fr-FR/apis/charttools/index.html">Google Visualisations API</a>, et je dois reconnaitre que la façon utilisée est extrêmement simple, même si c&#8217;est pas celle sur laquelle j&#8217;étais tombé via les tutoriels de débutant disponible chez Google, où il fallait importer pas mal de librairies JavaScript&#8230; Non, là, une simple URL d&#8217;image un peu trafiquée et on a l&#8217;image qu&#8217;on veut. Parfait <img src='http://www.abricocotier.fr/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Enfin, j&#8217;ai utilisé le <strong>DataStore </strong>de Google AppEngine (pour la première fois a ce niveau là, même si c&#8217;est juste une base), afin de voir ce qui a été vu les dernières fois et pour que Google référence un peu plus de choses. Ça devrait un peu plus aider au développement du site.</p>
<blockquote><p><strong>Edit : Quelques ajouts sur les réflexions.</strong></p>
<ul>
<li>La meilleure des choses serait en fait de faire télécharger au visiteur un programme en javascript ayant les même fonctionnalités. Cela allègerait le serveur en traitements, <strong>MAIS cela ne mettrait pas les calculs de temps de chargement au même niveau (puisque la requête serait faite chez le client, et donc dépendrait de sa connexion internet</strong>) : l&#8217;avantage quand la requête est faite chez Google AppEngine, c&#8217;est qu&#8217;on bénéficie d&#8217;une connexion fibrée et égale sur la durée, donc on peut comparer les temps à partir d&#8217;une base correcte).</li>
<li>J&#8217;avais au début une largeur de 1000px, mais j&#8217;ai réduis à 800px, cela me semble plus joli comme ça.</li>
<li>Pour ce qui est de la rubrique &laquo;&nbsp;Infos&nbsp;&raquo;, les informations collectées le sont grâce à la fonction <a href="http://docs.python.org/library/urlparse.html">urlparse</a> (chez moi). Je pense que le gars de URLinfo utilise la même fonction, étant donné la proximité de nos résultats. A la différence que moi, je n&#8217;affiche que les champs non-vides, lui semble afficher tout.</li>
</ul>
</blockquote>
<p>Voilà. Maintenant quelques écrans.</p>
<p style="text-align: center;"><em>Les headers (où on voit que AbriCoCotier tourne sur Nginx <img src='http://www.abricocotier.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )</em></p>
<p style="text-align: center;"><img style="border: 2px solid black;" title="site_checker_headers" src="http://www.abricocotier.fr/wp-content/uploads/2010/07/site_checker_headers.jpg" alt="" width="580" /></p>
<p style="text-align: center;"><em>Les images</em></p>
<p style="text-align: center;"><img style="border: 2px solid black;" title="site_checker_images" src="http://www.abricocotier.fr/wp-content/uploads/2010/07/site_checker_images.jpg" alt="" width="579" height="265" /></p>
<p style="text-align: center;"><em>Les liens, avec le collapse, et le graphe en Float à droite.</em></p>
<p style="text-align: center;"><img style="border: 2px solid black;" title="site_checker_links" src="http://www.abricocotier.fr/wp-content/uploads/2010/07/site_checker_links.jpg" alt="" width="579" height="324" /></p>
<p>Comme d&#8217;habitude, si vous avez des feedbacks, repérez des bugs, n&#8217;hésitez pas !</p>
<hr />
<p><small><a href="http://www.abricocotier.fr">AbriCoCotier.fr</a>, 2010. |
<a href="http://www.abricocotier.fr/12159-site-checker-un-url-info-fait-avec-mes-mains-sur-google-appengine">Permalien</a> |
<a href="http://www.abricocotier.fr/12159-site-checker-un-url-info-fait-avec-mes-mains-sur-google-appengine#comments">13 commentaires</a> | Plugin <a href="http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/">Better Feed</a>, par <a href="http://planetozh.com/">Ozh</a>
<br/>
Rangé dans : <a href="http://www.abricocotier.fr/tag/appengine" rel="tag">AppEngine</a>, <a href="http://www.abricocotier.fr/tag/javascript" rel="tag">JavaScript</a>, <a href="http://www.abricocotier.fr/tag/programmation" rel="tag">Programmation</a>, <a href="http://www.abricocotier.fr/tag/python" rel="tag">Python (et Django)</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.abricocotier.fr/12159-site-checker-un-url-info-fait-avec-mes-mains-sur-google-appengine/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Une règle à pixel en ligne faite en Javascript/CSS et avec du drag-and-drop</title>
		<link>http://www.abricocotier.fr/12025-regle-pixel-online-javascript-css-drag-and-drop</link>
		<comments>http://www.abricocotier.fr/12025-regle-pixel-online-javascript-css-drag-and-drop#comments</comments>
		<pubDate>Mon, 12 Jul 2010 16:43:03 +0000</pubDate>
		<dc:creator>Louis</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[AppEngine]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programmation]]></category>

		<guid isPermaLink="false">http://www.abricocotier.fr/?p=12025</guid>
		<description><![CDATA[Je continue ma route dans la créations d&#8217;applications en python/javascript sur AppEngine avec maintenant une application de règle en ligne pour le développement Web et le graphisme. Là, l&#8217;idée était de ne pas avoir à installer une règle à pixel &#8230; <a href="http://www.abricocotier.fr/12025-regle-pixel-online-javascript-css-drag-and-drop">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Je continue ma route dans la créations d&#8217;applications en python/javascript sur AppEngine avec maintenant une application de règle en ligne pour le développement Web et le graphisme. Là, <strong>l&#8217;idée était de ne pas avoir à installer une <a href="http://abricocotierfr.appspot.com/ruler">règle à pixel</a> à chaque fois que l&#8217;on change d&#8217;ordinateur</strong>, mais d&#8217;en retrouver une sur le web où que l&#8217;on soit et que l&#8217;on aille. Malheureusement, ma recherche d&#8217;applications similaires sur le web s&#8217;étant révélée infructueuse, je me suis rendu à l&#8217;évidence qu&#8217;il fallait que j&#8217;en développe une moi-même (why not, après tout). C&#8217;est donc ce que <a href="http://abricocotierfr.appspot.com/ruler">j&#8217;ai fait</a>.    <span id="more-12025"></span></p>
<p style="text-align: center;"><a href="http://farm5.static.flickr.com/4119/4786558551_15e4ec91fb_o.png"><img style="border: 2px solid black;" title="abricocotier_pixel_ruler" src="http://www.abricocotier.fr/wp-content/uploads/2010/07/abricocotier_pixel_ruler.jpg" alt="" width="580" /></a></p>
<p><strong>Plusieurs choses :</strong></p>
<p><strong></strong>Je voulais d&#8217;abord me <strong>limiter à une règle entourant la page</strong> (parce que je ne pensais pas avoir la possibilité technique d&#8217;aller plus loin), celle que l&#8217;on voit en jaune, qui est <strong>utilisable notamment en redimmensionant votre page web</strong>. C&#8217;était bien, mais déjà pas forcément très simple à gérer. En fait, j&#8217;aurais voulu que la partie centrale du tableau (celle qui contient la page web cible) aille jusqu&#8217;au bas de la page, mais je ne voyais pas comment faire ça (les conseils donné un peu partout sur le web de mettre un html,body{hright:100%;} n&#8217;ont pas fait grand chose pour améliorer ma situation). Donc au final j&#8217;ai choisis l&#8217;option de mettre une taille de départ (600px de haut pour la table) avec la possibilité, en haut à droite de la table, d&#8217;augmenter cette taille ou de la réduire pour pouvoir travailler sur une zone adaptée à chacun.</p>
<p>Ceci fait, je me suis dit qu&#8217;il pourrait vraiment être sympa de faire une <strong>règle en &laquo;&nbsp;drag and drop&nbsp;&raquo; au dessus de l&#8217;iframe</strong>, parce que cela permettrait vraiment d&#8217;avoir un comportement proche de ce que l&#8217;on a quand on utilise une règle à pixel sur son PC. A ma grande surprise, je n&#8217;ai quasiment pas eu de problème pour la réaliser. J&#8217;ai pris le code fournis par <a href="http://blog.oli-web.com/?2006/04/09/37-drag-n-drop-javascript">Oli-web</a>, qui a eu le mérite de fonctionner assez rapidement chez moi (pour ceux qui ne connaissent pas le principe, le voici : c&#8217;est juste un élément flottant dans la page, qu&#8217;on fait bouger en modifiant en direct les valeurs de positionnement grâce au javascript).</p>
<p>L&#8217;évolution suivante a été d&#8217;implémenter le choix de l&#8217;unité de mesure au sein même de la règle. Avec <strong>un peu de Javascript changeant la propriété CSS de background, et un background différent par unité de mesure</strong>, ce problème a été réglé (bon, et un peu de KolourPaint pour adapter les règles horizontales à la verticale, mais c&#8217;est négligeable). Pour une meilleure lisibilité des différentes unités de mesure, j&#8217;ai rajouté un PNG un peu transparent permettant de rendre plus sombre le derrière des unités de mesure, et donc d&#8217;y voir plus clair.</p>
<p>Par contre, je n&#8217;ai toujours pas trouvé la façon dont je pourrais réaliser proprement un tour de 90° de la règle, parce que le code Javascript que j&#8217;essayais ne fonctionnait pas. En effet, pour implémenter les nouvelles valeurs de CSS (notamment pour le changement du background, ainsi que pour le changement de valeurs entre la hauteur et la largeur), il fallait récupérer celles en place, mais je n&#8217;arrivais pas à les récupérer proprement et à faire un tri à partir de ça.</p>
<p>Enfin, j&#8217;ai <a href="http://abricocotierfr.appspot.com/ruler">rajouté</a> un <strong>lien permettant de rafraichir l&#8217;iframe en place</strong>, car celà permettait de travailler sur un même document avec les règles correctement positionnées, ce qui ne serait pas possible dans le cas d&#8217;un rechargement complet d&#8217;une page (car dans ce cas, les règles se remettent dans leur position d&#8217;origine).</p>
<p>Pour ceux qui ont la flemme d&#8217;aller tester l&#8217;outil, voici encadrés les éléments les plus importants :</p>
<p style="text-align: center;"><img style="border: 2px solid black;" title="regle_refresh_moreless" src="http://www.abricocotier.fr/wp-content/uploads/2010/07/regle_refresh_moreless.jpg" alt="" width="580" height="507" /></p>
<p>Pour ce qui est du test de compatibilité, j&#8217;ai testé pour Chrome 5 et 6, ainsi que Firefox 3.6, mais rien de plus. Si vous avez d&#8217;autres navigateurs &laquo;&nbsp;acceptable&nbsp;&raquo; (Opera, Safari, Internet Explorer 7+), je suis preneur de feedbacks.</p>
<p>La <a href="http://abricocotierfr.appspot.com/ruler">règle à pixels est là</a>.</p>
<hr />
<p><small><a href="http://www.abricocotier.fr">AbriCoCotier.fr</a>, 2010. |
<a href="http://www.abricocotier.fr/12025-regle-pixel-online-javascript-css-drag-and-drop">Permalien</a> |
<a href="http://www.abricocotier.fr/12025-regle-pixel-online-javascript-css-drag-and-drop#comments">16 commentaires</a> | Plugin <a href="http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/">Better Feed</a>, par <a href="http://planetozh.com/">Ozh</a>
<br/>
Rangé dans : <a href="http://www.abricocotier.fr/tag/appengine" rel="tag">AppEngine</a>, <a href="http://www.abricocotier.fr/tag/javascript" rel="tag">JavaScript</a>, <a href="http://www.abricocotier.fr/tag/programmation" rel="tag">Programmation</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.abricocotier.fr/12025-regle-pixel-online-javascript-css-drag-and-drop/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Un générateur de mots de passe en javascript</title>
		<link>http://www.abricocotier.fr/12018-un-generateur-de-mots-de-passe-en-javascript</link>
		<comments>http://www.abricocotier.fr/12018-un-generateur-de-mots-de-passe-en-javascript#comments</comments>
		<pubDate>Mon, 12 Jul 2010 10:11:24 +0000</pubDate>
		<dc:creator>Louis</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.abricocotier.fr/?p=12018</guid>
		<description><![CDATA[Dans l&#8217;optique de continuer mon auto-formation au Javascript, et par la même de diminuer mon sentiment d&#8217;ignorance face à ce langage, j&#8217;ai entrepris de réaliser un générateur de mots de passe en version Javascript. Ne nous méprenons pas : rien &#8230; <a href="http://www.abricocotier.fr/12018-un-generateur-de-mots-de-passe-en-javascript">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Dans l&#8217;optique de continuer mon auto-formation au Javascript, et par la même de diminuer mon sentiment d&#8217;ignorance face à ce langage, j&#8217;ai entrepris de réaliser un générateur de mots de passe en version Javascript. Ne nous méprenons pas : rien à voir avec celui que j&#8217;avais déjà fait en PHP, car le principe de celui-ci est que tout est créé en local, et donc en somme, aucun mot de passe généré ne passe à travers le réseau. Je suis sûr que cette précision en rassurera quelques uns <img src='http://www.abricocotier.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />     <span id="more-12018"></span></p>
<p style="text-align:center;border: 1px solid black"><img src="http://www.abricocotier.fr/wp-content/uploads/2010/07/password_generator.jpg" alt="" title="password_generator" width="580" /></p>
<p><strong>Comment ce générateur fonctionne ?</strong></p>
<p>De la même façon que le <a href="http://www.abricocotier.fr/459-petit-generateur-de-mots-de-passe-open-source-en-php">générateur PHP</a>, ce générateur en Javascript génère en fonction de ce qui a été choisit pour créer le mot de passe : longueur et choix des différents caractères, les minuscules étant obligatoirement intégrées.</p>
<p>Ensuite, et sur le modèle du <a href="http://www.blazonry.com/javascript/password.php">code trouvé sur Blazonry</a>, j&#8217;ai adopté l&#8217;idée de calquer le chiffre généré aléatoirement sur les codes de données/valeur de <a href="http://www.asciitable.com/">l&#8217;Ascii</a>. Sur Blazonry, seul l&#8217;inclusion de caractères spéciaux ou non est gérée, mais j&#8217;ai préféré découper cela dans les différents types de caractères.</p>
<p>En terme de performances, ce qui est pas mal, c&#8217;est que tout se passe sur l&#8217;ordinateur du client, donc celui-ci n&#8217;a plus besoin du serveur une fois qu&#8217;il a téléchargé la page web et son fichier javascript associé. Donc pas de problème si l&#8217;utilisateur veut regénérer 15 fois un nouveau password (si celui-ci ne lui plait pas). Et cela implique moins de coût de processeur/bande passante a priori (même si en terme de bande passante, le coût est supérieur pour un seul téléchargement vu qu&#8217;il faut compter le coût associé au fichier JS. Je pense que le point d&#8217;égalité en terme de coût est situé pour 2 mots de passes générés). Bon, évidemment, en fait tout cela est négligeable, je doute que beaucoup de monde ait des problèmes de bande passante pour envoyer un pauvre fichier Javascript, mais disons que j&#8217;aurais pu être critiqué si je ne l&#8217;avais pas précisé.</p>
<p>Ce <strong><a href="http://abricocotierfr.appspot.com/passwordgenerator">générateur</a></strong> est mis sur le domaine <a href="http://abricocotierfr.appspot.com/">AbriCoCotier Application</a>.</p>
<p><strong>Ci-dessous, le code du fichier JS :</strong></p>
<pre class="brush: jscript; title: ; notranslate">
function GeneratePassword() {

    if (parseInt(navigator.appVersion) &lt;= 3) {
        alert(&quot;Sorry this only works in 4.0+ browsers&quot;);
        return true;
    }

    var length=12;
    var sPassword = &quot;&quot;;
    length = document.aForm.charLen.options[document.aForm.charLen.selectedIndex].value;

    var lowercase = 1;
    var uppercase = (document.aForm.uppercase.checked);
    var figures = (document.aForm.figures.checked);
    var punction = (document.aForm.punctuation.checked);            

    for (i=1; i &lt;= length; i++) {

        numI = getRandomNum();
        if ((punction == 0 &amp;&amp; checkPunc(numI)) || (figures == 0 &amp;&amp; checkFigures(numI)) ||(uppercase == 0 &amp;&amp; checkUppercase(numI))) {i -= 1;}
        else {sPassword = sPassword + String.fromCharCode(numI);}
    }

    document.aForm.passField.value = sPassword

    return true;
}

function getRandomNum() {
    // between 0 - 1
    var rndNum = Math.random()
    // rndNum from 0 - 1000
    rndNum = parseInt(rndNum * 1000);
    // rndNum from 33 - 127
    rndNum = (rndNum % 94) + 33;
    return rndNum;
}

function checkPunc(num) {
    if (((num &gt;=33) &amp;&amp; (num &lt;=47)) || ((num &gt;=58) &amp;&amp; (num &lt;=64))) { return true; }
    if (((num &gt;=91) &amp;&amp; (num &lt;=96)) || ((num &gt;=123) &amp;&amp; (num &lt;=126))) { return true; }
    return false;
}

function checkFigures(num) {
    if ((num &gt;=48) &amp;&amp; (num &lt;=57)) { return true; }
    else { return false; }
}

function checkUppercase(num) {
    if ((num &gt;=65) &amp;&amp; (num &lt;=90)) { return true; }
    else { return false; }
}
</pre>
<hr />
<p><small><a href="http://www.abricocotier.fr">AbriCoCotier.fr</a>, 2010. |
<a href="http://www.abricocotier.fr/12018-un-generateur-de-mots-de-passe-en-javascript">Permalien</a> |
<a href="http://www.abricocotier.fr/12018-un-generateur-de-mots-de-passe-en-javascript#comments">11 commentaires</a> | Plugin <a href="http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/">Better Feed</a>, par <a href="http://planetozh.com/">Ozh</a>
<br/>
Rangé dans : <a href="http://www.abricocotier.fr/tag/javascript" rel="tag">JavaScript</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.abricocotier.fr/12018-un-generateur-de-mots-de-passe-en-javascript/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Un client pour Google Analytics simplement en HTML, CSS et JavaScript</title>
		<link>http://www.abricocotier.fr/11991-un-client-pour-google-analytics-simplement-en-html-css-et-javascript</link>
		<comments>http://www.abricocotier.fr/11991-un-client-pour-google-analytics-simplement-en-html-css-et-javascript#comments</comments>
		<pubDate>Tue, 06 Jul 2010 17:31:36 +0000</pubDate>
		<dc:creator>Louis</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[AppEngine]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Python (et Django)]]></category>

		<guid isPermaLink="false">http://www.abricocotier.fr/?p=11991</guid>
		<description><![CDATA[Depuis le temps que je me plains du fait que Google Analytics ne propose qu&#8217;une interface contenant du Flash, il était temps que je trouve quelque chose de mieux. De surcroît, passant en ce moment pas mal de temps chez &#8230; <a href="http://www.abricocotier.fr/11991-un-client-pour-google-analytics-simplement-en-html-css-et-javascript">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Depuis le temps que je me plains du fait que Google Analytics ne propose qu&#8217;une interface contenant du Flash, il était temps que je trouve quelque chose de mieux. De surcroît, passant en ce moment pas mal de temps chez la famille le week-end, je n&#8217;ai pas toujours d&#8217;accès à Internet autre que celui de mon smartphone, donc il me fallait une interface que celui-ci serait capable d&#8217;utiliser. J&#8217;avais jusqu&#8217;à récemment un BlackBerry 8520 ne supportant que le HTTP et le CSS (et un tout petit peu le JavaScript, mais pas de quoi faire ce dont j&#8217;avais besoin), et aujourd&#8217;hui j&#8217;ai quelquechose d&#8217;autre, un petit peu plus évolué, mais <strong>ne gérant pas le flash</strong>. Enfin, comme je vais voir l&#8217;évolution du nombre de visiteurs pour ce présent site plusieurs fois par jour, il est toujours énervant d&#8217;avoir à chaque fois à reloader l&#8217;appli flash de sélection du jour, etc. Donc il fallait que je trouve sur le web quelque chose de simple, léger, rapide. Ou que je le développe moi-même.<span id="more-11991"></span></p>
<p>J&#8217;ai donc réfléchis au début à faire quelque chose juste en HTTP/CSS, mais je dois avouer que j&#8217;ai vraiment eu du mal. Je voulais depuis le début baser le tout sur un <a href="http://abricocotierfr.appspot.com/">compte AppEngine</a>, donc il fallait que ce que je développe soit compatible avec leur plateforme, ce qui n&#8217;a pas été le cas pour les premiers essais que j&#8217;ai fait avec leur librairie Analytics (que j&#8217;ai testé au début) présente au sein de la Gdata Python. Bref (en fait, leur librairie Gdata Python / Analytics fonctionne très bien, mais elle ne fonctionne par sur le dev_appserver de AppEngine). Entre temps, comme je l&#8217;expliquais plus haut, j&#8217;ai changé de smartphone, et le nouveau s&#8217;est révélé tout à fait capable de supporter le Javascript, donc je suis passé sur le client Javascript fournit sur la <a href="http://code.google.com/intl/fr-FR/apis/analytics/docs/gdata/gdataLibraries.html">doc de Google</a>.</p>
<p><em>Comme d&#8217;habitude, je le répète, loin de moi l&#8217;idée de me vanter ici : je ne fais ce genre d&#8217;application que pour me prouver que je suis capable de les faire, ayant l&#8217;impression perpétuelle d&#8217;être mauvais en programmation. Et puis au passage, je mets le service à dispo pour tout le monde, parce que ça ne coûte rien et que ça peut servir.</em></p>
<p>Sur le coup, le but était multiple : au début, il fallait que je créée un <strong>client Analytics en HTTP/CSS/JS qui fournirait les infos que je vais voir le plus souvent sur Analytics</strong> (les pages les plus vues de la journée en cours, ainsi que le nombre de visiteurs uniques/pages vues de la journée en cours). Par la suite, j&#8217;ai eu l&#8217;opportunité de <strong>rajouter des graphiques</strong> dessus, ce qui m&#8217;a permit de &laquo;&nbsp;valider&nbsp;&raquo; une promesse que <a href="http://www.abricocotier.fr/9036-quelques-resolutions-pour-lannee-2010">je m&#8217;étais faite au début de l&#8217;année</a>.</p>
<p>Donc en terme de technologies utilisées, il y a <a href="http://abricocotierfr.appspot.com/">une base</a> de pages simples en python sur AppEngine (ce qui permet d&#8217;avoir un coût d&#8217;hébergement égal à zéro), avec une base de Javascript via la doc pour JavaScript donnée par Google, avec une surcouche de JavaScript via la <a href="http://www.jscharts.com/how-to-use-customization">librairie JSCharts</a> qui créée des graphiques via des balises &lt;canvas&gt; (c&#8217;est donc du HTML5, mais mon smartphone supporte ça très bien). J&#8217;ai utilisé les graphiques en bâtons et en courbes.</p>
<h2><strong>Les écrans de l&#8217;application</strong></h2>
<p>Je ne vais pas y aller par quatre chemins. D&#8217;abord et avant tout, plutôt qu&#8217;un long discours, <a href="http://abricocotierfr.appspot.com/analytics">l&#8217;application est disponible ici</a>.</p>
<p>Pour le reste, l&#8217;application fonctionne comme suis :<em> (J&#8217;ai gardé l&#8217;interface de base du client Javascript fourni par Google, et j&#8217;ai rajouté/compilé/adapté quelques fonctionnalités.)</em></p>
<p>Après vous être loggué chez Google (l&#8217;application ne retient aucun mot de passe, tout se passe chez vous), vous arrivez sur un écran. Cliquez sur le <strong>bouton &laquo;&nbsp;Get Account Data&nbsp;&raquo;</strong>, et vous obtiendrez laliste des comptes que vous avez chez Analytics. A droite de chaque compte, un <strong>bouton &laquo;&nbsp;Choose&nbsp;&raquo;</strong> qui met dans le champ le code correspondant au compte sélectionné.</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-11992" style="border: 2px solid black;" title="analytics_client_comptes" src="http://www.abricocotier.fr/wp-content/uploads/2010/07/analytics_client_comptes.jpg" alt="" width="581" height="292" /></p>
<p>Ne vous reste plus ensuite qu&#8217;à cliquer sur le <strong>bouton &laquo;&nbsp;Get PageWiewed&nbsp;&raquo;</strong> pour obtenir la liste des pages les plus vues sur la journée (par contre, je n&#8217;ai pas encore réussi à résoudre le problème d&#8217;encodage) :</p>
<p style="text-align: center;"><img class="alignnone size-medium wp-image-11993" style="border: 2px solid black;" title="analytics_client_pageviews" src="http://www.abricocotier.fr/wp-content/uploads/2010/07/analytics_client_pageviews.jpg" alt="" width="580" /></p>
<p>Ou bien vous pouvez également cliquer sur le <strong>bouton &laquo;&nbsp;Get Visits&nbsp;&raquo;</strong> pour obtenir la liste des visites uniques, nombre de pages vues et ratio sur les 14 derniers jours. Les données affichées sont exactement les mêmes que celles que vous aurez en allant sur votre compte Analytics (si si, vérifiez, si vous ne le croyez pas).</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-11994" style="border: 2px solid black;" title="analytics_client_visits" src="http://www.abricocotier.fr/wp-content/uploads/2010/07/analytics_client_visits.jpg" alt="" width="580" height="455" /></p>
<p>Je compte améliorer le client, histoire de rajouter les fonctionnalités de listing des mots clefs/sites référents sur la dernière journée, mais aussi  des visiteurs (navigateurs, système d&#8217;exploitation, etc) sur les 14 derniers jours, sur les modèles des pages existants déjà.</p>
<p>Pour ce qui est du support des différents navigateurs, je sais que cela fonctionne sur Firefox 3.6.x, Chrome 5 et 6, et même Internet Explorer 7 (pour ceux qui seraient dessus&#8230;) (oui, ce sont les navigateurs testés ; je n&#8217;ai pas les autres sous la main).</p>
<p>Vous remarquerez également que le compte <a href="http://abricocotierfr.appspot.com/">AbriCoCotier Application</a> contient :</p>
<ul>
<li>Un <a href="http://abricocotierfr.appspot.com/whois">outil de Whois</a> (qui passe par l&#8217;API de <a href="www.whoisxmlapi.com/">WhoisXMLAPI</a> en HTTP car AppEngine n&#8217;autorise que ce port là)</li>
<li>Un outil pour vous <a href="http://abricocotierfr.appspot.com/myip">donner votre IP</a></li>
<li>Un <a href="http://abricocotierfr.appspot.com/wordcount">compteur de mots</a></li>
<li>Je compte rajouter d&#8217;autres applications, me permettant d&#8217;aller me frotter à d&#8217;autres API de Google, ou autres.</li>
</ul>
<p>Je suis bien sûr au courant que ces petits outils existent déjà, mais ils font partie de ma volonté de &laquo;&nbsp;les avoir fait moi-même&nbsp;&raquo;.</p>
<p><em>Si vous avez un commentaire là dessus, ou souhaitez rapporter un bug, une faute d&#8217;orthographe, n&#8217;hésitez pas, les commentaires sont faits pour ça.</em></p>
<hr />
<p><small><a href="http://www.abricocotier.fr">AbriCoCotier.fr</a>, 2010. |
<a href="http://www.abricocotier.fr/11991-un-client-pour-google-analytics-simplement-en-html-css-et-javascript">Permalien</a> |
<a href="http://www.abricocotier.fr/11991-un-client-pour-google-analytics-simplement-en-html-css-et-javascript#comments">3 commentaires</a> | Plugin <a href="http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/">Better Feed</a>, par <a href="http://planetozh.com/">Ozh</a>
<br/>
Rangé dans : <a href="http://www.abricocotier.fr/tag/appengine" rel="tag">AppEngine</a>, <a href="http://www.abricocotier.fr/tag/google" rel="tag">Google</a>, <a href="http://www.abricocotier.fr/tag/javascript" rel="tag">JavaScript</a>, <a href="http://www.abricocotier.fr/tag/programmation" rel="tag">Programmation</a>, <a href="http://www.abricocotier.fr/tag/python" rel="tag">Python (et Django)</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.abricocotier.fr/11991-un-client-pour-google-analytics-simplement-en-html-css-et-javascript/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

