Media Night Apps

This year there is something new on the Media Night, the student fair at our university.

The booklet is dead!

In its past, the Media Night had had a printed booklet with its program and time table in it. The booklet was produced by one of our printing faculties for which the HdM is pretty famous. It was distributed for free during the evening of the fair.

old_bookelt

Long live the booklet!

However, since this semester the good old booklet is history! Instead of it, the Media Night has a brand new app with all projects, students and even an indoor navigation. You can find it in Apple’s App Store and Google’s Play Store.

Most innovative projects

But why only have one app if you could have two? In case you have an Apple iPad or iPhone you can get an app about the 10 most innovative projects of this Media Night. And – TechTrends is one of it!

innovative_app

I hope you enjoy the apps, the projects and the evening.

Best regards from the Media Night,
Thomas

Thomas’ Functional Interpreter

I just finished a small functional interpreter for an university course. To be precise, the interpreter itself is not functional, but it understands a functional, LISP-like language/syntax. The whole project is written in Java 7 and provides an interface to all Java classes on the class-path, too.

I also tried to create a small IDE in Swing. I built an editor with syntax-highlighting and code-completion (thanks to the RSyntaxTextArea project), an environment inspector and a small debugger to keep track of the stack. Take a look at it.

I called it ThoFu for Thomas’ Functional Interpreter. I think it teats good… You can get some brief impressions from the slideshow below.

The whole project is open, you can find it as an Eclipse project on my Bitbucket account. It contains the actual code, all libraries, screen-shots, unit tests and (of course) some documentation like UML diagrams. Here are the links to the GIT repository:

Bitbucket: https://bitbucket.org/wordless/thofu-interpreter
Git: https://bitbucket.org/wordless/thofu-interpreter.git

Here is the executable JAR-file (Note: You need Java 7). Just download it, double-click it and go-ahead:

Executable program: ThoFu Interpreter.jar
Read-Me: README.md

And this is how it goes. First a simple “hello world” program:

Now, a more sophisticated one. Here’s a quicksort-algorithm for my interpreter. It contains some user-defined functions, multi-line statements and some comments.

And this is how the Java API works. The code will create a JFrame with a JButton and a JLabel. When you press the button, the listener will change the text of the label from “click me” to “hello“. The syntax is inspired by the Java Dot Notation by Peter Norvig. I used the Apache Commons Lang library for the reflection-tricks to load class and so on.

You can just copy and paste the code snippets into the editor or save them as common text files and open them. They are also in the repository. The JUnit tests contain many more examples as well.

For those who are interested in the topic, you can find my resources (libraries, tool and literature) in the Read-Me.

Best regards,
Thomas Uhrig

Mini-Game: JARUN Impact

In diesem Semester habe ich für die Vorlesung Entwicklung von Computerspielen ein kleines Mini-Game als Prüfungsleistung entwickelt. Herausgekommen ist dabei JARUN Impact, eine Art 2D-Space-Shooter.

In JARUN Impact, steuert man ein kleines Raumschiff durch insgesamt drei verschiedene Level. Diese sind unterschiedlich schwer und beherbergen auch verschiedene Gegner. Dabei läuft das Spielprinzip jedoch stets gleich ab: Man steuert sein eigenes Raumschiff mit Hilfe der Tastatur um Gegner und Hindernisse herum und zielt und schießtdabei mit der Maus. Das Ziel ist es dabei möglichst weit zu kommen und sich so eventuell in die Punkte-Highscore eintragen zu können – und diese gibt es online:



JARUN Impact Highscore:

0)
{
$i = 0;

while ($db_score = mysql_fetch_assoc($dbResult))
{
$i++;

echo “

“;
echo “

“;
echo “

“;
echo “

“;
echo “

“;
echo “

“;
}
}
?>

Rank: Player: Score: Date:
“.$i.” “.$db_score[“Name”].” “.$db_score[“Score”].” “.$db_score[“Date”].”

Entwickelt habe ich das Ganze in C# mit Hilfe des XNA-Frameworks von Microsoft. Dieses ist zur Entwicklung von Spielen auf Windows, der X-Box und zum Teil auch auf anderen Microsoftplattformen gedacht. Es bringt den großen Vorteil, eine Menge von Funktionen und Klassen für den Entwickler bereitzustellen, die für die Programmierung eines Spieles notwendig sind. Und – es funktioniert einfach gut.

Bedingt durch C# und XNA läuft das Spiel jedoch nur auf Windows!

Wer sich für Jarun Impact oder generell die Entwicklung interessiert findet anbei noch die Links zum Download. Ich habe auch die gesamten Visual Studio Projektdateien, inklusive Grafiken und Musik hochgestellt. Ich hoffe es hilft dem ein oder anderem weiter.

Ausführbares Programm:
http://tuhrig.de/wp-content/uploads/jarun/Jarun.zip

