<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://blog.xulfactory.org/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>The XUL Factory</title>
  <link>http://blog.xulfactory.org/</link>
  <atom:link href="http://blog.xulfactory.org/feed/rss2" rel="self" type="application/rss+xml"/>
  <description></description>
  <language>fr</language>
  <pubDate>Mon, 05 Apr 2010 18:52:15 +0200</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Un sondage pour les barbus</title>
    <link>http://blog.xulfactory.org/post/2010/03/05/Un-sondage-pour-les-barbus</link>
    <guid isPermaLink="false">urn:md5:0c0026c641d9675d3a71cbbc453e7112</guid>
    <pubDate>Fri, 05 Mar 2010 09:47:00 +0100</pubDate>
    <dc:creator>Jean-Christophe</dc:creator>
            
    <description>    &lt;p&gt;&lt;a href=&quot;http://www.touilleur-express.fr/&quot; hreflang=&quot;fr&quot;&gt;Le Touilleur
Express&lt;/a&gt; (alias Nicolas Martignole), dont je lis toujours le blog avec
beaucoup d'intérêt, a lancé un sondage sur &lt;em&gt;les communautés&lt;/em&gt; s'adressant
aux geeks qui travaillent en SSII, chez les éditeurs de logiciels et autres
employeurs de la même branche. Comme il cherche a avoir un maximum de réponse
et compte-tenu de la nature de ce blog, je me permet de mette le lien ici.&lt;/p&gt;
&lt;p&gt;C'est par là : &lt;a href=&quot;https://spreadsheets.google.com/viewform?hl=fr&amp;amp;formkey=dGstcFg2bE9WVGE4eU5vbl9wSGt4bWc6MA&quot; title=&quot;https://spreadsheets.google.com/viewform?hl=fr&amp;amp;formkey=dGstcFg2bE9WVGE4eU5vbl9wSGt4bWc6MA&quot;&gt;
https://spreadsheets.google.com/vie...&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ça prend juste 5 minutes pour y répondre, et en plus c'est anonyme.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Les attibuts data-* de HTML5</title>
    <link>http://blog.xulfactory.org/post/2010/02/22/Les-attibuts-data-%2A-de-HTML5</link>
    <guid isPermaLink="false">urn:md5:fac808ebeb055637f546cd16c6fe307e</guid>
    <pubDate>Mon, 22 Feb 2010 16:35:00 +0100</pubDate>
    <dc:creator>Jean-Christophe</dc:creator>
        <category>Développement</category>
        <category>développement</category><category>html5</category><category>javascript</category><category>web</category>    
    <description>    &lt;p&gt;On lit (et écrit également, c'est fatal) beaucoup de choses sur HTML5 depuis
quelques années. Au programme des réjouissances on trouve pêle-mêle le tag
&lt;em&gt;canvas&lt;/em&gt; pour faire du graphisme programmatique, le stockage local pour,
par exemple pour le mode offline des applications web, les désormais célèbres
tags &lt;em&gt;audio&lt;/em&gt; et &lt;em&gt;video&lt;/em&gt; déjà utilisés par &lt;a href=&quot;http://www.dailymotion.com/openvideodemo&quot; hreflang=&quot;en&quot;&gt;dailymotion&lt;/a&gt; et
&lt;a href=&quot;http://www.youtube.com/html5&quot; hreflang=&quot;en&quot;&gt;youtube&lt;/a&gt;, le drag and
drop... J'en passe et des meilleurs.&lt;/p&gt;
&lt;p&gt;Par contre une nouveauté à propose de laquelle je n'avais jamais rien lu et
que j'ai découvert hier ce sont les &lt;em&gt;&lt;a href=&quot;http://dev.w3.org/html5/spec/Overview.html#embedding-custom-non-visible-data&quot; hreflang=&quot;en&quot;&gt;embedded custom non-visible data attributes&lt;/a&gt;&lt;/em&gt;, c'est là
dire des méta informations sous forme d'attributs que l'on peut ajouter à
loisir sur n'importe quel élément d'une page HTML et qui peuvent être lus et
interprétés par un script dans la page. C'est un peu équivalent à ce qu'il est
possible de faire avec XHTML en ajoutant des attributs définis par ses propres
namespaces.&lt;/p&gt;
&lt;p&gt;Un exemple :&lt;/p&gt;
&lt;pre&gt;
&amp;lt;ul id=&amp;quot;pointsOfInterest&amp;quot;&amp;gt;
  &amp;lt;li data-latitute=&amp;quot;48°51&amp;quot; data-longitude=&amp;quot;2°17&amp;quot;&amp;gt;La tour Eiffel&amp;lt;/li&amp;gt;
  &amp;lt;li data-latitute=&amp;quot;48°38&amp;quot; data-longitude=&amp;quot;1°30&amp;quot;&amp;gt;La mont Saint-Michel&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Ensuite avec un script on peut utiliser ces coordonnées. Par exemple on peut
monter où se trouve le lieu sur une carte.&lt;/p&gt;
&lt;pre&gt;
/* par exemple avec jQuery */
$(&amp;quot;#pointsOfInterest &amp;gt; li&amp;quot;).click(function() {
    var lat = $(this).dataset(&amp;quot;latitude&amp;quot;);
    var long = $(this).dataset(&amp;quot;logitude&amp;quot;);
    showOnMap(lat, long);
}
&lt;/pre&gt;
&lt;p&gt;Un autre exemple : utilisation d'un attribut &lt;em&gt;data-at&lt;/em&gt; pour
afficher des sous-titres en fonction d'un &lt;em&gt;time-code&lt;/em&gt; dans une
présentation audio (lue avec le tag &lt;em&gt;audio&lt;/em&gt; il va sans dire) :
&lt;a href=&quot;http://www.toolness.com/wp/?p=772&quot; title=&quot;http://www.toolness.com/wp/?p=772&quot;&gt;http://www.toolness.com/wp/?p=772&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Je trouve cette nouvelle façon de passer des données supplémentaires très
intéressante ; elle est surtout plus simple à mettre en œuvre que les
namespaces en XHTML. Toutefois, et c'est sans doute la raison pour laquelle on
en parle peu, les navigateur ne l'implémente pas encore. Pour ceux qui sont
tout de même pressés de jouer avec, il existe un plugin jQuery qui permet de
simuler l'objet &lt;em&gt;dataset&lt;/em&gt; : &lt;a href=&quot;http://orangesoda.net/jquery.dataset.html&quot; hreflang=&quot;en&quot;&gt;HTML5 Dataset jQuery
Plugin&lt;/a&gt;.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Tabulation, focus et JTextComponent</title>
    <link>http://blog.xulfactory.org/post/2007/08/17/Tabulation-focus-et-JTextComponent</link>
    <guid isPermaLink="false">urn:md5:822285bb59f5ea32ae1059087f10d3f3</guid>
    <pubDate>Fri, 17 Aug 2007 08:04:00 +0200</pubDate>
    <dc:creator>Jean-Christophe</dc:creator>
        <category>Code snippet</category>
        <category>développement</category><category>java</category><category>swing</category>    
    <description>    &lt;p&gt;Problème : dans un composant de texte Swing (JEditorPane, JTextPane,
JTextArea) lors de l'appui sur la touche [TAB], comment faire pour que le focus
passe au composant suivant au lieu d'insérer une tabulation ?&lt;/p&gt;
&lt;p&gt;Solution :&lt;/p&gt;
&lt;pre&gt;
JTextPane pane = new JTextPane();
Set&amp;lt;AWTKeyStroke&amp;gt; focus = pane.getFocusTraversalKeys(
    KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS);
Set&amp;lt;AWTKeyStroke&amp;gt; newFocus = new HashSet&amp;lt;AWTKeyStroke&amp;gt;(focus);
newFocus.add(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0));
pane.setFocusTraversalKeys(KeyboardFocusManager.
    FORWARD_TRAVERSAL_KEYS, newFocus);
