\documentclass[article, colorback,accentcolor=tud1d]{tudreport}
\usepackage[latin9]{inputenc} %unter Linux muss latin9 durch utf8 ersetzt werden!!
\usepackage[ngerman]{babel}
\usepackage{enumitem}
\usepackage{lineno}
\usepackage{wasysym}
\usepackage{latexsym}
%reihenfolge von "hyperref" und "glossaries" ist wichtig!!!! nicht Ã€ndern!
\usepackage[pdftitle={Abschlussbericht}]{hyperref}

\begin{document}

\title{Praktikum AlgoAnim}
\subtitle{Abschlussbericht Sommersemester 2012\\
Gruppe: Ulf Gebhardt, Michael Scholz}
\author{Ulf Gebhardt, Michael Scholz}
\maketitle


\newpage
\section{Animal}
Die Benutzeroberfläche von Animal ist intuitiv gestaltet. Somit hat jeder Benutzer die Möglichkeit sich einen Algorithmus schnell und einfach generieren zu lassen. In der Animation selbst sind sämtliche Steuerungsfunktionen vorhanden. Besonders gut hat uns hierbei die variabel einstellbare Abspielzeit gefallen. Wünschenswert wäre jedoch eine Suchfunktion, mit der alle vorhandenen Generatoren durchsucht werden können. Somit würde das manuelle Durchsuchen der Baumstruktur entfallen.\\ \\
Leider haben wir bisher in keiner Lehrverantstaltung einen Hinweis auf die Existenz von Animal erhalten. In \glqq Grundlagen der Informatik II\grqq\ würde sich Animal sicherlich anbieten. Es wäre auf alle Fälle eine gute Unterstützung beim Lernen der verschiedenen Algorithmen und Datenstrukturen gewesen.


\section{AnimalScript}
Die Einarbeitung in AnimalScript ist uns sehr leicht gefallen. Die Sprache ist verständlich aufgebaut, so dass auch Personen ohne Programmiererfahrung ihre eigenen Animationen in der gegebenen Skriptsprache verfassen können. Hierfür ist eine kurze Einarbeitung in die Syntax und Semantik nötig. Dies ist uns mit dem gegebenen englischsprachigen Tutorial schnell gelungen. Es leitet den Entwickler Schritt für Schritt durch die einzelnen Abschnitte. Nach dem Tutorial waren wir bereit mit unserer ersten eigenen Animation in AnimalScript zu beginnen. Bei kleineren Problemen half fast immer ein Blick in die AnimalScript-Spezifikationen. Ein wenig Verwirrung kam bei der Erstellung der Tabelle auf. In der aktuellen Version (2.3.29) von Animal führt ein \glqq refresh\grqq\ einer Tabelle zu einer falschen Formatierung derselbigen. Das Problem haben wir gelöst, indem wir die Tabelle in zwei kleinere Tabellen aufgeteilt und diese mit einer festen Breite initialisiert haben. Durch das Shortcut \glqq reload current animation\grqq\ konnten wir Änderungen an der erstellten Animation schnell testen. Durch die aufgeführten Faktoren haben wir Übung 2 zügig absolvieren können. Wir haben während dem gesamten Praktikum Pair-Programming betrieben. Hierbei schreibt eine Person den Quelltext. Die Übrige beobachtet, gibt Tipps und schlägt in unserem Fall bei auftauchenden Problemen in der Spezifikation nach. Nach einem, bei uns nicht festgelegten, Zeitintervall werden die eingenommenen Positionen gewechselt. Diese Methode hat sich vor allem in der Einarbeitungsphase bewährt.


\section{AlgoAnim API}
In Übung 3 sollten wir eine Animation mittels der gegebenen AlgoAnim API erstellen. Im Hinblick auf die darauffolgende Übung haben wir unseren Quellcode sehr dynamisch gehalten. Statische Elemente galt es zu verhindern, so dass Animationen zu verschiedenen Variablenbelegungen erstellt werden konnten. Durch die gegebenen Folien zur API und dem Quicksort Beispielcode erhielten wir eine kurze Einführung in die vorliegende API. Es wurden hier jedoch nicht alle Funktionen der API aufgezeigt, weshalb eine Dokumentation derselbigen für den Entwickler von Vorteil wäre. 


\section{Generator (im Moment nur stickpunktartig. Bitte ausformulieren!)}



