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

mardi, décembre 4 2012

FakeServerConf, une nouvelle lib pour vos tests PHP

Pour tester certains composants du framework Jelix, comme la partie "routage", j'ai besoin d'avoir des paramètres serveurs correctement définis, en particulier dans la variable globale $_SERVER. En effet, les tests étant lancés en ligne de commande avec PHPUnit, $_SERVER ne contient pas du tout la même chose que lorsque le script PHP est lancé par un serveur HTTP. Pire, pour une même URL, nous n'avons pas la même chose selon si PHP est lancé en CGI/FPM, ou si c'est le module PHP pour Apache qui est utilisé.

Bref, cela devient fastidieux dans un environnement de tests en ligne de commande de simuler un contexte HTTP.

C'est pourquoi j'ai crée cette petite bibliothèque, FakeServerConf. On lui indique le type de serveur que l'on veut simuler, et l'url que l'on demande (avec la méthode GET, POST, DELETE...), et FakeServerConf rempli correctement $_SERVER, $_GET et $_POST avec les bonnes valeurs. Vous n'avez plus qu'à tester vos classes qui utilisent ces variables. Et vous pouvez de plus tester avec les différents types de serveurs pris en charge par FakeServerConf. Pour l'instant il n'y a qu'Apache+mod_php et Apache +cgi ou fpm.

vendredi, novembre 30 2012

La nouvelle API password dans Jelix

Il y a un mois je sortais les dernières versions correctives de toutes les branches actives du framework Jelix. Et ça fait un mois que je pensais à écrire ce billet :-).

La raison de ce billet est que ces versions correctives inclues non seulement quelques corrections de bugs comme d'habitude, mais aussi une amélioration dans le système d'authentification de Jelix : il peut désormais utiliser la nouvelle API de mot de passe que proposera PHP 5.5. Une bibliothèque en PHP, password_compat permet de l'utiliser dés maintenant en attendant la sortie de PHP 5.5 et est incluse dans Jelix. J'y ai d'ailleurs apporté quelques modifications pour l'utiliser sur Debian Squeeze.

Pourquoi utiliser cette API ? Parce qu'elle est très simple à utiliser, tout en apportant un hachage fort des mots de passe en utilisant l'algorithme Blowfish par défaut. Dans PHP, on a déjà des fonctions pour encrypter fortement du contenu. Mais il faut avouer que c'est particulièrement compliqué à utiliser.

Pour en savoir plus sur cette nouvelle API, voir l'article de Pascal Martin.

Abandonnez md5, sha1 pour hacher vos mots de passe et les stocker en base de données, ou au moins ajoutez un sel aléatoire. Préférez SHA2 ou supérieur, bcrypt, blowfish, qui sont plus robustes aux attaques de type "brute force", aux "rainbow tables" etc...

jeudi, août 30 2012

Sortie de Jelix 1.4

Diantre ! 10 mois que je n'ai pas parlé de mon framework PHP Jelix sur mon blog ! Cela date de... la sortie de Jelix 1.3 :-) Et dire que quelques semaines après la 1.3, j'avais annoncé sur la mailing-list que j’accélérerais la cadence des sorties à 2-3 mois. C'est raté. Il faut croire que le rythme est bloqué à 10 mois.

Donc voilà Jelix 1.4 avec sa tonne de nouveautés : cache HTTP, autoload PSR0, templates virtuelles, amélioration de la prise en charge des codes langues, des modules de plus en plus autonomes etc...

Le retard de cette sortie est due à plusieurs choses :

  • Déjà, les vacances d'été, chantiers chez moi etc : j'ai été souvent offline ces dernières semaines :-)
  • La faute à pas de temps
  • La mise en place de docs.jelix.org
  • La libération du code source des sites de Jelix.org

La faute à pas de temps : en effet, j'ai eu un contrat de plusieurs mois (qui se termine), sur un projet hyper intéressant (à base de XUL/javascript), mais plutôt éloigné de chez moi. Donc beaucoup de temps de trajets et de fatigue. Résultat, avec les autres tâches à coté, le projet n'a pas avancé aussi vite que j'aurai voulu

La réalisation du site http://docs.jelix.org a permis de migrer les manuels, du wiki Dokuwiki vers un nouveau système de wiki basé sur Git, et que j'ai développé avec Jelix bien entendu : Gitiwiki. J'en parlerai plus longuement une autre fois. Basculer la documentation sur Git a permis d'accélérer les améliorations du manuel : je peux maintenant écrire en offline (dans le RER par exemple). Par contre, plus en online...Temporairement... Gitiwiki fonctionne pour le moment en lecture seule. Il faut encore que je développe la possibilité d'éditer en ligne :-) (c'est en cours). Cependant, cela ne devrait empêcher personne de contribuer au manuel : il est sur github.

Enfin, comme je disais, j'ai aussi passé du temps à libérer le code source du site jelix.org et bien sûr le code du nouveau site docs.jelix.org, dans l'espoir d'avoir plus d'aide sur tout ce qui fait tourner le projet ;-).

Et puis comme je ne suis pas toujours discipliné, j'ai préféré ces 2-3 derniers mois, à commencer à développer Jelix 1.5 plutôt que de paufiner Jelix 1.4 !

mardi, février 21 2012

Autoload avec modération

Dans un billet de Loïc d'Anterroches qui cherche à comprendre pourquoi Symfony 2 est très lent dans les benchs qu'il a fait, j'ai appris via un commentaire que Symfony 2 chargeait par défaut tout un tas de truc (avant d'arriver à l’exécution même du code propre à la page), et notamment donc, des "autoloaders" pour chaque composant. D'ailleurs, un "conseil" de la part d'un "expert" SF2, indique qu'il faut désactiver des choses, comme par exemple l'autoloader pour swiftMailer, qui serait l'une des causes de ralentissement. La conséquence ne m'étonne guère au final. Par contre que SF2, soit disant un framework performant, le fasse par défaut, m'a étonné, voir même stupéfié.

Lire la suite...

mardi, juin 7 2011

Testez la beta de Jelix 1.3

J'ai sorti ce week-end dernier la beta du framework PHP Jelix 1.3. Pas mal de nouveautés sont disponibles.

Tout d'abord, quelques allègements dans la structure d'une application : il y a maintenant qu'un seul boostrap application.init.php pour tous les points d'entrées, et un seul répertoire temporaire. Ensuite, le script jelix.php pour lancer des commandes d'aide au développement, a été remplacé par un script cmd.php qui est placé dans l'application. Son utilisation est alors facilitée puisqu'on n'a plus le nom de l'application à indiquer en argument.

Il y a une nouvelle gestion des erreurs et des exceptions, plus puissante, mais aussi plus conviviale. Les messages d'erreurs sont en effet maintenant pris en charge par le système de log de Jelix, qui a lui aussi connu des évolutions (il a maintenant un système de plugin). On peut aussi fournir sa propre page d'erreur, permettant d'afficher un message "convivial" à l'utilisateur, avec le look de l'appli, plutôt qu'un message technique barbare sur une page blanche.

Deuxième grosse nouveauté : le développeur peut activer la toute nouvelle barre de debug pour avoir un affichage détaillé des erreurs, mais aussi des logs, de la liste des requêtes SQL, des messages SOAP, du contenu de la session etc. Et comme la barre est extensible, on peut développer/ajouter des plugins pour afficher d'autres informations.

Du travail a aussi été fait pour faciliter le développement de tests PHPUnit pour une appli Jelix. L'intégration de Simpletest, bien que toujours disponible, est considérée maintenant comme obsolète. D'ailleurs la migration des tests de Jelix vers PHPUnit a commencé.

Enfin le système de droits jAcl2 a vu quelques améliorations techniques, mais aussi au niveau de l'interface de gestion de droits. Et puis bien sûr, une tonne de petites améliorations ont été faite ici et là.

Pour la migration d'une application jelix 1.2, c'est une affaire de quelques minutes, grâce au système de mise à jour de Jelix, mais aussi parce que les API n'ont que très peu changé.

Cette beta a été développée et largement éprouvée lors de la réalisation d'un gros projet d'un de mes clients (et par des contributeurs bien sûr). Vous pouvez donc l'utiliser à priori sans soucis particulier :-). Et d'ici la version finale dans quelques semaines, je ne pense pas qu'il y aura de gros changements.

À propos de clients et de l'avenir de Jelix, il faut savoir qu'une bonne partie des contrats que j'ai eu au cours de ces 12 derniers mois, concernait des projets relatifs à Jelix (consulting, formations, développement d'appli...), et ce n'était pas que pour des petites boites (BNP Paribas, Transatel..). Ce framework ne cesse donc de se déployer en entreprise. Et je compte faire en sorte que pour les prochains mois, le mouvement s’accélère !

Bien souvent on me posait la question de la pérennité du framework. Après 5 ans d'existence, motorisant des gros sites comme Overblog, tout un tas d'intranets et de sites publiques divers et variés, j’espère que cette question se posera moins souvent :-) Merci à ceux qui ont fait confiance au projet, et à ceux qui contribuent, que ce soit au niveau du code ou au niveau communauté.

PS: j'ai oublié de dire que le manuel pour cette version 1.3b est disponible, complet, en français et en anglais, en ligne ou en PDF

dimanche, novembre 7 2010

Jelix 1.2RC2, forum PHP et Rarangi

Ça fait quasiment un an que je n'ai pas parlé de Jelix sur mon blog (oups !). Ce n'est pas pour autant que le projet n'a pas avancé, bien au contraire !

Bien qu'initialement, la version 1.2 du framework était prévue il y a plus d'un an, elle ne va sortir que ce mois-ci. J'expliquerai pourquoi dans un prochain billet. Une "release candidate" est donc disponible, avec son manuel en ligne et en version PDF, le tout bien sûr, en anglais et en français. Cette version comporte une tonne de nouveautés.

Cette version 1.2 à venir est particulièrement stable car déjà utilisée sur pas mal de projets, ce qui a permis de remonter pas mal de bugs et améliorations à faire. Ainsi des préversions de Jelix 1.2 sont utilisées :

  • Dans quelques un de mes projets clients, réalisés ces derniers mois :-)
  • Dans des projets à venir d'Over-blog, réalisés donc par l'équipe d'Over-blog. Sachant que, pour ceux qui ne sont pas au courant, qu'ils utilisent Jelix depuis plusieurs années pour motoriser les blogs d'Over-blog ;-) (l'une des plus grosses plateforme européenne de blog).
  • Dans la future version 1.4 de HavefnuBB, un forum réalisé avec Jelix (et utilisé sur http://jelix.org ;-)) (la 1.3 utilise jelix 1.1)
  • Dans Rarangi, une alternative à phpdoc.

Bref, n'hésitez pas à tester et à utiliser cette RC2 !

Si vous voulez en savoir plus sur les nouveautés, rendez-vous au stand jelix au forum php, mardi et mercredi prochain. J'y serais avec d'autres contributeurs, dont Olivier "Foxmask" Demah, l'auteur de HavefnuBB.

Au sujet de Rarangi, c'est un autre projet qui me tiens à coeur et que j'avais commencé fin 2008, mais avec le manque de temps, ce n'est que maintenant qu'il commence à être opérationnel. PHPdoc commence à me gonfler sérieusement. Il est buggé de partout, compliqué à personnaliser, demande énormément de ressources. Et je n'accroche pas à doxygen. Bref, je compte m'en débarrasser définitivement sur jelix.org, en le remplaçant par Rarangi ces prochaines semaines, une fois que j'aurais finalisé les templates de détails des classes et fonctions, et amélioré la navigation. J'espère apporter une alternative sérieuse à phpdoc. Les futures versions embarqueront notamment un moteur de recherche et autres fonctionnalités inédites.

Une démo de Rarangi est visible en ligne. Il reste comme je l'ai dit, des améliorations de design et de lisibilité sur certains type de pages. N'hésitez pas à me faire part de vos impressions sur cette pre-0.1 :-) (et si quelqu'un veut bien se dévouer pour le design.. car comme vous le voyez, ce n'est pas ma spécialité :)

