Fedora-Fr - Communauté francophone Fedora - Linux

Planet de Fedora-Fr : la communauté francophone autour de la distribution Linux Fedora

A propos

Cette page est actualisée toutes les heures.

Cette page est une sélection de blogs autour de Fedora. Fedora-Fr.org décline toute responsabilité au sujet des propos tenus par les auteurs des blogs de ce planet. Leurs propos sont leur entière responsabilité.

Le contenu de ce planet appartient à leurs auteurs respectifs. Merci de consulter leur blogs pour obtenir les licences respectives.

Mot-clefs : Développement

eZ Publish : activation vs forgotpassword

Guillaume Kulakowski

Il y a quelque chose d'étrange dans la façon dont eZ Publish gère l'activation de compte. En effet, si je crée un compte mais ne le valide pas, je ne peux pas faire une demande de renvoi du mail d'activation. Je peux cependant demander une re-génération de mon mot de passe via la fonction forgotpassword. Cette procédure demande, au préalable, une validation par mail, ce qui permet alors de vérifier le mail de l'utilisateur.
Me voila donc l'heureux propriétaire d'un compte dont l'email est validé, le mot de passe re-généré, mais qui est toujours inactif…

En annexe, je joins un petit patch pour remédier à cela. Je l'ai proposé sur les forums d'eZ publish, mais il ne semble pas déchaîner les foules…

Bien sur, le fait que l'utilisateur puisse réactiver son compte après une désactivation de ce dernier par l'administrateur, implique que la désactivation de compte ne soit pas une mesure de modération mais bien de (re)validation d'email. Pour modérer un bouletutilisateur, on créera alors un groupe à part avec des droits adéquats.

Fedora-Fr v4.1, étude de cas d'un site sous eZ Publish

Guillaume Kulakowski

Cela fera bientôt 3 ans que je travaille avec le CMS open-source eZ Publish édité par la société eZ Systems. J'ai débuté cette expérience dans la société Kaliop, et je la poursuis aujourd'hui, chez Logica.

Que ce soit en temps qu'expert, consultant ou développeur (« simple » ou référent), j'ai eu la chance de collaborer sur un grand nombre de projets différents utilisant cet outil. Des projets tels que des sites institutionnels (WWF, UM1), des (extra|intra)nets, des usines à sites, ou encore, dernièrement, un portail immobilier avec plus de 150.000 objets eZ (prévoyez 2 jours pour l'import sur un octo proc' ;-)).

Cependant, jusqu'à présent, mon utilisation d'eZ Publish s'était cantonnée au monde professionnel et je n'avais pas de site « personnel » (je mets entre guillemets car Fedora-Fr n'est pas un site perso, mais un site que je gère personnellement...) utilisant cette technologie. J'avais bien commencé le portage de Scénario-Paintball sous eZ, mais je suis toujours en attente d'une charte graphique (Rad' si tu me lis...).
Bref, la refonte de Fedora-Fr sous eZ arrivait à point nommé pour m'offrir un petit bac à sable pour toucher d'encore plus près l'outil, développer autour et reverser du code à la communauté.

Cette migration s'est faite en 2 temps; le premier, la bascule du Planet de Dotclear (+plugin planet) vers eZ; suivie dans un deuxième temps par le passage du site www.fedora-fr.org (le portail) sous eZ.

Le choix d'eZ

Comment s'est fait le choix d'eZ Publish ? Le premier choix qui a été fait à été celui de changer la structure d'avant qui souffrait de 2 problèmes majeurs :

  • Le premier venait du planet qui avait tendance à sauter des blogs voir même à arrêter l'indexation de ces derniers... Dotclear montrant ses limites, il fallait le changer.
  • Le deuxième problème venait de la structure même du portail de Fedora-Fr. C'était un portail 100% maison développé par mes soins, mais utilisant un grand nombre de fonctions PunBB. Je craignais que le passage à la 1.3 de PunBB (qui sera en fait la 1.3 de FluxBB) ne cause pas mal de problèmes et demande beaucoup de réécriture de code.

J'ai donc fait le choix de revoir ma copie et de ne plus faire un portail autour de PunBB mais de prendre un CMS déjà existant et de lui permettre de communiquer avec PunBB/FluxBB.

Mon bagage en eZ, ainsi que le fait qu'il correspondait parfaitement à nos besoins (notamment la fonction d'import/export de contenu via RSS), ont fait que c'est naturellement que je me suis tourné vers cette solution et que j'ai commencé le développement d'eZFluxBB.

eZFluxBB

A l'heure où j'écris ces quelques lignes (dans un Starbucks Parisien, la classe ;-)), eZFluxBB est disponible en version 1.O RC1 sur mon Trac. Il est parfaitement fonctionnel et il ne me reste qu'à faire la documentation : exportation de la doc francophone en PDF via Trac et traduction de cette dernière en anglais. Une fois que cela sera fait, eZFluxBB sera packagé et reversé à la communauté.

Bien définir le rôle de chaque outil

Lorsque j'ai commencé le développement de la nouvelle version de Fedora-Fr (v4.1) sous eZ Publish, j'ai délimité le rôle de chaque outil : FluxBB pour les forums et la gestion des membres; eZ Publish pour la partie publication.

Il n'est aucunement prévu de faire une synchronisation des membres eZ/FluxBB ni même de permettre au visiteur de Fedora-Fr de se connecter sur le CMS. Cependant, comme eZFluxBB est sous GPL, si la demande est là et si des volontaires sont motivés, pourquoi ne pas ajouter cette fonctionnalité à eZFluxBB : login handler / loginhandler ] + cronjobs côté eZ, hook côté FluxBB. Cependant, je ne pense pas l'activer sur Fedora-Fr.

Structure eZ mise en place sur Fedora-Fr

Les extensions

On est dans une architecture classique en eZ, à savoir : 1 site = 1 extension.
A cela, j'ai ajouté une extension dite socle permettant de regrouper certains design, les traductions et certains paramètres propres à tous les sites de Fedora-Fr en eZ.

Au extension typées sites, s'ajoute:

  • eZFluxBB : Communication FluxBB / eZ
  • MyUtils : Contient des fonctionnalités que je peux récupérer sur d'autres projets
  • ezrssfeed : Pratique pour afficher du contenu extrait de fils RSS sans avoir à le mettre en base
  • eZOE 5 : Pour finir, notons que j'ai fait le choix de partir sur la version 5.0 beta d'eZ Online Editor, l'éditeur de contenu d'eZ à la place du traditionnel ezdhtml (v4)

Les classes

