Aller au contenu | Aller au menu | Aller à la recherche

vendredi, mai 4 2012

Recherche de développeurs XUL

Firefox, avec ses 25-30% de part de marché des navigateurs, est un projet très vivant, et des entreprises ont souvent besoin de réaliser des extensions pour Firefox ou des applications basées sur Firefox. La technologie utilisée est donc XUL, XPCom, et cela peut aller jusqu'à des Firefox personnalisés qui nécessitent recompilation etc...

À Innophi, société que David Marteau et moi-même avons fondé il y a 2 ans, nous avons donc régulièrement des demandes de prestation pour des projets XUL. Cependant il nous arrive d'en refuser faute de disponibilités. Aussi, si vous proposez des prestations avec les technologies XUL, que vous soyez une société de service ou un développeur freelance, nous pourrions avoir des projets pour vous. Contactez-moi : laurent@innophi.com ;-)

dimanche, avril 1 2012

jsDatasource, a component for XUL templates

I just released publicly a new version of a component : jsDatasource.

This component allows to use javascript objects as datasource for XUL templates. You can use it in your own extension or XUL applications. It becomes easy to use XUL templates with js datasources!

I started this component in 2009, for a software, ZoomCreator, when I worked for Zoomorama. Even if it was written under a free licence, I didn't release it at this time (well, I had so much work..). And for a recent customer project, I need it with some improvements, like the support of recursion or the support of sorting. So I improved it, and I just open a public repository :-)

I hope it will help some XUL developers :-)

jeudi, février 11 2010

Faire du drag and drop avec flash en utilisant canvas

À Zoomorama, Flash nous rend bien service. De par ses performances au niveau rendu, il nous permet de développer notre navigateur de documents zoomable, notre "ZoomViewer", que l'on peut intégrer dans une page web. Seul souci avec Flash : il ne connait pas le drag and drop.

Lire la suite...

lundi, janvier 11 2010

What's wrong in Mozilla's plan for Firefox ??

I just read the blog post of Mike Connor, Firefox's lead engineer. And I'm depressed.

Lire la suite...

mercredi, août 19 2009

Khromaxul 0.4 on the road

Dans la nouvelle version de ZoomCreator que nous sommes en train de réécrire, nous voulions ajouter de beaux colors pickers. Pour cela, j'ai trouvé Khromaxul, un ensemble de color pickers sous forme de composants XBL (avec du SVG), crée par Joliclic. La demo et les tests m'ont fait bonne impression, ainsi que le code en général.

Mais un souci s'est posé à l'intégration. Pour synchroniser les color pickers (mise à jour des pickers quand vous changez la couleur dans un), il faut se taper des tonnes de lignes de code javascript, avec des event listeners sur chacun des pickers. À cela il faut ajouter que chaque composant a sa propre API. Ainsi il y a des pickers pour les couleurs RGB, d'autres pour HSV etc. Et donc lors de cette synchronisation "à la main", il faut aussi se taper les conversions d'un format de couleur à un autre.

Bref, d'un point de vue du développeur, ce n'était pas très sexy à utiliser. J'ai donc décidé d'améliorer tout ça (vive les licences libres !). J'ai d'abord harcelé Joliclic pour qu'il crée un dépôt des sources quelque part, en lui proposant BitBucket. Vous pouvez ainsi accéder aux dernières modifications. Et voilà les améliorations principales que j'ai apporté :

  • uniformisation de l'API des pickers : ils héritent tous du même XBL de base que j'ai dévelopé, avec une propriété "color" contenant une chaine avec le code couleur en CSS (rgb, hsl, hexa...), et une propriété colorObject qui est un objet permettant de manipuler la couleur en question.
  • cet XBL de base intégre la communication avec un dispatcher. En fait, Joliclic a crée un broadcaster similaire au broadcaster XUL, mais spécialisé pour nos besoins. Ainsi, pour synchroniser les pickers, il suffit juste de créer une balise kh-colordispatcher, et d'indiquer son id dans un attribut "dispatcher" sur chacun des pickers. Plus une seule de code JS à écrire !
  • j'ai aussi ajouter support de la transparence dans les couleurs: rgba, hsla, hsva.
  • J'ai développé également un picker pour choisir la transparence, une colorbox affichant la transparence, un textbox pour saisir un code couleur etc....

