Open Source im professionellen Einsatz
Linux-Magazin 09/2008
© kebox, Fotolia.com

© kebox, Fotolia.com

Frage-Antwort-System fürs Web

Wer A sagt, darf nicht B sagen

Catalyst ist das Ruby on Rails der Perl-Welt: Bei der Entwicklung von Webapplikationen - beispielsweise eines Quiz - bietet das MVC-Framework enormen Komfort und eine saubere Trennung der Komponenten.

821

Ob Spiegel-Online "Reicht ihr Latein zum Angeben?" fragt [2] oder Food.aol.com seine Benutzer durchgeschnittene Schokoriegel identifizieren lässt (Abbildung 1) - ein Quiz vertreibt dem Onliner erfolgreich die Zeit. Arbeitskollegen leiten die URLs gern weiter und beim abschließenden Vergleichen der Punktzahlen ergibt sich neben einer anregenden Diskussion auch eine Neuordnung der büroweiten Hackordnung.

Abbildung 1: Welcher Schokoriegel mag das sein? Ein Schnittbilder-Quiz auf der Website Food.aol.com [3] verlangt Onlinern Wissen über Kalorienreiches ab.

Was liegt näher, als selbst ein Quiz zusammenzuklopfen? Abbildung 2 zeigt den vorgestellten Rat-Dampfer in Aktion. Damit der Code wiederverwertbar ist, holt die Applikation die Quizfragen samt Multiple-Choice-Antworten aus einer Yaml-Datei (Abbildung 3). Das Beispiel benutzt eine Auswahl aus Fragen der Einbürgerungsprüfung der USA. Die Anwärter müssen zum Beispiel wissen, wie viele Sterne die US-Flagge aufweist und was sie symbolisieren [4].

Abbildung 2: Die mit Catalyst implementierte Quizapplikation für US-Neubürger in Aktion. Hier die Frage nach der Sterne-Symbolik in der Flagge.

Abbildung 3: Multiple Choice: Die Fragen mit drei Antwortvarianten liegen in einer Yaml-Datei. Die jeweils erste Antwort ist die richtige.

Die Webapplikation soll die Yaml-Datei einlesen und die Fragen einzeln auf einer neuen Seite darstellen. Die Yaml-Datei gibt die richtige Antwort stets als erste, doch die Applikation soll später die Antworten zufällig durcheinanderwürfeln, damit der Test spannend bleibt.

Die Implementierung ist nicht sonderlich trickreich, aber es kommt so einiges zusammen: Schön designtes HTML mit dynamisch aufbereiteten Feldern, Session-Management zwischen den einzelnen Fragen, damit die Applikation die Punktzahl des Users nicht vergisst, und zum Schluss eine Ergebnisseite, die dem Benutzer den Endstand mitteilt und zu einer weiteren Runde einlädt (Abbildung 4). Und schließlich darf der Server dem Client niemals über den Weg trauen, denn der könnte schummeln.

Abbildung 4: Am Ende des Quiz angelangt bekommt der Teilnehmer seine Punktzahl angezeigt. Die Applikation muss sich deshalb die Vorgeschichte merken.

Das Framework Catalyst [5] unterstützt Perl-Programmierer bei derartigen Projekten. Es erzeugt automatisch ein Rohgerüst des Programmcode, in das der Entwickler dann nur noch die applikationsspezifischen Teile einfügt. Die Aufteilung der Komponenten in Model (Datenmodell), View (HTML-Darstellung) und Controller (Kontrollfluss) hat sich bei der Entwicklung von Webapplikationen bewährt und ermöglicht eine saubere Codetrennung und folglich leichte Wartbarkeit.

Framework installieren

Die Catalyst-Module liegen auf dem CPAN vor. Wegen ihrer schieren Menge empfehlen sich aber vorgefertigte Pakete. Auf Debian-basierten Systemen sorgt

sudo apt-get install libcatalyst-perl libcatalyst-modules-perl

für die fachgerechte Installation aller Module samt einem Rattenschwanz abhängiger Pakete. Damit der Entwickler nicht bei Adam und Eva anfangen muss, legt das mitgelieferte Skript

catalyst.pl QuizShow

ein neues Verzeichnis »QuizShow« für die neu erzeugte Applikation an und stellt dort auch noch etwa 30 Dateien in verschiedene Unterverzeichnisse hinein, damit das Ganze sofort betriebsfähig ist. Es finden sich unter anderem ein »Makefile.PL«, um die Applikation CPAN-gerecht zu verpacken, vordefinierte Konfigurationsdateien, Modulskelette zum Ausfüllen und diverse Skripte, um neue Teile anzulegen und die Applikation auf unterschiedliche Weise zu starten.

