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.
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.
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.
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:
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.
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.
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.
Danke an die Menschen für ihre Fehlermeldungen und Korrekturen: Ondrej Jombik, Andres Käver, Patrick O'Lone, Bruno Pedro und Samuli Tuomola
Lorenzo Alberton arbeitet Wolfram Kriesings DB_QueryTool auf die Nutzung mit MDB um.
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.
Yavor Shahpasov schlug einen weiteren Container für Auth vor. Damit ist eine Authentifizierung über POP3-Server möglich.
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.
Bertrand Mansion's neues Package ist ein PHP Frontend für die populäre mnoGoSearch-Suchmaschine
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.