Bref, la version 0.4 n'apportera pas de grande nouveauté pour l'utilisateur, mais un grand bouleversement pour le développeur désirant intégrer un ou plusieurs color pickers dans son application XUL.

vendredi, février 27 2009

Beware the master of Xuuuuul

Notre graphiste à Zoomorama, qui fait le design de nos applis XUL, s'est bien amusé :-)

Pour ceux qui n'ont pas flash, une miniature en png...

vendredi, février 20 2009

Fuel dans XulRunner

Avec le projet sur lequel je travaille, je refais du XUL à plein temps avec XulRunner 1.9.1. En effet, ces dernières années, je faisais plus des hacks dans Gecko en C ou des composants XPCom C que du XUL. Et du coup, je suis passé à coté de nouveautés :-).

Comme l'évolution de l'API Fuel.

Cette API, qui contient des fonctions intéressantes pour toute application XUL, n'était au départ disponible que dans Firefox (durant le développement de la version 3.0), et non dans le toolkit XUL. Et en fait, je viens de m'apercevoir que les fonctionnalités non spécifiques au navigateur sont maintenant dans les sources du toolkit (depuis la version stable de Gecko 1.9.0), donc disponible pour toute application XulRunner.

Sous certaines conditions cependant.

En effet, il faut se faire un composant XPCOM javascript, avec un IDL propre qui hérite de extIApplication (voir l'exemple dans Firefox), et inclure les sources de extApplication.js via une instruction de preprocessing #include. Pour ceux qui génèrent leur application avec les sources de Mozilla et qui utilisent le système de build de Mozilla. Pour les autres, il n'y a pas d'autres choix que de recopier le fichier extApplication.js dans leur chrome et l'inclure programmatiquement.

Cependant, grâce au fait que vous ayez à faire un objet XPCOM javascript, ayant son propre IDL, cela vous permet d'ajouter vos propres méthodes et propriétés sur l'objet Application qui sera exposé dans vos scripts javascripts de vos fenêtres XUL.

mercredi, décembre 10 2008

Regression sur les templates sqlite, et l'importance des tests unitaires

En voulant utiliser les templates XUL avec sqlite dans BlueGriffon, Daniel a découvert un bug il y a quelques jours. Un méchant bug d'ailleurs, puisque les templates avec sqlite ne fonctionnaient quasiment plus ( je n'ai pas vérifié si ça l'est dans la dernière beta de Firefox ou si c'est juste dans le trunk).

C'est une régression qui est survenue suite à une "amélioration" dans le moteur principal de template, il y a... presque 2 mois !

Deux mois pendant lesquels les templates avec sqlite ne fonctionnaient plus. Et savez-vous pourquoi tant de temps ? Parce qu'il n'y avait pas de tests unitaires ! Donc aucun moyen de détecter automatiquement la régression.

Et à qui la faute ? En grande partie à moi : je n'avais pas développé de vrai tests unitaires lorsque j'avais implémenté le support de sqlite dans les templates XUL. Deux petites excuses tout de même :

  1. À l'époque, le framework de tests unitaires ne permettait pas de faire des tests dans le context chrome
  2. j'attendais en fait que Neil Deakin finisse son mini framework de tests sur les templates, pour y ajouter mes tests.

Mais bon, quand il eut terminé, ma tâche fut tombée dans l'oubli, noyé que je suis dans ma todo list.

Cependant, Neil m'a dévancé pour corriger le bug. Moi j'ai ajouté mes tests. Tout devrait être intégré dans le trunk dans les jours qui viennent, le temps que les reviews se fassent. Ouf.

vendredi, octobre 3 2008

Komodo Edit 4.4

Depuis deux semaines, j'utilise Komodo Edit pour développer. Je l'avais essayé l'année dernière mais je ne l'avais pas gardé malgré ses fonctionnalités qui me plaisaient, car l'interface manquait beaucoup de réactivité. Ce défaut n'existe plus dans cette version 4.4, et j'ai décidé de le garder, en abandonnant donc l'éditeur Kate[1]

