<?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>.: chiroux.com :. &#187; yahoo</title>
	<atom:link href="http://www.chiroux.com/tag/yahoo/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.chiroux.com</link>
	<description></description>
	<lastBuildDate>Thu, 12 Aug 2010 13:51:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>Reproduire les jolis câbles de yahoo pipes</title>
		<link>http://www.chiroux.com/reproduire-les-jolis-cables-de-yahoo-pipes/</link>
		<comments>http://www.chiroux.com/reproduire-les-jolis-cables-de-yahoo-pipes/#comments</comments>
		<pubDate>Mon, 25 Jun 2007 13:38:22 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://www.chiroux.com/article-1182778702.html</guid>
		<description><![CDATA[<p>Depuis que j&#8217;ai découvert Yahoo Pipes, je me demandais comment ils avaient pu faire une interface aussi chouette en html. Ce qui me posait le plus de pb c&#8217;était bien sur les jolis câbles de liaisons entre les boites, d&#8217;autant que je n&#8217;avait aucune idée de comment on pouvait faire sa en html. J&#8217;ai donc décidé [...]]]></description>
			<content:encoded><![CDATA[<p>Depuis que j&#8217;ai découvert Yahoo Pipes, je me demandais comment ils avaient pu faire une interface aussi chouette en html. Ce qui me posait le plus de pb c&#8217;était bien sur les jolis câbles de liaisons entre les boites, d&#8217;autant que je n&#8217;avait aucune idée de comment on pouvait faire sa en html. J&#8217;ai donc décidé de m&#8217;y mettre, de comprendre et de le refaire.<span id="more-25"></span><br />
Pour commencer, j&#8217;ai pris mon firebug et j&#8217;ai exploré (inspecté !) les objets affichés pour trouver de quoi était fait le fameux lien.<br />
En fait tout est là : ce câble est un <strong>&lt;canvas&gt;</strong></p>
<span id="Mais_qu8217est-ce_donc_qu8217un_canvas_"><h2>Mais qu&#8217;est-ce donc qu&#8217;un canvas ?</h2></span>
<p>Un canvas est un nouveau élément HTML qui permet de manipuler des graphiques en bitmap. Le canvas est intégré au draft du HTML 5 et a été originellement proposé par apple et son safari. Il est supporté nativement par firefox depuis la 1.5 et n&#8217;est pas encore supporté par IE (mais il y a moyen de le faire marcher sous IE, on en parlera plus bas)</p>
<p>Je ne vais pas refaire le tuto de canvas, vous pouvez suivre ce tuto sur le site de mozilla, il est très bien fait.</p>
<span id="Les_8216wires8217_de_yahoo"><h2>Les &#8216;wires&#8217; de yahoo</h2></span>
<p>Mon but ici est de refaire le système de câbles entre deux boites comme dans yahoo pipes.</p>
<p>J&#8217;ai choisit d&#8217;utiliser mootools comme librairie javascript, parce que j&#8217;aime bien mootools. Cela permet de ne pas perdre de temps sur la gestion des box et des drag&amp;drop.</p>
<p>Donc j&#8217;ai simplement commencé par définir un bout d&#8217;html avec un container, deux boites et le fameux canvas :</p>
<pre>
<pre class="brush: xml;">&amp;lt;body  onload = &amp;quot;start();&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;containment&amp;quot;&amp;gt;
  &amp;lt;canvas id=&amp;quot;lien&amp;quot;&amp;gt;&amp;lt;/canvas&amp;gt;
  &amp;lt;div id=&amp;quot;boite1&amp;quot;&amp;gt;
  1
  &amp;lt;/div&amp;gt;
  &amp;lt;div id=&amp;quot;boite2&amp;quot;&amp;gt;
  2
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;</pre>
</pre>
<p>le css qui va avec (rien de compliqué):</p>
<pre>
<pre class="brush: css;">&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;
 #containment {
 height: 500px;
 width: 600px;
 background: #ddd;
 position: relative;
 }
#boite1 {
 height: 60px;
 width: 40px;
 border: 2px solid black;
 background: #39f;
 color: white;
 position: absolute;
 top: 50;
 left: 50;
 }

#boite2 {
 height: 55px;
 width: 40px;
 border: 2px solid black;
 background: blue;
 color: white;
 position: absolute;
 top: 250;
 left: 250;
 }

canvas {
 /*border: 1px solid red;*/
 position: absolute;
 top: 0;
 left: 0;
 }
 &amp;lt;/style&amp;gt;</pre>
</pre>
<p>Ensuite un peu de code mootools pour rendre les boites draggables :</p>
<pre>
<pre class="brush: jscript;">function start() {
 var container = $('containment');
new Drag.Move('boite1', {'container': container});
 new Drag.Move('boite2', {'container': container});

$('boite1').addEvent('mousemove', function() {
 replaceLink();
 });
 $('boite2').addEvent('mousemove', function() {
 replaceLink();
 });
 replaceLink();
 }</pre>
</pre>
<p>Donc tout sera fait dans la fonction &#8216;replaceLink&#8217;<br />
Cette fonction est en fait relativement simple :<br />
Elle fait (dans l&#8217;ordre) :<br />
- calculer les coordonnée du point de départ et du point d&#8217;arrivée du trait : dans cet exemple le point de départ est collé au bas de la boite 1 et le point d&#8217;arrivée en haut de la boite 2.</p>
<pre>
<pre class="brush: jscript;">
pointA_x = $('boite1').getStyle('left').toInt()+($('boite1').getStyle('width').toInt())/2;
pointA_y = $('boite1').getStyle('top').toInt()+($('boite1').getStyle('height').toInt());
pointB_x = $('boite2').getStyle('left').toInt()+($('boite2').getStyle('width').toInt())/2;
pointB_y = $('boite2').getStyle('top').toInt(); //+($('boite2').getStyle('height').toInt())/2;
</pre>
</pre>
<p>- Traiter correctement le point de départ et d&#8217;arrivée en fonction de la position relative des boites l&#8217;une par rapport à l&#8217;autre (notamment quand la boite 2 se retrouve au dessus de la 1, etc..)</p>
<pre>
<pre class="brush: jscript;"> pointA_x = $('boite1').getStyle('left').toInt()+($('boite1').getStyle('width').toInt())/2;
 pointA_y = $('boite1').getStyle('top').toInt()+($('boite1').getStyle('height').toInt());
 pointB_x = $('boite2').getStyle('left').toInt()+($('boite2').getStyle('width').toInt())/2;
 pointB_y = $('boite2').getStyle('top').toInt(); //+($('boite2').getStyle('height').toInt())/2;</pre>
</pre>
<p>- Préparer le contexte</p>
<pre>
<pre class="brush: jscript;"> lien_width = Math.abs(pointB_x - pointA_x);
 lien_x = Math.min(pointA_x, pointB_x);
 lien_height = Math.abs(pointB_y - pointA_y);
 lien_y = Math.min(pointA_y,pointB_y);</pre>
</pre>
<p>- Effacer l&#8217;image précédente</p>
<pre>
<pre class="brush: jscript;">ctx.clearRect(0,0,600,500);</pre>
</pre>
<p>- Dessiner un trait qui part bien du point de départ et qui arrive bien au point d&#8217;arrivée : ceci est fait en utilisant les fonctions &#8216;basiques&#8217; du canvas : MoveTo et soit LineTo soit bezierCurveTo si on veut un trait tout arrondi.</p>
<p>Donc en fait c&#8217;est très simple.<br />
Là où on passe un peu de temps c&#8217;est vraiment le rendre joli.</p>
<p>Au début, j&#8217;ai voulu adapter la taille du &lt;canvas&gt; au rectangle dont les coins sont formés par le point de départ du trait et le point d&#8217;arrivée (c&#8217;est ce qui me paraissait le plus logique). Cela fonctionne bien, me permet de travailler avec toujours le même système de coordonnées, mais le pb est que mon trait était alors rescallé automatiquement à la nouvelle taille du canvas (ce qui semble être un comportement standard). [<a href="http://www.chiroux.com/dev/testcanvas/testcanvas_bad.html" target="_blank">cliquez ici pour voir ce que cela donnait en live</a> : éloignez les boites pour le remarquer. (attention, cette version ne marche pas bien sous IE)]<br />
Yahoo semble pourtant utiliser cette technique, mais je n&#8217;ai pas réussit à la faire fonctionner, j&#8217;ai donc changé d&#8217;angle d&#8217;approche : j&#8217;ai arrêté de resizer mon canvas, je l&#8217;ai directement initalisé à la taille du conteneur et ensuite j&#8217;ai joué avec la translation :</p>
<pre>
<pre class="brush: jscript;"> ctx.save();
 ctx.translate(lien_x, lien_y);</pre>
</pre>
<p>Cela me permet d&#8217;avoir toujours le point (0,0) en haut à gauche du rectangle formé par le point de départ et le point d&#8217;arrivée.</p>
<p>Voici deux cas de figure en schéma :<br />
<img class="size-full wp-image-90 alignnone" title="canvas_expl1" src="http://www.chiroux.com/wp-content/uploads/Import/Dev/canvas_expl1.png" alt="canvas_expl1" width="570" height="434" /></p>
<p><img class="alignnone size-full wp-image-91" title="canvas_expl2" src="http://www.chiroux.com/wp-content/uploads/Import/Dev/canvas_expl2.png" alt="canvas_expl2" width="417" height="338" /><br />
- Ensuite il ne reste plus qu&#8217;à dessiner :<br />
la suite de la fonction est simplement là pour gérer les 4 cas de figure de la position relative de la boîte 1 par rapport à la boite 2. Cela ne sert finalement qu&#8217;à donner des bons paramètres à la courbe de bézier pour que cela soit joli.<br />
Il y a un autre élément où j&#8217;ai eu un peu de mal c&#8217;est pour faire en sorte que le trait ait un bord (plus foncé que l&#8217;intérieur dans l&#8217;exemple). J&#8217;ai essayé de jouer avec les propriétés border, mais c&#8217;est en fait beaucoup plus simple :<br />
il faut faire un trait foncé plus gros, puis un trait plus clair et plus fin qui va se superposer, tout simplement.<br />
Cette partie du code est optimisable (on peut la rendre plus compacte), mais je l&#8217;ai volontairement laissé tel quel pour gagner en lisibilité.</p>
<pre>
<pre class="brush: jscript;">ctx.beginPath(); m_a = 100; // offset pour les beziers
 if (pointA_x &amp;amp;lt; pointB_x) {
 if (pointA_y &amp;amp;lt; pointB_y) {
 // coin en haut à gauche
 ctx.lineWidth = 12;
 ctx.strokeStyle = '#07c';
 ctx.moveTo(0, 0);
 ctx.bezierCurveTo(0,m_a, lien_width, lien_height-m_a, lien_width, lien_height);
 ctx.stroke();
 ctx.lineWidth = 8;
 ctx.strokeStyle = '#09f';
 ctx.moveTo(0, 0);
 ctx.bezierCurveTo(0,m_a, lien_width, lien_height-m_a, lien_width, lien_height);
 ctx.stroke();
 } else {
 // coin en bas à gauche
 ctx.lineWidth = 12;
 ctx.strokeStyle = '#07c';
 ctx.moveTo(lien_width, 0);
 ctx.bezierCurveTo(lien_width, -m_a, 0, lien_height+m_a, 0, lien_height);
 ctx.stroke();
 ctx.lineWidth = 8;
 ctx.strokeStyle = '#09f';
 ctx.moveTo(lien_width, 0);
 ctx.bezierCurveTo(lien_width, -m_a, 0, lien_height+m_a, 0, lien_height);
 ctx.stroke();
 }
 } else {
 if (pointA_y &amp;amp;lt; pointB_y) {
 // coin en haut à droite
 ctx.lineWidth = 12;
 ctx.strokeStyle = '#07c';
 ctx.moveTo(lien_width, 0);
 ctx.bezierCurveTo(lien_width, m_a, 0, lien_height-m_a, 0, lien_height);
 ctx.stroke();
 ctx.lineWidth = 8;
 ctx.strokeStyle = '#09f';
 ctx.moveTo(lien_width, 0);
 ctx.bezierCurveTo(lien_width, m_a, 0, lien_height-m_a, 0, lien_height);
 ctx.stroke();
 } else {
 // coin en bas à droite
 ctx.lineWidth = 12;
 ctx.strokeStyle = '#07c';
 ctx.moveTo(0, 0);
 ctx.bezierCurveTo(0,-m_a, lien_width, lien_height+m_a, lien_width, lien_height);
 ctx.stroke();
 ctx.lineWidth = 8;
 ctx.strokeStyle = '#09f';
 ctx.moveTo(0, 0);
 ctx.bezierCurveTo(0,-m_a, lien_width, lien_height+m_a, lien_width, lien_height);
 ctx.stroke();
 }
 }
 ctx.restore();</pre>
</pre>
<span id="Fonctionnement_avec_IE"><h2>Fonctionnement avec IE</h2></span>
<p>IE ne supporte pas nativement les canvas (même pas IE7). Pour contourner ce pb, <a href="http://excanvas.sourceforge.net/" target="_blank">des gars de chez google ont eu l&#8217;excellente idée et le talent d&#8217;utiliser le support natif de VML dans IE pour émuler les canvas</a>. Il suffit d&#8217;inclure cette librairie pour faire fonctionner canvas sous IE, pourquoi s&#8217;en priver&#8230;</p>
<span id="Amliorations_et_Optimisations"><h2>Améliorations et Optimisations</h2></span>
<p>Je ne suis pas complètement satisfait des perfomances de cette démo, notamment quand on bouge la souris très vite. Yahoo n&#8217;a pas ce pb.<br />
A première vue, je supposerait que c&#8217;est du au clearRect que je fait pour effacer les dessins précédent, mais je n&#8217;ai pas trouvé d&#8217;autre solution pour l&#8217;instant. Si vous avez des idées, n&#8217;hésitez pas à les proposer en commentant cet article.</p>
<span id="Dmo_et_tlchargement"><h2>Démo et téléchargement</h2></span>
<ul>
<li><a href="http://www.chiroux.com/dev/testcanvas/testcanvas_2.html" target="_blank">Cliquez ici pour accéder à une démo live de ce code</a></li>
</ul>
<p>Ci-dessous pour télécharger le sources (incluant mootools 1.11 et Exanvas 0002) :</p>
Note: There is a file embedded within this post, please visit this post to download the file.
]]></content:encoded>
			<wfw:commentRss>http://www.chiroux.com/reproduire-les-jolis-cables-de-yahoo-pipes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Gagner en efficacité avec Yahoo Pipes</title>
		<link>http://www.chiroux.com/gagner-en-efficacit-avec-yahoo-pipes/</link>
		<comments>http://www.chiroux.com/gagner-en-efficacit-avec-yahoo-pipes/#comments</comments>
		<pubDate>Fri, 15 Jun 2007 17:16:06 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[pipes]]></category>
		<category><![CDATA[productivité]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://www.chiroux.com/article-1181927766.html</guid>
		<description><![CDATA[<p>Yahoo Pipes est une plate-forme qui permet de manipuler les flux RSS. Au départ j&#8217;ai regardé un peu pour m&#8217;amuser et comprendre, mais j&#8217;ai tout de suite décidé d&#8217;utiliser Pipes pour gagner en efficacité dans mon Netvibes. Voici ce que j&#8217;ai fait à ce stade.</p>
<p></p>
<p>Petite présentation rapide de ma façon d&#8217;utiliser Netvibes :</p>
<p>J&#8217;ai 8 onglets :</p>

dans [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-85" title="Yahoo_Pipes_logo" src="http://www.chiroux.com/wp-content/uploads/Import/Blog/Yahoo_Pipes_logo.gif" alt="Yahoo_Pipes_logo" width="119" height="45" />Yahoo Pipes est une plate-forme qui permet de manipuler les flux RSS. Au départ j&#8217;ai regardé un peu pour m&#8217;amuser et comprendre, mais j&#8217;ai tout de suite décidé d&#8217;utiliser Pipes pour gagner en efficacité dans mon Netvibes. Voici ce que j&#8217;ai fait à ce stade.</p>
<p><span id="more-26"></span></p>
<p>Petite présentation rapide de ma façon d&#8217;utiliser Netvibes :</p>
<p>J&#8217;ai 8 onglets :</p>
<ul>
<li>dans le premier (général), je met ce qui est le plus important ou ce que je regarde le plus souvent :
<ul>
<li>les infos PC de Clubic, PCInpact, PresencePC, InquirerFR</li>
<li>le RSS de agoraVOX</li>
<li>des plugins ou RSS pour mes mail, twitter, digg, Fuzz, la météo</li>
</ul>
</li>
<li>Ensuite, j&#8217;ai des onglets plus thématiques
<ul>
<li>un onglet Perso ou ja&#8217;i par exemple les RSS de chiroux.com, des blocs notes, etc..</li>
<li>un onglet pour les gadget</li>
<li>un onglet pour les articles PC</li>
<li>un onglet pour les solutions et applications mobiles</li>
<li>un onglet sciences</li>
<li>un onglet jeux videos</li>
<li>un onglet web 2.0</li>
</ul>
</li>
</ul>
<p>Dans ces onglet thématique et dans ce premier onglet, j&#8217;ai donc des boites RSS de netvibes pour chaque site suivi.</p>
<p>Ce que j&#8217;ai choisit de faire avec Yahoo Pipes dans cette première expérimentation est de regrouper les différents sites par thèmes pour regénérer un seul flux thématique.</p>
<p>Je me retrouve donc maintenant avec 4 flux / boite netvibes pour NewsPC, ArticlesPC, Gadgets, Web 2.0 qui sont triés par date.</p>
<p>Cela ma permis de jeter 20 flux unitaires et de gagner une place folle dans mes pages.</p>
<p>La lecture est aussi beaucoup plus logique.</p>
<p>Voici un exemple de paramétrage de Yahoo Pipes pour agréger des flux :</p>
<p><a href="http://www.chiroux.com/wp-content/uploads/Import/Blog/Pipes_ArticlesPC_big.JPG"><img class="size-thumbnail wp-image-81 alignnone" title="Pipes_ArticlesPC_big" src="http://www.chiroux.com/wp-content/uploads/Import/Blog/Pipes_ArticlesPC_big-150x150.jpg" alt="Pipes_ArticlesPC_big" width="150" height="150" /></a></p>
<p>Pipes est beaucoup plus puissant que cette simple utilisation d&#8217;agrégation, que l&#8217;on pouvait dailleurs déjà faire avec des outils commes <a href="http://www.xfruits.com/" target="_blank">XFruits </a>par exemple.</p>
<p>Pour aller un peu plus loin et toujours améliorer mon efficacité dutilisation de Netvibes, j&#8217;ai fait un autre pipe pour filtrer le rss de life hacker, qui a parfois des choses intéressantes, mais souvents des infos qui ne m&#8217;intéressent pas du tout. J&#8217;ai donc utilisé un autre module, de filtrage cette fois ci :</p>
<p><a href="http://www.chiroux.com/wp-content/uploads/Import/Blog/Pipes_FiltrageLifeHacker_big.JPG"><img class="alignnone size-thumbnail wp-image-83" title="Pipes_FiltrageLifeHacker_big" src="http://www.chiroux.com/wp-content/uploads/Import/Blog/Pipes_FiltrageLifeHacker_big-150x150.jpg" alt="Pipes_FiltrageLifeHacker_big" width="150" height="150" /></a></p>
<p>Voici les liens des différents Pipes que j&#8217;utilise maintenant sur netvibes :<br />
(pour les ajouter dans netvibes, cliquez sur Subscribe RSS)</p>
<ul>
<li><a href="http://pipes.yahoo.com/pipes/pipe.info?_id=xsPjRF4b3BGv9yfHdbq02Q" target="_blank">My Web 2.0</a></li>
<li><a href="http://pipes.yahoo.com/pipes/pipe.info?_id=iCHlGl0b3BGLb5BDouNLYQ">News PC</a></li>
<li><a href="http://pipes.yahoo.com/pipes/pipe.info?_id=gJqaHlYb3BGxWf9zzKky6g">Articles PC</a></li>
<li><a href="http://pipes.yahoo.com/pipes/pipe.info?_id=ZFyncjsb3BG9NglinkartA">Gadgets</a></li>
<li><a href="http://pipes.yahoo.com/pipes/pipe.info?_id=fOoiw1ob3BGbRQF_YEsBXw">My Life Hacker</a></li>
</ul>
<p>Si vous voulez modifier ces flux, il suffit de les cloner et c&#8217;est parti.</p>
<p>Pipes permet de faire beaucoup d&#8217;autres choses, certaines sont très bien présentées sur <a href="http://pipes.yahoo.com/pipes/docs?doc=tutorials">les sites de cette page</a>.</p>
<p>Ce que ni Yahoo Pipes ni rien d&#8217;autre à ma connaissance ne sait faire, c&#8217;est supprimer les &#8216;doublons d&#8217;articles&#8217;. Voici un bon exemple dans l&#8217;image ci-dessous de triplon d&#8217;articles : a peu d&#8217;intervalle, trois sites de gadgets parlent exactement du même produit, chacun avec ses propres mots. J&#8217;ai bien essayé de trifouillé avec l&#8217;objet &#8216;content analysis&#8217; de Yahoo, mais cela ne donne rien de bon, peut-être est-il encore limité à l&#8217;anglais.<br />
En tout cas, ce que je recherche maintenant c&#8217;est un outils assez intelligent pour être capable de détecter ce genre de doublons et de me les filtrer.</p>
<p><img class="alignnone size-full wp-image-80" title="Gadgets_doublons" src="http://www.chiroux.com/wp-content/uploads/Import/Blog/Gadgets_doublons.JPG" alt="Gadgets_doublons" width="428" height="414" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.chiroux.com/gagner-en-efficacit-avec-yahoo-pipes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
