<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"> <channel><title>Geekos</title> <link>http://geekos.fr</link> <description>Geekos: Développement Web - Astuces et tutos</description> <lastBuildDate>Tue, 14 Feb 2012 13:36:06 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/geekos/fr" /><feedburner:info uri="geekos/fr" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><title>jQuery : Astuces et conseils pour améliorer les performances</title><link>http://feedproxy.google.com/~r/geekos/fr/~3/XtYvBATvzVY/</link> <comments>http://geekos.fr/02/2012/jquery-astuces-et-conseils-pour-ameliorer-les-performances/#comments</comments> <pubDate>Tue, 14 Feb 2012 13:24:46 +0000</pubDate> <dc:creator>Benjamin Longearet</dc:creator> <category><![CDATA[JavaScript]]></category> <category><![CDATA[jQuery]]></category> <category><![CDATA[Technologies de développement Web]]></category> <category><![CDATA[1.7.1]]></category> <category><![CDATA[astuces]]></category> <category><![CDATA[Javascript]]></category> <category><![CDATA[optimisation]]></category> <category><![CDATA[performance]]></category> <category><![CDATA[rapidité]]></category> <category><![CDATA[test de performance]]></category> <category><![CDATA[tips]]></category> <category><![CDATA[tips jquery]]></category> <guid isPermaLink="false">http://geekos.fr/?p=1168</guid> <description><![CDATA[Je vais vous lister ici quelques petites astuces à mettre en pratique pour gagner du temps sur l&#8217;exécution de vos différentes scripts jQuery. Pourquoi améliorer les performances ? Bon à priori personne ne vous pose cette question! Mais on va y répondre brièvement. Il est essentiel d&#8217;augmenter les performances et de penser a optimiser son ]]></description> <content:encoded><![CDATA[<p>Je vais vous lister ici quelques petites astuces à mettre en pratique pour gagner du temps sur l&#8217;exécution de vos différentes scripts jQuery.</p><h2>Pourquoi améliorer les performances ?</h2><p>Bon à priori personne ne vous pose cette question! Mais on va y répondre brièvement. Il est essentiel d&#8217;augmenter les performances et de penser a optimiser son code source de façon automatique en JavaScript.</p><p>Une mauvaise optimisation peut causer l&#8217;arrêt brutal du navigateur du client, qui perd alors tous les sites en cours de consultation et tous les résultats calculer avant le crash.</p><p>Une application est amenée également à évoluer, ce qui implique de rajouter des fonctionnalités ou d&#8217;améliorer celles existantes. Donc plus de code, plus de calcul/travail, plus de mémoire utilisé. Résultat: des applications de plus en plus lentes.</p><h2>Comment mesurer les performances</h2><p>J&#8217;utilise depuis peu un site qui permet très facilement de comparer le fonctionnement de différente méthode pour un même résultat. On obtient de jolies graphiques et des stats très bien faite permettant de trouver la meilleure des solutions.</p><p>Ce site s&#8217;appelle <a
title="jsPerf.com" href="http://jsPerf.com" target="_blank">jsPerf.com</a> et permet de partager les tests aussi facilement que la création.</p><h3>jQuery: hasClass() versus is()</h3><p>Pour vous aider un peu sur l&#8217;interprétation des résultats de ce site je vous propose deux petites captures d&#8217;écran du résultat d&#8217;un test comparatif entre les méthodes hasClass() et is() de la librairie jQuery.</p><p>Ce test est en utilisation libre à l&#8217;adresse suivante : <a
href="http://jsperf.com/hasclasstest">http://jsperf.com/hasclasstest</a> (je n&#8217;en suis pas l&#8217;auteur).</p><p
style="text-align: center;"><a
href="http://geekos.fr/wp-content/uploads/2012/02/2012-02-13_151740.png" class="lightbox" ><img
class=" wp-image-1170 aligncenter" title="2012-02-13_151740" src="http://geekos.fr/wp-content/uploads/2012/02/2012-02-13_151740.png" alt="" width="577" height="151" /></a></p><p
style="text-align: center;"><a
href="http://geekos.fr/wp-content/uploads/2012/02/2012-02-13_151815.png" class="lightbox" ><img
class=" wp-image-1169 aligncenter" title="2012-02-13_151815" src="http://geekos.fr/wp-content/uploads/2012/02/2012-02-13_151815.png" alt="" width="581" height="349" /></a></p><p
style="text-align: left;">C&#8217;est bien beau! Mais comment décrypter ces différentes informations?</p><table
border="0" cellspacing="10" cellpadding="10" align="center"><tbody><tr><td
style="background-color: #f5f5f5; border-width: 1px; border-color: #9b9b9b; border-style: solid; padding: 5px;"><h4 style="text-align: center;">opt/sec</h4></td><td
style="background-color: #f5f5f5; border-width: 1px; border-color: #9b9b9b; border-style: solid; padding: 5px;"><h4 style="text-align: center;">+ ou -</h4></td><td
style="background-color: #f5f5f5; border-width: 1px; border-color: #9b9b9b; border-style: solid; padding: 5px;"><h4 style="text-align: center;">% en rapport avec le plus rapide</h4></td></tr><tr><td
style="background-color: #f5f5f5; border-width: 1px; border-color: #9b9b9b; border-style: solid; padding: 5px;">C&#8217;est le nombre de fois que le test est exécuté par seconde</td><td
style="background-color: #f5f5f5; border-width: 1px; border-color: #9b9b9b; border-style: solid; padding: 5px;">C&#8217;est le pourcentage + ou &#8211; de certitude du chiffre opt/sec</td><td
style="background-color: #f5f5f5; border-width: 1px; border-color: #9b9b9b; border-style: solid; padding: 5px;">A la fin du test, ce pourcentage est calculé par rapport au plus rapide des cas testés afin d&#8217;avoir rapidement un comparatif rapide des différents cas de test.</td></tr></tbody></table><h2>Quelques astuces afin d&#8217;améliorer les performances jQuery</h2><h3>Avant tout!</h3><p>Utiliser au maximum les dernières version de jQuery. L&#8217;équipe de dév s&#8217;efforce a améliorer les performances entre les versions (tout en pensant au tests de régression sur vos scripts/plugins [:D]).</p></p><ul
class="checklist"><li>Performances améliorés et nouvelles fonctionnalités disponibles</li><li>Des patchs de correction dans les version l.x.y</li><li>Presque 50% des sites utilisent jQuery &#8230; Framework très <strong>largement</strong> testé</li><li>Des milliers d&#8217;autres raisons <img
src='http://geekos.fr/wp-includes/images/smilies/icon_lol.gif' alt='[:D]' class='wp-smiley' /></li></ul><p><p>&nbsp;</p><p>Utiliser les CDN mis à disposition. Voici quelques liens de repository CDN:</p><ul><li>Google : <a
href="http://code.google.com/intl/fr-FR/apis/libraries/devguide.html">http://code.google.com/intl/fr-FR/apis/libraries/devguide.html</a></li><li>Microsoft : <a
href="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.2.min.js" target="_blank">http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.2.min.js</a></li><li>jQuery : <a
href="http://code.jquery.com/jquery-1.6.2.min.js" target="_blank">http://code.jquery.com/jquery-1.6.2.min.js</a></li></ul><h3>Bien choisir les sélecteurs</h3><p>Il faut garder à l&#8217;esprit que pour obtenir la même chose il existe différents moyens. Pour jQuery, plusieurs sélecteurs peuvent retourner le même objet, mais le temps d&#8217;exécution est à vérifier. Il faut savoir que certains sélecteurs sont TOUJOURS plus rapide que les autres.</p><h4>Les sélecteurs jQuery les plus rapides</h4><p>Les identifiants et les éléments natifs du DOM sont les plus rapide à atteindre. Pourquoi ? Et bien car il existe des fonctions natives utilisées par le framework jQuery (cf. getElementById()).</p></p><ul
class="checklist"><li>#idDeMonElement</li><li>form, input, label, etc&#8230;</li></ul><p><h4>Les sélecteurs jQuery les plus lent</h4><h5>Les classes</h5><p>L&#8217;utilisation des classes pour récupérer des éléments est assez lent (comparé aux résultats du chapitre précédent évidemment &#8230;) pour la simple raison que la méthode native getElementsByClassName() est présente uniquement dans les navigateurs suivant : IE9+, FF3+, Safari 4+, Chrome 4+, Opera 10.10+. Dans les autres versions de navigateur (notamment IE 7 et 8 qui sont très utilisé) l&#8217;utilisation des classes comme sélecteur est plus lente.</p><h5>Les pseudo-class et attribut</h5><p>L&#8217;utilisation de ces sélecteurs est rapide dans les navigateurs récent car ils incluent les méthodes querySelector() et querySelectorAll() dans leur moteur. Pour les autres, l&#8217;utilisation est non optimisé car jQuery doit lui même rechercher parmi le DOM les résultats à retourner.</p><h4>Conclusion</h4><p>Pour vous faire un idée sur la rapidité entre les versions et autres, je vous invite à consulter les tests présents sur jsperf.com et plus précisément ces tests : <a
href="http://jsperf.com/dh-jquery-1-4-vs-1-6/13">http://jsperf.com/dh-jquery-1-4-vs-1-6/13</a> et <a
href="http://jsperf.com/jquery-vs-sizzle-vs-midori-vs-mootools-selectors-test/41">http://jsperf.com/jquery-vs-sizzle-vs-midori-vs-mootools-selectors-test/41</a>.</p><h3> Mettre en cache votre objet jQuery</h3><p>Le test ci-dessous vous montre qu&#8217;il est plus rapide de stocker l&#8217;objet jQuery dans une variable et d&#8217;effectuer les modifications sur cet objet.</p><p
style="text-align: center;"><a
href="http://geekos.fr/wp-content/uploads/2012/02/10.png" class="lightbox" ><img
class=" wp-image-1174 aligncenter" title="jQuery : Test de performance cache d'objet jQuery" src="http://geekos.fr/wp-content/uploads/2012/02/10.png" alt="" width="575" height="322" /></a></p><h4 style="text-align: left;">Petit plus!</h4><p>Sur mes projets, je met en place un objet qui s&#8217;occupe de sauvegarder en cache ces éléments afin d&#8217;y accéder plus rapidement. Le code ci-dessous vous montre un aperçu <strong><span
style="text-decoration: underline;">très</span></strong> bref de la mise en place d&#8217;élément en cache.</p><pre>
<pre>var $manager = {
	header: $("#header"),
	content: $("#content"),
	footer": $("#footer")
}
// Utilisation du manager
var heightHeader = $manager.header.width();
var heightFooter = $manager.footer.width();
// On stock un nouvel élément dans le manager
$manager.connectBox = $("#connectBox");
$manager.connectBox.fadeIn(3000);</pre></pre><h3 style="text-align: left;">Limiter la manipulation direct du DOM : html(), append(), etc.</h3><p
style="text-align: center;"><a
href="http://geekos.fr/wp-content/uploads/2012/02/11.png" class="lightbox" ><img
class=" wp-image-1175 aligncenter" title="jQuery : Test de performance DOM manipulation" src="http://geekos.fr/wp-content/uploads/2012/02/11.png" alt="" width="576" height="379" /></a></p><p
style="text-align: left;">Ce test parle de lui même. Le plus rapide est celui qui utilise une seule fois la méthode append() qui permet d&#8217;ajouter à la fin de l&#8217;élément parent du contenu.</p><h3 style="text-align: left;">Déléguer aux parents les évènements</h3><p>Si vous souhaitez capter l&#8217;évènement du click sur un élémént de list</p><ul><li>vous allez procéder de la sorte:</li></ul><p>&nbsp;</p><pre>
<pre>// Code HTML
&lt;div id=&quot;navigation&quot;&gt;
	&lt;a href=&quot;#menu1&quot;&gt;Menu 1&lt;/a&gt;
	&lt;a href=&quot;#menu2&quot;&gt;Menu 2&lt;/a&gt;
	&lt;a href=&quot;#menu3&quot;&gt;Menu 3&lt;/a&gt;
	&lt;a href=&quot;#menu4&quot;&gt;Menu 4&lt;/a&gt;
	&lt;a href=&quot;#menu5&quot;&gt;Menu 5&lt;/a&gt;