Je ne vais pas décrire toutes les classes utilisées sur les différents sites. Je vais simplement dire que plutôt que de créer des classes spécifiques par typologie de contenu, j'ai fait le choix que toutes les pages soient de la classe page (ou website pour les pages d'accueil). Ensuite, j'inclus les différents blocs (qui eux sont des contenus spécifiques) via l'éditeur eZOE.

Edition de la page d'accueil du site

Je me suis même amusé à personnaliser le contentstructuremenu.ini.

Utilisation d'eZFlux dans l'administration d'eZ Publish

Les différents sites de l'instance eZ Publish

L'une des forces d'eZ est de pouvoir créer plusieurs sites à partir d'une seule instance de l'outil. Voila ce que ça donne sur Fedora-Fr (je fais un peu de teasing sur les prochains projets....).

Les différents site eZ Publish de Fedora-Fr

Concrètement, pour un professionnel, avec une bonne configuration des vhost apache, cela permet de confier tout son système d'information à eZ : site institutionnel, extranet et intranet , etc...

Planet

Comme écrit plus haut, le planet a été le premier sous-domaine à migrer sous eZ. Bien que la fonction d'importation des flux RSS d'eZ a l'air taillé sur mesure pour un planet, il souffre d'un manque de souplesse et elle m'aurait obligé à renseigner les flux RSS de chaque blog moi-même...

Comme je suis fainéant (c'est un avantage en informatique il parait), j'ai fait le choix d'étendre la classe utilisateur et de modifier le cronjobs rssimport.php en planet.php pour que ce dernier aille chercher les informations directement dans le profil des utilisateurs du groupe blogeur.

Edition de son profil Fedora-Fr

Le contenu de chaque billet est stocké dans un datatype Bloc-text, directement en HTML. Comme certaines versions de Dotclear utilisent des liens relatifs pour leurs smileys (ce qui invalide un flux, soit dit au passage) et que tous les blogs ne respectent pas les normes du W3C (je ne citerai pas de nom), cela m'a contraint à nettoyer les contenus avec quelques expressions régulières et à utiliser php-Tidy (yum install php-tidy, merci Remi).

Pour ceux qui seraient intéressés par mon, cronjob planet, il est disponible dans mon extension MyUtils téléchargeable sur mon Trac ou par svn.

WWW

Le portail est plus classique dans son développement, il s'agit en effet d'un site de présentation. Sa seule particularité est l'utilisation d'eZFluxBB pour récupérer les informations à partir de PunBB.

Démo d'eZFluxBB 1.0 RC1

Choix technologiques

Cache statique

Passer un site de la recette à la production est toujours cause de stress. En effet, il est toujours difficile d'apprécier la charge que va provoquer une nouvelle application avec 3.000 à 4.000 utilisateurs quotidiens (quoi qu'il existe des logiciels pour ça). Les développeurs d'UbuntuUser.de en ont récemment fait les frais.

En terme de performance, la référence était pour moi le site précédent. Basé sur PunBB, pas complètement POO ce qu'il faut le dire lui confère des pages servies en moins de 0,05s. Malheureusement, malgré tous les caches possibles et toutes les optimisations de développement envisageables, eZ, de par sa richesse fonctionnelle, n'arrivait pas à de tels scores. J'ai donc entrepris des tests de cache statique sur le planet. Les tests m'ont convaincu et j'ai mis en œuvre cette technique également sur le portail.

Concrètement qu'est-ce que le cache statique ?

Avant de servir la page, Apache va aller vérifier si elle existe dans un répertoire de cache. Si c'est le cas, il servira une simple page HTM, sinon, il servira une page issues d'eZ Publish. Le gain de performance est conséquent puisqu'on ne sert plus des pages php mais de simples pages HTML sans aucun calcul.

## Cache static
RewriteCond %{HTTP_USER_AGENT} !^eZ\ Publish\ static\ cache\ generator$
RewriteCond /path/to/ez/static/fedora_portail/index.html -f
RewriteRule ^/$ /static/fedora_portail/index.html [L]

RewriteCond %{HTTP_USER_AGENT} !^eZ\ Publish\ static\ cache\ generator$
RewriteCond /path/to/ez/static/fedora_portail/index.html -f
RewriteRule ^$ /static/fedora_portail/index.html [L]

RewriteCond %{REQUEST_METHOD}      !^POST$
RewriteCond %{HTTP_USER_AGENT} !^eZ\ Publish\ static\ cache\ generator$
RewriteCond /path/to/ez/static/fedora_portail$1/index.html -f
RewriteRule ^(.*)$ /static/fedora_portail$1/index.html [L]
RewriteRule !\.(gif|css|jpg|png|jar|ico|js)$ /index.php

Limitation

Comme il n'y a plus d'opérations php, la page est la même pour tous. Ça ne dérange pas sur le planet, mais sur le portail, la barre d'utilisateur de PunBB est confiée à une requête AJAX (voir plus bas).

Le bug #9126 faisant que le cache d'eZ se regénérait à partir de la version déjà en cache, cela m'a contraint à mettre quelques fichiers d'eZ 4.0 à jour par rapport à la version 4.0.1.

L'utilisation du cache statique sur Fedora-Fr

Fedora-Fr ne confie pas la régénération du cache statique à eZ Publish. En effet, la page d'accueil possède des contenu indépendants d'eZ et le planet également. J'ai donc fait le choix via cronjobs de mettre à jour le planet toutes les heures et la page d'accueil toutes les 5 minutes.

# Planet
0 * * * * cd $EZPUBLISHROOT && $PHP runcronjobs.php planet -q 2>&1 /dev/null; $PHP bin/php/makestaticcache.php -s $PLANET -f 2>&1 /dev/null

# Portail
*/5 * * * * cd $EZPUBLISHROOT && $PHP bin/php/makestaticcache.php -s $WWW -f 2>&1 /dev/null

MooTools

