blog.virgule.info

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

Faceboo²

La nouvelle version de Facebook est super... Enfin, niveau perfs, c'est pire qu'avant. Petit extrait de ce que j'ai vu en allant paramétrer mon compte:

<link type="text/css" rel="stylesheet" href="/rsrc.php/v2/114100/css/editor.css" />
<link type="text/css" rel="stylesheet" href="/rsrc.php/v2/108397/css/dialog.css" />
<link type="text/css" rel="stylesheet" href="/rsrc.php/v2/109851/css/account.css" />
<link type="text/css" rel="stylesheet" href="/rsrc.php/v2/114717/css/components.css" />
<link type="text/css" rel="stylesheet" href="/rsrc.php/v2/19905/css/typeahead.css" />
<link type="text/css" rel="stylesheet" href="/rsrc.php/v2/113120/css/typeaheadpro.css" />
<link type="text/css" rel="stylesheet" href="/rsrc.php/v2/119661/css/dialogpro.css" />
<link type="text/css" rel="stylesheet" href="/rsrc.php/v2/121512/css/base.css" />
<link type="text/css" rel="stylesheet" href="/rsrc.php/v2/117220/css/ubersearch.css" />
<link type="text/css" rel="stylesheet" href="/rsrc.php/v2/111621/css/intl.css" />
<link type="text/css" rel="stylesheet" href="/rsrc.php/v2/121396/css/presence/presence.css" />
<link type="text/css" rel="stylesheet" href="/rsrc.php/v2/121073/css/UIContextualHelp.css" />
<link type="text/css" rel="stylesheet" href="/rsrc.php/v2/118996/css/chat/chat.css" />
<link type="text/css" rel="stylesheet" href="/rsrc.php/v2/118362/css/chat/status.css" />
<link type="text/css" rel="stylesheet" href="/rsrc.php/v2/118515/css/status.css" />
<link type="text/css" rel="stylesheet" href="/rsrc.php/v2/120565/css/menubar.css" />
<link type="text/css" rel="stylesheet" href="/rsrc.php/v2/121259/css/dropmenu.css" />
<link type="text/css" rel="stylesheet" href="/rsrc.php/v2/119461/css/universal_search.css" />
<link type="text/css" rel="stylesheet" href="/rsrc.php/v2/111198/css/locale_footer.css" />
 
<script type="text/javascript" src="/rsrc.php/v2/120365/js/lib/util/alert-extensions.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/121439/js/lib/type/function.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/117084/js/lib/util/stack.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/117662/js/lib/type/string.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/100038/js/lib/string/escape.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/119048/js/lib/string/sprintf.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/119048/js/lib/util/util.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/119473/js/lib/ua/ua.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/119182/js/lib/util/bootloader.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/118463/js/lib/event/extensions.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/120977/js/lib/event/onload.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/83911/js/lib/ua/adjust.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/120325/js/lib/event/arbiter.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/121055/js/lib/type/array.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/119649/js/lib/type/object.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/119649/js/lib/core.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/113691/js/lib/dom/form.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/112639/js/lib/ui/animation.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/119951/js/dialogpro.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/87935/js/networks.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/94345/js/network_actions.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/94345/js/editnetworks.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/75963/js/editlanguages.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/112639/js/page/edit_account.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/119649/js/lib/prelude.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/121000/js/lib/event/link_controller.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/98848/js/lib/ua/cookie.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/95536/js/lib/string/misc.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/117281/js/lib/string/uri.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/120846/js/lib/math/vector.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/86410/js/lib/math/extensions.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/116287/js/lib/type/list.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/112714/js/lib/util/augment.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/83874/js/lib/dom/html.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/112639/js/lib/dom/misc.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/119649/js/lib/dom/dom.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/83478/js/lib/dom/control.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/103430/js/lib/dom/controls/text_input.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/117544/js/lib/dom/controls/text_area.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/120846/js/lib/dom/css.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/119185/js/base.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/120645/js/lib/net/async.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/118950/js/intl.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/84002/js/lib/net/async_signal.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/118792/js/key_event_controller.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/120645/js/lib/ui/dialog.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/121439/js/error_data.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/115471/js/support/json.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/105685/js/swfobject.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/120056/js/status.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/116870/js/presence/cookie_manager.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/116870/js/presence/channel.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/120325/js/presence/presence.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/116870/js/presence/updater.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/118362/js/presence/notifications.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/119402/js/lib/ui/drag.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/120810/js/lib/ui/sort.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/121055/js/presence/applications.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/93872/js/lib/string/emote.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/117031/js/lib/util/sound.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/116873/js/chat/tabs.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/118996/js/chat/chat_display.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/118362/js/chat/status_control.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/121052/js/lib/ui/typeaheadpro/typeahead_source.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/116870/js/chat/buddy_list_typeahead.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/118362/js/chat/buddy_list.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/121056/js/chat/tabs_slider.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/112492/js/redesign-feedback.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/109415/js/lib/math/rect.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/118468/js/flyout_menu.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/115284/js/menubar.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/121405/js/lib/ui/typeaheadpro.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/119461/js/lib/ui/typeaheadpro/search_typeaheadpro.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/102180/js/lib/ui/typeaheadpro/sources/static_source.js"></script>
<script type="text/javascript" src="/rsrc.php/v2/109250/js/lib/ui/typeaheadpro/sources/search_friend_source.js"></script>