&lt;/pre&gt;
&lt;p&gt;Et pour le aller dans l'autre sens (backward focus) :&lt;/p&gt;
&lt;pre&gt;
JTextPane pane = new JTextPane();
Set&amp;lt;AWTKeyStroke&amp;gt; focus = pane.getFocusTraversalKeys(
    KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS);
Set&amp;lt;AWTKeyStroke&amp;gt; newFocus = new HashSet&amp;lt;AWTKeyStroke&amp;gt;(focus);
newFocus.add(KeyStroke.getKeyStroke(KeyEvent.VK_TAB,
    KeyEvent.SHIFT_MASK));
pane.setFocusTraversalKeys(KeyboardFocusManager.
    BACKWARD_TRAVERSAL_KEYS, newFocus);
&lt;/pre&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Javascript, objets et prototypes</title>
    <link>http://blog.xulfactory.org/post/2007/01/12/Javascript-objets-et-prototypes</link>
    <guid isPermaLink="false">urn:md5:040ce077afd00573da1d9fb8d10865eb</guid>
    <pubDate>Fri, 12 Jan 2007 18:12:00 +0100</pubDate>
    <dc:creator>Jean-Christophe</dc:creator>
        <category>Développement</category>
        <category>développement</category><category>javascript</category>    
    <description>&lt;p&gt;Voici un petit billet qui présente rapidement le modèle objet de
