Voting Tool
Beschreibung
In einem Workshop beim erasmus IP (Intensive Program) 2011 in Virrat (Finnland) wurde ein webbasiertes voting tool mir Grails als serverseitiges Backend programmiert.
Da es recht zuverlässig funktioniert und die entsprechende Nachfrage besteht, habe ich mich nach Rücksprache mit den beteiligten Programmierern entschlossen unsere Sourcen dieses Projekts offen zu legen.
Da das Ganze von uns damals nur "schnell mal für diesen Workshop" programmiert wurde, fehlen hier und da (vor allem auf admin-seite) ein paar nice-to-haves, was jedoch der Funktionalität an sich keinen Abbruch tut.
Featurelist
- Fragen anlegen, Optionen festlegen
- Fragen aktivieren und deaktivieren
- automatische Benutzerführung
- automatisch geupdatete Ergebnisgrafiken (Grafiken werden mit jfreechart erstellt.)
- GPL lizensiert
Aufsetzen
Die Sourcen können aus folgendem git-repository geklont werden:
git clone http://deroberling.de/git/votingTool/
Eine funktionierende Grails-Installation vorausgesetzt funktioniert das votingTool sofort lokal mit Beispieldaten durch das einfache Ausführen von
grails runApp
im Projektordner.
Nutzen
Workflow für den Nutzer der Anwendung:
- Man surfe zu http://ip-des-servers:8080/voting/question/ , wo einem die erste Frage gestellt wird.
- Hat man diese Frage beantwortet, kommt man zu einer Auswertungsgrafik, welche sich selbst alle 5 Sekunden aktualisiert
- Wird vom Administrator eine neue Frage aktviert, wird man automatisch zu dieser umgeleitet
Das Admininterface befindet sich unter: http://ip-des-servers:8080/voting/question/list/
Standard-Admin-User ist admin mit Passwort grails - was natürlich geändert werden kann und auch sollte ;) - dazu muss man momentan allerdings im Quelltext in der grails-app/conf/BootStrap.groovy das ganze manuell ändern.
Der Workflow für den Administrator ist wie folgt:
- Anlegen einer Frage mit ihren Optionen und ob sie Checkbox (multiple choice mit Balkendiagramm) oder Radiobox (single choice mit Tortendiagramm) als Auswahlmöglichkeit bieten soll
- Aktivieren dieser Frage (die momentan aktive Frage wird dadurch auf closed gesetzt)
- Die Frage wird bei den nächsten Aktualisierungen der Clients automatisch auf diesen clients angezeigt (könnte man mit Ajax besser machen...)
Dabei ist zu beachten, dass in der Produktivumgebung immer eine Frage aktiv sein muss, da sonst die Clients irgendwann auf eine "nicht vorhanden"-Seite geleitet werden, was nicht unbedingt wünschenswert ist.
Verbessern
Wer ein paar Unschönheiten beseitigt, möge mich nach einem schreibendem Zugriff auf obiges git fragen - würde mich freuen, wenn das Projekt noch etwas schöner wird :-).
Verbesserungen, an die wir schon gedacht haben:
- Internationalisierung
- Konfigurationsdatei für die hartkodierten Parameter
- Fragensets
- AJAX für das clientseitige Update der Ergebnisgrafik