<?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>Frato blog &#187; Javascript</title>
	<atom:link href="http://www.lecentre.net/fratoblog/category/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lecentre.net/fratoblog</link>
	<description>PHP, css, webdesign... et le reste</description>
	<lastBuildDate>Tue, 31 Jan 2012 13:40:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Un bookmarklet pour avoir un aperçu rapide de ses sites responsive</title>
		<link>http://www.lecentre.net/fratoblog/2012/01/un-bookmarklet-pour-avoir-un-apercu-rapide-de-ses-sites-responsive/</link>
		<comments>http://www.lecentre.net/fratoblog/2012/01/un-bookmarklet-pour-avoir-un-apercu-rapide-de-ses-sites-responsive/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 13:40:34 +0000</pubDate>
		<dc:creator>Frato</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[bookmarklet]]></category>
		<category><![CDATA[responsive]]></category>

		<guid isPermaLink="false">http://www.lecentre.net/fratoblog/?p=297</guid>
		<description><![CDATA[Benjamin Keen a créé un petit générateur de bookmarklet qui permet d&#8217;afficher un site dans plusieurs iframes sur une seule page, pour prévisualiser le rendu d&#8217;un site sur différentes tailles d&#8217;écran (smartphone, tablette, écran, &#8230;). Sur son site, on peut choisir les tailles des différents iframes que l&#8217;on souhaite avoir. Ce bookmarklet est très pratique, ...]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.lecentre.net/fratoblog/wp-content/uploads/2012/01/responsive_design_bookmarklet.png"><img src="http://www.lecentre.net/fratoblog/wp-content/uploads/2012/01/responsive_design_bookmarklet-580x333.png" alt="Responsive design bookmarklet" title="responsive_design_bookmarklet" width="580" height="333" class="aligncenter size-large wp-image-298" /></a><br />
Benjamin Keen a créé un petit <a href="http://www.benjaminkeen.com/misc/bricss/" title="Responsive Design Test Bookmarklet">générateur de bookmarklet</a> qui permet d&#8217;afficher un site dans plusieurs iframes sur une seule page, pour prévisualiser le rendu d&#8217;un site sur différentes tailles d&#8217;écran (smartphone, tablette, écran, &#8230;). Sur son site, on peut choisir les tailles des différents iframes que l&#8217;on souhaite avoir. Ce bookmarklet est très pratique, mais la navigation entre les différents iframes n&#8217;est pas très pratique (il faut faire défiler la page horizontalement, et le scoll de la page entre souvent en conflit avec les scrolls des iframes). J&#8217;ai donc modifié sont bookmarklet pour générer automatiquement des boutons permettant de sauter d&#8217;un iframe à l&#8217;autre.</p>
<p>Vous pouvez <a href="http://francisthomas.fr/rd_bookmarklet.html" title="Bookmarklet de test de sites responsive">installer ma version du bookmarklet</a>, en attendant que Benjamin intègre mes modifications à son générateur (ce qui est peut être déjà fait à l&#8217;heure ou vous lisez ces lignes, sinon dans quelques jours).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lecentre.net/fratoblog/2012/01/un-bookmarklet-pour-avoir-un-apercu-rapide-de-ses-sites-responsive/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iBooks Author, insérer facilement du contenu html dans ses livres</title>
		<link>http://www.lecentre.net/fratoblog/2012/01/ibooks-author-inserer-facilement-du-contenu-html-dans-ses-livres/</link>
		<comments>http://www.lecentre.net/fratoblog/2012/01/ibooks-author-inserer-facilement-du-contenu-html-dans-ses-livres/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 12:19:12 +0000</pubDate>
		<dc:creator>Frato</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[ibooks]]></category>
		<category><![CDATA[ibooks author]]></category>

		<guid isPermaLink="false">http://www.lecentre.net/fratoblog/?p=266</guid>
		<description><![CDATA[iBooks Author, le logiciel d&#8217;Apple pour créer des livres interactifs pour iPad, permet d&#8217;ajouter du contenu via des widgets (galeries photo, vidéos, présentation Keynote, questionnaires, 3D, images interactives, html). Pour insérer des widgets html, il faut fournir des widgets réalisés avec Dashcode, le logiciel d&#8217;Apple distribué avec les outils développeur. Mais si l&#8217;on ne souhaite ...]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.lecentre.net/fratoblog/wp-content/uploads/2012/01/widgets-580x400.png" alt="" title="ibooks widgets" width="580" height="400" class="aligncenter size-large wp-image-274" /></p>
<p><a href="http://www.apple.com/ibooks-author/" title="iBooks Author" target="_blank">iBooks Author</a>, le logiciel d&#8217;Apple pour créer des livres interactifs pour iPad, permet d&#8217;ajouter du contenu via des widgets (galeries photo, vidéos, présentation Keynote, questionnaires, 3D, images interactives, html). Pour insérer des widgets html, il faut fournir des widgets réalisés avec <a href="http://en.wikipedia.org/wiki/Dashcode" title="Dashcode" target="_blank">Dashcode</a>, le logiciel d&#8217;Apple distribué avec les outils développeur. Mais si l&#8217;on ne souhaite pas passer par Dashcode, on peut tout à fait créer les bundles soit même, à la main.</p>
<p>Pour commencer, créez votre contenu html, dans un fichier index.html. Pour l&#8217;exemple, créons une page qui affiche un bloc rouge avec du texte :</p>
<pre class="brush: xml; title: ; notranslate">
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;title&gt;HTML Test&lt;/title&gt;
	&lt;style type=&quot;text/css&quot;&gt;
		#bloc {
			width: 500px;
			height: 300px;
			background-color: red;
			padding: 20px;
		}
	&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;div id=&quot;bloc&quot;&gt;
		&lt;p&gt;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus justo justo, molestie eget, tristique at, gravida sed, nisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse hendrerit neque molestie elit. Proin cursus, felis non porttitor vestibulum, elit nibh volutpat metus, nec facilisis quam eros et nisi. In varius metus vitae libero. Nullam lorem pede, laoreet in, scelerisque eget, consequat elementum, ipsum. Fusce eu odio. Nullam at enim. Sed nec ipsum in enim pharetra mollis. Proin augue magna, lacinia nec, venenatis posuere, mollis ac, massa. Curabitur id quam. Sed interdum elit nec eros.
		&lt;/p&gt;
	&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Afin que notre widget soit valide, il faut ajouter 2 fichiers supplémentaires :</p>
<p>- une capture d&#8217;écran de notre widget, nommé &laquo;&nbsp;Default.png&nbsp;&raquo;, qui servira de &laquo;&nbsp;poster&nbsp;&raquo; pour l&#8217;affichage dans notre livre.<br />
- un fichier info.plist qui contient la description de notre bundle.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
&lt;plist version=&quot;1.0&quot;&gt;
&lt;dict&gt;
	&lt;key&gt;CFBundleDevelopmentRegion&lt;/key&gt;
	&lt;string&gt;English&lt;/string&gt;
	&lt;key&gt;CFBundleDisplayName&lt;/key&gt;
	&lt;string&gt;Frato testBundle&lt;/string&gt;
	&lt;key&gt;CFBundleIdentifier&lt;/key&gt;
	&lt;string&gt;com.francisthomasr-testBundle&lt;/string&gt;
	&lt;key&gt;CFBundleName&lt;/key&gt;
	&lt;string&gt;testBundle&lt;/string&gt;
	&lt;key&gt;CFBundleShortVersionString&lt;/key&gt;
	&lt;string&gt;1.0&lt;/string&gt;
	&lt;key&gt;CFBundleVersion&lt;/key&gt;
	&lt;string&gt;1.0&lt;/string&gt;
	&lt;key&gt;Height&lt;/key&gt;
	&lt;integer&gt;540&lt;/integer&gt;
	&lt;key&gt;MainHTML&lt;/key&gt;
	&lt;string&gt;index.html&lt;/string&gt;
	&lt;key&gt;Width&lt;/key&gt;
	&lt;integer&gt;960&lt;/integer&gt;
&lt;/dict&gt;
&lt;/plist&gt;
</pre>
<p><a href='http://www.lecentre.net/fratoblog/wp-content/uploads/2012/01/Info.zip'>Télécharger le fichier Info.plist</a></p>
<p>Attention, dans ce fichier, le champ &laquo;&nbsp;CFBundleName&nbsp;&raquo; doit correspondre au nom du dossier qui contiendra les fichiers de votre bundle.</p>
<p>Pour terminer, il ne nous reste plus qu&#8217;à créer notre dossier &laquo;&nbsp;testBundle&nbsp;&raquo;, d&#8217;y copier nos fichiers (index.html, Default.png et Info.plist), et d&#8217;ajouter l&#8217;extension &laquo;&nbsp;.wdgt&nbsp;&raquo; à notre dossier.</p>
<p>    <iframe src="http://player.vimeo.com/video/35369340" width="500" height="294" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p>
<p>Il ne reste plus qu&#8217;à insérer notre bundle dans notre livre et à tester.</p>
<p>Pour aller un peu plus loin, il serait sympa que notre bundle soit capable d&#8217;aller chercher du contenu sur internet, pour afficher des informations à jour.<br />
Modifions notre fichier &laquo;&nbsp;index.html&nbsp;&raquo; pour y ajouter la bibliothèque jQuery :</p>
<pre class="brush: xml; title: ; notranslate">
&lt; !DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;title&gt;HTML Test&lt;/title&gt;
	&lt;script src=&quot;jquery-1.7.1.min.js&quot;&gt;&lt;/script&gt;
	&lt;style type=&quot;text/css&quot;&gt;
		#bloc {
			width: 500px;
			height: 300px;
			background-color: red;
			padding: 20px;
		}
	&lt;/style&gt;
	&lt;script type=&quot;text/javascript&quot;&gt;
		$(document).ready(function() {
			$.ajax({
			  dataType: 'jsonp',
			  jsonp: 'jsonp_callback',
			  url: 'http://www.francisthomas.fr/jsonp.php',
			  success: function (data) {
			  	$('#bloc').append('&lt;p&gt;'+data.result+'&lt;/p&gt;');
			  },
			});
		});
	&lt;/script&gt;
&lt;/meta&gt;&lt;/head&gt;
&lt;body&gt;
	&lt;div id=&quot;bloc&quot;&gt;
		&lt;p&gt;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus justo justo, molestie eget, tristique at, gravida sed, nisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse hendrerit neque molestie elit. Proin cursus, felis non porttitor vestibulum, elit nibh volutpat metus, nec facilisis quam eros et nisi. In varius metus vitae libero. Nullam lorem pede, laoreet in, scelerisque eget, consequat elementum, ipsum. Fusce eu odio. Nullam at enim. Sed nec ipsum in enim pharetra mollis. Proin augue magna, lacinia nec, venenatis posuere, mollis ac, massa. Curabitur id quam. Sed interdum elit nec eros.
		&lt;/p&gt;
	&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>En utilisant JSONP, notre bundle peut se connecter à un serveur pour télécharger du contenu à jour.</p>
<p>Voici le code du fichier jsonp.php :</p>
<pre class="brush: php; title: ; notranslate">
$json = json_encode(array('result' =&gt; 'Ca marche'));
echo $_GET['jsonp_callback'] . '(' . $json . ');';
</pre>
<p>J&#8217;ai testé avec iBooks sur iPad, tout fonctionne. Cependant, je ne sais pas si cela est autorisé par Apple, donc je ne sais pas si notre livre passerait l&#8217;étape de validation pour être diffusé sur l&#8217;iBook Store. Cependant, rien ne vous empêche de distribuer votre livre vous même, et de l&#8217;ajouter dans iBooks en passant par iTunes. Deuxième problème potentiel, il faudrait gérer le cas ou l&#8217;iPad n&#8217;est pas connecté à internet.</p>
<p>Quoi qu&#8217;il en soit, cela ouvre des perspectives très intéressantes pour ajouter de vrais contenus intéractifs dans les livres numériques.</p>
<p><a href='http://www.lecentre.net/fratoblog/wp-content/uploads/2012/01/testBundle.zip'>Télécharger les sources</a></p>
<p>Mise à jour :</p>
<p>Vous pouvez aussi <a href='http://www.lecentre.net/fratoblog/wp-content/uploads/2012/01/iBooks-Bundle.zip'>télécharger un service Automator</a> pour créer vos widgets. Sélectionnez vos fichiers, faites un clic-droit et choisissez &laquo;&nbsp;iBooks Bundle&nbsp;&raquo; dans le menu service. Cela va créer un fichier &laquo;&nbsp;Bundle.wdgt&nbsp;&raquo; sur votre bureau.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lecentre.net/fratoblog/2012/01/ibooks-author-inserer-facilement-du-contenu-html-dans-ses-livres/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Sécuriser un formulaire sans captcha</title>
		<link>http://www.lecentre.net/fratoblog/2010/02/securiser-un-formulaire-sans-captcha/</link>
		<comments>http://www.lecentre.net/fratoblog/2010/02/securiser-un-formulaire-sans-captcha/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 16:19:50 +0000</pubDate>
		<dc:creator>Frato</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[captcha]]></category>
		<category><![CDATA[formulaire]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://www.lecentre.net/fratoblog/?p=246</guid>
		<description><![CDATA[Eternel problème du développeur web, sécuriser les formulaires qui se trouvent sur un site pour empêcher les robots de soumettrent des formulaires de spam. Jusqu&#8217;à aujourd&#8217;hui, deux solutions s&#8217;offrent à nous pour bloquer ces robots : Utiliser un captcha Utiliser les services d&#8217;un filtre antispam, genre Akismet Je suis personnellement totalement contre les captcha, qui ...]]></description>
			<content:encoded><![CDATA[<p>Eternel problème du développeur web, sécuriser les formulaires qui se trouvent sur un site pour empêcher les robots de soumettrent des formulaires de spam. Jusqu&#8217;à aujourd&#8217;hui, deux solutions s&#8217;offrent à nous pour bloquer ces robots :</p>
<ul>
<li>Utiliser un captcha</li>
<li>Utiliser les services d&#8217;un filtre antispam, genre <a href="http://akismet.com">Akismet</a></li>
</ul>
<p>Je suis personnellement totalement contre les captcha, qui compliquent beaucoup trop la saisie d&#8217;un formulaire, qui se doit d&#8217;être simple si on veut que le visiteur le remplisse et l&#8217;envoi. Les captcha affichent des images de plus en plus compliquées, au point que même un être humain a du mal à identifier les lettres qu&#8217;il est censé recopier.<br />
Pour les filtres anti-spam, je n&#8217;ai pas pris le temps de tester, peut être est-ce efficace, mais cela fait reposer le bon fonctionnement de votre formulaire sur un service tiers, et ajoute donc des potentialités de pannes.</p>
<p>La solution que j&#8217;utilise était jusqu&#8217;à présent composée d&#8217;une double protection, qui s&#8217;est avérée insuffisante, je viens donc d&#8217;en ajouter une troisième.</p>
<p><strong>1. Contrôler les champs renvoyés par le formulaire :</strong></p>
<p>Il arrive que les robots ajoutent des champs au formulaire qu&#8217;ils renvoient. La solution consiste donc à ne traiter que les formulaires qui ne contiennent que les champs que nous avons défini.<br />
Pour l&#8217;exemple, utilisons un formulaire de contact ou l&#8217;utilisateur entre son nom, son mail et un message. Le formulaire retournera donc 4 résultats : nom, mail, message, ainsi que la valeur du bouton submit (si le formulaire est envoyé avec un champ input submit et pas un lien).</p>
<p>En php, on définit une liste de champs acceptés :</p>
<pre class="brush: php; title: ; notranslate">
$whitelist = array('nom', 'mail', 'message', 'envoyer');
</pre>
<p>Lors de la soumission du formulaire, on contrôle ce qui est retourné :</p>
<pre class="brush: php; title: ; notranslate">
if(checkWhitelist($whitelist))
{
     // Traitment du formulaire
}
</pre>
<p>La fonction checkWhitelist retourne false s&#8217;il trouve un champ qui ne figure pas dans la whitelist</p>
<pre class="brush: php; title: ; notranslate">
function checkWhitelist ($list)
{
	foreach ($_POST as $key =&gt; $item)
	{
		if (!in_array($key, $list))
		{
			return false;
		}
	}

	return true;
}
</pre>
<p><strong>2. Placer un token en session</strong></p>
<p>De nombreux robots ne sont pas capable de gérer des cookies. La solution consiste donc à placer un nombre aléatoire dans un champ caché du formulaire, et à stocker ce nombre en session. Une fois que le formulaire est retourné, on vérifie que le nombre retourné par le formulaire est identique au nombre stocké en session. Les robots ne gérant pas les sessions ne retourneront rien, et du coup le formulaire ne sera pas traité.</p>
<p>Au chargement de la page, on génère un token (le paramètre de la fonction est le nom du formulaire) :</p>
<pre class="brush: php; title: ; notranslate">
$token = generateFormToken('contact_form');
</pre>
<p>La fonction generateFormToken génère un nombre aléatoire, le stock en session, et le retourne.</p>
<pre class="brush: php; title: ; notranslate">
function generateFormToken($form)
{
    $token = md5(uniqid(microtime(), true));
    $_SESSION[$form.'_token'] = $token;
    return $token;
}
</pre>
<p>On place ensuite ce token dans un champ caché du formulaire :</p>
<pre class="brush: xml; title: ; notranslate">
&lt;input type=&quot;hidden&quot; name=&quot;token&quot; value=&quot;&lt;?php echo $token; ?&gt;&quot; /&gt;
</pre>
<p>Lorsque le formulaire est retourné, on vérifie le token :</p>
<pre class="brush: php; title: ; notranslate">
if(verifyFormToken('contact_form'))
{
    // Traitement du formulaire
}
</pre>
<p>Fonction verifyFormToken :</p>
<pre class="brush: php; title: ; notranslate">
function verifyFormToken($form)
{
    if (!isset($_SESSION[$form.'_token']))
    {
        return false;
    }

    if (!isset($_POST['token']))
    {
        return false;
    }

    if ($_SESSION[$form.'_token'] !== $_POST['token'])
    {
        return false;
    }

    return true;
}
</pre>
<p><strong>3. Changer le contenu d&#8217;un champ caché en javascript</strong></p>
<p>Les robots ne remplissent pas les formulaires, ils se contentent d&#8217;envoyer directement le contenu du formulaire à l&#8217;adresse définie. La troisième solution consiste donc à placer un champ caché dans le formulaire, avec une valeur de 0 (ou autre), et de changer la valeur de ce champ lorsque l&#8217;utilisateur saisie son nom (ou autre).</p>
<p>A l&#8217;aide de Jquery, on attache une action qui sera déclenchée dès que l&#8217;utilisateur placera son curseur dans le champ nom. Cette action va modifier la valeur de notre champ caché (appellé ici &laquo;&nbsp;control&nbsp;&raquo;) :</p>
<pre class="brush: jscript; title: ; notranslate">
$(function(){
	$('#nom').bind('focus', function(){
		$(&quot;#control&quot;).val('666');
	})
});
</pre>
<p>Lorsque le formulaire est renvoyé, on vérifie que le champ control a bien la valeur 666 :</p>
<pre class="brush: php; title: ; notranslate">
if($_POST['control'] == 666)
{
    // Traitement du formulaire
}
</pre>
<p>Pour résumer, voici le script en entier :</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?php
	session_start();

	function generateFormToken($form)
	{

	    $token = md5(uniqid(microtime(), true));
		$_SESSION[$form.'_token'] = $token;
	   	return $token;
	}

	function verifyFormToken($form)
	{

	    if (!isset($_SESSION[$form.'_token']))
		{
			return false;
	    }

		if (!isset($_POST['token']))
		{
			return false;
	    }

		if ($_SESSION[$form.'_token'] !== $_POST['token'])
		{
			return false;
	    }

		return true;
	}

	function checkWhitelist ($list)
	{
		foreach ($_POST as $key =&gt; $item)
		{
			if (!in_array($key, $list))
			{
				return false;
			}
		}

		return true;
	}

	$whitelist = array('nom', 'mail', 'message', 'envoyer', 'control', 'token');

	if(isset($_POST['nom']) &amp;&amp; verifyFormToken('contact_form') &amp;&amp; checkWhitelist($whitelist) &amp;&amp; $_POST['control'] == 666)
	{
		// Traitement du formulaire
	}

	$token = generateFormToken('contact_form');
?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
	&lt;title&gt;&lt;/title&gt;
	&lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot;&gt;
		$(function(){
			$('#mail').bind('focus', function(){
				$(&quot;#control&quot;).val('666');
			});
		});
	&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;form action=&quot;&quot; method=&quot;post&quot; name=&quot;contact_form&quot;&gt;
		&lt;label for=&quot;nom&quot;&gt;Nom&lt;/label&gt;
		&lt;input type=&quot;text&quot; name=&quot;nom&quot; id=&quot;nom&quot; /&gt;
		&lt;label for=&quot;mail&quot;&gt;Mail&lt;/label&gt;
		&lt;input type=&quot;text&quot; name=&quot;mail&quot; id=&quot;mail&quot; /&gt;
		&lt;label for=&quot;message&quot;&gt;Message&lt;/label&gt;
		&lt;textarea name=&quot;message&quot;&gt;&lt;/textarea&gt;
		&lt;input type=&quot;hidden&quot; name=&quot;control&quot; id=&quot;control&quot; value=&quot;0&quot; /&gt;
		&lt;input type=&quot;hidden&quot; name=&quot;token&quot; value=&quot;&lt;?php echo $token; ?&gt;&quot; /&gt;
		&lt;input type=&quot;submit&quot; name=&quot;envoyer&quot; value=&quot;Envoyer&quot;
	&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>J&#8217;utilise cette solution depuis quelques temps, elle semble efficace. Concernant les deux premières techniques, je les ai trouvé sur un site anglais, mais pas moyen de retrouver l&#8217;adresse de ce site ; je l&#8217;ajouterai si je la retrouve. Pour la troisième technique, elle pose un problème si le visiteur du site a désactivé le javascript sur son navigateur. A vous de voir si cela est acceptable ou pas.</p>
<p>Si vous utilisez une autre technique, qui soit simple et efficace, n&#8217;hésitez pas à en faire part dans les commentaires.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lecentre.net/fratoblog/2010/02/securiser-un-formulaire-sans-captcha/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Espionner les visiteurs d&#8217;un site avec javascript</title>
		<link>http://www.lecentre.net/fratoblog/2009/11/espionner-les-visiteurs-dun-site-avec-javascript/</link>
		<comments>http://www.lecentre.net/fratoblog/2009/11/espionner-les-visiteurs-dun-site-avec-javascript/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 15:13:56 +0000</pubDate>
		<dc:creator>Frato</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[mootools]]></category>

		<guid isPermaLink="false">http://www.lecentre.net/fratoblog/?p=202</guid>
		<description><![CDATA[Pour un projet, je souhaitais connaître les liens qu&#8217;avaient visité les gens sur le site, pour afficher ou pas des informations complémentaires. Ma première idée a été de lister les liens ayant l&#8217;état :visited. Ceci est facile avec un petit bout de javascript (j&#8217;utilise Jquery, mais cela fonctionne avec n&#8217;importe quelle bibliothèque javascript) : Le ...]]></description>
			<content:encoded><![CDATA[<p>Pour un projet, je souhaitais connaître les liens qu&#8217;avaient visité les gens sur le site, pour afficher ou pas des informations complémentaires. Ma première idée a été de lister les liens ayant l&#8217;état <em>:visited</em>. Ceci est facile avec un petit bout de javascript (j&#8217;utilise Jquery, mais cela fonctionne avec n&#8217;importe quelle bibliothèque javascript) :</p>
<pre class="brush: jscript; title: ; notranslate">
$('a:visited').each(function(){
	console.log($(this).attr(&quot;href&quot;));
});
</pre>
<p>Le petit bout de code ci-dessus affiche dans la console la liste de tous les liens qui ont été visités par l&#8217;internaute.</p>
<p>Mais cette technique a une limite de taille : elle ne permet de lister que les liens qui se trouvent effectivement dans la page en cours de consultation. Si on voulait l&#8217;utiliser pour vérifier toutes les pages d&#8217;un site, il faudrait que chaque page affiche les liens vers toutes les pages du site.</p>
<p>En fouillant sur internet, j&#8217;ai trouvé une solution tellement simple que je m&#8217;étonne qu&#8217;elle ne soit pas plus populaire. J&#8217;ai trouvé cette technique sur le blog de <a href="http://davidwalsh.name">David Walsh</a>, technique qu&#8217;il nomme <a href="http://davidwalsh.name/jquery-spyjax">Spyjax</a>.</p>
<p>En fait, on peut facilement définir une couleur pour les liens dans une page, et une couleur différente pour les liens qui ont été visités.<br />
La technique consiste donc à insérer des liens dans la page via un javascript, puis de regarder la couleur du lien. Si le code couleur correspond au code que l&#8217;on a attribué au liens visités, c&#8217;est que l&#8217;internaute a visité le site.</p>
<p>Ainsi, non seulement on peut vérifier si le visiteur est allé sur une page précise de son site, mais on peut également vérifier s&#8217;il est allé sur n&#8217;importe quel autre site, comme le site d&#8217;un de ses concurrents par exemple ! Je vous laisse imaginer toutes les applications que cela peut avoir.</p>
<p>Pour récupérer le script, disponible en Jquery et en Mootools, c&#8217;est par ici : <a href="http://davidwalsh.name/jquery-spyjax">Spyjax</a>.</p>
<p>Et pour des exemples d&#8217;utilisation :</p>
<p>Une page qui vérifie si vous avez consulté des sites pour adultes : <a href="http://www.didyouwatchporn.com">http://www.didyouwatchporn.com</a><br />
Une page qui vérifie si vous avez consulté un des 5 000 sites les plus populaires : <a href="http://whattheinternetknowsaboutyou.com/">http://whattheinternetknowsaboutyou.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lecentre.net/fratoblog/2009/11/espionner-les-visiteurs-dun-site-avec-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comparateur de fichier (diff tool) sur mac</title>
		<link>http://www.lecentre.net/fratoblog/2009/04/comparateur-de-fichier-diff-tool-sur-mac/</link>
		<comments>http://www.lecentre.net/fratoblog/2009/04/comparateur-de-fichier-diff-tool-sur-mac/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 07:46:42 +0000</pubDate>
		<dc:creator>Frato</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://www.lecentre.net/fratoblog/?p=182</guid>
		<description><![CDATA[Changes vous permet de comparer vos fichiers et vos dossiers pour trouver rapidement les différences. L&#8217;interface est très intuitive, et l&#8217;application peut être intégrée sous forme de plug-in dans la plupart des éditeurs de texte (Textmate, Coda, BBEdit, Espresso, &#8230;). Il permet de travailler sur des fichiers locaux, ainsi qu&#8217;avec les système de versionning (Subversion, ...]]></description>
			<content:encoded><![CDATA[<p><a href="http://changesapp.com"><img src="http://www.lecentre.net/fratoblog/wp-content/uploads/2009/04/dircomp.png" alt="" title="dircomp" width="450" height="244" class="aligncenter size-full wp-image-183" /></a><a href="http://changesapp.com">Changes</a> vous permet de comparer vos fichiers et vos dossiers pour trouver rapidement les différences. L&#8217;interface est très intuitive, et l&#8217;application peut être intégrée sous forme de plug-in dans la plupart des éditeurs de texte (Textmate, Coda, BBEdit, Espresso, &#8230;). Il permet de travailler sur des fichiers locaux, ainsi qu&#8217;avec les système de versionning (Subversion, CVS, Git, &#8230;).</p>
<p>J&#8217;ai découvert ce soft via <a href="http://daringfireball.net/linked/2009/03/31/changes-15">Daring Fireball</a>, qui propose un <strong>coupon de réduction de 10 $</strong> pour le logiciel, jusqu&#8217;au 15 avril.</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/w86wRYRPBrI&#038;rel=0&#038;color1=0x2b405b&#038;color2=0x6b8ab6&#038;hl=en&#038;feature=player_embedded&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/w86wRYRPBrI&#038;rel=0&#038;color1=0x2b405b&#038;color2=0x6b8ab6&#038;hl=en&#038;feature=player_embedded&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>[ad#posts]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lecentre.net/fratoblog/2009/04/comparateur-de-fichier-diff-tool-sur-mac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Consulter la documentation Jquery avec Spotlight</title>
		<link>http://www.lecentre.net/fratoblog/2009/02/consulter-la-documentation-jquery-avec-spotlight/</link>
		<comments>http://www.lecentre.net/fratoblog/2009/02/consulter-la-documentation-jquery-avec-spotlight/#comments</comments>
		<pubDate>Fri, 27 Feb 2009 07:57:13 +0000</pubDate>
		<dc:creator>Frato</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://www.lecentre.net/fratoblog/?p=160</guid>
		<description><![CDATA[Mika Tuupola, inspiré par Priit Haamer qui a fait la même chose pour Ruby on Rails, a créé un module pour le dictionnaire intégré à OS X pour Jquery. Ainsi, la documentation Jquery est disponible dans Spotlight, d&#8217;un simple Apple + barre d&#8217;espace. Télécharger le fichier Pour l&#8217;installer, copier le fichier dé-zippé dans /Bibliothèque/Dictionaries/ et ...]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.lecentre.net/fratoblog/wp-content/uploads/2009/02/jquery_spotlight.png"><img src="http://www.lecentre.net/fratoblog/wp-content/uploads/2009/02/jquery_spotlight.png" alt="" title="jquery_spotlight" width="500" height="277" class="aligncenter size-full wp-image-161" /></a><br />
<a href="http://www.appelsiini.net/">Mika Tuupola</a>, inspiré par <a href="http://www.priithaamer.com/">Priit Haamer</a> qui a fait <a href="http://priithaamer.com/blog/ruby-on-rails-dictionary-for-macosx">la même chose pour Ruby on Rails</a>, a créé un module pour le dictionnaire intégré à OS X pour Jquery. Ainsi, la documentation Jquery est disponible dans Spotlight, d&#8217;un simple Apple + barre d&#8217;espace.</p>
<p><a href="http://www.appelsiini.net/download/jQuery.dictionary.zip">Télécharger le fichier</a></p>
<p>Pour l&#8217;installer, <strong>copier le fichier dé-zippé dans /Bibliothèque/Dictionaries/</strong> et <strong>activez le module Jquery</strong> dans les préférences de l&#8217;application Dictionnaire.</p>
<p>Pour plus d&#8217;infos, consultez <a href="http://www.appelsiini.net/2009/2/search-jquery-api-docs-from-spotlight">le billet de Mika Tuupola</a>.</p>
<p>[ad#posts]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lecentre.net/fratoblog/2009/02/consulter-la-documentation-jquery-avec-spotlight/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Atlas, éditeur en ligne pour créer des applications avec le framework Cappuccino</title>
		<link>http://www.lecentre.net/fratoblog/2009/02/atlas-editeur-en-ligne-pour-creer-des-applications-avec-le-framework-cappuccino/</link>
		<comments>http://www.lecentre.net/fratoblog/2009/02/atlas-editeur-en-ligne-pour-creer-des-applications-avec-le-framework-cappuccino/#comments</comments>
		<pubDate>Wed, 25 Feb 2009 08:13:09 +0000</pubDate>
		<dc:creator>Frato</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://www.lecentre.net/fratoblog/?p=147</guid>
		<description><![CDATA[Après Bespin, l&#8217;éditeur de texte en ligne de Mozilla, 280 North présente Atlas, une application en ligne pour créer des applications basées sur le framework Cappuccino. Leur démo (vidéo ci-dessous) est très impressionnante, tant au niveau de leur éditeur en ligne, qu&#8217;au niveau de la facilité avec laquelle on peut créer une application très rapidement. ...]]></description>
			<content:encoded><![CDATA[<p>Après <a href="http://www.lecentre.net/fratoblog/2009/02/bespin-editeur-de-texte-en-ligne/">Bespin</a>, l&#8217;éditeur de texte en ligne de Mozilla, <a href="http://280north.com/">280 North</a> présente <a href="http://280atlas.com/">Atlas</a>, une application en ligne pour créer des applications basées sur le framework Cappuccino. Leur démo (vidéo ci-dessous) est très impressionnante, tant au niveau de leur éditeur en ligne, qu&#8217;au niveau de la facilité avec laquelle on peut créer une application très rapidement.</p>
<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="437" height="293" id="viddler"><param name="movie" value="http://www.viddler.com/simple_on_site/1db9bf4d" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><param name="wmode" value="transparent" /><embed src="http://www.viddler.com/simple_on_site/1db9bf4d" width="437" height="293" type="application/x-shockwave-flash" allowScriptAccess="always" allowFullScreen="true" wmode="transparent" name="viddler" ></embed></object></p>
<p>Pour rappel, le framework Cappuccino permet de créer des applications web avec un look and feel d&#8217;application classique (voir par exemple <a href="http://280slides.com/">280 Slide</a>, une copie de Keynote (l&#8217;application d&#8217;Apple pour créer des présentations), mais en version web).</p>
<p>Pour en savoir plus :</p>
<p><a href="http://280atlas.com/">Atlas</a><br />
<a href="http://cappuccino.org/">Cappuccinno</a></p>
<p>[ad#posts]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lecentre.net/fratoblog/2009/02/atlas-editeur-en-ligne-pour-creer-des-applications-avec-le-framework-cappuccino/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bespin, éditeur de texte en ligne</title>
		<link>http://www.lecentre.net/fratoblog/2009/02/bespin-editeur-de-texte-en-ligne/</link>
		<comments>http://www.lecentre.net/fratoblog/2009/02/bespin-editeur-de-texte-en-ligne/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 07:46:10 +0000</pubDate>
		<dc:creator>Frato</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://www.lecentre.net/fratoblog/?p=125</guid>
		<description><![CDATA[Bespin est un éditeur de texte en ligne, issu du Mozilla Lab. Utilisant Canvas, il permet d&#8217;éditer vos fichiers html, js, &#8230; en ligne. Après un petit test rapide, l&#8217;outil semble rapide et efficace. Il dispose d&#8217;une ligne de commande permettant d&#8217;utiliser des fonctions (remplacer du texte avec des regex, trim, &#8230;). Pour le tester, ...]]></description>
			<content:encoded><![CDATA[<p><a href="http://bespin.mozilla.com/"><img src="http://www.lecentre.net/fratoblog/wp-content/uploads/2009/02/bespin_editor.png" alt="" title="bespin_editor" width="500" height="375" class="aligncenter size-full wp-image-126" /></a><br />
<a href="http://bespin.mozilla.com/">Bespin</a> est un éditeur de texte en ligne, issu du Mozilla Lab. Utilisant Canvas, il permet d&#8217;éditer vos fichiers html, js, &#8230; en ligne. Après un petit test rapide, l&#8217;outil semble rapide et efficace. Il dispose d&#8217;une ligne de commande permettant d&#8217;utiliser des fonctions (remplacer du texte avec des regex, trim, &#8230;).<br />
Pour le tester, il faut utiliser un navigateur supportant Canvas, et les fonctions avancées de Canvas, donc Firefox 3 ou une nightly de Safari.</p>
<p><object width="480" height="270"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=3195079&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=3195079&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="480" height="270"></embed></object><br /><a href="http://vimeo.com/3195079">Introducing Bespin</a> from <a href="http://vimeo.com/dion">Dion Almaer</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>Plus de détail sur l&#8217;annonce de Bespin sur <a href="http://ajaxian.com/archives/bespin-a-new-mozilla-labs-experimental-extensible-code-editor-using-canvas">Ajaxian</a>.</p>
<p>[ad#posts]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lecentre.net/fratoblog/2009/02/bespin-editeur-de-texte-en-ligne/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Un slideshow animé sans flash grâce à Canvas</title>
		<link>http://www.lecentre.net/fratoblog/2009/02/un-slideshow-anime-sans-flash-grace-a-canvas/</link>
		<comments>http://www.lecentre.net/fratoblog/2009/02/un-slideshow-anime-sans-flash-grace-a-canvas/#comments</comments>
		<pubDate>Sun, 08 Feb 2009 09:32:31 +0000</pubDate>
		<dc:creator>Frato</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://www.lecentre.net/fratoblog/?p=116</guid>
		<description><![CDATA[Jérôme Wax expérimente avec l&#8217;objet canvas, il a créé un diaporama animé entièrement propulsé en javascript et utilisant l&#8217;objet canvas. Encore une raison de moins d&#8217;utiliser Flash pour réaliser de petites animations sur un site. Dans un autre style, l&#8217;équipe de développement de Safari présente une technique d&#8217;animation en CSS, à tester avec une version ...]]></description>
			<content:encoded><![CDATA[<p><a href="http://weblog.lo2k.net/2009/02/ps3-slideshow-on-flickr-with-html5-canvas/"><img src="http://www.lecentre.net/fratoblog/wp-content/uploads/2009/02/image-8-300x117.png" alt="" title="Canvas_slideshow" width="300" height="117" class="aligncenter size-full wp-image-117" /></a><br />
<a href="http://www.lo2k.net/v7/">Jérôme Wax</a> expérimente avec l&#8217;objet canvas, il a créé un <a href="http://weblog.lo2k.net/2009/02/ps3-slideshow-on-flickr-with-html5-canvas/">diaporama animé</a> entièrement propulsé en javascript et utilisant l&#8217;objet canvas. Encore une raison de moins d&#8217;utiliser Flash pour réaliser de petites animations sur un site.</p>
<p>Dans un autre style, l&#8217;équipe de développement de Safari présente une <a href="http://webkit.org/blog/324/css-animation-2/">technique d&#8217;animation en CSS</a>, à tester avec une <a href="http://nightly.webkit.org/">version de développement de Safari</a> ou avec Safari sur votre Iphone.</p>
<p>[ad#posts]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lecentre.net/fratoblog/2009/02/un-slideshow-anime-sans-flash-grace-a-canvas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Petite sélection de plug-in jquery</title>
		<link>http://www.lecentre.net/fratoblog/2008/10/petite-selection-de-plug-in-jquery/</link>
		<comments>http://www.lecentre.net/fratoblog/2008/10/petite-selection-de-plug-in-jquery/#comments</comments>
		<pubDate>Mon, 27 Oct 2008 07:55:35 +0000</pubDate>
		<dc:creator>Frato</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://www.lecentre.net/fratoblog/?p=62</guid>
		<description><![CDATA[Voici une petite sélection de plug-in jquery pouvant se révéler utiles : jQuery iPod-style Drilldown Menu Un menu reproduisant la navigation sur un iPod, pratique pour afficher des menus complexes, avec de nombreux niveaux Compteur de mot dans un textarea Comme son nom l&#8217;indique, permet de compter le nombre de mots dans un textarea Parseur ...]]></description>
			<content:encoded><![CDATA[<p>Voici une petite sélection de plug-in jquery pouvant se révéler utiles :</p>
<h2><a href="http://www.filamentgroup.com/lab/jquery_ipod_style_drilldown_menu">jQuery iPod-style Drilldown Menu</a></h2>
<p><a href="http://www.filamentgroup.com/lab/jquery_ipod_style_drilldown_menu"><img src="http://www.lecentre.net/fratoblog/wp-content/uploads/2008/10/jquery_ipod_style_menu.jpg" alt="" title="jquery_ipod_style_menu" width="222" height="251" class="alignleft size-full wp-image-63" /></a>Un menu reproduisant la navigation sur un iPod, pratique pour afficher des menus complexes, avec de nombreux niveaux</p>
<h2><a href="http://roshanbh.com.np/2008/10/jquery-plugin-word-counter-textarea.html">Compteur de mot dans un textarea</a></h2>
<p>Comme son nom l&#8217;indique, permet de compter le nombre de mots dans un textarea</p>
<h2><a href="http://projects.allmarkedup.com/jquery_url_parser/">Parseur d&#8217;url</a></h2>
<p>Permet de récupérer facilement les informations d&#8217;un lien. Le plug-in permet d&#8217;accéder simplement au lien, au protocol du lien (http, https, &#8230;), au domaine, au port utilisé, aux paramètres s&#8217;il y en a (item=value&#038;item2=value2), au nom du fichier (index.html), au chemin (/folder/dir/), et à encore bien d&#8217;autres paramètres.</p>
<h2><a href="http://jquery.offput.ca/every/">Timers</a></h2>
<p>Permet d&#8217;appeler une fonction toutes les x secondes, une fois ou plusieurs fois</p>
<p>[ad#posts]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lecentre.net/fratoblog/2008/10/petite-selection-de-plug-in-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

