Um rekursiv die Rechte einer Verzeichnisstruktur zu ändern, können die zwei Befehle find und chmod kombiniert werden:

find . -type d -exec chmod 755 {} \;

Die im ersten Teil erstellte Eclipse RCP Anwendung wird nun mit den notwendigen pom.xml Dateien versehen. Bevor wir damit starten, muss der Product Export getestet werden. Kann die Anwendung danach erfolgreich gestartet werden, so können wir mit der Generierung bzw. Erstellung der POM’s starten. Die Eclipse Projekte selbst werden nicht weiter verändert!

Die Generierung der pom.xml Dateien kann durch Tycho erfolgen. Dazu wird in dem Verzeichnis, welches die Eclipse Projekte enthält, das folgende Kommando ausgeführt: mehr …

Eclipse RCP Anwendung lassen sich aus der Eclipse IDE ohne Probleme bauen. Sollen die Anwendungen aber auf einem Continous Integration Server, wie z.B. Hudson erstellt werden, so muss ein alternativer Weg gegangen werden. Da ich mich nicht mit Ant Skripten herumschlagen möchte, bevorzuge ich eine auf Maven basierende Lösung.

Bei meinen Recherchen sind mir mit Tycho und Felix zwei Maven Plugins aufgefallen. Während Felix den POM-first Ansatz verfolgt, geht Tycho den umgekehrten Weg (Manifest-first). Die Anwendung wird zunächst ganz normal in Eclipse erstellt, so dass sie nach einem Product Export lauffähig ist. Tycho versieht die Projekte dann jeweils mit einer POM, so dass die Erstellung der RCP Anwendung über Maven erfolgen kann. mehr …

Um WebDriver bzw. Selenium 2.0 zu benutzen, können entweder die notwendigen Bibliotheken auf der Selenium Download Seite heruntergeladen werden, oder es wird ein Maven Projekt erstellt. Leider liegen die aktuellsten Versionen nicht in dem zentralen Maven Repository vor. Für die Komponente selenium-firefox-driver ist dies nur die Version 2.0a2.

Zum Glück sind die aktuellen Versionen im Selenium Repository bei Google zu finden. Wie die pom.xml des Projektes zu ergänzen ist, beschreibt der Wiki Artikel Using WebDriver. Damit lässt sich WebDriver wesentlich eleganter in die Projekte einbinden. Außerdem muss im Falle einer neuen Version lediglich die POM angepasst werden. mehr …

Das Open Source Test Framework Selenium zum Testen von Browser basierten Applikationen wird demnächst in der Version 2.0 erscheinen. Das von Google bekannte WebDriver wird in dieser Version Bestandteil von Selenium 2.0. Obwohl Selenium bisher viele Browser unterstützt, sowie Tests in vielen Sprachen zu erstellt werden können, ist die Implementierung von Selenium ein Schwachpunkt. Dadurch dass Selenium in JavaScript geschrieben wurde, ergeben sich einige Nachteile. Dies Beschränkungen versucht Google mit WebDriver zu lösen.

WebDriver verfolgt einen anderen Ansatz als Selenium. Anstatt als JavaScript Applikation im Browser zu laufen, steuert es den Browser direkt. Bei Firefox geschieht dies durch eine Extension. Um den Internet Explorer anzusprechen, werden die IE Automation Controls benutzt. mehr …

Mit dem Open Source Tool JMeter können Lasttests für verschiedene Protokolle durchgeführt werden. Getestet werden können Server, die z.B. über HTTP, HTTPS, SOAP, JDBC oder LDAP kommunizieren. So habe ich selbst JMeter benutzt um die Performance meines Blogs zu überprüfen. Um einen HTTP Test nicht komplett selbst zu definieren, kann über das Element HTTP Proxy Server eine Folge von Testschritten aufgezeichnet werden. Mit Hilfe weiterer Testelemente kann der Test dann entsprechend der Anforderungen definiert werden. So können die Anzahl der Benutzer und auch der Durchsatz exakt bestimmt werden.

Wird der Test dann gestartet, so können über Listener die Ergebnisse betrachtet werden. Bei meinen bisherigen Lasttests wurden neben den üblichen Kennzahlen, wie Minimum, Maximum und Standard Abweichung auch immer der 95%-Quantils Wert der Antwortzeit gefordert. Oft war nicht nur der 95% Wert gefragt, sondern auch der 50%, 90% und der 98% Wert. JMeter liefert allerdings nur den 90% Wert über den Aggregate Report: mehr …

Meinen Ubuntu Server habe ich unter anderem mit Firehol abgesichert. Allerdings störte mich, dass die Nachrichten über verworfene bzw. zurückgewiesene Pakete in /var/log/syslog auftauchten. Die Meldungen wollte ich alle in eine extra Datei loggen lassen. Dies ist letztlich mit rsyslog kein Problem, da es über genügend Konfigurationsmöglichkeiten verfügt.

Damit die Meldungen in eine eigene Datei geloggt werden können, müssen sie von rsyslog identifiziert werden können. Dazu wird die Konfigurationsdatei /etc/firehol/firehol.conf um den Parameter FIREHOL_LOG_PREFIX ergänzt: mehr …

In dem letzten Artikel hatte ich die diverse WordPress Optimierungen untersucht. Die Ergebnisse der Lasttests zeigten, dass dort ein sehr großes Optimierungspotential besteht, welches durch einfache Maßnahmen ausgeschöpft werden kann.

Die Resultate hatten mich dann auch veranlasst einen dedizierten Root Server zu mieten und alle meine Webseiten dorthin zu verlagern. Das Ergebnis kann sich sehen lassen. Lagen die Antwortzeiten bei meinem alten Web Hosting Provider im Schnitt bei 4 Sekunden, werden die Seiten nun in der Regel innerhalb einer Sekunde ausgeliefert.

Eine weitere Möglichkeit besteht nun darin die Verarbeitung des PHP Codes selbst zu beschleunigen. Dies Aufgabe wird von einem PHP Accelerator erledigt. Ohne diese wird eine PHP Datei durch den Interpreter bei jedem Seitenaufruf neu übersetzt. Dies ist meistens unnötig, da die Skripte sich in der Regel nie ändern. Außerdem kostet die Übersetzung des Codes viel Performance und belastet somit unnötig den Server. mehr …

Dieser Blog läuft unter WordPress. Die ersten Gehversuche unter nahm ich mit diesen Blog bei einem Web Hosting Provider. Die Antwortzeiten von im Schnitt 4 Sekunden waren doch recht ernüchternd, so dass ich das Thema Performance etwas gründlicher untersuchte.

Zunächst installierte ich mir WordPress auf meinen ThinkPad W500. Dieser besitzt 4 GB RAM und einen Intel T9600 @ 2.8 GHz. Mit dem Lorem Ipsum Plugin war der Blog schnell gefüllt und der Test konnte losgehen. Um den Lasttest selbst durchzuführen wurde JMeter benutzt. Gestartet wurde mit 100 Page Requests pro Minute. Dies dürfte schon weitaus mehr sein als ein normaler Blog in der Regel an Traffic sieht. Trotzdem habe ich die 100 PR/m gewählt, da der Blog ja nicht bei einem plötzlichem Besucheransturm zusammen brechen soll. Die Last habe ich dann jeweils um 100 PR/m erhöht. Leider war nach 300 PR/m schon Schluss: mehr …