Diploma

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.

Thesis
Sources of EMonkey

Leave a Comment

3D programming with Scala

I spent some time mucking around with the Scala programming language.

Here is a post on the results

Leave a Comment

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.

Here is the documentation

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’

Screenshot

Leave a Comment

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.

Comments (2)

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.

Comments (2)

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.

Here is a running demo.
New demo server
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.

Leave a Comment

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)

download RTWindows 0.5 ( rename to .zip )

Comments (4)

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

  • At the moment, only mozilla/firefox browsers are capable of push connections through ajax. All other ajax-capable browsers are kept updated using a polling mechanism. Polling means that the browser periodically queries the server for new information, typically every five seconds. So all non-mozilla browsers are at most five seconds behind current events.
  • Push connections are using up a lot of server ressources. I did some load tests with about 100 open push connections, which worked fine. But not even a decent server machine will be able to handle huge amounts of connections at once. So push connections are not for sites with a lot of traffic, more for intranet applications or applications with restricted access.
  • Because rails uses FastCGI, each HTTP request to a rails app is handled by a whole rails process. Each rails process takes up more than ten megabytes, so for 100 push connections, more than 1000 mb would be needed. Because of this, I developed a simple webserver in ruby, which works similar to an IRC chat server. This server has to run constantly, which means that you probably won’t be able to install this at your ISP. Server administrators get very nervous about daemon processes on their servers and will probably kill them the second they see them.
  • At the moment, Apache and Webrick HTTP servers are supported. It won’t work with Lighttpd. This is because using Lighttpd there is no way for a CGI script to flush it’s output to the client before the request processing has ended. This probably will be fixed in one of the next versions.
  • 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:

  • First, the browser downloads the web page from the HTTP server.
  • The web page contains JavaScript which uses the XMLHttpRequest object to connect to a CGI script on the HTTP server.
  • The CGI script opens a connection to the Push server and repeats it’s replies back to the browser.
    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.
  • The push server (and the CGI script on the HTTP server) keep the connection open.
  • Now when the server whants to push some information to the clients, it encodes this information as JSOn and posts it to the Push server.
  • The push server repeats this JSON-RPC string to all listening browsers.
  • The browsers decode the JSON-RPC and execute the specified function.
  • 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

    Leave a Comment

    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.

    Leave a Comment

    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.)

    Screenshot 1

    Screenshot 2

    Leave a Comment

    « Newer Posts · Older Posts »
    Follow

    Get every new post delivered to your Inbox.