*** Da es mit der Installation auf einigen PCs Schwierigkeiten gegeben hat, habe ich eine Bibliothek zur Content Pipeline aus dem Build Path entfernt. Ich hoffe, dass das Problem damit gelöst ist, die Installation müsste nun also ohne Weiteres möglich sein. ***

Projektdateien:
http://tuhrig.de/wp-content/uploads/jarun/JARUN-Quellcode.zip

Php-Skripte für die Online-Highscore:
http://tuhrig.de/wp-content/uploads/jarun/Jarun-Php-Skripte.zip

Beste Grüße, Thomas Uhrig.

Nepomuk – digitales Metronom für Android-Geräte

Im den vergangenen Monaten, habe ich mich im Rahmen eines Pflichtprojekts in meinem Studium, mit der Entwicklung von Software auf der Android-Plattform auseinandergesetzt. Entstanden ist dabei Nepomuk, ein digitales Metronom mit Sprache für die Android-Plattform (ab 1.6).

Die Idee zu diesem Projekt stammte von Michiel Oldenkamp ( www.musithek-oldenkamp.eu ), einem langjährigen und professionellen Musiker. Dieser stellte während seinen Unterrichtsstunden häufiger fest, dass das Ticken eines Metronoms alleine nicht ausreiche. Viel mehr benötigten die Schüler einen ständigen Nebensitzer, zum permanenten Vorzählen des Taktes. Daraus entstand die Idee ein digitales Metronom für ein mobiles Endgerät zu entwickeln, welches neben dem übliche Ticken, über eine Sprachausgabe verfügt.

Nepomuk implementiert insgesamt sieben Sprachen, drei verschiedene Klangschemata und eine Tapper-Funktion zur Berechnung des Tempos. Eine Präsentation als Videoaufzeichnung, ist unter http://events.mi.hdm-stuttgart.de/ zu finden. Außerdem habe ich das Projekt auch auf der diesjährigen Media Night an der HdM Stuttgart vorgestellt.





Das größte Problem bei der Entwicklung war sicherlich die Android-Plattform selbst. Google verfolgt mit dem auf Linux basierenden Betriebssystem und der eigens entwickelten Java VM zwar ehrgeizige Ziele, erreicht diese aber gerade in puncto Real-Time-Audioverarbeitung nicht. Denn was soll ein Metronom unbedingt können? – Richtig, es muss im Takt ticken. Doch was bleibt von einem “Takt”, wenn Oberflächen permanent neu gestartet werden falls man das Handy kippt, wenn der Garbage Collector nach dem Stop-the-World Prinzip vorgeht oder wenn die Audio-API zuviel Latenz aufweist?

Wer sich für die App, bzw. die Probleme und Umsetzung interessiert, kann hier die gesamte Dokumentation und den Quellcode, sowie die eigentliche Anwendung herunterladen.

Dokumentation

Quellcode

Nepomuk (Android App)

Beste Grüße, Thomas Uhrig.

Naiver Bayes Klassifizierer (Präsentation & Python-Code)

Data-Mining, also die Extraktion von Wissen aus sehr großen Datenmengen, ist ein Teilgebiet der künstlichen Intelligenz welches zunehmend an Bedeutung gewinnt. Es findet sich im Umfeld von Softwareentwicklung und Datenbanken wieder, in Erhebungen und Statistiken, in Marketing und Management. Dokumente wie Webseiten, E-Mails oder RSS-Feeds, werden geclustered und klassifiziert.

Der naive Bayes Klassifizierer erlaubt es, Dokumente relativ einfach nach gelernten Regeln zu klassifizieren, also in Gruppen einzuteilen. Anhand vorklassifizierter Dokumente lernt er welche Wörter, mit welcher Wahrscheinlichkeit in welcher Gruppe auftreten. Ein neues Dokument, wird dann anhand der Wahrscheinlichkeiten der einzelnen Wörter, sowie der Wahrscheinlichkeit, dass diese Klasse überhaupt auftritt eingeordnet.

Der naive Bayes Klassifizierer kann zwar keine semantische Aussage über ein Dokument treffen (eine Aussage “das Dokument A ist zu 56,743% Werbung” wäre also weder möglich noch sinnvoll, da sie mehr als subjektiv ist), jedoch kann er relativ sicher die Klasse angeben in die das Dokument am wahrscheinlichsten fällt und es dieser zuordnen. So ist der naive Bayes Klassifizierer etwa das Mittel der Wahl für Spam-Filter in E-Mail-Programmen geworden. Der Nutzer kann den Klassifizierer anlernen und an einigen Stellschrauben drehen. Hat er genügend “Wissen gelernt”, so erfolgt die Einteilung in Spam und Nicht-Spam überzeugend und performant.

