I Love Belgium... and you?

vendredi 29 février 2008

PNGHack version 1.0 beta 1

C'est ce soir que la première version de mon hack png javascript pointe officiellement son nez !
J'en avais vraiment marre de ces hack png bancales ...
Les points faibles des autres hacks sont les points forts du mien :

  • Pas d'altérance de la structure du DOM
  • Une manipulation simple et orienté objet
  • Un code open-source distribué sous licence MIT
  • Des fonctionnalités utiles au delà du hack

Je viens de terminer la documentation et la mise en ligne, donc si vous trouvez des erreurs, que ce soit de code, ou d'anglais, n'hésitez pas :)

Assez de blabla ... Place à l'intéressant !
Le site de PNGHack
La doc
Le code compressé et sa source
Le groupe de discussion

N'hésitez pas de publier ce script à tous vos amis, collègues, connaissances, parents, enfants, animaux domestiques, ...
Je remercie également tous les contributeurs qui ont participé de loin ou de prêt à la création de ce joli bout de code :)

Et oui je me lancerai dans la traduction française de la documentation, mais là ... c'est le début du weekend :)

Alors bon weekend !

mercredi 27 février 2008

msIE 8, quoi de neuf ?

IE 8 beta 1 a été distribué à un groupe restreint d'utilisateurs, chose qui me surprend un peu, on dirait que Microsoft aime toujours autant limiter les accès par des passeports msn à quelques utilisateurs, bref.

Chose qui me surprend plus, est un tour de table publié, alliant Microsoft et le WaSP, expliquant certains choix et mesures, vous pouvez récupérer la retranscription anglophone ici, personnellement j'apprécie énormément ce geste explicatif de la part de Microsoft.

Finalement, je vous avouerai que j'étais un peu remonté par rapport à la décision de ce meta tag nécessaire pour avoir un rendu standardisé sur IE 8, finalement je pense que ce n'est pas si bête. Beaucoup de sociétés ont investi des milliers, voir des millions d'euros dans des applications spécifiques à IE 6/7, je pense entre autre à tous les composants ActiveX, et autres gadgets imbriqués à IE.
Par contre, le meta tag devrait servir à activer l'ancien rendu, le quirksmode, et être en rendu standardisé par défaut, tout le monde y serait gagnant. Et une mise à jour pour inclure un meta tag, ne coûte vraiment pas des masses ...
De plus, j'aimerai beaucoup voir IE 8 en standalone, et le voir compatible windows 2000. Étant dans l'optimisme, pourquoi ne pas mettre à jour tous les IE 6/7 après disons 2 ans max ? Histoire de laisser le temps aux entreprises de faire le nécessaire pour leur parc informatique périmé ...

D'autres avis ou remarques ?

mercredi 13 février 2008

CSS : Structure de document

Une des grosses faiblesses des documents CSS, sont les structures internes.
Même si on à tendance à commenter un minimum le code, il s'agit de commentaire largement insuffisant.

Rappelez-vous que CSS est dédié à faciliter la maintenance de la mise en forme graphique, que vous ne serez sûrement pas le seul développeur à travailler sur le projet et que vous aurez tendance à revoir ou à léguer votre code à quelqu'un dans 6 mois.

Basons nous sur les idées avancées par Andy Budd dans son bouquin "CSS Mastery" pour améliorer tout ça...

  1. Prévoyons un header d'informations
  2. Améliorons la séparation des différents niveaux de développements.
  3. Améliorons la lisibilité de 'bidouilles'

Prévoyons un header d'information
Dans beaucoup de langages les développeurs définissent la structure du document, le status de développement, l'auteur, le projet, etc ...
En CSS cela s'avère plus que nécessaire !

/*-----------------------------------------------------------
CSS Document (Cascading Style Sheet)

project: foo bar
released: 2008-02-13
version: 1.0
author: John Doe
email: John@doe.name
website: http://doe.name
info : Just an example

Summary : RESET
FONTS
GENERIC RENDERINGS
-FORMS
-TABLES
---------------------------------------------------------- */

Cela donne un aperçu général de l'état et du contenu du document ainsi que des informations sur le développeur à qui se tourner en cas de questions.
Notez que la liste d'informations est non exhaustive, et que j'ai tendance à ajouter des sommaires bien détaillés pour faciliter la tâche à mes collègues.

Bien, prochaine étape !

Améliorons la séparation des différents niveaux de développements
On retrouve toujours des séparations plus ou moins futiles, tel que des lignes de commentaire /**********/
C'est bien sympa, mais ça ne suffit absolument pas.

En se basant sur le sommaire nous pouvons définir une structure bien plus explicite.
Exemple :

/* RESET
---------------------------------------------------------- */
* { margin:0; padding:0; }

/* FONTS
---------------------------------------------------------- */
h1 { color:red; }

Mais Andy Budd va plus loin, il place un caractère devant chaque titre pour éviter des résultats multiples, donnant :
/* =RESET
---------------------------------------------------------- */
* { margin:0; padding:0; }

/* =FONTS
---------------------------------------------------------- */
h1 { color:red; }

Pour trouver la section précise il vous suffira de faire une recherche sur "=FONTS".

