<?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; Internet</title>
	<atom:link href="http://www.chiroux.com/category/internet/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.chiroux.com</link>
	<description></description>
	<lastBuildDate>Fri, 09 Oct 2009 21:47:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Un gadget Vista pour la NeufBox 4</title>
		<link>http://www.chiroux.com/un-gadget-vista-pour-la-neufbox-4/</link>
		<comments>http://www.chiroux.com/un-gadget-vista-pour-la-neufbox-4/#comments</comments>
		<pubDate>Tue, 07 Aug 2007 15:17:54 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[neufbox]]></category>
		<category><![CDATA[vista]]></category>
		<category><![CDATA[widget]]></category>

		<guid isPermaLink="false">http://www.chiroux.com/article-1186499874.html</guid>
		<description><![CDATA[<p>C&#8217;est l&#8217;été, mais il fait moche, alors que faire a part un peu de code par ci par là&#8230;
Voici donc un petit gadget windows vista qui permet d&#8217;interroger la NB4 de neuf et d&#8217;afficher les états dans notre barre vista.
L&#8217;article explique comment ce gadget est codé et comment on interroge la NB4.
Bon ce n&#8217;est donc [...]]]></description>
			<content:encoded><![CDATA[<p>C&#8217;est l&#8217;été, mais il fait moche, alors que faire a part un peu de code par ci par là&#8230;<br />
Voici donc un petit gadget windows vista qui permet d&#8217;interroger la NB4 de neuf et d&#8217;afficher les états dans notre barre vista.<br />
L&#8217;article explique comment ce gadget est codé et comment on interroge la NB4.<br />
Bon ce n&#8217;est donc pas encore aujourd&#8217;hui que je pourrais écrire mon premier article sur une application django, mais j&#8217;y travaille&#8230;<br />
Peut être avant mes vacances, peut-être pas, nous verrons bien.</p>
<p>Neuf, avec la NB4, propose un routeur évolué et ouvert. Une petite API permet notamment d&#8217;interroger la NB4 et de récupérer les valeurs de différents paramètres en temps réél. Il n&#8217;y avait qu&#8217;un petit pas à franchir pour l&#8217;utiliser et afficher ces paramètres directement dans notre PC.</p>
<p><span id="more-24"></span></p>
<span id="Un_gadget_Vista"><h1>Un gadget Vista</h1></span>
<p>Etant sous vista sur mon PC &#8216;principal&#8217; (celui sur lequel je joue..), c&#8217;est tout naturellement que je me suis orienté sur cette plate-forme pour faire ce gadget. (Je vous rassure, tous mes autres PC sont sous linux <img src='http://www.chiroux.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Il doit être possible avec un minimum d&#8217;adaptation de le faire fonctionner sous mac ou sous d&#8217;autres outils style konfabulator (Yahoo widgets). Nous verrons cela peut-être dans une prochaine version.</p>
<p><a href="#Telechargement">[Je suis curieux mais paresseux et je voudrais tester tout de suite : envoyez moi directement au téléchargement]</a></p>
<span id="Sinon_un_gadget_vista_c8217est_quoi_"><h1>Sinon un gadget vista, c&#8217;est quoi ?</h1></span>
<p>Construire un gadget vista c&#8217;est assez simple : il suffit de placer les bons fichiers dans un répertoire.<br />
Les tutos officiels se trouvent ici :  <a href="http://gallery.live.com/devcenter.aspx#Dev_8" target="_blank">http://gallery.live.com/devcenter.aspx</a></p>
<p>il nous faut donc au minimum :</p>
<ul>
<li> un fichier gadget.xml, dans lequel nous allons décrire notre gadget</li>
<li> un fichier html, dont le nom est décrit dans le xml ci-dessus</li>
<li> un fichier d&#8217;icône (optionnel)</li>
<li>un css si on veut que ce soit joli</li>
</ul>
<span id="Le_Gadget_NB4"><h1>Le Gadget NB4</h1></span>
<span id="Les_fonctionnalits"><h2>Les fonctionnalités</h2></span>
<p>A ce jour, dans la version de dev actuelle, le gadget permet d&#8217;afficher deux type d&#8217;informations :</p>
<ul>
<li> des infos de type booléennes (on/off, oui/non, etc&#8230;) sous la forme (par défaut dans l&#8217;exemple) d&#8217;un petit feu rouge ou vert (mais vous pouvez mettre les graphismes que vous souhaitez)</li>
<li> des infos &#8216;historiques&#8217; (un graphique historique) basé sur des valeurs numériques retournées par la NB4</li>
</ul>
<p>Dans l&#8217;exemple, le gadget va chercher le status du lien DSL, le status du PPP, le status du wifi, ainsi que l&#8217;évolution du rapport signal/bruit de votre ligne :</p>
<p><img class="alignnone size-full wp-image-89" title="NB4_gadget_undocked" src="http://www.chiroux.com/wp-content/uploads/Import/Dev/NB4_gadget_undocked.JPG" alt="NB4_gadget_undocked" width="183" height="114" /></p>
<p>(Oui, il est moche, je sais, mais je suis assez nul en design et graphisme, je laisse ça aux spécialiste&#8230; le but est avant tout de démontrer la faisabilité de ce gadget. Si vous vous sentez l&#8217;âme d&#8217;un artiste, n&#8217;hésitez surtout pas <img src='http://www.chiroux.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<span id="Etat_du_dveloppement"><h2>Etat du développement</h2></span>
<p><strong><span style="color: #ff0000;">Le gadget est encore loin d&#8217;être terminé</span></strong>. Il manque tout particulièrement les écrans d&#8217;options qui permettrait à l&#8217;utilisateur lambda de choisir parmi une liste de paramètre ceux qu&#8217;il souhaite monitorer.<br />
Il faut pour cela construire les écrans de settins du gadget (ce qui n&#8217;est pas très compliqué en soit), mais également rendre plus générique un certain nombre d&#8217;éléments (comme les images on/off par exemple).<br />
J&#8217;ai souhaité quand même publier cet article avec ce qui avait déjà était fait, cela permettra aux plus bidouilleurs d&#8217;entre vous de continuer ou de partir sur d&#8217;autres orientations. Les grands principes sont là en tout cas.</p>
<span id="Comment_c8217est_fait_"><h2>Comment c&#8217;est fait ?</h2></span>
<p>Comme d&#8217;habitude, j&#8217;utilise  <a href="http://mootools.net/" target="_blank">mootools </a> comme librairie javascript, elle va notamment nous servir à réaliser les appels asynchrone vers la NB4 et récupérer les résultat à afficher.</p>
<p>Regardons maintenant un peu le contenu des fichiers :</p>
<span id="gadget.xml"><h3>gadget.xml</h3></span>
<p>Pas grand chose à dire sur ce fichier, on doit y updader le numéro de version, pointer sur le bon fichier d&#8217;icône et le bon fichier html. Les tutos microsofts sont assez clairs sur les contenus possible de ce fichier.</p>
<pre>
<pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
&lt;gadget&gt;
    &lt;name&gt;Neuf Box 4 DEV&lt;/name&gt;
    &lt;namespace&gt;neuf.fr&lt;/namespace&gt;
    &lt;version&gt;0.9.2&lt;/version&gt;
    &lt;author name=&quot;Thomas Chiroux&quot;&gt;
        &lt;info url=&quot;www.chiroux.com&quot; /&gt;
    &lt;/author&gt;
    &lt;copyright&gt;2007&lt;/copyright&gt;
    &lt;description&gt;Etat de la NeufBox&lt;/description&gt;
    &lt;icons&gt;
     &lt;icon height=&quot;128&quot; width=&quot;69&quot; src=&quot;icon_dev.png&quot; /&gt;
   &lt;/icons&gt;
    &lt;hosts&gt;
        &lt;host name=&quot;sidebar&quot;&gt;
            &lt;base type=&quot;HTML&quot; apiVersion=&quot;1.0.0&quot; src=&quot;NB4.html&quot; /&gt;
            &lt;permissions&gt;full&lt;/permissions&gt;
            &lt;platform minPlatformVersion=&quot;0.1&quot; /&gt;
        &lt;/host&gt;
    &lt;/hosts&gt;
&lt;/gadget&gt;
</pre>
</pre>
<span id="NB4.html"><h3>NB4.html</h3></span>
<p>C&#8217;est le fichier html qui est appelé par le moteur de gadget de vista et qui est rendu à l&#8217;écran. Il est lui aussi assez simple, car tout se fera dans le javascript.<br />
Dans le fichier html, il faut placer les div des éléments qu&#8217;on souhaite afficher, dans l&#8217;ordre qu&#8217;on souhaite :</p>
<pre>
<pre class="brush: xml;">
		&lt;div id=&quot;ADSLStatus&quot; class=&quot;NB4OnOff&quot;&gt; &lt;/div&gt;
        &lt;div id=&quot;PPPStatus&quot; class=&quot;NB4OnOff&quot;&gt; &lt;/div&gt;
        &lt;div id=&quot;WlanStatus&quot; class=&quot;NB4OnOff&quot;&gt; &lt;/div&gt;
        &lt;div id=&quot;HistoGraphSNR&quot;&gt;&lt;div id=&quot;SNRValue&quot;&gt;  &lt;/div&gt;&lt;/div&gt;
</pre>
</pre>
<p>Nous avons donc ici 4 éléments : 3 éléments de type &#8216;NB4OnOff&#8217; et un élément de type &#8216;Histo&#8217;.</p>
<span id="NB4.js"><h3>NB4.js</h3></span>
<p>C&#8217;est le fichier le plus important et c&#8217;est là que tout est fait aujourd&#8217;hui. Il est importé par NB4.html, juste après <a href="http://mootools.net/" target="_blank">mootools</a>.</p>
<p>Il est en gros composé de 2 parties :</p>
<ul>
<li>la définition des 2 classes (NB4OnOffClass et NB4HistoGraphClass) actuellement disponibles. Ces classes sont indépendantes de la structure &#8216;gadget&#8217; et pourraient être réutilisée dans d&#8217;autres contextes</li>
<li>le code javascript qui permet de gérer le gadget, notamment son initialisation</li>
</ul>
<p>Passons d&#8217;abord sur le code &#8217;spécial gadget&#8217; et sur l&#8217;initialisation. Les plus courageux pourront ensuite creuser le code des classes :</p>
<p>NB4.html, au chargement de la page, commence par lancer initGadget() :</p>
<p>initGadget() fait 2 choses :<br />
Initialiser la gestion des évènements lié à la mise en dock (la barre de gadget) et à l&#8217;opération inverse (le dé-dockage ?) :</p>
<pre>
<pre class="brush: jscript;">
function initGadget() {
    // variables globales
    if (!DEBUG_BOUCHON)
      gDockFlag = System.Gadget.docked;
    gAjaxWorking = 0;

    // Initialise les évènements de Dock et UnDock
    if (!DEBUG_BOUCHON) {
      System.Gadget.onUndock = procUndockEvent;
      System.Gadget.onDock = procDockEvent;
    }
</pre>
</pre>
<p>Donc ici, si le gadget revient dans sa barre, la fonction &#8216;procDockEvent&#8217; sera exécutée et si il en sort, c&#8217;est la fonction &#8216;procUndockEvent&#8217; qui le sera. Le principe et le fonctionnement de ces fonctions est assez bien décrit dans les exemples de microsoft. En gros elles s&#8217;occupent de redimentionner la fenêtre d&#8217;affichage pour que tout soit parfaitement affiché).</p>
<p>(ne vous préoccupez pas pour l&#8217;instant du &#8216;DEBUG-BOUCHON&#8217;, on en parlera dans la partie plus détaillée sur le développement)</p>
<p>Ensuite et c&#8217;est le plus important, cette fonction initalise les objets d&#8217;interrogations de la NB4 :</p>
<pre>
<pre class="brush: jscript;">
    objADSLStatus = new NB4OnOffClass('adsl_status', 'ADSLStatus', 'NB4_ADSL_On.png', 'NB4_ADSL_Off.png',5000);
    objPPPStatus = new NB4OnOffClass('ppp_status', 'PPPStatus', 'NB4_PPP_On.png', 'NB4_PPP_Off.png',5000);
    objWlanStatus = new NB4OnOffClass('wlan_active', 'WlanStatus', 'NB4_WIFI_On.png', 'NB4_WIFI_Off.png',5000);
    objSNRValue = new NB4HistoGraphClass('adsl_noise_down', 'SNRValue', 'SNR', 32, 'barre.gif', 10000);
</pre>
</pre>
<p>Pour le &#8217;simple&#8217; utilisateur, c&#8217;est tout, il n&#8217;y a rien d&#8217;autre à faire que de changer ces valeurs. (plus tard, dans une version ultérieure, il y aura des écrans de paramétrages pour éviter d&#8217;avoir à toucher le code).</p>
<p>Prenons la première ligne et détaillons les paramètres :</p>
<ul>
<li>le premier (&#8216;adsl_status&#8217;) est le nom du paramètre de la NB4. Attention il doit être exact, sinon la NB4 ne renvoie rien (plus exactement, elle renvoie &#8216;=&#8217;)</li>
<li>le second (&#8216;ADSLStatus&#8217;) est l&#8217;ID du &lt;div&gt; dans le code html qui va afficher le contenu</li>
<li>les troisième et quatrièmes (&#8216;NB4_ADSL_On.png&#8217;, &#8216;NB4_ADSL_Off.png&#8217;) sont les images à afficher (qui s&#8217;afficheront dans le div ci-dessus) lorsque les valeurs récupérées sont respectivement on ou off (ou up ou down, etc..)</li>
<li>le cinquième et dernier (5000) est la fréquence de rafraichissement (en ms) : ici il est paramétré à 5s, donc cet objet ira interroger la NB4 toute les 5 secondes.</li>
</ul>
<p>Donc si vous voulez interroger un autre paramètre de type &#8216;On/off&#8217; dans la NB4, il faut changer une de ces valeurs par une autre et si vous voulez le faire clean, il faut adapter le nom de l&#8217;objet et celui du div dans le code html en fonction du paramètre choisi.</p>
<span id="Les_deux_classes_de_monitoring"><h3>Les deux classes de monitoring</h3></span>
<p>Ces deux classes sont construites sur des principes communs :</p>
<ol>
<li>initalisation des paramètres</li>
<li>gestion d&#8217;un timer pour les interrogations régulières</li>
<li>appel de la fonction de la neufBox en AJAX (en utilisant les fonctions de mootools)</li>
<li>récupération et traitement du résultat</li>
<li>Mise à jour de l&#8217;affichage du gadget en fonction du résultat obtenu</li>
</ol>
<span id="NB4OnOffClass"><h3>NB4OnOffClass</h3></span>
<p>Cette classe est la plus simple, son objectif est de récupérer une valeur de type &#8216;on&#8217; ou &#8216;up&#8217;  ou encore &#8216;off&#8217; ou &#8216;down&#8217; venant de la NB4 et d&#8217;afficher l&#8217;image correspondante.</p>
<span id="L8217initialisation_:"><h4>L&#8217;initialisation :</h4></span>
<p>D&#8217;abord on va initaliser les variables de la classe avec des valeurs par défaut :</p>
<pre>
<pre class="brush: jscript;">
var NB4OnOffClass = new Class({
  c_parameterName : null,
  c_elementName : null,
  c_onOff : 0, // OFF par défaut
  c_oldOnOff : -1, // la valeur précédent du test onOff (au début -1 pour initialiser)
  c_imageON : null,
  c_imageOFF : null,
  c_time : 0,
  c_intervalTime : 0,
  c_timer : null,
  c_stoptimer : 0,
  c_urlNB4 : null,
</pre>
</pre>
<p>Voici ensuite le constructeur : il est appelé lors de l&#8217;instanciation de la classe :<br />
il va prendre les paramètres que l&#8217;on a choisi :</p>
<pre>
<pre class="brush: jscript;">initialize: function(parameterName, elementName, imageON, imageOFF, delais){  // Contructeur</pre>
</pre>
<p>, les stocker au sein de la classe :</p>
<pre>
<pre class="brush: jscript;">
this.c_parameterName = parameterName;
    this.c_elementName = elementName;
    this.c_imageON = 'images/' + imageON;
    this.c_imageOFF = 'images/' + imageOFF;
    this.c_intervalTime = delais; // durée de rafraichissement
    var date = new Date();
    this.c_time = date.getTime();
    if (DEBUG_BOUCHON)
      this.c_urlNB4 = DEBUG_URL;
     else
      this.c_urlNB4 = 'http://192.168.1.1/kit/get'; // ici on met la valeur en dur car elle sera a terme stockée dans les params du gadget
</pre>
</pre>
<p>et lancer une première mise à jour :</p>
<pre>
<pre class="brush: jscript;">
    // Aller chercher la valeur dans la NB4
    this.Update();
    }
</pre>
</pre>
<span id="update_des_donnes"><h4>update des données</h4></span>
<p>La fonction update fait 3 choses :</p>
<ul>
<li>Affiche la petite icône typique des appels ajax dans le coin du gadget</li>
<li>Remet à zéro le timer</li>
<li>Lance l&#8217;appel AJAX (en méthode POST, avec en paramètre la valeur cherchée et en forçant l&#8217;encodage à vide (en utf-8 la NB4 ne renvoie rien)</li>
</ul>
<p>Dans l&#8217;appel AJAX, nous avons définit la fonction de call back qui sera appelée lors du retour de la valeur (l&#8217;appel est asynchrone) : onComplete: this.callbackAjaxok.bind(this)<br />
C&#8217;est donc la fonction callbackAjaxok de cette classe qui sera lancée au retour de la NB4</p>
<pre>
<pre class="brush: jscript;">
    Update: function() {
      gAjaxWorking += 1;
      $('AjaxIndicator').style.display = 'block';
        var date = new Date();
      this.c_time= date.getTime();
    new Ajax(this.c_urlNB4,{data:'name='+this.c_parameterName, onComplete: this.callbackAjaxok.bind(this), method: 'post', encoding: ''}).request();
  },
</pre>
</pre>
<span id="Retour_des_infos_de_l8217IAD_:_callbackAjaxok"><h4>Retour des infos de l&#8217;IAD : callbackAjaxok</h4></span>
<p>Cette fonction est donc appelé au retour OK, je laisse mootols gérer les cas d&#8217;erreur : dans notre gadget si il y a des erreurs, rien ne sera affiché.</p>
<p>Dans l&#8217;ordre cette fonction fait les choses suivantes :</p>
<ul>
<li>stoppe l&#8217;affichage de la petit icône &#8216;appel ajax en cours&#8217;</li>
<li>récupère la valeur de retour et positionne le status de la classe en fonction de ce retour</li>
<li>si la valeur a changé depuis la dernière fois, réaffiche l&#8217;image dans le gadget en fonction de la nouvelle valeur</li>
<li>vérifie le temps écoulé et prépare le prochain update : soit immédiatement si l&#8217;intervalle de temps est déjà écoulée, soit plus tard (via la fonction delay) si le temps n&#8217;est pas encore écoulé. L&#8217;appel à update refait une boucle et ainsi de suite.</li>
</ul>
<pre>
<pre class="brush: jscript;">
  callbackAjaxok: function(obj) {
    // ici récupère la valeur du paramètre on/off et le stocke dans c_onOff
    gAjaxWorking -= 1;
    if (gAjaxWorking==0) {
         $('AjaxIndicator').style.display = 'none';
      }

    if ($type(obj)=='string') {
      var lvalue = obj.split('=')[1].clean().toLowerCase();
      if (lvalue=='up' || lvalue=='on') {
        this.c_onOff=1;
      } else {
        this.c_onOff=0;
      }
      if (this.c_oldOnOff != this.c_onOff) {
          this.GetHTMLOutput();
      }
      this.c_oldOnOff = this.c_onOff;
    }
    if (!this.c_stoptimer) {
      var date = new Date();
      var currentIntervalTime = date.getTime() - this.c_time;
      if ( currentIntervalTime &lt; this.c_intervalTime) { // on a encore du temps : on attends
        this.c_timer = this.Update.delay(this.c_intervalTime-currentIntervalTime, this); // lance update au bout du délais restant
      } else { // on a dépassé l'heure : on repart directement pour un tour
        this.Update();
      }
    }
  }
</pre>
</pre>
<span id="l8217affichage_:_GetHTMLOutput"><h4>l&#8217;affichage : GetHTMLOutput</h4></span>
<p>Cette fonction prépare simplement le bon tag &lt;img&gt; en fonction de la valeur on ou off et l&#8217;affiche dans le div concerné :</p>
<pre>
<pre class="brush: jscript;">
  GetHTMLOutput: function() {
    // Affiche l'image dans le div de destination
    var lHTMLoutput = '&lt;img src=&quot;'; // &lt;p style=&quot;writing-mode: tb-rl; filter: flipH() flipV();&quot;&gt;TEST&lt;/p&gt;
    if (this.c_onOff==0) {
      lHTMLoutput += this.c_imageOFF;
    } else {
      lHTMLoutput += this.c_imageON;
    }
    lHTMLoutput += '&quot;/&gt;';

    $(this.c_elementName).innerHTML=lHTMLoutput;
  }
</pre>
</pre>
<span id="NB4HistoGraphClass"><h4>NB4HistoGraphClass</h4></span>
<p>Cette classe a pour but d&#8217;afficher une évolution dans le temps d&#8217;une valeur numérique. A chaque update, nous allons afficher une valeur supplémentaire (une barre de 1 pixel représentant la valeur plus précisément), à la manière du monitoring CPU et mémoire du perfmon de windows.</p>
<p>Le fonctionnement global de la classe est exactement le même que la NB4OnOff, je ne reviens donc pas sur les fonctions d&#8217;initialistion et d&#8217;update</p>
<p>Il y a un point important à noter dans callBackAjaxOk : au lieu d&#8217;écraser la valeur précédente comme c&#8217;est le cas dans la classe OnOff, ici on ajoute la valeur reçue à un tableau de valeur :</p>
<pre>
<pre class="brush: jscript;">this.c_histo.extend([lvalue]);</pre>
</pre>
<p>Toutefois, la grosse différence se situe dans le code de rendu html : GetHTMLOutput :</p>
<ul>
<li>D&#8217;abord on récupère la taille de la zone d&#8217;affichage (elle peut varier en fonction notamment du mode docké ou non docké)</li>
<li>Et on en déduit le nombre de barres verticales affichables (a noter que pour l&#8217;instant c_imgwidth est un paramètre fixé une fois pour toute)</li>
<li>Puis enfin on réduit le tableau des valeurs à ce nombre :</li>
</ul>
<pre>
<pre class="brush: jscript;">
	// Récupère la taille actuelle du div
   var divHeight = $(this.c_elementName).getStyle('height').toInt();
   var divWidth = $(this.c_elementName).getStyle('width').toInt();

   // nombre max de barres affichables (division entière)
   var maxBarres = (divWidth - (divWidth % this.c_imgwidth)) / this.c_imgwidth;
   // réduit le tableau avec les dernières valeurs affichables
   if (this.c_histo.length&gt;maxBarres) {
     this.c_histo = this.c_histo.slice(this.c_histo.length - maxBarres);
   }
</pre>
</pre>
<ul>
<li>Puis si on a définit une hauteur dynamique au graphe, on va chercher quelle est la plus grande valeur du tableau afin de positionner l&#8217;échelle. Sinon on positionne l&#8217;échelle à une valeur fixe</li>
</ul>
<pre>
<pre class="brush: jscript;">
    if (this.c_maxHeightSize==0) { // taille dynamique
      var valeurMax= 0;
      this.c_histo.each( function(val) {
        if (val &gt;= valeurMax) {
          valeurMax = val;
        }
      });
    } else {  // taille fixe
      valeurMax = this.c_maxHeightSize;
    }
</pre>
</pre>
<ul>
<li>Enfin on parcoure le tableau de valeur en créant à chaque fois une image verticale dont la hauteur correspond à la valeur chiffrée du tableau et on l&#8217;affiche ainsi que le texte du paramètre de la NB4 qui est monitoré et la dernière valeur chiffrée :</li>
</ul>
<pre>
<pre class="brush: jscript;">
    var derniereValeur = 0;
    // affiche le graph
    for(var i=0;i&lt;this.c_histo.length;i++) {
      lHTMLoutput += '&lt;img src=&quot;';
      lHTMLoutput += this.c_imageHisto; //this.c_imageHisto;
      lHTMLoutput += '&quot;';
      lHTMLoutput += ' style=&quot;position: absolute; bottom: 0px; left:'+ i + 'px; width:'+ this.c_imgwidth + '; height:' + this.c_histo[i]*(divHeight/valeurMax) + ';&quot;';
      lHTMLoutput += '/&gt;';
      derniereValeur = this.c_histo[i];
    }
    $(this.c_elementName).innerHTML=lHTMLoutput;
</pre>
</pre>
<span id="Telechargement_et_Installation"><h1><a name="Telechargement"></a>Telechargement et Installation</h1></span>
<p>Deux versions sont téléchargeables : une de devt et une &#8216;normale&#8217; (on ne peut pas l&#8217;appeler &#8216;de production&#8217; à partir du moment où ce gadget n&#8217;est pas encore terminé).<br />
Le but est de montrer comme serait le package &#8216;minimal&#8217; d&#8217;un gadget NB4. J&#8217;ai donc enlevé dans la version &#8216;normale&#8217; tous les fichiers non nécessaires.</p>
<p>Pour l&#8217;installer, il suffit de télécharger l&#8217;archive, de le dézipper et de double cliquer sur le gadget, il devrait s&#8217;installer tout seul. Ensuite, normalement il devrait se trouver dans le répertoire windows suivant : Bureau\&lt;votre nom de user&gt;\AppData\Local\Microsoft\Windows Sidebar\Gadgets</p>
<p>La seconde archive (de développement) intégre un mootools non compressé (pratique pour le debug) ainsi que deux fichier supplémentaires et une icône de développement :</p>
<ul>
<li>testFormPost.html qui est une simple page pour interroger la NB4 en POST et récupérer le resultat, pratique pour tester des paramètres et ce qu&#8217;ils retournent</li>
<li>bouchon.php : permet de simuler la NB4 :
<ul>
<li>paramétrez DEBUG_BOUCHON à true dans NB4.js</li>
<li>hébergez le repertoire du gadget sur un serveur php et appelez directement la page NB4.html depuis un firefox équipé de firebug</li>
<li>Cela permet de faire du débug pas à pas, ce qui est pratique dans certains cas quand on ne comprend pas ce qu&#8217;il se passe : un des gros problème du développement de gadgets est la difficulté de debug car le browser embarqué dans windows sidebar n&#8217;est pas du tout accessible ni modifiable.</li>
</ul>
</ul>
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/un-gadget-vista-pour-la-neufbox-4/feed/</wfw:commentRss>
		<slash:comments>4</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 [...]]]></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" class="broken_link"  target="_blank">My Web 2.0</a></li>
<li><a href="http://pipes.yahoo.com/pipes/pipe.info?_id=iCHlGl0b3BGLb5BDouNLYQ" class="broken_link" >News PC</a></li>
<li><a href="http://pipes.yahoo.com/pipes/pipe.info?_id=gJqaHlYb3BGxWf9zzKky6g" class="broken_link" >Articles PC</a></li>
<li><a href="http://pipes.yahoo.com/pipes/pipe.info?_id=ZFyncjsb3BG9NglinkartA" class="broken_link" >Gadgets</a></li>
<li><a href="http://pipes.yahoo.com/pipes/pipe.info?_id=fOoiw1ob3BGbRQF_YEsBXw" class="broken_link" >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" class="broken_link" >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>
		<item>
		<title>Bees and Flowers</title>
		<link>http://www.chiroux.com/bees-and-flowers/</link>
		<comments>http://www.chiroux.com/bees-and-flowers/#comments</comments>
		<pubDate>Sun, 04 Jun 2006 13:19:59 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[communauté]]></category>
		<category><![CDATA[musique]]></category>

		<guid isPermaLink="false">http://www.chiroux.com/article-1149427199.html</guid>
		<description><![CDATA[<p>BnFlower est un site communautaire dédié à la promotions des artistes indépendants. Le principe est simple : Sur BnFlower chaque musicien est une Flower (une fleur). Chaque internaute qui maîtrise une technologie de diffusion de la musique est une Bee (une abeille ). Les Bee aident donc les Flower à diffuser leur musique.
Je me suis [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-86" title="bnflowerbee" src="http://www.chiroux.com/wp-content/uploads/Import/Blog/bnflowerbee.jpg" alt="bnflowerbee" width="162" height="243" /><a href="http://www.bnflower.com/" target="_blank">BnFlower</a> est un site communautaire dédié à la promotions des artistes indépendants. Le principe est simple : Sur BnFlower chaque musicien est une Flower (une fleur). Chaque internaute qui maîtrise une technologie de diffusion de la musique est une Bee (une abeille ). Les Bee aident donc les Flower à diffuser leur musique.<br />
Je me suis donc inscrit et en tant que Bee, j&#8217;ai sélectionné mes trois titres préférés et j&#8217;ai ensuite ajouté une nouvelle boîte dans la zone de navigation à droite (==&gt;)<br />
C&#8217;est très simple à ajouter, BnFlower nous fournissant le javascript à copier/coller dans la page web.</p>
<p>On trouve donc sur les sites des Bees leurs propres sélections ainsi que les sélections des Flowers les plus polulaires de la semaine et du mois, ainsi que les Bees les plus partageuses de la semaine et du mois.<br />
<span id="more-33"></span><br />
Régulièrement je partagerais donc mes titres préférés issus de BnFlower, et je vous invite bien sûr à vous inscrire à cette communauté.</p>
<p>Je trouve l&#8217;initiative très intéressante et surtout très prometteuses, de nombreux concepts communautaires étant en train d&#8217;émerger de cette initiative (KillBees, TeamBee, Flower-Flyers, etc..)</p>
<p>Source : <span style="text-decoration: line-through;">ratiatum</span> (est devenu <a href="http://www.numerama.com/" target="_blank">numerama </a>depuis)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.chiroux.com/bees-and-flowers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
