I acquired my diploma as a “media system scientist”. I wrote on the topic “Object-Capability Security in Virtual Environments”. I will hold a talk on the same topic at the IEEE VR 2008 in Reno, Nevada.
3D programming with Scala
I spent some time mucking around with the Scala programming language.
Semester project: Physics in realtime
Abstract:
We built a framework supporting the development and testing of physical algorithms. We incorporated various testing methods for analyzing the visual and numerical behaviour of the calculated results. Further, we developed a number of input methods for inuencing the models before and during simulation. We used the framework to develop a mass spring solving algorithm employing torque forces to achieve fixed relative angles, also to create an input method for animating facial features modeled with mass spring systems.
My part in the project was creating the testing framework and developing a mass spring system solver that applies angular forces to the masses.
Source and Win32 Binary (remove .pdf extension)
The binary is bin/PhysikFramework.exe
To chose the stable angles solver, use the drop down list at the right top. Apply a force to the model by pressing ‘c’. There are additional mass spring models in the bin folder, the file extension is ‘.pms’

Simple CMS based on Rails
I have begun to write a content management system on rails. It makes heavy use of Drag and Drop features.
Features:
Pages are arranged in a sortable tree (sortable by drag and drop)
Pages have “nice” URLS (no /index?articleid=97361496 or something)
Cacheing on page basis
every page has a layout with a number of columns
page elements can be put into the columns by drag and drop (sortable
lists)
Each page element has its own view and controller. Up to now I have
created Title, raw HTML, rich text editor and rails component, but
adding your own elements should be easy
Source: Rename to .tar.gz
Of course there are many rough edges, but come on, second version!
And yes, it is BSD licensed. I will put the source on RubyForge as soon as the project is greenlighted.
RTRails now open sourced
I uploaded RTRails to Rubyforge. Here is the project page.
HERE is a video showing two browsers using the app, Safari in Pull mode, Firefox in push mode.
The project is now finished, HERE is a technical paper about the system, HTTP streaming and browser-based window management.
The live demo is still running HERE. New demo server Sorry if something does not work for you, I did not have time to optimize the system for every browser out there. Also, it seems to be pretty slow under Firefox, DIV handling complexity seems to rise nonlinear, so many windows=>slow.
It seems that the rubyforge mirroring system does not work so great, please use CVS checkout if you want to get the source.

RTRails version 0.1
This is the 0.1 release of RTRails – Realtime on Rails.
RTRails is a web based collaborative environment. It is meant to be used by small or mid-sized groups for communication, planning and/or time wasting. At this point the system includes a chat system and an mp3 player with shared playlist editing.
RTRails is based on Ruby on Rails.
Events are distributed from the server to the browsers over an Ajax HTTP stream. The streams (push connections) are handled by a small http server also included in the system. Streaming works only on Firefox 1.0.7 and higher. All other browsers update themselves every n seconds using ajax polling.
The site was tested with Firefox 1.0.7 (no Dojo editor, sorry), Firefox 1.5 (the browser of choice), Konqueror 3.5, Internet Explorer 6, Opera 8.5.1 and Safari (I don’t remember what version).
The package includes:
A HTTPD for mediating the push connections (written in Ruby)
A JavaScript Windows system
Two demo apps:
A Chat/IM system with rich text editing (using the Dojo rich text editor)
An MP3 player with shared playlists (using AFLAX).
I built this together with Markus Hartleb as a term project at the Cooperative Media Lab of the Bauhaus University Weimar.
The whole system will be released to the public under the LGPL license after the project end ( 2.2.2006).
The project page will be at RubyForge.
New demo server
Here is a running demo.
Please be gentle with the server, it is a desktop mac and will probably not survive long. Also I am developing on this machine, so expect downtimes.
Windows with Script.aculo.us
I wrote a window class for script.aculo.us.
I tested it with Firefox, Konqueror, Opera and IE6.
It is far from perfect, expect some minor bugs.
IE gave me a hard time because I couldn’t convince it to bring DIVS to a height of 100%-20px.
The window works without tables, which should make rendering faster. I tried a table based approach first, but it gave problems with the overflow:auto setting of the content div.
Version 0.5:
Un-Maximize now works
Nicer skin
Version 0.4:
Maximize from minimized state should work now
Version 0.3:
Stomped some bugs
Added class AjaxWindow – Adds callbacks to save window position and size via XMLHttpRequest Calls
Added random start positions for AjaxWindows (set top and left to -1)
Realtime on Rails

