by Mika Tuupola (tuupola@appelsiini.net), Pierre-Alain Joye (paj@pearfr.org), übersetzt von Alexander Merz (alexmerz[at]php.net)

Mit dieser Ausgabe gibt es zum ersten Mal das "Package der Woche", diese Woche im Focus: APD von George Schlossnagle - ein vollständiger Profiler und Debugger.
Auf der Mailingliste ging es eher ruhig zu, dafür mehr CVS-Verkehr und Releases (14!) als üblich.  

Diese Woche Informationen zur Fehlerbehandlung im Konstruktor, neue phpDocumentator-Funktionen, ein weiters Mac OS X-Tutorial und sieben Package-Vorschläge.


Package der Woche

George Schlossnagles APD - ein Profiler und Debugger

Wer ist George Schlossnagle?

Georg begann vor 12 Jahren mit UNIX zu arbeiten, damals programmierte er mit FORTRAN Programme für das Lösen partiell-differenzialer Gleichungen. Erste Erfahrungen mit dem Web machte er vor 8 Jahren und seit 5 Jahren auch beruflich. Derzeit arbeitet er als leitender Berater bei OmniTI Computer Consulting, einer Beratungsfirma spezialisiert auf die Erarbeitung und den Betrieb skalierbarer Web- und EMail-Systeme.

Was sind die Vor- und Nachteil bei der Veröffentlichung unter PEAR/PECL?

Ich denke, der einzige Fehler bei der Veröffentlichung von APD in PECL war, es nicht früher zu tun. Von der Code- und Versions-Verwaltung aus gibt es keinen Unterschied zwischen der Arbeit innerhalb PECLs und einem lokal betreuten Projekt. Die PEAR-Release-Verwaltung macht es unglaublich einfach eine neue Version heraus zu bringen und zu verteilen. Auch sehe ich eine steigende Beachtung und Anteilnahme von Seiten der PHP-Community. Es war verdammt cool zu sehen, dass APD unter PHP 4.3 mit dem PEAR Installer sauber installiert wurde, ohne dass besondere Anstengungen meinerseits notwendig waren.

Was hoffst du für die Zukunft von PEAR/PECL?

Ich denke PEAR und PECL sind die Zukunft für die Verwaltung von Erweiterungen und Paketen für PHP. Mit der Entkopplung von PHP-Versionen und Extension-Versionen werden wir die Gechwindigkeit, Qualität und Frequenz von PHP-Versionen hoffentlich verbessern. Ich persönlich würde gerne mehr Unit-Tests von PEAR- und PECL-Packages sehen (meine eigenen Packages haben davon unglaublich profitiert). Unit-Tests machen das Re-Factoring einfacher und verringern das Zögern von Programmieren Erweiterungen/Packages Anderer zu bearbeiten, aus ihrer Angst unerwartete Effekte hervorzurufen. Wenn Unit-Tests im PHP-Build-Prozess sich weiter verbreiten und weitere Erweiterungen nach PECL verschoben werden, hoffe ich auf eine Verbesserung der versions-übergreifenden Kompatibilität für viele Erweiterungen in PECL.

APD - was ist das Package?

APD ist eine Zend-Erweiterung, die die Zend Engine um Profiling und Debug-Fahigkeiten erweitert. APD hatte bescheidene Anfänge. Mein früherer Kollege Dan Cowgill war extrem frustriert von den mangelnden Möglichkeit einen Backtrace anzufertigen (das war damals zu Zeiten von PHP 4.1, bevor es debug_backtrace() gab). Nachdem es die Backtrace-Fahigkeiten ergänzt wurden, wurde es augenscheinlich, dass die unsere Engine ein exzellentes Interface für die Erzeugung von Profiling Informationen von Scripts besaß.

Die Profiling-Fahigkeit war eine unglaubliche Arbeitserleichterung. Zur damaligen Zeit war ich beschäftigt mit der Performance-Optimierung unter Produktionsbedingungen einiger Webseiten mit mehreren Millionen Zeilen. Ohne Profiling ist das tuning von Scripts reines Rätselraten. Mit der Version pre-0.1 von APD konnten wir bei einer Reihe von Seiten einen 500% Performance-Gewinn erreichen, innerhalb eines Tages!

Früh nach dem ersten Release, fragte Thies Arntzen nach der Möglichkeit die Ausgabedaten so zu ändern, dass das Programm gprof damit etwas anfangen kann. Nach einer Weile wurde mit der Version 0.3 das 'pprof'-Format Standard, und das Werkzeug 'pprofp' wurde ergänzt umd die Daten auszuwerten. Das war ein großer Schritt, es erlaubte nun eine einfache und robuste nachträgliche Analyse (Anzeige von Aufrufgraphen, geordnet nach der Ausführungszeit etc.)

APD hat eine Anzahl weiterer Funktionen. Hervorzuheben ist der interaktive Debugger von Alan Knowles. Damit kann eine IDE ein Script Schritt-für-Schritt ausführen, und sie kann dabei nicht nur die Variableninhalte anzeigen, sondern sie auch modifizieren. Die einzige IDE, die ich kenne welche diese Funktionen vollständig unterstützt, ist Alans beeindruckendes phpMole, das ich jedem empfehle, der sich für eine PHP IDE interessiert.

