Archiv Februar, 2010

In Deutschland wird das Thema Datenschutz immer wichtiger und so war es nur eine Frage der Zeit bis auch Google Analytics auf dem Radar der Datenschützer auftaucht. Aktuell gibt es ja an allen Ecken Diskussionen über die Sammelwut der Google Jungs aus den Staaten. Grundsätzlich ist es natürlich immer von Vorteil wenn man selbst Herr seiner Daten ist und selbst entscheiden kann was man damit machen möchte und was nicht. Deshalb habe auch ich mich auf die Suche nach einer Google Analytics Alternative gemacht und bin auf Piwik (ehem. phpMyVisits) aufmerksam geworden. Piwik ist nicht nur kostenlos, sondern auch Open Source. Das sind gleich 2 Punkte für dieses Programm. Der dritte Punkt auf der Pro Liste ist das es in PHP geschrieben wurde, sich auf eine MySQL Datenbank stützt und Javascript zur Projekteinbindung benutzt. Also genau mein Fall! Im übrigen kann man durch ein paar Eingriffe Piwik vom Speichern der User IP Adressen abhalten, was besonders für uns Deutsche interessant ist.

Installation und Vorbereitung

Die Installation von Piwik war keine große Herausforderung, da man mit Hilfe des Webinstallers so gut wie nichts falsch machen kann. Eine genaue Anleitung gibt es hier. Nachdem man das Tool auf seinem Server hat, kann man seine Webseiten anlegen und den Javascript Code auf seine Projekte verteilen. Es stellt im übrigen kein Problem dar Google Analytics und Piwik gleichzeitig auf einer Seite einzusetzen! Das war mir besonders wichtig für die Testphase. Nachdem man seine Website(s) an Piwik angeschlossen hat, kann man sofort auf die gesammelten Daten zugreifen. Das ist ein reisen Vorteil gegenüber Google Analytics, wo man immer 24 Stunden warten muss bis die Daten angezeigt werden. Piwik arbeitet dabei ähnlich wie Google Analytics. Erst werden alle Daten in einem Log gespeichert und sobald man sich in Piwik einloggt und eine Auswertung öffnet werden sie Processed. Man kann die Reports auch automatisch per Crontab erstellen lassen.

Piwik im Einsatz

Piwik kommt mit einer sauberen und aufgeräumten Admin Oberfläche daher. Im Dashboard kann man sich mit Hilfe von Widgets alle Daten so positionieren wie man es möchte. Um einen Überblick über alle eingetragen Seiten zu erhalten, kann man die All Websites Seite aufrufen.

piwik dashboard

piwik browser

Der Großteil der Daten wird per Ajax geladen was der Geschwindigkeit und dem User empfinden zu gute kommt. Ein großer Nachteil gegen über Google Analytics ist das die Auswertungen nur auf Tages/Wochen/Monats und Jahresbasis angezeigt werden können. Man kann also keine freien Zeiträume definieren, aber daran arbeitet man gerade im Piwik Team. Ansonsten sammelt Piwik alle Daten die man benötigt. Der Umfang kann sich aktuell zwar noch nicht mit dem von Google Analytics messen, aber wenn man ehrlich ist, dann braucht man vieles auch nicht. Hinter dem dritten Menüpunkt Widgets verbergen sich fertige Iframes, die man zur Veröffentlichung einzelner Auswertungen oder der Sammlung auf einer internen Seite benutzen kann. Clicky Clicky und schon fertig. Wer mehr Kontrolle haben will, für den sind die APIs genau das richtige. Für alle möglichen Module gibt es hier bereits Beispiele (xml, php serialize, json, csv) für die Abfrage der API. Am besten man schaut sich die Online Demo auf piwik.org genauer an.

Das Piwik System

Interessant war für mich natürlich der Blick hinter die Kulisse. So kann man sich nicht nur die Daten direkt in der Datenbank anschauen, sondern auch die Scripte die zur Sammlung zuständig sind. Der Quelltext ist sauber und man findet sich schnell zurecht. Liegt wohl auch daran das Piwik auf das Zend Framework aufsetzt. Die Piwik Funktionen werden als Plugins ausgeliefert. So kann man das was man braucht aktivieren und alles andere abschalten. Aktuell gibt es noch nicht gerade viele Plugins, aber das wird mit der Zeit schon kommen. Die Einbindung in bekannte CMS (WordPress, Typo3, Drupal usw.) ist durch vorhandene Plugins genauso einfach wie mit Google Analytics. Durch die sehr gute API sind auch zusätzliche Tools ohne Probleme möglich. Es gibt bereits 2 sehr gute Kandidaten die die Daten vom Server auf den Desktop bringen. Weitere werden sicher folgen.