Sérieusement, c'est incroyable. Du jamais vu. Le degré 0 de l'optimisation des performances. Près d'une centaine de fichiers externes, soit autant de requêtes HTTP, chargés dès le <head> (empêchant donc l'utilisateur de voir quoi que ce soit tant que tout ce bordel n'est pas chargé), totalisant plusieurs centaines de kilo-octets de script et CSS. Chez moi, avec firebug activé, ca met plus de 30 secondes à se charger.

Pourtant, les ressources sur le sujet existent. Les solutions sont la. Yen a même qui font des ateliers sur le sujet... Alors, au boulot!

Faceboo!

Bon, histoire de pas mourir idiot, je re-teste facebook à l'occasion de leur redesign... Je lance le truc de récupération de password pour retrouver mon vieux compte que j'ai utilisé 5 minutes ya 67 mois, et la, je vois mon Firefox qui s'excite à transférer une tonne de trucs depuis login.facebook.com ... Et pour cause! Voila un petit bout de la source:

<link type="text/css" rel="stylesheet" href="/rsrc.php/106234/css/login.css" />
<link type="text/css" rel="stylesheet" href="/rsrc.php/106650/css/editor.css" />
<link type="text/css" rel="stylesheet" href="/rsrc.php/39930/css/dialog.css" />
<link type="text/css" rel="stylesheet" href="/rsrc.php/104778/css/dialogpro.css" />
<link type="text/css" rel="stylesheet" href="/rsrc.php/111255/css/base.css" />
<link type="text/css" rel="stylesheet" href="/rsrc.php/108104/css/ubersearch.css" />
<link type="text/css" rel="stylesheet" href="/rsrc.php/102900/css/typeaheadpro.css" />
<link type="text/css" rel="stylesheet" href="/rsrc.php/106898/css/intl.css" />
<script type="text/javascript" src="/rsrc.php/106267/js/lib/util/bootloader.js"></script>
<script type="text/javascript" src="/rsrc.php/83911/js/lib/ua/ua.js"></script>
<script type="text/javascript" src="/rsrc.php/103533/js/lib/type/string.js"></script>
<script type="text/javascript" src="/rsrc.php/100038/js/lib/string/escape.js"></script>
<script type="text/javascript" src="/rsrc.php/94393/js/lib/string/sprintf.js"></script>
<script type="text/javascript" src="/rsrc.php/104485/js/lib/util/util.js"></script>
<script type="text/javascript" src="/rsrc.php/100890/js/lib/event/extensions.js"></script>
<script type="text/javascript" src="/rsrc.php/102557/js/lib/event/onload.js"></script>
<script type="text/javascript" src="/rsrc.php/83911/js/lib/ua/adjust.js"></script>
<script type="text/javascript" src="/rsrc.php/107392/js/lib/prelude.js"></script>
<script type="text/javascript" src="/rsrc.php/109129/js/lib/type/array.js"></script>
<script type="text/javascript" src="/rsrc.php/101636/js/lib/type/object.js"></script>
<script type="text/javascript" src="/rsrc.php/103541/js/lib/type/function.js"></script>
<script type="text/javascript" src="/rsrc.php/102585/js/lib/event/link_controller.js"></script>
<script type="text/javascript" src="/rsrc.php/98848/js/lib/ua/cookie.js"></script>
<script type="text/javascript" src="/rsrc.php/95536/js/lib/string/misc.js"></script>
<script type="text/javascript" src="/rsrc.php/104760/js/lib/string/uri.js"></script>
<script type="text/javascript" src="/rsrc.php/108234/js/lib/math/vector.js"></script>
<script type="text/javascript" src="/rsrc.php/108234/js/lib/math/rect.js"></script>
<script type="text/javascript" src="/rsrc.php/86410/js/lib/math/extensions.js"></script>
<script type="text/javascript" src="/rsrc.php/83874/js/lib/dom/html.js"></script>
<script type="text/javascript" src="/rsrc.php/107299/js/lib/dom/misc.js"></script>
<script type="text/javascript" src="/rsrc.php/109548/js/lib/dom/dom.js"></script>
<script type="text/javascript" src="/rsrc.php/83478/js/lib/dom/control.js"></script>
<script type="text/javascript" src="/rsrc.php/103430/js/lib/dom/controls/text_input.js"></script>
<script type="text/javascript" src="/rsrc.php/107265/js/lib/dom/controls/text_area.js"></script>
<script type="text/javascript" src="/rsrc.php/93653/js/lib/dom/css.js"></script>
<script type="text/javascript" src="/rsrc.php/109886/js/base.js"></script>
<script type="text/javascript" src="/rsrc.php/103539/js/lib/dom/form.js"></script>
<script type="text/javascript" src="/rsrc.php/109886/js/lib/net/async.js"></script>
<script type="text/javascript" src="/rsrc.php/84002/js/lib/net/async_signal.js"></script>
<script type="text/javascript" src="/rsrc.php/106898/js/intl.js"></script>
<script type="text/javascript" src="/rsrc.php/101805/js/lib/ui/animation.js"></script>
<script type="text/javascript" src="/rsrc.php/107632/js/dialogpro.js"></script>
<script type="text/javascript" src="/rsrc.php/106392/js/key_event_controller.js"></script>
<script type="text/javascript" src="/rsrc.php/111979/js/lib/ui/dialog.js"></script>
<script type="text/javascript" src="/rsrc.php/101899/js/error_data.js"></script>
<script type="text/javascript" src="/rsrc.php/86410/js/support/json.js"></script>