Fedora-Fr embarque la librairie MooTools dans ça version 1.2. Son utilisation est essentiellement due à 2 points :

  • L'événement domready qui comme le montre la démo, est bien plus rapide que le classique onload. Cet événement permet notamment de gérer les requêtes AJAX avant le chargement total de la page ce qui fait que vous ne voyez presque pas que la page se charge en 2 temps.
  • L'autre raison est une volonté d'aller plus vers le web 2.0 (même si je n'aime pas ce terme) avec l'utilisation d'info-bulles plus riches en informations et bien d'autres évolutions qui seront visibles avec l'arrivée de FluxBB 1.3.
window.addEvent('domready', function(){
       
        /* Récupération du brdwelcome en AJAX */
        if ( $('brdwelcome') && $('brdwelcome').hasClass('ajax')) {
                // Requète AJAX en 1 ligne...
                $('brdwelcome').load( ezroot + 'ajax/brdwelcome.php');
        }
});

Design

La façon dont les designs sont gérés sur Fedora-Fr diffère quelque peu des sites eZ classiques. En effet, après avoir hésité avec une utilisation classique conjointe à l'emploi d'ezoescript et ezoecss, j'ai fait le choix de conserver la structure de Fedora-Fr actuelle. A savoir, utiliser un sous domaine (common) pour les javascripts, les images et les feuilles de styles.

Fedora-Fr sous Firebug

Cela permet, par exemple, de ne télécharger qu'une fois la librairie MooTools (60Ko normalement mais 19Ko une fois compressée) pour le portail et le planet. Ça me permet aussi d'avoir toutes mes feuilles de styles et mes javascript à un seul endroit et de les compresser facilement avec YUICompressor.

Et demain

Les projets futurs en eZ ?

  • Passer la Faq non-officielle sous eZ.
  • eZFluxBB 1.1 compatible FluxBB 1.3. D'ailleurs, je travail actuellement sur la nouvelle version du forum utilisant FluxBB 1.3.

eZFluxBB 1.0 RC1

Guillaume Kulakowski

Je viens à l'instant de compléter la version 1.0 RC1 de eZFluxBB : le connecteur PunBB / FluxBB et eZ Publish. Pour plus d'information sur eZFluxBB vous pouvez vous reporter à mon précédent billet.


eZFluxBB : Quand eZ Publish se connecte à FluxBB / PunBB

Guillaume Kulakowski

Étape n°2 de la migration de Fedora-Fr vers le CMS open source eZ Publish : après le planet, c'est au tour de l'accueil d'amorcer son virage sous eZ...

Pour le moment rien n'est visible en prod', mais j'ai commité ce week-end un début d'extension permettant à eZ Publish de récupérer des informations issues de PunBB / FluxBB.

Actuellement, cette extension eZ ne fait pas grand chose, puisque que la seule action possible et un fetch current_user permettant de récupérer les informations sur l'utilisateur courant.

Première version d'eZFluxBB

Ce qui reste à faire :

  • fetch sur les topics (derniers topics, extraction de news, etc..)
  • fetch sur les stats
  • fetch sur les utilisateurs en ligne
  • Rendre le code de ma classe eZFluxBBDB moins ridicule et lui permettre de connecter un eZ et un FluxBB sur des bases de données et des serveurs différents
  • Documenter !

Ce que l'extension ne fera pas :

  • Synchronisation des utilisateurs eZ / FluxBB.
    Mon choix est clairement de garder eZ pour de la publication et FluxBB pour la partie user input/ gestion de compte.

Utilisation d'eZFlux dans l'administration d'eZ Publish

A suivre...

Mon afficheur de photos par le web

Aurélien Bompard

J'ai craqué. J'avais essayé de résister pourtant, et j'avais tenu longtemps. Mais là ça y est, j'ai craqué. Au lieu de publier mes photos à l'aide d'une célèbre application web dédiée à ça sans se poser de questions, j'ai développé moi-même un n-ième outil.

Mon cahier des charges

Et là pour le coup, des applis web pour publier des photos, y'en a vraiment des pelletés sur Internet... Mais bon, voilà, c'est fait, au moins celle-là elle correspond à 100% de mes besoins, qui étaient les suivants :
- jolie
- légère et rapide
- je ne dois pas à avoir à faire plus que d'envoyer un dossier avec des photos sur un espace web.
- pouvoir afficher les photos en miniatures et en grand
- avoir la possibilité de vérouiller un dossier de photos par un mot de passe
- pouvoir publier aussi des vidéos

Et c'est tout, le reste des fonctionnalités classiques de ce genre d'outil sont inutiles pour moi (commentaires, notations, etc.)

J'ai aussi besoin de pouvoir créer des albums, exit donc le fameux service hébergé Flickr, qui ne propose ça que pour les comptes payants.

Briques

Je n'ai tout de même pas tout développé à partir de rien. Pour l'affichage des photos en miniature et en grand, je cherchais quelquechose du genre de Lightbox. C'est très joli, dynamique, et s'appuie sur des pages standards. Ca me plaît. Mais ça ne permet pas d'afficher des vidéos. Heureusement, un clône de Lightbox, Shadowbox, fait ça sans problème. En plus, c'est sous licence libre (LGPL). Que demande le peuple ?

Mon petit développement

Le peuple, il demande un générateur d'index qui prépare la page de miniatures, avec les bons liens comme il faut pour que ShadowBox se lance. Et le peuple, il voudrait aussi un moyen de générer les miniatures automatiquement. Il est exigent, le peuple.

Voilà donc ce que j'ai fait, j'ai écrit deux scripts :
- un en PHP pour générer les pages web
- un en python pour fabriquer les miniatures

L'index web

Le script PHP exploite les possibilités offertes par la directive "DirectoryIndex" d'Apache. Cette directive est communément utilisée pour dire que l'appel d'un répertoire dans l'URL se traduit par l'appel d'un fichier index.html ou index.php à l'intérieur de celui-ci. Mais on peut mettre bien plus qu'un nom de fichier, en fait on peut même mettre une URL relative ou absolue qui pointe vers un script. Et c'est ce script qui sera utilisé pour fabriquer l'index du répertoire. Pile-poil ce qu'il me faut !

Le générateur de miniatures

Il s'agit là d'un script python qu'on passe sur un répertoire contenant des photos ou des vidéos, et qui créé les miniatures pour ces éléments. Il recompresse et redimentionne aussi les photos. Et il convertit les vidéos en FLV [1] pour lecture dans le navigateur. Et il peut même renommer les photos pour leur donner un nom cohérent auto-incrémenté.

Récupérez-le

J'ai placé tous ces développements sous licence Affero GPL v3, qui est la GPL des applications web : si vous modifiez le code et que vous utilisez cette application sur le web, alors vous devez fournir vos modifications.

Si vous êtes intéressé, voici le code :
- photos-index-0.1.tar.gz (le nom est temporaire, si vous avez des idées je suis tout ouïe)

L'archive contient un fichier README avec les instructions.

Et bien sûr, mes photos, qui constituent un bon site de démo.

Si vous avez des idées de développement et de fonctionnalités, je suis preneur, bien que je ne garantisse pas que je passerais beaucoup de temps dessus, vu qu'à l'origine il s'agit d'un besoin personnel. Maintenant bien sûr, si vous avez une contribution, je ne vais pas refuser... ;-) Si vous trouvez des bugs, ça m'intéresse aussi.

