Wonderland Wednesdays Subsnapshot Project

Today’s guest blog post is from Bob Potter. Bob leads the development effort of a small agile software house in Montreal, Canada and is interested in virtual worlds as an avenue for discussions and collaborative work for geographically distributed teams.

Subsnapshot Project

By Bob Potter

Most weeks around midday Wednesday in North America, evenings for those in Europe, a group of Wonderland enthusiasts have been assembling in-world to share insights, demonstrate modules, build worlds, and generally learn how to work with Wonderland. Here are the details for tomorrow’s session:

Wonderland Wednesday – Subsnapshot Development
Location: Community Server
Time: 1pm ET (check here for time in your time zone)

Ryan (aka Jagwire) has been leading these developer-focused sessions for the past few months, and through his capable hands, we have walked through the structure of Wonderland, the code, and debugging techniques. After having reviewed code, the group as a whole wanted to get our hands dirty and actually dig in and develop something.  We wanted to find a way to involve ourselves in the development of Wonderland.  Although many of us are strong Java developers (or not), the Wonderland architecture is not the easiest thing to wrap one’s brain around.  There are excellent tutorials on how to develop modules for Wonderland, but this can be nicely complemented with some hands on sessions.  Wonderland itself provides us with the perfect environment to work together as a team.

With the desire to develop something useful, discussion turned to what does Wonderland need.  Several of the participants are active world builders and expressed a need for a way to export a portion of the worlds they were working with.  For example, if the world builder had pieced together a collection of objects organized in a purposeful unit, it would be useful to be able to export this collection into a package that could be reused in another world without having to repeat the painstaking effort required to insert, manipulate, and align the objects. Hence the birth of the Subsnapshot project.  Wonderland already has the means to export the whole world, in the form of a snapshot, but this project would allow the export of selected portions of a world.

Planning the project was done in-world.  An instance of the Firefox browser was started in-world using the shared application functionality of Wonderland. We used the in-world whiteboard as well as Google Docs to capture our notes.

Planning the Subsnapshot module using the whiteboard.

Planning the Subsnapshot module using the whiteboard.

Our discussions centered around how to select the items to export and what would be involved in exporting cells.  We also decided to plan our work so we would get some working code quite early on in the process – it always feels good to get something useful working!

In the following session we actually started coding.  We used the Java IDE, Netbeans, again using the shared app functionality to work collaboratively.

Coding using the NetBeans development environment running in-world as a shared application.

Coding using the NetBeans development environment running in-world as a shared application.

We created the module skeleton with all the necessary directories, build, and proprieties files.  Our first task was to add the menu option for export. Jonathan (chief architect of the Open Wonderland Project) served as our guide and coach. He had us create a ContextMenuFactory class to add our “Export” option. Actual coding work was passed between a few members of the group and all done in-world! We later started work on the export process, extracting a list of the content (e.g. images) that a cell uses.  We took the time to explain all the various parts of the functionality we were creating, so coding progress was slow, but everyone had a chance to fully understand how the code was working.  In between live sessions, we continued our technical discussion in a Google Wave.

Subsnapshot group viewing Google Wave discussion while working on code in NetBeans.

Subsnapshot group viewing Google Wave discussion while working on code in NetBeans.

At the next session, we started by reviewing what had been accomplished during the last session. One member of the team had a chance to test the code that we had written, and he identified a few bugs.  He also proposed some fixes. To show us, he dropped an image (.jpg) of his corrected version of the code and another image of a test he ran to demonstrate the correctness of his fix. We then edited the master copy of the code with the corrections.

Subsnapshot group reviewing proposed bug fixes.

Subsnapshot group reviewing proposed bug fixes.

We were now ready to move on and add additional functionality. We already had the ability to extract a list of the content. The next step was to write the content into files that would later be packaged for export. Using a Sticky Note, we quickly outlined how we wanted to organize our export package.  By the end of the coding session, we were able to write the content files and save them to the client computer’s file system.

For the next session, coming up tomorrow, we are considering splitting up the group and working in parallel on two (or maybe more) separate instances of Netbeans. This will allow a few more of us to actively participate in the coding process.  It will also make Jonathan run around the world a bit! Wonderland is proving to be a productive environment not just to discuss and plan, but also to accomplish real work. Feedback so far has been very positive. In the words of one of our regulars, “this collab is ‘stunning’.”

If you are interested, come join us one Wednesday – check out the Wonderland forum or our Facebook events page to see what is on the Wednesday program – we don’t code every week, but usually there is something happening. One of us will be happy to bring you up-to-speed, so don’t feel like you can’t join in if you didn’t start on the project from the beginning. It’s a great way to learn about Wonderland development and also a great way to learn techniques for using Wonderland as a collaborative work environment.

We’ll be adding comments to this blog post after every meeting, so check back for updates on the progress of the subsnapshot project.

– Bob Potter

See the Open Wonderland Facebook events page for Wonderland Wednesday session details.


3 Responses to Wonderland Wednesdays Subsnapshot Project

  1. Bob Potter says:

    An update on this week’s session (September 15, 2010)

    During this session we discussed and defined the archive structure in detail for the objects that are going to be exported. When cells are being exported we need to capture the cell state, that is the size, its relative position and other properties, and we need to export the content, e.g. the images. We will use the standard Zip archive format to package this data. Java uses the Zip format for all its archives and the code to support this packaging is part of the standard Java libraries.

    We had set up two separate instances of Netbeans but for this session we decided to code together as a group. Last session we had saved the content to a temporary directory so this weeks goal was to refine the file structure and to write out the cell state to a separate file so we can create a single archive. We have almost completed creating the archive and in the next session (next Wednesday, September 22 at 1:00 pm EDT) we should be able to split up and have one group continue work on the export and another group start on the import process.

  2. […] Potter described the project when we started it almost exactly a year ago in his blog post “Wonderland Wednesdays Subsnapshot Project.” As I reported in the Next Wonderland Wednesday Project post, we officially concluded the […]

  3. […] Bob Potter described the project when we started it almost exactly a year ago in his blog post “Wonderland Wednesdays Subsnapshot Project.” We officially concluded the project at the end of May, but it has taken some time to finish up […]

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: