0.5 Preview is on the Way

September 12, 2009

We’ve been doing a tremendous amount of testing and bug fixing this week. I would like to extend a special thanks to those of you in the community who have helped with the testing! We had hoped to get the Preview release out earlier in the week, but there were a few show-stopper bugs that appeared late in the game. The release is certainly not bug-free yet, but Jon is doing the build this weekend and the release should be out on Monday, barring any major disasters over the weekend.

In what seems to have become a tradition, I’d like to share some of our testing experience and point out some of the new features in this release. In yesterday’s final test of the Preview build, we had up to 12 people in world for part of the time, and 6 who stayed to run through the entire test. The first thing we all tried was to configure our avatars. You now have a choice between two different low-poly avatars, including the two cartoon avatars shown below and two toy avatars. These are designed to improve performance while testing or when using a computer without a good graphics card. You can experiment with these by selecting "Configure Avatar" from the Edit menu.

Cartoon avatars Configure Avatar dialog

To create an avatar that will walk, run, or perform gestures, click on the "New…" button in the Configure Avatar dialog. Jon and I found fairly normal looking clothes, but we have no idea what Mike was thinking!

Jon's avatar Nicole's avatar Mike's avatar

Once we were happy with our avatars, we ran a shared X11 application. You now configure these using the Server Administration console. Once configured, users can add instances of the application into the world either by selecting "Component…" from the Insert menu or by opening up the Shortcuts panel (notice a "firefox" icon in the right-most position).

Shared Application - Firefox Shortcuts pane

The next part of the test involved importing a variety of different sized Google Earth (kmz) formatted models into the world using both drag-and-drop and the "Model…" command from the Insert menu. After struggling with some bugs in this area at the beginning of the week, model importing is now working quite well. Although it’s not ideal, models that are over a certain size will appear on top of your avatar when you drag them into the world. This was preferable to the alternate behavior of them appearing so far away that you couldn’t see them. Smaller models will appear directly in front of you. If the model is very small, you may need to step aside (use the Q or E keys) to see it. Here are some nice large models, as well as a small seat.

Large kmz models Editing an object with the Details Pane

One extremely handy new feature in this release is the ability to edit an object’s exact coordinates without having to open the property sheet. To do this, right click on a model and select "Edit…" from the context menu. This will bring up the Edit Component pane shown in the illustration above. If you want to position the object more precisely than you can with the graphical tools, click on the "Details…" button to open the position Details pane. This is a huge help if you are trying to align objects or move objects to another part of the world. One nice feature is that you can click on objects that you are not currently editing to check their coordinate numbers. Be a little careful – you need to click back on the model you want to move before editing the numbers, otherwise you’ll move the wrong one.

The Sticky Note module, contributed by a community member, is a great example of an interactive 2D Java application. In the standard Wonderland bundle, you will see two new items in the Components list: Sticky Note and Task Sticky Note, both illustrated below. After inserting one of these, right click on the new note to "Take Control." Now you can type in some text. Use the new "Release App Control" button that appears in the upper right corner of your Wonderland window when you are finished. You can use the "Edit…" context menu command to move the note, or use the "Change Color" context menu command to recolor your note.



Lastly, I would like to highlight Capabilities. These are generally useful features that can be applied to any object. To apply a capability to an object, right click on the object and select "Properties…" from the context menu. Then click on the "+" sign underneath the Capabilities pane. This will bring up the list of all capabilities that are installed on your system which can be applied to the selected object.

Capabilities Pane Capabilities List

The Audio Capabilities are documented in the Adding Sound section of the "Creating and Importing Artwork for Non-Artists" tutorial. You can turn any enclosed space into a sound-proof area by applying the Cone of Silence capability, and you can make any object into a teleporter by adding the Portal capability. The Container capability allows you to group objects together. During the test, we dropped in an amphitheater and added the Container capability. Any objects we dropped in while standing inside the amphitheater were automatically grouped with the amphitheater, allowing us to reposition the amphitheater and have all the containing models move with it.

