doc - Universität Stuttgart

Werbung
Universität Stuttgart
Institut für Visualisierung
und Interaktive Systeme
Fachpraktikum Graphische Benutzungsoberflächen
Aufgabe 5: Web-basierter Client für News-Feeds.
Steffen Koch
Ziel dieser Aufgabe ist es, einen Einblick in die
Erstellung webbasierter Oberflächen unter
Nutzung der Hypertext Markup Language
(HTML), Cascading Stylesheets (CSS) und
JavaScript zu erlangen. Mit den genannten
Beschreibungs- und Skriptsprachen soll eine
graphische Benutzeroberfläche erstellt werde,
die es erlaubt News-Feeds zu abonnieren, sie
abzurufen und diese auch wieder abzubestellen.
Hierfür wird ein Proxy-Server zur Verfügung
gestellt, der gängige Feed-Formate wie RSS1 und
Atom2 mittels eines vereinfachten XMLFormats ausliefern kann. Der Datenaustausch
zwischen Browser und Feed-Proxy soll dabei
asynchron durch die Verwendung von AJAX
(asynchronous JavaScript and XML) erfolgen.
Insbesondere folgende Lernziele sollen in dieser
Aufgabe vermittelt werden:

mit HTML Weboberflächen zu erstellen,

CSS anzuwenden,

über JavaScript auf das sogenannte
Document Object Model (DOM)
zuzugreifen,

