by Mika Tuupola (tuupola@appelsiini.net), Pierre-Alain Joye (paj@pearfr.org), traduit par Arnaud Limbourg (arnaud@limbourg.com),

Dès cette semaine, nous introduisons une nouvelle section appelée "Package de la semaine". APD de George Schlossnagle est à l'honneur, il sagit d'un debugger/profiler très complet.

La semaine a été modérément calme, avec comme conséquence d'avoir un traffic CVS important et plus de sorties qu'habituellement. Au moment de la rédaction 14 sorties ont pu être constatée.

Vous trouverez cette semaine des détails sur la gestion des erreurs dans les constructeurs, les nouvelles fonctionnalitées de phpDocumentor, un nouveau tutoriel Mac OS X, ainsi que sept propositions de packages.


Package de la semaine

APD de George Schlossnagle, un profiler/debugger très complet

Qui est George Schlossnagle ?

George a commencé à travailler sur les systèmes UNIX il y a 12 ans, écrivant des fonctions d'analyses numériques partielles- différencielle en FORTRAN. Ces débuts avec le web ont commencés il y a 8 ans et de maniè professionnelle il y a 5 ans. Il travaille actuellement chez OmniTI Computer Consulting, une société de conseils technologiques spécialisée dans la mise en place et la gestion de systèmes mails et web "scalable".

Quels sont les avantages et inconvénients d'avoir publié ton travail dans PEAR/PECL ?

Je pense que mon seul regret à propos de la publication d'APD sous PECL est de ne pas l'avoir fait plus tôt. D'un point de vue de la gestion du code ou des versions, travailler avec PECL est équivalent à un système local. Le système de release de PEAR rend la création et la publication d'une nouvelle "release" incroyablement simple. Je vois aussi une visibilité et un intérêt croissants de la communauté. Ayant aussi trouvé que l'installation d'APD sous php 4.3 avec l'installeur PEAR s'est faite proprement (sans effort de ma part pour que celà se passe ainsi).

Qu'espères-tu pour le futur de PEAR/PECL ?

Je pense que PEAR et PECL sont le futur de la gestion des packages et des extensions. En séparant les versions de PHP des versions des extensions, nous pouvons envisager d'accroitre la vitesse, la qualité et la fréquence des releases PHP. Personnellement, j'aimerais voir une augmentation de l'utilisation des tests unitaires dans les packages PEAR et PECL (mes propres packages ayant incroyablement besoin de çela). Ajouter des tests unitaires devrait rendre le "refactoring" (ndt: qqn a une traduction?) plus aisé et réduirait les hésitations des dévelopeurs à améliorer d'autres extensions/ packages par peur de cré des dysfonctionnement de manière non intentionnelle. Comme les tests unitaires dans la construction de php continuent à mûrir et que de plus en plus d'extensions migrent vers PECL, j'espère voir une amélioration de la compatibilité entre plusieurs versions pour beaucoup d'extension PECL.

APD, peux-tu décrire ce package ?

APD est une extension zend, laquelle ajoute des possibilités de profiling et de debuggages au moteur Zend. APD a eût un début humble. Mon ancien collègue Dan Cowgill était très frustré par le manque de possibilités complète de backtrace (celà se passait durant la période 4.1, avant que debug_backtrace() ne soit introduit). Après que le backtrace ait été ajouté, il est devenu évident que notre système fournissait une excellente interface pour générer des informations de profiling pour des scripts.

Le profiling s'est révélé très précieux dans mon travail de l'époque qui consistait à optimiser les performances d'un site web d'environ un million de lignes de code. Sans possibilité de faire du profiling l'optimisation de scripts tenait plus du hasard qu'autre chose. Avec la version pre-0.1 d'APD nous avons pu gagner 500% de rapidité sur plusieurs scripts en un jour.

Après la première sortie Thies Arntzen demanda que les informations de profiling ne soit pas du type lisibles par l'être humain, mais plutôt d'un type similaire à celui utilisé par avec l'utilitaire gprof. Cela pris un certain temps mais la version 0.3 a introduit le format 'pprof' qui devint le format standard. L'utilitaire 'pprof' est fournit afin de lire les fichiers au format pprof. Cela fut un grand pas et permis de simplifier et rendre robuste l'étude après-éxecution d'un script (affichage de graphiques d'appels, trier selon différents critères de temps d'éxecution, etc.).

APD dispose aussi de fonctionnalités additionnelles. La plus notable est le debugger interactif ajouté par Alan Knowles. Cela permet d'effectuer un éxecution pas à pas d'un script, permettant non-seulement d'afficher les variables mais aussi de modifier leur valeur. Le seul EDI que je connaisse intégrant cette fonctionnalité est l'éditeur d'Alan phpMole, que je recommande à quiconque est intéressé par un éditeur php.

Quelques fonctionnalités sont rarement utilisées mais sont tout de même cool. Cela inclut les fonctions rename_function() et override_function() qui vous autorise à remplacer une fonction existante dans la table des symboles par l'une de vos créations. Il serait souhaitable de voir ces fonctions similaires intégrées dans le moteur Zend. D'autres fonctionnalités seront surement rendues obsolètes avec le temps. La commande backtrace à été supplantée par la commande debug_backtrace et debug_print_backtrace et les fonctions permettant d'étudier la table des symboles ne sont pas tellement utiles.

De quoi avez-vous besoin de la part de la communauté ?

