Lancement du nouveau frontend Gmail

October 31st, 2007

Aaron Boodman vient d’annoncer sur son blog le lancement du nouveau frontend de Gmail, comme dit plus tôt sur le blog officiel.

Au programme des optimisations en profondeur du code javascript, ce qui va se traduire par une rapidité fortement accrue de l’application.

Il nous fait savoir également que les salariés de Google utilisent eux même Gmail au travail, ce qui n’est pas forcément le cas de toutes les boites qui développent un Webmail.

Enfin, pour l’anecdote, il nous raconte qu’un des développeurs est allé jusqu’à faire un reverse du jscript.dll (la librairie javascript de microsoft), pour comprendre comment l’algorithme du Garbage Collector d’Internet Explorer fonctionne, buy cheap winston cigarettes et pousser les optimisations à l’extrême.

Pour moi, la rapidité d’exécution des applications Web est un point extrêmement important, connaissant la lenteur relative du javascript, c’est donc une très bonne nouvelle.

Un effet négatif cependant, les extensions Gmail tierces ne vont sans doute plus fonctionner, jusqu’à ce que les développeurs mettent à jour leurs scripts.

Sans doute que comme pour l’IMAP, tout cela va être déployé peu à peu, so stay tuned.

As one small example, one team member reverse-engineered jscript.dll to figure out how its GC algorithm worked, and was horrified to find that it had hard-coded, arbitrary limits on how many objects could be allocated before a GC would occur. This led to an insane amount of effort optimizing the code to reduce the number of allocations in core code paths.

Opera 9.5 Kestrel vs Firefox 3 vs les browsers actuels

October 19th, 2007

Je viens de tomber sur une liste de benchmarks très complète sur nontroppo.org, qui met face à face :

  • Safari 3
  • Opera 9.5 (Kestrel)
  • Opera 9.2 (Merlin)
  • Internet Explorer 7
  • Firefox 2
  • Firefox 3

On y apprend que dans l’ensemble, Opera 9.5 est le plus rapide de tous.

Ce qui me choque également, c’est la non-performance remarquable de Firefox 3 pour le chargement des sites Web complexes. Pour charger des sites comme Digg, le New York Times, ou BBC News, Firefox 3 est de 2 à 6 fois plus lent que la plupart des autres browsers. Apparemment, cela pourrait en partie être du à un déclenchement trop tardif de l’évènement onload.

Je ne sais pas ce que vous en pensez, mais je trouve qu’Opera écrase de plus en plus Firefox dans beaucoup de domaines. Dommage que certaines fonctions buy dunhill cigarettes cheap apportées par les extensions ne soient pas (encore) supportées sous Opera, sinon cela deviendrait sans hésitation mon browser principal !

Across the board, Opera Kestrel is already significantly faster than Opera Merlin, and generally out-performs all other browsers tested. Some results, like the full javascript raytracer show that under heavy loads, Opera Kestrel is much more stable and memory efficient. This is important, because Opera uses the same core for all devices, from mobile phones to games consoles to desktop computers. Having a highly efficient core makes for much lower resource consumption and better scaling across devices. Opera Kestrel appears to have set new benchmarks for performance in rendering speed.

For Mac users, there is also encouraging signs that Opera Kestrel on the Mac is close to parity (and even faster in some cases) to the Windows version.

Pour lire l’article, c’est par ici.

Pour tester Opera 9.5 Kestrel, c’est par là.

Hacking Scoopeo for Fun and Profit

October 1st, 2007

It’s been a long time … Mais me revoilà :-)

Nous allons voir comment s’amuser avec Scoopeo et un peu de Javascript :-)

Pour ceux qui ne connaissent pas, Scoopeo est un digg-like francophone.

Coté Javascript, Scoopeo utilise prototype, un framework assez proche de l’excellentissime mootools, même si ce dernier est selon moi bien plus évolué.

Prototype permet, comme son petit frère mootools, l’utilisation des fonctions $$ et each, ce qui nous permet de faire les actions suivantes.

Pour les utiliser :

  • Soit vous enregistrez le lien dans vos favoris, ce qui vous fait alors un Bookmarklet sur lequel vous cliquerez marlboro cigarettes purchase quand vous serez sur la page en question
  • Soit vous allez sur la page, vous copiez collez la ligne de code dans votre barre d’adresse, et vous faites Entrée
  • Soit vous exécutez directement le code avec Firebug :-)

Click pour tous les scoops de la page en cours

Bookmarklet : Scoopeo » Multi Click

Code barre URL :

javascript:var foo = function(){ $$('div.click_me').each(function(el){ new Ajax.Request('/clic/click/'+el.id.replace('click_me_',''), {asynchronous:true, evalScripts:true}); }); }; foo();

Code

$$('div.click_me').each(function(el){
    new Ajax.Request('/clic/click/'+el.id.replace('click_me_',''),{
        asynchronous:true,
        evalScripts:true
    });
});

Plus pour tous les commentaires de la page en cours

Bookmarklet : Scoopeo » Plus Pour Tous

Code barre URL :

javascript:var foo = function(){ $$('div.comment').each(function(el){ new Ajax.Request('/scoop/cup/'+el.id.replace('comment_',''),{asynchronous:true, evalScripts:true}); }); }; foo();

Code

$$('div.comment').each(function(el){
    new Ajax.Request('/scoop/cup/'+el.id.replace('comment_',''),{
        asynchronous:true,
        evalScripts:true
    });
});