Améliorons la lisibilité de 'bidouilles'
Il vous arrivera toujours de faire des bidouilles plus ou moins importantes, allant du simple bug de double-marge, au support de inline-block pour Firefox, passant par des filtre PNG pour IE, etc ...

Même si cela vous parait banal, les développeurs qui vont suivront n'auront pas forcément la même approche ni le même niveau que vous.
Il se poseront des questions, et vous passerez vos journées à répéter 20x les mêmes explications ...

Y remédier concrètement :
#foo-bar {
float:left;
margin:10px;
display:inline; /* :TRICKY: IE 6 -> double-margin bug */
background:url(foobar.png);
}

#foo-bar span {
/*
:TRICKY: Readable by screen readers, text browsers, ...
hidden on modern graphic browsers
*/
position:absolute;
left:-9999%;
}

Il s'agit donc tout simplement de donner quelques informations à l'aide de mots-clefs tel que :TRICKY:, :INFO:, :TODO:, :BUG:, etc ...
Notez que j'ai tendance à toujours écrire en anglais, au niveau d'une communauté polyglottes et d'entreprise multinationale je me vois très mal documenter mes codes en français ...

Même si cela demande un petit moment d'adaptation, cela améliorera significativement la qualité de votre code, vous fera gagner énormément de temps par la suite, et facilitera la maintenance par qui qu'elle soit effectuée.

En espérant que cet article vous ai convaincu et vous aide, n'hésitez pas d'y apporter vos astuces, idées et critiques.

dimanche 10 février 2008

Bibliothèques CSS : Les problématiques

Framework, bibliothèque, reset, productivité, simplicité, ... des mots très à la mode et CSS n'y échappera pas ! Du moins, c'est ce qu'affirment et espèrent certains.
Les problématiques :

  1. Interopérabilité
  2. Bugs de rendu
  3. Reset
  4. Facilité

1. L'interopérabilité
Avant tout, le majeur problème est l'existence d'une multitude de moteurs de rendu (Gecko, WebCore, Trident, Pesto, ...), ayant chacun leur propre interprétation des spécifications du W3C et leur implémentation propriétaire de certains modules et fonctionnalités.
C'est donc au développeur d'en prendre compte et de gérer cette problématique en y pensant pendant son développement, chose qui dans la plupart des cas est irremplaçable par un automatisme.

2. Les bugs de rendu
Au-delà des implémentations (ou non) des spécifications du W3C et des spécifications propriétaire. Comme dans tout logiciel, des bugs sont contraint d'apparaître, freinant encore le développeur et nécessitant encore une mise à niveau de ses connaissances.
Chose qui encore une fois ne pourra pas être évalué et automatisé par un framework.

3. Reset
Ce mot défini l'action de "remettre à zéro" une multitude de rendu développé par défaut pour les navigateurs.
Seulement, est-ce nécessaire de tous les remettre à zéro ? Ou une bibliothèque ne risquerait-elle pas d'en omettre certains ou de ne pas exactement correspondre à nos besoins ?

4. Simplicité
Au delà du reset, il existe des "modules" petits bouts de code qui par magie donne le résultat voulu, c'est le cas de certaines bibliothèques tel que YUI, BluePrint, YAML, ... En vous servant de class générique vous pourrez rendre une boite rouge flottante à droite doté d'une couleur de texte verte définis à 200px de largeur...
Ce genre de code "facilité" se représente souvent sous cette forme :
<div class="floatRight bgRed colorGreen w200px">Blah blah blah</div>
Ne facilitant malheureusement en rien la maintenance, car ceci revient à faire :
<div style="float:right;background:red;color:green;width:200px">Blah Blah</div>
Le jour où vous déciderez d'enlever la couleur verte, vous allez être obliger d'ouvrir votre document HTML, document qui théoriquement devrait UNIQUEMENT contenir les informations que vous distribuez au public et non pas la mise en forme graphique de votre site.
Encore une fois l'automatisme des bibliothèques échoue à ce niveau.

Très bien, donc l'idée de bibliothèque échoue-t-elle au niveau du CSS ?
Non, mais telle que la plupart l'entende oui.
Avant-tout une bibliothèque CSS devrait fixer une base d'interopérabilité, en valorisant le débugage de certains rendu, et en mettant à zéro tous les éléments possibles, chose qui faciliterai énormément la tâche aux développeur.
Elle ne devrait en aucun cas favoriser le développement total en class générique intrusive dans le code HTML, ce qui reviendrait à une régression et à un non respect des standards et recommandations prôné par le W3C.
Sachant que CSS 3 devrait nous permettre des développements CSS absolument non intrusive !
Finalement, définir certaines class SÉMANTIQUE s'avère utile en CSS 2.1, mais pas de floatRight, colorRed ... !


Le développement CSS manque également de méthodologie, définir un document propre est extrêmement important, thème sur lequel se basera mon prochain article dédié à CSS :)

vendredi 8 février 2008

Opera Mobile 9.5 en vidéo

Persuadé que le Web Mobile sera la prochaine "étape" de l'évolution du web, je continue à m'y intéresser énormément et vous propose de découvrir Opera Mobile 9.5 en vidéo :)