Small logo of ETH main building ETH Zurich : Computer Science : Pervasive Computing : Distributed Systems : Education : DS HS2010 : Android

Android

Hier werden im Laufe der Vorlesung die Folien zur praktischen Übung sowie Links und ein F.A.Q. bereitgestellt.

Unterlagen:

Vorlesung Termin PDF Dozent
1 24.09.2010 Android.Introduction-v2.pdf (Stand 28.09.2010) M. Kovatsch
Android.PasswordProject.pdf I. Ion
2 04.10.2010 Android.LiveHacking.pdf M. Kovatsch
Android.Assignment1.Intro.pdf W. Kleiminger
3 15.10.2010 Android.Assignment1.Debrief.pdf W. Kleiminger
Android.Assignment2.Intro.pdf I. Ion
Android.Assignment2.Hints.pdf D. Guinard
- 22.10.2010 Android.ReportComments.pdf W. Kleiminger
4 29.10.2010 Android.Assignment1.Aftermath.pdf M. Kovatsch
29.10.2010 Android.Assignment3.Intro.pdf S. Mayer
29.10.2010 Android.Assignment3.Task3_2.Paper S. Mayer
5 19.11.2010 Android.Assignment2.Aftermath.pdf S. Mayer
19.11.2010 Android.Project.Intro.pdf M. Kovatsch

Links:

Fragen und Antworten:

Technisch

  • Assignment 3: Was passiert, wenn der Zeitstempel, den man bei der Registrierung bekommt, "veraltet" ist?
    Um dieses Problem abzufedern, hat die reg_ok Nachricht kein Zusatz-delay, wird also vom Server sofort an den Client zurückgeliefert. Generell solltet ihr zusätzliche Massnahmen (z.B. Timer) einbauen, um solcherlei Probleme zu vermeiden. Im GUI könnte dann zum Beispiel die Nachricht "Delayed..." angezeigt werden oder, nach Ablauf des Timers, "Missing..." oder Ähnliches.
  • Assignment 3: Warum bekomme ich meine eigenen Chat-Nachrichten vom Server nicht übermittelt, sondern nur die der Bots?
    Der Server ist so eingestellt, dass er empfangene Nachrichten an alle Clients ausser dem Absender zurückschickt. Es ist also vollkommen normal, dass ihr eure eigenen Nachrichten nicht seht. Beachtet, dass kein spezielles Format für gesendete Nachrichten beachtet werden muss (anders als z.B. für .reg.) - um ein "Hallo" zu schicken, sendet ihr einfach den String "Hallo\ntimestamp".
  • Assignment 3: Warum werde ich automatisch deregistriert?
    Nach einem gewissen Timeout (aktuell 2min) meldet der Server "stille" Clients automatisch ab. Um angemeldet zu bleiben, schickt einfach regelmässig irgendeine Nachricht (kein Server command).
  • Assignment 3: Was tun, wenn join/leave Benachrichtigungen verloren gehen?
    Der Server broadcastet join/leave Benachrichtigungen (z.B. "AnswerBot (index i) has joined") ohne Verzögerung nach der Deregistrierung oder dem Rauswurf (wegen Timeout) eines clients. Ihr könnt annehmen, dass diese Nachrichten immer ankommen, also nicht der fehlerbehafteten UDP-Übertragung zum Opfer fallen.
  • Assignment 3: Notfallcode.
    Falls ihr mit dem Einstieg in Assignment 3 überhaupt nicht zurechtkommt, ist hier Code, der hilft...
  • Wieso beantwortet der Server meine selbstgeschriebenen HTTP Requests nicht bzw. warum bleiben sie "stecken"?
    Dies kann mehrere Gründe haben:
    1. Am Ende des HTTP headers wird zwingend ein carriage return und newline (\r\n) benötigt.
    2. Verwendet die print- statt der println-Funktion. println verwendet die durch das System vorgegebene line.separator property, welche bei Android lediglich auf \n lautet.
    3. Vergesst bei der Verwendung von java.io.PrintWriter nicht das flushen.
  • Wieso kann der Emulator keine Verbindung zum Server aufbauen?
    Der Emulator hat gewisse Probleme bei der DNS-Auflösung (vgl. z.B. markmail.org/). Verwendet statt dem hostname die IP des Servers.
  • Warum meldet Eclipse 'Must Override a Superclass Method', obwohl genau dies samt @Override-Annotation getan wird?
    Siehe dazu stackoverflow.com.
  • Warum funktioniert die Namespace-URL der Web-Services-Aufgabe nicht?
    Die angegebene URL (allgemeiner: URI) definiert nur den Namensraum und ist nicht als Webressource zu verstehen. Es muss lediglich ein eindeutiger Bezeichner sein, genau wie bei den XML-Namensräumen, z.B. bei den Android Layouts:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...
    Hinter diesem URI steckt auch keine Webressource, was aber nicht unbedingt so sein muss. Unter dem XHML-Namespace-URI findet man z.B. Informationen über selbigen:
    <html xmlns="http://www.w3.org/1999/xhtml"> ...
  • Die Google Visualization API bietet viel, was genau sollen wir verwenden?
    Für die Visualisierungen werden verschiedene APIs sowie Formate angeboten, jedoch sind nicht alle für Android geeignet bzw. davon unterstützt. Eine gute Lösung geht beispielsweise auf die Chart API zurück, welche PNG-Bitmaps ausliefert. Wenn man sich ein Beispielbild im Browser anzeigen lässt, bekommt man die "API" zu sehen (GET-Parameter), z.B. http://chart.apis.google.com/chart?cht=lc&chco=FF0000,00FF00,0000FF&chs=200x125&chd=s:FOETHECat,lkjtf3asv,KATYPSNXJ&chxt=x,y&chxl=0:|Oct|Nov|Dec|1:||20K||60K||100K.

