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