Et si vous voulez suivre le développement de l'outil, c'est possible en passant par Git avec la commande suivante :

git clone http://aurelien.bompard.org/projects/divers/photos.git/

Si vous décidez de l'utiliser, laissez-moi un message, ça me fera plaisir de savoir que ça vous a été utile ! :)

Développement

Mon afficheur de photos par le web

Aurélien Bompard

J'ai craqué. J'avais essayé de résister pourtant, et j'avais tenu longtemps. Mais là ça y est, j'ai craqué. Au lieu de publier mes photos à l'aide d'une célèbre application web dédiée à ça sans se poser de questions, j'ai développé moi-même un n-ième outil.

Mon cahier des charges

Et là pour le coup, des applis web pour publier des photos, y'en a vraiment des pelletés sur Internet... Mais bon, voilà, c'est fait, au moins celle-là elle correspond à 100% de mes besoins, qui étaient les suivants :
- jolie
- légère et rapide
- je ne dois pas à avoir à faire plus que d'envoyer un dossier avec des photos sur un espace web.
- pouvoir afficher les photos en miniatures et en grand
- avoir la possibilité de vérouiller un dossier de photos par un mot de passe
- pouvoir publier aussi des vidéos

Et c'est tout, le reste des fonctionnalités classiques de ce genre d'outil sont inutiles pour moi (commentaires, notations, etc.)

J'ai aussi besoin de pouvoir créer des albums, exit donc le fameux service hébergé Flickr, qui ne propose ça que pour les comptes payants.

Briques

Je n'ai tout de même pas tout développé à partir de rien. Pour l'affichage des photos en miniature et en grand, je cherchais quelquechose du genre de Lightbox. C'est très joli, dynamique, et s'appuie sur des pages standards. Ca me plaît. Mais ça ne permet pas d'afficher des vidéos. Heureusement, un clône de Lightbox, Shadowbox, fait ça sans problème. En plus, c'est sous licence libre (LGPL). Que demande le peuple ?

Mon petit développement

Le peuple, il demande un générateur d'index qui prépare la page de miniatures, avec les bons liens comme il faut pour que ShadowBox se lance. Et le peuple, il voudrait aussi un moyen de générer les miniatures automatiquement. Il est exigent, le peuple.

Voilà donc ce que j'ai fait, j'ai écrit deux scripts :
- un en PHP pour générer les pages web
- un en python pour fabriquer les miniatures

L'index web

Le script PHP exploite les possibilités offertes par la directive "DirectoryIndex" d'Apache. Cette directive est communément utilisée pour dire que l'appel d'un répertoire dans l'URL se traduit par l'appel d'un fichier index.html ou index.php à l'intérieur de celui-ci. Mais on peut mettre bien plus qu'un nom de fichier, en fait on peut même mettre une URL relative ou absolue qui pointe vers un script. Et c'est ce script qui sera utilisé pour fabriquer l'index du répertoire. Pile-poil ce qu'il me faut !

Le générateur de miniatures

Il s'agit là d'un script python qu'on passe sur un répertoire contenant des photos ou des vidéos, et qui créé les miniatures pour ces éléments. Il recompresse et redimentionne aussi les photos. Et il convertit les vidéos en FLV [1] pour lecture dans le navigateur. Et il peut même renommer les photos pour leur donner un nom cohérent auto-incrémenté.

Récupérez-le

J'ai placé tous ces développements sous licence Affero GPL v3, qui est la GPL des applications web : si vous modifiez le code et que vous utilisez cette application sur le web, alors vous devez fournir vos modifications.

Si vous êtes intéressé, voici le code :
- photos-index-0.5.tar.gz (le nom est temporaire, si vous avez des idées je suis tout ouïe)

L'archive contient un fichier README avec les instructions.

Et bien sûr, mes photos, qui constituent un bon site de démo.

Si vous avez des idées de développement et de fonctionnalités, je suis preneur, bien que je ne garantisse pas que je passerais beaucoup de temps dessus, vu qu'à l'origine il s'agit d'un besoin personnel. Maintenant bien sûr, si vous avez une contribution, je ne vais pas refuser... ;-) Si vous trouvez des bugs, ça m'intéresse aussi.

Et si vous voulez suivre le développement de l'outil, c'est possible en passant par Git avec la commande suivante :

git clone http://aurelien.bompard.org/projects/divers/photos.git/

Si vous décidez de l'utiliser, laissez-moi un message, ça me fera plaisir de savoir que ça vous a été utile ! :)

Historique

  • 13 septembre 2008 : version 0.5 :
    • gestion de l'affichage d'un lien vers l'archive contenant toutes les photos
    • internationalisation : français et anglais pour l'instant
    • protection contre des fichiers invalides dans make-gallery.py et make-atom.py
    • correction des URLs dans le générateur de flux Atom.
  • 22 août 2008 : version 0.4 :
    • ajout d'un générateur de flux Atom : make-atom.py
    • utilisation de Python Imaging Library dans make-gallery.py plutôt que des appels système à ImageMagick (désactivé par défaut)
    • possibilité de demander l'affichage d'une photo en particulier par l'URL (utilisé par le flux RSS)
    • correction de quelques bugs mineurs
  • 17 juin 2008 : version 0.3 :
    • correction d'un bug Javascript avec IE
Développement

ezoescript et ezoecss : 2 bonnes surprises dans ezoe

Guillaume Kulakowski

Pour ceux qui ont suivi mon précédent billet sur l'optimisation des javascripts, vous l'aurez compris : je suis sensibilisé à l'optimisation des sites web et notamment (entre autre) à la préconisation Yahoo! Developer Network :"Minify JavaScript and CSS". Cette préconisation suggère de réduire les CSS et les javascript en nombre et en poids. Dans le meilleur des cas, il faudrait donc n'avoir qu'une feuille CSS et qu'un fichier Javascript de poids raisonable.

Pour la migration du planet Fedora-Fr sous eZ Publish, j'avais pour intention de développer une extension eZ Publish intégrant un minifier JS/CSS. J'étais parti pour utiliser JSMin qui, certes est moins puissant que YUI ou packer mais qui offre le double avantage d'être full php (YUI utilise JAVA) et surtout de ne pas trop altérer le source à grands coups d'eval (comme le fait packer).

Mais au final, j'ai fait le choix de ne pas utiliser le système de design d'eZ Publish et de continuer à stocker le design (CSS, images, JS) de chaque sous-domaine (www, planet, forums, doc, etc..) dans un sous domaine commun (common). Au final, que vous soyez sur le planet, l'accueil ou sur les forums de fedora-fr, vous ne téléchargerez qu'une fois les images et les feuilles de styles.