Soit 46 requêtes HTTP, et sur le même domaine! En voila certains qui devraient bosser à telefun ou lire un peu des articles sur les performances web... Je peux même leur filer l'URL de ma co-présentation à Paris-Web 2007...

Edit: Ah, et en fait, sans JavaScript... page blanche. Super!

Futur du JavaScript...

2 liens repiqués sur le planet mozilla sur le futur de JavaScript, à lire:

Paris Web 2007

C'est surement une très mauvaise idée, mais Rik et moi on animera un atelier à Paris Web 2007. Eh ouais. Même que ya une bio de moi, et que j'ai du trouver une photo pour l'accompagner, tout un programme.

Internet Explorer, outils à garder sous le coude

Et oui, encore un article sur le développement web avec Internet Explorer. C'est facile de trouver des outils pour Firefox et compagnie, moins pour IE, donc dès que j'en trouve je le poste :-) Et donc, pas le temps de faire un article complet dessus, mais ce post est très intéressant: From Microsoft TechEd 2007: Web Development Tools for Internet Explorer

Emploi & Web

On a vaguement abordé la fuite des cerveaux pendant la campagne présidentielle (je vous rassure ya que la première phrase qui est politique dans ce billet, lisez la suite). Ce concept marrant qui veuille qu'un cerveau nourri au grain et entraîné en France doive rester sur place à tout prix, parce que, euh, parce que voila quoi, merde, ya pas de raisons pour que ca soit toujours les autres qui en profitent ! Moi, j'aime bien manger des cerveaux, mais ce que je préfère, c'est parler de web. Alors parlons de web et de cerveaux.