Später lässt sie sich als CGI-Skript oder unter Mod_perl auf einem Apache-Server fahren. Aber während der Entwicklung bietet es sich an, einfach den mitgelieferten Webserver zu starten:

cd QuizShow
script/quizshow_server.pl

Sofort fährt der Server wie in Abbildung 5 hoch und gibt akkurat formatierte Informationen über die Serverkonfiguration und die URL, unter der ein Browser ihn erreichen kann, bekannt. Die Standardeinstellung ist »http://localhost:3000«. Wer sie in einen Browser eingibt, bekommt die Catalyst-Startseite zu sehen. In Produktionssystemen kommt später freilich ein Apache-Server zum Einsatz.

Abbildung 5: Der im Catalyst-Paket mitgelieferte Testserver fährt hoch und gibt bereits implementierte Details der Anwendung bekannt.

HTTP mit Gedächtnis

Wenn ein Browser mit einem Webserver kommuniziert, weisen beide zwischen den einzelnen Requests keinen Zustand auf - falls Session-Cookies und Server-seitig gespeicherte Session-Daten diesen nicht explizit sichern. Ein Quiz, das nach jeder Frage den aktuellen Punktestand vergäße, wäre wenig hilfreich, und so muss der Entwickler wohl in den sauren Apfel beißen und diese nicht ganz triviale Logik implementieren. Catalyst bietet glücklicherweise schon ein vorgefertigtes Session-Management an, ebenfalls als Debian-Paket. Der Aufruf

sudo apt-get install libcatalyst-plugin-session-fastmmap-perl

installiert die notwendigen Perl-Module. Damit das Quiz dem Browser beim ersten Andocken automatisch ein Session-Cookie unterjubelt, mit diesem einen Server-seitigen Speicher indiziert und dort Userdaten speichert, muss man die Zeile

use Catalyst qw/-Debug ConfigLoader Static::Simple/;

der vorher automatisch erzeugten Datei »lib/QuizShow.pm« zu

use Catalyst qw/-Debug ConfigLoader Static::Simple Session Session::State::Cookie Session::Store::FastMmap/;

umbauen. Damit kann eine Applikation jederzeit bequem mit der Methode »session()« des Catalyst-Kontextobjekts auf den Session-Hash zugreifen. Der enthält die Session-Daten im Key-Value-Format; Catalyst sichert sie automatisch unter der im Browser-Cookie gesetzten Session-ID und verwaltet sie auf dem Server.

Das Verfahren funktioniert natürlich nur, wenn der Browser bei jedem neuen Request mit demselben Server spricht und nicht etwa mit einer zufälligen Instanz einer Serverfarm. Für anspruchsvollere Konfigurationen bietet Catalyst darum datenbankbasierte Sessions an.

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Mensch gegen Maschine

    In manchen Bereichen möchte sich der Mensch nur ungern vom Rechner ins Handwerk pfuschen lassen. Neben Fragen der Intelligenz und Kreativität gehört auch das Bugfixing mit dazu. Dabei gibt es nützliche Werkzeuge, die nicht zwangsläufig das Ende des Zeitalters der Qualitätssoftware bedeuten.

  • Schneller Weg zur Live-CD

    Gentoo Linux lässt sich flexibel und einfach an eigene Bedürfnisse anpassen. Diese Anleitung zeigt, wie man mit dem distributionseigenen Tool Catalyst individuelle Live-CDs herstellt.

  • Projekteküche

    Bilder zu Tönen - mit dieser Parole lockt Soundmural experimentierfreudige Medienartisten. Geeks finden Gleichgesinnte mit dem neuen Hacker Key, Linux läuft auf dem Ultrasparc T1, Hobby-Quizmaster prüfen den Wissensstand ihrer Bekanntschaft mit AKF Quiz. Als Hauptgewinn warten Kässpätzle.

  • Japanisch-Paukerin

    Eigene Clients und eigene Server sind in Perl schnell programmiert - ohne mit den Details der Netzwerkprotokolle zu kämpfen. (Michael Schilli)

  • Leserbriefe

    Haben Sie Anregungen, Statements oder Kommentare? Dann schreiben Sie an redaktion@linux-magazin.de. Die Redaktion behält es sich vor, die Zuschriften und Leserbriefe zu kürzen. Sie veröffentlicht alle Beiträge mit Namen, sofern der Autor nicht ausdrücklich Anonymität wünscht.

comments powered by Disqus

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.