Tout ce qu'il propose me convient, surtout qu'il prend en charge tout les langages que j'utilise (HTML, CSS, XBL, XUL, javascript, C++ et PHP) non seulement au niveau de la coloration syntaxique, mais aussi de la complétion de code. Autre point positif : il est aussi disponible sous Mac et Windows[2], ce qui m'arrange car je n'ai jamais trouvé d'éditeur libre à mon goût sous l'OS de redmond.

Seul bémol, j'ai horreur de sa boîte de recherche : elle s'affiche dans une fenêtre séparée. Alors que dans kate, elle apparaît en dessous de l'éditeur, ce que je trouve très pratique car on peut la laisser ouverte en permanence.

Mais je pense que ça ne va pas être un souci très longtemps : Komodo est une application XUL, donc extensible de la même manière que Firefox. Et comme vous le savez, les technos Mozilla n'ont plus vraiment de secret pour moi. Dés que je trouve un moment donc, je me ferais une extension qui m'affiche cette boite de recherche où je veux :-)

Et j'ai d'autres idées d'extensions dans ma tête ;-)

Notes

[1] Un éditeur sous KDE que j'utilise depuis quelques années déjà. J'ai aussi essayé Eclipse, mais c'est trop lourd à mon gout, J'ai aussi essayé pendant plusieurs semaines le récent Geany, un IDE sous GTK, mais ses raccourcis clavier à la noix, ses bugs, et son manque de fonctionnalités m'agacent

[2] bah oui, développant des applis multi-plateforme, j'ai besoin de compiler, tester et debugger mes applis sur les trois OS majeurs que sont Linux, MacOs et Windows

vendredi, août 29 2008

Drag and drop HTML5 dans Firefox

Après les améliorations qui viennent d'être apportées sur le moteur Javascript qui fait repasser Gecko 1.9.1 devant Webkit au niveau des performances de l'execution des scripts JS, voici que Neil Deakin (développeur Mozilla de son état), vient de terminer l'implémentation de l'API drag and drop de HTML5.

On peut donc apporter des fonctions de drag'n'drop dans une page web, tout aussi facilement que ce que l'on peut faire avec des bibliothèques comme jQuery. Sauf qu'il n'y a plus besoin de charger des kilos de scripts JS :-)

Lire la suite...

jeudi, août 7 2008

Mozilla Addons Workshop

Il y a plusieurs semaines, au sein du bureau de Xulfr.org, j'avais relancé l'idée d'organiser cette année, une seconde édition de la "Xulfr party", la première s'étant déroulé il y a un peu moins de deux ans. Mais petit à petit, cette "Xulfr Party", à l'origine une reunion dans le style des barcamp, s'est transformé en véritable journée de conférence. Paul avait d'abord contacté quelques éventuels interressés, qui ont voulu un peu plus qu'un simple barcamp, puis Mozilla Europe a été mis dans la boucle, et William, le p'tit nouveau de Moz-Europe qui s'occupe de la communauté, s'est très vite intéressé au projet. Après quelques heures de discussion, William, Paul et moi, on a fini par boucler le format et le nom de l'évènement, dans le coin détente du Mozilla Firefox+ Summit 2008.

Cela donne donc l'évènement Mozilla Addons Workshop, une journée complète pour tout ceux intéressés par le développement XUL, en particulier le développement d'extension pour Firefox, et le développement d'application XulRunner.

Ça se passera le Samedi 20 septembre[1]. Voyez la news sur Xulfr.org, ou encore le billet de William, pour quelques détails supplémentaires. Nous allons vous donner plus détails dans les jours à venir, donc restez à l'écoute du fils rss des news de xulfr.org !

Notes

[1] On a déjà eu des remarques sur le jour de la semaine, il y a du pour et du contre, et de toute façon, il y aura toujours des mécontents que cela se passe en semaine ou un samedi; pour ma part, je pense que la majorité des intéressés sont des développeurs en SSII ou des étudiants, donc avec peu de possibilité de se libérer en semaine, sauf à prendre sur leur congé, donc je pense que le samedi n'est pas une mauvaise chose. Maintenant, je peux me tromper, et si la demande est forte, on fera ça en semaine la prochaine fois.

mardi, novembre 13 2007

Templates avec sqlite : dans le trunk !

Ça y est, mon patch est dans le trunk de Mozilla. On pourra donc faire dans Firefox 3 des templates XUL avec des données issues d'une base sqlite.

Bon, l'intégration du patch ne s'est pas super bien passé. Voici ce qui peut arriver quand on oublie de tester une compilation en mode optimisé, et donc avec un include manquant :

Oui,c'est moi qui ai mis le feu aux tinderboxs[1] :-) Et là on ne voit que celles pour firefox, il y a aussi celles pour xulrunner, sunbird, seamonkey...

M'enfin, ça a été vite corrigé, tout est bien qui fini bien.

PS: les possibilités apportées par mon patch ne sont pas présentes dans Firefox 3.0 beta 1, mais le seront dans les versions suivantes.

Notes

[1] les tinderboxs sont les machines qui compilent en permanence les produits Mozilla, et qui lancent des tests unitaires. Et quand une compilation échoue, c'est indiqué en rouge vif avec des jolies flammes.

jeudi, novembre 8 2007

Templates avec sqlite : c'est pour bientôt.

J'ai terminé la semaine dernière mon patch pour pouvoir utiliser sqlite comme source de donnée pour les templates XUL. Il est un peu tard pour qu'il soit intégré dans Firefox 3 beta 1, mais il le sera il faut l'espérer, avant la sortie de Firefox 3 final. C'est pas forcément joué, car normalement, l'ajout de fonctionnalités dans Gecko 1.9 est gelé depuis plusieurs semaines. Mais je reste optimiste, quand je lis les commentaires enthousiastes de certains :

Mark Finkle (de mozilla.com) :

this may not affect Firefox to a high degree, but the potential for extension developers and XUL application developers is huge, Huge, HUGE!

Philip Chee :

SeaMonkey wants this too as it's holding up a key SM bug that depends on this.

Robert Kaiser (l'un des lead developer de SeaMonkey) :

I know a bunch of people anxious to see this landing ;-)

Bref, l'inclusion du patch dans Gecko 1.9 va se décider dans les prochains jours, et il y a des chances que l'issue soit positive :-)

jeudi, octobre 25 2007

Amélioration de mon patch sur les templates XUL avec sqlite

Après presque un mois d'attente, j'ai pu enfin avoir une superreview sur mon patch. Hélas, il n'est pas passé :-) En effet, il est possible de modifier la requête en y injectant des valeurs non vérifiée, ce qui peut entrainer des problèmes de sécurité. Il m'a donc été demandé d'améliorer ça, en permettant de pouvoir déclarer des requêtes paramétrées. Cela n'empêche pas le développeur de trafiquer la requête à la main, mais au moins il a un moyen pour faire des modifications de façon simple et sûre, évitant les problèmes d'injection SQL.

J'ai fait la modif, et voici donc maintenant ce qu'on peut faire :

   <grid>
       <columns>  <column flex="1"/> <column flex="3"/>  <column flex="2"/> <column flex="1"/>  </columns>
       <rows datasources="tests.sqlite" querytype="storage" id="rows" ref="?">
       <template>
           <query>
               select product_id, label, price, cat_id from products where price > :price
               <param id="price-param" name=":price" type="int32"/>
           </query>
           <action>
               <row uri="?">  <label value="?product_id"/>  <label value="?label"/>  <label value="?price"/>   <label value="?cat_id"/>   </row>
           </action>
       </template>
       </rows>
   </grid>

La nouveauté c'est la balise param, dont le contenu doit être la valeur du paramêtre. Ici il s'agit d'un paramètre nommé, c'est pourquoi il a un attribut name. On peut indiquer le type de la donnée avec l'attribut type. Et bien sûr, on peut avoir autant de paramètres que l'on veut.

Et ensuite, avec un petit bout de script, on indique la valeur du paramètre et on régénère le contenu du template :

   document.getElementById("price-param").textContent = "270";
   document.getElementById("rows").builder.rebuild();

Il s'affichera tous les produits dont le prix est supérieur à 270. Si on ne veut pas que le contenu du template s'affiche dès le départ, il suffit de ne pas mettre l'attribut ref tout de suite, mais seulement après que l'on ait fini de mettre les valeurs dans les paramètres.

Je n'ai pas encore mis à jour le patch sur le bug, j'ai encore 2-3 choses à vérifier, mais ça se fera au plus tard demain. En espérant que la superreview soit enfin positive :-)

dimanche, septembre 16 2007

Pas de XUL-like au W3C

Le groupe de travail sur les formats d'applications web vient de publier une note, indiquant qu'ils arrêtaient leurs travaux sur un format d'interface utilisateur (de type XUL donc).

La principale raison évoquée est le manque de temps et de personnes. Seuls deux membres du W3C ont vraiment planché sur le sujet. De plus, le groupe de travail a considéré que cet ex-futur format pourrait faire double emploi sur plusieurs points, vis à vis d'autres spécifications qui, elles, avancent plus vite et sont largement plus supportés par d'autres membres (Widgets 1.0, Web Forms2, HTML5...).

Ils préconisent alors de recréer un groupe de travail (mais plus tard), de réfléchir sur les besoins réèls auxquels devra répondre ce format etc...

Bref, pour le moment, plus de format normalisé de type XUL au W3C avant quelques années...

Mais heureusement, il y a XBL2, et avec XBL2, on peut tout faire ! D'ailleurs, je l'expliquerai à Paris Web 2007 au cours d'un atelier ;-) Réservez les 15,16 et 17 novembre sur vos agendas !

mercredi, septembre 12 2007

Templates avec sqlite : ça avance

J'ai pu avancer sur l'implémentation de l'usage de SQLite dans les templates XUL (pour rappel, il s'agit du bug 321172). Après quelques reviews qui m'ont permis de corriger et d'améliorer certaines choses, je viens de demander une "superreview", ultime étape avant que le patch soit inclus dans le trunk de Mozilla.

Bien que l'ajout de fonctionnalité/nouveauté dans Gecko soit gelée en ce moment, pour cause de sortie "imminente" (dans quelques mois) de Firefox 3, on m'a tout de même expliqué qu'il y avait des chances que le patch soit intégré, vu qu'il ne modifiait pas le comportement de Gecko, et qu'il pourrait être utile pour des interfaces de Firefox 3 (vu que SQLite/MozStorage est de plus en plus utilisé dans le navigateur). Si toutefois par malchance il n'était pas intégré, je pense que je livrerais une extension provisoirement. Cela ne devrait pas me faire beaucoup de travail grâce au niveau système de template qui est "évolutif" : il suffirait d'en faire un composant XPCOM.

mercredi, septembre 5 2007

Démarrage d'OpenKomodo

Depuis que je fais des applis XUL, j'ai toujours vu un potentiel énorme de la plateforme Mozilla pour réaliser un environnement de développement. En effet, imaginez un Eclipse like, mais en XUL. Personnaliser alors son environnement serait vraiment aisé grâce au système d'extension XUL. On pourrait même aller beaucoup plus loin qu'Eclipse en matière de personnalisation et de configuration (vive les overlays !). Ce n'est pas qu'Eclipse n'est pas bien, mais il faut tout de même avouer que c'est un bordel sans nom pour rajouter des plugins par rapport à l'installation d'une extension XUL. Et je ne parle même pas du développement de ladite extension/plugin qui est quand même plus simple pour Mozilla que pour Eclipse.

Lire la suite...

jeudi, juillet 12 2007

Templates avec mozstorage/sqlite