Bref, comme vous l'aurez compris, j'avais laissé tomber la chose... Puis en furetant dans le code source de la future version d'online editor : ezoe pour les intimes; je suis tombé sur la classe ezoepacker. À la lecture du templateautoload j'ai déduit qu'ezoe proposait 2 opérateurs de template forts sympatiques : ezoescript et ezoecss.

Pour faire court, ezoescript et ezoecss remplacent la syntaxe classique d'eZ, qui avait pour résultat de multiplier les CSS et les JS :

{section name=JavaScript loop=ezini( 'JavaScriptSettings', 'JavaScriptList', 'design.ini' ) }
<script language="JavaScript" type="text/javascript" src={concat( 'javascript/',$:item )|ezdesign}></script>
{/section}

<style type="text/css">
{section var=css_file loop=ezini( 'StylesheetSettings', 'CSSFileList', 'design.ini' )}
    @import url({concat( 'stylesheets/',$css_file )|ezdesign});
{/section}
</style>

On notera au passage que contrairement à ce que préconise Yahoo, le JS est chargé avant le CSS...

Bref, tout ça est remplacé par :

{ezoescript(    ezini( 'JavaScriptSettings', 'JavaScriptList', 'design.ini' ),
                        true, 'text/javascript', 'javascript', 3 )}
{ezoecss(       ezini( 'StylesheetSettings', 'CSSFileList', 'design.ini' ),
                        true, 'all', 'text/css', 'stylesheet', 3 )}

ezoecss

ezoecss va récupérer toutes les CSS pour n'en faire qu'une. Cette dernière sera stockée dans le cache et sera de la forme 1 ligne par feuille CSS.

ezoescript

Malheureusement ezoescript n'est pas un vrai minifier JS au sens strict du terme. En effet, point de code sur une seule ligne ni de renommage des variables et fonctions. ezoescript se contente de supprimer les sauts de ligne et les commentaires avant de stocker le fichier en cache. L'avantage c'est qu'il ne présente aucune contrainte de codage pour fonctionner (jusqu'au niveau 2 du moins). J'ai cependant émis sur les forums la suggestion de le coupler à un vrai minifier et André R. ne semble pas fermé à ce genre d'idée...

Déçu de ne pas pouvoir faire joujou avec ces 2 opérateurs sur fedora-fr, je les ai utilisé sur un projet professionnel sur lequel j'avais une problématique forte d'optimisation. Je doit avouer être satisfait du résultat.

Remarque : Si vous utilisez les réécriture d'url, attention à rajouter les lignes qui vont bien dans votre virtualhost.

Charger des javascripts distants dans le "domready" de Mootools

Guillaume Kulakowski

Certains l'avaient peut-être remarqué, depuis quelques jours, le blog ramait grave ! Les symptômes : le bandeau, qui change selon l'heure de la journée, ainsi que différentes couleurs du site mettaient du temps à s'afficher.

La faute au script de Twitter qui ralentissait le chargement de la page et reculait d'autant l'évènement domready de MooTools.

C'est après avoir posé la question sur les forums de MooToos que la solution c'est offerte à moi : construire l'élément <script> qui appelle les javascripts de Twitter dynamiquement et dans le domready, c'est à dire une fois mon design en place.

J'ai pour cela mis en place une petite fonction sur laquelle vous pouvez vous appuyer :

/*
 * Mootools : onDOMReady
 *
 * Remarque : les actions prioritaires en premier.
-------------------------------------------------------- */

window.addEvent('domready', function(){

        var nodoka                      = new Nodoka();
        var scripts             = [     /* twitter */
                                                'http://twitter.com/javascripts/blogger.js',
                                                'http://twitter.com/statuses/user_timeline/llaumgui.json?callback=twitterCallback2&count=5"' ];
        /* [ . . . ] */
        nodoka.loadJS( scripts );
        /* [ . . . ] */
}); // EODR

/* [ . . . ] */

function Nodoka() {
       
        /* [ . . . ] */

        /*
         * Ajout des Javascripts distant
         * @author Guillaume Kulakowski <guillaume_AT_llaumgui_DOT_com>
         * @since 1.0.1
         */

        this.loadJS = function loadJS( scripts ) {
               
                scripts.each(function(src){
                        var loadJS = new Element('script', {
                        'src': src,
                        'type': 'text/javascript'
                        }).injectInside(document.head);
                });
        };

        /* [ . . . ] */
       
}; // EOC

Mise en ligne de "Pratique d'ActionScript 3" !

Alexandre Frandemiche

cover_Pratique_AS3Bonjour,

voici mon premier billet sur le blog de Slobberbone, il ne concerne pas une astuce fedora du week end (but pour lequel je suis au départ devenu rédacteur sur ce blog) mais traite de la sortie depuis quelques jours d'un ouvrage de grande qualité sur l'AS3 (ActionScript 3).

Pour ceux qui ne connaissent pas , il s'agit tout simplement du langage permettant de développer des applications ou des animations Flash, mais aussi Flex ou AIR. C'est un outil formidable tant au niveau de ses capacités que de son utilisation, je dirais presque indipensable si l'on veut développer des applications web orientées Rich Internet Application (RIA). (On pourra bien sûr me reprocher de ne pas évoquer OpenLaszlo, principal challenger qui a l'immence avantage d'être libre, mais qui ne bénéficie pas des 98% de pénétration du web dont dispose Flash, et donc AS3. Seulement voilà, maintenant c'est fait ^^)

Mais trève de bavardage autour d'AS3, l'auteur de Pratique d'ActionScript 3, Thibault Imbert, après avoir investi son temps et son énergie pour produire cet ouvrage, en parle beaucoup mieux que moi.