Vorteile von Piwik gegenüber Google Analytics

  • Man speichert die gesammelten Daten selbst und ist damit selbst Herr der Datenbank
  • Open Source! Will man etwas, dann baut man es sich einfach selbst
  • Sofortiger Zugriff auf die Daten, nicht erst nach 24 Stunden
  • Übersichtlich und nicht so überladen wie Google Analytics
  • Sehr einfache Installation. Kein besonderes Fachwissen von Nöten
  • Flexible Struktur und durch die Plugin Struktur an allen Enden anpassbar

Nachteile gegenüber Google Analytics

  • Freie Auswahl von Zeiträumen gibt es nicht
  • Vergleichen von Zeiträumen ist nicht so einfach möglich
  • Kleinerer Funktionsumfang und damit weniger Auswertungen
  • Man muss sich selbst um die Administration des Tools kümmern

Fazit

Piwik ist eine echte Alternative zu Google Analytics. Mich hatte es sofort gewonnen, da es kostenlos und Open Source ist. Das ich selbst sogar daran mit arbeiten kann (da PHP) ist natürlich ein weiterer Vorteil. Ob ich Google Analytics komplett abschwören werde weiß ich noch nicht, aber für neue Projekte erstelle ich mir dort erst gar kein Konto mehr.

Da wir auf Arbeit seit Jahren Dreamweaver benutzen bin ich an die dort verwandten Farben gewöhnt, so das ich die normalen Eclipse Farben als sehr gewöhnungsbedürftig empfinde. Deshalb hier das Farbschema von Dreamweaver für Eclipse PHP. Für die Anpassung öffnet man die Preferences unter Window und navigieren nach PHP > Editor > Syntax Coloring.

Comment		255:153:0
Heredoc		204:0:0
Keyword		0:0:255
Normal		0:0:0
Number		255:0:0
PHP tags	255:0:0 (bold)
PHP Doc		255:153:0 (bold)
String		204:0:0
Task Tag	255:128:64 (bold)
Variable	0:0:0

Einige Werte unterscheiden sich von denen von Dreamweaver, was aber daran liegt das es sie dort nicht gibt. Mir fällt gerade auf das mir die HTML Farben auch nicht gefallen… Weiß jemand wo Eclipse diese Einstellungen abspeichert?

PHP 5.3 Neuerungen

2010-02-13 - kostaki No Comments »

Auf PHP 5.3 warten wir ja nun schon eine Weile. Bisher hatte ich noch nicht die Zeit oder Lust mich mit dem Thema zu beschäftigen, aber vor ein paar Tagen viel mit das Buch von Stefan Prisch – PHP 5.3 Die Neuerungen in die Hände. Da es äußerst handlich (A6-Format) ist, hat man es schnell durch gearbeitet und damit wenigstens einen Überblick über die neuen Features der nächsten Major PHP Version. Interessant fand ich das PHP 5.3 ja eigentlich PHP 6 werden sollte, aber als die Implementierung der Unicode Unterstützung nun doch zu aufwändig wurde, hat man diesen Punkt weg gelassen und so wurde aus PHP 6 PHP 5.3. Hier eine kurze Zusammenfassung der Features/Anpassungen die mich Interessierten.

E_DEPRECATED Fehler und Referenzübergabe zur Laufzeit

Es gibt eine neue Fehler Klasse E_DEPRECATED, die wie E_SCRIPT nicht zum Scriptabbruch führt, die man aber trotzdem nicht ignorieren sollte. Funktionen die in späteren Versionen nicht mehr unterstützt werden, werfen diesen Fehler, damit man sie schon heute ersetzen kann. Ein gutes Beispiel sind die ereg Funktionen, die sich bald verabschieden werden. Ein weiterer Fall ist die Referenz Übergabe zur Laufzeit. Dieses Feature von PHP setze ich selbst auch sehr oft ein und so haben mich die auftretenden Fehler doch etwas schockiert, aber immerhin ist es leicht zu beheben und die Anpassung macht natürlich Sinn! Es geht um das “&” Zeichen beim Funktionsaufruf (nicht Deklaration). Damit konnte man Parameter, auch wenn sie nicht als Referenz in einer Funktion definiert wurde, als solche übergeben. Die Funktion kann dies natürlich nicht wissen und behandelt die Variable als lokal, was zu seltsamen Ergebnissen führen kann. Hier ein Beispiel das einen E_DEPRECATED Fehler erzeugt.

function foo($bar)
{
	$bar++;
	echo $bar;
}
$a = 1;
foo(&$a);
echo $a;

Bei der Definition von foo wurde der Parameter $bar nicht als Referenz angegeben. Beim Aufruf wurde er aber als Referenz übergeben. Richtig wäre es wenn man den Parameter direkt bei der Funktionsdefinierung als Referenz markiert.

function foo(&$bar)
{
	$bar++;
	echo $bar;
}
$a = 1;
foo($a);
echo $a;

Neue Funktionen

