Masterarbeit

Im Fachbereich Software Engineering bei Professor Zündorf habe ich meine Masterarbeit mit dem Thema „Entwicklung eine graphischen Javascript-Debuggers“ fertig gestellt. In der Arbeit ging es um die Entwicklung und Analyse eines Tools zur graphischen Visualisierung von Javascript-Objekten und deren Abhängigkeiten. Das entwickelte Tool kann per Script in jede Website eingebunden werden und extrahiert dort die entsprechenden Daten. Per WebSockets kann über ein zweites Tool am Datenmodell der Seite rumgespielt werden. Die Untersuchung sowie Erweiterung von Objektstrukturen ist ebenfalls möglich.

Darüber hinaus bietet das entwickelte Tool einen parser, der Javascript Code in einer beliebigen Umgebung debuggen lässt. Die Debug-Operationen (zum Beispiel: Step forward, Step inside usw.), die aus gängigen Debuggern bekannt sind, werden dann im Visualisierungstool ausgeführt. Von dort können auch die Veränderungen der Objektstrukuren beobachtet werden.

Projektarbeit: Temple of Holyshit

In kooperation mit der Kunststudentin Anja Roth und dem Musikproduzent Amaury Bodet haben wir gemeinsam ein „endless running“ Videospiel entwickelt. Das Spiel wurde mit Javascript und WebGL ohne Game-Engine entwickelt und ist in jedem aktuellen Browser hier spielbar.

Die Story des spiels ist eine Homage an unser hässliches Stadtviertel, in dem wir in Kassel während der Studienzeit gewohnt haben. Die Hauptfigur ist ein Obdachloser, der sich mit Pfandflaschen ein paar Groschen dazu verdienen möchte. Dabei muss er den ganzen Scheißhaufen, tückischen Laternen und dem wohlriechenden Duft von Prostituiertenparfüm ausweichen.

Simulated Annealing

 

In der Veranstaltung „Computer Aided Design for Integrated Circuits“ im Sommersemester 2014 konnte als freiwillige Zusatzabgabe ein Algorithmus der Vorlesung implementiert werden. Ich habe mich für den Algorithmus „Simulated Annealing“ als Lösung des Module-Placement Problems entschieden. Dabei wurde der Algorithmus erstmal allgemein implementiert und er kann jetzt verwendet werden, um für schwere Probleme (in der Regel NP-schwere Probleme) eine Lösung zu finden. Die in dem Programm implementierten Versionen befassen sich alle mit Module Placement. Die erste Lösung platziert indirekt unter der Verwendung eines Slicing Trees. Die zweite Lösung ist eine direkte Lösung. Hierbei können Module auch überlappen.  In der dritten Lösung wird ein Gitter vorgegeben. Hierbei wird sowohl die Größe des Gitters als auch die Positionierung der Elemente im Gitter optimiert.

Seeheimer Märchenbühne

Screenshot der neuen Internetseite

Screenshot der neuen Internetseite

Nachdem ich schon die erste Version der Internetseite der Seeheimer Märchenbühne erstellt hatte, habe ich diese Webseite überarbeitet und nun fertig gestellt. Neben dem Design und der Strukturierung war es vor allem wichtig, auch eine internen Bereich zu erstellen, sodass z.B. Termine von den Seitenbetreibern selbstständig verwaltet werden können.

Bachelorarbeit

Ich habe meine Bachelorarbeit mit dem Thema „Growing Context-Sensitive Matrix Grammars“ fertig gestellt. In der Arbeit geht es um die Verbindung von wachsend kontext-sensitiven Sprachen mit den 2-dimensionalen Grammatiken von den Sironmoneys.

Wachsend kontext-sensitive Sprachen können durch Grammatiken beschrieben werden, die nur Regeln enthalten, die echt wachsen. Dass heißt, die Länge der linken Seite einer Regel ist echt kürzer als die Länge der rechten Seite. Die davon erzeugte Sprachklasse ist insofern interessant, als dass das Wortproblem effizient gelöst werden kann.

Die Grammatiken der Sironmoney’s verwenden zuerst eine horizontale Grammatik um einen String zu erzeugen. In dem Fall meiner Arbeit war diese Grammatik vom Typ wachsend kontext-sensitiv. Die Symbole dieses Strings sind Startsymbole für mehrere reguläre Grammatiken, welche nun ein Bild erzeugen.

In meiner Arbeit habe ich die Abschlusseigenschaften der Sprachklasse untersucht, die von den Growing Context-Sensitive Matrix Grammars erzeugt wird. Dabei konnte ich beweisen, dass diese Klasse unter Vereinigung, Spaltenverkettung, Spaltenabschluss, Spaltenhomomorphismen, inversen Homomorphismen und Schnitt mit regulären Matrizen abgeschlossen ist. Nach der Definition der Sironmoney’s handelt es sich dann dabei um eine abstrakte Matrizenfamilie.

Neben der Anfertigung einer Bachelorarbeit werde ich eine Präsentation halten um meine Ergebnisse den Korrekteuren Prof. Dr. Friedrich Otto und Prof. Dr. Martin Lange vorzutragen.

Collision Trees

Die einzelnen Stufen der Kollisionserkennung

Visualierung des Sphere-trees anhand eines Beispiels: Bei diesem Modell wurden 6 Ebenen erstellt.

 

In Rahmen der Entwicklung der Spherical-Engine habe ich eine Lösung für objektunabhängige Kollisionserkennung entwickelt. Die Anforderung war, beliebige 3D Objekte zu laden und beim Ladevorgang mit Kollisionserkennung auszustatten.