Le Web (ca fait classe avec les majuscules, trouvez pas?) est en plein essor depuis un moment. Je regarde un peu autour de moi depuis quelque temps, par curiosité, et ca fait un bout de temps que ca embauche à tout va, au moins en Europe. Ce n'est pas seulement l'effet Web 2.0 je pense, il ya pas mal de boites classiques aussi. Contrairement à il ya quelques années, les jobs disponibles ne sont pas juste des stages non rémunérés, des CDDs ou des postes d'esclaves dans des SSII, même si il yen a encore beaucoup; Non, des vrais boulots, pas trop mal payés, et intéressants au moins sur le papier.

Le rapport avec les cerveaux ? En France, dans le petit monde de l'informatique, et en particulier du web, bah on en manque terriblement. Les jobs dont je parle plus haut, j'en vois plein autour de moi, et pas seulement dans ma propre boite, ils restent disponibles pendant des siècles. Peu de candidatures, encore moins de candidatures de gens compétents.

Je vais prendre Telefun, boite qui m'embauche, comme exemple parce que c'est celui que je connais le mieux, mais pour avoir discuté avec quelques gens dans le métier, ce n'est pas du tout un cas isolé, même si on a quand même pas de bol :-). Donc, Telefun, boite derrière Skyblog et autres divers sites, embauche. Depuis un bout de temps: ca fait un peu moins d'un an que on tente de trouver des développeurs pour agrandir l'équipe dédiée à Skyblog (qui est hélas relativement réduite) dont je fais partie; sur cette presque année, on s'est sérieusement penchés sur le problème ces 6 derniers mois. Durant ce laps de temps, relativement peu de candidatures, pas mal de candidats annulant sans explications ou ne donnant pas suite à nos messages, au final on a du voir environ une vingtaine de personnes maximum. Sur ces 20, on en a embauché 2[1], et encore, un en stage (il le voulait).

Ou sont passés les autres ? (Non, pas la). A la trappe: pas assez compétents. En effet, pour éviter les mauvaises surprises, bohwaz et moi avons développé un mini-test à l'embauche. Rien de bien sérieux, croyait-on: un mini système de commentaires, avec comme seule vraie exigence le fait de fonctionner et d'être relativement sécurisé. Le tout en 45 minutes. Une base, 4 champs, 200 lignes de code et c'est plié. Le résultat nous a fait très peur, et continue de m'effrayer: la plupart des candidats ont lamentablement échoué, même avec le double de temps. On a eu le droit à tout, avec, dans le désordre:

  • Code ultra complexe, super abstrait, plein de fichiers, mais qui ne fait absolumment rien ou presque
  • Code dans un seul fichier sans fonctions
  • HTML dégueulasse (C'était pas le sujet, mais bon, <center>, <font> et compagnie, non quoi. Heureusement relativement peu nous on fait le coup)
  • Aucune protection contre les injections SQL
  • Aucune protection contre les injections d'HTML/JavaScript

Personne n'est parfait, et nous sommes nous aussi coupables de ce genre de choses de temps à autre. Mais la plupart semblaient découvrir les problématiques que nous soulevions dans leur code! Une bonne partie n'avaient aucune idée de quoi faire lorsque les magic_quotes sont désactivées (La plupart du temps, le simple fait de mettre un simple guillemet empêchait totalement de poster le commentaire: nous avions désactivé les magic_quotes sur la machine de test pour les obliger à utiliser des fonctions d'échappement). Le pire étant que certains se targuaient d'avoir plusieurs années d'expérience, d'avoir bossé dans des grosses boites ou des SSII responsables de très gros contrats - et je suis convaincu que aucun ne mentait. J'en ai discuté avec plusieurs personnes, qui m'ont dit avoir rencontré le même genre de candidats, et pas seulement en PHP, coté JSP aussi par exemple...

Alors voila, c'est cool, le web embauche (d'ailleurs Telefun aussi :-)), mais les cerveaux, ils sont déjà partis les enfants, ou alors ils ont déjà des jobs. Tout ca m'énerve pas mal, va falloir aller les chercher ailleurs si ca continue...