Container example Move container

You can also manually add objects to a container by using the World Hierarchy editor that appears when you select "Properties…" from an object’s context menu. You may need to click on the arrow in front of "World Root" to see the details of the hierarchy.

World hierarchy

Just drag and drop objects displayed in this list to nest them. Note that it if you plan to do this, you should use the Basic Properties pane to name each object, known as a "cell," otherwise your list of objects will be a jumble of numbers and you will have no way to tell what is what.

Another important use of the Container capability is to add the same security properties – another capability – to a set of objects. This way you can create a private meeting room, for example, and have all objects created within that space be viewable only by members of a particular group.


Testing wouldn’t be any fun without the bloopers. When we were testing adding objects to the world, Deron added a lunar lander model and placed it at the origin using the Details pane to set X, Y, and Z to zero. While testing something else, his client hung, so he had to quit and come back in. When he got back, his avatar came into the world inside the model. Deron said, "I was stuck in the lunar module! I moved it above my head and then I was okay." Good thing there weren’t too many people around to hear that conversation!

At one point, I had a tragic teleportation accident. I walked through a portal, but I didn’t quite come out whole on the other end. On top of that, I was tumbling around. Later, when I logged out and back in again, I came in with two avatars at the same time.

Teleport accident Double trouble

Real double trouble!


WFS: The Wonderland File System in v0.5

September 10, 2009

One of the major seismic shifts that occurred when we re-architected Project Wonderland from our 0.4 to 0.5 versions was the way in which users assemble worlds. (I talk about the new World Assembly tools in the recent blog World Assembly in v0.5). One technology, the Wonderland File System (WFS), that played a prominent role in 0.4 plays a much different role in 0.5. In this blog, I talk about the role WFS once played, and its new role in the most recent version.

The way it was before version 0.5…

I won’t dwell on the past too much, but I wanted to briefly summarize the role WFS played before we re-architected the system for 0.5. In 0.4, WFS was the way to assemble worlds. Sometimes users employed tools, like the World Builder, but more often than not, world assembly entailed hand-editing parameters within XML files. No one could escape this fate (really), so the details of WFS needed to be exposed to all users. In version 0.5, in-world tools let users create, position, and edit the properties of Cells without needing to hand-edit XML files. 

Does it still exist?

The answer is: yes, WFS still exists in 0.5, but plays a much different role now that the primary means of world assembly are the tools built into the client. Unlike version 0.4, version 0.5 also automatically persists the live world state: Wonderland depends upon the mechanisms built into the Darkstar middleware layer for this persistence.

WFS now primarily serves as a mechanism to import "initial" world state or export state as a "snapshot". The structure of a WFS, by and large, has not changed since 0.4: it still consists of a collection of XML files arranged hierarchically on disk that conform to certain naming conventions (e.g. Cell files have a -wlc.xml suffix and extension). The actual format of the XML has become considerably simpler from our switch from Java Bean Persistence to JAXB as the binding mechanism between the XML and their Java object counterparts. Unlike 0.4 though, we won’t be explicitly documenting how the properties of each Cell type map onto an XML schema in WFS, since hand-editing XML files is far less common.

Initial worlds and snapshots

Snapshots Web UIIn 0.5, WFS manifests itself in the Web Administration UI under the Manage Snapshots tab. Users can perform a couple of actions here. First, users can capture the current state of the world as a WFS by taking a snapshot. (This action has the side effect of re-starting the Darkstar server to insure the world exists in a quiescent state before taking the snapshot). The snapshot then appears under the World Snapshots heading. Second, users can reset the state of the world (and restart the Darkstar server as a result) to any entry under the Initial Worlds or World Snapshots headings. All of these entries are WFSs sitting on disk on the server machine.

I won’t dwell on the uses of this mechanism, since I think there are many, but here’s one example: a teacher can assemble a world to use as an interactive classroom, allow students to interact with it, store the results of their interactions as a snapshot to re-visit later, and then reset to the original world state for the next group of students. 

