voodoo4u/NET

Webentwicklung und Softwarequalität auf Basis von PHP, SEO, .NET in einem Blog

PHP-Benchmarking: Strings anhand von Leerzeichen trennen

without comments

Ausgangssituation

Vor kurzem hatten wir in  der Firma das Problem, dass auf der Budgetmap unseres Portals ein String, bestehend aus Leerzeichen und einem Ampersand, einen AJAX-Request und die weiterführende Verarbeitung via PHP nicht überstand. Unsere Frontend-Entwickler saßen somit vor ihren Bildschirmen und überlegten, wie das Problem behoben werden kann. Die Lösung: im PHP-Controller wird einfach nur das erste übergebene Wort ausgewertet. Die Tür ging auf, ein Frontend’ler kam herein und warf eine Frage in den Raum: “Wie muss ich einen Regulären Ausdruck formulieren, damit ich die erste Zeichenkette vor einem Leerzeichen zurückbekomme?” - Total verwirrt und entsetzt warfen wir die Hände über den Kopf: “RegEx? Bloß nicht!”

Problemstellung

Wie die meisten von euch sicherlich wissen, sind Reguläre Ausdrück eine der schlimmsten Sachen, die man einem (nach Performance ächzenden) Webserver nur antun kann – zumindest wenn man auf PHP baut, wie wir. Umgehend schossen mir natürlich unzählige Möglichkeiten durch den Kopf, welche das Problem genauso einfach und schneller lösen können. Zwei von diesen möchte ich euch einmal kurz Vorstellen.

Benchmark mit PHP-Quelltext

Nachdem ich nun lang und breit erzählt habe, möchte ich euch mein kleines Benchmark-Script bereitstellen, damit ihr die Ergebnisse nachvollziehen könnt. Den Quelltext habe ich etwas ausladender gestaltet, damit er auch für Programmiereinsteiger übersichtlich und selbsterklärend bleibt.

$then = $now = 0;
$then = microtime(true);
for($i=0; $i < 1000000; $i++) {
	$str = 'Australien & Ozeanien';
	if($data = explode(' ', $str) !== false) {
		echo $data[0];
	}
}
$now = microtime(true);
echo 'Explode_true ';
echo $now-$then . "\n";

$then = $now = 0;
$then = microtime(true);
for($i=0; $i < 100000; $i++) {
	$str = 'Europa';
	if($data = explode(' ', $str) !== false) {
		echo $data[0];
	}
}
$now = microtime(true);
echo 'Explode_false ';
echo $now-$then . "\n";

$then = $now = 0;
$then = microtime(true);
for($i=0; $i < 1000000; $i++) {
	$str = 'Australien & Ozeanien';
	if($data = strpos($str, ' ') !== false) {
		$data = substr($str, 0, 10);
	}
}
$now = microtime(true);
echo 'strpos_true ';
echo  $now-$then . "\n";

$then = $now = 0;
$then = microtime(true);
for($i=0; $i < 100000; $i++) {
	$str = 'Europa';
	if($data = strpos($str, ' ') !== false) {
		$data = substr($str, 0, 10);
	}
}
$now = microtime(true);
echo 'strpos_false ';
echo $now-$then . "\n";

Benchmark-Ergebnisse

Nachdem ich den Benchmark geschrieben habe, kam es natürlich zur Auswertung der Ergebnisse. Das Benchmarkingscript selbst habe ich über die Kommandozeile auf meine Ubuntu-Laptop (ein einfaches Thinkpad T60 mit DualCore 2*2.0 GHz und 2 GB Arbeitsspeicher) angestoßen. Da einige PHP-Funktionen starke Performanceunterschiede zwischen erfolgreichem Treffer und keinem Treffer aufzeigen, habe ich beide Situationen ausgewertet. Nun zu den Ergebnissen:

#:~/benchmark/$ php index.php
Explode_true 2.2456698417664
Explode_false 0.16291379928589
strpos_true 1.6829509735107
strpos_false 0.090728998184204

Kurz um (die Ergebnisse zeigen es ja bereits): strpos in Verbindung mit einem substr ist um einiges schneller, als die Explode-Funktion. Das Ganze lässt sich natürlich relativ einfach erklären: Array-Funktionen sind in PHP zwar um einiges schneller als der Umgang mit Objekten - jedoch sind die Stringfunktionen natürlich noch einmal deutlich schneller.

Written by voodoo44

Januar 26th, 2012 at 10:03 pm

Apple, das iPad3 und die Hoffnungen für das iPad2

without comments

