Archive for Okt. 2009

firePHP Einführung

In dem Artikel bin ich schon auf firebug eingegangen. Ich beschrieb welche Funktionen aus der firebug API nützlich sind um so JavaScript einfacher zu Debuggen.

Nun gibt es auch eine firebug-Erweiterung mit dem Namen firePHP. Diese Erweiterung ermöglicht dem Entwickler die Inhalte aus einer Debug-Session auch im firebug auszugeben. Das hat den großen Vorteil, dass Debug-Ausgaben nicht mehr mit print(_r) oder mit der Ausgabe im error_log gemacht werden müssen. Zum einen wird so das Layout nicht übermäßig zerstört, zum anderen das error_log nicht stetig vollgemüllt.

Um firePHP nutzen zu können, müssen ein paar Dinge vorbereitet werden. Zum einen benötigt man das Plugin für den Firebug welches [1] hier zu bekommen ist. Zum anderen benötigen wir noch die php Klassen bzw Funktionen, die vom Autoren zur Verfügung gestellt werden.

Die benötigten Klassen bzw Funktion können über den PEAR Installer heruntergeladen werden.

pear channel-discover pear.firephp.org
pear install firephp/FirePHPCore

Der Entwickler von firePHP bietet mehrere Möglichkeiten in der Firebug Konsole Debug-Meldungen auszugeben.
Zum einen gibt es die Funktionen im Paradigma der Prozeduralen Programmierung bzw Aufrufe der Methoden der objektorientierten Programmierung. Je nach vorgehen müssen verschiedene includes getätigt werden.

require_once('FirePHPCore/FirePHP.class.php'); //oder
require_once('FirePHPCore/fb.php');

Um es einfach zu halten, stelle ich allerdings nur die objektorientierte Variante vor.
Zunächst sollte eine Instanz erzeugt werden (Alle Methoden sind auch statisch abrufbar).

$firephp = FirePHP::getInstance(true);

Die interessantesten Methoden die firePHP zur Verfügung stehen sind:

$firephp->log($Object, $Label = null); 
$firephp->info($Object, $Label = null); 
$firephp->warn($Object, $Label = null);
$firephp->error($Object, $Label = null);
$firephp->trace($Label);
$firephp->table($Label, $Table);
$firephp->group($Lable);
$firephp->groupEnd();

Die Methoden log, info, warn und error sind vom Prinzip identisch, allerdings werden sie mit unterschiedlichen Farben innerhalb des Firebugs gekennzeichnet.

firephp_example

Ein sehr nettes Feature von firePHP, ist die Darstellung von Variablen und deren Inhalte. So ist jede Debug-Ausgabe ordentlich verpackt und sauber dargestellt:

firephp_example2

Die einzigen Methoden, die man ein wenig gesondert betrachten muss, sind $firephp->group($lable) und $firephp->groupEnd().
Diese Methoden beschreiben eine Gruppe im Firebug. Alle Methoden die zwischen den beiden Aufrufen verwendet werden, werden dann innerhalb einer Gruppe dargestellt.

Gruppen darstellung

Wie man sehen kann, sind alle wichtigen fierbug Funktionen auch für firePHP verfügbar. So steht also einer entspannten und komfortablen Debug-Session nichts mehr im Wege.

DocBook Generierung – Erstellen eines Buches.

Im letzten Artikel habe ich beschrieben, was DocBook ist und erklärte schon das Grundgerüst eines DocBook-Dokuments. Kommen wir aber nun zum eigentlich interessanten Teil. Wie erzeuge ich aus meinem DocBook ein PDF?

Für eine komplette Transformation von DocBook zu PDF benötigen wir ein paar Komponenten, die noch installiert werden müssen:

  • Ein DocBook-Dokument ( hier ein Beispieldokument)
  • einen XSLT-Prozessor
  • die XSL-Stylesheets von DocBook
  • einen XSL-FO Prozessor

Der XSLT-Prozessor erzeugt mit Hilfe der XSL-Stylesheets aus unserem DocBook ein XSL-FO Dokument. XSL-FO dient als Zwischenstufe für andere Ausgabeformaten wie z.B. PDF, PostScript und Rich Text Format. Um von diesem Zwischenformat weiter zu unserem Wunschformat zu kommen benötigen wir den XSL-FO Prozessor.

Installation Windows