Javascript.&lt;/p&gt;
&lt;h3&gt;Objets&lt;/h3&gt;
&lt;p&gt;La majorité des langages objets utilisent la notion de classes. Pour
reprendre une image fréquemment utilisée, la classe est le moule dans lequel on
&lt;del&gt;cuit&lt;/del&gt; instancie l'objet. Donc les classes et les objets vivent dans
des mondes séparés.&lt;/p&gt;
&lt;p&gt;En javascript c'est différent, il n'existe pas de classes, tout est objet.
Voilà une façon de créer un objet en javascript&lt;sup&gt;[&lt;a href=&quot;http://blog.xulfactory.org/post/2007/01/12/#pnote-69998-1&quot; id=&quot;rev-pnote-69998-1&quot; name=&quot;rev-pnote-69998-1&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt; :&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;
&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a href=&quot;http://blog.xulfactory.org/post/2007/01/12/#rev-pnote-69998-1&quot; id=&quot;pnote-69998-1&quot; name=&quot;pnote-69998-1&quot;&gt;1&lt;/a&gt;]
Habituellement j'utilise l'interpréteur javascript &lt;a href=&quot;http://www.mozilla.org/rhino/&quot;&gt;Rhino&lt;/a&gt; de mozilla. Rhino est
multi-plateforme et écrit en Java.&lt;/p&gt;
&lt;/div&gt;    &lt;pre&gt;
js&amp;gt; myobj = {
    name : &amp;quot;My Object&amp;quot;,

    show: function() {
        print (&amp;quot;I am &amp;quot; + this.name);
    }
}
js&amp;gt; myobj
[object Object]
js&amp;gt; myobj.name
My Object
js&amp;gt; myobj.show()
I am My Object
&lt;/pre&gt;
&lt;p&gt;Voilà &lt;em&gt;myobj&lt;/em&gt; est l'objet créé. il possède deux
&lt;em&gt;propriétés&lt;/em&gt; : &lt;em&gt;name&lt;/em&gt; qui est une chaine de caractère et
&lt;em&gt;show&lt;/em&gt; qui est une fonction ou méthode car elle c'est sous ce nom que la
norme ECAM-262 une fonction définie à l'intérieur d'un objet.&lt;/p&gt;
&lt;p&gt;L'appel à ces propriétés se fait en utilisant la très classique notation
pointée : &lt;em&gt;foo.bar&lt;/em&gt; représente la propriété &lt;em&gt;bar&lt;/em&gt; de l'objet
&lt;em&gt;foo&lt;/em&gt;. En fait un objet en javascript peut se résumer à un ensemble
d'objet nommés. Et d'ailleurs si on reprend l'exemple précédent :&lt;/p&gt;
&lt;pre&gt;
js&amp;gt; myobj.name
My Object
js&amp;gt; myobj[&amp;quot;name&amp;quot;]
My Object
&lt;/pre&gt;
&lt;p&gt;Ce sont 2 façons d'accéder à la propriété &lt;em&gt;name&lt;/em&gt; de &lt;em&gt;myobj&lt;/em&gt;.
Ces deux appels sont sémantiquement identiques.&lt;/p&gt;
&lt;h3&gt;Constructeurs&lt;/h3&gt;
&lt;p&gt;Si javascript ne propose pas de classes il définit par contre la notion de
constructeur. Un contructeur est une fonction qui crée un nouvel objet et
initialise ses propriétés. Un constructeur s'utilise avec le mot clé
&lt;em&gt;new&lt;/em&gt;. Un rapide exemple :&lt;/p&gt;
&lt;pre&gt;
js&amp;gt; function MyObj(objName) {
    this.name = objName;
}
js&amp;gt; myobj = new MyObj(&amp;quot;My New Object&amp;quot;);
[object Object]
&lt;/pre&gt;
&lt;p&gt;Que se passe-t-il quand on appelle le constructeur &lt;em&gt;MyObj&lt;/em&gt; avec
&lt;em&gt;new&lt;/em&gt;. D'abord un nouvel objet vide est créé ; puis &lt;em&gt;this&lt;/em&gt;
est initialisé de façon à pointer sur ce nouvel objet. Donc quand on exécute la
première instruction de la fonction this pointe sur un objet vide. l'appel
&lt;em&gt;this.name = objName;&lt;/em&gt; va donc définir la propriété &lt;em&gt;name&lt;/em&gt; et la
remplir avec l'objet passé en paramètre au constructeur :&lt;/p&gt;
&lt;pre&gt;
js&amp;gt; myobj.name
My New Object
&lt;/pre&gt;
&lt;p&gt;Et si on veut ajouter une méthode à notre objet ? Une solution consite
à ajouter la méthode comme on l'a fait avec la propriété précédente :&lt;/p&gt;
&lt;pre&gt;
js&amp;gt; function MyObj(objName) {
    this.name = objName;
    this.show = function() {
        print (&amp;quot;I am &amp;quot; + this.name);
    };
}
js&amp;gt; myobj = new MyObj(&amp;quot;My New Object&amp;quot;);
[object Object]
js&amp;gt; myobj.show()
I am My New Object
&lt;/pre&gt;
&lt;p&gt;Effectivement cela fonctionne. Cependant cette solution n'est pas très
élégante puisque la méthode va être dupliqué dans tous les objets. Il serait
plus intéressant que tous les objets instanciés à partir du constructeur
partage le même objet méthode. C'est à cela que servent les prototypes.&lt;/p&gt;
&lt;h3&gt;Prototypes&lt;/h3&gt;
&lt;p&gt;Chaque objet possède un pointeur caché sur son un autre objet qu'on appelle
son prototype. Le prototype est lui aussi un objet javascript et il possède
donc lui aussi un prototype. Ces prototypes forment ce qu'on appelle la
&lt;em&gt;chaine de prototypes&lt;/em&gt; de l'objet. Quand on essaie d'accéder à la
propriété &lt;em&gt;bar&lt;/em&gt; de l'objet &lt;em&gt;foo&lt;/em&gt; en faisant &lt;em&gt;foo.bar&lt;/em&gt;
alors l'interpréteur javascript fait la chose suivante : il regarde si
&lt;em&gt;foo&lt;/em&gt; possède une propriété &lt;em&gt;bar&lt;/em&gt; ; si oui alors c'est
terminé, si non, il fait la même chose avec le prototype de foo et ainsi de
suite jusqu'à avoir trouvé la propriété ou avoir parcouru toute la chaine de
prototypes.&lt;/p&gt;
&lt;p&gt;Mais comment peut-on définir le prototype d'un objet ? C'est
simple : le constructeur possède une propriété &lt;em&gt;prototype&lt;/em&gt; qui
permet de définir le prototype des objets instanciés avec ce constructeur.
&lt;strong&gt;Attention, la propriété &lt;em&gt;prototype&lt;/em&gt; du constructeur n'est pas le
prototype du constructeur&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Je reprends mon exemple :&lt;/p&gt;
&lt;pre&gt;
js&amp;gt; function MyObj(objName) {
    this.name = objName;
}
js&amp;gt; MyObj.prototype.show = function() {
    print (&amp;quot;I am &amp;quot; + this.name);
};
js&amp;gt; myobj = new MyObj(&amp;quot;My New Object&amp;quot;);
[object Object]
js&amp;gt; myobj.show()
I am My New Object
&lt;/pre&gt;
&lt;p&gt;Quel avantage à utiliser des prototypes ? Comme les prototypes sont
partagés dès qu'on les modifie, les modifications sont immédiatement
répercutées. Par exemple :&lt;/p&gt;
&lt;pre&gt;
js&amp;gt; function MyObj(objName) {
    this.name = objName;
}
js&amp;gt; MyObj.prototype.show = function() {
    print (&amp;quot;I am &amp;quot; + this.name);
};
js&amp;gt; myobj1 = new MyObj(&amp;quot;My New Object&amp;quot;);
[object Object]
js&amp;gt; myobj1.show()
I am My New Object
js&amp;gt; MyObj.prototype.show = function() {
    print (&amp;quot;Je suis &amp;quot; + this.name);
};
js&amp;gt; myobj1.show()
Je suis My New Object
&lt;/pre&gt;
&lt;p&gt;Encore mieux, on peut ajouter des fonctions aux prototypes des objets déjà
existants. Par exemple :&lt;/p&gt;
&lt;pre&gt;
js&amp;gt; String.prototype.comment = function() {
    return &amp;quot;/* &amp;quot; + this + &amp;quot; */&amp;quot;;
}
js&amp;gt; str = new String(&amp;quot;This is a comment&amp;quot;);
This is a comment
js&amp;gt; str.comment();
/* This is a comment */
&lt;/pre&gt;
&lt;p&gt;Et maintenant toutes les chaines de caractères possèdent la méthode
&lt;em&gt;comment&lt;/em&gt;. Amusant non ?&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Wikipedia Search</title>
    <link>http://blog.xulfactory.org/post/2006/08/05/Wikipedia-Search</link>
    <guid isPermaLink="false">urn:md5:4d39906a28f95e25412c79e8b55f7367</guid>
    <pubDate>Sat, 05 Aug 2006 20:46:00 +0200</pubDate>
    <dc:creator>Jean-Christophe</dc:creator>
        <category>Wikipedia-Search</category>
        <category>extension</category><category>wikipedia</category><category>Wikipedia Search</category><category>XUL</category>    
    <description>    &lt;p&gt;&lt;a href=&quot;http://blog.xulfactory.org/tag/Wikipedia%20Search&quot;&gt;Wikipedia Search&lt;/a&gt; est une &lt;a href=&quot;http://blog.xulfactory.org/tag/extension&quot;&gt;extension&lt;/a&gt; pour firefox (à partir de la version 1.5.0.2)
que j'ai développé quand je me suis rendu compte que la plupart de mes
recherches dans wikipedia concernaient des termes lus sur une autre page web.
Wikipedia-Search permet donc de faire rapidement une recherche contextuelle
dans l'encyclopédie libre &lt;a href=&quot;http://wikipedia.org&quot;&gt;wikipedia&lt;/a&gt; à partir
de n'importe mot lu sur une page web. Il est possible de choisir la langue
principale de recherche ou de faire une recherche dans plusieurs langues
simultanément.&lt;/p&gt;
&lt;p&gt;Quelques captures d'écrans&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://blog.xulfactory.org/public/wkps/caps1.png&quot; alt=&quot;caps1.png&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://blog.xulfactory.org/public/wkps/caps2.png&quot; alt=&quot;caps2.png&quot; /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Pour le moment c'est en version 0.9-beta2 donc pas encore complètement
stable même si elle pas mal a été testée avec les différentes versions de
firefox sous Windows et Linux.&lt;/p&gt;</description>
    
          <enclosure url="http://blog.xulfactory.org/public/wkps/wkps-0.9.0-beta2.xpi"
      length="12991" type="text/plain" />
    
    
      </item>
    
</channel>
</rss>