Dienstag, Juli 24, 2007

Selenium - Unit Test für Webapplikationen

Wer aus dem Javabereich kommt ist (hoffentlich) bestens mit Unit Testing vertraut. Diese Art von Test machen ein ganz anderes entwickeln möglich. Für alle anderen, welche Unit Testing nicht kennen: Es wird eine Testumgebung geschrieben, welche bestimmte Zusicherungen für Funktionen enthält. Es werden also beliebig viele Assertions aufgestellt. Die müssen alle erfüllt werden.

Beim Programmieren kann jetzt jederzeit der Unittest gemacht werden. Leuchtet irgendwo eine rote Lampe auf, dann ist schlecht. Wer schon mal grössere Webapplikationen gebaut hat, der vermisst so etwas. Problem: Es wird programmiert und gebastelt und plötzlich geht’s nicht mehr und keiner weiss warum „gestern hats doch noch funktioniert“.

Hier tritt Selenium in die Lücke. Selenium ist ein Framework, welches automatisches Testing erlaubt. Folgende Tools sind dabei sehr hilfreich:

  • Xpath Plug für Firefox
  • Selenium IDE für Firefox

Damit kann man dann auch schon loslegen. Mit dem Selenium IDE wird ein Makro aufgezeichnet. Man klickt sich also durch die Seiten durch und es wird alles aufgezeichnet. Das „Video“ kann man dann abspielen und man sieht genau was man gemacht hat. So kann schon mal ein Test gemacht werden, welcher alle Links überprüft… ganz nützlich. Im Weiteren können noch Zusicherungen gemacht werden, als zum Beispiel verifyTestPresent(test), würde nur true zurückgeben, falls auf der entsprechenden Seite das Wort test zu finden ist.

Fehler werden in einer Tabelle rot dargestellt und so ist man denen ziemlich schnell auf der Spur.

Dienstag, Juli 10, 2007

AJAX - In Drupal - Modulentwicklung

AJAX lässt sich ziemlich leicht in Drupal integrieren, hier die wichtigsten Schritte. Zuerst muss der hook_menu implementiert werden:


function modulname_menu(){
$items[] = array(
'path' => 'modulname/function_name',
'callback' => 'function_name',
'access' => user_access('access module'),
'type' => MENU_CALLBACK);
}
Der Pfad (modulname/function_name) lässt sich jetzt bequem als AJAX Request vom Browser (oder natürlich auch als normaler Request) aufrufen. Die Parameter sind ganz normal vorhanden und können mittels $_GET ausgelesen werden.
callback sagt dem Skript welche Funktion aufgerufen werden soll, wenn ein Request an den Pfad (path) gelangt.
Mittels access kann noch spezifiziert werden, wer alles Zugriff hat.

Als zweiter Schritt muss dann lediglich noch der entsprechende Pfad aufgerufen werden. Für AJAX und Drupal empfehle ich die JQuery Bibliothek. JQuery ist bereits standardmässig in Drupal integriert und erlaubt ein sehr einfaches benutzen von AJAX. Zudem erlaubt JQuery ziemlich coole Effekte. Die Funktionalität und Benutzerfreundlichkeit von Webandwendungen nehmen unter der Verwendung von AJAX massiv zu.

Montag, Juli 09, 2007

Drupal eigenes Modul

Im Zuge der Entwicklung des NickiPlorers habe ich mich entschlossen, den NickiPlorer als Modul für Drupal zu programmieren. Die Entscheidung ist mir ziemlich leicht gefallen: Da der NickiPlorer mit diversen Community Features ausgstattet werden wird, ist ein mächtiges Backend System notwendig (z.B. die Userverwaltung). Dies ist doch ziemlich aufwendig zu programmieren und so habe ich mich beschlossen, die Userverwaltung von Drupal zu übernehmen.
Der bestehende Code liess sich binnen 2 Stunden in ein Modul portieren und läuft jetzt stabil weiter.

Als Grundlage hat mir vor allem das Handbuch auf Drupal.org geholfen. Dort findet sich ein hübsches Tutorial für die Modulentwicklung.

Auch die AJAX Funktionalität liess sich sehr leicht implementieren. Hier ist vor allem die hook Funktion:

drupal_add_js
Dadurch lässt sich im bestehenden Template ganz leicht eine Javascript Datei einbinden, welche zum Beispiel entsprechende AJAX Funktionalität beinhaltet.

Mittwoch, Juli 04, 2007

Neues YouTube Interface - NickiPlorer

Wie schon in einem früheren Post angekündigt, befasse ich mich mit einem Prototypen für ein neues YouTube Interface: Der NickiPlorer.

Die Idee dahinter ist folgende: Auf dem Internet ist es jedem möglich, einfach Inhalte zu veröffentlichen. Dies hat in den letzten Jahren dazu geführt, dass die Anzahl solcher Inhalte (User generated Content) explosionsartig gestiegen ist. Man denke hier an YouTube, MySpace und natürlich die zahlreichen Blogs. Das Angebot hat dadurch schlagartig zugenommen und auf YouTube z.B. gibt es sicher für jeden Geschmack ein passendes Video. Doch wie finden sich solche Inhalte. Hier genau liegt das Problem.
Der User kann die Inhalte selber frei gestalten und tut dies auch. Es wurden entsprechende Tags eingefügt, welche jedoch von den Nutzern frei gewählt werden können. Die Vorstellungen der Ersteller und der Besucher decken sich nicht. So würden einem bestimmten Video 2 verschiedene Benutzer ganz andere Tags zuordnen.

Der NickiPlorer hat folgendes Ziel:

  1. Ein angenehmes Interface, welches zum verweilen einlädt. Es soll Spass machen sich durch die Videokollektionen von YouTube zu durchwühlen. Dadurch dass man mehr Zeit damit verbringt, ist es auch wahrscheinlicher, dass etwas gefunden wird.
  2. Der NickiPlorer soll das kollektive Suchen fördern.
  3. Der NickiPlorer soll das verbreiten und wieder auffinden von Videos vereinfachen
  4. Der NickiPlorer soll nicht für Videos eingesetzt werden können, sondern eine offenen Schnittstelle auch für andere Inhalte haben (Fotos, Text, Audio...)
Im Moment suche ich Leute, welche gerne ein wenig mit dem NickiPlorer browsen und auch entsprechendes Feedback geben. Dafür habe ich ein kleines Forum eingerichtet.

Zend Framework Version 1.0

Es hat sich wie ein Lauffeuer verbreitet. Das Zend Framework ist als Version 1.0 fertig gestellt worden. Nachdem ich erstmals mit der Version 0.7 eine Applikation gebaut habe, darf ich für die Firma, für die ich arbeite eine Modellapplikation in der Version 1.0 bauen.
Das Zend Framework benötigt PHP 5, da es vollkommen Objekt Orientiert ist. Mit dem Zend Framework wird eine sogennante Model View Controller (MVC) Architektur bereitgestellt, bzw. der Programmierer wird dazu gezwungen dieses Pattern anzuwenden.
Es scheint doch einige Veränderungen (Verbesserungen) gegeben zu haben. Was mir besonders gefällt ist die Möglichkeit zu modularisieren. Dies scheint für besonders grosse Projekte sehr hilfreich zu sein. Aus irgend einem mir noch unbekannten Grund kann ich Module jedoch nicht einbinden.
Im Weitere ist mir aufgefallen, dass es die Möglichkeit gibt, ein Konfigurationsfile als XML einzulesen. Ist natürlich sehr hilfreich.
Die Datenbankanbindung erfolgt ohne Probleme. Ich war bisher eigentlich immer nur MySQL gewöhnt. In der Firma wird jedoch mit Oracle gearbeitet. Dank der Datenbankabstraktion ist dies kein Problem und die Verbindung zur Datenbank hat auf Anhieb gut geklappt.

Fazit: Um mit dem Zend Framework zu programmieren, ist sicher ein wenig Übung erforderlich, doch ist es besonders für grosse Projekte sehr übersichtlich und gibt eine klare Struktur vor, so dass man auch gut im Team arbeiten kann.

Ich werde versuchen, die Modellapplikation hier bereit zu stellen, wenn diese fertig ist, damit vor allem auch die Filestruktur ersichtlich ist.