Erweiterte Console für Firefox
Geschrieben von Harald Lapp in Firefox, Programmierung um 22:10
Ich bin letzte Woche über ein neues Firefox Plugin gestolpert, welches die in die Jahre gekommene Javascript Console ablösen soll.
Firebug ist eine Kombination aus Javascript Console, DOM Inspektor und einem Javascript Interpreter. Daneben kann man ausserdem noch den Datenverkehr bei einem XMLHttpRequest beobachten was ihn zu einem sehr nützlich Hilfsmittel für Entwickler Browser-basierter Applikationen (AJAX / XUL) macht. Ich entwickle beruflich u.a. Anwendungen auf Basis der Mozilla Plattform (Javascript / XUL) und möchte diesen kleinen Helfer nicht mehr missen.
Sehr praktisch finde ich, daß Firebug sich am unteren Rand des Browsers einnistet. Im Weggeklappten Zustand sieht man lediglich in der Statusleiste einen Hinweis auf die in der Seite aufgetretenen Fehler. Klickt man auf diesen Hinweis, wird Firebug aufgeklappt und man kann die Fehler inspizieren. Firebug arbeitet im Gegensatz zur alten Javascript Console Kontextbezogen. D.h. es werden nur die Fehler und Informationen der aktuellen Seite bzw. des aktuellen Tabs dargestellt, was die ganze Sache sehr viel übersichtlicher macht. Im gegensatz zur herkömmlichen Javascript Console verdeckt kein Fenster mehr die Anwendung bzw. hat man die Ausgaben auf der Console beim Testen immer im Blick.
Der DOM Inspektor kann zwar bei Weitem nicht den Funktionsumfang seines grossen Bruders abdecken, dennoch ist er meist die schnellere Alternative. Es genügt ein Seitenelement anzuklicken und schon kann man die Informationen XML, CSS, Javascript und das Boxlayout einsehen.
Ich habe vor einem Jahr schon einmal einige Plugins beschrieben, die meiner Ansicht nach jeder Enwickler browser-basierter Anwendungen installiert haben sollte. Firebug gehört definitiv mit auf diese Liste - nach der Installation bleibt die angestaube Javascript Console garantiert geschlossen.
Phing vs. ANT - Build Systeme für PHP
Geschrieben von Harald Lapp in PHP um 20:09
Build-Systeme sind ja schon eine wirklich praktische Sache. Bisher habe ich zur Erledigung solcher Sachen eine Kombination aus PHP, Shell Scripten und GNU make verwendet. Problem an dieser Kombination: Shell Scripte und make sind nicht wirklich plattformübergreifend einsetz- oder gar verfügbar. Nachdem ich für Propel ohnehin schon Phing installieren musste, habe ich mir dieses System mal näher angesehen. Phing ist von Apache ANT inspiriert und verwendet eine ähnliche Syntax für die Build-Scripte, basierend auf XML Dateien.
Mein Wunsch war es ein Script zu schreiben, welches ein Gerüst für eine Anwendung erstellt. Für dieses Gerüst gibt es eine Vorlage, die kopiert werden muss. Zusätzlich müssen einzelne Verzeichnis- und Dateinamen umbenannt werden, sowie Inhalte diverser Dateien geändert werden.
Ausschnitt aus dem build.xml für Apache ANT (Die Unterschiede zu Phing finden sich in erster Linie beim Filterchain):
- <copy todir="${destination}${project}" overwrite="true" includeemptydirs="true" filtering="true">
- <mapper type="regexp" from="^(.*)skeleton(.*)$" to="\1${project}\2" />
- <filterchain>
- <tokenfilter>
- <replaceregex pattern="skeleton" replace="${project}" flags="gi"/>
- </tokenfilter>
- </filterchain>
- <fileset dir="./skeleton/" defaultexcludes="yes">
- <include name="**/*" />
- </fileset>
- </copy>
Mit Phing bin ich jedoch nicht besonders weit gekommen - im Gegenteil hat es mich schnell angefangen zu ärgern. So habe ich den Eindruck gewonnen, das nicht alle in der Dokumentation beschriebenen Kommandos so arbeiten, wie sie sollten. Ich habe vergeblich versucht leere Verzeichnisse, die meine Vorlage nunmal enthält, mittels des Copy-Tasks zu kopieren. Trotz dem Setzen des Flags 'includeemptydirs' geht es nicht. Nachdem ich den Quellcode von Phing ge-grep-t habe, habe ich allerdings auch den Eindruck gewonnen, dass dieses Feature nicht vollständig implementiert ist. Dann jedoch frage ich mich, warum es in die Dokumentation aufgenommen wurde?
Ausserdem arbeitet das Umbenennen von Verzeichnissen und Dateien nicht so, wie ich mir das Vorstelle. Dafür gibt es den Task 'mapper'. Verwende ich ihn in Verbindung mit Copy bzw. Move, werden allerdings nur noch Dateien kopiert, in denen das Pattern des mapper-Tasks auftaucht. Ich weiss nicht ob die Entwickler von Phing hier das bewusst so entwickelt haben...? ANT verhält sich jedenfalls anders als Phing und ich kann das erreichen, was ich eigentlich möchte: nämlich alle Dateien kopieren und dabei zusätzlich alle Dateien und Verzeichnis umbenennen, die auf ein bestimmtes Suchmuster passen.
Ich weiss nicht, wie hoch der Verbreitungsgrad von Phing in PHP Projekten ist - neben Propel wird es noch in den PHP Frameworks BinaryCloud und Symfony eingesetzt. Bis auf die Dokumentation auf der Projektseite von Phing, habe ich nicht wirklich viele brauchbare Informationen gefunden, die einem Einsteiger bei Problemlösungen helfen könen. Tutorials sucht man vergeblich - wurde Phing schon in einem PHP Buch behandelt? Leider scheint auch auf der Mailingliste sehr wenig zu passieren. So denke ich, dass Phing, wenn es eine alternative zu ANT zumindest für PHP Projekte werden soll, noch einen weiten Weg vor sich hat.
Nach Phing habe ich mir also dann das Original angesehen - Apache ANT. ANT ist in Java entwickelt und ursprünglich wohl auch in erster Linie für Java Entwickler gedacht. Somit wird also beim Einsatz auch ein JRE benötigt. Da Phing wie gesagt von ANT 'inspiriert' ist, funktioniert meine Build-Konfigurationen ohne grössere Änderungen auch mit ANT. Und siehe da: Mein Build-Script funktioniert so, wie ich es mir vorgestellt habe. Anders als mit Phing werden leere Verzeichnisse kopiert, das Umbenennen von Dateien wird genauso wie das Ändern von Dateiinhalten nebenbei erledigt. Ich denke, dass sich Phing damit für mich erstmal erledigt hat und ich lieber ANT verwenden werde. Vielleicht ist ein Script wie ich es mir vorstelle auch mit Phing möglich - ich habe jedenfalls verschiedenste Varianten ausprobiert, mir ist es nicht gelungen eines zu entwickeln.
Nebenbei sind die Vorteile von ANT: Es wird vielen Java Projekten eingesetzt, die Community ist sehr gross und es gibt viele Dokumentationen und Tutorials im Internet zu finden, sowie auch Bücher zu kaufen.
Nun benötige ich Phing natürlich dennoch für Propel. Da Propel eigene Erweiterungen für Phing mitbringt, kann man hier nicht einfach ANT anstelle von Phing einsetzen. Wie man Phing von ANT aus starten kann, beschreibt Roman Roan in seinem Blog - 'Running Phing with ANT'.
Weitere empfehlenswerte Artikel:
- Improve Your Build Process with Ant - erschienen im O'Reilly PHP Devcenter
- Apache ANT - Manual
- ANT Tutorial