lundi, mars 29 2010

Modifier un fichier ini en php

J'aime bien utiliser les fichiers ini pour tout ce qui est configuration. En php, c'est très rapide à charger avec la fonction parse_ini_file (beaucoup plus rapide qu'un fichier de conf en php, avec un facteur 10 je crois), et puis c'est très simple à modifier, la syntaxe étant minimaliste.

C'est pourquoi j'utilise des fichiers ini dans jelix, et pas des trucs du genre yaml, syntaxe que je trouve hyper compliquée [1], en tout cas trop pour l'utiliser pour un fichier de conf [2].

Dans Jelix, il y a des outils pour le développeur pour l'aider à construire son appli, et il arrive donc que ces outils aient à modifier un fichier ini. J'avais fait une première implémentation naïve dans une classe, jIniFile permettant d'enregistrer un fichier ini : une méthode pour lire (avec parse_ini_file), une autre pour écrire en lui passant un tableau de clés/valeurs, et le nom du fichier.

Problème de cette classe : on perd tous les commentaires et les sauts de lignes à la lecture avec parse_ini_file. C'est assez fâcheux pour un fichier de configuration, où les commentaires peuvent être nécessaires.

D'où une autre classe jIniFileModifier, qui permet de charger, modifier et enregistrer un fichier ini, sans perdre les commentaires et les espacements. Elle permet même de supprimer une clé/valeur, avec le commentaire qui lui est associé (le commentaire qui la précède). Cette classe supporte les sections et les tableaux de valeurs. En fait, j'ai fait en sorte qu'elle soit compatible au maximum avec le format ini utilisé par parse_ini_file[3].

Vous pouvez l'utiliser seule dans vos projets, elle est totalement indépendante de Jelix. Par contre, ne l'utilisez pas pour une simple lecture, ce n'est pas son objectif principal, parse_ini_file est beaucoup plus performante pour ça.

Notes

[1] pour preuve : la spécification YAML : 77 pages A4, celle du XML : 30 pages...

[2] si j'avais à choisir un format pour stocker des options de manière arborescente, je choisirais json

[3] il y a en effet quelques variantes, suivant les logiciels

jeudi, octobre 8 2009

PHP n'est pas un bon langage de template

Ça me fait plaisir de lire ce genre de billet, surtout venant de la part d'une figure du monde PHP, à savoir Fabien Potencier (monsieur Symfony). Ça fait des années que je pense comme Fabien : PHP est un mauvais langage de template. Pas assez sécure (que fait-t-on des templates uploadés par des utilisateurs par exemple ?), trop verbeux, parfois trop complexe pour les intégrateurs web qui ne savent pas programmer, et n'impose pas une séparation entre logique métier et "vue" (vu que dans un template en PHP, on peut appeler tout et n'importe quoi).

C'est pourquoi j'ai toujours préfèré utiliser un langage qui soit conçu pour les templates, pour faciliter leurs écritures d'une part, et de bien faire une séparation entre la logique métier et la "vue". Et c'est pourquoi dans Jelix, j'ai crée mon propre moteur de template, ultra léger et performant, jTpl, qui est disponible en version standalone, dont je devrais sortir la version 1.0 dés que j'ai un peu de temps.

mardi, juin 30 2009

Sorties majeures aujourd'hui

D'abord celle de Firefox 3.5. Et puis celle de PHP 5.3. Ils apportent chacun leur gros lot de nouveautés.

Notez les chiffres des versions de ces deux logiciels :-)

Sans oublier TwitFactory, la nouvelle appli de Daniel.

vendredi, juin 19 2009

Jelix 1.0.9, Jelix 1.1.3 et WikiRenderer 3.1

Dans le courant de la semaine, j'ai publié des nouvelles versions correctives des deux branches actives de Jelix, le framework PHP. Vous pouvez mettre à jour vos installations Jelix sans risque. Il est même hautement recommandé de mettre à jour votre Jelix 1.1 si vous utilisez les modules d'interfaces de gestion de droits et de gestion d'utilisateur, à cause de problèmes critiques lorsque l'on change les droits (des droits peuvent être enlevés inopinément), et sur l'édition d'un profil d'un utilisateur.

Et puis aujourd'hui, je viens de sortir une nouvelle version de WikiRenderer, la 3.1, qui corrige quelques bugs, et qui apporte quelques facilités pour les développeurs de règles de transformations. Pour rappel, WikiRenderer est une classe qui permet de transformer un texte wiki dans une autre syntaxe wiki, ou en XHTML, ou tout autre langage de markup. Elle m'est très utile dans les petits modules de CMS, ou encore récemment, pour migrer le contenu wiki de XULFR d'un vieux wiki vers un nouveau wiki qui a une syntaxe différente. Et pour l'occasion de cette sortie, le site de WikiRenderer est maintenant disponible en Anglais, avec une documentation pour les développeurs.

mardi, janvier 6 2009

Rendez-vous PHP et les frameworks

Le 13 janvier prochain, à Paris, les éditions Eyrolles et l'AFUP organisent une soirée sur le theme des frameworks PHP. Il y aura notament une table ronde durant laquelle des representants de Zend Framework, Symfony, et Jelix (avec moi-même donc) débatteront, avec aussi des comparaisons avec Django (python) et Rails (ruby).

Pour les détails, voir le site d'Eyrolles et celui de l'AFUP.

vendredi, décembre 12 2008

Retour du Forum PHP 2008, et IOC dans Jelix

Un p'tit billet pour dire que ce Forum PHP 2008 était sympathique, bien organisé, avec des conférences intéressantes (au moins pour la journée de Mardi, à laquelle je suis allé).

J'ai pu notamment faire la connaissance de Fabien Potencier (monsieur Symfony), et j'ai trouvé sa conférence sur l'injection de dépendance et l'inversion de contrôle très intéressante et très pédagogique. Et du coup, j'ai enfin tout compris de ces termes barbares. (les tutoriels que j'ai pu lire par le passé sur le sujet étaient ultra théoriques et peu compréhensibles...)