Pour des raisons que vous pourrez découvrir sur le site dédié à son livre (http://pratiqueactionscript3.bytearray.org/?page_id=2), Thibault Imbert à décidé d'en faire profiter gracieusement toute la communeauté en le mettant en ligne. Vous pouvez dès à présent accéder à son Livre au format PDF sur ce même blog.

En vous souhaitant bonne lecture,

Nagha

Pimp my Dotclear Acte II

Guillaume Kulakowski

Dotclear 2.0 RC1 arrivant à grands pas, on continue avec les exemples de mise en œuvre de ce gestionnaire de blog simple et efficace.
Après la sécurité et l'optimisation de Dotclear, aujourd'hui : les rétroliens (ou trackbacks) et les plugins pour Dotclear qui vont bien. Vous pouvez, à ce propos, consulter la liste des plugins déployés sur ce blog.

Rétroliens et anti-spam

Les rétroliens sont un super outil permettant à la discussion de dériver et de se poursuivre ailleurs. Le problème est que les trackbacks sont trop souvent victimes du SPAM et les bloggeurs ont alors tendance à les désactiver (ce qui était mon cas jusqu'à il y a peu).

La solution, pour pouvoir utiliser les trackbacks sereinement : le plugin rétrocontrôle configuré pour effacer directement les rétroliens indésirables, sans passer par la case corbeille.

Filtre anti-spam dans Dotclear

Au passage, vous constatez que, pour le moment, ma configuration anti-spam est plutôt légère, j'ai donc encore des armes pour me défendre.

Configuration de rétrocontrôle

Je n'ai pas non plus activé l'option "adresses jetables" car je ne suis pas sûr de sa compatibilité avec le plugin Static Cache.

miniSEO :

Comme le montre ce calculateur (au résultat plus que discutable je vous l'accorde), le SEO du blog frôle la perfection (97%) et ce grâce, entre autres, au plugin miniSEO qui peut être couplé avec MyMeta comme le conseille l'auteur sur le billet de support.

MyMeta

Vous l'aurez peut être remarqué, une image illustre mes billets. Cette image est soit celle associée à la catégorie du billet, soit celle d'un tag. Pour cela j'utilise le plugin MyMeta :

Configuration du plugin MyMeta

Je peux ensuite appliquer à un billet une illustration en fonction d'un tag grâce à ce template :

<tpl:MyMetaIf type="tag-illustration" defined="false">
    <tpl:EntryIf has_category="1">
        <a href="{{tpl:EntryCategoryURL}}" class="category-illustration cat_{{tpl:EntryCategoryID}}" title="{{tpl:EntryCategory}}">&nbsp;</a>
    </tpl:EntryIf>
</tpl:MyMetaIf>
<tpl:MyMetaIf type="tag-illustration" defined="true">
    <a href="{{tpl:BlogURL}}tag/{{tpl:MyMetaValue type="tag-illustration"}}" class="category-illustration" title="{{tpl:MyMetaValue type="tag-illustration"}}" style="background: transparent url(/themes/nodoka/img/tag/{{tpl:MyMetaValue type="tag-illustration"}}.png) 0 0 no-repeat;">&nbsp;</a>
</tpl:MyMetaIf>

Pages

La révision #1729 de Dotclear introduit le plugin Pages remplaçant avantageusement le plugin Related que j'utilisais jusqu'à présent. C'est maintenant "Pages" qui gère les pages suivantes :

Notez au passage qu'avec une petite règle apache, le plugin Pages peut faire correspondre une page du blog à un sous domaine :

RewriteCond %{HTTP_HOST} ^cv.llaumgui.com
RewriteRule ^index.php$ index.php/pages/curriculum [L]

Subscribe to comments

En plus du flux RSS associé aux commentaires d'un billets, natifs dans Dotclear, le plugin Subscribe to comments permet à vos visiteurs de s'abonner par email aux nouveaux commentaires.

Pimp my Dotclear ;-)

Guillaume Kulakowski

Dotclear est un logiciel simple et léger permettant de créer son blog (comme ici) ou de mettre en place une plateforme de blog pouvant héberger plusieurs blogs comme c'est le cas sur la plateforme de blog de fedora-fr.

Optimiser Dotclear

Utilisation de connexions persistantes

Ludovic en parlait sur son Blog, les connexions persistantes sont à présent directement configurables depuis le fichier config.php de Dotclear :

define('DC_DBPERSIST',true);

Cache statique

Toujours en développement, le plugin staticCache est disponible via le dépôt SVN. Il permet de générer non pas du code php comme le fait le cache de template mais de stocker du code HTML qui sera directement rendu aux visiteurs de votre blog.

Pour l'activer, ça se passe encore dans le fichier config.php

define('DC_SC_CACHE_ENABLE', true );

Sécuriser son Dotclear

La première chose à faire pour sécuriser son Dotclear est de le mettre à jour. En effet, des failles de sécurité ont récemment étaient découvertes.

La gestion des uploads

Si vous êtes le seul à utiliser votre blog, la question se pose moins, mais si d'autres personnes utilisent le système d'upload, ils pourraient très bien envoyer des fichier php sur le serveur et les exécuter. Toujours dans le domaine de la supposition, ces fichiers pourraient permettre d'inclure le fichier config.php et d'en parcourir le contenu, dévoilant ainsi les mots de passe de la connexion à la base de données. Sur un serveur très très mal configuré, ces fichiers pourraient aller jusqu'à lire des fichiers du répertoire /etc/ !

Pas de panique : depuis la révision #1714, Dotclear permet d'exclure des extensions de fichier du gestionnaire de médias et ce via la directive media_exclusion du plugin about:config (plus d'infos).

Empêcher l'upload de fichier php c'est bien, mais empêcher l'exécution de fichier php dans le répertoire public, c'est mieux. Pour cela, on configurera apache :

<Location ~ "public/.*\.php$">
     ForceType text/plain
     RemoveHandler php
</Location>

QDevelop IDE multi plateformes pour QT4

Fabien Nicoleau

Il y a encore quelques jours, j'etais totalement indécit pour développer des interfaces graphiques entre GTK+,GTKmm (C++), wxWidgets ou QT. Je les ai tous testés (vite fait, très vite fait) et connaissais déja (assez) bien QT pour l'avoir assez longtemps utilisé. Apres réflexion, je suis resté séduit par QT, pour sa richesse (du graphique ... mais beaucoup plus : xml, bdd, reseau ... ), son designer, sa portabilité ... bref. J'ai reinstallé ce bon vieux Kdevelop sous Linux, et ai mis wxdesign (dev-cpp avec wxWidgets) sous windows que j'étais content de voir repris (et plutôt bien), et ai refais des petits tests. Puis en trainant sur des forums, j'ai découvert QDevelop, une IDE dédiée à QT4 qui offre la possibilité d'avoir une IDE identique, peut importe l'OS utilisé. Mais c'est loin d'être le seul avantage. 

Cette IDE récente (2006) est vraiment très agréable à l'utilisation. Dédiée à QT4, elle m'a fait oublier KDevelop (qui en plus sous Fedora a des dépendances avec les bibliothèques de développement QT3). Outre les options habituelles, d'autocompletion du code et de coloration syntaxique, il se distingue par sa compilation en tâche de fond du code permettant de voir au fur et à mesure ses erreurs (quand il y en a ;)). Enfin le lien avec QT4 est bien présent, notemment dans la gestion du projet, permettant très facilement de passer à QT4-Designer, d'intégrer de nouvelles UI et d'accéder au slots dispos d'un widget (ca, j'ai adoré). J'ai découvert ce soft il y a deux jours, il m'est donc difficile d'en faire une dexcription détaillée, mais en tout cas j'ai été séduit et l'ai adopté. J'ai fait une création de projet sous linux, et hop intégration sous windows. Tout s'est bien passé. De plus, petit cocorico, ce soft est développé par un français. J'ai pour le moment regretté un mode debugging un peu moins bien fait (en tout cas dont j'ai moins l'habitude) que sous kdevelop. Cependant il ne faut pas oublier que QDevelop est très jeune.

EDIT : après utilisation, j'ai en fait retrouvé tout ce qu'on utilise habituellement pour le déboguage, dont l'inspection des variables.

Voici la fenêtre permettant de choisir les slots à implémenter pour un widget :

 

Enfin, ce que j'apprécie vraiment, est que le fichier "projet" généré par ce soft est simplement le fichier "pro" utilisé pour qmake. Cela permet de ne pas avoir tout un tas de fichiers inutiles, et de faire une distribution légère des sources et simple à compiler. Un projet que je compte suivre, et peut-être packager (il me semble qu'il n'y a pas encore de paquets pour Fedora).

Site officiel : http://qdevelop.org/

Fabien

Optimiser ses javascripts : le cas de mootools

Guillaume Kulakowski

Avec le nouveau thème du blog, Nodoka, c'est posé la question de l'optimisation des javascripts. En effet, mootools c'est bien, mais c'est lourd : 87Ko pour la version complète !

J'ai donc essayé les différents moyens de compresser du javascript et j'en ai fait un tableau comparatif.

Comparatif des différentes méthodes de compression du code javascript

Les tests suivants sont effectués à partir de la version complète de mootools 1.11.

Full Sans les commentaires JSMin YUI Compressor packer
180Ko 87Ko 73Ko 65Ko 41Ko

Comme le démontre le tableau, la meilleure méthode de compression semble être packer. Mais après une discussion sur le chan #mootools (serveur freenode.net), il semblerait que packer souffre de 2 problèmes :

  • problème avec les regex (pas tout compris à la démonstration : barrière de la langue ;-) )
  • moins compressible que YUI

C'est pour ça que mootools utilise YUI Compressor et j'ai donc suivi cette préconisation sur mon blog.

Pourquoi compresser du javascript pour gagner quelques malheureux kilo octets ?

Aller plus loin

Mais les 65Ko obtenus avec YUI Compressor ne sont pas une fin en soit. Il est ensuite possible de compresser le JS pour en faire un gzip. Attention : je ne parle pas de faire consommer du CPU pour compresser à la volée, mais de compresser une fois pour toute :

cp moootols.js mootools.jgz
gzip -9 mootools.jgz
mv mootools.jgz.gz mootools.jgz

Ensuite on modifie l'inclusion de la librairie :

<script src="/themes/nodoka/js/mootools.jgz" type="text/javascript">

Et on effectue un petit réglage sur son serveur pour penser à ceux qui ne supportent pas la compression Gzip :

# JGZ (compression JS)
RewriteCond %{HTTP_USER_AGENT} ".*Safari.*" [OR]
RewriteCond %{HTTP:Accept-Encoding} !gzip
RewriteRule (.*)\.jgz$ $1\.js [L]
AddType "text/javascript;charset=UTF-8" .jgz
AddEncoding gzip .jgz

Voila au final mootools complet ramené de 87Ko à 19Ko.

Utiliser mootools dans Dotclear 2.0

Guillaume Kulakowski

Dotclear, le gestionnaire de blog, dans sa version 2.0 (dont la RC1 devrait pointer le bout de son nez le 1er mai) utilise jQuery comme librairie javascript. Notons au passage que l'utilisation d'une telle librairie permet de gagner un temps de développement précieux et d'éviter d'éventuels problèmes de compatibilité entre les différents navigateurs.

Actuellement, l'utilisation du javascript dans le thème par défaut (Blowup) se limite à la gestion du cookie de la case "Se souvenir de moi sur ce blog".

J'aime beaucoup jQuery (je m'en suis servi dans mon précédent thème et sur d'autres projets) mais professionnellement j'utilise beaucoup mootools et j'ai acquis des facilités avec ce framework.
Pour mon dernier thème, Nodoka, c'est donc mootools que j'ai retenu et j'ai donc eu à entreprendre de porter le code de la gestion des cookies de jQuery vers mootools.
Histoire de vous faciliter la vie si vous aussi vous souhaitez utiliser mootools dans vos thèmes Dotclear, je vous mets mon bout de code à disposition ainsi que la documentation.

svn co https://svn.llaumgui.com/javascript/mootools_1.1.x/dc_remember/

On remarquera qu'il y a 2 fichiers : un fichier source avec le code lisible et commenté; et une version compressée avec YUI Compressor. D'ailleur, La compression des javascripts donnera bientôt lieu à un nouveau billet.

MiKTeX package manager pour Linux

Aurélien Bompard

Il y a plusieurs personnes autour de moi qui utilisent LaTeX sous Linux, et qui ne sont pas informaticiens (principalement Anne et des ami(e)s de l'École des Chartes).

Et bien il y a un truc qui manque sérieusement à la version Linux de LaTeX (TeTeX ou TeXLive), c'est le gestionnaire de paquets de la version Windows (MiKTeX). Il est aux packages LaTeX ce que le gestionnaire de paquets de la distribution est au système : il permet de lister les paquets disponibles, de les télécharger, de les installer automatiquement, de les mettre à jour, d'afficher la documentation, et tout et tout.

En fait, une version en ligne de commande est disponible, mais elle est rarement intégrée dans les distributions (tiens, faut que je la package et que je la propose chez Fedora…), et puis pour les non-informaticiens, une interface en ligne de commande ça rebute un peu.

Un portage de l'interface graphique Windows est proposé, et sera peut-être réalisé si il y a assez de dons.

En attendant, j'ai fait une petite interface graphique très très basique pour exécuter les fonctionnalités de base. Elle est en shell basé sur zenity, donc c'est vraiment basique, mais bon, ça peut dépanner. Pour l'instant je n'ai pas fait de paquet installable, mais le script est dispo ici, ou par git avec cette commande :

git clone http://aurelien.bompard.org/projects/latex/mpm-gui.git

L'objectif est de rester simple en attendant la décision sur le vrai gestionnaire de paquets, mais si vous trouvez des bugs ou si vous avez des petites fonctionnalités à ajouter je suis intéressé ! :)

Bien sûr, il faut avoir installé le “MiKTeX Package Manager”, ou mpm, compilable en téléchargeant les sources de MiKTeX. Si vous utilisez Fedora, j'ai fait un package. Je vais le proposer chez Fedora je pense, si je trouve le courage de le maintenir ensuite dans le futur pour l'éternité… (faire un package c'est facile, mais le maintenir ensuite à jamais, c'est une autre affaire)

Développement

MiKTeX package manager pour Linux

Aurélien Bompard

Il y a plusieurs personnes autour de moi qui utilisent LaTeX sous Linux, et qui ne sont pas informaticiens (principalement Anne et des ami(e)s de l'École des Chartes).

Et bien il y a un truc qui manque sérieusement à la version Linux de LaTeX (TeTeX ou TeXLive), c'est le gestionnaire de paquets de la version Windows (MiKTeX). Il est aux packages LaTeX ce que le gestionnaire de paquets de la distribution est au système : il permet de lister les paquets disponibles, de les télécharger, de les installer automatiquement, de les mettre à jour, d'afficher la documentation, et tout et tout.

En fait, une version en ligne de commande est disponible, mais elle est rarement intégrée dans les distributions (tiens, faut que je la package et que je la propose chez Fedora…), et puis pour les non-informaticiens, une interface en ligne de commande ça rebute un peu.

Un portage de l'interface graphique Windows est proposé, et sera peut-être réalisé si il y a assez de dons.

En attendant, j'ai fait une petite interface graphique très très basique pour exécuter les fonctionnalités de base. Elle est en shell basé sur zenity, donc c'est vraiment basique, mais bon, ça peut dépanner. Pour l'instant je n'ai pas fait de paquet installable, mais le script est dispo ici, ou par git avec cette commande :

git clone http://aurelien.bompard.org/projects/latex/mpm-gui.git

L'objectif est de rester simple en attendant la décision sur le vrai gestionnaire de paquets, mais si vous trouvez des bugs ou si vous avez des petites fonctionnalités à ajouter je suis intéressé ! :)

Bien sûr, il faut avoir installé le “MiKTeX Package Manager”, ou mpm, compilable en téléchargeant les sources de MiKTeX. Si vous utilisez Fedora, j'ai fait un package. Je vais le proposer chez Fedora je pense, si je trouve le courage de le maintenir ensuite dans le futur pour l'éternité… (faire un package c'est facile, mais le maintenir ensuite à jamais, c'est une autre affaire)

Développement

Comparer deux masques en C++

Fabien Nicoleau

Il est facile en C/C++ de savoir si une chaine correspond à un masque, surtout si celui-ci ne contient que des étoiles. On peut même d'ailleurs utiliser la fonction "fnmatch()". En revanche, comment comparer deux masques, c'est à dire savoir s'ils recouvrent le même type de chaîne ? Par exemple, eponyme*toto correspond il avec *toto  (utile pour comparer un masque de user IRC par rapport à un masque de ban) ? Le problème semblait difficile, et c'est "bigbourin" qui en quelques dizaines de minutes à pondu le code :

int masksMatch(char*str1,char*str2)
{  if (*str1 == 0 && *str2 == 0)
    return (1);
  if (*str1 == '*')
    {
      if (*str2 == 0)
      return (masksMatch(str1 + 1, str2));
      else
      return (masksMatch(str1 + 1, str2) || masksMatch(str1, str2 + 1));
    }
  if (*str2 == '*')
    {
      if (*str1 == 0)
      return (masksMatch(str1, str2 + 1));
      else
      return (masksMatch(str1 + 1, str2) || masksMatch(str1, str2 + 1));
    }
  if (*str1 == *str2)
    return (masksMatch(str1 + 1, str2 + 1));
  return (0);
}

La fonction renverra '1' si le masque str1 correspond au masque str2.

Bravo et merci à 'bigbourin'.

Fabien

Livre : Bien développer pour le Web 2.0 - Les exemples

Fabien Nicoleau

Dans mon billet précédent, je parlais du livre "Bien développer pour le Web 2.0". Dans ce livre sont donnés quelques exemples illustrant les possibilités du web 2.0, mais sont codés en ruby. Comme exercice perso, et pour ceux qui préferent, j'ai donc repris quasiement tous les exemples et les ai portés en PHP. J'en fait le descriptif dans ce billet et donne les sources de chaque exemple en pièce jointe du billet. L'url directe de tous les exemples est : http://nicoleau.fabien.free.fr/web2-0/

  • hi_timed, exemple basique. Cliquer sur le bouton "Bonjour" affiche le contenu d'un fichier coté serveur, alors que le bouton "Quelle heure est il?" appelle un script PHP retournant l'heure
  • sauvegarde est aussi un exemple basique. Il suffit d'entrer un mot puis de quitter la zone avec la souris (cliquer ailleurs). Un script ajax sauvegarde alors la valeur dans une session PHP, et si on recharge la page, cette valeur est affichée
  • highlight est lui un exemple utilisant aculo. Cliquer dans la zone permet de la faire flasher
  • opacity est encore un exempel aculo, y'a qu'à lire et faire :)
  • scale, l'effet aculo
  • parallel, une combinaison de opacity et sacle
  • progressbar est un retour à ajax. ne vous y trompez pas, il y a bien un dialogue client/serveur. Dans cet exemple, la valeur de progression est en fait en permanance renvoyée par le serveur, qui la fait évoluer aléatoirement, et le script js en fait ensuite l'affichage dans al progressbar. Idéal pour suivre un traitement
  • sortable_one_list mets en pratique l'utilisation du trie de list par aculo
  • sortable_two_lists, la meme chose, mais avec deux listes
  • draggable, aculo et sapuissance :). Exemple inutile
  • droppable, beaucoup plus sympa! Exemple idéeal pour une boutique, il faut ici bien aussi comprendre ce qui se passe. Lorsque vous faites glisser un élément dans votre pannier, ou que vous le faite glisser dans la corbeille, un script PHP est appellé coté serveur pour faire le compte ou le décompte. De la à remplir un bon de commande virtuel, il n'y a qu'un pas
  • Enfin, autocompleter, couple aculo et ajax afin de géré l'autocompletion. Entrez quelques lettres d'une variable PHP $_SERVER, et le script vous propose de la completer. Enfin, sélectionnez la, et il vous en donne la valeur. Entrez "REMOTE_ADDR" pour voir votre adresse IP

Voilà, en espérant que ca donne des idées à certains. N'oubiez pas les pièces jointes pour avoir les sources.

Fabien