Einige selten genutzte - aber coole Funktionen sind rename_function() und override_function(), sie erlauben den Ersatz existierender Funktionen in der Symboltabelle durch eigenen Kreationen. Es wäre schön, wenn ähnliche Funktionen direkt in die Zend Engine integriert wären. Andere Funktionen sollte man mit der Zeit eher nicht mehr benutzen. Die Backtrace-Funktionen wurde verdrängt von debug_backtrace und debug_print_backtrace und die Funktionen zur Überwachung der Symboltabelle sind nicht sonderlich nützlich.

Welche Unterstützung wünschst du dir von der Community?

Eine Milliarde Dollar... mwahaha!
Ernsthaft, als ich 1999 mit dem Schreiben von OpenSource-Softwar begann, hatte ich fälschlicherweise den Gedanken, ich könnte ein Projekt starten und die Leute würden heranströmen um die Funktionen zu ergänzen, die ich will. Genauso funktioniert es aber nicht! Tatsächlich aber verbringe ich (und die meisten OpenSource-Programmierer ebenfalls) viel Zeit damit, Funktionen zu implementieren, die andere wollen, weniger mit Dinge, die mich persönlich interessieren. Mein Ziel mit APD war ursprünglich ein Werkzeug, dass mir in meinem Job hilft, und als nächstes anderen mit ähnlichen Aufgaben zu helfen. Wen APD hilft schnelleren und besseren Code zu schreiben, dann is es für mich ein erfolgreiches Projekt.

Ich möchte den Nutzer von APD danken für:

  • durchgängig gute Bug-Reports, die das Bug-Fixing vereinfachten
  • für das Verständniss, das einige Fixes etwas dauerten

  • Mit der Erwartung, dass es die Leute interessiert hier meine persönliche TODO Liste für APD, für welche ich immer Hilfe suche:

  • Verbesserung der Speicherbenutzungs-Statistiken. Ich bin nicht sicher, ob es möglich ist, aber es ist ein permanentes Thema, und ich bin unzufrieden mit der derzeitigen Implementierung
  • Eine vollständige Portierung auf Windows. Markus Fischer tat das für v0.1, aber der neue Profiler benötigt neue Arbeit und ich bin kein Windows-Programmierer.
  • Integration innerhalb der IDEs

  • Letzlich ist es immer schön Erfolgsgeschichten von Leuten zu hören. Auf der PHP-Con 2002, erfuhr ich, dass Yahoo APD für das interne Script-profiling benutzt benutzt. Was für ein Auftrieb! Zu wissen, dass Leute deine Software benutzen und glücklich damit sind, macht es die ganze Arbeit wert.Danke an Georg für das Interview.

    In der Presse

    PEAR auf Mac OS X erneut

    Das in der letzten Ausgabe genannte Mac OS X Tutorial wurde jetzt auch MacDevCenter veröffentlich. Da diese Seite zum O'Reilly Network gehört, bedeutet das gute Publicity für PEAR.


    Wen Sie weitere PEAR bezogene Artikel sehen, dann senden Sie sie uns bitte eine Referenz  zu  (pear-dev@lists.php.net) und wir werden sie in die Weekly News aufnehmen.


    PEAR-DEV Meldungen

    Fehlerbehandlung im Konstruktor?

    Es gab eine kurze Diskussion über die empfohlene Fehlerbehandlung innerhalb eines Klassen-Konstruktors. Die Antwort ist einfach: Obwohl es möglich ist $this auf eine Instanz von PEAR_Error zu setzten, sollte das tunlichst vermieden werden; das ist ein undokumentiertes Feature und wird sich mit PHP 5 ändern Ein besserer Ansatz ist jede Art von Fehlerbehandlung im Konstruktor zu vermeiden und in eine separate Methode zu verschieben, die ein Fehler zurückliefern kann. Eine gute Möglichkeit ist der Einsatz des Factory-Patterns.

    Neue phpDocumentor-Funktionen

    Das phpDocumentor -Entwicklerteam ergänzte neue Tags für die Dokumentation: @source, @internal, @filesource, @example und @internal. Weitere Informationen finden sich in den release notes.

    Fehler und Korrekturen

    Danke an die Menschen für ihre Fehlermeldungen und Korrekturen: Ondrej Jombik, Andres Käver, Patrick O'Lone, Bruno Pedro und Samuli Tuomola


    Neue und vorgeschlagene Packages

    MDB_QueryTool

    Lorenzo Alberton arbeitet Wolfram Kriesings DB_QueryTool auf die Nutzung mit MDB um.

    Net_UserAgent_Mobile

    Kubo Atsuhiro's Package liefert Informationen zu den Browser auf Mobiltelefonen. Derzeit werden unterstützt: NTT DoCoMo's i-mode, KDDI's EZweb und J-PHONE's J-Sky.

    Auth_Container_POP3

    Yavor Shahpasov schlug einen weiteren Container für Auth vor. Damit ist eine Authentifizierung über POP3-Server möglich.

    Auth_RADIUS, Auth_Container_Radius, Crypt_CHAP

    Michael Bretterklieber, der betreuer von PECL::radius, schlug mehrere Authentifizierungs-Packages vor. Auth_RADIUS eine Wrapperklasse für PECL::radius. Crypt_CHAP erzeugt CHAP-packets für die verschiedenen Versionen von CHAP. Auth_Container_Radius ist ein weiterer neuer Container für das
    Auth-Package.

    SearchEngine_Mnogosearch

    Bertrand Mansion's neues Package ist ein PHP Frontend für die populäre mnoGoSearch-Suchmaschine

    Entwicklung

    Aktivitäten gab es im CVS bei: 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 und PECL::apd.