En fait j'ai surtout compris que j'ai déjà utilisé l'injection de dépendance sans le savoir, et j'ai compris aussi l'intérêt d'un patch dans Jelix que m'avait soumis un contributeur, Christophe, qui a assisté lui aussi à cette conférence.

En fait donc, dans Jelix 1.1, il y a un embryon de possibilité d'inversion de contrôle ! (C'est dingue ce qu'on peut apprendre dans ce framework :-D). Christophe et moi, on a quand même constaté que ce n'était pas suffisant (d'où le terme employé, "embryon"), et donc pour la 1.2, on vous prépare du vrai IOC et de la vraie DI, bien intégré dans Jelix, réutilisant la philosophie des sélecteurs de classes de Jelix. (pour la 1.1, c'est un peu tard là, vu qu'on est au stade RC1..).

dimanche, novembre 23 2008

La documentation de Jelix en anglais

Enfin ! La version anglaise du manuel de Jelix 1.0 est terminée. Un gros merci à Bibo pour l'énorme coup de main. Il y a certainement encore des coquilles, des phrases mal tournées (mon anglais n'est pas infaillible...) mais ça s'améliorera avec le temps. Toute aide est d'ailleurs la bienvenue : c'est un wiki ;-)

Comme la version française, le manuel est disponible en PDF. Et comme la version française, il y a deux version du PDF : la première générée à chaque sortie d'une nouvelle version mineure de Jelix 1.0, et une autre générée toutes les nuits, directement à partir du contenu du wiki.

On a aussi travaillé sur le manuel de Jelix 1.1. L'édition française est presque complète, tandis que la rédaction de l'édition anglaise vient tout juste de débuter.