This semester I do a project together with Markus Hartleb at the Cooperative Media Lab.
Goal of the project is to develop a realtime collaborative web application using Ruby on Rails.
First part of the project is to develop a way of doing push requests with rails.
The application is called Realtime on Rails, and it is licensed under the GNU GPL.
We built a demo application for demonstrating RPC via server push, it’s a chat and you can see it here.
Realtime on Rails
With this rails application, it is possible to stream content and commands from a server to connected browsers.
How it works
The stream is basically a HTTP request from the browser to the server which is kept open. While the connection lasts, the server can push data to the browser. This is called a server push connection.
The push connection is done using the XMLHttpRequest object (the Ajax thingy). With this combination of techniques, the server can constantly update the content of a web page without the user even noticing it.
Uses
This can be used for programming HTML chats, instant messengers, browser games, groupware applications and much more, basically every web application that can profit from real time updates.
Caveats
Networking
All data sent to the client is encoded as JSON. On the browser side there is a JavaScript object running which handles the push or pull connection. This client object can be used to register JavaScript functions that can be called through the push connection. The client object expects the data to be JSON-RPC-formatted.
Push connection works like this:
This is neccessary, because on most browsers (including Mozilla), the XMLHttpRequest object is only allowed to open locations on the same domain and port that it was started from.

Pull mode works similar, but instead of opening a persistent connection, every n seconds, an ajax request gets new RPC calls from the web server.
Installation instructions
should work with rails-0.14.3.
Put the sql file in the db/ folder into a MySQL database.
Hack config/database.yml
compile the file public/cgi-bin/tunnel.c to a cgi-bin directory. The name of the cgi should be nph-tunnel.cgi
or put the public/ajaxpush.php file into a folder reachable on your webserver if PHP is enabled.
Hack config/appconfig.yml
This is all I have time to write at the moment, I will give better instructions when I have the time.
Documentation
Rdocs for PushServer
Rdocs for Framework and Chat demo
Download
Realtime on Rails version 0.0.1
Development
If you find bugs, want to join in the development process or have patches, contact us under wooyay@web.de
Project finished: Combining VR projection with wave field synthesis
Last semester i had my second project at the virtual reality group.
Goal of the project was to combine multi user stereoscopic 3D projection with the wave field synthesis sound system by IOSONO.
The setup: Two users are standing in front of a screen. Each user is wearing a pair of shutter glasses.
On the screen, the users see a model of a river landscape. The position of the users are tracked, so the projection is perspectically and spatialy correct.

The users can walk around in front of the screen and the projection has the appearance of a window into the 3D scene.
By using an input device, the users are able to throw stones into the water of a river running accross the landscape. When a stone hits the water, it makes a big splashing noise and then the river is gurgling around the stone.

Behind the projection screen, an array of loudspeakers creates the noises of the river gurgling around the stones. The loudspeakers are hooked up to the wave field synthesis (WFS) system. The sounds of the stones are spatially correct, which means that the users can move around the (virtual) source of the sound, and independent from the user perspective, the sound is perceived as coming from this location.
Viewing: For stereoscopic viewing, each user has to be provided with one separate view for each eye. In a two user projection system, four separate views are projected onto the same screen. These views are separated using a filter system based on shuttering and polarization. We implemented this system for two users, so four LCD projectors were needed.
To enable perspectively correct projection, the shutter glasses are tracked using the ARTrack optical tracking system.
For this, each pair of shuttering glasses are equiped with retroreflective spherical markers.
We also created another demo, where the user can push around billard balls with a tracked stick. This was a big hit at the Mediengang-exhibition at the Bauhaus uni.

Seminar: Physik-Simulation auf der GPU
Ich habe ein Mass-Spring-System implementiert, dessen Berechnung nicht auf der CPU sondern auf dem Grafikprozessor (GPU) stattfindet. Das System verwendet FBOs, um mit mehreren Fragment Shadern die Physik-Daten zu berechnen. Diese Daten werden dann als Displacement Map auf ein Gitter gelegt.
Doku (PDF als Zip)
Code
(Läuft erst ab GeForce >= 6. Keine Garantie auf diesen Code in jeder Hinsicht.)