Nachdem ich ja nun schon mittlerweile über 3 Monate arbeiten gehe (und endlich auch etwas mehr als BAFÖG bekomme), wächst mein Wunsch nach einem iPad. Vor einigen Tagen bin ich auf dem Rückweg von der Arbeit nach Hause noch einmal im örtlichen MediMax vorbeigegangen (für die neue Wohnung brauche ich einen Herd, außerdem sind dort öfter mal gute DVDs und Blu-Ray-Scheiben im Angebot).

Dort fiel mir ein ausgelegtes iPad2 auf, welches ich mir natürlich einmal näher zu Gemüte führen wollte. Das Tablet lässt sich wirklich schön flüssig und gut bedienen, da muss man Apple ein Lob dafür aussprechen. Die (schon vor Ewigkeiten vorgestellte) geteilte Tastatur wollte ich auch einmal ausprobieren, jedoch konnte ich keinen Menüpunkt dafür entdecken. Kurzum also gleich mal das W-LAN des iPad genutzt und auf Google nachgelesen: diese Tastaturvariante gibt es wohl erst mit iOS 5.0 – auf dem iPad lief 4.3 – Schade!

Wieder zu Hause angekommen, wollte ich einmal nachschauen, was so ein iPad2 überhaupt kostet – gut, 450€ wollte ich dafür nicht ausgeben. Dabei bin ich auf einige Hinweise gestoßen, dass es wohl bald ein iPad3 geben soll. Unter anderem auch auf dem Stadt-Bremerhaven-Blog.

Viele Quellen (unter anderem Winfuture, Golem, Heise) berichten von dem Erscheinen des iPad3 im ersten Quartal 2012 – gleichzeitig soll der Preis des iPad2 gesenkt werden und zwischen 250-300 Dollar liegen.
Mich bringt das Ganze natürlich in Schwierigkeiten – einerseits möchte ich gern so ein iPad haben, andererseits will ich es vermeiden, dafür das doppelte zu bezahlen, wenn es doch 2 Monate später viel günstiger zu haben ist.

Alles in allem gibt es viele Theorien zum iPad3: Golem berichtet in verschiedenen Beiträgen, dass Anfang des Jahres ein günstiges iPad2S kommen soll (Preisvorstellung zwischen 250-300 Dollar) – cashy berichtet auf seinem Blog, dass bald ein iPad3 erscheinen könnte.

Das einzige, was man zum aktuellen Zeitpunkt weis ist, dass man nichts weis. Apple hält sich bezüglich der Gerüchte um das iPad3 sehr bedeckt, auch auf der vergangenen CES (Consumer Electronics Show) wurde keine Neuigkeiten zum kommenden iPad erwähnt.

Written by voodoo44

Januar 15th, 2012 at 1:55 pm

Apps für das iPhone, BlackBerry und Android mit Hilfe von Zend

without comments

Nachdem ich bereits vor einigen Wochen auf der Firmeninternen IT-Konferenz einen Vortrag zum Thema “eine Zend-Application in 30 Minuten” gehört habe, wollte ich euch die Möglichkeiten dieses (meiner Meinung nach etwas “eigenartigen”) Werkzeuges nicht vorenthalten.
Zend Technologies selbst hat auf der Firmenwebseite bereits eine Pressemitteilung zur neuen Technologie veröffentlicht. Diese ermöglicht es, bereits vorhandene PHP-Applikationen auf den verschiedenen Plattformen (iOS, Android, BlackberryOS) zu nutzen. Mit Hilfe einer grafischen Benutzeroberfläche können unterschiedliche Views angelegt werden, auf welchen die Oberfläche der Applikation aufbaut. Es sind wiederum verschiedene Widgets verfügbar, welche man via “Drag and Drop” einfach in das Programmfenster zieht.

Bereits vorhandene, auf PHP basierende Schnittstellen, können problemlos genutzt werden. Dabei ist eine besonders lose Verknüpfung der verschiedenen PHP-Klassen sehr nützlich – das dürfte jedoch bei einer Objektorientierten Softwarestruktur selbstverständlich sein.

Sobald das Programm fertig entwickelt ist, kann es mit Hilfe der verschiedenen, mitgelieferten Emulatoren getestet werden. Zur Verfügung stehen mehrere Android-Smartphones wie das HTC Desire, Google Nexus und weitere. Dazu gesellen sich außerdem ein Apple iPhone-Emulator und ein Emulator für das iPad. Auch für BlackberryOS sind Emulatoren vorhanden. Die Bildschirmausrichtung lässt sich während des Betriebes des Emulators ändern, sodass sowohl die Normale Ansicht als auch der Landscape-View aktiviert und überprüft werden können. Hierfür sind zwei einfache Buttons im Emulator integriert, mit welchen sich der Emulator um jeweils 45° nach links oder rechts drehen lässt.