Where are the WFSs stored on the server?

All of Initial Worlds and World Snapshots found are WFSs sitting on disk on the server machine in the ~/.wonderland-server/0.5-dev/wfs directory. Beneath the wfs/ directory exists two sub-directories: worlds/, which store initial world state and snapshots/, which store the snapshots of world state. Users can find the XML files belonging to a WFS found beneath a directory with the standard -wfs suffix.

Like in 0.4, users are free to edit any WFS found in these directories by hand. The restore link next to each of the entries beneath Initial Worlds and World Snapshots re-reads the WFS and restores the world state to it.

Packaging a WFS in a module

Our module system in 0.5 allows users to package a WFS inside a module; when that module is installed on a server, the WFS is then automatically installed under Initial Worlds to use. This is how we distribute the set of Initial Worlds that you see as part of Wonderland out-of-the-box. Anyone is free to use the module system to distribute initial world to others too, here’s a manual set of steps to follow. (It would be great to be able to "select" a subset of a world and export it as a WFS in a module, but that’s future work). These steps assume you are familiar with Wonderland modules and developer tools such as ant. I’ve included the example module that I put together for this blog: .tar.gz and .zip.

  1. Launch a Wonderland server and client. In the client, assemble a world as you like. I started with an empty world and added the SVG Whiteboard.
  2. In the Web Administration UI, under the Manage Snapshots tab, create a new snapshot. It should create a snapshot beneath the snapshots/ directory, using the time and date the snapshot was created as a subdirectory name. For example, my snapshot is found under the 2009-06-24-14-24-40.86/world-wfs/ subdirectory.
  3. Set up a new, empty module project. (You can take the module I attach above and just replace my WFS). Make sure you edit the my.module.properties file to rename your module (as you see fit) and to point it to your installation of the Wonderland code base.
  4. Beneath the wfs/ directory in the module, copy your world-wfs/ directory. The name of the directory (without the -wfs suffix) becomes the name that appears in the Initial Worlds list. I named my WFS myworld-wfs/ in the example attached above. Also note how the build.xml includes the <part name="wfs" dir="${current.dir}/wfs"/> tag between the <module></module> tags — this tells the build system to bundle everything beneath the wfs/ directory into the module.
  5. To build and deploy the module to the running server, enter ant deploy on the command-line within the module directory.
  6. Refresh the Manage Snapshots tab in the Web Administration UI and notice how myworld-wfs appears beneath the Initial Worlds heading. Clicking the make current link next to myworld-wfs will reset the state of the world to the WFS.

While in this example the module only contains a single WFS, modules may contains multiple WFSs, code, and art work
, just like any module in Wonderland.

Presentations in Wonderland

September 2, 2009

This post is by Drew Harry, our second in the series of intern posts. He’s a PhD student at the MIT Media Lab, working in Chris Schmandt’s Speech + Mobility Group. He’s written previously on the blog about his work on adding Wonderland presence to your buddy list.

Overview / Problem

One of the common uses of audio conferencing is to allow large numbers of remote people to be audience members in a distributed presentation setting. Often, the audio is accompanied with slides. There are a number of problems with this setup that we think an effective virtual world-based presentation system can alleviate. Wonderland provides much richer presence (easier to see who else is present), spatialized audio (more fluid pre- and post-presentation conversations), and a wider variety of media that can be used in the presentation. Indeed, tools like Second Life are commonly used to hold presentations. In our experience, though, existing virtual world presentation systems leave much to be desired. For the presenter, it’s hard to use your avatar effectively while presenting. It’s also difficult as a presenter to get much meaning out of the visuals of the world: much of the visual content of the audience is distracting and irrelevant to the things a presenter cares about like engagement and understanding.