&lt;/div&gt;
// Code javascript
$(&#039;#navigation a&#039;).bind(&#039;click&#039;, function(e) {
	e.preventDefault();
	$this = $(this);
	// Changement de couleur par exemple
	$this.css({
		&#039;color&#039;:&#039;red&#039;,
		&#039;font-weight&#039;:&#039;bold&#039;
	});
});</pre></pre><p>Un sacré gain de temps d&#8217;environ 80% pour l&#8217;initialisation de l&#8217;évènement.</p><h3>Enlever tous les appels inutiles</h3><p>En général, nous avons dans les applications des méthodes qui permettent d&#8217;initialiser TOUS les éléments, évènements, objet, etc &#8230; Même sur une page qui n&#8217;a besoin que de 80% des actions, nous utilisons cette méthode init()&#8230;</p><p>Pensez à créer une méthode init() pour chaque page et en découpant correctement votre code vous aurez des performances plus agréable visuellement pour l&#8217;utilisateur.</p><h3>Compresser vos JS</h3><p>un outil fabuleux YUICompressor permet de minifier au maximum vos scripts. Toute la place gagnée par des variables plus courtes, les retours à la ligne enlevés, etc. est utile lors du téléchargement par l&#8217;utilisateur de votre fichier javascript.</p><h3>Encore d&#8217;autres</h3><p>Cette liste n&#8217;est pas exhaustive et peut-être sujet à modification. Si vous avez quelques idées, je peut venir les intégrer à cette mini-liste.</p><h2>Conclusion</h2><p>On peut améliorer les performances de l&#8217;utilisation de jQuery en appliquant les bonnes méthodes. Ce n&#8217;est pas car le framework jQuery nous met à disposition différentes moyens d&#8217;atteindre l&#8217;objectif qu&#8217;ils sont tous équivalent sur le plan des performance. Il faut donc apporter un soin particulier au choix de cette méthode et essayer de prendre de bonnes habitudes.</p><p>Je vous souhaite un bon dév&#8217; <img
src='http://geekos.fr/wp-includes/images/smilies/icon_lol.gif' alt='[:D]' class='wp-smiley' /></p> ]]></content:encoded> <wfw:commentRss>http://geekos.fr/02/2012/jquery-astuces-et-conseils-pour-ameliorer-les-performances/feed/</wfw:commentRss> <slash:comments>2</slash:comments> <feedburner:origLink>http://geekos.fr/02/2012/jquery-astuces-et-conseils-pour-ameliorer-les-performances/</feedburner:origLink></item> <item><title>jQuery: Utiliser une autre version sans écraser celle existante</title><link>http://feedproxy.google.com/~r/geekos/fr/~3/KuXhK3iZeTA/</link> <comments>http://geekos.fr/02/2012/jquery-utiliser-une-autre-version-sans-ecraser-celle-existante/#comments</comments> <pubDate>Sat, 11 Feb 2012 17:36:05 +0000</pubDate> <dc:creator>Benjamin Longearet</dc:creator> <category><![CDATA[Démos]]></category> <category><![CDATA[Divers]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[jQuery]]></category> <category><![CDATA[Technologies de développement Web]]></category> <category><![CDATA[chargement à la volée]]></category> <category><![CDATA[HTML]]></category> <category><![CDATA[Javascript]]></category> <category><![CDATA[multiple jquery]]></category> <category><![CDATA[noConflict]]></category> <category><![CDATA[plusieurs version]]></category> <guid isPermaLink="false">http://geekos.fr/?p=1160</guid> <description><![CDATA[J&#8217;ai rencontré ce problème lors de la mise en place d&#8217;un script nécessitant la dernière version du framework javascript jQuery, qui est chargé à la volée. L&#8217;application existante, quant à elle doit continuer de fonctionner sous sa propre version de jQuery pour éviter toute régression. Pour mettre en place cette configuration il y a certainement ]]></description> <content:encoded><![CDATA[<p>J&#8217;ai rencontré ce problème lors de la mise en place d&#8217;un script nécessitant la dernière version du framework javascript jQuery, qui est chargé à la volée. L&#8217;application existante, quant à elle doit continuer de fonctionner sous sa propre version de jQuery pour éviter toute régression.</p><p>Pour mettre en place cette configuration il y a certainement plusieurs méthodes. Je vais ici vous en démontrer une qui permet d&#8217;importer une nouvelle version jQuery adaptée au nouveau script sans pour autant altérer le fonctionnement du site.</p><h2>Pourquoi importer une nouvelle version de jQuery sans écraser l&#8217;ancienne?</h2><p>Vous allez me dire pourquoi vouloir conserver les deux versions jQuery? Et bien on peut avoir besoin de mettre en place ce genre d&#8217;artifice dans différents cas de figure mais le vrai pourquoi du comment, c&#8217;est que les versions de jQuery sont par définition différentes et suivant les scripts installés sur l&#8217;application non compatible.</p><h3>Cas concret : WordPress</h3><p>Prenons par exemple WordPress. Ce populaire moteur de blog permet très facilement d&#8217;intégrer une multitude de plugins. La dernière version de WordPress (version 3.3.1) inclut une version de jQuery récente et il se peut que certains plugins plus anciens nécessitent une version antérieure de jQuery. Il est donc possible de créer des variables utilisées uniquement par ces plugins pour les protéger de tous changement de version jQuery au niveau du coeur de jQuery ou du template WordPress.</p><h3>Cas concret : réseaux sociaux</h3><p>Prenons l&#8217;exemple de l&#8217;intégration des différents plugins sociaux disponibles sur facebook, google plus, twitter et autres. Ces derniers sont inclus via un code javascript, dans la plupart des cas, à placer dans le code source de l&#8217;application. Ces plugins sociaux nécessitent soit des librairies propriétaires, soit d&#8217;autres libres comme jQuery, etc. L&#8217;objectif est donc de mettre à disposition de façon simple aux utilisateurs ce plugin sans modifier le comportement normal de l&#8217;application.</p><h2>Comment utiliser ces deux versions de jQuery simultanément ?</h2><h3>Sauvegarde de la librairie jQuery courante</h3><p>Il faut préserver la librairie actuelle afin de la rendre de nouveau disponible après l&#8217;inclusion de notre version jQuery.</p><pre>
<pre>var jQueryOld = jQuery.noConflict();</pre></pre><h3>Importer la nouvelle librairie jQuery et la sauvegarder</h3><p>On va maintenant inclure notre librairie jQuery.</p><pre>
<pre>var headID = document.getElementsByTagName("head")[0];
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.onload = scriptLoaded;
newScript.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js';
headID.appendChild(newScript);</pre></pre><p>Ce code permet d&#8217;inclure la version 1.7.1 de jQuery. Une fois la librairie chargée, la méthode <em>scriptLoaded</em> sera appelée. Dans cette méthode, nous allons procéder à la sauvegarde de notre jQuery 1.7.1.</p><pre>
<pre>var jQuery171 = jQuery.noConflict();</pre></pre><h3>Restaurer l&#8217;ancienne version jQuery</h3><pre>
<pre>$ = jQuery = jQueryOld;</pre></pre><h2>A lire</h2><p>Voici un article très intéressant concernant la création d&#8217;un &#8220;web widget&#8221; en utilisant jQuery : <a
href="http://alexmarandon.com/articles/web_widget_jquery/">http://alexmarandon.com/articles/web_widget_jquery/</a></p><h2>Conclusion</h2><p>Cela permet de maintenir la dépendance des plugins ou script externe sans pour autant générer des erreurs dans le déroulement de l&#8217;application.</p><p>Bon dév&#8217;</p> ]]></content:encoded> <wfw:commentRss>http://geekos.fr/02/2012/jquery-utiliser-une-autre-version-sans-ecraser-celle-existante/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://geekos.fr/02/2012/jquery-utiliser-une-autre-version-sans-ecraser-celle-existante/</feedburner:origLink></item> <item><title>Dabblet : Un éditeur de code CSS en ligne</title><link>http://feedproxy.google.com/~r/geekos/fr/~3/TBfAM3Ou2OM/</link> <comments>http://geekos.fr/02/2012/dabblet-un-editeur-de-code-css-en-ligne/#comments</comments> <pubDate>Fri, 10 Feb 2012 07:00:02 +0000</pubDate> <dc:creator>Julien Vidal</dc:creator> <category><![CDATA[Divers]]></category> <category><![CDATA[HTML/CSS]]></category> <category><![CDATA[HTML5/CSS3]]></category> <category><![CDATA[Outils de développement]]></category> <category><![CDATA[Technologies de développement Web]]></category> <category><![CDATA[css3]]></category> <category><![CDATA[Dabblet]]></category> <category><![CDATA[éditeur en ligne]]></category> <category><![CDATA[fonctionnalités]]></category> <category><![CDATA[html5]]></category> <category><![CDATA[tests]]></category> <guid isPermaLink="false">http://geekos.fr/?p=1118</guid> <description><![CDATA[Lorsque l&#8217;on code, le plus souvent, on prend notre éditeur préféré et notre navigateur en local. La routine en fait ! Mais il arrive que l&#8217;on est envie de tester notre code directement en ligne sans passer par cette procédure. Des services de ce genre existent comme JsBin ou bien encore JsFiddle. Pour des expérimentations au ]]></description> <content:encoded><![CDATA[<p>Lorsque l&#8217;on code, le plus souvent, on prend notre éditeur préféré et notre navigateur en local. La routine en fait ! Mais il arrive que l&#8217;on est envie de tester notre code directement en ligne sans passer par cette procédure.</p><p>Des services de ce genre existent comme <a
href="http://jsbin.com/" target="_blank">JsBin</a> ou bien encore <a
href="http://jsfiddle.net/" target="_blank">JsFiddle</a>. Pour des expérimentations au niveau javascript, ils sont plutôt pas mal. Cependant, lorsque l&#8217;on veut faire un peu de CSS, ils sont beaucoup moins adaptés. Pour palier à cela, une des solutions possibles est <a
href="http://dabblet.com/" target="_blank">Dabblet</a>.</p><h2>Présentation du service</h2><p>Dabblet est un editeur de code en ligne centré sur le CSS3. Il est très simple et reprend une interface similaire à ses compères. Un des premier aspect qui se dégage de l&#8217;application et sa grande fluidité et la similarité avec un éditeur classique.</p><p>Bref, le premier contact a été très bon de mon côté, mais de quoi est capable Dabblet?</p><h2>Fonctionnalités</h2><p>Pourquoi utiliser dabblet et non pas JsFiddle ou bien encore JsBin lorsque l&#8217;on jouer avec du CSS3?<br
/> Les réponses ci-dessous :</p><ul><li>Tout d&#8217;abord, aucune action sur la page est nécessaire pour mettre le rendu à jour, tout est fait en instantanée. C&#8217;est très agréable et cela évite les clics incessants sur un bouton &#8220;modifier&#8221; !</li><li>Il est possible de sauvegarder son travail directement sur github gist et tout cela via ajax. Pas besoin d&#8217;attendre le rechargement de la page donc pour continuer à travailler.</li><li>Des raccourcis claviers sont disponibles comme sur un éditeur de code classique (Selon le navigateur et dans mon cas, certains rentrent en conflit avec celui-ci ce qui donne des résultats pas géniaux&#8230;)</li><li>De nombreux systèmes de prévisualisation de propriétés CSS3. C&#8217;est très pratique de voir combien dure 3s ! Cela parait inutile mais ça évite de devoir tester son application pour voir ce que cela donne. De la même manière, on a la prévisualisation de dégradés, de mesures, de couleurs, d&#8217;angles &#8230;</li><li>Il est possible de personnaliser la disposition des éléments de l&#8217;interface.</li></ul><p>Je n&#8217;ai pas fait une liste exhaustive de toutes les fonctionnalités de Dabblet mais de celles qui me paraissaient les plus intéressantes.</p><h2>ScreenShot</h2><p>Quelques exemples de preview d&#8217;attributs de CSS</p><p><a
href="http://geekos.fr/wp-content/uploads/2012/02/dabblet-example4.jpg" class="lightbox" ><img
class="aligncenter size-full wp-image-1141" title="dabblet-example" src="http://geekos.fr/wp-content/uploads/2012/02/dabblet-example4.jpg" alt="" width="452" height="430" /></a></p><h2>Conclusion</h2><p>Dabblet est un outil très récent et très intéressant. En apparence, il se rapproche un peu des autres éditeurs en ligne, cependant il est très axé design et contient des petits détails très utiles qui lui permette de se rapprocher d&#8217;un éditeur classique.</p><h2>Liens</h2><p>Pour terminer cet article, les sources sur lesquelles s&#8217;appuie le contenu que je vous invite à lire :</p><ul><li>Le site de Dabblet : <a
href="http://dabblet.com/">http://dabblet.com</a></li><li>Le blog et le post traitant de Dabblet par sa créatrice  : <a
href="http://lea.verou.me/2011/12/introducing-dabblet-an-interactive-css-playground/">http://lea.verou.me/2011/12/introducing-dabblet-an-interactive-css-playground/</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://geekos.fr/02/2012/dabblet-un-editeur-de-code-css-en-ligne/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://geekos.fr/02/2012/dabblet-un-editeur-de-code-css-en-ligne/</feedburner:origLink></item> <item><title>Google Maps attaqué pour abus de position dominante</title><link>http://feedproxy.google.com/~r/geekos/fr/~3/OgM-54RG5jE/</link> <comments>http://geekos.fr/02/2012/google-maps-attaque-pour-abus-de-position-dominante/#comments</comments> <pubDate>Thu, 09 Feb 2012 07:51:56 +0000</pubDate> <dc:creator>Benjamin Longearet</dc:creator> <category><![CDATA[Actualités]]></category> <category><![CDATA[Sciences/Tech]]></category> <category><![CDATA[google]]></category> <category><![CDATA[Google map]]></category> <category><![CDATA[justice]]></category> <guid isPermaLink="false">http://geekos.fr/?p=1125</guid> <description><![CDATA[Pour résumer, l’entreprise, Bottin Cartographes, qui propose depuis 19 ans ces services payants de cartographie a portée plainte contre Google pour une concurrence déloyale. Je vous laisse vous faire une idée en lisant quelques un des articles suivant: http://lci.tf1.fr/economie/entreprise/google-maps-google-condamne-en-france-pour-abus-de-position-dominante-6967121.html http://www.lavoixdunord.fr/France_Monde/actualite/Secteur_France_Monde/2012/02/01/article_google-condamne-a-verser-500-000-euros-de-dommage.shtml http://www.developpez.com/actu/41032/Google-Maps-gratuit-ne-plait-pas-a-la-justice-francaise-vers-la-fin-de-l-API-gratuite-pour-les-developpeurs/ http://www.liberation.fr/medias/01012387291-google-maps-condamne-en-france-pour-abus-de-position-dominante http://tempsreel.nouvelobs.com/high-tech/20120201.OBS0346/google-condamne-en-france-pour-abus-de-position-dominante.html]]></description> <content:encoded><![CDATA[<p>Pour résumer, l’entreprise, Bottin Cartographes, qui propose depuis 19 ans ces services payants de cartographie a portée plainte contre Google pour une concurrence déloyale.</p><p>Je vous laisse vous faire une idée en lisant quelques un des articles suivant:</p><ul><li><a
href="http://lci.tf1.fr/economie/entreprise/google-maps-google-condamne-en-france-pour-abus-de-position-dominante-6967121.html">http://lci.tf1.fr/economie/entreprise/google-maps-google-condamne-en-france-pour-abus-de-position-dominante-6967121.html</a></li><li><a
href="http://www.lavoixdunord.fr/France_Monde/actualite/Secteur_France_Monde/2012/02/01/article_google-condamne-a-verser-500-000-euros-de-dommage.shtml">http://www.lavoixdunord.fr/France_Monde/actualite/Secteur_France_Monde/2012/02/01/article_google-condamne-a-verser-500-000-euros-de-dommage.shtml</a></li><li><a
href="http://www.developpez.com/actu/41032/Google-Maps-gratuit-ne-plait-pas-a-la-justice-francaise-vers-la-fin-de-l-API-gratuite-pour-les-developpeurs/">http://www.developpez.com/actu/41032/Google-Maps-gratuit-ne-plait-pas-a-la-justice-francaise-vers-la-fin-de-l-API-gratuite-pour-les-developpeurs/</a></li><li><a
href="http://www.liberation.fr/medias/01012387291-google-maps-condamne-en-france-pour-abus-de-position-dominante">http://www.liberation.fr/medias/01012387291-google-maps-condamne-en-france-pour-abus-de-position-dominante</a></li><li><a
href="http://tempsreel.nouvelobs.com/high-tech/20120201.OBS0346/google-condamne-en-france-pour-abus-de-position-dominante.html">http://tempsreel.nouvelobs.com/high-tech/20120201.OBS0346/google-condamne-en-france-pour-abus-de-position-dominante.html</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://geekos.fr/02/2012/google-maps-attaque-pour-abus-de-position-dominante/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://geekos.fr/02/2012/google-maps-attaque-pour-abus-de-position-dominante/</feedburner:origLink></item> <item><title>jQuery : Prenez l’ascenseur !</title><link>http://feedproxy.google.com/~r/geekos/fr/~3/H49-sEhrydc/</link> <comments>http://geekos.fr/01/2012/jquery-prenez-lascenseur/#comments</comments> <pubDate>Tue, 31 Jan 2012 17:23:56 +0000</pubDate> <dc:creator>Benjamin Longearet</dc:creator> <category><![CDATA[JavaScript]]></category> <category><![CDATA[jQuery]]></category> <category><![CDATA[Technologies de développement Web]]></category> <category><![CDATA[ascenseur]]></category> <category><![CDATA[ascensor]]></category> <category><![CDATA[plugin]]></category> <guid isPermaLink="false">http://geekos.fr/?p=1105</guid> <description><![CDATA[Voici un plugin jQuery qui a le mérite d&#8217;être innovant. J&#8217;aime vraiment l&#8217;effet que cela rend et l&#8217;utilisation de ce plugin est très facile. Je vous invite à visiter le site officiel: http://www.kirkas.ch/ascensor/ Pour des informations sur la manipulation de ce plugin je vous invite à lire l&#8217;article du blog megaptery à cette adresse : http://www.megaptery.com/2011/09/ascensor-prenez-l-ascenseur-avec-jquery.html Bon ]]></description> <content:encoded><![CDATA[<p>Voici un plugin jQuery qui a le mérite d&#8217;être innovant. J&#8217;aime vraiment l&#8217;effet que cela rend et l&#8217;utilisation de ce plugin est très facile.</p><p>Je vous invite à visiter le site officiel: <a
href="http://www.kirkas.ch/ascensor/">http://www.kirkas.ch/ascensor/</a></p><p
style="padding-left: 90px;"><a
href="http://geekos.fr/wp-content/uploads/2012/01/logo.png" class="lightbox" ><img
class="size-medium wp-image-1108 alignnone" title="logo" src="http://geekos.fr/wp-content/uploads/2012/01/logo-300x126.png" alt="" width="240" height="101" /></a></p><p>Pour des informations sur la manipulation de ce plugin je vous invite à lire l&#8217;article du blog megaptery à cette adresse : <a
href="http://www.megaptery.com/2011/09/ascensor-prenez-l-ascenseur-avec-jquery.html">http://www.megaptery.com/2011/09/ascensor-prenez-l-ascenseur-avec-jquery.html</a></p><p>Bon dév&#8217;  <img
src='http://geekos.fr/wp-includes/images/smilies/icon_mrgreen.gif' alt='[:-D]' class='wp-smiley' /></p><p>&nbsp;</p> ]]></content:encoded> <wfw:commentRss>http://geekos.fr/01/2012/jquery-prenez-lascenseur/feed/</wfw:commentRss> <slash:comments>1</slash:comments> <feedburner:origLink>http://geekos.fr/01/2012/jquery-prenez-lascenseur/</feedburner:origLink></item> <item><title>HTML5 : Les balises pour un web sémantique</title><link>http://feedproxy.google.com/~r/geekos/fr/~3/rSCcvXu_8Cw/</link> <comments>http://geekos.fr/01/2012/html5-les-balises-pour-un-web-semantique/#comments</comments> <pubDate>Sun, 29 Jan 2012 19:14:37 +0000</pubDate> <dc:creator>Benjamin Longearet</dc:creator> <category><![CDATA[HTML5/CSS3]]></category> <category><![CDATA[Technologies de développement Web]]></category> <category><![CDATA[article]]></category> <category><![CDATA[aside]]></category> <category><![CDATA[balises]]></category> <category><![CDATA[div]]></category> <category><![CDATA[html5]]></category> <category><![CDATA[nav]]></category> <category><![CDATA[section]]></category> <guid isPermaLink="false">http://geekos.fr/?p=1072</guid> <description><![CDATA[Le HTML5 est une révolution de l&#8217;organisation du contenu proposée au visiteur et plus particulièrement au différents moteurs de recherche qui pourront associer les contenus avec une fonction particulière. Pour commencer, cette article n&#8217;est pas un cours ou un tuto, je le qualifierais plutôt d&#8217;un décryptage des différentes balises que nous offre HTML5. Le HTML5 ]]></description> <content:encoded><![CDATA[<p>Le HTML5 est une révolution de l&#8217;organisation du contenu proposée au visiteur et plus particulièrement au différents moteurs de recherche qui pourront associer les contenus avec une fonction particulière.</p><p>Pour commencer, cette article n&#8217;est pas un cours ou un tuto, je le qualifierais plutôt d&#8217;un décryptage des différentes balises que nous offre HTML5.</p><h2>Le HTML5 ! Kezako &#8230;</h2><p>Le HTML5 est le dernier né du standard HTML. Ce dernier créé en 2000 et standardisé en 1997 avec HTML4, s&#8217;est offert un relooking complet sur des propositions de spécification de Opera Software. Bon trêve de blablatage, quoi de changé côté technique ?</p><p>Et bien beaucoup de simplification sur les balises (DOCTYPE, LINK, etc), de nouvelles balises qui permettent d&#8217;organiser de façon sémantique nos pages web, de nouveaux attributs (data-*, etc). Au final ! Beaucoup de changement tous aussi intéressant les uns que les autres.</p><p>Pour commencer, je vais essayer de mettre à plat les nouvelles balises disponibles dans les spécifications HTML5.</p><h2>Balises HTML5</h2><p>Le but de ces nouvelles balises et de leurs réorganisations permet d&#8217;offrir aux moteurs de recherche ou à tout autre outils d&#8217;analyse sémantique, une hiérarchisation complète de notre document. Cela permet à terme de retrouver de façon plus précise le document et de cibler au mieux les recherches utilisateurs.</p><p>Dans l&#8217;ancienne version, nous utilisions allègrement les balises DIV pour structurer notre document. Aussi bien visuellement que sémantiquement. Voici un petit exemple qui montre la conversion de la structure d&#8217;une page classique HTML4 en langage HTML5.</p><p
style="text-align: center;"><a
href="http://geekos.fr/wp-content/uploads/2012/01/architecture_Geekos_HTML4.jpg" class="lightbox" ><img
class="alignnone size-medium wp-image-1094" title="architecture_Geekos_HTML4" src="http://geekos.fr/wp-content/uploads/2012/01/architecture_Geekos_HTML4-294x300.jpg" alt="" width="294" height="300" /></a><a
href="http://geekos.fr/wp-content/uploads/2012/01/architecture_Geekos_HTML5.jpg" class="lightbox" ><img
class="alignnone size-medium wp-image-1095" title="architecture_Geekos_HTML5" src="http://geekos.fr/wp-content/uploads/2012/01/architecture_Geekos_HTML5-293x300.jpg" alt="" width="293" height="300" /></a></p><h3>Organisées en catégorie</h3><p>La spécification HTML5 concernant les balises, organise et range ces dernières en 7 catégories. Pour vous aider à mieux comprendre leurs agencements, je vous invite à consulter la spécification en ligne en cliquant sur le schéma ci-dessous.</p><p><a
href="http://www.w3.org/TR/html5/content-models.html#kinds-of-content" target="_blank"><img
class="size-full wp-image-1081 aligncenter" title="architecture_balise_HTML5-geekos.fr" src="http://geekos.fr/wp-content/uploads/2012/01/architecture_balise_HTML5-geekos.fr_.png" alt="http://www.w3.org/TR/html5/content-models.html#kinds-of-content" width="503" height="274" /></a></p><p>&nbsp;</p><p>Pour décrypter ce schéma je vais expliquer brièvement le fonctionnement de chacune d&#8217;entre elle.</p><table
style="width: 100%;" border="0" cellspacing="5" cellpadding="5" align="center"><tbody><tr><td><h4>FLOW</h4><p>Cette catégorie est la catégorie principale puisqu&#8217;elle regroupe la quasi-totalité des balises disponibles en HTML5. En effet, certaines balises metadata comme <em>base, link, meta, script, style</em> et <em>title</em> se situent à l&#8217;extérieur de cette catégorie.</td><td
style="width: 5px; padding: 5px;"></td><td><h4>PHRASING</h4><p>Dans <em>phrasing</em>, la spécification regroupe tous les <span
class="highlight1">éléments qui apparaissent dans le texte</span>. Ce sont pour la plupart les éléments appelés <em>inline </em>en HTML4 comme <em>a, audio, map, sub, strong, </em>etc&#8230;</td></tr><tr><td><h4>EMBEDDED</h4><p><em>Embedded</em> est une sous-catégorie de <em>phrasing </em>et elle contient tous les éléments qui font un appel externe au document actuel.</td><td></td><td><h4>SECTIONING</h4><p>Dans cette catégorie, on retrouve toute les balises qui <span
class="highlight1">permettent de créer des sections</span> ou des parties dans notre document HTML. Ce sont de nouvelles balises comme <em>article, aside, nav </em>et <em>section</em>. Je vais revenir plus tard dans l&#8217;article sur ces quatre balises.</td></tr><tr><td><h4>INTERACTIVE</h4><p><em>Interactive</em> regroupe toutes les <span
class="highlight1">balises permettant d’interagir</span> avec les utilisateurs.</td><td></td><td><h4>METADATA</h4><p>Ici, nous allons retrouver les balises utilisées pour <span
class="highlight1">présenter le comportement</span> du document et <span
class="highlight1">spécifier les différentes relations</span> de notre document avec des ressources externes.</td></tr><tr><td><h4>HEADING</h4><p>Cette section comporte des balises déjà présente dans les spécifications HTML4 comme <em>h1, hx, &#8230;, h5</em> mais également une nouvelle balise <em>hgroup</em> qui permet de regrouper des éléments de titre. Par exemple un article qui possède un titre et un sous-titre, les éléments <em>h1</em> (titre) et <em>h2</em> (sous-titre) doivent être regroupé dans un élément <em>hgroup</em>.</td><td></td><td></td></tr></tbody></table><h3></h3><h3>Zoom sur la catégorie <em>sectioning</em></h3><p>Cette catégorie comporte quatre balises : <em>section, nav, aside et article</em>. Je vais récapituler leurs spécificités.</p><h4>&lt;section/&gt;</h4><p>Cette balise permet de regrouper de <strong>façon thématique</strong> du contenu dans le document ou l&#8217;application. Elle permet également de remplacer les &lt;div/&gt; pour structurer le document.</p><p>Exemple d&#8217;utilisation:</p><ul
class="checklist"><li>Différente page dans le cas d&#8217;onglet dans une boite de dialogue</li><li>Page d&#8217;accueil avec plusieurs sections : News, Intro, Contact, etc &#8230;</li></ul><p>&nbsp;</p><p> <img
src='http://geekos.fr/wp-includes/images/smilies/icon_arrow.gif' alt='[=&gt;]' class='wp-smiley' /> <strong>En général</strong>, à chaque fois que l&#8217;on rajoute un titre, on doit implémenter une nouvelle section!</p><h4>&lt;nav/&gt;</h4><p>Cette balise permet de mettre en place des liens pour naviguer entre les différents documents de notre application. Ces liens doivent être <strong>uniquement</strong> des liens <strong>internes</strong>.</p><p> <img
src='http://geekos.fr/wp-includes/images/smilies/icon_exclaim.gif' alt='[:!]' class='wp-smiley' />  Aucune publicité ou lien externe dans cette balise</p><h4>&lt;aside/&gt;</h4><p>Cette balise à été implémenter pour permettre de diffuser du contenu indirectement lié au contenu. C&#8217;est à dire que dans une section, si on aborde un sujet distinct du contenu, il faut placer ce contenu dans la balise &lt;aside/&gt;</p><p>Exemple d&#8217;utilisation:</p><ul
class="checklist"><li>encadré,</li><li>publicité,</li><li>élément de page de navigation,</li><li>tout autre contenu différent de celui du document</li></ul><h4>&lt;article/&gt;</h4><p>La balise &lt;article/&gt; permet de diffuser du contenu externe ou indépendant qui peut être réutilisé. Le contenu présent dans cette balise se suffit à lui-même pour être compréhensible.</p><p>Exemple d&#8217;utilisation:</p><ul
class="checklist"><li>articles de journaux ou de blog</li></ul><p> <img
src='http://geekos.fr/wp-includes/images/smilies/icon_exclaim.gif' alt='[:!]' class='wp-smiley' />  Les balises <em>footer</em> et <em>header</em> qui appartiennent à la catégorie FLOW et non à celle SECTIONING.</p><h2>Aller plus loin</h2><ul
class="checklist"><li><a
href="http://www.w3.org/TR/html5/">http://www.w3.org/TR/html5/</a></li><li><a
href="http://html5demos.com/">http://html5demos.com/</a></li><li><a
href="http://www.html5.fr/">http://www.html5.fr/</a></li><li><a
href="http://www.html5rocks.com/en/">http://www.html5rocks.com/en/</a></li></ul><p>Voilà ! J&#8217;espère vous avoir un peu guidé sur le HTML5 qui en est à ses premiers pas. A vous de le rendre populaire et indispensable!</p><p>Bon dév&#8217;</p> ]]></content:encoded> <wfw:commentRss>http://geekos.fr/01/2012/html5-les-balises-pour-un-web-semantique/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://geekos.fr/01/2012/html5-les-balises-pour-un-web-semantique/</feedburner:origLink></item> <item><title>Détection de réseau Internet avec Unity3D</title><link>http://feedproxy.google.com/~r/geekos/fr/~3/MYipfT8bqRQ/</link> <comments>http://geekos.fr/01/2012/detection-de-reseau-internet-avec-unity3d/#comments</comments> <pubDate>Fri, 27 Jan 2012 10:38:38 +0000</pubDate> <dc:creator>Alexandre Lacoche</dc:creator> <category><![CDATA[Unity3D]]></category> <category><![CDATA[Application.internetReachability]]></category> <category><![CDATA[Network]]></category> <category><![CDATA[Ping]]></category> <category><![CDATA[Unity 3D]]></category> <category><![CDATA[Wifi]]></category> <guid isPermaLink="false">http://geekos.fr/?p=1041</guid> <description><![CDATA[Dans la version actuelle d&#8217;Unity3D (3.4), il existe un moyen de récupérer le statut d’accessibilité à Internet : Debug.Log(Application.internetReachability); Sauf que cette méthode ne fonctionne pas correctement ! Voici une solution en C#. Il faut donc passer par une autre solution : tester un &#8220;ping&#8221; vers un serveur joignable. Si le &#8220;ping&#8221; est un succès, alors on ]]></description> <content:encoded><![CDATA[<p>Dans la version actuelle d&#8217;Unity3D (3.4), il existe un moyen de récupérer le statut d’accessibilité à Internet : <strong>Debug.Log(Application.internetReachability);</strong></p><p>Sauf que cette méthode ne fonctionne pas correctement ! Voici une solution en C#.</p><p><span
id="more-1041"></span></p><p>Il faut donc passer par une autre solution : tester un &#8220;ping&#8221; vers un serveur joignable. Si le &#8220;ping&#8221; est un succès, alors on peut considérer que l&#8217;utilisateur possède une connexion active.</p><p>Dans notre exemple, nous réalisons un &#8220;ping&#8221; vers l&#8217;ip de Google (209.85.229.94).</p><pre>
private string connectionStatus;
function CheckConnection(){
	var timeout : float = 20f;
	var waitUntil:float = Time.realtimeSinceStartup + timeout;
	var ping : Ping= new Ping("209.85.229.94");
	connectionStatus= "Checking network...";
	while (Time.realtimeSinceStartup &lt; waitUntil){
		if (ping.isDone){
		    connectionStatus= "Network available";
		    return ;
		}
	}
    connectionStatus= "No network";
}
</pre><p>Ici, le résultat se fait sous forme de chaîne de caractère. A vous de l&#8217;adapter à votre besoin !</p><p>Bon&#8217;dev !</p> ]]></content:encoded> <wfw:commentRss>http://geekos.fr/01/2012/detection-de-reseau-internet-avec-unity3d/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://geekos.fr/01/2012/detection-de-reseau-internet-avec-unity3d/</feedburner:origLink></item> <item><title>SVG + CSS + Javascript = amour parfait ?</title><link>http://feedproxy.google.com/~r/geekos/fr/~3/efaq1FXO5x8/</link> <comments>http://geekos.fr/01/2012/svg-css-javascript-amour-parfait/#comments</comments> <pubDate>Sat, 07 Jan 2012 16:52:03 +0000</pubDate> <dc:creator>Pierre CLÉMENT</dc:creator> <category><![CDATA[Démos]]></category> <category><![CDATA[Technologies de développement Web]]></category> <category><![CDATA[css]]></category> <category><![CDATA[has_demo]]></category> <category><![CDATA[Javascript]]></category> <category><![CDATA[svg]]></category> <guid isPermaLink="false">http://geekos.fr/?p=1024</guid> <description><![CDATA[A l&#8217;heure de la mode du vectoriel, on est en droit de se poser la question suivante : et pour le web comment ça se passe ? Il y a deux réponses à ça : les canvas en HTML 5, et le SVG. Je ne parlerai pas des canvas HTML 5 aujourd&#8217;hui, mais je vais ]]></description> <content:encoded><![CDATA[<p>A l&#8217;heure de la mode du vectoriel, on est en droit de se poser la question suivante : et pour le web comment ça se passe ? Il y a deux réponses à ça : les canvas en HTML 5, et le SVG. Je ne parlerai pas des canvas HTML 5 aujourd&#8217;hui, mais je vais introduire très rapidement le SVG.</p><h2>Qu&#8217;est-ce que le SVG ?</h2><p>Le <strong>Scalable Vector Graphics</strong> (SVG) est un format de données spécifié par la W3C, créé il y a un petit moment maintenant. Le but est de créer des formes pouvant être très complexe avec des descripteurs simples (dimensions, coordonnées de points), permettant ainsi un changement d&#8217;échelle très simple et sans perte (ce qui n&#8217;est, rappelons-le, pas le cas des images matricielles comme les JPG, qui causent des pertes en qualité lors d&#8217;agrandissement). La définition des couleurs et autres dégradés est également de la partie, le SVG permettant de créer de réelles images en couleur. Ce format est basé sur le XML, les images (qui sont donc des fichiers XML) ainsi générés peuvent être incluses directement dans une page HTML avec la balise <em>svg</em> ou chargées depuis un fichier externe, via la balise <em>embed</em>, et le navigateur se charge alors du rendu.</p><p>Exemple :</p><pre>
<pre>&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; version=&quot;1.1&quot; width=&quot;50&quot; height=&quot;50&quot;&gt;
     &lt;circle cx=&quot;25&quot; cy=&quot;25&quot; r=&quot;23&quot; fill=&quot;red&quot; stroke=&quot;blue&quot; stroke-width=&quot;2&quot; /&gt;