Neben verschiedenen Ansätzen, entschieden David Kronenberger und ich uns dazu, die Objekte durch Kugeln zu approximieren, da dann die Auflösung der Kollisionen recht einfach ist. Um Rechenaufwand zu sparen und die Objekte möglichst genau zu approximieren, verwenden wir einen Sphere-Tree und testen erst auf der gröbsten Ebene, ob die Objekte überhaupt kollidieren können. Dann wird mit der nächsten Ebene fortgefahren bis entschieden werden kann, dass die Objekte kollidieren. Beim Laden der Objekte kann dabei angegeben werden, wie viele Ebenen für die Kollision erstellt werden sollen. In der Demo dazu, wurden die Kugeln visualisiert um die Korrektheit der Kollisionsüberprüfung zu testen. Der Sphere-tree wird bisher nur auf basis von Octrees erstellt. Dies ist zwar keine optimale Lösung, aber sie ist einfach und vor allem schnell.

Erste Demo der „Spherical Engine“

Seit nun mehr als 3 Jahren entwickeln David Kronenberger und ich in unserer Freizeit an einer Spiele-Engine, mit der wir unseren Traum von einem eigenen Spiel verwirklichen wollen.

Die Grundlage der Engine ist fertig gestellt und ermöglicht eine einfach Verwaltung von einer großen Anzahl an Objekten in einer 3D-Szene. Mit verschiedene Techniken werden detaillierte Objekte nur in der Nähe angezeigt wohingegen grobe und große Objekte noch in weiter ferne erkennbar sind. Darüber hinaus gibt es die Möglichkeit, ein Objekt in den Hintergrund zu setzen, wie hier in dem Screenshot der Nachthimmel.

Die Game-Engine ist in Java geschrieben und verwendet die LWJGL-API für das Rendern mittels OpenGL. Nach dem Start mit OpenGL 1.0 basiert die Engine heute auf OpenGL 3.1 und ist auch nicht mehr abwärtskompatibel. Diese Entscheidung beruhte darauf, dass heute (so gut wie) jeder Computer mindestens OpenGL 3.3 unterstützt und dass mit der Version 3.1 einige Funktionen „deprecated“ wurden, so zum Beispiel die Funktionen der Fixed-Pipeline. Entsprechend muss alles mit Shadern implementiert werden.

Diese erste Beispielszene verifiziert die Funktionsweise der Transformation der Objekte, sowie deren Abhängigkeiten und kann hier als *.jar runtergeladen werden. Die Objekte werden in Bäumen gespeichert und die Kindknoten bewegen sich mit ihren Elternknoten mit. Gleichzeitig sind die Koordinaten der Kindknoten abhängig vom globalen Koordinatensystem und nicht vom Koordinatensystem der Elternknoten.

Projekt: 2-dimensionale Sprachen

Zu Beginn des Sommersemesters 2013 habe ich zusammen mit David Kronenberger an einer Übersichtsarbeit zu 2-dimensionalen Sprachen gearbeitet. Betreut wurde dieses Projekt von Prof. Dr. Friedrich Otto. Dieses Projekt diente als Vorarbeit und Themenfindung der Bachelorarbeit.

Inhaltlich wurden die verschiedenen Möglichkeiten erarbeitet, wie 2-dimensionale Sprachen erzeugt, bzw. akzeptiert werden können. Dazu zählen Grammatiken, Automaten, Tiling Systeme und reguläre Ausdrücke. Darüber hinaus wurden auch neuere Ideen wie Sgraffito Automaten und Restarting Tiling Automaten behandelt. D. Kronenbergers Schwerpunkte lagen bei den Automaten und deterministischen Tiling Systemen, wohingegen ich mich mit Grammatiken und regulären Ausdrücken beschäftigt habe.

Während des Projekts haben wir in regelmäßigen Abständen Präsentationen über den aktuellen Fortschritt gehalten.

Praktikum bei Open-Xchange

FIrmenlogo von Open-Xchange

FIrmenlogo von Open-Xchange

Vom 01.09.2013 bis 01.11.2013 habe ich mein Praktikum bei der Firma Open-Xchange in der UI-Entwicklung gemacht. Ich habe dort an der Webanwendung Appsuite, dem Frontend für den Open-Xchange-Server gearbeitet.

Neben der Einarbeitung in gängige Javascript-Frameworks wie jQuery, Require.js, Underscore.js und weitere konnte ich meine Kenntnis für Webentwicklung mit HTML5, CSS3 und Javascript verbessern. Während des Praktikums habe ich ganz normal im Entwicklerteam mitgearbeitet und habe sowohl an Features gearbeitet als auch Bugs gefixed.

RMS Relaunch

Ein Screenshot der Straßenerstellungssoftware.

Ein Screenshot der Straßenerstellungssoftware.

Die Simulationssoftware RMS-Fahrradwelt, die vom Fachgebiet technische Informatik erstellt wird, ermöglicht es dem Benutzer, die Theorie des Fahrradfahrens zu erlernen. Die Software zielt vor allem auf Schulen ab, da dort die Zeit nicht mehr genutzt wird um in eine Fahrrad Fahrschule zu gehen. Nun können die Verkehrsregeln in wenigen Stunden am Computer in der Schule oder zu hause erlernt werden.

Damit die Lehrer ihre bisherigen Straßenkreuzungen und schwierigen Situation weiter verwenden können, habe ich dieses Semester mit einem Kommilitonen die Grundlage für ein Tool erstellt um beliebige Straßen zu zeichnen. Dabei kam wieder die GameEngine Unity zum Einsatz. Die Straßenmodelle wurden mit Blender erstellt. Die nächsten Projektgruppen werden Ampeln und Schilder, sowie automatisierten Verkehr implementieren.

Für die graphische Benutzeroberfläche wurde NGUI verwendet. Bis die Universität die Vollversion davon kauft wird das Logo in der oberen Linke Ecke weiter zu sehen sein.