David Heinemeier Hansson (le créateur de Ruby On Rails) qui rend hommage aux possibilités de PHP, je ne pensais pas lire ça un jour !
02Apr 2008
Poissons de l'année
12:25 - Par Raphaël - aucun commentaire
Eh oui, encore un 1er avril riche en fausses annonces !
Mon best of :
- Virgle : The Adventure of Many Lifetimes
- Une fonctionnalité d'antidatage de mails chez Gmail
- Après Ruby On Rails, voici Cobol On Cogs !
- Mingle Proj-o-matic
Moralité : si vous avez une annonce importante à faire en tant que développeur, attendez le 2 avril !
25Mar 2008
PHP TestFest
10:09 - Par Raphaël - un commentaire
update : Le TestFest vient d'être annoncé officiellement sur php.net.

Si vous avez toujours rêvé de contribuer au bon développement de PHP, mais que le C vous intimide, voici une occasion à ne pas rater. En effet, la communauté PHP organise au mois de mai le TestFest 2008, un évènement visant à améliorer la panoplie de tests unitaires de PHP. Ecrire des tests est à la portée de n'importe quel développeur PHP, et de nombreux User Groups vont organiser des réunions pour vous assister dans cette démarche. Plus de détails très bientôt !
13Mar 2008
Slides PHPQuébec 2008
22:30 - Par Raphaël - aucun commentaire
Après un ski trip extraordinaire grâce à un enneigement particulièrement généreux et des organisateurs très sympathiques, je suis actuellement à Montréal pour la conférence annuelle de PHPQuébec. J'ai une nouvelle fois parlé des Rich Desktop Applications, et vous pouvez télécharger mes slides si le sujet vous intéresse. Je profite de l'occasion pour remercier chaleureusement les organisateurs, dont la gentillesse et l'efficacité font de cette conférence un grand moment !
08Dec 2007
Type hinting en PHP et SPLTypes
15:18 - Par Raphaël - un commentaire
Il y a en ce moment une discussion animée sur la mailing list PHP-DEV à propos du type hinting. Plus précisément, s'il est aujourd'hui possible en PHP5 de forcer un paramètre d'une fonction ou méthode à être une instance d'une classe particulière, le seul type scalaire accepté pour le type hinting est le type tableau :
class Foo {
public function bar(MyObject $param) { // OK
...
}
public function bas(array $param) { // OK
...
}
public function bat(float $param) { // PAS OK
...
}
Certains voudraient étendre le type hinting à tous les types scalaires de PHP (integer, float, string, etc...), mais bien sûr d'autres ne sont pas d'accord, souvent parce qu'ils n'en voient pas l'intérêt ou parce qu'ils trouvent cela contraire à la philosophie de PHP (qui se veut un langage dynamique). Pour ma part, je vois au moins un intérêt au type hinting : la génération automatique d'un fichier WSDL à partir du code PHP d'un service web. En effet, l'API de Réflexion de PHP vous permet d'ores et déjà de récupérer le type des arguments d'une méthode, comme l'illustre l'exemple suivant :
class MyObject {}
class Foo {
public function bar(MyObject $param) {}
}
$ref = new ReflectionClass('Foo');
$params = $ref->getMethod('bar')->getParameters();
foreach ($params as $param) {
echo "parameter $".$param->getName()." (".$param->getClass()->getName().")\n";
}
Mais sans support des types scalaires dans le type hinting, cette technique n'est pas idéale. Si une méthode prend comme argument un entier, cela vous oblige à créer une classe Integer, qui mapperait vers le type XML Schema xs:integer. Le framework de WSO2, qui permet la génération automatique de fichiers WSDL, utilise le principe des annotations de Java pour résoudre le problème. L'idée est de décrire le type des arguments dans un commentaire, qui sera parsé par le framework :
/**
* The purchaseOrder function
* @param int $itemNo ID of the item to be purchased
* (maps to the xs:int XML schema type )
* @param string $date Date that the purchase order was done
* (maps to the xs:gDate XML schema type)
* @return int $price tolal price
* (maps to the xs:nonNegativeInteger schema type )
*/
function purchaseOrder ($itemNo, $date)
{
// some logic
return $Price;
}
L'idée est bonne, mais une solution en PHP pur me satisferait plus. Pour cette raison, un support des types scalaires dans le type hinting me parait intéressant, d'autant plus que le type hinting reste optionnel en PHP, alors pourquoi ne pas l'implémenter jusqu'au bout. En attendant que cela se fasse, une autre solution pourrait bientôt être possible. En effet, Marcus Börger et David Coallier travaillent actuellement sur une extension de SPL nommée SPLTypes. Pas de manuel pour l'instant, juste une petite description par l'un des auteurs. Plutôt que de créer vos propres classes Integer, Float, etc... pour le type hinting, il vous suffirait alors d'utiliser les types SPL : SPLInt, SPLFloat, etc... A suivre de près !
05Dec 2007
Des graphiques avec jQuery
14:02 - Par Raphaël - aucun commentaire
Après avoir longtemps utilisé le couple Prototype / Scriptaculous, je suis récemment tombé amoureux de jQuery. Deux raisons à cela : c'est un poids plume (14 Ko une fois minifié et gzippé) contrairement à Prototype qui prend de plus en plus d'embonpoint, et j'adore sa syntaxe (spécialement le chaînage de méthodes). La communauté jQuery est également très active, en témoigne le nombre de plugins disponibles. Mais attention, le plugin que j'ai découvert ce matin via je ne sais plus qui est une vraie merveille : il s'agit de Flot, qui vous permet de tracer des graphiques magnifiques en exploitant la balise canvas introduite par Apple dans Webkit et aujourd'hui reprise par Firefox et Opéra. La version minifiée pèse seulement 20 Ko, et quand on voit le résultat, on ne peut qu'applaudir. Encore un outil à mettre sous le code pour le jour où...

01Dec 2007
Vector Magic : un bel exemple d'application Flex
15:20 - Par Raphaël - aucun commentaire
Les RIAs utilisant Flex sont de plus en plus courantes aujourd'hui, mais trop souvent des solutions type AJAX auraient très bien pu faire l'affaire. Aussi suis-je heureux de pouvoir vous présenter une application très réussie qui exploite vraiment les capacités de Flex : il s'agit de Vector Magic, créé par le laboratoire d'intelligence artificielle de l'université de Stanford. Cet outil vous permet de vectoriser n'importe quelle image bitmap, il peut donc vous être très utile si comme moi vous ne disposez pas d'une licence Illustrator. J'ai tout d'abord été bluffé par la qualité de leur algorithme : certes je ne suis absolument pas un expert en algorithme de traitement d'images, mais j'ai été très impressionné de voir le logo de Stato reconnu automatiquement comme étant un logo (voir l'image ci-contre).
De plus, la qualité de la vectorisation obtenue avec les réglages par défaut est remarquable. Mais si cela ne vous suffit pas, Vector Magic vous propose un outil pour réparer les erreurs de segmentation de l'image vectorielle. Et c'est en l'utilisant que l'on comprend l'intérêt de Flex : pour des UI aussi "riches", Flex est encore aujourd'hui la meilleure (et la seule ?) solution. En résumé, un outil très pratique, et une interface très bien conçue, je vous le recommande !
29Nov 2007
WampServer 2 et PHP 6
11:19 - Par Raphaël - 3 commentaires
Romain Bourdon a profité du Forum PHP 2007 pour nous présenter en avant-première sa nouvelle version de Wamp, désormais appellé WampServer, et force est de constater qu'il a mis au point ce qui est certainement la meilleure plateforme de dev PHP sous Windows à l'heure actuelle. Comme beaucoup d'entre vous, j'ai longtemps utilisé EasyPHP avant de migrer sous xampp lorsque je me suis mis à PHP 5. Mais WampServer apporte une fonctionnalité de premier ordre : la possibilité d'installer différentes versions de PHP, Apache et MySQL. 25 versions différentes de PHP sont ainsi proposées, de la 4.1.2 à la 5.2.5. L'intérêt de la chose est évident : cela vous permet de tester votre code sous différents environnements de production. Les développeurs de librairies, ou ceux qui cherchent à migrer du code PHP 4 vers PHP 5 pourront ainsi être beaucoup plus productifs. En dehors de cette fonctionnalité majeure, WampServer vous permet de gérer la configuration de votre serveur très simplement : l'activation d'une extension PHP se fait par exemple par le menu de WampServer, pas besoin d'éditer le php.ini ! Bref, WampServer est une vraie réussite, et je remercie Romain de nous avoir donné un si bel outil.
Mais bien sûr, il m'en fallait plus ;) Cela faisait longtemps que j'avais envie de faire mumuse avec les prochaines versions de PHP (5.3 et 6), et en testant WampServer, j'ai immédiatement pensé à essayer d'installer un snapshot de PHP 6. Et j'y suis parvenu très facilement, preuve que WampServer est très bien conçu. Voici la recette : commencez par télécharger un snapshot de PHP 6. En admettant que WampServer est installé dans C:\wamp, créez un nouveau dossier C:\wamp\bin\php\php6.0.0 et placez-y le contenu dézippé du snapshot. Créez 2 copies du fichier php.ini-dist, que vous nommerez php.ini et phpForApache.ini. Enfin, créez un fichier wampserver.conf avec le contenu suivant :
<?php $phpConf['phpIniDir'] = '.'; $phpConf['phpExeDir'] = '.'; $phpConf['phpConfFile'] = 'php.ini'; $phpConf['apache']['2.0']['LoadModuleName'] = 'php6_module'; $phpConf['apache']['2.0']['LoadModuleFile'] = 'php6apache2.dll'; $phpConf['apache']['2.0']['AddModule'] = ''; $phpConf['apache']['2.2']['LoadModuleName'] = 'php6_module'; $phpConf['apache']['2.2']['LoadModuleFile'] = 'php6apache2_2.dll'; $phpConf['apache']['2.2']['AddModule'] = ''; ?>
Démarrez WampServer, vous devriez voir votre nouvelle version 6.0.0 dans PHP > Version. Cliquez dessus, laisser les services redémarrer et cliquez sur PHP > php.ini. Cherchez la directive extension_dir qui se trouve dans la section "Paths and Directories" et indiquez l'emplacement du répertoire contenant les extensions, par exemple :
extension_dir = "c:/wamp/bin/php/php6.0.0/ext/"
Redémarrez les services, et c'est terminé, vous disposez maintenant d'une installation de PHP 6 fonctionnelle, ce que vous pouvez vérifier à l'aide d'un phpinfo() !
27Nov 2007
Stato 0.9
09:00 - Par Raphaël - 3 commentaires
Une nouvelle release pour mon framework Stato. Pas de nouveauté majeure, plutôt de nombreuses petites améliorations, ainsi qu'une réorganisation en 3 paquetages distincts : Mercury pour l'ORM, Gemini pour le middleware (View-Controller) et un paquetage de composants dans lequel j'ai placé entre autre le Mailer, les Services Web, les helpers Prototype, etc... Il me reste quelques améliorations et bugfixes à faire pour la version 1.0, qui ne devrait pas tarder.
26Nov 2007
Slides Forum PHP 2007
13:36 - Par Raphaël - aucun commentaire
23Nov 2007
Google pour craquer des mots de passe MD5
15:19 - Par Raphaël - aucun commentaire
Pas besoin de Rainbow table (dans certains cas) pour craquer un mot de passe haché en MD5 : il suffit de faire une recherche dans Google avec le MD5 et on peut parfois trouver le mot de passe correspondant !
http://www.lightbluetouchpaper.org/2007/11/16/google-as-a-password-cracker/
Source : /.
15Nov 2007
A propos d'HTML, du DOM et des éditeurs WYSIWYG...
08:29 - Par Raphaël - 2 commentaires
L'un de mes projets en cours consiste à améliorer l'interface d'administration d'un CMS que je compte publier sous la forme d'un "engine" pour Stato. Ce CMS étant destiné à des utilisateurs lambda (c'est à dire inaptes à utiliser une syntaxe wiki et encore moins à coder du HTML à la main dans un textarea), j'avais dû me résoudre à intégrer un éditeur WYSIWYG écrit en Javascript. Mon choix à l'époque avait été d'utiliser TinyMCE. J'avais pu le customiser suffisamment pour bien l'intégrer dans le CMS, et mes utilisateurs étaient satisfaits.
En remaniant l'interface, j'ai décidé de cesser d'utiliser prototype et de le remplacer par extjs, qui propose notamment un composant tree très efficace. Séduit par les possibilités de cette librairie, et bien décidé à compenser son poids (463 Ko en version "minifiée") par une utilisation maximale de ses capacités, j'ai souhaité remplacer TinyMCE par l'éditeur HTML de extjs. Seulement voilà, cet éditeur est très léger, et beaucoup de fonctionnalités manquent par rapport à TinyMCE. J'ai donc créé une extension de cet éditeur, qui commence à vraiment prendre tournure. A ce sujet, créer une extension d'un composant de extjs est un jeu d'enfant...
Croyez-moi, travailler sur l'implémentation d'un éditeur HTML en Javascript est vraiment très formateur, j'ai appris beaucoup de choses sur le DOM, et notamment sur les différences d'implémentation du DOM et de CSS dans les navigateurs. Ce qui m'amène à vous faire part de la pensée suivante : en l'état actuel des spécifications HTML et CSS du W3C, il me parait impossible d'arriver à une implémentation "standard" dans tous les navigateurs. Les balises proposées par HTML sont de trop bas niveau, et le modèle de boîte est flou. Il faudrait s'inspirer du modèle de boîte de XUL pour en faciliter l'implémentation.