JavaScript
und
asynchronen
einzusetzen.
XML
für
den
Datenaustausch
Organisatorisches
Für die Bearbeitung der Aufgaben des
Fachpraktikums steht Ihnen wie üblich das
Subversion-Repository zur Verfügung. Darin
finden Sie für diese Aufgabe sowohl den
Proxy-Server im Quellcode, sowie bereits
angelegte
Verzeichnisse
für
den
zu
erstellenden HTML-Client. Zudem enthält
das Projekt ein Ant-Skript, welches Ihnen das
Deployment der Anwendung erleichtern soll.
Für die Bearbeitung der Aufgabe kann ein
beliebiger Editor verwendet werden. Die
1
http://de.wikipedia.org/wiki/Rss
2
http://www.atompub.org/
Nutzung von Eclipse wie es im Pool installiert
ist wird empfohlen. Die Abgabe des von Ihnen
erstellten HTML-Clients erfolgt ebenfalls wie
immer über das SVN-Repository.
Anmerkung:
Bitte beachten Sie, dass sich unterschiedliche
Browser sowohl in Bezug auf das Scripting als
auch
die
Darstellung
von
Inhalten
unterschiedlich verhalten können. In der
Praxis
ist
es
mitunter
aufwändig
Anwendungen zu entwickeln, die in mehreren
Browsern gleich gut laufen. Entscheiden Sie
sich bitte daher gleich zu Beginn der Aufgabe
für einen Browser Ihrer Wahl um späteren
„Überraschungen“ bei der Entwicklung und
Vorführung der Aufgabe zu vermeiden.
Gefordert ist also die Implementierung der
Aufgabe für nur einen Browser.
Einleitung
Neben der Tatsache, dass das World Wide
Web (WWW) seit Anfang der 90er Jahre
einen geradezu sagenhaften Boom erlebte,
finden sich mittlerweile immer mehr
Anwendungen in Unternehmen, die ebenfalls
von Webtechnologie Gebrauch machen. Dies
liegt nicht zuletzt daran, dass inzwischen eine
große Vielzahl von Produkten, Frameworks,
freien Web-Servern, Web-Infrastruktur und
Clients in Form von Webbrowsern verfügbar
ist.
Diese
Möglichkeiten,
sowie
die
zunehmend vorhandene Kompetenz der
Benutzer im Umgang mit Weboberflächen
lassen
sich
auch
in
verteilten
Firmenanwendungen nutzen. Dies ist möglich
ohne dass auf jedem Arbeitsplatzrechner für
neue
Anwendungen
zusätzlicher
Installationsaufwand notwendig wäre. Die
wichtigsten Standards für webbasierte
Anwendungen sind die Hypertext Markup
Language (HTML) für die Erstellung von
Weboberflächen, sowie das
Hypertext
Transfer Protocol (HTTP) welches Basis für
1
den Datenaustausch zwischen Webserver und
Browser ist.
HTML
Die erste Version von HTML wurde 1989 von
Tim Berners Lee entwickelt der als der
Begründer
des
WWW
gilt.
Die
Beschreibungssprache HTML ist kein starres
Gebilde, das seit Beginn des WWW
unverändert besteht, vielmehr wird es ständig
weiterentwickelt.
Diese
Entwicklungen
wurden in der Vergangenheit häufig durch
Browser-Hersteller initiiert und sind teilweise
in
die
offiziellen
Sprachstandards
eingeflossen. Die Standards selbst werden in
Form sogenannter „Recommendations“, also
Empfehlungen, vom World Wide Web
Consortium gepflegt. Im Moment wird gerade
am HTML 5 Standard gearbeitet. Aktuell
üblich sind jedoch noch die Standards HTML
4.01 sowie XHTML 1.1 (eine XML-konforme
Variante von HTML). Bei der Bearbeitung der
Aufgabe sollten Sie sich für eine der beiden
Varianten entscheiden und sich durchgängig
an
diesen
Standard
halten.
Standardkonformität lässt sich leicht mittels
des HTML-Validators auf der Seite des World
Wide Web Consortiums (W3C) überprüfen.
Die herausragende Eigenschaft von HTML ist
es Seiten über sogenannte Hyperlinks
netzwerkartig zu verknüpfen und dafür
Navigationsmöglichkeiten zur Verfügung zu
stellen. Dabei spielt es keine Rolle ob die
Seiten alle auf demselben Webserver liegen
oder nicht. Die Seiten selbst werden hierbei
über sogenannte Uniform Resource Locators
(URLs) identifiziert. Allerdings handelt es sich
bei den heutigen Webinhalten nicht mehr
ausschließlich um Texte, wie der Begriff
„Hypertext“ vermuten lassen würde. Die
neueren Standards erlauben es nahezu
beliebige Multimediadaten in Webseiten zu
integrieren. Zudem bietet HTML die
Möglichkeit Benutzereingaben in Formularen
an einen Webserver zu versenden.
Während zu den Anfangszeiten des WWW
über die Beschreibungssprache HTML sowohl
die Struktur als auch das Layout von
Webseiten festgelegt wurde, hat sich dies in
den letzten Jahren dahingehend verändert,
dass eine Trennung von Struktur/Inhalt
(beschrieben durch HTML) und Layout (über
CSS) angestrebt wird. Der Sinn einer solchen
Trennung liegt auf der Hand: Dieselben
Inhalte
können
über
unterschiedliche
Stylesheets mit unterschiedlichen Layouts
versehen
werden,
oder
sogar
für
unterschiedliche Ausgabegeräte und Medien
angepasst werden.
Auf den Seiten des W3C finden Sie alle
wichtigen Informationen und Spezifikationen
zu
HTML,
CSS
und
verwandten
Themengebieten: www.w3.org
HTTP
Das Hypertext Transfer Protocol ist wie der
Name bereits erahnen lässt ein Protokoll, das
für den Austausch von Daten zwischen
Webservern und Webbrowsern zum Einsatz
kommt. Eine ausführliche Beschreibung des
Protokolls findet sich unter:
http://tools.ietf.org/html/rfc1945
und
http://tools.ietf.org/html/rfc2616
Innerhalb der zu bearbeitenden Aufgabe sind
lediglich die HTTP-Anfragen „Get“ und „Post“
interessant, die es ermöglichen vom Client aus
eine
Web-Ressource
anzufordern
und
gleichzeitig Parameter an den Server zu
übertragen. HTTP ist ein zustandsloses
Protokoll.
Das
bedeutet,
dass
jeder
Request/Response-Zyklus unabhängig vom
Kontext vorangegangener Aufrufe stattfindet.
Dies stellt, insbesondere im Rahmen von
Anwendungen die einen „Sitzungscharakter
aufweisen“, ein Problem dar. Um künstlich
Informationen über einen Zyklus hinweg zu
erhalten,
können
unterschiedliche
Mechanismen für das Session-Handling zum
Einsatz kommen. Gängige Verfahren sind
„URL-Rewriting“, HTTP-Cookies3 sowie das
„Durchschleifen“ von Session-Parametern. Für
die gestellte Aufgabe ist das Session-Handling
auf Basis von Cookies bereits transparent in
den bereitgestellten Proxy integriert. Dies
bedeutet,
dass
für
eine
korrekte
Funktionsweise Cookies im Browser erlaubt
werden müssen.
JavaScript
HTML und CSS bilden wie schon erwähnt die
Basis für Seiten im WWW. Allerdings lassen
sich damit nur „statische“ Anwendungen
erstellen die den Webclients auch den Namen
„Browser“
bescherten.
Sollen
Inhalte
3
http://tools.ietf.org/html/rfc2965
2
dynamisch änderbar/generierbar sein so
reichen HTML-Beschreibungen und CSS
alleine nicht mehr aus. Zur Generierung
dynamischer Webseiten auf Serverseite, steht
eine große Palette von Skriptsprachen,
Frameworks und Toolkits zur Verfügung.
PHP4, JSP5 und ASP6 sind hierbei nur einige
der bekannteren Vertreter. Mit deren Hilfe
kann auf die Eingabe von Benutzern in
geeigneter Weise dynamisch reagiert werden.
Zum Beispiel lassen sich so Weblogs (kurz
Blogs) erstellen, in die ein Autor Inhalte
einpflegen und im Netz zur Verfügung stellen
kann. In der vorliegenden Aufgabe wurden für
die Server-seitige Implementierung des FeedProxys JavaServer Pages (JSP) eingesetzt.
Verfügung (DOM). Es bietet die Möglichkeit
beliebige Elemente auf einer Webseite zu
finden und zu verändern. Auch für den Zugriff
auf XML-Dateien (wie z.B. die vom FeedProxy zur Verfügung gestellten) gibt es ein
DOM. Die wichtigsten Zugriffsmethoden des
XML-DOM haben Sie bereits bei der
Bearbeitung
vorangegangener
Aufgaben
kennengelernt. Sie sind in ähnlicher Weise
auch auf HTML-Dokumente anwendbar.
Aber auch Client-seitig ist Dynamisierung in
vielen Fällen wünschenswert. Sei es für die
Erstellung von Funktionalität die nicht über
die Beschreibung in HTML möglich ist, wie
z.B. Veränderung der Seiteninhalte bezüglich
ihrer
Struktur
oder
Anordnung,
„Animationen“, oder dem asynchronen
Austausch von Nachrichten mit dem
Webserver wie er im Abschnitt „AJAX“
beschrieben ist. Eine Möglichkeit für die
Client-seitige Dynamisierung von Webseiten
bietet JavaScript oder auch ECMA-Script7 wie
der Sprachstandard bei der European
Computer Manufacturers Association genannt
wird.
Für das Polling von Feed-Nachrichten sollten
Sie
sich
insbesondere
die
Methode
setTimeout() des Window-Objekts ansehen.
Bei der Entwicklung von Client-seitigem
JavaScript ist es ratsam äußerst defensiv zu
programmieren.
So
sollten
sämtliche
Variablen denen ein Objekt zugewiesen wurde
vor deren Benutzung auf ihren Inhalt
überprüft werden:
if (object) {
//do something
} else {
alert(„An error has occurred, object was 0 or ‘undefined’”);
}
Fehlermeldungen können mit dem Befehl
alert(„Fehlermeldung“) in Form eines
Dialogs ausgegeben werden.
Bei JavaScript handelt es sich um eine
interpretierte Sprache mit dynamischer
Typisierung. Das heißt einer Variablen
können Werte/Instanzen unterschiedlichen
Typs zugewiesen werden. „Objektorientierte“
Programmierung ist mit JavaScript möglich
innerhalb der hier zu bearbeitenden Aufgabe
jedoch nicht zwingend erforderlich. Lassen Sie
sich jedoch bitte nicht vom Namen
„JavaScript“ täuschen, zwar gibt es Parallelen
zu Java was die Syntax anbelangt, die
semantischen Konzepte unterscheiden sich
jedoch deutlich.
Für das Scripting von HTML-Webseiten steht
das sogenannte Document Object Model zur
4
http://www.php.net/
5
http://java.sun.com/products/
jsp/index.html
6
7
http://asp.net/
http://www.ecma-international.org/
publications/standards/Ecma-262.htm
Anmerkung:
Falls Sie noch nie in JavaScript programmiert
haben sollten, arbeiten Sie sich bitte mit Hilfe
der
unter
Quellen
und
Tutorials
referenzierten Materialien ein.
AJAX
In letzter Zeit geistert der Begriff „Web 2.0“
durch die Medien. Unter diesem Begriff
werden neuere Webanwendungen wie Wikis,
Soziale Netzwerke, Mashups und viele weitere
Applikationen subsumiert, welche (auch) die
aktive Einflussnahme von Benutzern auf
Webinhalte umfassen. Häufig wird „Web 2.0“
daher auch als das „Mitmachweb“ bezeichnet.
Wie auch immer man diese Form der
Webanwendungen bezeichnen möchte, neu
sind die Möglichkeiten die unter Web 2.0
zusammengefasst werden nicht - obwohl das
die Versionsnummer 2.0 suggeriert.
Tatsächlich neueren Ursprungs sind jedoch
Erweiterungen in JavaScript, die es erlauben
Daten mit einem Webserver asynchron
auszutauschen. Dies bietet neben Vorteilen
3
bezüglich der benötigten Bandbreite auch
wesentliche Verbesserungen hinsichtlich der
Usability von Webanwendungen. Zum einen
entfällt das Nachladen kompletter Webseiten
inklusive der beim Seitenaufbau auftretenden
Effekte wie Flackern und Layout-Artefakte
und zum anderen ist es möglich dynamisch
auf Benutzereingaben oder Teile davon zu
reagieren. Ein häufig erwähntes Beispiel
hierfür ist die Anzeige von Vorschlägen zur
automatischen Vervollständigung von StringEingaben.
Die typische Aufrufsyntax eines AJAX-Calls
(HTTP-get) sieht wie folgt aus:
var xmlHttp;
xmlHttp = new XMLHttpRequest();
if (!xmlHttp) {
// Internet Explorer 6 und aelter
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
Quellen und Tutorials
Für die in den vorangegangenen Abschnitten
vorgestellten Technologien gibt es nahezu
unzählige Quellen und Tutorials. Neben den
schon
erwähnten
Standards
bzw.
Herstellerspezifikationen sind sie eventuell
besser dazu geeignet, sich möglichst schnell
einen Überblick zu verschaffen sowie
Lösungen zu spezifischen Problemstellungen
zu
finden.
Anleitungen
und
Nachschlagewerke zu den Themen HTML,
CSS und JavaScript finden sich unter
http://de.selfhtml.org/
und
http://www.galileocomputing.de/openb
ook/javascript_ajax/
Erste Schritte
Laden Sie sich zunächst die gepackte
Binärversion des Apache Tomcat 6.x Server
herunter
(http://tomcat.apache.org/).
Entpacken Sie den Server in einem
Verzeichnis Ihrer Wahl und starten Sie ihn
mit dem Aufruf „startup“ im Verzeichnis
/bin. Überprüfen Sie anschließend ob der
Server läuft indem Sie im Browser Ihrer Wahl
die URL http://localhost:8080/ aufrufen.
Falls der Server korrekt gestartet werden
konnte sollten Sie folgendes Bild sehen:
xmlHttp = null;
}
}
}
if (xmlHttp) {
xmlHttp.open(requestMethod, url);
setCallback(xmlHttp, callbackFunction);
xmlHttp.send(null);
} else {
//Fehlerbehandlung
}
Hierbei
stellt
der
obere
Teil
die
Sonderbehandlung des Internetexplorers dar.
Innerhalb der im Beispiel nicht definierten
Funktion „callbackFunction“ muss die
eigentliche Verarbeitung der Antwort auf den
get-Request stattfinden. Alternativ könnte
man die Funktion auch direkt „inline“
definieren.
Anschließend sollten Sie die Aufgabe 5
auschecken. Sie können das entweder direkt
über Eclipse oder über Tortoise SVN
erledigen. Falls Sie sich für die 2. Möglichkeit
entscheiden, wird empfohlen, dass Sie die
Aufgabe danach in Eclipse weiterbearbeiten.
Im nächsten Schritt müssen Sie die Datei
/localconfig/build.properties so anpassen,
dass die enthaltenen Properties an den
Installationspfad des Webservers angepasst
werden. Ist dies geschehen, öffnen Sie als
4
nächstes das ant-file build.xml. In Eclipse
werden nun alle verfügbaren Ziele des Skripts
angezeigt. Wählen Sie das Ziel „deploy“ aus
und starten Sie das Deployment über das
Kontextmenü. Alternativ können Sie auch die
Binär-Version von Ant installieren, den Pfad
in der path-Variable angeben und über den
Kommandozeilenbefehl ant deploy im
Projektverzeichnis
den
Buildvorgang
anstoßen.
Ist
das
Build-Skript
ohne
Fehler
durchgelaufen können Sie jetzt den FeedProxy
über die folgenden Requests testen (selbiges
muss später mittels JavaScript erledigt
werden):
http://localhost:8080/FeedServer/
feed.server?action=subscribe_feeds&f
eedUrl=http://www.heise.de/english/n
ewsticker/news.rdf
http://localhost:8080/FeedServer/
feed.server?action=get_subscribed_fe
eds
über die schon genannten hinaus) sind so
zahlreich, dass sich die allermeisten
Fragestellungen schnell beantworten lassen
sollten.
Weiteres Vorgehen
Legen Sie die Dateien die Sie erstellen jeweils
in den entsprechend benannten Ordnern an.
HTML-Dateien in /web/html, JavaScriptDateien in /web/script und CSS-Dateien in
/web/css. Achten Sie bei der Referenzierung
der Dateien darauf, dass dies immer relativ
geschehen sollte. Spätestens wenn Sie einmal
eine Webanwendung auf einen anderen
Server stellen möchten, führen absolute Pfade
eventuell zu Schwierigkeiten. Zugriff auf das
von Ihnen zu erstellende HTML-Frontend
erhalten Sie demnach über:
http://localhost:8080/FeedProxy/html
/<name_der_datei>
Die URL:
http://localhost:8080/FeedProxy
wird übrigens automatisch auf die Datei
/html/index.html auf dem Server gemapt.
Sollten Sie diese Einstellungen ändern wollen,
dann
passen
Sie
bitte
die
Datei
/web/WEB_INF/web.xml entsprechend an.
Aufgabenstellung
http://localhost:8080/FeedServer/
feed.server?action=unsubscribe_feeds
&feedUrl=http://www.heise.de/english
/newsticker/news.rdf
Funktionieren
die
Aufrufe
wunschgemäß (die XML-Rückgabe der
Services wird angezeigt) so können
Sie nun mit der Entwicklung der
Weboberfläche loslegen.
Bearbeitung der Aufgabe
Für die Bearbeitung dieser Aufgabe wird kein
Skelett
ausgeliefert.
Lediglich
der
FeedProxyServer mit den im vorigen
Abschnitt genannten Requests steht zur
Verfügung.
Die
Entwicklung
der
Weboberfläche selbst bleibt vollkommen
Ihnen überlassen. Die Ressourcen, die im Web
zu diesem Thema zur Verfügung stehen (auch
Ziel dieser Aufgabe ist es eine Weboberfläche
zu erstellen, die es erlaubt News-Feeds an
einem gegebenen Feed-Proxy zu abonnieren,
anzuzeigen und wieder abzubestellen. Die
entsprechende Funktionalität stellt der Proxy
über die URL
http://localhost:8080/FeedServer/
feed.server
bereit. Über den Request-Parameter action
lässt sich die jeweilige Funktionalität abrufen.
Zur Verfügung stehen:
subscribe_feeds
unsubscribe_feeds
get_subscribed_feeds
Wobei die ersten beiden jeweils die Angabe
des weiteren Parameter feedUrl erfordern.
Sie können auch mehrere URLs gleichzeitig
übertragen. Ob die Parameterübergabe per
HTTP-Post oder HTTP-Get gelöst wird bleibt
Ihnen überlassen, der Server kann mit beiden
Übergabemethoden umgehen. Die Zugriffe
auf die entsprechenden Dienste sollen per
AJAX durchgeführt werden. Für die zu
5
erstellende Weboberfläche ist folgende
Funktionalität gefordert: Auf die Eingabe
einer gültigen Feed-URL (beispielsweise über
ein Textfeld) soll dieser abonniert werden
können (z.B. über das Drücken eines HTMLButtons, oder das auslösen eines Links).
Handelt es sich um keine gültige URL so soll
die Fehlermeldung des Servers an den
Benutzer propagiert werden. Ist die FeedAdresse gültig so soll sie zusammen mit den
anderen abonnierten Feeds in einer Liste auf
der Oberfläche angezeigt werden. Es bleibt
dabei ebenfalls Ihnen überlassen wie Sie die
Liste implementieren möchten. Sie können
z.B. das HTML-Element select verwenden
oder selbst eine Liste mit geeigneter
Funktionalität erstellen. Wird nun ein
abonnierter Feed vom Benutzer aus der Liste
ausgewählt,
sollen
die
Nachrichtenüberschriften in einem weiteren
Bereich auf der Seite aufgelistet werden (mit
Datum falls vorhanden). Bei Klick auf die
entsprechende Überschrift soll ein neues
Fenster
geöffnet
werden,
das
die
entsprechende Nachricht anzeigt. Das neue
Fenster soll dabei ohne Menü- und Toolbar
erzeugt werden. Zudem soll als Überschrift
über der Newsliste die Hauptseite des Feeds
verlinkt werden und ebenfalls in einem neuen
Fenster geöffnet werden können.
Aus der Liste der abonnierten Feeds sollen
Einträge vom Benutzer auch wieder gelöscht,
also abbestellt, werden können. Zudem sollen
alle abonnierten Feeds im Hintergrund ohne
Interaktion
des
Benutzers
periodisch
abgefragt werden und Änderungen (neue
Nachrichten) durch eine Hervorhebung des
Feeds signalisiert werden. Bei Klick auf den
Feed soll die Markierung aufgehoben werden.
Dasselbe soll in der Liste mit den News für
gelesene
und
ungelesene
Nachrichten
implementiert werden.
unter dem Ordner „docs“ im SVN ein.
Versuchen Sie Ihre Überlegungen in einer
einfachen Implementierung umzusetzen.
Fehler, die aufgrund von Benutzereingaben
auftreten, sollen in geeigneter Weise
angezeigt werden. Zudem soll während der
Kommunikation über AJAX ein animierter
Ladebalken eingeblendet werden. Das Layout
aller Strukturen und Widgets auf der
erstellten Webseite soll soweit wie möglich
über CSS definiert werden.
Überlegen Sie sich eine Möglichkeit wie man
die einzelnen Feeds (semi-) automatisch mit
geeigneten
Piktogrammen
oder
Icons
versehen könnte. Halten Sie dies schriftlich in
einer Textdatei fest und checken Sie diese
Der ersten Kommentar sollte beispielsweise
nicht lauten: /* if a=2 then return
true */.
Vor
jeder
CSS-Klasse
bitte
einen
beschreibenden
Kommentar
einfügen.
Wichtige Elemente innerhalb der HTMLDatei(en)
bitte
ebenfalls
ausreichend
kommentieren.
Programmierrichtlinien
Bitte halten Sie sich beim Programmieren an
die nachstehenden Richtlinien – die Richtlinienkonformität geht in die Bewertung Ihrer
Lösung mit ein! Bitte beachten Sie, dass sich
die Richtlinien je nach Programmiersprache
von Aufgabenblatt zu Aufgabenblatt leicht
unterscheiden können.
Bitte beachten Sie, dass diese Aufgabe so
gestellt ist, dass objektorientiertes Design
nicht zwingend erforderlich ist. Die
JavaScript-Funktionen
mit
der
Objektorientierung richtig in Einklang zu
bringen, erfordert einige Erfahrung und ist
nur bei umfangreicheren Projekten sinnvoll.
Sprache
Kommentare und sämtliche Bezeichnungen
sind in Englisch zu verfassen.
Zeilenlänge und Einrückung
Die Zeilenlänge darf 80 Zeichen nicht
überschreiten.
Die Einrückungstiefe beträgt vier Leerzeichen.
Kurze Kommentare
Kurze Kommentare dienen zur Verbesserung
der Lesbarkeit des Codes:
if (a == 2) {
return TRUE; /* special case */
} else {
return isPrime(a); /* works only for odd 'a' */
}
6
Klassen-, Methoden- und
Funktionskommentare für
JavaScript
Für Klassen- und Methodenkommentare
sollte JavaDoc/Doxygen verwendet werden.
Bei Klassen sollten die Autoren und Versionen
genannt werden. Bei Methoden und
Funktionen sind die Parameter zu erklären.

Variablen:
Möglichst
kurze
„sprechende“
Bezeichnungen
in
lowerCamelCase.

Temporäre Variablen dürfen auch ein
Zeichen wie „i“ als Namen haben.
/**
* Short class description
* (one sentence).
*
* Extended descriptions
*
* @author name_of_author
* @author name_of_author2
* @version date_of_last_change
*/
function Example {
[...]
}
/**
* Short method description
* (one sentence).
*
* Extended descriptions
*
* @param accuracy Defines the type
*
of the shape:
*
0=precise, 1=fast
*
approximation
* @return Number of matching
*
datasets.
*/
function GetNumberOfExamples(
accuracy) {
[...]
}
Namenskonventionen

Generell: Bitte „CamelCase“ verwenden,
zum
Beispiel
CamelCaseLooksLikeThis.

Klassen und Interfaces: Einfache
Substantive in UpperCamelCase.

Öffentliche Methoden und Funktionen:
Einfache Verben oder sprechende
Bezeichnungen, in UpperCamelCase.

Sonstige Methoden: Einfache Verben
oder
sprechende
Bezeichnungen
lowerCamelCase.
7
Bewertungskriterien
Punkte
Der Web-Applikations-Server Tomcat wurde korrekt installiert und das Ant-Skript
lässt sich ausführen und aktualisiert sowohl den Feed-Server als auch die
Weboberfläche.
2
Der komplette Quellcode ist standardkonform. Er enthält keine offensichtlichen
Speicher- und Ressourcenlecks oder offensichtlich semantisch falsch verwendete
Sprachkonstrukte.
Die JavaScript-Teile der Aufgabe sind sinnvoll dokumentiert und befolgen die
Programmierrichtlinien (Dokumentation analog zu Java). Zudem ist der HTML-Code
dokumentiert, CSS-Klassen sind sinnvoll benannt. Die Oberfläche lässt sich im VISGSPool in einem Browser Ihrer Wahl anzeigen, nachdem der Anwendungs-Code auf dem
Webserver deployed wurde.
3
Die Weboberfläche lässt sich ohne Fehler aufrufen und ist robust im Hinblick auf
sämtliche möglichen Benutzerinteraktionen.
2
Es gibt innerhalb der Weboberfläche eine Möglichkeit neue News-Feeds zu
abonnieren. Zum Beispiel in Form eines Texteingabefeldes und eines Buttons für das
Abonnement.
3
Es wird auf der Oberfläche eine Liste der abonnierten News-Feeds angezeigt, aus der
ein bestimmter Feed selektierbar ist und die sich bei Abonnement neuer sowie dem
Abbestellen vorhandener Feeds automatisch aktualisiert. Das Abbestellen soll ebenfalls
über die Liste möglich sein.
3
Wird ein abonnierter Feed ausgewählt so erscheinen der Titel und das Datum (sofern
vorhanden) der aktuellen Nachrichten in einer weiteren Liste oder Tabelle. Dabei
sollen sowohl die Nachrichten-Seite selbst als auch die einzelnen Nachrichten auf
einen Mausklick hin in einem neuen Fenster (ohne Menü und Toolbar) geöffnet
werden. Gelesene Nachrichten sollen als bereits gelesen markiert werden.
4
Für alle abonnierten Feeds soll regelmäßig auf dem Server nachgefragt werden, ob
neue Nachrichten eingetroffen sind ist dies der Fall so soll dies dem Benutzer
signalisiert werden und neue Nachrichten als noch nicht gelesen markiert werden (z.B.
durch farbliche Kennzeichnung).
3
Jegliche Kommunikation mit dem Server soll über AJAX erfolgen. Fehler, die aufgrund
von ungültigen Benutzereingaben oder Serverfehlern auftreten, müssen geeignet
abgefangen und an den Benutzer weitergeleitet werden.
2
Während eines AJAX-Requests soll ein animierter „Ladebalken“ eingeblendet werden,
der nach Ende der Kommunikation wieder abgeschaltet wird.
2
Innerhalb der HTML-Seite werden Elemente ausschließlich zur Strukturierung der
Inhalte eingesetzt. Die Layoutinformation ist in CSS ausgelagert.
2
Im SVN befindet sich eine Textdatei mit einer kurzen Erläuterung dazu, wie man
zusätzlich zum Namen einer Newsseite bzw. deren Link auch noch ein Icon für die
Seite zuordnen und anzeigen könnte.
2
Die Überlegungen aus dem vorigen Punkt wurden implementiert.
2
Gesamtpunktzahl
30
8
Herunterladen