Organisatorisch

  • Dürfen wir zusammen programmieren?
    Ja, ihr sollt zusammen in der Gruppe lernen. Im Idealfall macht ihr "Extreme Programming", d.h. einer ist der "Driver" und tippt, die anderen kontrollieren und überdenken die Eingaben. Designentscheidungen und zu implementierende Logikblöcke sollten vorab gemeinsam besprochen werden.
    Ihr könnt die Aufgaben auch aufteilen und parallel arbeiten. Stellt dann aber sicher, dass jeder das Gelernte an die Gruppenmitglieder weitergibt.
  • Was hat es mit dem Report auf sich?
    Der Report ist individuell zu erstellen und einzureichen. Er soll in Form eines technischen Dokuments verfasst werden und eure Architektur und den in der Gruppe produzierten Code beschreiben. So kontrollieren wir, ob die Programmieraufgaben von allen verstanden wurden. Der geschriebene Text sollte eine Seite nicht überschreiten, allerdings können mehrere Grafiken eingebunden werden. Dies ist besonders zu empfehlen, z.B. um den Kontrollfluss des Programms zu erläutern.
  • Warum individuelle Package-Names?
    Jeder muss über eine laufende Toolchain verfügen. Durch die Anpassung der Package-Names möchten wir jeden dazu bringen, den Code wenigstens einmal "angefasst" und bei sich kompiliert zu haben. Verwendet die projektweite "search&replace"-Funktion (Datei-Suche/File Search) und stellt sicher, dass ihr die Klassen in den richtigen virtuellen Ordner im Eclipse Package-Explorer verschiebt.
  • Wirken sich Bugs im Programm negativ auf die Note aus?
    Nein, es sollen "proof of concept"-Implementierungen erstellt werden und kein "production quality"-Code. Sofern es sich nicht um grobe Designschwachstellen handelt, ist es z.B. nicht weiter schlimm, wenn eure Applikation unter bestimmten Umständen abstürzt. Weisst am besten im Report darauf hin. Bugfixes sind oft nicht-trivial, denkt nur an die zahlreichen Absturzberichte im Android Market.
  • Wie genau sind die genannten Notenschwellen zu sehen?
    Die genannten Schwellen geben nur das von uns erwartete Ziel vor. Wie bei Klausuren kann es sein, dass der entgültige Notenschlüssel korrigiert werden muss. Die Abgaben werden wie Studentenprojekte bewertet, d.h. der Gesamteindruck ergibt die genaue Note in den üblichen 0.25er-Schritten.
  • Die "Enhancements"-Aufgabe ist recht knapp beschreiben, wieviel müssen implementieren?
    Die "Enhancements" sind für den Notenbereich 5.0-6.0 gedacht, was an der ETH "quality significantly exceeds expectations" (ca. 5.5) bedeutet. Daher sind wir hier auf eure Kreativität gespannt und geben lediglich Vorschläge, wo es hingehen könnte.
ETH ZurichDistributed Systems Group
Last updated November 19 2010 10:45:55 AM MET ko