Intern arbeitet das Produkt mit Adobe Flash. Der geschriebene Code wird von der Zend IDE mit Hilfe von Adobes Flash Builder in eine Art Flash-Quelltext übersetzt. Das entstandene Programm kann dann auf den Geräten genutzt werden. Eine kleine Anmerkung noch zum Punkt Flash und iOS: es existiert zwar keine native Unterstützung hierfür im Browser – für Flash-Apps selbst jedoch schon.

Um es noch einmal kurz zusammenzufassen: mit Hilfe des Adobe Flash Builder könnt ihr im Zend Studio eure PHP-Applikationen nutzen, um daraus schnell und einfach eine Applikation für die gängigsten Smartphones erschaffen zu können.

Leider funktioniert das Ganze noch nicht für Windows Phone 7 – vermutlich wird es auch noch eine Weile dauern, bis solch’ eine Unterstützung kommt, da Microsoft auf seinem Mobilen Betriebssystem bisher keine Flashapplikationen unterstützt.

Ein schönes Beispiel mit einer etwas ausführlicheren Beschreibung findet ihr im übrigen auf der Webseite web-punk.com - dieser ist jedoch auf englisch gehalten.

 

Written by voodoo44

Januar 8th, 2012 at 12:27 am

Posted in Allgemein,IT

Tagged with Apps, Programmierung, Smartphone, Zend

Javascript Unittesting mit QUnit und Sinon.js

without comments

Da ich mich in letzter Zeit (in Verbindung mit meiner Arbeit) viel mit Softwaretesting beschäftige habe ich nach einem Ansatz gesucht, die – von PHPUnit bekannten Unittests – auch für unsere umfangreichen Javascript-Dateien einzuführen.
Für dieses Problem habe ich im Internet nun offenbar eine praktikable Lösung gefunden: QUnit und Sinon.js.

Der Autor, Markus Frühauf, des Gastartikels auf phpgangsta.de, hat dort ziemlich ausführlich erklärt, wie man mit Hilfe von Sinon.JS und QUnit seine Javascript-Befehle eigenen Unittests unterziehen kann.
Das Beispiel, welches er hierfür implementiert hat, ist kurz und prägnant, weshalb sich die grundlegende Funktionsweise sehr einfach nachvollziehen lässt.

Alles in allem eine gelungene Sache. Ich werde das Ganze in den kommenden Tagen einmal ausgiebig testen und dann prüfen, ob diese Lösung auch in unserer Entwicklungsumgebung (Jenkins-CI) einsetzbar ist. Verschiedene Tutorials um QUnit ein Jenkins einzubinden existieren bereits.

Ein etwas ausführlicherer Artikel wird an dieser Stelle folgen, um euch von meinen Erfahrungen mit QUnit – in Zusammenarbeit mit Jenkins – zu berichten.

Written by voodoo44

November 18th, 2011 at 9:19 am

Die neue alte INSPIRE-Richtlinie

without comments

Heute möchte ich einmal kurz auf einen (meiner Meinung nach sehr interessanten) Artikel hinweisen.
Der Artikel ist Teil meiner Bachelorthesis gewesen und ich habe mich dazu entschieden, ihn (leicht bearbeitet) zu veröffentlichen.

Es geht im Artikel um das Thema INSPIRE, oder für den, der es länger mag: “Infrastructure for Spatial Information in the European Community”

Für alle, die nicht wissen, was INSPIRE ist, zitiere ich einen kurzen Ausschnitt des Artikels:

Das Ziel dieser Richtlinie ist es, die grenzübergreifende Nutzung von Geodaten in Europa zu erleichtern. Zu diesem Verwendungszweck werden allgemeine Bestimmungen für die Schaffung einer Geodateninfrastruktur für die Zwecke der gemeinschaftlichen Umweltpolitik sowie anderer politischer Maßnahmen oder sonstigen Tätigkeiten, die Auswirkungen auf die Umwelt haben, erlassen. INSPIRE verlangt grundsätzlich nach webbasierten Online-Diensten, welche für die Suche, die Visualisierung und den Download der Daten benutzt werden.

Um es grob zusammenzufassen: es geht um viel XML-Content, welcher den Datenaustausch von Geo- und Metadaten ermöglichen soll. Die Ämter der Mitgliedsstaaten sollen ihre elektronischen Daten an andere Mitgliedsstaaten weitergehen – aber auch an die eigenen Bürger. Theoretisch könnte damit jeder deutsche Bürger Einblick in ein “Online-Grundbuch” erhalten und müsste hierfür nicht immer auf’s entsprechende Amt gehen.

Den Artikel findet ihr auf meinem GISBlog.

Lesen könnt ihr den Artikel durch das klicken auf den Link.

Viel Spaß beim Lesen!

Written by voodoo44

August 19th, 2011 at 9:40 am

Posted in Hobbies,IT,Projekte

Tagged with geoinformatik, GIS, Projekte