PS: On se console comme on peut, mais ya pas que les cerveaux qui partent :-)

Notes

[1] Techniquement, on en a embauché un peu plus que ca, mais soit pour d'autres sites moins sensibles, soit sans leur faire passer le test, soit uniquement pour de l'intégration et non du dev. Je me concentre uniquement sur la partie dev dédiée à Skyblog ici.

7 millions de RSS...

... et moi, et moi, et moi. Et une surprise supplémentaire lundi, si tout va bien.

Yet Another JavaScript Library Without Documentation

Dean Edwards se met aux frameworks JavaScript. Je suis généralement contre, mais celui la a l'air pas mal du tout, rapide et léger. A tester.

On Having Layout, Fiddler: soirée Internet Explorer !

Puisqu'il ya souvent des gens qui l'oublient, puisque le problème se pose encore de manière différente dans IE7, piqure de rappel: On Having Layout explique un comportement un peu mystique au départ de IE, relativement essentiel à comprendre malheureusement. Et puisque moi je l'oublie tout le temps, fiddler, outil merveilleux sous IE/Windows pour voir un peu ce qui se passe au niveau HTTP, voire plus loin.

Panda

Firefox 2 c'est sorti.
Ouais j'ai l'air de laguer un peu comme ça, mais en fait la sortie m'a fait ni chaud ni froid, vu que ça faisait déjà un moment que j'étais dessus. Un peu comme la edgy eft, vous voyez?
Bon bref, en fait, c'est juste histoire de placer cet adorable petit bouton de Pascal (Bon..bonjourr. moi c'est Pascal C, j'ai.. j'ai.. j'ai craqué! J'ai fait des jolies bannières pour firefox!! :( . Pas grave pascal, ce qui compte, ce que tu te motive pour ne plus recommencer. Allez, on est tous avec toi, tu vas y arriver!) tout vert que je trouve parfaitement assorti à la couleur de mes billets.
Parceque la mode c'est important. Bien sûr si vous me lisez d'un aggrégateur comme liferea ou d'une boîte sans bizness plan (c'est la mode de dire ça aussi) Netvibes, vous pouvez pas tout à fait vous rendre compte de ce qui est écrit au dessus et j'ai envie de vous dire... quel dommage mes amis!

Je tiens à préciser à la créature qui me sert de geek et de colloc' de blog, Mat, qu'il existe aussi une version rigolote, en bleu, assortie à SES billets...
Et aussi, puisqu'on parle de couleurs, que je suis en train de gagner la guerre des pixels de billets de ce mois-ci mais qu'il se défend bien ;)

