<?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>Way of Spark &#187; Spark</title>
	<atom:link href="http://wayofspark.com/author/admin/feed/" rel="self" type="application/rss+xml" />
	<link>http://wayofspark.com</link>
	<description>problèmes et solutions de l&#039;informatique de tous les jours, pour nous, les devs.</description>
	<lastBuildDate>Sat, 14 Aug 2010 11:31:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Testez vos sites facilement sous tous les navigateurs avec Spoon / Xenocode</title>
		<link>http://wayofspark.com/2010/08/14/testez-vos-sites-facilement-sous-tous-les-navigateurs-avec-spoon-xenocode/</link>
		<comments>http://wayofspark.com/2010/08/14/testez-vos-sites-facilement-sous-tous-les-navigateurs-avec-spoon-xenocode/#comments</comments>
		<pubDate>Sat, 14 Aug 2010 11:18:13 +0000</pubDate>
		<dc:creator>Spark</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[navigateurs]]></category>
		<category><![CDATA[tests]]></category>

		<guid isPermaLink="false">http://wayofspark.com/?p=415</guid>
		<description><![CDATA[Quand on développe des sites, on tombe forcement à un moment sur le problème de la compatibilité multi-navigateur : comment faire pour tester à la fois sous Firefox, sous IE (enfin sous tous les IE), puis aussi sous Chrome, Opéra&#8230; Il existe plusieurs solutions plus ou moins efficace pour ce problème (comme par exemple la [...]]]></description>
			<content:encoded><![CDATA[<p>Quand on développe des sites, on tombe forcement à un moment sur le problème de la compatibilité multi-navigateur : comment faire pour tester à la fois sous Firefox, sous IE (enfin sous tous les IE), puis aussi sous Chrome, Opéra&#8230;</p>
<p>Il existe plusieurs solutions plus ou moins efficace pour ce problème (comme par exemple la virtualisation), mais aujourd&#8217;hui je vais parler de <a href="http://www.spoon.net/browsers/">Spoon </a>(anciennement connu sous le nom de Xenocode).</p>
<h3>Le principe de Spoon</h3>
<p>Spoon est une sandbox permettant de lancer des applications directement à partir du web. Une fois le plugin installé, il suffit de cliquer sur une application à partir de leur site pour la lancer. <span id="more-415"></span></p>
<p style="text-align: center;"><a class="thickbox" href="http://wayofspark.com/wp-content/uploads/2010/08/spoon_1.png"><img class="aligncenter size-full wp-image-424" title="Spoon - Navigateurs" src="http://wayofspark.com/wp-content/uploads/2010/08/spoon_1.png" alt="" width="495" height="442" /></a></p>
<h3>Navigateurs proposés</h3>
<p>Actuellement, les navigateurs proposés sont les suivants  :</p>
<ul>
<li>Internet Explorer ( version 6, 7 et 8 )</li>
<li>Firefox ( version 2, 3, 3.5 )</li>
<li>Safari ( version 3 et 4 )</li>
<li>Chrome</li>
<li>Opera ( version 9 et 10 )</li>
</ul>
<h3>Exemple d&#8217;utilisation : Internet Explorer 6 sous Spoon</h3>
<p>Voici un exemple d&#8217;utilisation d&#8217;Internet Explorer 6 sous Spoon à partir d&#8217;une machine ne l&#8217;ayant pas. Cela aura pris au total à peine une minute pour avoir le navigateur opérationnel.</p>
<p><a class="thickbox" href="http://wayofspark.com/wp-content/uploads/2010/08/spoon_2.png"><img class="aligncenter size-full wp-image-428" title="Internet Explorer 6 lancé sous Spoon" src="http://wayofspark.com/wp-content/uploads/2010/08/spoon_2.png" alt="" width="437" height="318" /></a></p>
<p>A savoir que Spoon ne fait pas que dans les navigateurs, et propose un large choix d&#8217;application en sandbox, tel que ThunderBird, Notepad++, Office, ou même différent jeux.</p>
    ]]></content:encoded>
			<wfw:commentRss>http://wayofspark.com/2010/08/14/testez-vos-sites-facilement-sous-tous-les-navigateurs-avec-spoon-xenocode/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Création et utilisation d&#8217;une clef SSH</title>
		<link>http://wayofspark.com/2010/08/11/creation-et-utilisation-dune-clef-ssh/</link>
		<comments>http://wayofspark.com/2010/08/11/creation-et-utilisation-dune-clef-ssh/#comments</comments>
		<pubDate>Wed, 11 Aug 2010 21:33:03 +0000</pubDate>
		<dc:creator>Spark</dc:creator>
				<category><![CDATA[SysAdmin]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[putty]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://wayofspark.com/?p=345</guid>
		<description><![CDATA[Une clef SSH représente l&#8217;identité d&#8217;un utilisateur. Elle permet de s&#8217;identifier lors de la connexion sur une machine sans avoir besoin d&#8217;identification interactive (comprendre par mot de passe). Une clef est en fait divisée en deux parties distinctes : la clef privée, la réelle identité, qui restera sur le poste client, et la clef publique, [...]]]></description>
			<content:encoded><![CDATA[<p>Une clef SSH représente l&#8217;identité d&#8217;un utilisateur. Elle permet de s&#8217;identifier lors de la connexion sur une machine sans avoir besoin d&#8217;identification interactive (comprendre par mot de passe). Une clef est en fait divisée en deux parties distinctes : la clef privée, la réelle identité, qui restera sur le poste client, et la clef publique, qui sera déposée sur les ordinateurs distants et permettra la reconnaissance de l&#8217;utilisateur lors de la connexion à la machine.</p>
<p><img class="aligncenter size-full wp-image-385" title="ssh-keys" src="http://wayofspark.com/wp-content/uploads/2010/08/ssh-keys.gif" alt="" width="321" height="207" />Dans ce tutoriel, j&#8217;expliquerais comment générer un couple de clef publique/privée, sous linux et sous windows (à l&#8217;aide de putty), puis je montrerais comment déployer la clef sur un serveur distant pour permettre  l&#8217;accès à la machine sans avoir besoin de tapper son mot de passe à chaque connexion.<span id="more-345"></span></p>
<h3>Sous Linux</h3>
<p>Il faut tout d&#8217;abord installer le package openssh si celui-ci ne se trouverait pas encore sur la machine client :</p>
<pre>apt-get install openssh-client</pre>
<ul>
<li>
<h4>Génération de la clef</h4>
</li>
</ul>
<p>La génération se fait ensuite facilement via la commande suivante :</p>
<pre>ssh-keygen -t rsa -C &lt;commentaire&gt;
</pre>
<p>Le terminal demande ou générer la clef ( avec comme chemin par default ~/.ssh/id_rsa ), puis demande de rentrer une passphrase (il est évidemment très important de ne pas la laisser vide, sans quoi tout le monde pourrait se servir de votre clef).</p>
<p style="text-align: center;"><a class="thickbox" href="http://wayofspark.com/wp-content/uploads/2010/08/putty_6.png"></a><a class="thickbox" href="http://wayofspark.com/wp-content/uploads/2010/08/putty_6.png"><img class="aligncenter size-full wp-image-393" title="putty_6" src="http://wayofspark.com/wp-content/uploads/2010/08/putty_6.png" alt="" width="569" height="319" /></a></p>
<p>Le commentaire est optionnel, mais il est judicieux d&#8217;en mettre un, afin de reconnaitre sa clef (surtout si l&#8217;on est amené à en utiliser plusieurs)</p>
<ul>
<li>
<h4>Mémorisation de la clef</h4>
</li>
</ul>
<p>Une fois la clef générée, il faut indiquer à l&#8217;agent SSH de s&#8217;en servir lors des connexions. Cela se fait via la commande ssh-add :</p>
<pre>ssh-add
</pre>
<p>Si vous avez laisser le chemin par default ( ~/ssh/ ), l&#8217;agent va chercher automatiquement dans ce dossier toutes les clefs disponibles et vous demande, pour chacune d&#8217;elles, sa passphrase. Si jamais vous avez enregistrer votre clef ailleurs, il suffit de specifier le chemin à la commande :</p>
<pre>ssh-add /chemin/vers/ma/clef
</pre>
<p>Une fois vos clefs mémorisées par l&#8217;agent, celles-ci seront automatiquement utilisées lors de tentative d&#8217;identification SSH. Attention cependant, en cas de redémarrage, il est nécessaire de relancer la commande ssh-add.</p>
<h3>Sous window (via Putty)</h3>
<p>Sous windows, l&#8217;agent de connexion le plus fréquemment utilisé reste Putty. Il faut donc télécharger le logiciel ( <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html">par ici</a> ). Attention, bien prendre l&#8217;installeur windows et non pas seulement l&#8217;exécutable putty.exe, sans quoi les outils de générations ne seront pas disponibles.</p>
<ul>
<li>
<h4>Génération de la clef</h4>
</li>
</ul>
<p>La génération se fait via l&#8217;utilitaire PuttyGen :</p>
<p style="text-align: center;"><a class="thickbox" href="http://wayofspark.com/wp-content/uploads/2010/08/putty_1.png"><img class="aligncenter size-full wp-image-367" title="putty_1" src="http://wayofspark.com/wp-content/uploads/2010/08/putty_1.png" alt="" width="401" height="385" /></a></p>
<p>Laissez la configuration par defaut ( SSH-2 RSA de taille 1024 ) et cliquez sur &#8220;Generate&#8221;. Bougez la souris comme un forcené pour générer la partie aléatoire de la clef, puis une fois la manipulation finie, rajoutez votre commentaire, entrez votre passphrase, puis enregistrez le couple ainsi généré ( save public key puis save private key ).</p>
<p>Putty n&#8217;utilisant pas exactement le même format de clef que sous linux, il est égalemment possible d&#8217;importer une clef généré sous cet OS pour permettre à Pageant de s&#8217;en servir (Conversion -&gt; Import Key).</p>
<ul>
<li>
<h4>Mémorisation de la clef</h4>
</li>
</ul>
<p>La mémorisation de la clef se fait via l&#8217;outil Pageant : lancez Pageant, puis cliquez sur &#8220;Add key&#8221;. Il vous est alors demandé la passphrase de la clef.</p>
<p><img class="aligncenter size-full wp-image-370" title="putty_2" src="http://wayofspark.com/wp-content/uploads/2010/08/putty_21.png" alt="" width="240" height="143" /></p>
<p>Une fois celle-ci validée, Pageant rajoute la clef à la liste de celles que pourra utiliser putty.</p>
<p style="text-align: center;"><a class="thickbox" href="http://wayofspark.com/wp-content/uploads/2010/08/putty_3.png"><img class="aligncenter size-full wp-image-369" title="putty_3" src="http://wayofspark.com/wp-content/uploads/2010/08/putty_3.png" alt="" width="368" height="262" /></a></p>
<h3>Dépot de la clef sur le serveur</h3>
<p>Il faut ensuite déposer la clef publique (et bien la publique, la privée doit rester sur la machine à partir de laquelle l&#8217;ont veut se connecter) sur le ou les serveurs sur lesquels nous allons vouloir nous connecter, pour que le serveur nous reconnaisse.</p>
<p>Le dépot se fait vers le fichier ~/.ssh/authorized_keys de l&#8217;utilisateur à qui appartient la clef. Il suffit de rajouter le contenu du fichier de clef publique dans le fichier authorized_keys. Cela peut se faire à partir de l&#8217;importe quel éditeur de texte, ou, plus rapidement, comme ceci :</p>
<pre>cat ~/chemin/vers/la/clef/id_dsa.pub &gt;&gt; ~/.ssh/authorized_keys
</pre>
<p>Dès que la clef est rajoutée, elle est immédiatement prise en compte pour les tentatives futures de connexion.</p>
<h3>Vérification</h3>
<p>Une fois la manipulation effectuée, il suffit de se déconnecter du serveur, de bien vérifier que l&#8217;agent du client à la clef SSH en mémoire, puis de relancer la connexion. On obtient le résultat suivant :</p>
<p style="text-align: center;"><a class="thickbox" href="http://wayofspark.com/wp-content/uploads/2010/08/putty_51.png"><img class="aligncenter size-full wp-image-377" title="putty_5" src="http://wayofspark.com/wp-content/uploads/2010/08/putty_51.png" alt="" width="477" height="300" /></a></p>
<p style="text-align: left;">Et voila, plus besoin de tapper son mot de passe à chaque connexion, l&#8217;agent SSH se sert de la clef pour nous identifier automatiquement lors de connexion distantes.</p>
    ]]></content:encoded>
			<wfw:commentRss>http://wayofspark.com/2010/08/11/creation-et-utilisation-dune-clef-ssh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Transfert de mail en java</title>
		<link>http://wayofspark.com/2010/07/30/transfert-de-mail-en-java/</link>
		<comments>http://wayofspark.com/2010/07/30/transfert-de-mail-en-java/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 10:28:04 +0000</pubDate>
		<dc:creator>Spark</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[mail]]></category>

		<guid isPermaLink="false">http://wayofspark.com/?p=268</guid>
		<description><![CDATA[Je viens encore une fois de perdre 1h à retrouver comment, lors d&#8217;un transfert de mail, rajouter le mail original en pièce jointe ( et donc pas dans le corps du mail ) en respectant le format mail. Ca prend 3 lignes, c&#8217;est très bête, et ca donne ca : MimeBodyPart mbp = new MimeBodyPart(); [...]]]></description>
			<content:encoded><![CDATA[<p>Je viens encore une fois de perdre 1h à retrouver comment, lors d&#8217;un transfert de mail, rajouter le mail original en pièce jointe ( et donc pas dans le corps du mail ) en respectant le format mail. Ca prend 3 lignes, c&#8217;est très bête, et ca donne ca :</p>
<pre class="prettyprint">MimeBodyPart mbp = new MimeBodyPart();
mbp.setContent(forwardedMsg, "message/rfc822");
mp.addPart(mbp);
</pre>
<p>Voila, on créé un BodyPart, et on lui injecte en tant que contenu l&#8217;object forwardedMsg, qui est un message de type MimeMessage, en spécifiant le mimetype : rfc822 (<a href="http://www.faqs.org/rfcs/rfc822.html">Internet Message Format)</a>, et le tour est joué.</p>
<p>Trouvé <a href="http://www.oracle.com/technetwork/java/faq-135477.html">ici</a>, avec plein d&#8217;autres exemples.</p>
    ]]></content:encoded>
			<wfw:commentRss>http://wayofspark.com/2010/07/30/transfert-de-mail-en-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Création et utilisation d&#8217;un tunnel SSH sous Linux / Ubuntu</title>
		<link>http://wayofspark.com/2010/07/29/creation-et-utilisation-dun-tunnel-ssh-sous-linux-ubuntu/</link>
		<comments>http://wayofspark.com/2010/07/29/creation-et-utilisation-dun-tunnel-ssh-sous-linux-ubuntu/#comments</comments>
		<pubDate>Thu, 29 Jul 2010 16:56:10 +0000</pubDate>
		<dc:creator>Spark</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[SysAdmin]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[gstm]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[tunnel]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://wayofspark.com/?p=206</guid>
		<description><![CDATA[L&#8217;utilisation de tunnels SSH est une pratique commune dans le monde de l&#8217;informatique. Le terme &#8220;tunnel&#8221; désigne le fait de passer, à partir d&#8217;un poste local, &#8220;à travers&#8221; un ordinateur distant pour accèder à un reseau, ou tout simplement à des services locaux de l&#8217;ordinateur distant. La plus grande utilisation des tunnels reste l&#8217;utilisation proxy, [...]]]></description>
			<content:encoded><![CDATA[<p>L&#8217;utilisation de tunnels SSH est une pratique commune dans le monde de l&#8217;informatique. Le terme &#8220;tunnel&#8221; désigne le fait de passer, à partir d&#8217;un poste local, &#8220;à travers&#8221; un ordinateur distant pour accèder à un reseau, ou tout simplement à des services locaux de l&#8217;ordinateur distant. La plus grande utilisation des tunnels reste l&#8217;utilisation proxy, pour se connecter à internet via un autre ordinateur (pour passer à travers un filtre internet par exemple), mais les tunnels SSH peuvent également servir à utiliser un service de l&#8217;ordinateur distant (smtp ou sql par exemple) directement sur le poste local.Cela permet de plus de disposer des mêmes avantages d&#8217;une connexion SSH standard en ce qui concerne la sécurité des échanges.</p>
<p>Dans ce tutorial j&#8217;expliquerais comment créer des redirections locales (local forwarding), distantes (remote forwarding), puis présenterais différentes solutions pour automatiser la création des tunnels.<span id="more-206"></span></p>
<h3>Redirection locale &#8220;Local Forwarding&#8221;</h3>
<p>La redirection locale reste la plus commune. Elle permet de rediriger un port de la machine locale vers une autre machine à travers le serveur SSH.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-210" title="ssh_tunnel" src="http://wayofspark.com/wp-content/uploads/2010/07/ssh_tunnel.jpg" alt="" width="426" height="187" /></p>
<p style="text-align: left;">Par exemple sur le schéma ci-dessus, la machine Navicat (machine locale) se connecte au serveur mySQL à travers un serveur SSH. Sans l&#8217;utilisation du tunnel, le client ne pourrait pas se connecter à la base SQL, celle ci étant bloquée de l&#8217;exterieur.</p>
<p style="text-align: left;">Ce type de tunnel se créé de la manière suivant :</p>
<pre>ssh -L &lt;port_local&gt;:&lt;hote_distant&gt;:&lt;port_distant&gt; &lt;user&gt;@&lt;machine_distante&gt;
</pre>
<p style="text-align: left;">Mettons donc, pour l&#8217;exemple, que l&#8217;on veuille accèder au serveur SQL ( machine &#8220;mysqlserv&#8221;, port &#8220;3306&#8243;, sur notre port local &#8220;3366&#8243; en passant à travers l&#8217;hôte SSH &#8220;gateway&#8221; avec l&#8217;utilisateur &#8220;spark&#8221;. On obtient la commande suivante :</p>
<pre>ssh -L 3366:mysqlserv:3306 spark@gateway</pre>
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<h3 style="text-align: left;">Redirection locale vers un port du poste distant</h3>
<p style="text-align: left;">Il arrive également qu&#8217;on ai simplement besoin d&#8217;accèder à un port de la machine distante qui ne soit pas ouvert à l&#8217;exterieur ( service de messagerie stmp par exemple ). Dans ce cas la, c&#8217;est exactement la même opération. La seule astuce consiste a mêttre localhost en guise d&#8217;hote distant ( localhost étant ici du point de vue du serveur et non du client)</p>
<p style="text-align: left;">Si l&#8217;on voulait par exemple rediriger le port 25 de la machine distante vers notre propre port 25, il suffit de faire :</p>
<pre>ssh -L 25:localhost:25 spark@gateway</pre>
<h3>Redirection distante &#8220;Remote Forwarding&#8221;</h3>
<p>La redirection distante est tout simplement l&#8217;inverse de la redirection locale : on permet a l&#8217;ordinateur distant de passer à travers le poste local.</p>
<pre>ssh -R &lt;port_distant&gt;:&lt;hote_local&gt;:&lt;port_local&gt; &lt;user&gt;@≤machine_distante&gt;
</pre>
<p>Si l&#8217;on voulait par exemple permettre à la machine &#8220;myserver&#8221; d&#8217;accéder au serveur pop (port 110)  &#8216;popserver&#8217; accessible depuis la machine locale sur son port 115 :</p>
<pre>ssh -R 115:popserver:110 spark@myserver
</pre>
<h3>Automatisation des tunnels</h3>
<p>Aussi pratique soient ils, la création de tunnels à chaque fois que l&#8217;on en a besoin peut vite devenir une opération fastidieuse, surtout quand il s&#8217;agit d&#8217;ouvrir 5 ou 6 tunnels à chaque connexion. Heuresement, il existe différent moyens d&#8217;automatiser partie ou totalité des ouvertures.</p>
<ul>
<li>
<h4><strong>1/ Via la configuration SSH</strong></h4>
</li>
</ul>
<p>Il est possible d&#8217;automatiser la création de tunnels lors de l&#8217;ouverture d&#8217;une session SSH. Il est donc toujours necessaire d&#8217;ouvrir une session, cependant lors de l&#8217;ouverture, les tunnels configurés se lancent automatiquement.</p>
<p>Cela se passe dans le fichier de configuration ssh :</p>
<pre>~/.ssh/config</pre>
<p>﻿Pour créer un forwarding local :</p>
<pre> Host myserver
     LocalForward 2525:localhost:25
     GatewayPorts no
</pre>
<p>Ici on forward le port 25 de myserver vers le port 2525 local.</p>
<p>Pour créer un forwarding distant :</p>
<pre>  Host mytunnel
      RemoteForward 2323:localhost:23
      GatewayPorts no
</pre>
<p>Ici on forward le port 23 local vers le port 2323 de mytunnel</p>
<p>Si on prend donc le fichier de configuration ci-dessus, la connexion au server &#8220;myserver&#8221;</p>
<pre>ssh spark@myserver
</pre>
<p>Créé automatiquement un tunnel du port local 2525 vers le port 25 du serveur.</p>
<ul>
<li>
<h4>2/ Via autoSSH</h4>
</li>
</ul>
<p>autoSSH est est paquet disponible sous la majorité des distributions linux, qui permet, comme son nom l&#8217;indique, d&#8217;automatiser la création de tunnels SSH.</p>
<p>L&#8217;installation est classique :</p>
<pre>sudo apt-get install autossh
</pre>
<p>Ensuite, l&#8217;utilisation est la même que ssh. Par exemple :</p>
<pre>autossh -M 5122 -N -R 25:localhost:22 spark@server
</pre>
<p>Quelques paramètres suplémentaire par rapport aux précédent exemples :</p>
<ul>
<li>-M 5122 : Paramètre propre à autossh : définie le port qui servira à surveiller l&#8217;état de la connexion SSH. Optionnel.</li>
</ul>
<ul>
<li>-N : Paramètre de SSH : n&#8217;execute pas de commande à l&#8217;ouverture de la session SSH ( ne lance donc pas de shell vu que la connexion de sert ici que de tunnel )</li>
</ul>
<p>A par ca, la syntaxe est la même que pour ssh : ici on ouvre un forwarding distant du port local 22 vers le port 25 de server.</p>
<ul>
<li>
<h4>Via gSTM : Gnome SSH Tunnel Manager</h4>
</li>
</ul>
<p>gSTM est une interface graphique de gestion de tunnels SSH pour gnome. Il permet de configurer et de gerer très simplement des tunnels vers différentes machines.</p>
<p style="text-align: left;"><a class="thickbox" href="http://wayofspark.com/wp-content/uploads/2010/07/gstm.png"><img class="aligncenter size-full wp-image-251" title="gstm" src="http://wayofspark.com/wp-content/uploads/2010/07/gstm.png" alt="" width="555" height="273" /></a></p>
<p style="text-align: left;">l&#8217;installation est simple :</p>
<pre style="text-align: left;">sudo apt-get install gstm
</pre>
<p>L&#8217;utilisation est ensuite très proche des solutions précédentes, mais présente le gros avantage de disposer d&#8217;une interface graphique.</p>
<h3>Utilisation d&#8217;un tunnel pour se connecter à un mysql distant</h3>
<p>Pour se connecter à un serveur mysql distant, l&#8217;opération est normalement très simple : on crée un tunnel vers le port 3306 du serveur distant vers un port local, puis on se connecte en local sur le port forwardé, comme par exemple :</p>
<pre>ssh -L 3366:localhost:3306 spark@mysqlserver
</pre>
<p>Ensuite, il suffit de se connecter en local sur le port ouvert :</p>
<pre>mysql -uroot -p -P3366
</pre>
<p>Cependant, à cause d&#8217;<a title="bug mysql" href="http://bugs.mysql.com/bug.php?id=31577">un bug dans mysql</a>, lors d&#8217;une connexion sur localhost, mysql ignore le port spécifié pour se connecter en socket sur le mysql local.</p>
<p>Pour contrer ce bug, deux solutions :</p>
<p><strong>1/</strong> Spécifier l&#8217;hote comme 127.0.0.1 ( ce qui est différent de localhost pour mysql&#8230; )</p>
<p><strong>2/</strong> Modifier la configuration mysql :</p>
<p>Ouvrir le fichier de configuration de mysql</p>
<pre>sudo vi /etc/mysql/my.cnf
</pre>
<p>Puis modifier la section [client] pour rajouter &#8220;protocol        = tcp&#8221;</p>
<p>Ce qui donne, sur une install clean de mysql :</p>
<pre>[client]
protocol        = tcp
port            = 3316
socket          = /var/run/mysqld/mysqld.sock</pre>
<p>Sans oublier de redemmarer le service mysql :</p>
<pre>sudo /etc/init.d/mysql restart</pre>
<p>ou encore</p>
<pre>sudo restart mysql
</pre>
<p>Et voila, une fois la manipulation effectuée, plus de problème de connexion sur localhost.</p>
    ]]></content:encoded>
			<wfw:commentRss>http://wayofspark.com/2010/07/29/creation-et-utilisation-dun-tunnel-ssh-sous-linux-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>5 Générateurs de loader ajax</title>
		<link>http://wayofspark.com/2010/07/27/5-generateurs-de-loader-ajax/</link>
		<comments>http://wayofspark.com/2010/07/27/5-generateurs-de-loader-ajax/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 17:09:48 +0000</pubDate>
		<dc:creator>Spark</dc:creator>
				<category><![CDATA[Resources]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[generator]]></category>
		<category><![CDATA[gif]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[loader]]></category>

		<guid isPermaLink="false">http://wayofspark.com/?p=177</guid>
		<description><![CDATA[Comme j&#8217;ai du y a pas très longtemps rechercher ( encore une fois ) une image de chargement ajax spécifique pour un projet, je me suis décidé à enfin noter les sites qui me paraissent les plus intéressants dans le domaine de la génération d&#8217;images de chargement pour des appels ajax. Les voici donc : [...]]]></description>
			<content:encoded><![CDATA[<p>Comme j&#8217;ai du y a pas très longtemps rechercher ( encore une fois ) une image de chargement ajax spécifique pour un projet, je me suis décidé à enfin noter les sites qui me paraissent les plus intéressants dans le domaine de la génération d&#8217;images de chargement pour des appels ajax. Les voici donc :<span id="more-177"></span></p>
<p><strong>AjaxLoad.info</strong> &#8211; <a href="http://www.ajaxload.info/">http://www.ajaxload.info/</a></p>
<p style="text-align: center;"><a class="thickbox" href="http://wayofspark.com/wp-content/uploads/2010/07/ajaxLoad.png"><img class="size-full wp-image-185 aligncenter" title="ajaxLoad" src="http://wayofspark.com/wp-content/uploads/2010/07/ajaxLoad.png" alt="" width="417" height="414" /></a></p>
<p><strong>Chimply.com</strong> &#8211; <a href="http://www.chimply.com/">http://www.chimply.com/</a></p>
<p style="text-align: center;"><a class="thickbox" href="http://wayofspark.com/wp-content/uploads/2010/07/chimply.png"><img class="size-full wp-image-186 aligncenter" title="chimply" src="http://wayofspark.com/wp-content/uploads/2010/07/chimply.png" alt="" width="421" height="449" /></a></p>
<p><strong>Loadinfo.net</strong> -<a href="http://www.loadinfo.net/"> http://www.loadinfo.net/</a></p>
<p style="text-align: center;"><a class="thickbox" href="http://wayofspark.com/wp-content/uploads/2010/07/loadinfo.png"><img class="aligncenter size-full wp-image-187" title="loadinfo" src="http://wayofspark.com/wp-content/uploads/2010/07/loadinfo.png" alt="" width="499" height="343" /></a></p>
<p><strong>Preloaders.net</strong> &#8211; <a href="http://preloaders.net/">http://preloaders.net/</a></p>
<p style="text-align: center;"><a class="thickbox" href="http://wayofspark.com/wp-content/uploads/2010/07/preloaders.png"><img class="aligncenter size-full wp-image-188" title="preloaders" src="http://wayofspark.com/wp-content/uploads/2010/07/preloaders.png" alt="" width="531" height="448" /></a></p>
<p><strong>WebScriptLab</strong> &#8211; <a href="http://www.webscriptlab.com/ ">http://www.webscriptlab.com/ </a></p>
<p style="text-align: center;"><a class="thickbox" href="http://wayofspark.com/wp-content/uploads/2010/07/webscriptlab.png"><img class="aligncenter size-full wp-image-189" title="webscriptlab" src="http://wayofspark.com/wp-content/uploads/2010/07/webscriptlab.png" alt="" width="468" height="455" /></a></p>
    ]]></content:encoded>
			<wfw:commentRss>http://wayofspark.com/2010/07/27/5-generateurs-de-loader-ajax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gestion de l&#8217;authentification de vos sites avec RPX</title>
		<link>http://wayofspark.com/2009/06/29/gestion-de-lauthentification-de-vos-sites-avec-rpx/</link>
		<comments>http://wayofspark.com/2009/06/29/gestion-de-lauthentification-de-vos-sites-avec-rpx/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 21:34:51 +0000</pubDate>
		<dc:creator>Spark</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Authentification]]></category>
		<category><![CDATA[Identification]]></category>
		<category><![CDATA[OpenID]]></category>
		<category><![CDATA[RPX]]></category>

		<guid isPermaLink="false">http://wayofspark.com/?p=120</guid>
		<description><![CDATA[Étant en plein développement d&#8217;un petit pastebin-like en python ( enfin c&#8217;est un peu plus que ca, mais j&#8217;en reparlerais quand il sera fini ), le problème de la gestion de mes utilisateurs s&#8217;est posé assez vite. Ne voulant pas avoir à gérer moi même l&#8217;authentification ( D&#8217;abord parce que je ne juge pas ça [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><img class="size-full wp-image-135 aligncenter" title="rpx_2" src="http://wayofspark.com/wp-content/uploads/2009/06/rpx_2.jpg" alt="rpx_2" width="542" height="190" /></p>
<p>Étant en plein développement d&#8217;un petit pastebin-like en python ( enfin c&#8217;est un peu plus que ca, mais j&#8217;en reparlerais quand il sera fini ), le problème de la gestion de mes utilisateurs s&#8217;est posé assez vite.</p>
<p>Ne voulant pas avoir à gérer moi même l&#8217;authentification ( D&#8217;abord parce que je ne juge pas ça nécessaire, des choses comme OpenID le faisant très bien, et ensuite, ok, par flemme un peu, pas envie de gerer les mots de passes, les resets, d&#8217;être sur que tout est 100% secure&#8230;),  je me suis rappelé que mon compte StackOverflow s&#8217;identifie via mon google account. En creusant un peu, j&#8217;ai appris que leur authentification était gérer par un service se nommant RPX.</p>
<p><strong>Mais RPX c&#8217;est quoi exactement ?</strong></p>
<p>RPX est un service d&#8217;authenfication par OpenID assez jeune, et pourtant utilisé sur un certain nombre de sites de taille importante, comme <a href="http://uservoice.com/">UserVoice</a> , <a href="http://www.interscope.com/">Interscope</a>, ou encore <a href="http://stackoverflow.com/">StackOverflow</a>, dont je parlais dans un précédent billet.<span id="more-120"></span></p>
<p>Allez, comme un joli schéma vaut mieux qu&#8217;un long discours, RPX fournis un service qui ressemble à ca :</p>
<p style="text-align: center;"><img class="size-full wp-image-123 aligncenter" title="rpx_howto" src="http://wayofspark.com/wp-content/uploads/2009/06/rpx_howto.JPG" alt="rpx_howto" width="500" height="188" /></p>
<p style="text-align: left;">Traduction : RPX se positionne entre votre site web et les fournisseurs d&#8217;identification tierces (comme OpenID ou GoogleID par exemple ), et facilite l&#8217;utilisation de ces derniers.</p>
<p style="text-align: left;">En pratique, lorsque l&#8217;utilisateur va vouloir s&#8217;authentifier sur votre site, il va passer par une widget RPX (iframe embarquée ou popup), qui lui présente la liste des fournisseurs disponibles.</p>
<p style="text-align: left;">Par exemple, sur le site d&#8217;uservoice (la widget est a gauche, uservoice propose aussi une inscription directe au site) :</p>
<p style="text-align: center;"><a class="thickbox" href="http://wayofspark.com/wp-content/uploads/2009/06/login_uservoice.jpg"><img class="size-full wp-image-145 aligncenter" title="login_uservoice" src="http://wayofspark.com/wp-content/uploads/2009/06/login_uservoice.jpg" alt="login_uservoice" width="499" height="268" /></a></p>
<p>L&#8217;utilisateur choisir son système d&#8217;authentification et est alors dirigé vers la page de login du fournisseur tier. Par exemple pour facebook, il arrive ici :</p>
<p style="text-align: center;"><a class="thickbox" href="http://wayofspark.com/wp-content/uploads/2009/06/auth_facebook.jpg"><img class="size-full wp-image-127 aligncenter" title="auth_facebook" src="http://wayofspark.com/wp-content/uploads/2009/06/auth_facebook.jpg" alt="auth_facebook" width="534" height="307" /></a></p>
<p>Une fois l&#8217;authentification effectuée, l&#8217;utilisateur est redirigé vers votre site. (Pour certain fournisseurs comme google, lors de la première identification, l&#8217;utilisateur passe par une page lui demandant de confirmer qu&#8217;il autorise bien le site à accéder à ses informations)</p>
<p style="text-align: center;"><a class="thickbox" href="http://wayofspark.com/wp-content/uploads/2009/06/auth_google.jpg"><img class="size-full wp-image-143 aligncenter" title="auth_google" src="http://wayofspark.com/wp-content/uploads/2009/06/auth_google.jpg" alt="auth_google" width="465" height="187" /></a></p>
<p>Et c&#8217;est la que RPX fait la jointure retour avec votre site : une fois que l&#8217;utilisateur s&#8217;est authentifié, RPX vous indique (de façon sécurisée évidemment) si l&#8217;utilisateur s&#8217;est correctement authentifié ou non, et si oui, il vous transmet ses informations publiques ( email, nom d&#8217;utilisateur, nom d&#8217;usage et clef openId ).</p>
<p>A partir de la, vous avez votre utilisateur authentifié, vous savez qui il est, et vous êtes libre de faire ce que vous voulez (inscription en base, passage en session&#8230;)</p>
<p><strong>Coté services </strong></p>
<p>RPX propose 3 types de comptes :</p>
<ul>
<li>Basic ( Gratuit )</li>
<li>Plus ( 100$ / an )</li>
<li>Pro ( 500$ / an )</li>
</ul>
<p>Je vous rassure tout de suite, le basic est largement suffisant pour tout ce qu&#8217;on pourrait vouloir sur un site de petite voir moyenne envergure :</p>
<p>Il est limité à 6 providers d&#8217;identifications (alors que les autres types de comptes n&#8217;ont pas de limite), cependant on peut quand même choisir ceux qu&#8217;on veut tous ceux disponibles,  c&#8217;est amplement suffisant ( personnellement j&#8217;ai pris OpenID, Google, Facebook, Twitter, Yahoo et AOL, ce qui couvre deja pas mal). A noter que pour facebook et twitter, il faut faire une petite manip pour créer une application tierse, mais tout est très bien expliqué sur le site de RPX, ca se passe donc sans problèmes.</p>
<p style="text-align: left;">Hormis le nombre de providers, les différences entre les types de comptes viennent surtout du support apporté à coté ( profiling, stats, customisation de la widget&#8230; ). plus d&#8217;information dans le <a href="https://rpxnow.com/get">comparatif sur le site officiel</a>.<a href="https://rpxnow.com/get"><br />
</a></p>
<p style="text-align: left;"><strong>Les points négatifs</strong></p>
<p style="text-align: left;">Même si le service proposé est vraiment intéressant, il faut quand même noter quelques points négatifs :</p>
<p style="text-align: left;">Tout d&#8217;abord, l&#8217;appel à la widget affichant le service d&#8217;identification est relativement lent (au moins pour les comptes gratuits, ca à l&#8217;air moins lent sur uservoice et stackoverflow). En effet l&#8217;affichage de l&#8217;iframe sur la page de login doit mettre une bonne seconde à s&#8217;afficher. C&#8217;est un détail, mais tout de même.</p>
<p style="text-align: left;">Ensuite, cela peut dérouter les utilisateurs ne connaissant pas le principe :l&#8217;utilisateur arrive sur un site, cherche à s&#8217;inscrire, et se retrouve diriger vers sa page google ou facebook. Cela peut dérouter quelques peu, voir même ressembler à du phishing. De plus, même si, quand on prend le temps de se renseigner, on sais que les informations fournis par les providers sont publiques (email, nom, clef openId &#8230; rien de très compromettant), on peut être effrayer au début en autorisant facebook à délivrer ses informations personnels à un site tier&#8230;</p>
<p style="text-align: left;">Enfin, pour finir, même si les risques sont très faibles, le jour ou le service RPX tombe en rade, on se retrouve avec un joli site sur lequel toute identification est impossible&#8230;</p>
<p style="text-align: left;">Un retour un peu plus complet sur les &#8220;dangers&#8221; de RPX est consultable <a href="http://blog.nerdbank.net/2009/01/why-using-rpxnow-is-bad-idea.html">ici</a> , même si la plupart des choses ne sont pas spécifiquement objectives.</p>
<p style="text-align: left;">Sinon, pour ceux que ca intéresse, un autre billet devrait bientôt suivre sur comment brancher RPX sur un Pylons. En attendant, le tutoriel sur lequel je me suis principalement basé est disponible <a href="http://tonylandis.com/python/openid-db-authentication-in-pylons-is-easy-with-rpx/">ici</a>.</p>
<p style="text-align: left;">RPX -  <a href="https://rpxnow.com/">RPXNow.com</a></p>
    ]]></content:encoded>
			<wfw:commentRss>http://wayofspark.com/2009/06/29/gestion-de-lauthentification-de-vos-sites-avec-rpx/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>stackoverflow.com</title>
		<link>http://wayofspark.com/2009/06/21/stackoverflow-com/</link>
		<comments>http://wayofspark.com/2009/06/21/stackoverflow-com/#comments</comments>
		<pubDate>Sun, 21 Jun 2009 16:31:35 +0000</pubDate>
		<dc:creator>Spark</dc:creator>
				<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://wayofspark.com/?p=8</guid>
		<description><![CDATA[Le concept de base de stackoverflow est vieux : Site de dépôt de questions orienté autour du développement  informatique, le principe est simple : une fois inscrit, il est possible de poser des questions, et les autres utilisateurs peuvent vous répondre. Le service est gratuit et le design simple et clair (ce qui manque parfois [...]]]></description>
			<content:encoded><![CDATA[<p>Le concept de base de <a class="thickbox" href="http://stackoverflow.com">stackoverflow</a> est vieux : Site de dépôt de questions orienté autour du développement  informatique, le principe est simple : une fois inscrit, il est possible de poser des questions, et les autres utilisateurs peuvent vous répondre. Le service est gratuit et le design simple et clair (ce qui manque parfois dans ce genre de service), mais jusque la, rien de bien extraordinaire. Ah oui, le nom est cool aussi.</p>
<p style="text-align: center;"><a class="thickbox" href="http://wayofspark.com/wp-content/uploads/2009/06/stackoverflow.jpg"><img class="size-full wp-image-50 aligncenter" title="stackoverflow" src="http://wayofspark.com/wp-content/uploads/2009/06/stackoverflow.jpg" alt="stackoverflow" width="580" height="328" /></a></p>
<p style="text-align: center;">
<p>Il faut quand même noter que le site est très jeune ( moins d&#8217;un an ) et compte déja 3.5 millions de visiteurs uniques par mois. Autant dire que ça va pas trop mal.</p>
<p>Alors, comment expliquer ce succès ? C&#8217;est assez simple : la ou la majorité des autres sites du genre sont souvent faits par des gens en 3 pièces pour tenter d&#8217;amasser des thunes, stackoverflow est fait par des gens qui ont compris ce qui attiraient les geeks. Remarque, quand on voit les photos du <a href="http://stackoverflow.com/about">staff</a> (scroller un peu en bas), on comprend assez vite pourquoi. Ca a l&#8217;air d&#8217;être une bien belle brochette <img src='http://wayofspark.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> <span id="more-8"></span></p>
<p><strong>La réputation</strong></p>
<p>La première chose est  l&#8217;utilisation d&#8217;une &#8220;monnaie&#8221; interne, la réputation, qui fonctionne de la manière suivante:</p>
<p style="text-align: left;">Lorsque vous posez ou que vous répondez à une question, les autres utilisateurs ont la possibilité de voter pour votre contribution, soit positivement, soit négativement. Ces votes augmentent ( ou diminuent ) ainsi votre réputation.</p>
<p style="text-align: left;"><a class="thickbox" href="http://wayofspark.com/wp-content/uploads/2009/06/good_answer.jpg"><img class="size-full wp-image-60 aligncenter" title="good_answer" src="http://wayofspark.com/wp-content/uploads/2009/06/good_answer.jpg" alt="good_answer" width="575" height="345" /></a></p>
<p style="text-align: left;">Cette réputation représente ainsi, pour reprendre les termes du site, &#8220;A quel point la communauté Stack Overflow vous fait confiance&#8221; (&#8220;<span>how much the Stack Overflow community                     trusts you&#8221;).</span></p>
<p style="text-align: left;"><span>Elle permet aussi d&#8217;accéder à certains privilèges. Par exemple, une fois les 200 réputations atteints, le nombre de pubs qui vous est affiché sur le site est diminué (j&#8217;aime bien l&#8217;idée),  et une fois les 2000 atteints, il possible d&#8217;éditer les posts des autres utilisateurs. (La liste complète est disponible <a href="http://stackoverflow.com/faq">ici</a>).</span></p>
<p style="text-align: left;"><span>Il est aussi possible de déposer une partie de sa réputation en &#8220;bounty&#8221; sur une de vos question. Si par exemple une question importante n&#8217;a pas encore eu de réponse, il vous est possible de déposer, disont 200pts de réputation dessus, qui seront ainsi une récompense pour la personne qui vous donnera la réponse attendu. Les questions disposant de bounty sont de plus visibles dans un onglet à part, permettant de rester plus longtemps dans la ou les premières pages.<br />
</span></p>
<p style="text-align: left;"><strong>Les badges</strong></p>
<p style="text-align: left;"><span>L&#8217;autre concept est le système des badges. En effet certaines actions vous attribuent des badges, qui sont de 3 types : bronze, argent et or.<br />
</span></p>
<p style="text-align: left;"><span><a href="http://wayofspark.com/wp-content/uploads/2009/06/badge.jpeg"><img class="size-full wp-image-81 aligncenter" title="badge" src="http://wayofspark.com/wp-content/uploads/2009/06/badge.jpeg" alt="badge" width="352" height="109" /></a></span></p>
<p style="text-align: left;"><span>Par exemple, lors du premier vote positif sur l&#8217;une de vos réponses, vous vous voyez attribué le badge de bronze  &#8220;Teacher&#8221; (oui, ils ont même pousser le vice en nommant chacun des badges)</span></p>
<p style="text-align: left;"><span>Cette idée démoniaque, tout droit tirée des MMORPG  (concept d&#8217;achievement de WAR ou de WOW) est l&#8217;assurance que tout bon geek va passer plus de temps sur le site à essayer de monter sa réputation et débloquer des badges qu&#8217;à réellement bosser en semaine. Balaise. Vraiment balaise.</span></p>
<p style="text-align: left;"><span>Dernier point interessant, il faut savoir que la base de donnée de stackoverflow est disponible en download libre, <a href="http://blog.stackoverflow.com/wp-content/uploads/so-export-2009-06.7z.torrent">via torrent</a>. Le post avec les mises à jour mensuelles est <a href="http://blog.stackoverflow.com/2009/06/stack-overflow-creative-commons-data-dump/">ici</a>.<br />
</span></p>
<p style="text-align: left;"><span><strong>Serverfault.com</strong><br />
</span></p>
<p style="text-align: left;">Stackoverflow dispose également d&#8217;un autre site, <a href="http://serverfault.com">serverfault.com</a>, qui lui est orienté vers les administrateurs système, et qui fonctionne sur le même principe.</p>
<p style="text-align: center;"><a class="thickbox" href="http://wayofspark.com/wp-content/uploads/2009/06/serverfault.jpg"><img class="size-full wp-image-43 aligncenter" title="serverfault" src="http://wayofspark.com/wp-content/uploads/2009/06/serverfault.jpg" alt="serverfault" width="592" height="349" /></a></p>
<p style="text-align: left;"><strong>Superuser.com</strong></p>
<p style="text-align: left;">Et pour finir, un troisième site est prévu pour bientôt pour clôturer <a href="hhttp://blog.stackoverflow.com/2009/05/the-stack-overflow-trilogy/">la trilogy stack overflow</a> : <a href="http://superuser.com/">Superuser.com</a> , qui lui ciblera, litéralement : <em>&#8220;computer enthusiasts and power users&#8221;</em></p>
<p style="text-align: center;"><em><img class="size-full wp-image-44 aligncenter" title="superuser" src="http://wayofspark.com/wp-content/uploads/2009/06/superuser.jpg" alt="superuser" width="272" height="139" /><br />
</em></p>
    ]]></content:encoded>
			<wfw:commentRss>http://wayofspark.com/2009/06/21/stackoverflow-com/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Upgrade wordpress 2.8</title>
		<link>http://wayofspark.com/2009/06/18/upgrade-wordpress-2-8/</link>
		<comments>http://wayofspark.com/2009/06/18/upgrade-wordpress-2-8/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 19:03:52 +0000</pubDate>
		<dc:creator>Spark</dc:creator>
				<category><![CDATA[SysAdmin]]></category>

		<guid isPermaLink="false">http://wayofspark.com/?p=11</guid>
		<description><![CDATA[Allez, pour la résurrection, mise à jour de wordpress de 2.5 ( ou 2.4 je sais même plus ) à 2.8 Feedback d&#8217;un mec qui n&#8217;a jamais codé une ligne de PHP : - Trouver la doc sur leur site et la lire : 5 minutes - Retrouver son login et son mdp unix : [...]]]></description>
			<content:encoded><![CDATA[<p>Allez, pour la résurrection, mise à jour de wordpress de 2.5 ( ou 2.4 je sais même plus ) à 2.8</p>
<p>Feedback d&#8217;un mec qui n&#8217;a jamais codé une ligne de PHP :</p>
<p>- Trouver la doc sur leur site et la lire : 5 minutes</p>
<p>- Retrouver son login et son mdp unix : 7 minutes</p>
<p>- Trouver les identifiants sql dans la config : 30 secondes</p>
<p>- Installer MySql Administrator en local : 3 minutes</p>
<p>- Faire le back de la base : 25 secondes</p>
<p>- Faire le backup des fichiers : 2 minutes</p>
<p>- Mettre à jour les fichiers WP : 8 minutes</p>
<p>- Migrer la base : 3 secondes</p>
<p>Conclusion : y a des framework qui devraient en prendre de la graine&#8230;</p>
    ]]></content:encoded>
			<wfw:commentRss>http://wayofspark.com/2009/06/18/upgrade-wordpress-2-8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Positeo.com</title>
		<link>http://wayofspark.com/2009/06/18/positeocom/</link>
		<comments>http://wayofspark.com/2009/06/18/positeocom/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 17:47:30 +0000</pubDate>
		<dc:creator>Spark</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[référencement]]></category>

		<guid isPermaLink="false">http://wayofspark.com/?p=10</guid>
		<description><![CDATA[Je sais plus trop comment je suis tombé sur le site, mais j&#8217;ai trouvé l&#8217;idée cool. Positeo propose un service de vérification de son référencement google. On choisi son mot clef, le site cible, et positeo nous indique la position du site sur une recherche du mot clef choisi. Par exemple avec le mot clef [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">
<p style="text-align: left;">Je sais plus trop comment je suis tombé sur le site, mais j&#8217;ai trouvé l&#8217;idée cool.</p>
<p style="text-align: left;"><a href="http://www.positeo.com/check-position/">Positeo</a> propose un service de vérification de son référencement google.</p>
<p style="text-align: left;">On choisi son mot clef, le site cible, et positeo nous indique la position du site sur une recherche du mot clef choisi.</p>
<p style="text-align: left;">Par exemple avec le mot clef &#8216;chaussures&#8217; positeo nous indique que le site sarenza.com  est en première position (quelle surprise !) et eram.fr en 8ème.</p>
<p style="text-align: left;">Autant pour des sites se trouvant en première page de google, on ne gagne pas spécialement de temps par rapport à une recherche à la main, autant si le site recherché se trouve plus loin, cela evite de se tapper le défilement des pages jusqu&#8217;à trouver le résultat voulu.</p>
<p style="text-align: left;">Autre détail pratique, les mots clefs et sites déjà utilisés sont mémorisés, ce qui permet d&#8217;eviter de les retapper à chaque fois.</p>
<p style="text-align: left;">A noter également que le service va vérifier les résultats sur plusieurs datacenter google ( 15 aléatoires par requête ), même si je suis pas sur de l&#8217;interet de la chose.</p>
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;"><a class="thickbox" href="http://wayofspark.com/wp-content/uploads/2009/06/positeo.jpg"><img class="alignnone size-medium wp-image-9 aligncenter" title="positeo" src="http://wayofspark.com/wp-content/uploads/2009/06/positeo.jpg" alt="" width="555" height="343" /></a></p>
    ]]></content:encoded>
			<wfw:commentRss>http://wayofspark.com/2009/06/18/positeocom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript et les arguments optionnels</title>
		<link>http://wayofspark.com/2008/07/23/javascript-et-les-arguments-optionnels/</link>
		<comments>http://wayofspark.com/2008/07/23/javascript-et-les-arguments-optionnels/#comments</comments>
		<pubDate>Wed, 23 Jul 2008 15:57:23 +0000</pubDate>
		<dc:creator>Spark</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://wayofspark.com/?p=5</guid>
		<description><![CDATA[Javascript est un langage de script relativement puissant, mais dont certaines fonctionnalités sont souvent peu ou pas connu de la majorité. La gestion des arguments optionnels lors de l&#8217;appel à des fonction en fait parti. Dans ce tutorial, j&#8217;expliquerai comment créer une méthode gérant un argument optionnel, puis une autre pouvant recevoir un nombre variable [...]]]></description>
			<content:encoded><![CDATA[<p>Javascript est un langage de script relativement puissant, mais dont certaines fonctionnalités sont souvent peu ou pas connu de la majorité. La gestion des arguments optionnels lors de l&#8217;appel à des fonction en fait parti.</p>
<p>Dans ce tutorial, j&#8217;expliquerai comment créer une méthode gérant un argument optionnel, puis une autre pouvant recevoir un nombre variable d&#8217;argument.<span id="more-5"></span></p>
<h3>Arguments optionnels</h3>
<p>Mettont que nous ayons besoin de trier une liste. Pour ce faire, nous créons une méthode qui s&#8217;occupe de trier la liste, puis de la retourner ( dans l&#8217;exemple, la fonction fait juste appel à la méthode sort de la liste, mais on imagine la déclaration d&#8217;une vrai méthode de tri puis de son exécution )</p>
<p>On obtientrait donc quelque chose de ce type :</p>
<pre class="prettyprint">mySort = function(l){
    l.sort();
    return l;
};
>>> mySort([4,2,3]);
[2,3,4]</pre>
<p>Cependant, plus tard lors de notre développement, apparait un autre besoin : il faudrait pouvoir trier la liste, mais en sens inverse cette fois-ci.</p>
<p>Plusieurs solutions apparaissent alors :</p>
<p>La premiere serait de séparer les deux étapes, en effectuant d&#8217;abord l&#8217;appel à mySort(), puis ensuite à myReverse() par exemple ( qui, ferait d&#8217;ailleurs simplement return l.reverse() dans cet exemple très basique ). Mais cela allourdirait le code.</p>
<p>La seconde est de rajouter un second paramètre à mySort, pour spécifier l&#8217;ordre dans lequel on veut trier la liste.<br />
On obtiendrait alors quelque chose de ce genre :</p>
<pre class="prettyprint">mySort = function(l, order){
    l.sort();
    if(order=="reverse") l.reverse();
    return l;
};
>>> mySort([2,4,3], "normal")
[2,3,4]
>>> mySort([2,4,3], "reverse")
[4,3,2]</pre>
<p>On observe effectivemment qu&#8217;en fonction du second paramètre ( &#8220;normal&#8221; ou &#8220;reverse&#8221; ), le sens du tri est, ou non, inversé.</p>
<p>Seulement voila, cela oblige à passer un second parametre à chaque appel de sa méthode. Paramètre au final inutile si on veut trier la liste &#8216;simplement&#8217;, sans l&#8217;inverser.</p>
<p>Et bien en fait (oh surprise!) non.</p>
<p>En effet, une astuce trop peu connue des débutants est l&#8217;utilisation de paramètres optionnels. Un paramètre contenu dans la déclaration d&#8217;une méthode et non envoyé lors de l&#8217;appel de cette dernière ne pose,en fait, pas de problème. La variable est simplement considérée comme étant à la valeur null.</p>
<p>exemple :</p>
<pre class="prettyprint">f = function(a){
    return a
}
>>> f(2)
2
>>> f()
null</pre>
<p>On constate qu&#8217;effectivemment, quand le paramètre &#8216;a&#8217; n&#8217;est pas envoyé à la fonction &#8216;f&#8217;, &#8216;a&#8217; est quand meme défini, et a la valeur null, dans le corps de la fonction. En exploitant cela, on peut modifier notre méthode de tri pour obtenir la suivante :</p>
<pre class="prettyprint">mySort = function(l, reverse){
    l.sort();
    if(reverse) l.reverse();
    return l;
};
>>> mySort([2,4,3])
[2,3,4]
>>> mySort([2,4,3], "reverse")
[4,3,2]</pre>
<p>A noter qu&#8217;ici, la variable reverse est utilisé comme un flag : dans l&#8217;exemple on lui donne la valeur &#8220;reverse&#8221;, mais un simple &#8220;true&#8221; aurait suffit ( même si &#8220;reverse&#8221; aide à la lisibilitée du code )</p>
<h3>Utilisation de la variable argument</h3>
<p>Au passage, une autre astuce (un peu plus avancée celle la) concernant les arguments en javascript : dans une fonction, la variable &#8216;arguments&#8217; contient la liste des arguments qui ont été passés.</p>
<p>Très simplement :</p>
<pre class="prettyprint">myTest2 = function(){
    return arguments;
};
>>> myTest2()
null
>>> myTest2(1,2,3)
[1,2,3]</pre>
<p>Et cela marche quelque soient les arguments &#8216;normallement&#8217; définis :</p>
<pre class="prettyprint">myTest2 = function(a,b){
    return arguments;
};
>>> myTest2()
null
>>> myTest2(1,2,3)
[1,2,3]</pre>
<p>Arguments est une liste tout ce qu&#8217;il y a de plus classique : on peut connaitre sa taille avec arguments.length, et on recupère un élement avec arguments[position].</p>
<p>Concretement, cela permet d&#8217;envoyer un nombre variable de paramètres.</p>
<p>Par exemple, on peut envisager une fonction qui additionne un nombre quelconque de variables.</p>
<pre class="prettyprint">Additionner = function(){
    var sum = 0;
    for(var i=0; i < arguments.length; i++){
        sum += arguments[i];
    }
    return sum;
};
>>> Additionner()
0
>>> Additionner(1,2)
3
>>> Additionner(1,2,3)
6
>>> Additionner(1,2,3,6,12,48)
72</pre>
<p>On constate bien qu&#8217;on peut passer un nombre variable de paramètres, et que le résultat de la méthode est la somme de tous.</p>
    ]]></content:encoded>
			<wfw:commentRss>http://wayofspark.com/2008/07/23/javascript-et-les-arguments-optionnels/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
