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.
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".
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).
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 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.
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 :
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.
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").
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.
Merci à ces personnes pour avoir trouvé et corrigé des bugs: Ondrej Jombik, Andres Käver, Patrick O'Lone, Bruno Pedro and Samuli Tuomola
Lorenzo Alberton à porté DB_QueryTool de Wolfram Kriesing pour MDB.
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.
Yavor Shahpasov à proposé un nouveau container pour Auth permettant de s'authentifier contre un serveur POP3.
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.
Bertrand Mansion à proposé SearchEngine_Mnogosearch package, un frontend pour le populaire moteur de recherche mnoGoSearch.
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.