Aufgabenblatt 0 Vorbereitung I Loggen Sie sich unter "gastxx" im Labor C 209L ein Es wird kein File- benutzt, d.h. bitte keine Dateien und vor allem kei ne VMs unter "Eigene Dateien" ablegen. Der Ordner mit einer Readonly-Version der VM heißt in diesem Seme ster: "D:\VM Read Only\Web-dev-01". [Falls dies nicht schon geschehen ist] Nun starten Sie VirtualBox und importieren die Readonly-Version aus dem Ordner über Maschi ne>hinzufügen und Auswahl der *.vbox-datei innerhalb des Ordners der VM. Jetzt klonen Sie die Readonly-Version in einem sinnvoll benannten Ordner auf der Platte D, aber mit neuer MAC-Adresse. 2
Aufgabenblatt 0 Vorbereitung II (Alternative) Alternativ können Sie sich die Maschine in der fri schesten Form von der Website des Dozenten herunter laden: http://wi.f4.htwberlin.de/users/messer/downloads/index.html Die herunter geladene Kopie von Web-dev-01 wird in einem sinnvoll benannten Ordner auf der Platte D abgelegt. Nun starten Sie VirtualBox und importieren die Maschine aus dem Ordner über Maschi ne>hinzufügen und Auswahl der *.vbox-datei innerhalb des Ordners der VM. 3 Aufgabenblatt 0 Vorbereitung III Achten Sie darauf, dass alle Ethernet-Karten neue MAC-Adressen be kommen. Die Maschine muss im Bridge-Modus (Netzwerkbrücke) laufen. Sie kön nen dies vor dem Start mit "Auswahl der Maschine" -> Ändern -> Netz werk -> "angeschlossen an" prüfen. Nun starten Sie die VM. Loggen sich unter student ein (PW=student). Dort starten Sie den : Sie müssen surfen können. 4
Aufgabenblatt 1 Konzept für Chat- Auf dem Papier wird die API/Funktion eines Chat-s entworfen. Dazu wird das Verfahren der Schrittweisen Verfeinerung angewendet, siehe http://www.inf.fu-berlin.de/lehre/ss04/alp2/vorlesung/2.1.pdf http://ssw.jku.at/javabuch/folien/14.schrittweiseverfeinerung.pdf Globales Verfahren 1) Identifikation von Features 2) Zerlegen der Features in Funktionen 3) Identifizieren von Klassen/Datentypen 4) Konstruktion der Vererbung 5) (Konstruktion des Hauptprogramms) Schauen Sie sich die Aufgabenblätter 3 und 4 an; Sie sollen hier den Entwurf für einen Chat- erstellen. 5 Aufgabenblatt 2 Directory- I Die API des Directory-s besteht aus folgenden Operationen: register(name, Value, sid) unregister(name,sid) unregisterall(sid) query(sid) Aufruf von register(): http:// /directory/register?name=peter& value=141.45.10.15&sid=a7485276 wobei name, value und sid die Namen der Parameter sind. sid ist der Session-Identifier/Name Der kann beliebig viele Gruppen mit unterschiedlichen sid behandeln. 6
Aufgabenblatt 2 Directory- II Intern wird ein Hash angelegt, dessen Index der String des 1. Parameters von register() ist, wie z.b. $database["peter"]= "141.45.10.15" und $database ["Mary"]= "141.45.10.17". Damit diese Liste nicht beim Absturz verloren geht, wird sie nach jeder Ände rung in einer Datei unter einem geheimen Namen = sid gespeichert. 7 Entwicklung nach TDD I Entwickelt wird nach dem Test Driven Development (TDD) Vorgehen. Siehe https://de.wikipedia.org/wiki/testgetriebene_entwicklung Verfahren Entwicklung von Unit-Tests Erstellung eines Rahmens der Realisierung mit definitiv unsinnigen/falschen Output-Werten Ablaufen der Tests: Roter Balken, alles falsch do Realisierung einer Funktion Ablaufen der Tests while Roter Balken 8
Entwicklung nach TDD II Wird später ein Fehler in den Testfällen entdeckt oder wird später ein Fehler in der Software entdeckt oder wird später irgendetwas geändert, dann wird der Zyklus mit geänderten oder ergänzten Testfällen wieder durchlaufen. 9 Aufgabenblatt 2 Directory- III Es gibt es netbeans-projekt mit den Testfällen basierend auf PHPUnit. Studieren Sie dieses Projekt; Sie können diese Software später als Vorlage für die Lösung anderer Aufgaben nehmen. Die Tests sind Skripte, die ohne einen Web- laufen. Sie können auf 1 Maschine realisieren, wobei der Directory- durch den lokalen Apache- realisiert wird, also alles ohne VM. Sie können es auch mit einer lokalen oder entfernten VM tun, wobei die IP-Adresse der VM in das Testskript editiert werden muss. Die PHPUnit-Tests laufen nur in einer Entwicklungsversion von Netbeans. 10
Echte Tipps Als erstes: Aufgabenblatt+Website lesen, Recherchieren Erst den Entwurf machen, dann implementieren. Gehen Sie bei der Implementierung immer in kleinen Schritten vor. Ein Schritt dann Testen. Ein Schritt dann Testen. 11 Aufgabenblatt 3 Chat- Teil 1 Basierend auf der Spezifikation vom Aufgabenblatt 1 wird die API eines Chat-s definiert. Dann werden die Testfälle definiert und implementiert. Dann der Rahmen der Implementierung. Es wird also nach der TDD-Methode vorgegangen.. Die Entwicklung kann ohne VMs ablaufen. 1 API HCI 1- n API m HCI n- Chat- PHPUnit- Skript 1 12
Aufgabenblatt 4 Chat- Teil 2 I Jetzt wird die Oberfläche in Form eines weiteren s: Human Computer Interface (HCI) realisiert. Dazu kommt die Implementierung in JavaScript innerhalb des s. 1 API HCI 1- n API m HCI n- Chat- PHPUnit- Skript 1 13 Aufgabenblatt 4 Chat- Teil 2 II Am besten Sie beginnen mit dem Design der Oberfläche; es muss möglich sein: Initial durch Starten der Seite wird der angemeldet. Anzeige aller Nachrichten live Eingabe einer eigenen Nachricht in einem von der Anzeige getrennten For mular Nach Erstellung der Nachricht, wird diese per Klick ge sendet und allen anderen unmittelbar angezeigt. Knopf zur Beendigung der Teilnahme: durch diesen wird die /IP- Adresse gelöscht und erhält keine neuen Nachrichten mehr. Es handelt sich um eine 1-Page-Applikation. Machen Sie dazu einen Entwurf der Kommunikation: welche Nachricht mit wel chem Aufbau wird wann bzw. in welcher Reihenfolge zwischen welchen Kompo nen ten ausgetauscht. Es kann sein, dass Sie die API des Chat-s überarbeiten müssen. 14
Aufgabenblatt 4 Chat- Teil 2 III Wir haben also drei (VMs) zu Laufen: der Namensdienst mit einer vor gege benen IP-Adresse, der Chat- mit einer registrierten IP-Adresse und der HCI-. Alle diese Komponenten benut zen den internen geheimen String des Namensdienstes. Die Anzeige des Chat-Inhalts erfolgt durch den per Ajax. Daher wird über einen Timer alle 1s (oder kürzer) beim angefragt, welche Informa tionen noch nicht abgeholt und angezeigt wurden. Damit die Abfrage etwas schneller geht, wird in den JSON-Teil der Antwort ein boole sches Flag eingeführt, das anzeigt, ob noch weitere Nachrichten verfüg bar sind. 15 Aufgabenblatt 5 Verteilen der CPU-Last I Es wird eine sehr CPU-intensive Aufgabe gelöst. Dazu wird ein Primzahlentest verteilt realisiert, der auf folgender Formel beruht (Satz von Wilson): (n-1)! mod n = n-1 Wenn also die Fakultät n-1 einer Zahl n modulo n genau n-1 ergibt, dann ist n eine Primzahl. Beispiel 7: 6! mod 7 = 2*3*4*5*6 mod 7 = 720 mod 7 = 6, denn 102*7= 714 (Differenz zu 720 ist ja 6). Dass Fakultät zu sehr großen Zahlen führt, ist wohl klar. Daher lassen sich diese großen Zahlen nach jeder Multiplikation durch mod n immer wieder kleiner machen: (a*b) mod n = ((a mod n)*(b mod n))mod n Wenn also ein Produkt mod n berechnet werden soll, können vorher die Faktoren per mod n kleiner gemacht werden. Gleichzeitig erlaubt die zweite For mel das Verteilen des Multiplizierens auf mehrere Knoten. Diese Knoten wer den hier Worker genannt. 16
Aufgabenblatt 5 Verteilen der CPU-Last II PHPUnit- Skript 1 Worker 1 PHPUnit- Skript 2 Master API Worker 2 Worker n Directory 17 Aufgabenblatt 5 Verteilen der CPU-Last III Auf dem Hinweg wird ein JSON-Objekt mit den Daten geschickt. Dabei wird nicht auf das Ende der Berechnung gewartet. Später werden die Zwischenergebnisse eingesammelt, multipliziert und an den geschickt. Auch hier machen Sie einen Entwurf der Kommunikation, mit allen Formaten und dem Ablauf. Es gibt also pro Worker zwei URLs: eine zum Berechnen und eine zum Abholen des Ergebnisses. Die erste muss vorzeitig den Response liefern, bei der zweiten kann entweder abgefragt werden, ob das Ergebnis da ist oder auf das Ergebnis gewartet werden. gmp-paket: http://php.net/manual/en/ book.gmp.php 18
Aufgabenblatt 6 Private WebDAV-Cloud Sie bauen Sie eine primitive private Speicher-Cloud. Das (alte) XAMPP-System beinhaltet schon das Apache-webdav- Modul, auch sind die Konfigurationsdateien schon vorbereitet. Ihre Aufgabe besteht nun darin, WebDAV in den virtuellen Maschinen zu realisieren. Dazu ist eine Ein ar beitung in das XAMPP-Implement unter /opt/lampp/.. erforderlich. Dann gehört eine Recherche dazu, wie Apache zum WebDAV- konfiguriert werden muss. Auch sollte die Datei php.ini untersucht und gegebenenfalls ge än dert werden. Wenn das WebDAV-Modul nicht vorhanden ist, muss der Apache zusammen mit dem Modul übersetzt werden, oder Sie verlassen XAMPP und nehmen die Versionen aus den Repositorys der Distribution. Nun geht es um den Client. Unter Windows ist der WebDAV-Client im Explorer schon integriert. 19 Aufgabenblatt 7 II Dann besorgen Sie sich einen WebDAV-Client für Linux und wiederholen den Test. Ein schöner Client ist z.b. cadaver: http://www.webdav.org/cadaver allerdings ohne GUI. Oder davfs2 oder Als letztes bauen Sie die virtuelle Maschine so um, dass Sie den Ordner htdocs über WebDAV von Außen bespielen können. 20
Nach dieser Anstrengung etwas Entspannung. 21