PS: je tiens à préciser que je taquine le goujon (enfin le poisson rouge en l'occurence ;) ) et que j'utilise netvibes quotidiennement. Halloween étant passé, je vais d'ailleurs songer à reprendre mon thème de d'habitude, dont je vous laisse deviner la couleur (trichez pas). Une photo de moi, prise par Michel à la dernière moz party atteste d'ailleurs que j'en fais implicitement de la promo, regardez bien...

Du Javascript efficace

Tout comme le récent article sur le sujet chez les développeurs de IE, cet article chez le tout nouveau portail pour développeurs de Opera est indispensable pour tout développeur JavaScript. Lisez le et fouettez vous pour chaque truc que vous ne faisiez pas avant de le lire.

CSS Sprites, Reloaded

Si vous faites un peu beaucoup de CSS, vous avez forcément lu un jour cet article de Dave Shea sur les découpages d'images en CSS, ou sa traduction chez pompage. L'idée est extremement séduisante, ne serait ce que parceque le moins d'images à charger votre serveur a, le mieux il se porte. Je voulais me pencher la dessus dans le cadre de mon boulot mais sans outil pour gérer tout ca, c'est l'horreur: il faut repérer les coordonnées de chaque image, écrire les règles CSS... et recommencer à chaque fois qu'on veut ajouter une image. J'ai donc écrit ce petit script python pour gérer tout ca.

Lire la suite...

Selecteurs CSS et support des navigateurs

Ce test et les résultats sont impressionnants. Lecture obligatoire pour tous les gens qui font du CSS!

Edit: Meme si je doute avoir la moindre chance, vous pouvez toujours votez pour la niouze que j'ai fait sur Digg :)
Edit2: Le test a été mis à jour.

IE7 et le DOM, le retour

Confirmation du fait que il n'y aura pas grand chose de nouveau sous la main coté script dans IE7: What's New in Internet Explorer 7 (Script). On et mal barrés je vous dis...

Edit: Ya quand meme des bonnes nouvelles.

Petits articles interessants pour développeurs web...

Quelques articles récents que tout développeur web devrait lire:

  • The FOUC Problem Ecrit par David Hyatt, ex développeur mozilla, maintenant développeur safari, l'article explique d'ou vient le FOUC - Flash Of Unstyled Content - que l'on voit parfois avec certaines pages dans certains navigateurs. Il explique aussi pourquoi certains y sont moins sensibles que d'autres et ce que ca a comme impact. Tres interessant si vous voulez savoir pourquoi tel ou tel navigateur a l'air plus rapide a afficher qu'un autre, par exemple.
  • IE + JavaScript Performance Recommendations - Part 1 Ecrit par des développeurs de IE7, cet article, premier d'une série qu'on espere longue, donne des astuces pour accelerer votre code JavaScript dans IE. Beaucoup de développeurs font du JavaScript n'importe comment, et, meme si tout n'est pas rose dans cet article (utilisation de document.all, conseil sur les pointeurs sur fonctions a prendre avec des pincettes) c'est un bon début.
  • Yahoo Sign-in Seal L'idée est très intéressante pour se débarasser des faux sites essayant de piquer vos identifiants...
  • Scope in JavaScript Si vous faites du JavaScript vous êtes sensé déjà savoir à peu pres tout ca, mais ca fait pas de mal de le rappeler.
  • Voir aussi l'article de Maurice sur le Développement AJAX avec Internet Explorer
  • IE7: Old Bugs For New Niveau CSS et IE7, c'est loin d'etre le monde parfait que Microsoft essaye de faire croire à tout le monde...
  • Understanding HTML, XML and XHTML Explique notamment pourquoi des choses comme <div /> sont interdites en XHTML. Utile si vous n'avez pas trop l'habitude du XHTML.

Safari, Opera et IE7 sont dans un bateau.

Safari devient potable en DOM/JavaScript. Ils rattrappent leur retard, maintenant ils sont passés sous la barre des 6 ans de décalage avec Mozilla. Peut etre qu'ils supporteront un jour le DOM CSS & Style correctement ? Notons que opera 9 n'a toujours pas de getter/setter, prétend supporter a 100% le DOM Style alors que c'est n'importe quoi, et que IE7, de son coté, ne change strictement rien dans le support déplorable du DOM/JavaScript de IE... Et apres, les gens disent que JavaScript, ca pue...

Edit: Oublié de préciser que XMLHttpRequest dans IE7 ne sera pas aussi natif qu'ils veulent nous le faire croire: il est impossible de toucher a l'objet (on ne peut pas, comme sur tous les autres objets en javascript, rajouter des propriétés a la volée en touchant au prototype), ce qui indique que c'est probablement juste un ActiveX planqué.

Edit 2: Visiblement les développeurs d'opera, ou leur communauté, ou les 2, cherchent à m'énerver. Je comprends pas comment le support d'un working draft du whatwg peut etre considéré comme une transformant opera dans leader de ajax alors qu'il ya tellement de trucs dans JavaScript 1.5, 1.6 ou 1.7 qui attendent toujours d'être implémentés...

Convertisseur em vers pixels

J'ai essayé de faire un truc qui ressemble vaguement à ce que demande Emmanuel Clement dans son billet sur le coup du 62.5%, en python. C'est bourrin, ca a vaguement l'air de marcher, mais j'ai pas plus testé que ca. Feedback welcome, parceque moi c'est un truc dont je me fiche un peu à la base (je suis farouchement contre le principe meme de toucher à la taille initiale du body, étant moi meme réglé sur une taille de police de base dans mon navigateur de 12px et non 16, valeur par défaut utilisée un peu partout), donc je n'ai aucune idée de si ca correspond ou non à ce qui est demandé :)