-> wir haben schon den Quellcode aus Übung 3 (Erstellen einer Animal-Animation mittels API) sehr dynamisch gehalten, so dass wir mit Blick auf Übung 4 (den eigentlichen Generator) nicht mehr viel ändern mussten. Es mussten nur noch kleine Anpassungen, wie z.B. das Einladen der verschiedenen Nutzereingaben implementiert werden, wobei dies meist schon durch das gegebene Wizard geschehen ist. Schön war hier dabei die automatische Erstellung der XML-Datei, da diese bei mehrere Primitiven und Properties sehr leicht unübersichtlich wird. Durch den automatisierten Vorgang muss der Entwickler sich damit nicht rumschlagen. Aber auch der Wizard hat einen Bug enthalten: Ist man so wie auf Übungsblatt 4 beschrieben vorgegangen, so wurde keine .java  und .xml datei erstellt. Man musste den Wizard "beenden". Daraufhin hat er sich nicht wirklich beendet. Erst nach diesem Schritt konnte man die beiden benötigten Dateien speichern. Der gesamte Bug mit Workaround ist im Forum beschrieben. Die erstellen beiden Dateien waren in unserem Fall komplett fehlerfrei, so dass wir eigentlich nur noch unseren Quellcode aus Übung 3 reinkopieren mussten. Nach dem Kopieren wurden nur noch die "Nutzereingaben" in den Algorithmus geworfen. Die Integration in das Generator-Framework war auch problemlos, da sie auf dem Übungblatt sehr gut beschrieben war. Einzig problematisch war beim Generator die Implementierung der Funktion "void init()", welche den Generator so initialisieren sollte, dass er auch bei mehrfachem Aufrufen von generate(...) auf dem gleichen Objekt immer mit dem richtigen "Zustand" startet. Hierbei hatten wir am Anfang keine Ahnung, was dieser Satz heissen soll. Das weiss ich im Moment auch noch nicht :) ............... \\
-> Die Methoden zur User-Interaction waren auf den zwei gegebenen DIN-A4-Seiten zu kurz beschrieben.  Hier sind eventuell auch noch einige Bugs vorhanden. Beispielsweise konnte man sich nicht die vom Nutzer gesammelten Punkte ausgeben lassen. Die Methode .getPointsAchieved() lieferte hier immer 0 zurück. Das ist sehr schade, da man mit den erreichten Punkten dem Nutzer eine Art Statistik hätte ausgeben können. Wir hatten geplant den Nutzer anhand seiner Punkte in eine Leistungsgruppe einzuteilen. So hätten wir ihm auf der letzten \glqq Folie\grqq ein Feedback zu seiner Leistung geben können.



\section{Verbesserungsvorschläge}
Nachfolgend haben wir einige wenige Verbesserungsvorschläge stichpunktartig aufgelistet. Diese sollen als konstruktive Kritik dienen und wurden meist ausführlicher in den vorherigen Sektionen beschrieben.
\begin{itemize}
\item Suchfunktion in Animal zum schnellen Durchsuchen der einzelnen Generatoren.
\item Bekannte Bugs in Animal entfernen. Uns hat vor allem der \glqq refresh\grqq\ -Bug während des Praktikums gestört.
\item Eine Dokumentation für die AlgoAnim API wäre sinnvoll. Durch die gegebenen Folien werden nur wenige Funktionen der API aufgezeigt.
\item Eine Liste der bestehenden Generatoren, für die eine Neuimplementierung angebracht wäre.
\end{itemize}



\section{Fazit}
Das Praktikum hat uns sehr gut gefallen. Positiv hervorzuheben ist die freie Einteilung der Arbeitszeit. Hierdurch konnten wir je nach persönlicher Auslastung während des Semesters an dem Praktikum arbeiten. Trotzdem waren die vorgeschlagenen Zeiträume auf den einzelnen Übungsblättern als Anhaltspunkte hilfreich und sinnvoll. Auch das zeitnahe Feedback auf die einzelnen Abgaben und die Möglichkeit der Verbesserung nach der erhaltenen Rückmeldung haben uns positiv überrascht. Hierdurch war es möglich Ihre Anforderungen an die einzelnen Aufgaben bestmöglich zu erfüllen. Da die Rückmeldung bzw. Verbesserungsvorschläge der einzelnen Abgaben immer in die nächste Abgabe mit einflossen, erzielten wir eine stetige Qualitätssteigerung. Somit lagen am Ende des Praktikums zwei anschauliche Animationen vor. Die wöchentlich angebotene Sprechstunde von Herrn Fischer haben wir einmal besucht. In dieser wurde uns schnell geholfen, so dass unser Arbeitsfluss nicht beeinflusst wurde. Das eingesetzte Lernportal Moodle hat sich hervorragend für die Organisation des Praktikums geeignet. Problemslos konnten wir hier unsere Abgaben einreichen. Zudem war das betreute Forum hilfreich um auftauchende Probleme schnell zu lösen. Durch mitlesen der Threads bekamen wir einen Einblick in die Probleme der übrigen Gruppen, welche sich durch die Wahl eines anderen Algorithmus bzw. einer anderen Datenstruktur auch mit anderen Teilen der gegebenen API beschäftigt haben.\\ \\
Schlussendlich noch einmal ein Dankeschön unsererseits für die gute Betreuung und Organisation des Praktikums!



\end{document}