À propos de Jelix 1.1, il reste encore un ticket avant la publication de la première "Release Candidate". C'est donc pour très très bientôt ;-)

Prochainement aussi : Jelix 1.0.7 et jTpl standalone 1.0. J'ai pas mal amélioré cette version standalone du moteur de template de Jelix, avec une configuration plus simple et surtout plus souple, et bien sûr les quelques nouvelles fonctionnalités que l'on a dans jtpl de Jelix 1.1 ;-)

mardi, octobre 28 2008

Forum PHP, je n'y serais pas, et vous ?

mise à jour 04/12/2008 : finalement je viens !

Mis à part le fait que je ne pense pas pouvoir aller au forum php 2008, je ne trouve pas le programme vraiment excitant[1]. Par exemple, un truc qui m'a frappé : PHP 5.3 va bientôt sortir, et il n'y a aucune conférence dessus[2]. Rien non plus sur l'avancement et le futur de PHP. Les conférences parlent plus de sujets connexes à PHP que PHP lui même...

Un petit récapitulatif des conférences :

  • 3 conférences très "généralistes" sur les langages, l'histoire de php, success story...
  • 5 retours d'expérience (gloups !!)
  • 2 conférences (publicitaires) sur Oracle[3] . Rappel : Oracle est un SGBD non open-source, et peu utilisé par des projets PHP... Ça aurait été plus sympa de parler de PostgreSql, qui n'a rien à envier à Oracle sur de nombreux points...
  • 2 conférences sur le monde de l'entreprise (aucun rapport direct avec PHP, même si ça peut être intéressant)
  • 3 conférences sur des outils pour du code php (analyse de code, qualité du code, environnement de dev...)
  • 2 sur la programmation javascript et les performances coté client
  • 1 sur la sécurité, sous forme d'atelier (ça a l'air sympa ça)
  • 2 conférences plus techniques : mysql, decouplage (pfff, encore symfony :-))

L'année dernière, c'était beaucoup plus technique et orienté PHP, et avait l'air plus intéressant pour moi (bon, je n'y étais pas non plus..)

Aller, l'année prochaine, j'essaierai de faire une conf technique...

Notes

[1] ce qui ne veut pas dire que ça ne peut pas intéresser d'autres personnes, mais moi j'aime bien les conférences très techniques...

[2] heureusement, les billets que Pascal Martin écrit en ce moment comble un peu ce manque :-)

[3] ok, Oracle est des sponsors de l'événement, mais quand même...

lundi, septembre 29 2008

Jelix 1.1 beta est dispo

Ce week-end, j'ai sorti une beta de Jelix 1.1. Plein de nouveautés au programme, surtout dans le système de formulaire jForms, qui gagne en souplesse, et en fonctionnalités :

  • de nouveaux contrôles : captcha, champ caché, groupe, choix avancé, éditeur html...
  • modification dynamique du formulaire : ajout/suppression et activation/désactivation de contrôles
  • possibilité de connaître les valeurs modifiées
  • intégration de jQuery
  • générateurs sous formes de plugins, vous permettant de choisir plus facilement le format de sortie, ou la manière dont sont générés les champs du formulaire

Il y a également :

  • une nouvelle version du système de droit, jAcl2, plus facile à utiliser et à configurer. Un module est fournie pour gérer les droits.
  • le support SOAP
  • la nouvelle réponse htmlfragment pour les réponses ajax html
  • le nouveau moteur d'url basic_significant
  • des nouveaux plugins pour le moteur de template
  • les nouvelles classes utilitaires jIniModifier, jHttp, jMessage, jDuration (pour jDateTime)...

La doc en français est presque complète, et est dispo en téléchargement en pdf comme d'habitude.

La venu de cette beta vient un peu tard, c'est pourquoi je pense qu'il n'y aura pas de beta2 et qu'on passera directement à une RC, Les plus gros trucs prévus pour la beta2 seront probablement repoussés à une version 1.2. Mais vu le rythme du développement, vu que le trunk, utilisé par de nombreuses personnes, est particulièrement stable dans le temps, je pense que l'on va se permettre d'avoir un cycle de sortie plus court. (max 6 mois par exemple, on verra).

jeudi, juillet 24 2008

Sortie de Jelix 1.0.5, futur de la 1.1 et projet de bug tracker

On essaie d'être le plus régulier possible dans la sortie des versions de maintenance, donc voici Jelix 1.0.5 qui corrige des bugs mineurs. La version 1.0.6 sortira dans deux mois. Si il y a de nouveaux bugs bien sûr :-)

Après un calme assez plat dans les développements de la version 1.1, à cause de la préparation des RMLL, et d'autres occupations qui ont accaparé mon temps, l'activité a repris ces derniers jours, avec encore des nouveautés dans jForms, comme la possibilité de grouper des contrôles, une API plus complète sur les contrôles, et un nouveau contrôle <choice> pour avoir une liste de choix contenant des contrôles, comme dans un bug tracker :

  <choice ref="task">
     <label>Task status</label>
     <item value="new">
         <label>New</label>
     </item>
     <item value="assigned">
         <label>Assigned</label>
         <input ref="assignee" required="true">
             <label>assignee name</label>
         </input>
     </item>
     <item value="closed">
         <label>Closed</label>
         <menulist ref="task-done">
             <label>Status</label>
             <item value="done">Done</item>
             <item value="cancelled">Cancelled</item>
             <item value="later">Later</item>
         </menulist>
     </item>
  </choice>

J'ai encore quelques améliorations à faire, pour rendre jForms plus maléable (rajouter des champs de saisie à la volée par exemple), et après ça, probablement qu'une version beta sortira.

Au passage, si j'ai développé cette balise <choice> avec cet exemple d'utilisation pour un bug tracker, ce n'est pas par hasard. Souvenez vous de mon coup de gueule sur Trac, et des résultats de mes recherches d'un nouveau bug tracker, qui sont finalement restées vaines. Au bout du compte, j'avais décidé à l'époque d'en créer un nouveau, je me suis lancé donc dans ce développement.

Cela m'a permis d'utiliser pleinement Jelix, et de découvrir sa force (2 heures seulement pour faire la gestion complete des reports comme dans trac !), mais aussi certaines faiblesses. D'où la création d'un nouveau système de gestion de droits, jAcl2, avec son module d'admin, mais aussi des améliorations dans jForms, dont celles que je viens d'évoquer. Et tout ça est dans le trunk de jelix maintenant. Ces développements ont bien sûr ralenti ceux de mon projet de bug tracker, mais maintenant que je vais presque avoir tout ce qu'il faut, je vais pouvoir me relancer à fond dans ce projet.

Alors bien sûr, je sais que c'est un peu la mode en ce moment de faire un bug tracker en PHP (à cause entre autre je pense du concours sur developpez.com). Mais je me suis lancé dans ce projet bien avant cette mode ;-). Pour le moment, il n'est pas vraiment utilisable, mais ça va le devenir :-) Enjoy !.

mardi, juin 24 2008

Les regexp, c'est bon, mangez-en

Sur son billet "utiliser les regex avec modération", Jérôme explique que substr est plus rapide qu'utiliser preg_match. Mon commentaire sur son billet n'est apparement pas encore passé[1], je me permet donc de répondre ici, car sa comparaison est faussée.

  $extractedString = substr( $exampleString, 1, -1 );

n'est absolument pas équivalent à

   preg_match( '#^\[(\w+)\]$#', $exampleString, $matches );

En effet, dans le premier cas, il n'y a aucune vérification que le premier caractère est bien [ et le dernier ], ni que la chaine à l'intérieur des crochets ne contient que des caractères alphanumérique, contrairement à ce qui se passe dans le deuxième cas avec l'expression régulière.

Aussi, pour avoir une comparaison équitable, il faudrait faire dans le premier cas, au moins ceci :

  if(substr($exampleString, 0, 1) =='[' &&  substr($exampleString, -1) == ']')
      $extractedString = substr( $exampleString, 1, -1 );

En conséquence, les résultats des temps d'exécution sont tout autre : le premier cas est de 2 à 5 fois plus long que l'usage de l'expression régulière. Et encore, là, je n'ai pas ajouté de vérification sur le contenu de $extractedString, pour s'assurer qu'il s'agit bien uniquement que de caractères alphanumériques (je vous laisse imaginer le code qu'il faudrait développer sans l'usage d'une expression régulière).

À la limite, l'expression régulière équivalente au premier cas, serait

 preg_match( '#^.(.+).$#', $exampleString, $matches );

Et là, effectivement, preg_match est plus lent, mais c'est ici une mauvaise utilisation de preg_match. Pourquoi utiliser une expression régulière si on ne cherche pas à vérifier la syntaxe du contenu ?

Conclusion : n'hésitez pas à utiliser les expressions régulières [2] quand vous voulez extraire des données d'une chaîne et en même temps vérifier l'intégrité du contenu ;-).

Notes

[1] c'est bon, problème réglé, mais je laisse ce billet en ligne quand même :-)

[2] uniquement avec les fonctions preg_*, et non pas ereg_*, qui sont obsolètes et plus lentes

vendredi, juin 6 2008

in_array n'est pas lent

Je réagis à certains billets comme celui de nexen qui annoncent que in_array est lent, comme si c'était un scoop.

Franchement, tout développeur ayant un minimum d'experience en programmation (niveau IUT première année, premiers cours en algorithmie), sait que faire une recherche séquencielle dans un ensemble de valeur est plus lent que faire une recherche en passant par un index. Ce n'est pas un scoop. C'est mathématique.

Maintenant on n'utilise pas in_array pour faire la même chose qu'avec des isset. C'est comme si on s'aperçevait sur un circuit que la 2CV est plus lente qu'une formule 1. Bah oui mais la 2CV n'est pas conçu pour aller sur un circuit.

Bref, l'auteur du billet original n'a pas choisi les bonnes fonctions pour coder son truc, et il s'étonne ensuite que c'est lent. Normal quoi.

Conclusion : in_array n'est pas lent. Il fait ce qu'il doit faire. Il n'est lent que si on l'utilise dans des situations inadaptées. point.

mercredi, juin 4 2008

Présent au phpCamp

L'afup organise un "phpCamp", une rencontre informelle pour discuter et échanger sur PHP, les projets PHP etc. Ce sera donc Samedi et j'y serai. Avec mon portable et Jelix bien entendu :-)

mardi, juin 3 2008

Jelix 1.0.4 et un article sur Linux+ DVD

On continue avec les sorties régulières de versions de maintenance de Jelix 1.0. Hier donc c'était la sortie de Jelix 1.0.4 qui corrige quelques bugs mineurs. Nous continuons à suivre une politique stricte sur les versions :

  • Les versions mineures en 1.0.x ne corrigent que des bugs, et n'apporte que des "micro" améliorations, pour éviter d'avoir des regressions ou des nouveaux bugs. La stabilité avant tout.
  • Les versions intermédiaires en 1.x apporteront des nouveautés, voir quelques APIs cassées mais seulement sur des composants "périphériques" : on ne modifie pas l'API du coeur du framework (contrôleurs, vues etc...) tout au plus peut-on se permettre de rajouter des méthodes et propriétés ou nouveaux objets dans le coeur. Avec bien sûr son lot de nouveaux composants et d'évolutions sur les composants existants.
  • Les version majeures : on se permettra de tout casser si il le faut. Je pense qu'une version 2.0 sera envisagée pour la sortie de PHP 6, profitant des évolutions de ce dernier (et sera donc incompatible avec PHP5). Mais il n'y a rien d'arreté pour le moment, Jelix fonctionne bien comme il est :-).

La sortie de cette version 1.0.4 coïncide avec la sortie de l'article de Bastien (contributeur au projet) dans le numéro spécial de Linux+ DVD : "Développer efficacement avec Jelix".

- page 1 de 6