Un milliard de dollars... mouahaha!
Sérieusement, lorsque j'ai commencé à écrire des logiciels open source en 1999 j'ai malheureusement cru que nombre de personnes joindrait le projet et ajouterais les fonctionnalités dont j'avais envie. Ca ne fonctionne tout simplement pas de cette façon. En fait, je passe autant de temps à implémenter les fontionnalités demandées par d'autres personnes qu'à implémenter celles qui m'intéressent personnellement (cela se passe ainsi pour beaucoup de projets open-source à ma connaissance). Mon but premier avec APD était de créer un programme qui pouvait m'aider dans mon travail et d'autres ayant les mêmes besoins que moi. Si APD permet aux développeurs d'écrire du code plus rapide et de meilleure qualité alors ce projet aura atteint son but à mon sens.

J'aimerais remercier la communauté des utilisateurs APD pour :

  • L'envoi de rapports de bugs cohérents facilitant leurs corrections
  • Etre compréhensifs quand les corrections prennent du temps

  • Avec cette annonce voici ma liste de choses à faire pour APD, pour laquelle j'accepte toute aide :

  • Améliorer les statistiques sur l'utilisation de la mémoire. Je ne sais pas si cela est possible mais c'est une demande assez ancienne et je ne suis pas satisfait de l'implémentation actuelle.
  • Un portage sous Windows. Markus Fischer avait effectué ce portage avec la version 0.1 mais les changements subséquents ont cassés sont travail et je ne suis pas un programmeur Windows.
  • Intégration des informations de profiling dans un EDI.

  • Enfin, il est toujours appréciable d'entendre les succès d'autres personnes. A la conférence PHP-Con 2002, j'ai appris que Yahoo! utilisait APD en interne pour "profiler" les scripts. Quelle accélérateur! Savoir que des gens utilisent le logiciel donne tout son sens à un tel projet.


    Merci à George pour cette interview.

    Dans la presse

    PEAR sur Mac OS X revisité

    Le tutoriel indiqué lors du précedent numéro est aussi publiée sur le MacDevCenter. Ce site faisant partie d' O'Reilly Network PEAR aura une bonne couverture grâce à cet article.


    Si jamais vous lisez un article sur PEAR n'hésitez pas à nous en faire part, envoyer un message (sur pear-dev@lists.php.net) avec les références et cela sera ajouté à la lettre hebdomadaire.


    Trafic de la liste de diffusion PEAR-DEV

    Gestion des erreurs dans le constructeur?

    Une courte discussion à eu lieu sur la bonne façon de gérer les erreurs dans le constructeur. La réponse est simple: même s'il est possible d'affecter $this comme une instance de classe PEAR_Error il est fortement découragé d'utiliser cette fonctionnalité non-documentée. Ce comportement sera modifié dans PHP5. Une meilleure approche consiste à éviter la logique d'échec dans le constructeur et d'utiliser une méthode séparée pour les appeles nécessitant le retour d'une erreur. Un bon exemple d'une telle méthode est le design pattern Fabrique (ou "factory").

    Nouvelles fonctionnalités pour phpDocumentor

    L'équipe de développement de phpDocumentor à implémenté le support de nouvelles balises. Cela inclue les balises @source, @internal, @filesource, @example and @internal. Pour plus d'informations veuillez lire les notes accompagnant la sortie de la beta2.

    Bugs et Corrections

    Merci à ces personnes pour avoir trouvé et corrigé des bugs: Ondrej Jombik, Andres Käver, Patrick O'Lone, Bruno Pedro and Samuli Tuomola


    Propositions et nouveaux packages

    MDB_QueryTool

    Lorenzo Alberton à porté DB_QueryTool de Wolfram Kriesing pour MDB.

    Net_UserAgent_Mobile

    Kubo Atsuhiro à proposé Net_UserAgent_Mobile qui permet de récupérer les caractéristiques d'affichage des keitai (téléphones portables). Les systèmes supportés incluent NTT DoCoMo's i-mode, KDDI's EZweb and J-PHONE's J-Sky.

    Auth_Container_POP3

    Yavor Shahpasov à proposé un nouveau container pour Auth permettant de s'authentifier contre un serveur POP3.

    Auth_RADIUS, Auth_Container_Radius, Crypt_CHAP

    Michael Bretterklieber, le mainteneur de PECL::radius, à proposé plusieurs packages en rapport avec l'authentification. Auth_RADIUS est un wrapper pour PECL::radius. Crypt_CHAP est utilisé pour la génération de paquets CHAP pour les différentes de CHAP. Auth_Container_Radius est un nouveau container pour Auth.

    SearchEngine_Mnogosearch

    Bertrand Mansion à proposé SearchEngine_Mnogosearch package, un frontend pour le populaire moteur de recherche mnoGoSearch.

    Development

    Ont été actif sur le CVS cette semaine : HTML_Template_Flexy, Cache_Lite, PECL::Radius, PEAR, DBA, DBA_Relational, HTTP_Header, MDB, Net_SMTP, Mail, Log, File, I18N, SpreadSheet_Excel_Writer, MDB_QueryTool, Payment_Clieop, PECL::bcompiler, Tree, DB_QueryTool, HTML_Template_Xipe, DB_DataObject, HTML_QuickForm, PECL::imagick, Auth, SearchEngine_Mnogosearch, Net_URL, HTTP_Request and PECL::apd.