Interessant fand ich die neue Funktion array_replace(), die arrays zusammenführen soll. Den Unterschied zu array_merge() stellt man erst fest wenn man numerische Array Keys benutzt. Bei array_merge() werden diese nämlich nicht ersetzt, sondern angefügt und im Anschluss wird das array neu indexiert. Bei array_replace() gibt es keine neu Indexierung und die Werte werden aus den Arrays werden zusammen gefasst. Benutzt man assoziierte Keys, stellt man keinen Unterschied beider Funktionen fest, weshalb ich das Beispiel im Buch als vollkommen überflüssig ansehe. Für das Rekursive zusammenfügen von arrays nach dem gleichen Schema gibt es nun array_replace_recursive(). Die weiteren neuen Funktionen werden hier beschrieben.

Neue Konstante __DIR__

Das Konstrukt dirname(__FILE__) benutze ich sehr oft für path Definierungen und dann für Includes. Das gleiche macht nun die neue Konstante __DIR__, die den Pfad des Verzeichnisses der aktuellen Datei beinhaltet. Das man Dateien mit absoluten Pfaden included habe ich von mir aus schon immer gemacht, aber im Buch steht ein Grund der mir vorher nicht wirklich bewusst war. Included man mit relativen Pfaden, überprüft PHP alle im include_dir angegebenen Verzeichnisse und das sind natürlich mehrere Festplatten Zugriffe.

//vorher
require_once(dirname(__FILE__) . '/include.php');

//jetzt
require_once(__DIR__ . '/include.php');

Lambda Funktionen

Ein weiteres sehr cooles Feature sind die neuen Lambda Funktionen die ich schon in Javascript lieben gelernt habe. So ist dies hier jetzt möglich:

$foo = function($bar)
{
	echo $bar;
};
$foo('Hallo Welt');

Das Semikolon nach der geschweiften Klammer ist im übrigen kein Fehler.

Namespaces

Das einführen von Namespaces war lang überfällig. Mir gingen schon langsam die Tags aus um Klassen und Funktionsnamen eindeutig zu machen, aber das ist jetzt nicht mehr nötig. Mit Namespaces kann man seine Klassen nennen wie man möchte ohne Rücksicht auf Kollisionen nehmen zu müssen. Eine Klasse namens Exception ist aktuell noch nicht möglich, aber bald schon. Eine Erklärung von Namespaces würde hier den Rahmen sprengen, aber dieses neue Feature sollte sich jeder mal genauer ansehen.

SQLite3 wird Standard

In PHP 5.3 wird SQLite3 der Standard werden. SQLite ist eine Datenbank die keinen eigenständigen Server benötigt, auf so gut wie jeder Plattform läuft und dafür äußerst performant ist. Aktuell kann man auch schon auf SQLite3 Datenbanken zugreifen, aber man muss dafür die PDO benutzen. Durch die 64Bit Unterstützung in SQLite3 sind größere Datenbanken möglich und durch das verbesserte Locking wird der Zugriff von vielen gleichzeitigen Verbindungen verbessert. Wichtig ist das man nicht per SQLite3 auf alte Version 2 Datenbanken zugreifen kann. Man muss die Datenbank neu erzeugen und dann füllen.

PHP Garbage Collector

Der Garbage Collector von PHP wurde auch überarbeitet/eingebaut?. Bei lang laufenden Scripten merke ich es recht oft das der Speicher nicht freigegeben wird, auch wenn ich die Variablen/Objekte zerstöre. Vielleicht funktioniert es ja in 5.3 wie gewünscht.

Fazit

PHP 5.3 hält einige sehr coole neue Features für uns bereit, die die Arbeit mit PHP vereinfachen wird. Außerdem werden unsinnige “Features” endlich entfernt oder angepasst, was PHP helfen wird als wirkliche Programmiersprache angesehen zu werden und nicht nur als Scriptkiddie Choice of the Day. Was das Buch angeht muss ich leider sagen das die Investition sich nicht lohnt. Das liegt nicht direkt an dem Buch selbst, sondern an dem sehr guten PHP Manual: Migration from 5.2 -> 5.3. Wer einen Überblick über die Änderungen von PHP 5.3 haben möchte, ist dort gut aufgehoben und kann sich die 12,90€ sparen.

Das favicon.ico kennt ja bestimmt jeder, aber da ja kein Apfel drauf ist, hat sich Apple das apple-touch-icon.png einfallen lassen und das nervt mich gerade extrem. Einige meiner Seiten schicken nämlich 404er Fehler die nicht von einem Bot ausgelöst werden per Email an mich. Leider “spidert” gerade irgend ein Iphone Freak über einen Amazon EC2 Proxy? ein Projekt von mir und löst jede Minute eine dieser Fehlermails aus…

Also habe ich mir schnell mein favicon.ico gezogen und in ein apple-touch-icon.png umgewandelt und in die Root der Domain gepackt. Erwartet wird ein 57×57 Pixel PNG, wobei ein 60×60 PNG wohl zu besseren Ergebnissen führen soll. Was macht man nicht alles um seine Ruhe zu haben, dabei interessiert mich der ganze Iphone Hype nicht mal. Wer sich mehr “Mühe” geben möchte findet hier einen Generator.