Part of the problem, in our view, is that existing systems try too much to mimic the experience of a face to face presentation. By taking advantage of the flexibility of a virtual world, we think we can design a more interesting and effective presentation experience in Wonderland.

Solution Overview

We designed and built a virtual world presentation system that begins to address some of the shortcomings of other approaches. The theme that ties this system together is spatiality. We try to use the spatiality of the virtual world to create new ways for the presenter to organize a presentation, for the audience members to communicate with each other, and for the audience to communicate with the presenter. In all these situations, an avatar’s location in the world adds meaning to what it’s doing.

We built a modular system, so you can use any of the pieces independent of the full system. You can find all the code for these pieces in the "unstable" section of the wonderland-modules project on java.net.

PDF Spreader

Using Wonderland’s drag and drop system, you can drag and drop a PDF onto the Wonderland window and the PDF Spreader will automatically make an object in the world for each one of the pages. You can right click on any of the slides and edit its layout properties — you can lay them out in a semi-circle or full circle, and adjust their scale and spacing.

By attaching slides to places, we’re implicitly connecting a part of the world and information. This creates an important foundation for the rest of the features of the presentation system. Future versions will also make it easier to bring in non-slide media like models, simulations, or interactive applications.

PDF Spreader

Moving Platform

Now that the slides are spread out in the world, viewing the presentation means moving between slides. You can put your avatar on a moving platform to automatically move from slide to slide in synchrony with the presenter. If you don’t want to move with the audience, you can step off the platform and explore the presentation space independent of the main group.

Moving Platform

Chat Zones

Part of what’s confusing about trying to read a virtual audience is that you can’t tell as much about the connection between people as you can in face-to-face situations. In the virtual world, anyone could be talking to anyone else because being near someone doesn’t have any impact on your ability to communicate with them. With the Chat Zones system, you can easily manage group conversations in a visual way. If you press the “create chat zone” button on your HUD, a small blue circle will appear around you. You can communicate with anyone inside that circle on a special chat channel. When someone enters the circle, it will grow larger to make room for new people. You can also title your group, which people outside the group will see.

If you create a Chat Zone on the Moving Platform, it becomes part of the presentation and will move with the platform so your conversation groups aren’t disturbed as you move from slide to slide.

Chat Zones

Thought Bubbles

Chat makes sense for small groups of people, but it starts to become unwieldy with larger audiences. It’s also really challenging for a presenter to keep track of a chat conversation. There might be lots of interesting comments or questions in the chat channel, but identifying them among the conversational back and forth requires too much attention. To alleviate this issue, we created a system where audience members can leave textual messages at a point in space, and designate them as questions or comments. This non-chat system  provides both a persistent and high visibility way to communicate between the audience and the presenter as well as connecting those messages to a position in the presentation. This helps gauge audience interest in a particular slide both during and after the presentation. (I’ll be switching the rendering of these comments over to Matt Bonner’s excellent annotation rendering that he described in his post.)

Thought Bubbles

Future Work

I’m really happy with the foundation and the vision of the system, but there are a bunch of rough edges that I would like to smooth out. The presenter needs to have a different HUD than the audience to better manage audience thought bubbles while also seeing previews of the current, next, and previous slides.

When we started this project, we wanted to make it as easy as possible for presenters to use existing slide decks. As presenters get more fluent with this new approach to presentation, they could include non-slide content like models and interactive applications and lay their presentations out in non-linear ways. For example, one simple place to start is organizing the slides into groups to show the sections of the presentation. Perhaps not all slides get addressed in the presentation, but the slides create a virtual space about the larger ideas of which the presentation was just one narrated path.

We’re also interested in how to scale up the sizes of audiences in a system like this. One of the benefits of a virtual world is the ability to involve radically more people in the experience than you could get to be in one physical place. The kinds of tools we build will need to deal with the challenges of scale. This design was done with an eye towards scale–Chat Zones make more sense the more people you have –but there are other issues with scale like moderation and access control that we would need to think more about.

Presentation System

%d bloggers like this: