Hanblog

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

mardi, juin 3 2008

Nouveautés Safari 3.1 : Selectors API

Présentation

Comme promis, on va parler de quelque chose de bien plus intéressant pour accélérer vos applications web. Une attente de longue date, la fameuse et célèbre Selectors API ! C'est l'équivalent de $$ en Prototype et Mootools, $ en jQuery, YAHOO.util.Selector.query en YUI et... document.querySelectorAll pour base2. [1] Pour ceux qui connaissent, cela permet donc de sélectionner un liste d'éléments qui correspondent à un sélecteur CSS.

L'exemple du billet précédent devient donc document.querySelectorAll('.post'). Une différence à noter entre ces deux méthodes : querySelectorAll retourne une liste statique, un tableau en quelque sorte.

Regardons un peu les performances :

var start = new Date(); for (var i = 0; i < 1000; i++) var list =document.querySelectorAll('.post'); new Date() - start
104
var start = new Date(); for (var i = 0; i < 1000; i++) var list =document.getElementsByClassName('post'); new Date() - start
2

C'est sans appel, pour un sélecteur simple, il vaut mieux utiliser une méthode spécialisée. J'ai fait quelques autres tests. De manière générale, si vous voulez traversez simplement le DOM, tenez-vous en aux autres solutions. Cette méthode sera peut-être optimisée plus tard, ce n'est que la première implémentation.

Évidemment, le navigateur ne reconnaîtra que les sélecteurs qu'il connaît. Pas de problème avec Safari 3.1 puisqu'il connaît tous les sélecteurs disponibles à ce jour (on en reparlera plus tard, peut-être). Par contre, avec IE8, ce sera plus compliqué. Oui oui, IE8 implémentera cette API ! Et comme cette API a été bien conçue, le navigateur est censé renvoyer une exception lorsqu'il ne connaît pas un sélecteur. Le monde est presque parfait !

Les librairies

  • Prototype : dans la version de dev (un appel à un div vide puis le vrai appel)
  • YUI : rien
  • mootools : rien
  • base2 : Oui, en dev.
  • jQuery : rien.

Le piège.

Le comportement de cette API est pour l'instant trompeuse. Lorsque l'on utilise cette méthode sur un élément, elle va chercher tous les éléments du document qui correspondent puis ne retourne que ceux qui sont des enfants de l'élément. Le comportement des librairies (et qui me semble plus naturel) est d'appliquer le sélecteur à partir de l'élément en question. John Resig en parle bien mieux que moi

Les petits plus

Que peut-on faire de marrant avec cette API ? On peut par exemple récupérer tous les liens présents sur la page qu'a visité l'utilisateur. Un simple document.querySelectorAll(':visited') fera l'affaire.

On peut aussi récupérer la liste de tous les éléments qui sont actuellement survolés par l'utilisateur. document.querySelectorAll(':hover') vous donnera satisfaction.

Notes

[1] Oui, cette librairie est tellement bien qu'il n'y a pas besoin d'apprendre autre chose que les standards

mercredi, mai 28 2008

Google Ajax Librairies : une bonne idée ?

Google vient donc d'annoncer la possibilité de servir 5 librairies javascripts depuis ses serveurs.

L’idée d’avoir un dépôt central est plutôt intéressante. Pour avoir un cache relativement partagé entre les sites, être sûr de la configuration HTTP au poil, bénéficier du CDN de Google. Après, il faut aussi voir que l'accès à votre site sera conditionné par la disponibilité de ses serveurs. Mais il semble que ce soit la tendance... (Amazon S3)

Par contre, Google propose de s'occuper de charger la dernière version à travers son API Javascript. C’est une très très mauvaise idée que d‘avoir la version la plus récente de la libraire. Il faut toujours tester ses applis avant de mettre la nouvelle version d’une librairie en production. À la rigueur pour les versions mineures, et encore.

Après, cela va certainement défavoriser les librairies non sélectionnées. Des librairies comme Base2, Mochikit ou YUI ne sont pas listée par exemple.

Enfin, Google a annoncé vouloir travailler avec les éditeurs de navigateurs pour intégrer certaines librairies directement dans le navigateur. Si jamais cela se réalise, ça va être marrant pour les versions et encore plus discriminant pour les librairies non incluses. Les développeurs choisiraient non pas la librarie la plus légère ou la plus performante mais la plus souvent intégrée dans les navigateurs.

Google ferait mieux de travailler avec les éditeurs pour améliorer le support des standards et l’implémentation des prochains standards. Car un code en C, C++ ou autre sera toujours plus performant que sa version Javascript.

En résumé : idée peut-être intéressante dans l’état actuel d'implémentation des standards mais attention à la discrimination et surtout, continuer à améliorer le support des standards.

jeudi, avril 10 2008

Nouveautés Safari 3.1 : getElementsByClassName

Allez, on continue dans Webkit (parce que ça me botte en ce moment). Je ne suis pas tombé sur beaucoup d'articles en français résumant les nouveautés de Safari 3.1. Et comme on n'est jamais mieux servi que par soi-même...

Commençons par getElementsByClassName. Kékecé ? À l'instar des getElementById, getElementsByTagName, getElementsByName c'est une méthode pour récupérer des éléments du DOM selon un critère, en l'occurence la ou les classes. Par exemple, sur la page d'accueil de ce blog, document.getElementsByClassName('post').length renvoie 20 mais document.getElementsByClassName('post odd').length renvoie 10. Comme toutes ces consœurs, cette méthode marche aussi à partir d'un élément du DOM, restreignant ainsi les résultats.

Il faut faire attention en manipulant la liste renvoyée. Elle est "live", c'est-à-dire que tout changement dans le DOM la modifie (comme getElementsByTagName). Exemple:

var list = document.getElementsByClassName('post');
for (var i=0; i < list.length; i++)
{
  list[i].parentNode.removeChild(list[i]);
  alert(list.length);
}

En exécutant cette fonction sur la page d'accueil, on verra disparaître un billet sur deux et la NodeList diminuera au fur et à mesure. Attention donc en manipulant les résultats. Pour être sûr de ce qui va se passer, on peut recopier le tout dans un tableau classique, mais attention aux performances.

Cette méthode est actuellement supportée par Safari 3.1 (of course) et bientôt Firefox 3 et Opera 9.5. Elle fait partie du brouillon pour HTML 5.

Vous voyez évidemment à quoi ça sert ? Ça accélère considérablement tous les accès qu'on peut faire, si on l'utilise. Et comme de plus en plus de gens utilisent des librairies pour ne pas s'embêter avec les compatibilités entre navigateurs, on va vérifier qu'on bénéficie bien de cette amélioration quand disponible. On va surtout étudier les méthodes du style $ ou $$, qui permettent de sélectionner des éléments à partir d'un sélecteur CSS

Bilan : Ah bah c'est pas génial. Si j'étais mesquin, je dirais que c'est une raison de plus pour ne pas utiliser de librairies Javascript. À leur décharge, ce n'est pas vraiment nécessaire puisqu'elles utilisent XPath lorsque c'est disponible et c'est disponible sur tous les navigateurs ayant cette méthode. Pour jQuery, c'est regrettable, puisqu'elle n'a pas d'implémentation XPath. Bien évidemment, XPath est plus rapide que DOM, mais tout de même plus lent que getElementsByClassName.

Mais finalement, on verra bientôt qu'il y a d'autres méthodes pour nous aider.

lundi, avril 7 2008

Mon premier bug chez Webkit

Depuis un petit moment, je suis de plus en plus près le projet Webkit, le moteur derrière Safari.

Ayant remarqué un bug dans la gestion des évènements sur une interface que j'utilise quasi-quotidiennement, je me suis décidé hier à en faire un joli rapport de bug. J'ai aussi pu traîner un peu sur le salon IRC #webkit et l'accueil était plutôt agréable. J'ai pu poser quelques questions et apprendre qu'un nouveau moteur Javascript est en cours d'écriture, que le WebInspector était en cours de refonte.

En écrivant le test minimal pour le bug, j'ai aussi remarqué que la taille minimum d'un élément <select> sur plusieurs lignes est de 4 lignes. Au premier abord, on peut se dire que ce n'est pas normal par rapport à la spécification. Mais c'est un bon point ergonomique puisqu'il est plus facile d'avoir du contexte sur 4 lignes et qu'il est impossible de présenter une barre de défilement sur 2 petites lignes. Un comportement à retenir si l'on souhaite utiliser de petites listes de sélection.

vendredi, janvier 25 2008

Please, don't hurt the web, des solutions

Le web continue à se remuer après l'annonce de Microsoft. Anne van Kesteren explique d'ailleurs très clairement le problème que ces modes causent. Certains prépare des solutions de boycott, d'autres cherchent une solution alternative pour coller aux besoins de l'équipe IE tout en favorisant les standards. La solution de David Baron est ma préférée. Comme je le disais, la principale inquiétude de Microsoft tourne autour des Intranet. Laissons donc le reste du web bénéficier d'un vrai rendu standard. Les administrateurs des réseaux d'entreprises choisiraient quels sites doivent être vus avec un autre moteur que celui de base. Ce n'est pas aussi bien que des modes de rendus très proches qui évoluent ensemble mais on ne peut demander à Microsoft de recommencer le travail sur IE8 depuis le début.

Je suis d'ailleurs tombé sur le meilleur résumé possible de toutes ces discussions.

jeudi, janvier 24 2008

Please, don't hurt the web

IE-LockEt bien il fallait bien ça pour sortir ce blog de sa torpeur : Compatibility and IE8. Je ne ferais pas l'inventaire de toutes les réactions (on peut trouver assez de liens sur le QA Blog du W3C, mais ça fuse de partout. Que ce soit chez Mozilla, Webkit, Opera ou chez les développeurs web. Il y a bien quelques satisfaits tout de même.

On nous explique que ce nouveau mode de choix du rendu a été inventé par pragmatisme. Lorsque l'on était en mode "standard", on utilisait des hacks pour corriger les bugs de IE6. À l'arrivée de IE7, cette technique ne fonctionne plus puisque les hacks de contournement ont été corrigés mais pas les bugs en question. L'équipe de IE s'était dit que les améliorations n'étant disponibles qu'en mode "standard", le web ne serait pas cassé. C'est là que vient le pragmatisme : "faut pas refaire pareil !".

Les pages sont conçues à un moment précis, pour une version précise du moteur de chaque navigateur. Et bien inventons un moyen de fixer ces pages définitivement. Ça part donc sur une bonne intention, pleine de bon sens.

Là où le bon sens déraille, c'est que cela implique que chaque version d'IE devra intégrer toutes les versions précédentes jusqu'à IE6. Est-ce pragmatique, réalisable ? Bien sûr que non. Il y aura toujours des différences de rendu au fur et à mesure, pour s'adapter à une nouvelle version du système d'exploitation, des changements matériels, etc.

Bon, admettons que ce soit possible (oui, faîtes un effort). Je mets donc un tag pour bloquer à IE8. Mais quel IE8 ? Celui de la sortie ou celui un an plus tard avec les corrections de sécurité ? Ça pose encore plein de problèmes comme les frames et iframes mélangeant des pages ne souhaitant pas le même mode de rendu. Ou encore la question des copier/coller pour "widget".

Ce principe de choix du moteur rappelle aussi les très belles heures du web "Conçu pour Internet Explorer en 800x600". Ressortez tous vos gifs animés !

Évidemment, j'espère que Microsoft reviendra sur sa décision. On voit clairement que cette décision a été prise pour les Intranet qui restent encore la quasi chasse gardée de Microsoft vu l'inertie (tout à fait naturelle) des entreprises. Cette décision n'est pas néfaste pour les pages déjà existantes mais pour les prochaines à venir. Le slogan "Don't break the web" regarde en arrière, jamais en avant.

Au fait, comment fait IE8 pour passer le test Acid2 ?

PS : Merci à Sunny pour son logo

Update : Des solutions ?

vendredi, octobre 5 2007

Django-fr sur Webfaction

Depuis 3 semaines, le site de la communauté française Django tourne sur Webfaction. Comme je me suis occupé de la migration, David ayant une todo-list longue comme le bras, je vous propose un petit howto d'une migration Django, SVN et Trac.

Lire la suite...

samedi, juillet 21 2007

Les indispensables sur Mac OS X Tiger

Lundi soir, petit contretemps, le disque dur de mon Macbook affiche quelques erreurs qu'un fsck n'arrive pas à corriger. Pas envie de fouiller pendant des heures et en plus, ça devenait un peu le souk, donc on va repartir sur de bonnes bases. Réinstallation complète. L'occasion de mettre par écrit les quelques petits trucs que j'avais pu glaner au fur et à mesure de ma découverte du système. Ça pourra peut-être servir à d'autres même si c'est centré sur mon utilisation.

Lire la suite...

mercredi, mai 23 2007

Enfin un intérêt à Twitter

J'ai enfin trouvé deux pages intéressantes sur Twitter : la 404 et la maintenance.

Énorme éclat de rire, ça fait du bien.

vendredi, mai 11 2007

Le wifi chez Free, c'est...

génial.

Ou pas.

Depuis maintenant un mois, le wifi de notre Freebox V5 déconne. On aperçoit le réseau mais impossible de se connecter. Après cette première tentative, le réseau disparait. Du côté de la freebox TV, impossible de se connecter en wifi aussi...

On pensait qu'un échange de la partie ADSL suffirait mais au vu des premiers tests de ce soir, c'est la même chose.

Coup de fil de gueulante prévue demain matin !

lundi, janvier 22 2007

Passage au Mac

Pendant ma longue période de silence, je me suis acheté (avec le soutien des parents) un nouvel ordinateur. J'ai profité de l'offre BNP Paribas qui offre une réduction de 250€ sur l'achat du modèle à 1300€ (modèle Core Duo). Après 6 mois d'utilisation, je vais essayer de dresser un bilan au niveau matériel et logiciel.

Lire la suite...

samedi, juillet 22 2006

Quelques astuces pour Gnome

Il va vraiment falloir que je trouve un rythme de croisière pour ce blog sinon, ça ne sert à rien. Aujourd'hui, je vais parler de deux petits trucs pour Gnome.