Lire la suite...

TreeWalker, XPath, getElementsByTagName et compagnie sont dans un bateau

Dans mon précédent post sur le sujet, je suis resté quelque peu évasif sur l'interet de mon code et sur les diverses optimisations possibles: je voulais juste exposer le bug que j'avais rencontré avec Konqueror.

Ici, nous allons reprendre tout depuis le début. Le probleme est donc le suivant: Soit un article de linuxfr, avec zero, un ou plusieurs commentaires. Chaque commentaire est dans un <div class="comment ...">. Il faut effectuer diverses actions sur chaque commentaire trouvé, tel le cacher ou non selon son score, le mettre a part si il est nouveau, etc.

Lire la suite...

Konqueror et le DOM

Tous les 2 jours a peu pres, quelqu'un la ramene en disant que konqueror supporte Acid2, et que donc par conséquence il a un excellent support des standards, pas comme firefox par exemple... Je ne reviendrais pas sur le fait que passer Acid2 ne veut strictement rien dire sur le support CSS des navigateurs qui y parviennent, mais plutot sur un autre point de détail: ya pas que le CSS dans la vie ! (nota: le pire dans l'histoire étant que Acid 2 ne concerne pas uniquement CSS, c'est un peu un fourre tout, meme si les parties interessantes sont surtout au niveau du CSS)

Par exemple, un point qui devrait interesser de plus en plus de gens en ce moment, avec tout ce buzz autour de du Web2, c'est le support DOM et EcmaScript. En l'occurence, je vais vous parler d'un truc génial que personne n'utilise sur le web, puisque IE ne le supporte pas: le Document Object Model Traversal. Sous ce nom se cache des interfaces pour naviguer dans un document, et executer diverses actions sur une ou plusieurs parties de celui-ci.

Voila donc un petit script tres simple, qui parcourt le document à la recherche de Nodes tres précises. J'utilise une variante de ce script dans ma nouvelle version de la DLFPToolbar, et cela accelere grandement les choses (encore plus dans une version que je n'ai pas encore publié mais sur laquelle je reviendrais plus tard de toutes manieres, parceque elle montre tout l'interet de passer par un Treewalker plutot que par un systeme parsant a la main):

window.onload = beamMeUp;

function beamMeUp()
{
	function acceptNode(node)
	{
		if (node.hasAttribute("class"))
		{
			if (node.className == "ok")
				return NodeFilter.FILTER_ACCEPT;
		}
		return NodeFilter.FILTER_SKIP;
	}
	
	var treeWalker = document.createTreeWalker(document.body, 
	                                           NodeFilter.SHOW_ELEMENT,
	                                           acceptNode,
	                                           false);
	if (treeWalker)
	{
		var node = treeWalker.nextNode();
		
		while (node)
		{
			alert(node);
			node = treeWalker.nextNode();
		}
	}
}

Grosso Modo, ca parcourt le document a la recherche d'elements avec class="ok", et ca alert() a chaque fois que ca en trouve un. En effet, vous l'aurez compris en regardant la spec citée plus haut, la fonction acceptNode() est un filtre, appellé automatiquement, de sorte que lorsque je parcourt les Nodes de mon Treewalker, je ne vois que les Nodes pour lesquelles ma fonction a renvoyé NodeFilter.FILTER_ACCEPT.

Enfin ca, c'est la théorie.

Dans Opera, Safari, Firefox, ca marche tres bien. Dans la derniere version de Konqueror, ca alert() a chaque coup, la fonction acceptNode() n'est jamais appellée. Si quelqu'un a une solution, je veux bien l'entendre, je n'ai pas tres envie de rappeller ma fonction a la main a chaque fois. Remarquez, ya du mieux, avant, toute mention d'un Treewalker lui donnait des boutons (et déjà à l'époque c'était moi qui avait trouvé le bug, je me demande si ya d'autres gens qui s'interessent un peu au support DOM de konqueror :-)

PS: J'ai pour le moment la flemme de reporter le bug, pour ceux qui voudraient le faire avant que je finisse par créer un compte sur le bugzilla de KDE, j'ai mis mon testcase en ligne.