&lt;/svg&gt;</pre></pre><p>Donnera un disque rouge de centre le point [25,25], de diamètre 23px et entouré d&#8217;un trait bleu de 2px d&#8217;épaisseur.</p><h2>XML, donc éléments DOM ?</h2><p>Le SVG étant basé sur le XML, on peut alors profiter des deux poids lourds du web, le CSS et le Javascript. En effet, on peut librement définir des classes CSS et les appliquer à nos éléments, ou manipuler les éléments DOM en Javascript. Les avantages sont donc énormes : on peut alors créer une image dont on peut changer très rapidement les couleurs via CSS sans devoir tout reprendre dans son éditeur d&#8217;image, mais également animer cette image via Javascript, sans devoir créer un GIF animé, dont les limites concernant les couleurs (et donc la qualité) sont un réel frein au web 2.0 et aux efforts graphiques que celui-ci impose.</p><h2>Conclusion</h2><p>Les possibilités du SVG sont énormes : vous pouvez définir des dégradés, inclure des images PNG, JPG etc. dans votre SVG, interagir avec votre image via Javascript et en modifier son aspect via CSS. Évidemment tout n&#8217;est pas parfait, il n&#8217;y a par exemple pas de gestion de 3D, la création de telles images n&#8217;est pas forcément des plus simples, mais ce format est, je pense, une bonne alternative à certaines images selon les applications. Par exemple, si vous avez regardé la démo de <a
title="Timer en Javascript" href="http://geekos.fr/12/2011/timer-en-javascript/">mon billet sur les timers en Javascript</a>, sachez que les flocons sont des images SVG, pour jouer facilement sur leur taille, transparence et ne pas avoir à charger une image externe juste pour afficher un disque blanc. Je vous laisse avec une autre petite démo, un cousin relativement proche de l&#8217;icône de signalement de votre position dans <em>Plans</em> sur iPhone, qui peut servir dans certaines applications web. Je laisse votre imagination travailler !</p><p><em>Have fnu coding!</em></p> ]]></content:encoded> <wfw:commentRss>http://geekos.fr/01/2012/svg-css-javascript-amour-parfait/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://geekos.fr/01/2012/svg-css-javascript-amour-parfait/</feedburner:origLink></item> <item><title>Javascript : Les tableaux et les structures de données</title><link>http://feedproxy.google.com/~r/geekos/fr/~3/W1EhmStk6wo/</link> <comments>http://geekos.fr/12/2011/javascript-les-tableaux-et-les-structures-de-donnees/#comments</comments> <pubDate>Sat, 24 Dec 2011 14:31:51 +0000</pubDate> <dc:creator>Benjamin Longearet</dc:creator> <category><![CDATA[JavaScript]]></category> <category><![CDATA[Technologies de développement Web]]></category> <category><![CDATA[array]]></category> <category><![CDATA[Javascript]]></category> <category><![CDATA[object]]></category> <category><![CDATA[tableaux]]></category> <guid isPermaLink="false">http://geekos.fr/?p=1010</guid> <description><![CDATA[Un des avantages de tous les langages de programmation est la capacité de créer des index, d&#8217;ordonner une liste d&#8217;élément dans le but de l&#8217;utiliser, la trier, la manipuler ou l&#8217;afficher. Cette fonctionnalité d&#8217;indexer une liste s&#8217;appelle un Array. Le langage JavaScript met à notre disposition deux types de tableaux : itératif ou associatif. Nous allons ]]></description> <content:encoded><![CDATA[<p>Un des avantages de tous les langages de programmation est la capacité de créer des index, d&#8217;ordonner une liste d&#8217;élément dans le but de l&#8217;utiliser, la trier, la manipuler ou l&#8217;afficher. Cette fonctionnalité d&#8217;indexer une liste s&#8217;appelle un <em>Array</em>. Le langage JavaScript met à notre disposition deux types de tableaux : itératif ou associatif. Nous allons voir comment les utiliser et pourquoi. Les tableaux peuvent contenir des données de n&#8217;importe quelle type, d&#8217;autres tableaux, des entiers, des chaînes de caractère, etc. L&#8217;indice premier d&#8217;un élément est 0. Bon trêve de plaisanterie, maintenant que nous avons fait un petit tour d&#8217;horizon passons aux choses sérieuses.</p><h2>Les Objects</h2><p>Voici la structure de base pour déclarer une structure de donnée.</p><pre>
<pre>var unObjet = {}; // Un objet vide
var un Objet2 = new Object(); // Un objet vide également</pre></pre><p>Cette structure est considéré comme un tableau associatif, on peut venir associer des données à autre chose qu&#8217;un indice entier croissant. Par exemple on va écrire un objet calcul qui nous permettra d’effectuer les opérations basiques.</p><pre>
<pre>var Calcul = {
     add : function(a, b) { return a + b; },
     sub : function(a, b) { return a - b; },
     mul : function(a, b) { return a * b; },
     div : function(a, b) { return a / b; }
};
Calcul.add(3, 2); // Affiche 5
Calcul['sub'](3, 2); // Affiche 1
// etc ...</pre></pre><p>Comme vous pouvez le voir, on peut appeler les méthodes de cette objet de différentes manières.  En Javascript, tout est considéré comme un objet. Les tableaux, les chaines de caractère, les fonctions et même les nombre. Je reviendrai dans un autre article sur la programmation Objet en Javascript, pour le moment, je vais vous parler de l&#8217;objet natif Array.</p><h2>Les Array</h2><p>Les tableaux de type Array (non associatif) se déclare de la manière suivante en Javascript :</p><pre>
<pre>var unTableau = []; // Un raccourci pour var unTableau = new Array();
unTableau[0] = "Un chiffre 0";
unTableau[1] = "Un chiffre 1";
// équivalent à
var unAutreTableau = ["Un chiffre 0", "Un chiffre 1"];
// équivalent à
var encoreUnAutreTableau = new Array("Un chiffre 0", "Un chiffre 1");
</pre></pre><p>La syntaxe est sensiblement similaire à la déclaration des objets. Il est également possible de mélanger les types de données dans le tableau, pour comparer avec l&#8217;exemple précédent, voici le même résultat mais en utilisant l&#8217;objet Array.</p><pre>
<pre>var Calcul = [
     function(a, b) { return a + b; },
     function(a, b) { return a - b; },
     function(a, b) { return a * b; },
     function(a, b) { return a / b; }
];
Calcul[0](3, 2); // Affiche 5
Calcul[1](3, 2); // Affiche 1
// etc ...</pre></pre><p>Bon ok pour cet exemple, on préfère largement l&#8217;Objet à l&#8217;Array. Donc on se pose maintenant la question suivante : Qu&#8217;est ce qui fait que l&#8217;on utilise quand même l&#8217;Array dans certains cas. Tous simplement car c&#8217;est un objet natif à javascript au même titre que l&#8217;objet String, Date, etc &#8230; Vous pouvez consulter la doc sur ce site : <a
href="http://fr.selfhtml.org/javascript/objets/array.htm">http://fr.selfhtml.org/javascript/objets/array.htm</a>. Il met à disposition sans développement supplémentaire une suite de fonctionnalités assez intéressante comme la gestion de pile en FIFO ou FILO avec les méthode <a
href="http://fr.selfhtml.org/javascript/objets/array.htm#pop" target="_blank">pop()</a>, <a
href="http://fr.selfhtml.org/javascript/objets/array.htm#push" target="_blank">push()</a> et <a
href="http://fr.selfhtml.org/javascript/objets/array.htm#shift" target="_blank">shift()</a>. Ou encore des méthodes de d&#8217;extraction d&#8217;une partie du tableau, de taille, de trie, etc. Une attention particulière à l&#8217;attribut <a
href="http://fr.selfhtml.org/javascript/objets/array.htm#length" target="_blank">length()</a> qui retourne toujours 1 de plus que le nombre maximum de l&#8217;indice (ce qui est logique vu que l&#8217;on part de 0 &#8230; [:D]). Mais il faut se méfier également de cet attribut comme le montre l&#8217;exemple suivant:</p><pre>
<pre>var monTableau = [];
monTableau.length; // Affiche 0
monTableau.push("Toto est présent!");
monTableau.length; // Affiche 1
monTableau[100] = "Tarte au centième";
monTableau.length; // Affiche 101 !!!</pre></pre><h2>Allez plus loin avec les Objets javascript</h2><p>Si vous souhaitez en savoir plus sur les Objets javascript, je vous invite à visiter ce site <a
href="http://t-templier.developpez.com/tutoriel/javascript/javascript-poo1/">http://t-templier.developpez.com/tutoriel/javascript/javascript-poo1/</a> qui est vraiment bien fait et pose de bonnes bases pour la POO en Javascript.</p><p>Bon dév&#8217; <img
src='http://geekos.fr/wp-includes/images/smilies/icon_lol.gif' alt='[:D]' class='wp-smiley' /></p> ]]></content:encoded> <wfw:commentRss>http://geekos.fr/12/2011/javascript-les-tableaux-et-les-structures-de-donnees/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://geekos.fr/12/2011/javascript-les-tableaux-et-les-structures-de-donnees/</feedburner:origLink></item> <item><title>Timer en Javascript</title><link>http://feedproxy.google.com/~r/geekos/fr/~3/mm0nzkLjPfo/</link> <comments>http://geekos.fr/12/2011/timer-en-javascript/#comments</comments> <pubDate>Sat, 24 Dec 2011 12:57:38 +0000</pubDate> <dc:creator>Pierre CLÉMENT</dc:creator> <category><![CDATA[Démos]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[Technologies de développement Web]]></category> <category><![CDATA[has_demo]]></category> <category><![CDATA[Javascript]]></category> <category><![CDATA[setTimeout]]></category> <category><![CDATA[timer]]></category> <guid isPermaLink="false">http://geekos.fr/?p=1002</guid> <description><![CDATA[Étant en pleine phase de &#8220;retour aux sources&#8221;, je suis venu à devoir tester les timers sans utiliser jQuery. Présentation générale Il existe de façon de gérer des timers en Javascript : le timemout qui permet d&#8217;exécuter du code après un certain temps, et l&#8217;intervalle qui permet, comme son nom l&#8217;indique, d’exécuter du code à ]]></description> <content:encoded><![CDATA[<p>Étant en pleine phase de &#8220;retour aux sources&#8221;, je suis venu à devoir tester les timers sans utiliser jQuery.</p><h2>Présentation générale</h2><p>Il existe de façon de gérer des timers en Javascript : le timemout qui permet d&#8217;exécuter du code après un certain temps, et l&#8217;intervalle qui permet, comme son nom l&#8217;indique, d’exécuter du code à intervalle régulier.</p><h2>L&#8217;intervalle</h2><p>Commençons par le plus simple : l&#8217;intervalle. Son fonctionnement est très simple :</p><pre>
<pre>setInterval('alert("ok")', 10000);</pre></pre><p>Ceci aurai pour effet d&#8217;afficher un message &#8220;OK&#8221; toutes les 10 secondes. Le temps est pris à partir du moment ou la fonction est appelé. Si vous avez défini une fonction, vous pouvez également l&#8217;appeler simplement :</p><pre>
<pre>function doSomething() {
     alert("doSomething appelé");
}
setInterval(doSomehting, 10000);</pre></pre><h2>Le timeout</h2><p>Avant tout comment ça fonctionne ? Là encore ce n&#8217;est pas très compliqué, il fonctionne d&#8217;ailleurs comme l&#8217;intervalle, sauf qu&#8217;une fois qu&#8217;il a exécuté son action il s&#8217;arrête :</p><pre>
<pre>setTimeout('alert("ok")', 1000);
function doSomething() {
     alert("doSomething appelé");
}
setTimeout(doSomehting, 3000);</pre></pre><p>Ceci affichera &#8220;ok&#8221; au bout d&#8217;une seconde et &#8220;doSomething appelé&#8221; au bout de 3.</p><h3>Timer</h3><p>Alors, comment faire un timer ? Le plus simple c&#8217;est de faire une fonction qui ajoute elle-même un timeout. Si on reprend l&#8217;exemple précédent et que l&#8217;on désir que la fonction <em>doSomething</em> soit appelée toute les 0.5 secondes, il suffit de faire ceci :</p><pre>
<pre>function doSomething() {
     alert("doSomething appelé");
     setTimeout(doSomehting, 500);
}
doSomething();</pre></pre><h2>Et l&#8217;objet ?</h2><p>Prenons le cas suivant : vous voulez faire des flocons de neige qui tombent (c&#8217;est de saison hein). Vous avez une classe pour représenter vos flocons, et vous voulez appeler naturellement la fonction <em>move</em> &#8211; fonction qui déplace votre flocons sur l&#8217;écran &#8211; à intervalle régulier. Et là tout n&#8217;est pas parfait. En effet, <em>setTimeout</em> ne gère pas les objets : si dans votre fonction <em>move</em> vous appelez <em>setTimeout(this.move, 20)</em> ou <em>setInterval(this.move, 20)</em>, ça ne fonctionnera pas. La seule façon de s&#8217;en tirer c&#8217;est de créer une fonction qui prend en paramètre un flocon de neige et qui appel la fonction <em>move</em> de celui-ci :</p><pre>
<pre>var Flocon = function() {
     this.x = 0;
     this.y = 0;
 }
Flocon.prototype.move = function() {
     this.y ++;
}
function moveFloconTimeout(flocon) {
     flocon.move();
     setTimeout(moveFloconTimeout, 20, flocon);
}
function moveFlocon(flocon) {
     flocon.move();
}
var flocon = new Flocon();
setInterval(moveFlocon, 20, flocon);
// ou
// moveFloconTimeout(flocon);</pre></pre><p>Et voilà&#8230; Je vous laisse avec de <a
title="Let it snow!" href="http://demo.geekos.fr/?id=1002">la neige qui tombe</a> (qui fonctionne bien sur Chrome/Safari mais qui fait ramer Firefox), ce que j&#8217;ai fait pour tester les timers en Javascript, en utilisant jQuery grosso modo que pour les sélecteurs.</p><p><em>Have fnu coding!</em></p> ]]></content:encoded> <wfw:commentRss>http://geekos.fr/12/2011/timer-en-javascript/feed/</wfw:commentRss> <slash:comments>2</slash:comments> <feedburner:origLink>http://geekos.fr/12/2011/timer-en-javascript/</feedburner:origLink></item> </channel> </rss><!-- Dynamic page generated in 1.404 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-02-23 20:28:19 -->

