CSCW 2008 Trip Report
Jon Kaplan and I attended the 2008 Computer-Supported Cooperative Work conference (CSCW 2008) in San Diego, CA. last week. Sun was a benefactor-level sponsor of the conference, having donated a dozen computers to run a 3-day long virtual worlds event. This event was run and organized by a crack team from PARC made up of Mike Roberts, Greg Wadley, and Nic Ducheneau (not pictured).
Each day they featured a different virtual world - World of Warcraft on day 1, Wonderland on day 2, and Second Life on day 3. Each morning, one of the organizers ran a tutorial on the virtual world of the day, which attendees paid extra for. In the afternoon, anyone attending the conference could drop in and work through the tutorial materials on their own.
Jon loaned a hand getting some small kinks worked out of the internal Wonderland server setup and the two of us acted as TAs during the tutorial session. There were a total of 10 client machines and two participants per machine. The first part of the tutorial involved exploring the world and using shared apps. The second part of the tutorial involved building a world with world builder and trying it out. Mike had an individual server installation set up on each client machine for this second part, so everyone could start with a completely empty world of their own.
I guess I shouldn't admit to being surprised at how smoothly all this went. Performance was awesome with the local server. The 0.4 software proved to be quite stable. There was not a single crash, or even any noticeably bad software glitches as people stopped, started, and fought for control over every shared app in the world.
This virtual world event was happening in parallel with the rest of the conference. The opening plenary was delivered by Cory Ondrejka, one of the Second Life co-founders. Cory no longer works at Linden Labs, but he talked about how the company got started. His talked focused on how Linden Labs arranged their work environment and he attributed much of the success of the company to the decision to use the software internally for all distributed collaborations. This "eat your dog food" approach is certainly one that the core Wonderland team lives by as well, so hopefully he's right about that being an important ingredient for success.
The rest of the conference was heavily weighted towards social science research, with a number of presenters talking about ethnographic studies (ones in which researchers observe the "natives") of inhabitants of virtual worlds. If you're interested in this sort of thing, all the papers are available in the ACM Digital Library.
Rather than describe in detail papers you can read for yourself, let me instead tell you about the virtual worlds workshop, "Virtual Worlds, Collaboration, and Workplace Productivity," that Jon and I helped to run. The position papers for the workshop are available from the workshop site.
The first session of the workshop involved three fairly in-depth "demos." Jon showed clips from 4 or 5 different Wonderland videos and talked through the compelling parts like extreme extensibility, the ability to connect to external data sources, standards-based scripting, and fine-grained security.
Steve Rohall from IBM did a video demo of a virtual world called Bluegrass that he and his colleagues built using the Torque engine. This world has some interesting features, including using streams of floating bubbles to help users see at a glance where there is activity in the space. There is also nice integration with the corporate directory so you can find out more information about others in-world.
The third demo was also from IBM. Wendy Ark showed how IBM is using Second Life as a "rehearsal" space in their Rehearsal Studio project. By rehearsal, they mean preparing to give a talk or practicing for a consulting engagement. The example she showed involved a training environment for consultants where they modeled a fictitious manufacturing company and had the consultants-in-training work through an entire customer engagement over the course of two days, complete with about a dozen actors playing the role of various company employees. This was quite a compelling application of virtual world technology.
After the demos, everyone participating had a chance to present a quick overview of their position papers. The papers divided nicely between system-oriented papers and research studies. I presented some thoughts we've been having about how to improve virtual world presentations.
The most interesting part of the workshop from my perspective was the discussion afterward in which we talked about what data collection features those studying virtual world usage would ideally want baked into the virtual world software. Here's a summary of the list we came up with:
Where's the activity?
- Number of users over a certain period of time
- Number of simultaneous users over time
- Heat maps showing accurate traffic data
- Record of applications used and for how long
Who's collaborating?
- Avatar locations and proximity to other avatars
- Number of people in "ear shot" of a talking avatar
- Number of times control passes in shared applications
- Number of avatars in proximity to an application being shared
What happened?
- Record of which interactive objects or applications were used
- Automated video recordings of certain spaces
- Record events to play back later and view from different perspectives
If you're interested in virtual world evaluation, I have put this list on a data collection wiki page so others can add to it. What logging, data collection, or data visualization features would you like see built into Wonderland? I also highly recommend reading a paper written by Jonathon Cummings (Duke) and Sara Kiesler (CMU) called "Who Collaborates Successfully?" In this paper, the authors study 500 NSF projects that involve collaborations. The paper includes a framework for evaluating collaborations which I believe is ideally suited to helping us evaluate virtual world collaborations.
Let me end by including a fun photo of my former colleague, Bo Begole (left) and his fellow conference organizer David McDonald, who both did a great job in organizing this smooth-running conference.
iSocial: 3D Virtual Learning
Matthew Schmidt from the University of Missouri-Columbia began participating on the Wonderland forums this past spring. As we often do with frequent posters to our forums, we send them an email asking if they can share what they are working on: this helps us get to know our community better and satisfies our curiosity too. Matt is a PhD student and we found his project inspiring. We've had the pleasure of interacting with him (matty_x on the forums) and his student, Ryan Babiuch (jagwire on the forums) on several occasions. They've made excellent community members. We're delighted to have them author a guest blog, so that all the community can learn about their work. You can also learn more at Matt's own blog: http://xaverse.blogspot.com.
Guest blog contributed by Matthew Schmidt
Introduction to the iSocial Project at the University of MissouriTeam: Dr. James Laffey (laffeyj@missouri.edu), Dr. Janine Stichter (stichterj@missouri.edu), Matthew Schmidt (schmidtma@missouri.edu), Carla Schmidt (schmidtcm@missouri.edu), Ryan Babiuch (rnb42c@mizzou.edu), University of Missouri, 303 Townsend Hall Columbia, MO 65211.
iSocial Web Page: http://isocial.missouri.edu
What is iSocial?
iSocial is a three dimensional virtual learning environment, developed using Sun Microsystem’s Project Wonderland toolkit for creating virtual worlds, for teaching social competence to youth who have been diagnosed with Autism Spectrum Disorders (ASD). The goal of iSocial is to provide learners with competencies that make social participation possible in both virtual and natural settings. To this end, iSocial enables social interaction and provides supports for the development of social competence in a safe, completely controlled environment.
The Three Dimensions of iSocialiSocial is an innovative online system that includes:
- a social space,
- a social competence curriculum, and
- a networked community.
Why iSocial?
Youth identified with Autism Spectrum Disorders (ASD) have deficits in social competence that can lead to problematic social behavior and social isolation. This can lead to a lower quality of life, as well as deficits in other developmental areas such as language and cognition. The iSocial project undertakes research and development to test and advance a set of principles and methods to enable and enhance social interaction for individuals with ASD. The long term aims of the project are to implement a virtual world that supports positive social interaction, enables learning of social competence with transfer to other settings, enables learning of other academic and workforce preparation subjects for youth with social deficits, and supports a community of educators, parents and youth as they address the needs of youth with ASD.
How Might a Youth with ASD Experience iSocial?In the below sections we provide a sample usage scenario, outlining how learners experience a lesson in iSocial.
Two learners log in to iSocial where their online guide is waiting for them. Their avatars appear in the environment and they await instructions from the online guide. (You may click on the images to view them full-sized).
Two students log in to iSocial where their teacher is waiting for them. Their avatars appear in the environment and they await instructions from their teacher. The teacher instructs the students to follow her into the Turn-Taking Lighthouse. This is a building in which all of the instructional materials and interactive activities for the Turn-Taking in Basic Conversation unit of the Social Competency curriculum are housed. The students enter the Turn-Taking Lighthouse and make their way to the foyer, where the first part of all four of the lessons that comprise the Turn-Taking Unit will take place. When the students enter the Foyer area, they are instructed by their teacher to review the posters that are located here. Students review their daily schedule, the rules they must follow during the lesson and the previous lesson that they completed, Sharing Ideas. Once students have finished reviewing the rules, schedule and previous lesson, their instructor opens the first turn-taking activity of the day. This activity is a turn-taking game in which the students must cooperate in order to complete it. Students have a different turn-taking game for each of the four lessons that comprise the Turn-Taking Unit. For today’s lesson, the game is a memory game. Each student gets one turn to try to match the faces, after which the student must let his or her partner take a turn. Turns are managed by students telling each other that they have finished their turn and that it is the other person’s turn. Students offer each other encouragement and hints in order to beat the game. When students beat the game, the plan for the rest of that day’s lesson is displayed. The students discuss the plan for the day with their instructor. The teacher then instructs the students to teleport to the next part of the lesson, where they will work through four curriculum components in four different rooms. The rooms are: Introduce the Skill, Model the Skill, Verbal Practice and Practice Activities. Students begin the lesson by navigating their avatars to the Introduce the Skill room. In this room, their teacher uses a slideshow presentation to introduce them to the skill of conversational turn-taking and discusses the skill with them, answering their questions and providing further explanation where needed. This is an activity that will be repeated for each of the four turn-taking lessons, albeit with different aspects of turn-taking introduced as the students progress through the unit. When the Model the Skill activity is completed, students navigate their avatars to the Verbal Practice room. In this lesson, students review appropriate and inappropriate conversational manners, and are required to produce examples of each. This activity changes across lessons. In the second lesson, students plan a trip to Los Angeles together. In the third lesson, students solve a logic puzzle together. In the fourth and final lesson, students play a role-playing game where they are lost at sea. After the skill has been introduced, students navigate their avatars to the Model the Skill room. This room contains instructional videos that model appropriate turn-taking behavior. Students watch the videos and discuss them with their instructor. This is an activity that will be repeated for each of the four turn-taking lessons, albeit with different conversational turn-taking skills modeled as the students progress through the unit. After students complete Verbal Practice, they navigate their avatars to the Practice Activities room. For this lesson, each student gets to pick one movie trailer that he or she wishes to watch. Student 1 chooses Wall-e. The students watch the movie trailer on the video screen. When the video is finished, the students discuss it. Students are provided with virtual posters that designate their role in the conversation: speaker or listener. The student who chose the film gets to take the first turn as speaker and the other student takes the role of listener. When they are finished, they switch roles. Then the other student gets to pick a movie and they repeat the same activity. When students complete the practice activity, their teacher instructs them to teleport back to the foyer area. When they reach the foyer area, the instructor brings up a window with another turn-taking game for the students to play. For this lesson, students complete a jigsaw puzzle collaboratively. Each student gets one turn to move a piece of the jigsaw puzzle, after which the student must let his or her partner take a turn. As with the first turn-taking game of the day, turns are managed by students telling each other that they have finished their turn and that it is the other person’s turn. Students offer each other encouragement and hints in order to complete the puzzle. When students complete the puzzle, they receive a blue ribbon designating that they have completed lesson 1 of the Turn-Taking Unit. In addition, they are provided with a “sneak peek” of the next lesson. Finally, the instructor discusses the next lesson briefly with the students, and the lesson is completed.Project Wonderland Technical Overview Video
Earlier this month, Jordan wrote about our machinima experiences. Now you can see the results in the new Project Wonderland Technical Overview video. This 8-part video highlights 9 different Wonderland community projects and features all 8 of the Wonderland core team members in Sun Labs.
In the first segment, aimed at a non-technical audience, I take you on a tour of 4 education and 3 business-related Wonderland virtual worlds. Jonathan Kaplan then provides an overview of the Wonderland version 0.4 architecture and sets the stage for Jordan Slott's discussion of extensibility, Joe Provino's description of audio features, Deron Johnson's explanation of Xll application sharing, and Nigel Simpson's account of collaboration-aware applications. The last two segments of the video are devoted to version 0.5. Paul Byrne first provides an overview of the new 0.5 architecture, including two community projects slated for inclusion, and Doug Twilleager ends the program with a preview of the new graphics and avatars systems.
I want to add special thanks to the 9 early adopters in the Wonderland open source community who were willing to share video footage with us to include in this production.These include four education projects:
- Barcelona Memories, Great Northern Way Campus
- Virtual Northstar, St. Paul College
- iSocial, University of Missouri
- Molecule Visualization, Free University of Berlin
Three business-related projects:
- ProjectVS, Applied Minds
- Virtual Academy, VEGA
- 6th Space, Malden Labs
And two significant enhancements to the Wonderland environment:
- WonderDAC (discretionary access control), Tim Wright
- Scripting, Morris Ford
I look forward to compiling another Community Showcase to feature the great virtual worlds and new Wonderland features that many others of you are working on now.
Foundations for a new Whiteboard
In addition to the work undertaken by our interns in Burlingon to create a new virtual team room in Wonderland (as described in last week's blog), we've had the pleasure of working with an intern based in the UK, James Barratt. James worked on a couple of topics: providing a feature to web-upload documents for sharing with shared applications such as OpenOffice; and creating the foundations of a new whiteboard, based on Scalable Vector Graphics (SVG). We asked James to give us some background to the whiteboard; here's his blog:
A new whiteboard application has been developed for Wonderland, which aims to improve upon the existing whiteboard by using the SVG standard, which promises many new capabilities.
Its current functionality, as demonstrated in the following video, allows multiple users to draw text, lines and basic shapes, which may be filled. It is also possible to select individual elements, which can then be moved to a new location or removed from the whiteboard entirely.
In SVG, text, lines and shapes are represented as XML elements, which have various attributes. The ease with which these attributes can be changed provides great scope for future manipulation, including resizing, changing colour and adding transparency. SVG also enables Elements to be grouped.
Using SVG also means the state of the whiteboard could be saved and opened at a later time, or used elsewhere, perhaps displayed on a web page.
To view a video of the new SVGWhiteboard in use within Wonderland please go here, http://screencast.com/t/245k9W5QhH
The source code for the SVG whiteboard is available in the Wonderland Modules Incubator project on java.net.
Mixed-Reality Team Room and GVU Demo Showcase
Last week, Jordan and I returned from a two day trip to Atlanta to visit Georgia Tech. We were there to attend a corporate sponsor event and to meet with Blair MacIntyre, a professor in the GVU Center, and his students. Blair heads the Augmented Environments Laboratory. He and his students are embarking on a Wonderland project focused on prototyping a mixed-reality team room. The goal of the project is to figure out how to design a physical team room and a virtual team room in concert, so that local and remote people can interact as effectively as possible. We had a lively brainstorming session, focusing on various options for how the real world and the physical world should meet. Stay tuned for more details on this project as the Georgia Tech team ramps up and decides on a focus for the project.
The second day of the visit was devoted to an afternoon of demos. I snapped a few photos of the projects we found interesting that had relevance to virtual worlds. Starting with projects in Blair's group, the "pit" was one of the most compelling. This setup involved wearing goggles and walking around an installation. To the naked eye, this installation looks like a green floor surrounded
by wooden planks. It doesn't look in the least bit scary. But put on
those goggles, and suddenly you're standing on the edge of roof looking
WAY down into a room below.
The screen in the middle shows what Jordan and I were looking at, but it does not come close to capturing the sense of immersion that you feel looking down through the goggles. I managed to walk out over the pit onto one of the flat planks, but only after tapping my foot in the "air" to make sure it was really solid ground. Even after doing this, I couldn't quite bring myself to walk on the wobbly plank. Jordan didn't even make it out onto the flat plank! It was quite an amazing illusion.
All of the other augmented reality demos involved handheld devices rather than goggles. The handhelds are used as "portals" which you look through to see the real-life scene augmented with virtual content. In the first demo, they created a space in Second Life and a parallel space on a table in the real world. The space in the real world had some lego blocks in it (below left). These were
modeled in the Second Life space. The Second Life space had some
additional objects. When you viewed the physical space through the
handheld "portal," you could see the extra Second Life objects
superimposed on the physical space (below right). For example, in the close-up below you can see a Second Life character standing on one of the lego blocks and behind that you can see a sign that only exists in the virtual space. As you move the handheld around,
you are panning around both the physical and virtual spaces.
Two other demos involved augmented reality games. In the first (below left), you could move the handheld "portal" over a water scene. When you did this, a boat appeared on the screen that seemed to be floating in the water. You could navigate the boat around the water and look for fish swimming. After you chase down the fish, you can press a button to throw out a line and press the button again to reel in the fish. The other (below right) was an augmented reality board game that used physical playing pieces on a table, which,
when put together, formed a path that virtual characters could drive
on. You could also physically draw on the playing pieces to direct the
action in the game. The monitor in the photo is showing what one of the players is seeing on the handheld screen.
Another demo in this vein used cardboard trading cards printed with characters and special markers. When you look at a single card through the handheld portal, you see the character pop up off the card and dance on top of it in 3D. When a second card is placed next to the first, the second character animates and interacts with the first. I can really imagine kids enjoying this.
In the Computer Graphics lab, there was a demo of motion capture using a full-body suit. You can't see it clearly in the photo below, but the person wearing the body
suit is controlling a stylized avatar interacting with virtual monkey
bars. The live person uses hand and arm motions to climb up a pole and
then grab hold of the bars and swing from one to the other. When he
reaches the last bar, he has to swing his upper body back and forth to
build up enough momentum to swing himself up onto a platform.
Right now, this is done with passive sensors and cameras, but it was fun to imagine the suit with Sun SPOTs instead. I was quite taken with the abstract avatar used in this animation. It looks very similar to the two avatars above that are taken from a different application by this same group. Those interested in avatars and avatar motion might be interested to see other projects from Professor Karen Liu's group.
Two other demos I liked, but that are not directly related to virtual worlds included a tabletop game (below left) similar to twister and an enhanced fish tank (below right). Here they had a live fish tank with a computer next to it. The screen showed video of the live tank with the names of the fish superimposed over the moving video of the fish.
There were other interesting demos as well, which you can read about on the GVU Center's Demo Showcase page.
A Virtual Team Room in Wonderland
For the past eight weeks, Sun Labs in Burlington, MA has had the honor of hosting four teams of interns from Worcestor Polytechnic Institute (WPI) in Worcestor, MA. The Wonderland project had one of the teams: Joshua Dick and Gerard Dwan, both seniors at WPI. For those who have been inside our MPK20 demo building, our "team room" is quite sparse: besides some pretty graphics, there is in fact, nothing in it. Josh and Gerard's project was to think about what might go in this team room specifically to support the activities of students in the software engineering class at WPI, and build some components to realize that vision. Curious what they came up with? Well, Josh, Gerard, take it away...
Guest blog contributed by WPI Students Joshua Dick and Gerard Dwan. You may watch a video demo about this blog at http://www.youtube.com/watch?v=IrahHyFTDWA&fmt=18.
A Virtual Team Room
We, Josh and Gerard, are seniors at Worcester Polytechnic Institute (WPI) who have been developing components for Project Wonderland for the past two months, as part of our senior project. This post is adapted from a presentation that we gave at Sun Labs after completing the project.
WPI offers a course called Software Engineering, which allows students to emulate working on a team in the software industry. In the course, the professor defines a project for the class, and students form (competing) teams to work on that project. During team meetings, students brainstorm, assess tasks, evaluate their progress and (of course) code! It is the team meeting aspect of this course that our project aims to improve.
Students don't always have the proper accommodations to conduct meetings. Students come from all over campus, there are (at times) no places to meet, and scheduling is often part of the problem. Using a virtual team room could potentially eliminate all of these issues. Throughout the project, we had a vision of a Virtual Team Room in Wonderland. The Virtual Team Room is a place where students taking WPI's Software Engineering course can meet to collaborate in a 3D space 24x7. They can assess how their team is progressing as well as plan for the future. In addition, course faculty can easily monitor student activity and progress, while offering students relevant advice. Our virtual team room could make use of components that are already built in to Wonderland: things like its phone and voice capabilities, white boards, and PDF Viewers.
So, we started brainstorming ideas for new components that could address our particular set of problems. We thought of things like a virtual library for all of the required reading/on-line materials, task orbs to show project progress, and other (more crazy) ideas.
HTML Viewer
The first component that we decided to move forward with is the HTML Viewer, which was our 'training wheels' project that we used to get comfortable with developing for Wonderland. The HTML Viewer can display web pages in a way that is far more lightweight than the way it is currently done in Wonderland, with no dependencies on external web browsers/X11. It displays single web pages as an in-world poster, displaying the latest Hudson build statistics or other information in the team room.
The HTML viewer is simple to use, and works similarly to Wonderland's existing PDF Viewer. (Incidentally, the HTML Viewer is based on the PDF Viewer's code.) Users can open web pages, zoom in and out, and refresh pages in their local Wonderland client by using the appropriate HUD buttons. Like the PDF Viewer, the HTML viewer can also be toggled between synchronized and desynchronized modes using the appropriate HUD button. When a page is opened in any client that is in synchronized mode, all other clients that are in synchronized mode begin to render that same page. When in desynchronized mode, a client can open a new web page independently (without affecting other clients,) and can then resynchronize at a later time to see whatever page everyone else is currently seeing. It should be noted that all web page rendering is done on each Wonderland client locally, rather than on the Wonderland server.
We feel that our lightweight HTML viewer is valuable both for our vision of the Virtual Team Room, as well as for Wonderland in general, in situations when a full-featured web browser is unnecessary to simply display a web page passively.
Here are some features we would have liked to add to the HTML viewer if we had more time to work on it:
- 'Web browser-like' behavior with clickable links
- Panning/scrolling of web sites, possibly using mouse dragging
- Refreshing the currently dipslayed web site on a timer, automatically (The current HTML Viewer does have a manual refresh feature.)
We spent a total of two weeks working on the HTML viewer from start to finish.
WonderBlocks
After completing the HTML Viewer, we removed our aforementioned training wheels and did some more brainstorming, considering components that would uniquely utilize Wonderland's 3D space. We came up with an idea that we decided to call WonderBlocks. At first we wanted WonderBlocks to be a utility to display tasks and their dependencies inside the Virtual Team Room. Over time, however, WonderBlocks evolved into a 3D diagramming and data visualization tool for Wonderland. WonderBlocks can be used to display any kind of relational data, from tasks and their dependencies to Flickr tag clouds.
WonderBlocks' current functionality is accessed through its HUD, which is triggered either by clicking any Block or connection, or by simply walking up to the WonderBlocks in-world. There are buttons in the HUD for:
- Creating Blocks, which can be assigned a name, color, shape, size, and position.
- Creating connections between Blocks, which can be assigned a name and direction. When in Connect Mode, click two Blocks in succession to connect them.
- Editing Blocks and connections, which allows the user to change the properties that were assigned to the Blocks/connections when they were first created. When in Edit Mode, click any Block or connection to edit it.
- Deleting Blocks and connections. When in Delete Mode, click any Block or connection to delete it. Deleting a Block also deletes any connections it's associated with.
The HUD is always manually dismissed by the user by clicking its close button, no matter how the HUD is initially triggered. This way, the user can easily manipulate WonderBlocks from any angle and distance, without the HUD automatically vanishing.
In the future, we hope that Wonderland developers will utilize and continue to to improve WonderBlocks. Our ideas for expansion include:
- Changing the 3D drawing method for scalability. Right now, whenever the diagram changes, the entire diagram is redrawn, rather than only the parts that changed. This may be slow for very large diagrams.
- 'Prettier' connections utilizing Java3D cylinders rather than unshaded lines.
- Custom metadata for Blocks / Connections. Right now, the only data that can be associated with WonderBlocks components is the data we outwardly present to the user (color, shape, size, etc.) It would be nice to be able to hover over a Block or connection and see custom, user-assigned data associated with that Block or connection.
- The ability to drag Blocks in Edit Mode.
- All user-triggered changes to WonderBlocks diagrams are logged by both the Wonderland client and server, using a consistent format. If some sort of log parser were to be written, Software Engineering course faculty could easily see how students are actually using WonderBlocks, and potentially gauge their work.
- The ability to create different views of the same data. If WonderBlocks is being used to display project tasks, for example, it would be nice to be able to arrange the diagram by completion status, by deadline, or by owner. This ability largely depends on idea 3 being implemented first.
- Use WonderBlocks with external data sources.
About idea 7: Currently, WonderBlocks can be used to manually construct 3D diagrams. However, we've taken steps to ensure that WonderBlocks can eventually be used to visualize preexisting data from elsewhere. Picture these potential uses:
- WonderBlocks could potentially connect to Facebook and log into someone's account, and create a 3D diagram of their Facebook friends and the connections between them.
- WonderBlocks could connect to the Flickr photography web site, and generate a diagram representing Flickr tags and their relationships (similar tags, etc.) Perhaps clicking on a WonderBlock could display photos associated with the tag (or group of tags) that the Block could potentially represent.
- For our original vision of the Virtual Team Room for Software Engineering students, WonderBlocks could connect to the SourceForge software development management system and create a diagram of project tasks and their corresponding dependencies and status. Maybe Block shape could represent task type/category, and Block color (green, yellow, and red in this case) could represent completion status of a task.
As you can see, there is a very wide range of possibilities and uses for WonderBlocks.
We spent about five weeks working on WonderBlocks from start to finish.
Summary
The HTML Viewer and WonderBlocks are the two components that we created to work towards our vision of a Virtual Team Room in Wonderland. We feel that both components are valuable contributions to the Wonderland community, and we hope that they'll both be used and expanded upon in ways that we never imagined.
The source code for the HTML Viewer and WonderBlocks are available at the following locations in the Wonderland Modules Incubator Subversion repository:
- https://wonderland-modules-incubator.dev.java.net/svn/wonderland-modules-incubator/trunk/src/modules/apps/2d/htmlviewer
- https://wonderland-modules-incubator.dev.java.net/svn/wonderland-modules-incubator/trunk/src/modules/apps/3d/wonderblocks
AN IMPORTANT NOTE: There are free libraries required for the HTML Viewer that are not included the repository because of licensing issues. Please see the README file in the HTML Viewer repository for more information.
Machinima
Machinima (or /məˈʃɪnəmə/), a Portmanteau of machine cinema, is a collection of associated production technique whereby computer-generated imagery (CGI) is rendered using real-time, interactive 3-D engines instead of professional 3D animation software. -Wikipedia
Over the past couple of weeks, we've (well, mostly Nicole actually) spent a fair bit of time generating some machinima (the group here at Sun Labs is generating a video for an internal review that happens at this time each year). We decided to give a technical description of Wonderland in Wonderland--the team members as avatars talking about their part of the project. It turned out to be about 40 minutes long, where each team member spoke for about 5 minutes each. Much credit (as always) is also due to the community: we gratefully included snippets of worlds that folks like yourself have created. (And yes, we are hoping to release this video to the public, stay tuned).
Machinima requires some very unique skills that we had to develop. I'm still not sure I'm very good at this myself, but I wanted to at least share some experiences.
Camera ClientIn our movie, we wanted our characters to face the camera and speak (so the camera perspective is in the third-person) -- this is a problem if you simply do a "movie capture" of your screen, because you'll always see the back of your avatar's head! To capture an avatar facing the camera and speaking, we need to use two clients: one as the avatar and one as a camera. Here, the 'c' key to control the camera view is really useful: this hides the avatar for the camera client so the speaker is all that you'd see. Since we want the avatar to appear large on the screen, we found adjusting the viewing angle helped: typically we used viewing angles between 40 and 60 degrees. All of this is in fact the purpose that Bernard's Movie Recorder serves--it's a specialized client that lets you shoot movies in third-person. For the times when you truly wish to capture the scene in first-person (seeing the back of your avatar's head), then a "movie capture" of your normal Wonerland client is what you'll use.
Having the camera move during filming was also challenging: despite being able to control the speed of motion with the '+' and '-' keys, I found the movement to be somewhat jerky at times and difficult to control effectively. Often times I had to practice the movement several times before getting it right. (As I'm writing this I'm realizing the scripting work by community member Morris Ford may really help out here -- a "movie camera motion" script could control all of this. I'm not sure if this violates the spirit of machinima though where each participant should be controlled by a live human!). We often had to shoot the movie in short segments at a time--needless to say there was a lengthly post-processing editing step in Final Cut Express.
That leads me to my next point: placemarks were extremely useful and solved the issue of the director's cry "places everyone". Especially when filming a complex scene, it was imperative for all actors to be able to start at the same location over and over again, particularly when these scenes were spliced together during the final editing step.
AudioDistance attenuation is a great feature in Wonderland, except when trying to film a movie! Since we recorded the audio from the camera client, the volume of the audio depended upon the distance between the camera and the speaking avatar (not to mention the audio gain of the speaker's microphone). This means the audio level can fluctuate greatly, not really a desired effect in a movie. Take for instance, the picture below, where the camera starts out far away from my avatar and zooms in over time. In this case we had to record the audio track separately from the video track, where we kept the distance between the avatar and camera fixed to record the audio track. Actually, the audio levels have proved to be quite a challenging aspect of doing machinima in Wonderland.
Avatar Expressiveness
Our current avatars are noticeably expressionless, although they do naturally sway a bit. The only indication that an avatar is talking is their name flashing above their head. This indication was as important for machinima with a single avatar present as it is when trying to distinguish who is speaking amongst a crowd of avatars. Even with this indication, a scene with a stationary avatar speaking can get boring after a while, so motion is very important as Nicole discovered. Here's where some editing and splicing of scenes from different perspectives becomes very important. What would be even better is if we could have multiple invisible, motion-scripted cameras filming a scene at the same time.
Conclusions?Overall, I'm not certain you'll see a major motion picture filmed in Wonderland anytime soon, but we were pleased that we could film 40 minutes worth of cinema in it. Certainly our brand new avatars in v0.5 will help a great deal in making our characters more, well... charismatic.
A great community project would be to enhance Wonderland to make machinima easier: clients could support both first and third-person points of view. This comes easier in v0.5 which lets you attach your client camera to any attach point in the world, not just the several camera positions possible in v0.4 today. You should also be able to "turn off" audio attenuation similar to how the Cone of Silence operates: all avatars within a certain radius are set to full volume. And finally, although it may violate the spirit of machinima, I'm looking forward to how scripting can help us automate the camera motion throughout a scene.
Using a Sun SPOT to control a Wonderland Client
I thought I'd bring to your attention some work we've done to get the Sun SPOT and Wonderland working together. Last year we made available the source code for users to be able to use a Sun SPOT as a controller--using the accelerometer in the Sun SPOT to guide your avatar. However, to be frank, the code was very well hidden.
So, we've updated the code and added the ability to control some primitive avatar gestures, using the switches on a Sun SPOT. I can imagine that this doesn't necessarily sound terribly impressive, but... the reason we're pursuing this is that some of our colleagues in the MiRTLE project at the University of Essex in the UK have been working on connecting a combined thumb-sized 'bio-sensor' to a Sun SPOT. Here's an illustration of an early prototype, connected to a rev B Sun SPOT. (The bio-sensor combines a galvanic skin response sensor, a temperature sensor and an infrared pulse sensor.)
The goal is to use the bio-sensor to sense the user's emotional state (in terms of arousal and valence) and then use that information to change the appearance/posture/movement/etc of your avatar. And why would we want to do this? Well, we think that one of the current problems with using VWs for education is that there's no implicit non-verbal communication (other than requiring users to explicitly type emoticons and the like). Our hypothesis is that we can replicate some of this non-verbal communication using this kind of technology.
Oh, and we've updated the source code and tidied it up so everyone can use it. Check out the sunSpot directory of the CVS repository in the Wonderland Incubator project. And to see it in action, take a look at the video.
Thanks to our colleagues Xristos Kalkanis and Malcolm Lear in the Department of Computing and Electronic Systems at the University of Essex for their help.
Uploading documents for Shared Applications
By default each document will be uploaded to a directory named sharingUpload contained within the .wonderland directory of the user that initiated the shared applications (you can change that setting in the web.xml file). Applications such as Open Office expect to find documents in the user's Documents directory, so to enable easy access to the document upload directory from shared applications such as Open Office, we suggest that you add a soft link to it from the user's Documents directory, as follows:
cd ~/Documents ln -s ~/.wonderland/sharingUpload
New Article published on MiRTLE
Those of you who have been following our 'Mixed Reality Teaching & Learning Environment' (MiRTLE) will be interested to hear that we've just published a paper on MiRTLE in Hybrid Learning and Education of Lecture Notes in Computer Science. If you (or your institution) has access to this publication, you may view the article at: http://dx.doi.org/10.1007/978-3-540-85170-7_5. There's more information about the project at its wiki page.
Flickr Friday
Unlike other virtual worlds, Wonderland is written entirely in Java, so we have access to a vast library of Java classes and applications with which to extend the world. The Music In Wonderland demo is a great example of how we were able to create a mashup of a web service (magnatune.com) with a compelling 3D audio/visual visualization. This is just the start. Many community members see the potential and are busily designing and building their own virtual world applications.
These applications are really exciting, and are certainly dynamic, but what about the world itself? What can we do to make the world itself more compelling?
One of the things that has always bothered me about the MPK20 world is that the art on the walls and the standalone posters is baked into 3D models. If you want to change a picture you need a 3D modeling tool. That's unreasonable. Users ought to be able to control attributes of their world, such as wall art, without having to get under the covers and learn a sophisticated 3D modeling tool. What we need is a "poster" app which you could just click on to change the picture.
SerendipityI was talking to a member of the Wonderland community recently and she asked me how difficult it would be to integrate a web service with Wonderland. This got me thinking. Maybe I could build a poster app by integrating with a web service?
I knew that Flickr has a web service API, so that seemed like a good place to start. The first step would be to build a Java wrapper for the Flickr web service. It turns out that there's already one, called flickrj which provides a nice Java abstraction for the Flickr RESTful web service.
Next, I'd need a way to render an image onto a 3D object. Fortunately, Wonderland provides an application framework for 2D applications (check out AppWindowGraphics2DApp). This framework is used by Wonderland's collaborative apps, including the PDF Viewer, Video Player and VNC Viewer. It provides a 2D canvas you can draw on, a frame (complete with a window border), and event handling that maps 3D events onto a 2D coordinate system. And just like Swing, the framework provides convenient paint(Graphics2D g) and repaint() methods. As a Wonderland 2D application developer, all of the tricky 3D stuff has been taken care of for you by the framework. All you have to do is write the application logic and figure out how to render your data in 2D.
Typical developer!Ooops! Like many developers I started answering "how?", not "what?"
So, to answer the "what?" question, here some back-of-the-envelope requirements I had in mind for the poster app:
- it should look like a framed picture (not like an application with a big red/green frame)
- users should be able to search for new images and choose which one to display
- it should be able to display an image anywhere in-world (it's not statically baked into a 3D model)
- users should be able to use the app for slide shows
- everyone should see the same images as everyone else
- if you load an image and log out, the image should still be there when you log back in again
Wonderland already has an application that fulfills many of these requirements: the PDF Viewer. On the surface, the only difference is that the poster app shows images, whereas the PDF Viewer shows pages of a PDF document.
Starting with the PDF Viewer and with the help of flickrj I had an application capable of displaying images from Flickr within a day (drop me a note if you'd like to learn more about how I did this).
As I explored the flickrj API, I discovered a rich set of interfaces for querying Flickr and retrieving images. I chose to support several ways of searching for images:
A Flickr search can return multiple pictures, so I needed a way to display the results. I decided to display the images in a grid:
If you click on an image in the grid then that image is displayed full
size:
and if you click it again, you toggle back to grid view.
Getting more dynamicI now had an application that did everything on the requirements list, but I wanted something that would make the application more dynamic. While browsing the flickr API documentation I discovered the ability to search for recently changed pictures. If you go to flickr.com/photos and keep refreshing the page you'll see the latest pictures that people have uploaded. I was astonished to learn that Flickr gets thousands of images uploaded every minute. Last time I looked it was about 5,000 images per minute. That's over 80 images per second! I was hoping to display all the images as they were uploaded, so you could see Flickr's "heart rate", but this proved impractical. Even if you had the bandwidth to download 80+ images a second, all you'd see would be a blur. So, I added a new feature, which was a timed search, which displays the most recently uploaded image every 5 seconds. This turned out to be a really compelling feature. It's quite addictive to watch pictures being uploaded and not knowing what you'll see next.
This application definitely satisfied my desire to bring "dynamic, interactive and customizable" content into Wonderland. I was quite surprised how compelling it was just to add new art to the world.
If you're curious to see the app in action, check out the video.
The source code is checked into the wonderland-modules-incubator project:
https://wonderland-modules-incubator.dev.java.net/source/browse/wonderland-modules-incubator/trunk/src/modules/apps/2d/flickrshow/
If you want to use it, you need to obtain your own Flickr API key. Here's a good place to start:
http://developer.yahoo.com/flickr
The Flickr API key goes in the WFS file. Where else? ;)
We're really collecting a nice collection of apps in the incubator project, including Jordan's auto-teleporting Portal app, the Batik SVG browser I built, and the hot off the press HTML Viewer that our WPI interns are building. Come join us in our wonderland-modules-incubator sandbox and show off your 2D and 3D Wonderland applications!
Wonderland 0.4 Released!
After more than 8 months of work, the Wonderland team is happy to announce our 0.4 stable release. You can find the release here:
This release is focused on adding new applications and capabilities to the existing Wonderland platform, including:
- New multi-user applications: PDF viewer, video player, VNC viewer
- Enhanced audio connectivity with dial-out and dial-in
- Web based administration, including a web-based world builder
- Major stability improvements, especially in larger worlds and with shared applications
A web browser for Wonderland
In Sun Labs, we know the summer is really ending when our intrepid interns start heading back to school. This year is unfortunately no exception, and our current intern Antonio, is heading back to New Mexico. While we have more interns starting soon, we are certainly going to miss Antonio. Before he leaves, we've asked him to post an update on his work this summer. This guest post was contributed by outgoing intern Antonio Arredondo, a PhD student in computer science at New Mexico State University.
Today completes my internship at Sun Microsystems on Project Wonderland. I was tasked with creating a low-end client for Project Wonderland, and that is what I have accomplished (a working version).
I took the Web 2.0 approach of creating a AJAX application that would interact with the Wonderland server, via a web server (Glassfish/Tomcat). I started by looking for a AJAX framework that worked with Java, and found DWR. This project allowed me to use Comet (long lived connections) to send information between my web client and the Wonderland server.
Once the communication framework was chosen, I created a simple web page that would handle the map view. The map view uses the idea of having a over-head view of the world, and placing an icon to represent each person logged in. As the person moves, the icon gets updated to the new position.
Once this was finished, I decided that making a mobile version would be an easy extension. The mobile version consists of making the map view fill the entire web page, while keeping the menu at the very top. I was able to accomplish this by writing specific CSS and Javascript for the mobile browser, while maintaining as much common code for both desktop and mobile browser.
Wonderland has now become more accessible to those users that do not currently have the necessary 3D hardware to run the GUI client. The web client, both desktop and mobile version, represents another step in Project Wonderland's goal of providing a scalable multi-user environment. If you would like to try it out, you can check it out for yourself. Just check out the lg3d-wonderland and wonderland-modules source using the "webui" branch.
I want to thank Sun Microsystems for the opportunity along with Nicole, Paul, and the rest of the Project Wonderland Team.
A Virtual Academy In Wonderland
It seems like it is nearly every day that we learn about a group using Wonderland in a novel way -- and today's guest blog entry by Chris Harris from VEGA is no exception. In one aspect their work, they control the appearance of a 3D model airplane inside Wonderland by an application that runs externally. Well, I'll let Chris say more about it...
Guest blog contributed by "A Virtual Academy" principal training designer Chris Harris from VEGA
A Virtual Academy in WonderlandAs a provider of bespoke training solutions, VEGA has a reputation for delivering solutions that save money, improve capability, and transform training. One of the services that we provide at VEGA is the creation of training material, from straightforward PowerPoint slides right through to high fidelity simulations. Our clients are regularly talking about, and experimenting with techniques to deliver this training remotely. While our existing technology already allows remote delivery, there is a lack of classroom atmosphere and instructor-student and student-student relationships can suffer. One way to overcome these problems involves a virtual academy: a meeting place in a virtual world where the training can take place in a collaborative way. (Read about our vision here).
Free-Play SimulationsWhen you're learning how to fly a satellite or maintain a fighter aircraft, it can be difficult to get your hands on the real thing. The people who operate them tend to be wary about letting some newbie play around with millions of dollars of high-tech hardware. That's understandable, but it makes training the next generation of scientists or technicians difficult.
Here at VEGA, our solution is to produce a simulation of the equipment instead. This is a computer program that runs on a standard desktop PC. It behaves in the same way as the "real thing" so the learner gains the experience they need in operating controls, following procedures, or diagnosing faults. This approach has many advantages. For a start, a simulation is much less expensive to provide to your students. If you need to do so, you can give each student their own system. You don't need to try fitting the real equipment in the classroom, and it's far easier to move a computer down the hall than it is moving a satellite or a gas turbine engine. If the learner does something that breaks the simulated version of the machine, you just start over.
Virtual World and Training Simulation ParallelsWhen I first started finding out about virtual worlds like Project Wonderland, I saw a lot of parallels with the simulation approach. Each user moves around in a world which behaves in much the same way as the "real thing." People gain experience from their activities in virtual worlds like they do in real life. What happens in a virtual world can be as far-removed or as faithful to reality as it needs to be. Each class can have their own "room" - which can be any environment you can think of. And like simulation, creating and travelling to a virtual world keeps your costs down: you can get your students working together in a virtual classroom, even if they are on different sides of the Atlantic.
If the two approaches had all these things in common, what would it be like if we combined them? VEGA is always looking for ways in which new technology can help our clients. After chatting to my colleagues Darren Harvey and Bernd Hoehner, we started working on a way to link our simulations to objects within a virtual world. We picked Wonderland for a number of reasons - I'd seen Rupert Key talk about the project at Virtual Worlds Europe in London in 2007; it's open source, which means we could look at the code; and it's written in Java, which meant our programmers could get to grips with things quickly.
Project WonderlandAlmost immediately, we were using Wonderland as a venue for virtual meetings between our offices in Bristol and Welwyn Garden City in the UK. Other people in the company noticed, and interest grew quickly.
While the avatar system on Wonderland 0.4 is customisable and easy to use, the results seemed to be too cartoon-like for many of our potential users. We found that a lot of people we showed it to asked if it would be possible to make their avatars look like them. We came up with a simple solution which added a larger head over the top of the Wonderland avatar. We then mapped a specially prepared bitmap on to this object to give us a fairly convincing representation of the real person. I was surprised how important head shape is when you're trying to make an avatar look convincing. People's heads come in many different shapes and sizes, and "one size fits all" really isn't good enough when you're aiming for a realistic presence in-world. Having said that, the results we came up with in a very short space of time are perfectly recognisable versions of my colleagues. Still, we’re looking forwards to getting our hands on the new avatar system in version 0.5!
If you're involved in training, you've probably come across Learning Management Systems (LMSs). When we set out to build our virtual academy, we initially thought of it as an LMS you can walk around inside. We customised the environment and provided a set of formal classrooms which could be used for training sessions, with an entrance lobby that would help direct students to where they needed to go.
But as we worked with Wonderland, we expanded our approach. We added equipment models to the main hall, and enlarged the collaborative working areas so users could get together to share information and plan activities.
Most importantly, we wanted to see if our simulation technology would fit inside the Wonderland environment. Would it work? Would it be useful?
Virtual Academy Demonstrator in Project WonderlandIn a short time frame, Bernd had imported one of our aircraft models into a classroom in Wonderland and linked it with a basic aircraft simulation running as a separate application on a simulation server at our company headquarters.
A window in Wonderland displays the user interface: an aircraft cockpit and controls. The simulation models the behaviour of a combination of systems including the hydraulics, fuel, avionics, engines and so on. Meanwhile, the aircraft model in Wonderland is passed the current state of various simulation parameters and responds accordingly.
To put this more simply: if you move the landing gear lever in the simulation, the wheels on the Wonderland model will go up or down. Push the stick, and the ailerons move. Kick the pedals, and the rudder responds. It was a great moment seeing this happen in the virtual world we had created, and everyone we showed it to got excited about it too. The next thing I knew, we were demonstrating it at the annual ITEC show in Stockholm, Sweden - and the reaction there was extremely good.
We continue to use Wonderland for meetings, and I'm regularly asked to demonstrate our virtual academy to visitors. Given my experiences so far, I'm convinced there's a strong future for the technology, and I'm looking forwards to seeing what future releases of the project bring us!
Chris Harris
Principal Training Designer
VEGA
Project Wonderland v0.4 - Release Candidate 1
The Project Wonderland team is pleased to announce Release Candidate 1 of Version 0.4. This release represents a near-final version before the official v0.4 release is made. Community members are invited to download and test this version and report back any problems they find!
- Download Release Candidate 1 Binary
- Get the Source
- User's Guide
- Documentation Wiki
- Discussion Forums
The Release Candidate 1 of Version 0.4 adds a number of new features over Version 0.3, including enhanced audio and telephony support, a PDF viewer, VNC viewer, video player, cone of silence, microphone platform, whiteboard, and in-world audio and video recorders. Release Candidate 1 of Version 0.4 also adds support for several new gestures (nodding, waving, and pointing) and also a single web page for launching the Wonderland client and world builder.
Enjoy!
How to set up a shared Wonderland server
This week we've been doing final testing before our Wonderland 0.4 release (the last few bugs are always the hardest). To test the binary releases, I've been setting up the Wonderland server every day for our group. I feel like I have a decent recipe going, which I thought I'd share with anyone else out there who wants to set up a Wonderland server.
What you needThe goal is to install the Wonderland server and web administration on my local Solaris server. (Note: the instructions for Linux should be identical, except using the Linux binaries instead of the Solaris ones). Once I do that, everyone on the team will be able to launch the client via Java Web Start. No installation required!
If you'd like to try it yourself, you'll need a Linux or Solaris server, a remote login to the server, and about 1GB of free disk space.
Download the softwareI start out by logging in to my server (dstar3) and creating a directory to put the Wonderland code in. Since this particular setup is for a demo, I'll call the directory "demo":
[laptop ~]$ ssh jkaplan@dstar3.east.sun.com [dstar3 ~]$ su Password: [dstar3 ~]# mkdir -p /export/home/wonderland/demo [dstar3 ~]# chown -R jkaplan /export/home/wonderland [dstar3 ~]# exit [dstar3 ~]$ cd /export/home/wonderland/demoIn this case, I'm creating a directory in /export/home, and changing it to be owned by my user. A better option would be to create a new user for Wonderland, and do the installation as that user. In either case, you can install in any directory you have write permissions to. You'll just need to update the paths for the WFS root in the instructions below.
(Linux note: most Linux distros don't let you directly do "su". Instead, replace the command done as root with a call to "sudo", for example: "sudo mkdir -p ...").
[dstar3 demo]$ wget http://download.java.net/lg3d/wonderland/daily+voice/2008-07-30/lg3d-wonderland+voice-0-4-0-daily-solaris-i86pc-20080730.zip 13:08:16 (419.82 KB/s) - `lg3d-wonderland+voice-0-4-0-daily-solaris-i86pc-20080730.zip' saved [145567905/145567905]
Note that these directions assume a very recent build, preferably 20080730 or later.
Next I download the Wonderland.war file for web administration:
I chose the bigger one (with local artwork) so I can be sure everyone will get the same art:
Finally, I downloaded the Glassfish application server, which I will use to host the web administration:
[dstar3 demo]$ wget http://java.net/download/javaee5/v2ur2/promoted/SunOS_X86/glassfish-installer-v2ur2-b04-sunos_x86.jarNow I have all the pieces I need:
[dstar3 demo]$ ls -l -rw-r--r-- 1 wonderland other 202974858 Jul 30 13:52 Wonderland.war -rw-r--r-- 1 wonderland other 64375686 Apr 11 23:10 glassfish-installer-v2ur2-b04-sunos_x86.jar -rw-r--r-- 1 wonderland other 145567905 Jul 30 04:54 lg3d-wonderland+voice-0-4-0-daily-solaris-i86pc-20080730.zip Install the Wonderland serverNext step is to set up the Wonderland server. First I unzip it: [dstar3 demo]$ unzip lg3d-wonderland+voice-0-4-0-daily-solaris-i86pc-20080730.zip Archive: lg3d-wonderland+voice-0-4-0-daily-solaris-i86pc-20080730.zip creating: lg3d-wonderland/ ... The next step is to edit the my.run.properties files with the right values for my server: [dstar3 demo]$ cd lg3d-wonderland [dstar3 lg3d-wonderland]$ vi my.run.properties ... # # Set the hostname to be used for outbound socket connections. # Java finds it hard to figure this out automatically. This is used by the voice bridge # and the X app sharing s/w for making outbound socket connections. # wonderland.local.hostaddress=dstar3.east.sun.com wonderland.wfs.root=file:/export/home/wonderland/demo/lg3d-wonderland/worlds/demo-wfs wonderland.art.url.base=http://dstar3.east.sun.com:8080/Wonderland/art
The values I change are:
- local.hostaddress - the address of the Wonderland server, which is the same as the address of the web server in this case.
- wfs.root - the location of wfs files to load in this world. The demo world is a cleaned up version of the MPK20 space, with content like PDFs loaded off the internet. It also has two additional spaces: a lecture hall with PDF and video and a playground for the world builder. You can change the settings for this world by editing the wfs file in the demo-wfs directory.
- art.url.base - where the clients will download artwork from. In this setup, clients download the artwork from the deployed Wonderland.war file. This enables advanced features like art upload.
The server is now configured! To make life easier, I wrote a little script to launch all the separate pieces of the server. I put this in the lg3d-wonderland/bin directory:
[dstar3 lg3d-wonderland]$ vi bin/wonderland-all.sh #!/bin/bash echo "Starting Voice Bridge" ./bin/wonderland-bridge.sh > wonderland-bridge.log 2>&1 & sleep 15 echo "Starting Wonderland Server" ./bin/wonderland-server.sh > wonderland-server.log 2>&1 & sleep 15 echo "Starting Server Master Client" ./bin/wonderland-smc.sh > wonderland-smc.log 2>&1 & echo "Wonderland started"To run the server, I just need to make the script executable, and then run it. It will automatically put all the Wonderland server processes in the background:
[dstar3 lg3d-wonderland]$ chmod +x ./bin/wonderland-all.sh [dstar3 lg3d-wonderland]$ ./bin/wonderland-all.sh Starting Voice Bridge Starting Wonderland Server Starting Server Master Client Wonderland startedOnce the server is running, you can check the log files in the lg3d-wonderland directory if anything doesn't work right:
[dstar3 lg3d-wonderland]$ ls *.log wonderland-bridge.log wonderland-smc.log wonderland-server.log Configure Wonderland.warNow that the server is all set, it's time to turn to the client. I want to launch the client via Java Web Start, so users can just click on a link to run the latest version of Wonderland. To do this, I need to deploy Wonderland.war to a web container. Before I do that, though, I want to make a few quick changes to the .war file to configure it the way I want.
To make changes to the .war, I am going to uncompress the config files I want to change, modify them, and then update the war with the new file. The three things I want to change are to change the location of the WFS files to match the value I setup in the server above, to add new default placemarks for the lecture hall and world builder area, and also to enable developer features so users can reload the world after we make changes with the world builder.
First, I unpack the files we want to change from the war file I downloaded into a temporary directory:
[dstar3 lg3d-wonderland]$ cd .. [dstar3 demo]$ mkdir war [dstar3 demo]$ cd war [dstar3 war]$ jar xvf ../Wonderland.war WEB-INF/web.xml app/config-webstart/PlacemarkConfig.xml app/Wonderland.jnlp inflated: WEB-INF/web.xml inflated: app/Wonderland.jnlp inflated: app/config-webstart/PlacemarkConfig.xmlThen I edit the web.xml file to put in a WFS path that matches the one I put in to the my.run.properties file:
Now I copy over the placemarks file with the placemarks for the default world. If you want to change placemarks the user will see, this is the time to do it. Just edit that PlacemarkConfig.xml file after you copy it:
[dstar3 war]$ cp ../lg3d-wonderland/worlds/demo-wfs/PlacemarkConfig.xml app/config-webstart/Next I edit the Wonderland.jnlp file to enable developer features:
[dstar3 war]$ vi app/Wonderland.jnlp ... <property name="sun.java2d.noddraw" value="true"/> <property name="wonderland.experimentalfeatures" value="false"/> <property name="wonderland.developerfeatures" value="true"/> ...Then I can update the war file with the updated configuration files:
[dstar3 war]$ jar uvf ../Wonderland.war . adding: app/(in = 0) (out= 0)(stored 0%) adding: app/config-webstart/(in = 0) (out= 0)(stored 0%) adding: app/Wonderland.jnlp(in = 4223) (out= 1157)(deflated 72%) adding: app/config-webstart/PlacemarkConfig.xml(in = 3118) (out= 501)(deflated 83%)And finally clean up my temporary directory:
[jkaplan@dstar3 war]$ cd .. [jkaplan@dstar3 demo]$ rm -rf warThere are lots more things you can configure in Wonderland.war, like the directories it uses to store artwork and WFS. To see a full list, see the web administration docs.
Install Wonderland Web Admin in GlassfishFinally, I need to deploy the newly configured Wonderland.war file to a web container. I'm going to use the Glassfish container I downloaded earlier, although you should be able to use Tomcat or Jetty if you prefer.
Installing Glassfish can be done in two easy steps. Step one is to unpack the distribution file:
[dstar3 demo]$ java -mx768M -jar glassfish-installer-v2ur2-b04-sunos_x86.jar ... Accept or Decline? [A,D,a,d] A installation completeStep two is to run the setup script to configure Glassfish. The Glassfish site has great docs about all the settings you can change (like directories and port numbers) in the setup.xml file. Make these changes before running the next step. I just use the default, which will put the web server on port 8080:
[dstar3 demo]$ cd glassfish [dstar3 glassfish]$ chmod -R +x lib/ant/bin [dstar3 glassfish]$ ./lib/ant/bin/ant -f setup.xml Buildfile: setup.xml ... BUILD SUCCESSFUL Total time: 31 secondsNow I start up Glassfish:
[dstar3 glassfish]$ ./bin/asadmin start-domain Starting Domain domain1, please wait. ...And finally, I deploy the updated Wonderland.war file:
[dstar3 glassfish]$ ./bin/asadmin deploy ../Wonderland.war Command deploy executed successfully.Now the Wonderland client code is installed in the Glassfish server. If there are any problems, you can check the Glassfish server log:
[dstar3 glassfish]$ ls domains/domain1/logs/ jvm.log server.log Running the Wonderland ClientOK, everything should be up and running at this point. From my browser, I can go to
http://dstar3.east.sun.com:8080/WonderlandAnd I should get the Wonderland launch page:
Now that it's up, what can I do with this demo? Check out our latest video to see some of the cool new features in Wonderland 0.4!
(Updated 8/2 to remove bad characters )