Après avoir travaillé sur le bug 321170, j'ai pu avancé sur le bug 321172 (voir les explications sur un vieux billet). Je viens donc de finir un premier patch qui fonctionne (adapté d'un précédent travail de Neil Deakin), permettant d'ajouter la prise en charge d'un nouveau type de source de données pour les templates XUL : SQLite. Avec ce patch, on peut donc maintenant faire ça en XUL :

 <vbox   datasources="file:///home/laurent/mabase.sqlite"  ref="?" querytype="storage">
   <template>
       <query>select name, firstname from users</query>
       <action>
           <hbox uri="?">
               <label value="?name"/>
               <label value="?firstname"/>
           </hbox>
       </action>
   </template>
 </vbox>

J'ai aussi ajouté la prise en charge d'un type d'url spécial, qui permet d'indiquer facilement une base sqlite qui est dans le profile de l'utilisateur :

  datasources="profile:places.sqlite"

Ici on utilise la base du nouveau système de bookmarks de Firefox 3 ;-) Je ne sais pas encore si ce type d'url sera accepté, on verra.

En attendant, faut que je fasse une petite série de tests unitaires pour en vérifier tout le bon fonctionnement.

mardi, juin 19 2007

Un webmail en XUL chez gandi

Le registrar Gandi.net diversifie un peu plus ses activités. Après avoir ouvert une plateforme de blog (basé sur dotclear 2 ;), voilà maintenant qu'il propose un webmail pour ses clients. Quand on achète un nom de domaine chez eux, on peut alors se créer une boîte aux lettres chez eux (1 Go de stockage, 1000 alias et redirections, antispam et antivirus etc...).

Le plus fort dans cette offre, c'est le choix de l'interface. On peut choisir d'avoir une interface toute simple (pour tout navigateur), une interface tout en ajax et cie, une autre optimisée pour IE6 et... une interface optimisée pour les utilisateurs de Firefox. Et cette interface est réalisée en XUL !! Du vrai de vrai !

Avec des vrais menus déroulants, des vrais onglets, des vrais arbres etc.. Une vraie interface, comme dans les clients mails desktop. Et bien sûr, plus efficace et plus réactive que son homologue tout en ajax... Au niveau fonctionnalités, tout le principal est là.

Quelques captures d'écran (cliquez sur les images pour les voir en grand) :

L'écran principal : miniature de la capture d'écran de la fenêtre principale

La fenêtre d'écriture d'un mail : miniature de la capture d'écran de la saisie d'un mail

Le carnet d'adresse : miniature de la capture d'écran du carnet d'adresse

Il y a toutefois quelques fenêtres en HTML, comme la fenêtre de réglage des paramètres ou la fenêtre d'ajout d'un contact : miniature de la capture d'écran d'ajout d'un contact
Vu que ce sont de simples formulaires, c'est tout de même plus simple que de faire en XUL.

Bien sûr, ce n'est encore qu'une beta... Mais c'est un très bon exemple supplémentaire d'usage des technologies Mozilla !

À quand Gmail en XUL ?

mercredi, mai 30 2007

Amélioration des templates Xul

Neil Deakin avait amélioré il y a plusieurs mois déjà le moteur de template XUL : il permet ainsi de pouvoir utiliser des sources de données autre que RDF. Il suffit de réaliser un composant qui sert de "plugin", respectant une interface précise, pour pouvoir fournir au template des données en provenance d'une base de donnée, d'un fichier xml etc..

Le seul souci, c'est que ce n'est pas encore très opérationnel, à cause du bug 321170 : le comportement de l'attribut datasources, qui permettait d'indiquer l'url du fichier RDF, n'a pas été modifié et de ce fait, on ne peut pas y indiquer l'url d'un autre type de source de donnée. Et comme c'est lors de l'analyse de cet attribut que le moteur de template déclenche la génération du contenu, et donc appel les composants "plugins", le nouveau système est en fait inutilisable en dehors de RDF.

Je m'en suis rendu compte quand j'ai voulu m'occuper du plugin pour Storage/Sqlite (bug 321172). Donc en plus de ce bug 321172, je me suis attelé au bug 321170. J'espère résoudre ces bug assez rapidement. Ce serait dommage qu'on n'ait pas tout ça dans Gecko 1.9/Firefox 3.0. Sachant que j'ai aussi sur le feu, entre autres choses, la gestion des formulaires dans Jelix, le nouveau validateur dans Etna... ;-)

- page 1 de 4