Anbei findet ihr eine Präsentation (*.pdf) zum naiven Bayes Klassifizierer, sowie eine kommentierte Implementierung in Python. Die Präsentation stellt das Verfahren noch einmal im Detail vor und gibt auch Einblicke in die Mathematik – nämlich das Bayes-Theorem – hinter der Idee. Die Python-Implementierung setzt einen Bayes Klassifizierer für Dokumente (also allgemein Strings) um. Diese Implementierung lernt anhand einer Reihe von vorgegebenen Dokumenten und teilt ein neues Dokument dann in einer von zwei Klassen ein (siehe Screen-Shot).

Präsentation: naiver_bayes_klassifizierer_präsentation.pdf

Python-Implementierung: naiver_bayes_klassifizierer.zip

Beste Grüße, Thomas Uhrig.

Klassifizierer

Die Stadt (Hörspiel)

Im vergangenen Semester habe ich versucht ein wenig über den Tellerrand eines Informatikstudiums zu schauen und mich in einer kleinen Projektarbeit mit Sounddesign beschäftigt. Meine Kommilitonin Raphaela Butz und ich, haben uns daran versucht als Klausurleistung eine Kurzgeschichte als Hörspiel zu vertonen.

Als Vorlage diente uns die Geschichte “die Stadt“, der Autorin Selita Telli. Sie wurde im Jahre 2006 veröffentlicht und ist unter anderem in der Sammlung “der Mann, der vergewaltigt wurde” (ISBN: 3980933687) des Dr. Ronald Henss Verlags, abgedruckt.

Als Sprecher für das Hörspiel konnten wir Mario Pitz von der Musikhochschule Stuttgart gewinnen. Bei der musikalischen Untermalung half uns Andreas Brandt, der Klavier und Streicher für das Projekt beisteuerte. Alle Aufnahmen entstanden in den Produktionsstudios des Hochschulradio Stuttgarts (horads) in der HdM. An dieser Stelle, noch einmal vielen Dank an alle Beteiligten.

Die Entstehung der Produktion, unsere Überlegungen und die einzelnen Arbeitsschritt, sind in der angehängten Präsentation zu finden. Außerdem sind dort auch verschiedene Soundbeispiele, mit zahlreichen AB-Vergleichen (vorher/ nachher) zu hören.

Download: die Stadt (ca. 9 MB, mp3)

Download: die Stadt – Präsentation (ca. 17 MB, Flash)

Beste Grüße, Thomas Uhrig.

Decorator & Fassade (Desing Patterns)

Zu Beginn dieses Semesters habe ich in der Vorlesung “Design Patterns” (Professor Walter Kriha), die Entwurfsmuster Deocrator und Fassade vorgestellt.

Decorater & FassadeDecorator und Fassade sind zwei Strukturmuster der sogenannten “Gang of Four“, den Vätern der Design-Patterns.

Der Decorator beschreibt einen Lösungsweg, dynamisch zur Laufzeit Eigenschaften zu einem Objekt hinzuzufügen. Dies wird über ein einheitliches Interface realisiert, welches jede Komponente und jeder Dekorierer implementiert. Außerdem hält ein jeder Dekorierer einen Verweis auf eine konkrete Komponente bzw. einen weiteren Dekorierer. So können beliebige Ketten von Eigenschaften und Methoden erstellt werden.

Die Fassade stellt eine Möglichkeit vor, den Zugriff auf ein komplexes Subsystem von Objekten zu kapseln. Ähnlich dem Eingang eines Gebäudes, stellt sie einen zentralen Zugang zu dem Subsystem bereit. Dabei können bei Bedarf auch Sicherheitskontrollen oder ähnliches, in der Fassade implementiert werden (vgl. Proxy-Pattern).

Download: Decorator & Fassade

Beste Grüße, Thomas Uhrig.

Einführung in Smalltalk

Im Laufe des vergangenen Semesters (WS09/10), habe ich eine Einführung in die Programmiersprache Smalltalk gegeben. Die Präsentation war im Rahmen einer Vorlesung “Aktuelle Programmiersprachen” – wobei das “aktuelle” nicht unbedingt wörtlich zunehmen ist.

Die Grundidee war dabei, dass die Studenten im laufe eines Semesters einen groben Einblick, in den Markt der Programmiersprachen bekommen. Wöchentlich wurden so ein bis zwei Sprachen, Frameworks oder Programmierparadigmen von Studenten aus unterschiedlichen Semestern präsentiert. So entstand auch dieses, ca. 30 minütige Rundumschlag, in Sachen Smalltalk-Basics.

Die Präsentation rollt dabei die Geschichte, die Idee hinter der Sprache (in erster Linie!) und Ausschnitte aus der Syntax auf. In Anbetracht der engen Zeitvorgabe, ist dies jedoch nicht mehr als ein Kratzen an der Oberfläche. Wer jedoch Objektorientierung von Grund auf verstehen möchte, sollte diese Präsentation vielleicht als Anstoß nehmen, sich mit Smalltalk näher auseinander zu setzen.

Download: Smalltalk – Geschichte, Idee und Syntax

Beste Grüße, Thomas Uhrig.