Ich verwende unter Windows sowie Linux xsltproc. Die benötigten Pakete für Windows sind [1] hier zu finden.
Für die Installation unter Windows werden folgende Ziparchive benötigt:

  • iconv*.zip
  • libxml2*.zip
  • libxmlsec*.win32.zip
  • libxslt*.win32.zip
  • openssl*.win32.zip
  • xsldbg*.win32.zip
  • zlib*.win32.zip

Weiterhin benötigen wir noch die XSL-Stylesheets von DocBook; die uns eine Basis zur Generierung von PDFs bereit stellt. Dieses Archiv ist [2] hier zu finden. Dort benötigen wie das docbook-xsl-[version].zip.

Zu guter Letzt benötigen wir noch den [3] FOP, der das eigentliche PDF erzeugen wird.

Jetzt da wir alle unsere Werkzeuge zusammen haben, geht es an die Installation. Zunächst erstellen wir ein Verzeichnis – nennen wir es

»docbook«. In Dieses Verzeichnis entpacken wir nun, in separate Unterverzeichnisse, den FOP und die XSL-Stylesheets.

Unter Windows ist die Installation des xsltproc leider keine saubere Sache. Es gibt zwei Möglichkeiten den xsltproc in der comand line bereitzustellen.
Wir können zum Einen alle dlls in das win32 Verzeichnis verschieben. Allerdings hat nicht jeder die Administratorrechte, die es dazu braucht.
Der zweite Weg ist, das Verzeichnis mit in unser DockBook zu verschieben und die gesamten Pfade im batch File auszulagern.

Zur Erleichterung ist hier noch eine kleines batch File, dass uns die Generierung abnimmt.

@echo off
TITLE MakeDocBook

REM ==============================================================
REM Edit these lines:
SET scriptpath=C:\Programme\docbook
SET stylepath=%scriptpath%\docbook-xsl-1.74.0\fo
SET foppath=%scriptpath%\fop-0.95
set repository=%scriptpath%\repository
set src=T:\docbook\repository
set fooutput=%repository%\fo
set pdfoutput=%src%\pdf
set xsltproc_home=%scriptpath%\install
REM ==============================================================
 
 
%xsltproc_home%\xsltproc --xinclude --nonet --stringparam section.autolabel 1 --stringparam xref.with.number.and.title 0  --stringparam body.start.indent 0mm -o %fooutput%\%1.fo %stylepath%\docbook.xsl %src%\src\%1.xml
%foppath%\fop.bat -fo %fooutput%\%1.fo -pdf %pdfoutput%\%1.pdf > nul

Wenn in dem batch File alle benötigten Pfade angepasst sind, kann man nun über die command line das batch File aufrufen, und unser selbst erstelltes PDF bewundern.

Installation Linux

Unter Linux ist die Installation recht simpel. Die benötigten Pakete sind die docbook* und die libxslt* Pakete. Alle benötigten Abhängigkeiten sollten vom jeweiligen Paketmanager automatisch mit aufgelöst werden. Hier ist noch ein Script für das ~/bin Verzeichnis, welches mit einem chmod ausführbar gemacht werden sollte.

#!/bin/bash
 
 
USER_HOME="/home/userhome"
FOP_HOME="/usr/local/fop/fop-0.95/"
DOCBOOK_HOME="$USER_HOME/docbook/"
SOURCE_HOME="$USER_HOME/Documents/documentation"
OUTPUT_HOME="$USER_HOME/Documents/documentation"
docbookfo="/usr/share/xml/docbook/stylesheet/nwalsh/current/fo"
 
# using xslt for xslt:fo
xsltproc	--xinclude \
		--nonet \
		--stringparam section.autolabel 1 \
		--stringparam xref.with.number.and.title 0 \
		--stringparam body.start.indent 0mm \
		--output $1.fo $docbookfo/docbook.xsl $1.xml
# using fop to generate pdf.
$FOP_HOME/fop -fo $1.fo -pdf $1.pdf

Mit den beiden Scripts lassen sich sehr schnell unter den jeweiligen Betriebssystemen ein PDF erstellen. DocBook bringt von sich aus Templates mit, die einem alle möglichen Verzeichnisse automatisiert erstellt (Inhalts- Bilder- Tabellenverzeichnis), welche auch direkt verlinkt sind. Die Positionierung von Bildern geschieht automatisch, sie werden nicht abgeschnitten und die Bild Unter- bzw. Überschriften stehen dort wo sie sein sollen. Das Layout des Dokuments ist konsistent.