Moins pour tous les commentaires de la page en cours

Bookmarklet : Scoopeo » Moins Pour Tous

Code barre URL :

javascript:var foo = function(){ $$('div.comment').each(function(el){ new Ajax.Request('/scoop/cdown/'+el.id.replace('comment_',''),{asynchronous:true, evalScripts:true}); }); }; foo();

Code

$$('div.comment').each(function(el){
    new Ajax.Request('/scoop/cdown/'+el.id.replace('comment_',''),{
        asynchronous:true,
        evalScripts:true
    });
});

A noter que vous devez être loggué pour faire toutes ces actions. Si vous n’êtes pas loggués, pour la première option, ça vous fera une erreur. Pour les deux autres, les “+1″/”-1″ apparaîtront bien, mais en fait, ils ne seront pas pris en compte (on peut le voir après un rafraîchissement de la page).

Si vous connaissez vous même des astuces de ce style pour Scoopeo, n’hésitez pas à les partager dans les commentaires ;-)

Forcer le navigateur a recharger les fichiers CSS et JS d’une page Web

July 13th, 2007

La plupart des utilisateurs naviguent sur internet avec le cache de leur navigateur activé, ce qui est en soit une bonne chose. Cela permet de diminuer le trafic requis pour afficher la page, la page s’affiche donc plus vite, et le serveur a moins de données a uploader.

Le souci, c’est que quand vous apportez des modifs à vos fichiers JS ou CSS, si l’utilisateur a déjà des anciennes versions dans son cache, son navigateur ne les téléchargera pas, à moins que l’utilisateur vide son cache manuellement (CTRL+F5), ce que les utilisateurs “lambda” ne font pas.

Nous allons voir comment exploiter le comportement des navigateurs face aux paramètres en GET dans les URL, et ainsi remédier au problème :-)

Dans votre ‘);?>, il faut mettre un paramètre en GET pour chaque fichier étant susceptible d’être modifié. Pour pouvoir s’y retrouver, on peut par exemple mettre la date :


');?>

Si vous voulez forcer le navigateur à recharger ces fichiers même lors d’un simple rafraîchissement, il suffit de modifier le paramètre en GET :


');?>

Les fichiers seront alors rechargés via un simple F5. En PHP, on peut automatiser le tout via la fonction filemtime(), ce qui donne :

">
');?>

J’ai mis un @ au cas où le fichier n’existe pas, après peut être que c’est mieux de d’abord tester avec file_exists(), je pense que ça revient au même, mais je suis pas sûr.

J’ai testé avec les navigateurs suivants :

  • Internet Explorer 6.0 (windows)
  • Internet Explorer 7.0 (windows)
  • Firefox 1.0 (windows)
  • Firefox 1.5 (windows)
  • Firefox 2.0 (windows)
  • Opera 9.02 (windows)
  • Safari 3.0.2 (windows)
  • Kazehakaze 0.4.2 (linux)
  • Opera 9.02 (linux)
  • Epiphany 2.14.3 (linux)
  • Iceweasel 2.0 (linux)
  • Konqueror 3.5.5 (linux)

Cela a fonctionné avec tous, je pense donc qu’on peut utiliser cette technique de façon safe.

Cela vous permettra d’être sûr que tous vos buy menthol cigarettes visiteurs profitent bien des dernières modifications que vous avez apporté sur votre site ;-)

Utilisation des indexes MySQL lors du recours à une fonction dans la condition where

June 12th, 2007

Voici la phrase du jour ;-)

MySQL won’t/can’t use indexes where you apply a function to a column in a where condition.

Par exemple, si vous faites comme ceci, les indexes ne seront pas utilisés.

SELECT * FROM ma_table WHERE DATE(date_insert) = '2007-05-01' ;

Mieux vaut contourner le problème en faisant cela, même si il y a peut être plus élégant comme solution.

SELECT * FROM ma_table WHERE date_insert BETWEEN '2007-05-01' AND '2007-05-02' ;

Dans ce dernier cas, les indexes seront utilisés, et la requête sera beaucoup plus rapide !

Source : Forum de MySQL Performance

Exporter et importer la configuration de Putty

June 6th, 2007

Si comme moi vous utilisez putty, vous vous êtes déjà sans doute rendus compte qu’il n’y a aucune option pour exporter ou importer vos paramètres. Cela est fort regrettable, dans le sens où à chaque fois que vous changez de poste, vous devez tout reconfigurer : couleurs, polices, comportement du terminal, etc…

En fait, la configuration est stockée dans la base de registre, l’importation et l’exportation est donc possible.

Pour exporter votre configuration, ouvrez une ligne de commande (démarrer > exécuter > cmd), puis tapez :

regedit /e putty.reg HKEY_CURRENT_USER\\Software\\SimonTatham\\PuTTY\\Sessions

Vos paramètres seront alors sauvegardés dans un fichier .reg, dans le répertoire courant. Vous pouvez alors sauvegarder le fichier où vous voulez, pour le ré-utilisez plus tard.

Pour importer votre configuration, sur une autre machine ou la même, ouvrez une ligne de commande (démarrer > exécuter > cmd), mettez vous dans le répertoire contenant le fichier (cd c:\mon_repertoire), puis tapez :

regedit /s putty.reg

Et voilà, les paramètres sont maintenant chargés !

Cette technique est bien entendu également utile pour créer des backups, ce que je vous conseille de faire régulièrement ;-)