Lire la suite...

jeudi, juin 1 2006

Linux pour les parents

Comme à chaque fois (ou presque) que je rentre en vacances, mes parents me demandent de réinstaller Windows ("c'est trop lent", "ça marche plus", etc etc), j'ai décidé de les faire passer sous Linux.

Comme j'utilise Ubuntu depuis plus d'un an et que j'en suis très satisfait, c'est cette distribution que j'ai décidé de leur installer. En plus, ça tombe bien, la version "Dapper Drake" est sortie aujourd'hui.

Bon évidemment, j'ai laissé un Windows en état de fonctionnement au cas où ils se sentiraient perdus. Mais comme tout est fonctionnel sous Linux et ce de manière plus simple, je pense qu'ils vont l'adopter. D'ailleurs, la majorité des logiciels qu'ils utilisaient (Firefox, Thunderbird ou OpenOffice.org entre autres) sont disponibles sous Ubuntu.

Il reste des problèmes d'écran (dû à notre matériel qui est défectueux) et des problèmes de Wifi. Pour le deuxième point, je ne sais pas si cela vient de notre configuration ou de la Freebox.

Enfin, je vous conseille la lecture du texte La voiture volante "Long Term Support" de Ploum. Une jolie métaphore filée qui, je l'espère, vous fera comprendre que désormais, Linux est accessible à tout le monde.

Si vous lisez ce texte et que souhaitez plus d'informations, de l'aide ou quoi que ce soit, je suis prêt à vous aider (dans les limites de mes modestes compétences). Contactez-moi par courriel : a.ricaud AT laposte.net.

vendredi, juillet 22 2005

La liberté en informatique expliquée simplement

Au fur et à mesure de ma découverte des logiciels libres, j'essaie de trouver de bonnes vulgarisations pour expliquer ce phénomène à mes contacts. Et bien, je crois avoir trouvé un article tout à fait dans le ton que je recherchais.
C'est suffisament complet, tout en restant simple et intéressant à lire.

Je vous laisse savourer. De la liberté, la face méconnue de l'informatique

lundi, avril 4 2005

Pas facile d'être aveugle

Oui bon, c'est pas nouveau ce que j'ai écrit dans le titre de ce billet. D'ailleurs, la publicité actuelle d'EDF le rappelle bien.

On pourrait penser que devant un ordinateur, les calvaires d'un mal-voyant ou non-voyant diminuent. Pas du tout comme le montre cette vidéo.

Une preuve de plus pour convaincre tous les sites de respecter les normes d'accessibilité.

mercredi, mars 30 2005

Le podcast c'est bon, mangez-en

Vous en avez peut-être déjà entendu parler ou peut-être pas, mais il arrive en force. Après les blogues qui ne sont que des textes et des images, les moblogues qui ne sont qu'un dérivé (peu intéressant à mon avis) des blogues, la grosse évolution actuelle sont les podcasts. Il suffit de rajouter du son.

Et ça apporte énormément. C'est un très bon complément aux radios qui ne diffuse ses programmes qu'à heures précises. Avec un podcast, vous téléchargez le "billet", vous l'écoutez à l'heure que vous souhaitez chez vous ou encore mieux, sur votre baladeur numérique (comme par exemple l'iPod qui a donné son nom à ce type de blogues). On attend bien sûr que les radios s'y mettent. Pour l'instant, elles ne diffusent leurs émissions qu'en direct sur Internet mais le jour où elles proposeront des fichiers, ce sera une évolution de plus dans notre relation à l'information.

Un des premiers podcasts francophone est le podcasteur qui vient de publier son 21ème podcast.

jeudi, février 17 2005

Navigateur obsolète deviendra moderne ?

Ca y est, Billou vient enfin de l'annoncer : son navigateur obsolète va être mis à jour avant la sortie de Longhorn.

D'après l'annonce, cette nouvelle version se concentrera surtout sur la sécurité. Peut-être pourrait-il améliorer la prise en charge de standards définis par le W3C ? Ca n'a pas l'air d'être à l'ordre du jour. Dommage, cela aurait bien collé avec la volonté d'interopérabilité, énoncée il y a quelques jours.
Autre déception, ce nouveau navigateur ne devrait être disponible que sous Windows XP SP2. Et les autres versions de Windows, elles n'ont pas le droit à plus de sécurité ?

Bref, cette annonce montre tout de même que l'arrivée de Firefox, et surtout sa progression importante (Spread Firefox fêtait le cap des 25 millions de téléchargements hier) ont permis une réaction de la part de Microsoft. C'est un point très important dans la volonté de la fondation Mozilla : offrir du choix aux utilisateurs pour que le Web devienne meilleur (oui, bon ça fait un peu bisounours...)

Le communiqué de presse.