June 26, 2014

Darb Dabney's 3d GIS - OpenSim » OpenSim

Open Simulator joins the SGeoS build — a strategy for blogging the builds

This is the first of what should be  a set of posts that detail a server build process for the San Francisco Enterprise Geographic Information Systems Program (SFGIS) Standard Geospatial Server (SGeoS).  In fact, the build work has been ongoing for several weeks and is concluding here, with OpenSim. The motivation for including OpenSim in […]

by Darb at June 26, 2014 03:41 AM

February 09, 2013

nebadon2025.com

HOW TO: Compile Mono 3.0.3 from source code [Universal *nix]


by nebadon (Posted Sat Feb 09, 2013 12:50 pm)

Before starting you will probably need to install these packages on a fresh box:
(package naming scheme varies depending on your flavor of linux)

libtool
libpng3
libpng-devel
libjpeg
libjpeg-devel
libtiff
libtiff-devel
libexif
libexif-devel
giflib
giflib-devel
bison
automake
autoconf
make
gcc
gtk
xorg-x11-devel
freetype
fontconfig
fontconfig-devel
gettext
nant
git
mono-complete

start by dropping into super user:
Code: Select all
sudo su

pre-req package install for SuSE 11.x+
Code: Select all
zypper install libtool libpng3 libpng-devel libjpeg libjpeg-devel libtiff libtiff-devel libexif libexif-devel giflib giflib-devel bison automake autoconf make gcc gcc-c++ gtk xorg-x11-devel freetype fontconfig fontconfig-devel gettext glib2-devel git mono-complete

pre-req package install for LinuxMint 14
Code: Select all
apt-get install libpng3 libpng3-dev libtool libjpeg8 libjpeg8-dev libtiff5 libtiff5-dev libexif12 libexif-dev libgif4 libgif-dev libpango1.0-0 libpango1.0-dev libatk1.0-0 libatk1.0-dev libgtk-3-0 libgtk-3-dev gtk-sharp2 bison automake autoconf make gcc build-essential xorg-dev libfreetype6 libfontconfig libfontconfig-dev gettext libglib2.0-dev git mono-complete

pre-req package install for Fedora 18
Code: Select all
yum install libtool autoconf automake cloog-ppl cpp gcc glibc-devel glibc-headers kernel-headers mpfr ppl libatk libatk-devel gtk3 gtk3-devel libpng12 libpng12-devel libjpeg libjpeg-devel libtiff libtiff-devel libexif libexif-devel giflib giflib-devel bison gcc-c++ libX11-devel freetype fontconfig fontconfig-devel gettext  glib2-devel git mono-core mono-addins mono-addins-devel mono-tools mono-basic xsp gtk-sharp2 gtk-sharp2-devel

pre-req package install for Ubuntu 12.10
Code: Select all
apt-get install libpng3 libpng3-dev libtool libtiff4 libtiff4-dev libexif12 libexif-dev libgif4 libgif-dev libpango1.0-dev libatk1.0-dev libgtk-3-0 libgtk-3-dev bison automake autoconf make gcc gtk-sharp2 build-essential xorg-dev libfreetype6 libfontconfig libfontconfig-dev gettext libglib2.0-dev git mono-complete libjpeg-dev libjpeg8-dev libjpeg-turbo8-dev


then change directory to root home folder:
Code: Select all
cd /root


make an install directory:
Code: Select all
mkdir install


change to the install directory:
Code: Select all
cd install


make a mono-3.0.3 directory
Code: Select all
mkdir mono-3.0.3


change to the mono-3.0.3 directory:
Code: Select all
cd mono-3.0.3


libgdiplus:
Code: Select all
git clone git://github.com/mono/libgdiplus.git
cd libgdiplus
git reset --hard 3ddf7ff28e0876dc395368f11c0dd141199338f0
./autogen.sh --prefix=/opt/mono-3.0.3
make
make install
cd ..


Mono 3.0.3:
Code: Select all
wget http://download.mono-project.com/sources/mono/mono-3.0.3.tar.bz2
tar xfv mono-3.0.3.tar.bz2
cd mono-3.0.3
./configure --prefix=/opt/mono-3.0.3
make
make install
cd ..


Create symbolic link for userspace
*make sure you exit super user by typing exit
Code: Select all
cd ~
mkdir bin
cd bin
ln -s /opt/mono-3.0.3 mono


edit the .bashrc file in your /home/<user> and insert and adjust the <user> to your home folder for your server
Code: Select all
export PATH="/home/<user>/bin/mono/bin:$PATH"
export PKG_CONFIG_PATH="/home/<user>/bin/mono/lib/pkgconfig:$PKG_CONFIG_PATH"
export MANPATH="/home/<user>/bin/mono/share/man:$MANPATH"
export LD_LIBRARY_PATH="/home/<user>/bin/mono/lib:$LD_LIBRARY_PATH"
export MONO_THREADS_PER_CPU=75


you now have mono 3.0.3 compiled and installed be sure to launch OpenSimulator with mono-sgen ie:
Code: Select all
mono-sgen --debug OpenSim.exe


if you have trouble compiling check the responses below for some fixes and if you need to make comments or get help please post here in this forum : http://forums.osgrid.org/viewtopic.php?f=14&t=4631 this topic is now LOCKED!

Neb :ugeek:


Read the main topic related to this post

February 09, 2013 12:50 PM

big buck visits lbsa plaza


by nebadon (Posted Sat Feb 09, 2013 12:24 pm)

<object classid="clsid:D27CDB6E-AE6D-11CF-96B8-444553540000" codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=5,0,0,0" height="480" width="720"><param name="movie" value="http://www.youtube.com/v/eJVxN30LthM"/><param name="play" value="false"/><param name="loop" value="false"/><param name="quality" value="high"/><param name="allowScriptAccess" value="never"/><param name="allowNetworking" value="internal"/><embed allownetworking="internal" allowscriptaccess="never" height="480" loop="false" play="false" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" quality="high" src="http://www.youtube.com/v/eJVxN30LthM" type="application/x-shockwave-flash" width="720"></embed></object>


Read the main topic related to this post

February 09, 2013 12:24 PM

bulletsim racer back to basics test 11 - 2013-02-07


by nebadon (Posted Sat Feb 09, 2013 11:34 am)

<object classid="clsid:D27CDB6E-AE6D-11CF-96B8-444553540000" codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=5,0,0,0" height="480" width="720"><param name="movie" value="http://www.youtube.com/v/6ZAKxGRx-pk&amp;hd=1"/><param name="play" value="false"/><param name="loop" value="false"/><param name="quality" value="high"/><param name="allowScriptAccess" value="never"/><param name="allowNetworking" value="internal"/><embed allownetworking="internal" allowscriptaccess="never" height="480" loop="false" play="false" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" quality="high" src="http://www.youtube.com/v/6ZAKxGRx-pk&amp;hd=1" type="application/x-shockwave-flash" width="720"></embed></object>

:ugeek:


Read the main topic related to this post

February 09, 2013 11:34 AM

Streamlined .blend for use in VW Mesh Creation


by nebadon (Posted Sat Feb 09, 2013 9:22 am)

Installation for Bone Weight Copy python script for blender

Get Blender 2.60, 2.61, or 2.62
Download the Bone Weight Cop script (see above)
start a fresh Blender (to default start screen)
Open User preferences
Switch to the AddOns Tab
Install addon ‌ locate your sript file.
Enable the check mark on the right.
Save As Default

Now you find Bone Weight Copy in the Tool Shelf, whenever you have selected an Object which has weighted vertex groups.

Hint: The Copy Bone Weight Script is not distributed with Blender itself. But you can always get it from one of the links above (note: it works only for Blender 2.59 and newer)

Usage
Ensure that your Model (the target) and the model from where you want to copy the weights (the source) are both visible.
Select your model (the target)
Go to edit mode and select all vertices which shall be weighted (in most cases all vertices)
Go to Object mode
Use SHIFT + RMB to add the Source (From where the weights shall be copied) to the selection.
Now both meshes (source and target) are selected
In the weight copy panel select Interpolation: 2 and check both options (“Only Named Bones” and “Copy Empty Groups”
Copy Bone Weights

Copy from multiple targets

Many example files for Second Life use a Character with three separated parts (head, upper body, lower body). You can do a weight copy from those characters as follows:

Copy the Head part:

Select your target mesh and enter edit mode
Select only the vertices of the head part
Now go to object mode, Use SHIFT + RMB to add the head of the source mesh.
In the weight copy panel select Interpolation: 2 and check both options (“Only Named Bones” and “Copy Empty Groups”

Proceed in the same way with the upper body:

Select your target mesh and enter edit mode
Select only the vertices of the upper body part
Now go to object mode, Use SHIFT + RMB to add the upper body of the source mesh.
In the weight copy panel select Interpolation: 2 and check both options (“Only Named Bones” and “Copy Empty Groups”

And finally do it again for the lower body in exactly the same way:

Select your target mesh and enter edit mode
Select only the vertices of the lower body part
Now go to object mode, Use SHIFT + RMB to add the lower body of the source mesh.
In the weight copy panel select Interpolation: 2 and check both options (“Only Named Bones” and “Copy Empty Groups”

Now your target object should be weighted.

The control Parameters
Interpolation:
When > 0 tries to find better matching weights by subdividing the meshes (the interpolation value is the number of subdivisions used for the interpolation) and thus having more accurate surface matching.
Only Named Bones:
When checked, only those weight groups get copied for which the armature has bones. For avatar.blend that means, only the weights for the bones are copied. All weights in the morph groups are ignored. Note that empty groups will not be copied (see next feature)
Copy empty Groups:
When checked, also empty weight groups will be created on the target object(s).


Read the main topic related to this post

February 09, 2013 09:22 AM

Streamlined .blend for use in VW Mesh Creation


by nebadon (Posted Sat Feb 09, 2013 9:14 am)

Hey, all
Wasn't sure if this should be in building or this subforum, but whatevs.
I create mesh stuff, and have set up my Blender to streamline the process, with a layout and settings specifically aimed towards creating mesh for VWs. When I started working with rigged stuff, I found Domino Maramas avatar.blend, as well as a tutorial to set it up for rigging clothing. However, this proved a little time consuming, and aggravating when it took 20 minutes to find a small step I missed. I've had a few different people ask about rigging mesh, and have shared an older version of my default scene with a couple of people, but it's come a little way since then.

So, I figure if a couple people found it useful, maybe others will too. Also, though current versions of Blender do include a bone weight copy function, I know there were some issues with it, and am not sure if they were corrected. So, I use the script from Machinimatrix (Link Below).

I use Blender 2.64, and haven't updated to 2.65. I assume there would be no compatibility issues/changes, but future versions could break some aspects.

.blend template file:
http://nebadon2025.com/blender/OpenSIM_MeshDefaults.blend

copy bone weights script for blender:
http://nebadon2025.com/blender/space_view3d_copy_bone_weights_enhanced.py

LAYERS
===========
1 - is a cube for quick start modeling. I normally start with a cube, or can just delete the verts in edit mode and go from empty. Also in this layer is a sun light, raised in the z axis to be out of the way, and oriented to roughly match the direction of the camera.
6 - Armature for rigging/animation
7 - Base ruth avatar mesh, with vertex groups edited down to the minimum for rigging, including the necessary empty groups. Upper body, Lower body, and Head as separate objects.
8 - Base ruth avatar mesh again, but as one object, for texturing. This is so that I can set the materials, then delete extra verts for smoothing, without messing up the rigging mesh.
15 - Empty and camera. The camera is parented to the empty, which is at grid center, for easy camera rotation and positioning. Also in this layer is the sun light from layer 1.
20 - All parts of the avatar mesh not used for rigging setups. Skirt, eyes, lashes, and system hair.

OTHER NOTABLE SETTINGS
===========
World tab
----------
Ambient occlusion, indirect lighting, and environment lighting are all turned on, with default values. Makes preview renders pretty, and baked texture lighting better.
Render background has real, blend, and paper on. I just dislike straight colour render backgrounds, it makes some details harder to see. I've set it to create a black to white gradient to the middle.
Raytracing is on with default settings. Again, pretty and baked texture lighting.

Render tab
----------
Resolution is 1024x756. It's a good size for most screen resolutions, without taking too long to render, at least on my machine.
Anti-aliasing is set to 8 samples, which is enough to look okay and not affect render times particularly much.
Bake is set for full render, margin of 2 pixels. (This may be the default, not sure)

3D Viewport
----------
Properties subwindow is closed, as I normally use relative positions, and only rarely use background images for blueprints.
Backface culling is ON, as mesh support does not include double sided faces. This makes holes obvious.

--Reposted from Training and Tutorials, and original post deleted. Somehow I forgot this subforum existed, this morning >.<

-Kei Chasal @ OSgrid.org
original posting : http://forums.osgrid.org/viewtopic.php?f=38&t=4630


Read the main topic related to this post

February 09, 2013 09:14 AM

January 31, 2012

justincc's opensim blog

Blog moved to justincc.org

Hi folks.  If you’re reading this, please note that my new blog location is http://justincc.org/blog.  Thanks!


by justincc at January 31, 2012 04:09 PM

November 16, 2011

Darb Dabney's 3d GIS - OpenSim » OpenSim

3D Geospatial For Real—not a simulation and Kitely, on-demand Opensim

Thanks to the astronauts aboard the International Space Station, their time-lapse photography at very high ISO that helps to share some of what their eyes may well see, and of course Michael Koenig for his care and smoothing of the HD video, with some loungy score, too. Take five (minutes) and watch it on HD […]

by Darb at November 16, 2011 07:12 AM

June 15, 2011

justincc's opensim blog

These two weeks in OpenSim Dev – weeks ending Saturday 11th June 2011

Hello everybody.  This is a summary of the last two weeks of development in OpenSimulator (I had a bit of a stomach bug last week).  Except where otherwise specified, the changes described here appear only in OpenSimulator’s cutting edge Git ‘master’ branch. Please do not attempt to use code taken directly from ‘master’ in any production environment.  Sometimes this in-development code may not work or may even cause data corruption. If you are not a developer or tester, please treat this summary instead as a preview of what will be coming up in the next release. The latest official release is OpenSimulator 0.7.1.1 (released on May 27th 2011).

The letters and numbers in brackets after some entries tell you the latest git commit to which they apply.

This week in OpenSim ( d671dbb7 – fc7e17b ).

General news

  • None this week.

Features & bug fixes

  • I updated libomv to 0.9.0, in order to fix issues with llDialog boxes on the latest Linden Lab version 2 viewers.  This fix is also in the 0.7.1-dev git branch (c67fa72).
  • James Stallings contributed a patch to allow gods to see all of a user’s groups, not just those which they explicitly list in their profile (c43ad8a).
  • Chris Hart contributed a patch to update the MSSQL database adapter for OpenSim’s most recently functionality.  This was also applied to the 0.7.1-dev Git branch (5fb0455).
  • Bluewall fixed a problem with redirecting avatars for fallback regions if the attempted destination region currently has logins disabled (777f457).
  • Diva added Hypergrid landmarks.  As with many other recent Hypergrid changes, this requires carefully updating of config files (compare current ini.example files) (cf86ba5).
  • I fixed llSensor() so that if it’s in an attachment, the detection cone faces in the direction of the avatar rather than in the relative rotation of the attachment towards the avatar (66004a9).
  • Diva added an internal EventManager.OnPrimsLoaded event so that modules can detect when a scene’s objects have been restored from persistence (9759b2a).
  • On Hypergrid, Diva fixed an issue where the creator/owner of all prims created by foreign visitors was shown as “Unknown User” (80fc607).
  • Diva discovered further issues when separating Hypergrid regions by more than 2048 tiles! (8d3a8a0).
  • I changed MySQL region database tables to use the MyISAM engine rather than InnoDB.  This results in a significant persistence speed improvement which is very noticeable when loading OARs (e.g. one scene object that took 9 seconds to persist now takes 1 second).  In theory, this may impact data retrieval but field reports say there is no noticeable difference, possibly because all prim data is currently held in memory for the duration of the sim’s run (9149ef6).
  • Dahlia made physics meshing handle both the new and old mesh formats (387b228).
  • Oren Hurvitz contributed a patch to save the sun‘s position in OARs. (804fe2d).
  • I eliminated a bug where the hover text green color value was accidentally used on persistence rather than the alpha value.  This affect OARs and quite possibly inventory and prim region crossing (fc7e17b).

Infrastructure

  • Diva continued to work on Hypergrid IM, friends and lures.

by justincc at June 15, 2011 01:53 AM

June 02, 2011

justincc's opensim blog

My first time Hypergrid standalone

Okay, so I know this will come as a bit of a surprise to some, but up till now I’ve never run a Hypergrid-enabled OpenSimulator instance.  Oh sure, I’ve looked at the documentation, read and reviewed the code and even written blog posts about it, but I’ve never found the time to actually put theory into practice.

Until now, that is.  Early this week, Nebadon Izumi was kind enough to give me some space on one of his openSUSE 11.2 servers and so I got to work.  First off, I cloned the very latest OpenSimulator development code from the Git repository, which was on Wed Jun 1 (commit 0a430bb).  I don’t advise this unless you’ve got the time and inclination to cope with all the issues of being on the very, very bleeding edge, especially right now as Diva is implementing HG friends and instant messaging :).

Then, after a standard prebuild.sh; nant; cp bin/OpenSim.ini.example bin/OpenSim.ini, I went in to bin/ and

  1. Changed the http_listener_port in the [Network] section to 20000 from 9000.
  2. Uncommented the Include-Architecture = “config-include/StandaloneHypergrid.ini” line.
  3. cp config-include/StandaloneCommon.ini.example config-include/StandaloneCommon.ini
  4. Opened the StandaloneCommon.ini file and did a search and replace of all “127.0.0.1:9000″ references with “justincc.osgrid.org:20000″
  5. Started up mono –debug OpenSim.exe and answered the questions to set up an initial region, with a Location of 10000, 10000 and an ExternalHostName of justincc.osgrid.org
  6. Answered further questions to set this up in an estate called e1 owned by a user called Justin Clark-Casey with my own password.

Actually, I’m lying – at first I tried using port 9000, having forgotten that Nebadon gave me a different port range.  However, I soon realized when OpenSim complained of not being able to use that port on the first startup!

Okay, I’m also lying in that I started an ordinary standalone first just to check that everything actually worked before plunging into the relative unknown.

But after doing those other things, I logged in with the old 1.23 Second Life viewer and was pleasantly surprised to find that the direct login to -loginuri justincc.osgrid.org:20000 still worked.  After futzing around a bit, I went to the Hypergates website and clicked on the “Hypergrid Jump” link for the “Newest” Bellona Network Hypergates entry, which happened to be John Rogate’s Creative Twists region on osgrid.org (my address is justincc.osgrid.org but since it’s a hypergrid standalone it’s actually entirely independent from the rest of OSGrid).

And lo and behold, Firefox complained that it didn’t understand the protocol. (not surprising on my Ubuntu 11.04 box).  So I looked at the link manually

secondlife://hg.osgrid.org:80:twistsannex/151/158/31

noting the cool way that OSGrid’s hypergrid gateway address was embedded in a ‘normal’ Second Life link.  I remembered that you could click these things directly in the viewer chat, so I pasted it in, gave it a click, was pleased to note that my totally flat green map tile came up in the Place Information dialog and clicked Teleport.

And lo and behold, it worked!  I was able to run around this totally independent install of OpenSimulator and admire the architecture.  And my name had now become Justin.Clark-Casey@justincc.osgrid.org.  Fantastically cool – a truly distributed metaverse! (yeah, yeah, I know, I’m late to the party :).  Then I couldn’t teleport out again, though I suspect this is actually a network issue that John has.  And right now the region can’t be reached, which stops me posting a picture of it.  So instead, here’s a nice picture of when I went to one of Ai Austin’s OpenVue regions (secondlife://virtual.aiai.ed.ac.uk:8002:Vue-9000/128/128/30)

and then on to Lbsa Plaza (secondlife://hg.osgrid.org:80:Lbsa%20Plaza/128/128/40), which for some reason locks me to the edge of the region on initial teleport, though I can then reteleport within the sim and everything works.

A couple of times I got bit by the “4096″ bug, where you can’t hypergrid to any region more than 4096 regions away on the x or y axis from your current region (Linden Lab thought that 16,777,216 regions ought to be enough for anybody ;).  This specific teleport failure reason only appears to be printed in the OpenSimulator log at the moment which can leave the user a bit mystified.  And early on, I was trying to figure out why I couldn’t get to secondlife://hg.osgrid.org:80/Wright%20Plaza/128/128/30 from justincc.osgrid.org, until Nebadon pointed out to me that both my region and Wright Plaza had the co-ordinate 10000, 10000 (which tends to upset things :).

Getting an OSGrid user into my justincc.osgrid.org and setting up FreeSWITCH on my hypergrid standalone was another adventure, which I’ll write more about soon.

If you want some more structured hypergrid instructions, there’s a page on the OpenSimulator wiki though I’m not sure how up to date it currently is for OpenSimulator 0.7.1.1.  And there’s also Diva’s D2 distribution which is pre-configured in 2×2 Megaregion configuration with Hypergrid access.


by justincc at June 02, 2011 09:30 PM

May 29, 2011

justincc's opensim blog

This week in OpenSim Dev – week ending Saturday 28th May 2011

Hello everybody.  This is a summary of the last week of development in OpenSimulator.  Except where otherwise specified, the changes described here appear only in OpenSimulator’s cutting edge Git ‘master’ branch. Please do not attempt to use code taken directly from ‘master’ in any production environment.  Sometimes this in-development code may not work or may even cause data corruption. If you are not a developer or tester, please treat this summary instead as a preview of what will be coming up in the next release. The latest official release is OpenSimulator 0.7.1.1 (released on May 27th 2011).

The letters and numbers in brackets after some entries tell you the latest git commit to which they apply.

This week in OpenSim ( 58c53c4 – d532619 ).

General news

  • OpenSimulator 0.7.1.1 was released! This is a minor bug fix release from OpenSimulator 0.7.1, though it also includes code to properly implement inventory links (and hence outfits on viewer 2 and related third party viewers).

Features & bug fixes

  • Diva implemented Hypergrid friends, lures and instant messaging support. This allows you to make friends or instant message people from any hypergrid connected grid no matter which grid you are on.  It looks like this is already testable but it is still a work in progress, so, as Diva says, be prepared to delete records in your friends database table if things go awry (d532619).
  • Melanie fixed llGiveInventory() to work if the user is in another simulator or potentially if they are offline.  See Mantis 4429 for more details (24c00ac).
  • Melanie added preservation of pay prices to object serialization (e398c33).
  • I added a –noassets option to “save oar” and “save iar” console commands.  This saves an archive without any assets (which forms the vast bulk of the time taken to save and the archive storage requirements).  This is useful in backup scenarios where you know that the assets database is being backed up separately (3270f43).

Infrastructure

  • No news this week.

by justincc at May 29, 2011 07:20 PM

May 27, 2011

justincc's opensim blog

OpenSimulator 0.7.1.1 released

Hi folks.  OpenSimulator 0.7.1.1 has just been released.  This is a minor point release on 0.7.1 and is dedicated towards fixing the more annoying bugs that have come to light since 0.7.1 and culling some of the verbosity of the log entries.

This release also has an implementation/fix for inventory links, which will hopefully mean that viewer 2 outfits now work correctly.

Please see the release notes for more information.


by justincc at May 27, 2011 11:45 PM

May 25, 2011

justincc's opensim blog

OpenSimulator’s login process and common login problems

Introduction

Today I’m going to write about how a viewer logs in to an OpenSimulator grid.  This is a considerably more complicated process than a simple website login.  If you ever need to find out why login isn’t working it really helps to know what’s going on under the hood.

Process

For simplicity’s sake, we’ll look at the standalone case, where all the regions and grid services are running under a single OpenSim.exe process.

Step 1: As the first step for logging in, the viewer sends an XMLRPC message to the Login Service URI containing the name, password, viewer version and other details.  The -loginuri parameter on the command line that tells the viewer where the login service is (here it’s 192.168.1.2 and the port number is 9000).  In viewers such as Imprudence the viewer’s grid manager can fetch this information from the grid info XML that the grid advertises at a well known URL.

Step 2: The login service uses these details to check that the password is correct.  If it is then it looks up the simulator that the user should be placed in (e.g. last or home).  In this case there’s only one region called “My Region”.  The login service will generate a random ‘circuit code’ and ask the simulator to record this code and set up an ‘agent’ in My Region.  The agent represents a user in an OpenSim region.

Step 3: Once the simulator has generated the agent, it returns a randomly generated ‘circuit code’ to the login service.  The login service will package this up together with the IP and port address of the region and return it to the viewer in a reply XMLRPC message.  The login service gets the region’s IP address and port from the ExternalHostName and InternalPort entries in the bin/config-include/Regions.ini file (config files there can also have other names as long as they end with .ini).  In this case the entry is

[My Region]
RegionUUID = dd5b77f8-bf88-45ac-aace-35bd76426c81
Location = 1000,1000
...
InternalPort = 9000
ExternalHostName = 192.168.1.2

The host name here is 192.168.1.2 (same as the login service since we're on a standalone) and the internal port is 9000.  But in this case it specifies the port that the client should use for UDP messages between itself and the simulator (we'll ignore HTTP capabilities in this post).  The ExternalHostName can also be SYSTEMIP, in which case the default IP of the machine hosting the simulator is used (which would also be 192.168.1.2).

Step 4: When the viewer receives the XMLRPC reply, it extracts the circuit code, simulator ip and port.  To make first contact with the simulator, it sends it a UseCircuitCode UDP message containing the circuit code.  The simulator compares this against the circuit code that the Login Service gave it for that client.  If they match then the simulator sends back and Ack packet and the two start talking to each other (i.e. the simulator gets sent terrain, object and texture information and can move around the region).  If they don't match then the simulator logs a warning and ignores the UseCircuitCode message.

Problems

Whew, quite a process, eh?  As you can imagine, there's a lot that can go wrong.  Let's go through the possible problems.

Viewer has wrong loginuri

This is an easy one.  If the viewer is trying to login with the wrong uri (e.g. 192.168.1.3 in the example above) or wrong port (e.g. 9001) then you'll get something like an "Unable to connect to grid" - nothing will ever reach the Login Service.

Viewer has wrong login credentials

Another easy one.  The Login Service will reject the credentials and tell the viewer, which will display a "Could not authenticate your avatar" message.

A firewall prevents the Login Service from replying to the viewer

In this case the viewer can send some initial TCP packets to the Login Service but can't get anything back.  As above, the viewer will present an "Unable to connect to grid" message but this time after a longer pause until it times out on the Login Service connection.

Viewer receives misconfigured external host name from Regions.ini

Now it gets more complicated.  Suppose that instead of putting 192.168.1.2 in the My Region config I accidentally put 192.168.1.3 instead, which is a machine that doesn't exist on my network.

[My Region]
RegionUUID = dd5b77f8-bf88-45ac-aace-35bd76426c81
Location = 1000,1000
...
InternalPort = 9000
ExternalHostName = 192.168.1.3

In this case, the first part of the login process works okay and the progress bar moves along in the viewer.  But when the Login Service returns the simulator information to the viewer, it returns the ExternalHostName of 192.168.1.3 instead of 192.168.1.2.  The viewer will make a number of attempts to contact this non-existent simulator for the second part of the login, and so appear to hang for a while on a message such as "Waiting for region handshake..." before failing with a "We're having trouble connecting..."

In this case, since 192.168.1.3 has no machine a simple ping will reveal the mistake.  If there is a machine at that address or it's the port number that is wrong then things are more complicated.  It's difficult to diagnose problems here since UDP messages are connectionless, unlike TCP.  If you have a utility like netcat available on the viewer machine, you can try sending nonsense to the address and port given in Regions.ini.  For instance, above we could do

echo "foo" | nc -u 192.168.1.2 9000

and the simulator would print out a "Malformed data" message.

Viewer can't reach region external host name

Now let's suppose that the ExternalHostName and InternalPort are correct, but the viewer can't reach that address for some reason (e.g. UDP messages to that port are blocked by a firewall).  You'll see exactly the same symptoms as if the host name is misconfigured.  The diagnostics are also the same, with the addition that you need to thoroughly check your firewall and other network settings.

You can also see this if you've specified a public IP for ExternalHostName but you're attempting a connection from within your LAN and your router does not support NAT loopback.  The easiest solution is to get a router that does support NAT loopback though you might also want to try the workarounds listed on that wiki page.

A firewall prevents the simulator from replying to the viewer

Unlike the firewall blocking the login service reply above, this time the first part of the login process will complete correctly and the simulator will even receive the UseCircuitCode message.  However, the Ack that it replies with (and any other UDP messages) is blocked by a firewall.  In the simulator log you will see messages such as

[LLUDPSERVER]: Ignoring a repeated UseCircuitCode from
2c3b8307-e257-4d1e-b12f-76f2b8f50ee9 at 192.168.1.3:1208
for circuit 546230463

as the viewer resends the UseCircuitCode packet another 3 times (while it displays the "Waiting for region handshake..." message.  Eventually, the viewer gives up and displays the "We're having trouble connecting..." message.  In this case, you need to carefully check that your firewall allows outbound UDP messages from the simulator to the viewer's IP address.

Conclusion

As you can see, the login process is complicated.  Much of this complexity exists so that in grid mode simulators can be hosted on different machines to the login service.

In grid mode, all of the above information still applies, with the addition that the login service and simulators communicate over a network rather than within a single process.  This is another point of failure.  If there's a problem here then you should see an error in the login service log and the viewer will return with a "Unable to connect to grid" message.


by justincc at May 25, 2011 11:15 PM

February 14, 2011

Darb Dabney's 3d GIS - OpenSim » OpenSim

Not asleep, just spread thinly.

As models of surface water flow for all Marin County are getting ready for review, there’s also a convergence with the large-scale topographic base (LSTB) map effort. In fact, the hydrologically-enforced flow lines (HEFL) are getting their first chance to fit into the LSTB context.  This has helped immensely to clarify the uses that most […]

by Darb at February 14, 2011 05:12 AM

December 03, 2010

Shenlei Winkler » OpenSim

Content, Piracy, and OpenSim-based Grids

We recently picked up a link sent to us of an image shot in an OpenSim-based grid, that showed a 3D model used in the region that looked suspiciously familiar. Upon visiting the region, I discovered that lo, the model was in fact very familiar: it was a model created for our old Shengri La […]

by Shenlei at December 03, 2010 06:45 PM

October 26, 2010

Shenlei Winkler » OpenSim

Fashion Research Institute Collaborates with Intel Labs to Bring Premium Content to Science Sim

FRI has been collaborating with Intel Labs since 2009, helping to push the limits of content development in Science Sim. We are active participants in the Science Sim Senate Meetings, held each Friday morning on the Kepler Region. On October 12th, Dr. Mic Bowman, the principal engineer in Intel Labs, who leads the Virtual World […]

by Shenlei at October 26, 2010 03:39 PM

October 13, 2010

Shenlei Winkler » OpenSim

Content & Licensing in Virtual Worlds

We are seeing an increase of something that we find disturbing on many levels: self-created licenses for content. The reasons we find these licenses is disturbing are many: in general, content creators are not lawyers, nor do they seek legal counsel in developing their license agreements.  These agreements are often poorly framed or worded. The […]

by Shenlei at October 13, 2010 06:30 PM

September 24, 2010

stuff from coyled >> opensim

OSGrid Asset Sizes

If you're curious how much disk space a large OpenSim grid requires for assets, here's a breakdown of the 20 million assets OSGrid has on disk:

    0KB < $size <= 4KB            : 10458446
    4KB < $size <= 8KB            : 1953996
    8KB < $size <= 16KB           : 1989925
    16KB < $size <= 32KB          : 1485763
    32KB < $size <= 64KB          : 1286704
    64KB < $size <= 128KB         : 1706322
    128KB < $size <= 256KB        : 965926
    256KB < $size <= 512KB        : 654840
    512KB < $size <= 1024KB       : 272910
    1024KB < $size <= 2048KB      : 33404
    2048KB < $size <= 4096KB      : 6464
    4096KB < $size <= 8192KB      : 908
    8192KB < $size <= 12288KB     : 246
    12288KB < $size               : 36
    ========================================
    total de-duped assets: 20815890

All together it's 486GB of stuff.

by Dave Coyle (hello@coyled.com) at September 24, 2010 01:07 AM

August 25, 2010

Zonja Capalini » OpenSim

Condensation Land: A status report

{EAV_BLOG_VER:3fdb12a10a5100bd}

Introduction

Recently, the page about performance in the Opensim wiki has been extensively updated, and this prompted me to gather some data for Condensation Land, a mini virtual world powered by Opensim which I administer, to be able to add this data to the page. Condensation Land is special in the sense that while it’s a quite small, home-based, world, at the same time it hosts a relatively big number of prims and scripts, and I thought that adding that data to the page might end up being useful to somebody.

0840 - Temple 1

Temple, an island by Omurtag Milev in Condensation Land

When collecting the data I had to visit all the islands, one by one, and this made me remember the story of Condensation Land, how it all started, the things we did there, the people who have contributed wonderful stuff to be displayed, and I thought I’d write a blog post listing and commenting detailedly the technical data I had gathered, and at the same time giving an account of the history of the mini-world.

History

Condensation Land started as an experiment in looking for alternatives to Second Life after the OpenSpace fiasco. The initial six months of this process are explained in detail here. Shortly after writing this article, the company I was working for decided that virtual world technology was not adequate for their needs and started using WebEx. The initial founders of Condensation Land (Ludmilla Writer, Favio Piek and myself) decided to keep Condensation Land as an experiment and a playground, and to invite people to show their content in the mini-world.

Technical status

Condensation Land is a mini virtual world powered by Opensim. We are using r13558 of the Diva distribution (D2); the Wifi page can be accessed here. Condensation Land has a WordPress blog, used mainly to keep users informed of new releases and content additions, and a Flickr group.

The physical machine

The whole Condensation Land virtual world runs on a non-dedicated home machine with Windows XP SP3, 3 GB of RAM, and two SATA ST3400620AS HD’s of 372 GB each. The first HD (C:) hosts the operating system and the swapfile, while the second HD (D:) is dedicated to Opensim and MySQL. Apart from keeping the system updated and running the disk defragmenter every so often, the machine requires almost no maintenance.

Networking is provided by JazzTel (a spanish ISP) in the form of a symmetrical 2 Mb SDSL line; the machine has an external IP address and can thus be used for HyperGrid teleports, accesed from anywhere, etc. This line costs around € 200/mo, which is more or less US$ 250/mo.

World setup

Condensation Land (loginuri: http://condensationland.com:9000) comprises 11 regions, of which 10 are public. The region with most prims is Condensation Land, with 10,278 prims, and the region with more active scripts is Angelico Miguelis, with 706 active scripts. The whole world uses 38,065 prims and 1,934 active scripts, as detailed in the following table.

+---------------------------+--------+---------+
| Region                    | Prims  | Scripts |
+---------------------------+--------+---------+
| Angelico Miguelis         | 10,024 |     706 |
| Conceptior                |  6,280 |     531 |
| Condensation Beach        |  2,455 |      46 |
| Condensation Land         | 10,278 |      97 |
| Condensation North        |  1,610 |     122 |
| Condensation South        |  1,908 |       7 |
| Condensation SouthWest    |    992 |      77 |
| Shoshisn                  |    555 |     163 |
| Temple                    |  3,239 |     139 |
| Tralfamadore              |    427 |      29 |
| (private region)          |    297 |      17 |
+---------------------------+--------+---------+
| Total                     | 38,065 |   1,934 |
+---------------------------+--------+---------+

MyWorld.ini sets CombineContiguousRegions to false to avoid the use of megaregions. The bin\library directory contains the default IARs shipped with D2, plus the large objects library downloadable from the D2 downloads page, plus some small animation IARs created by myself with freebie anims found elsewhere. I've not had time to set up default avatars for male, female and neutral preferences.

Performance

Opensim.exe is pretty stable. and oscilates between 0% and 10% of CPU usage (even when idle, there are a lot of scripted objects, and object status has to be saved frequently), and uses between 167 MB when idle to 512 MB with one avatar and 1 GB of RAM with some few avatars. MySQL.exe consistently uses 250-300MB of RAM, and MySQL backups (in .sql format) occupy 3.51 GB, 1.32 GB when zipped.

The following video shows a party with four avatars in the Condensation Land region:

<iframe class="youtube-player" frameborder="0" height="390" src="http://www.youtube.com/embed/N0z9C0ouAlQ?version=3&amp;rel=1&amp;fs=1&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1&amp;wmode=transparent" type="text/html" width="640"></iframe>

Content evolution

After 20090430, I added a 2,889-prims Klein bottle,

<iframe class="youtube-player" frameborder="0" height="390" src="http://www.youtube.com/embed/bh_jrzglvrM?version=3&amp;rel=1&amp;fs=1&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1&amp;wmode=transparent" type="text/html" width="640"></iframe>

and an exhibition called Mirror Worlds featuring pictures from Florence Babenco, Ludmilla Writer, Mikil Tiki, Monika Finchy, Senna (SennaSpirit Coronet), Shoshisn Shilova and myself, and sculptures by Shoshisn Shilova.

<iframe class="youtube-player" frameborder="0" height="390" src="http://www.youtube.com/embed/4Kd379rT6Sw?version=3&amp;rel=1&amp;fs=1&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1&amp;wmode=transparent" type="text/html" width="640"></iframe>

After that, a very nice thing happened: people started to contribute their own stuff to be shown at Condensation Land! :-)

Breen Whitman donated a fantastic building called "Eastern Gaswork", which I placed in Condensation South;

0741 - Breen Whitman's 'Eastern Gasworks' building - Outside view

Breen Whitman's 'Eastern Gasworks'

Shoshisn Shilova got an island (called "Shoshisn") and Mikil Tiki got another island (called "Tralfamadore - La Mikilina");

0773 - Our world is growing

Condensation Land world map after adding "Shoshisn" and "Tralfamadore"

and finally Omurtag Milev added three awesome islands called Temple, Conceptior and AngelicoMiguelis,

<iframe class="youtube-player" frameborder="0" height="390" src="http://www.youtube.com/embed/ygRvFo7dRi0?version=3&amp;rel=1&amp;fs=1&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1&amp;wmode=transparent" type="text/html" width="640"></iframe>

which you should absolutely visit (or, at least, look at the videos and pictures here).

0837 - New, fantastic islands by Omurtag Milev

Condensation Land world map after the addition of Omurtag's islands

Condensation Land now has ten regions, instead of the initial five, and a lot of new wonderful places to visit! :-)

Conclusion

Condensation Land is a non-for-profit, home-based, virtual world maintained in my free time (and in the free time of the respective region owners). Obviously, since we don't get any money from it, it's a work of love. It's also a proof-of-concept: of what can be done with simply some free time, a lot of passion for the technology, and some very talented friends :-) I won't say that caring for Condensation is always nice and easy -- being the administrator of even such a small world as Condensation takes quite a lot of work: users forget their passwords; upgrades don't always work; we had a serious case of inventory messup, where tons of spurious folders were created and which I had to clean manually using SQL; sometimes electricity fails for so long that the UPS dies (yes, this happens in Barcelona in 2010) and the machine has to be physically restarted; and so on. But the feeling of having all this wonderful stuff in a machine of yours, and of being able to share it with the world, is more than enough to compensate for all of it :-)


by Zonja Capalini at August 25, 2010 02:48 PM

July 07, 2010

stuff from coyled >> opensim

Using Monit to Start/Stop/Restart OpenSimulator

[ Reposted from http://github.com/coyled/monit-for-opensim ]

[ To skip the commentary, you can grab a copy of the Monit config file I use from here. ]

Here are some basics to get you started using Monit to start/stop/restart your OpenSim process(es). This example will check your sim every 30 seconds, and restart it if it's dead, or if SimFPS drops to 0 for 2 minutes, or CPU usage exceeds 300% (e.g. 3 cores on a quad-core machine... an occasional problem when running OpenSim via mono).

I use these with OpenSim's REST console. To enable that, in the [Network] section of your OpenSim.ini , add:
    console_port = 9100
    ConsoleUser = "console_username"
    ConsolePass = "console_password"
setting them to whatever you desire. The nice thing about this is by having the console bind to its own TCP port you can easily firewall it off (though I wish you could just bind it to localhost). One quirk: right now OpenSim's REST console client expects bin/OpenSim.ConsoleClient.ini to exist, even if you use command line options exclusively. So just create an empty file with that name.

Next, in the [Startup] section of your OpenSim.ini , add the following to enable the JSON sim stats:
    Stats_URI = "jsonSimStats"
setting it to whatever you desire. The above would make some basic simulator stats available via http://yoursim.example.com:port/jsonSimStats where "port" is whatever you've set http_listener_port to in OpenSim.ini .

Also in the [Startup] section, enable the writing of a PID file:
    PIDFile = "/var/run/opensim/opensim.pid"
setting it to whatever you desire.

Next, install Monit if you haven't already. With Ubuntu/Debian this is as simple as:
    apt-get install monit
Next, copy opensim.conf into wherever your Monit config files live. That might be /etc/monit/conf.d , maybe /etc/monit.d , or something similar. In that file make any necessary changes, e.g. to the PID file location, the uid OpenSim runs as, the gid OpenSim runs as, the start/stop mechanism you use to start/stop OpenSim, and the URL to view JSON sim stats for your sim.

If you want, you can copy bin/opensim to use for starting/stopping/restarting OpenSim and connecting the REST console client. Copy it to /usr/local/bin or wherever you keep such things.

If you use the enclosed bin/opensim , change the following vars to whatever's appropriate for your system:
    MONO="/usr/bin/mono"
    PID="/var/run/opensim/${SIM}.pid"
    OPENSIM_DIR="/usr/lib/opensim"
    CONSOLE_PORT="9100"
    CONSOLE_USER="console_username"
    CONSOLE_PASS="console_password"
See /etc/monit/monitrc on your system and change to suit your needs. It'll probably work out of the box without modification, but at a minimum you might want to change:
    set alert you@yourdomain.com
    set mail-format { from: monit@yourdomain.com }
so email alerts will be sent with the correct from:/to: headers... assuming you actually want to get the email notifications when Monit restarts OpenSim.

Finally, fire up monit.
    /etc/init.d/monit start
Clear as mud? Let me know if you think any part needs clarification.

by Dave Coyle (hello@coyled.com) at July 07, 2010 12:01 PM

February 21, 2010

Zonja Capalini » OpenSim

SL vs. WebEx: The myth of Second Life as a platform for education [Update 2]

Surprisingly, Opensim fares quite better than SL in that respect

[See the list of updates at the end of the article]

Introduction

A Google Buzz by Mo Hax alerted me of the existence of an article in PC Pro containing yet another interview to M Linden. M explains there that SL is being used for “meetings”, as a “virtual collaboration tool”, and that it provides “incredible savings”. This is not new. If you google for “Second Life Education”, the second hit leads you to “How Education Enterprises Use Virtual Worlds“, a page by LL detailing how great is SL for educators. Similarly, the Second Life Blogs are full of references to SL as a tool for educators. For example, in a one year old article, As Seen on CNBC: New IBM Case Study Showcases Value of Meeting Inworld, Amanda Linden compares Second Life to Webex and says that Second Life “creates a [more] immersive experience”.

Does really “immersion” provide an advantage for online meetings? Is “immersion” something that can be asked of somebody, a student or an employee, for example? What is the cost of being able to offer “immersion”, and how does it relate to the supposed benefits? Are Second Life/Opensim and other tools, like Webex, comparable? If yes, how do Second Life and Opensim fare when compared to them?

In this post I will try to address these questions. To do so, I will use two strategies: on the one hand, I will make a product comparison between SL, Opensim and Webex, comparing features, price, quality of technical support, etc: on the other hand, I will resort to my own experience: I have been working for companies that have used Second Life and Opensim for education and meetings for more than two years, and I’ll share some of the things I have observed.

Product comparison

1. Features

                       | Second Life | Opensim+Skype | WebEx

Voice | Builtin | Builtin(Skype)| Builtin Slide shows | Complicated | Complicated | Builtin Whiteboards | -- | -- | Builtin App/Desktop sharing | -- | -- | Builtin Real-time video | Third-party | Third-party | Builtin Mixing it all  | Bad | Better | Builtin

The needs for educators and for people wanting to hold online meetings are quite similar and very clear. First of all, they need some form of voice conferencing system. In most cases, there is a need to present slideshows (ideally, Powerpoint presentations); a form of shared black- or whiteboard is also very useful; the possibility of sharing an application or the full desktop comes also very handy; and having some form of real-time video streaming is also very desirable, so that "remote" people can see the teacher or the person who's currently speaking.

For our feature comparison we will use three scenarios: Second Life, an Opensim grid with voice over Skype, and WebEx.

Voice

Voice is a built-in feature of both Second Life and WebEx, and can be implemented using Skype in Opensim grids (there's also an Opensim solution for voice, Freeswitch, but I haven't used it and I can't comment about it). Both Skype and WebEx have excellent dynamic noise and coupling cancellation algorithms -- many participants won't need to mute their microphone while not speaking because of these algorithms. On the other hand, Second Life voice algorithms are much more sensitive to noise and coupling, and this implies that everybody has to be very careful to mute their microphone when not speaking, and that you'll have coupling problems in mixed reality scenarios in the RL end of the meeting.

Slideshows

Slideshows are directly supported in WebEx -- you can directly share a Powerpoint presentation, or, if you are using a different application for your presentation, you can share that application. In Second Life/Opensim, on the other hand, even such a simple task is painful and unreliable. You can capture all your slides as images, for example using a screen capture program, upload these images (which costs some additional money in Second Life, but not in most Opensim grids), and then build a slide presentation tool (or buy one) and put all the textures inside the tool. The textures get rescaled to a maximum of 1024x1024, which can be a nuisance in some cases, and when you change textures there's a good chance that some of the clients don't load the texture in time, so that they see a gray screen or a partially rezzed texture (there are some ways to overcome this problem, but they imply extra work and they vary between releases).

Another possibility is to create some web pages that contain your presentation, and either write a small program that interacts with the parcel media to show these pages in a screen or manually change the displayed page. In all cases, you have to play with the texture so that it fits the screen and your presentation is not cut or has ugly extra margins, which is tedious and wastes some time.

It should be noted here that while Second Life forces you to choose between showing a web-based presentation or a video stream, this is not the case with Opensim: you can use the OsSetDynamicTextureURL function to load a presentation from the web into a prim while still showing video via the parcel media.

Whiteboards

WebEx has a built-in whiteboard, and you can decide with whom to share it. Of course it's not very comfortable to use, but no softwate whiteboard is. In Second Life or Opensim there is simply no way to implement a whiteboard.

Application or desktop sharing

WebEx has builtin support for application and desktop sharing -- if in the middle of a class or a meeting you realize you'd like to show a web page to your attendees, for example, you can open that page in a web browser and share the browser, so that everybody can see the page. Second Life or Opensim do not implement any form of application or desktop sharing. There have been some experiments done with a plugin for VNC, but it's not still something usable by the general public. Much before the tests with Second Life, RealXtend (an Opensim derivative) allowed VNC sharing on a prim.

Real-time video streaming

WebEx has built-in support for up to six simultaneous video streams. Image quality depends a lot on bandwidth and is generally webcam-like, but the synchronization with audio is perfect, and you experience no delay. Second Life or Opensim do not act as stream broadcasters, so that you have to buy a separate solution for video streaming (like Veodia) that meets the specifications of streams for Second Life (for example, if your streaming provider sends Windows Media or Flash streams you're out of luck). Then you have to configure Second Life so that the parcel media displays the streamed video, which is not complicated in itself but requires some skills (while the WebEx solution works out of the box). Of course you can only have one video stream, not six like in WebEx.

Mixing it all

Of course in a real class of meeting you'll want to mix all these elements dynamically following the needs of the meeting. For example, you may want to switch from your presentation to a whiteboard or a web page, and then get back to your presentation; or you might want to enlarge the video signal of somebody who's making a long speech and then get back to your slideshow, etc. With WebEx all of this is very simple and can be performed with some few clicks; with Second Life, some things can not be done, and others are painful and disruptive to the meeting or class. For example, you can interrupt a web-based presentation and connect a video channel instead, but this takes some programming or complicated manual intervention, during which the class is interrupted, and then you have to wait for the video to buffer -- very disruptive.

Opensim and its derivatives fare slightly better that Second Life in that respect: as noted, Opensim allows to texture a prim from a URL, which SL does not, and this can allow for simultaneous web-based presentations and video streams; RealXtend implements some support for VNC desktop sharing and also allows to have several video streams in the same parcel, etc.

2. Costs

                       | Second Life   |  WebEx
                       | Min    Avg    |  Min    Avg

| ------ ------ | ------ ------ Setup fee | 1,000 1,000 | 0 300 Avatar setup | 0 481 | N/A N/A Streaming video/mo | 0 84 | 0 0 Monthly fees (1 sim) | 295 295 | 42 81 Monthly cost (-setup)| 295 379 | 42 81 Yearly cost (+setup)| 4,540 6,029 | 504 1,272

[Legend: This is a cost comparison for 25 avatars. We have estimated an average of L$ 5000 per avatar to make them look decent. We have converted L$ to US$ assuming a 260 conversion rate. Streaming video costs are calculated assuming a yearly cost of US$ 1000. All numbers are expressed in US$ and rounded to the nearest integer.]

All considered, it's clear that Second Life/Opensim cannot be compared to WebEx in terms of features and ease of use. Let's examine now costs.

Second Life

To be able to have complete control of your experience, you'll need a private island -- if you rent a homestead from a land baron, you risk having your land confiscated at any time without reason or warning and lose all your work and money, and you'll not be able to do anything about it; things like this are happening every day in Second Life. A full sim has a setup fee of US$ 1000 and a monthly fee of US$ 295. Then you'll have to invest money in buying the tools you need or develop them yourself. If you want your executives, employees, students etc to look good, you have to spend between L$ 5000 to L$ 10000 per user, and lose time buying clothes, skins, hair, etc -- this can be a lot of time if you don't want to end up with an army of clones. Finally, if you need video, you have to shop for a suitable streaming video provider and pay for the service, which can cost you around US$ 1000 per year.

Opensim

Opensim in itself is not a service, as Second Life and WebEx are, and this the reason why I have not included Opensim in the above comparison (it does not make sense to speak of "the cost of Opensim", but of the cost of a determinate solution using Opensim, and there's no sensible way to determine what's "minimum" or "average" in this context). Opensim software is in itself is free, and, therefore, depending on your existing infrastructure, costs may start at US$ 0, and add as you need to hire services from third parties (i.e., video, a hosting provider, etc).

WebEx

WebEx has a small one-time setup fee (something like €200 in Spain, this should be around US$ 300 -- I'm not sure this applies to the USA), and a monthly cost of US$ 42 (we pay more in Spain, € 54, which should something like US$ 81).

3. Support

Webex offers email-based and phone-based technical support. If a user has problems with her connection, you can send them to WebEx support and they help them. With WebEx, you have a single point of support, and it works acceptably well.

On the other hand, although technical support people from Second Life are very polite, helpful and nice (at least at the concierge level), getting effective support there is always a mess, and in some cases plainly impossible. Since Linden Lab only sells you "the platform" and you have to buy your tools elsewhere (for example, a scripted screen for presentations), if that tool fails you can't call the Lindens for help -- you have to contact the author of the tool instead. Most merchants in SL are fine people and are very helpful, but in case they are not, you don't have a place to complain. The same is true when you want to solve a problem with video streaming: the Lindens can't help, because they are only selling "the platform"; the video provider will say that you have a problem with your ISP, and your ISP that you have a problem with your streaming provider. To summarize, in a typical setup you may have 10-20 points of support, and this is clearly a mess and not efective at all.

I can't comment on the level of support for Opensim hosting providers, since I have never tried one. Anyway, if you are using Opensim you're supposed to have a good technical level, since Opensim is alpha software. And the Opensim community is very enthusiastic and helpful. In any case, at the moment Opensim is not for amateurs.

Immersion

A theoretical approach

We saw that Second Life/Opensim do not compare to WebEx in terms or features or ease of use, and we have just seen that it doesn't compare either in terms of costs or support. Since many people insist on the interest and even superiority of Second Life as a platform for meetings and education, and this superiority cannot be attributed to the features, ease of use, costs or support, there must exist a different factor which is exclusive to Second Life/Opensim (or where Second Life/Opensim excels) and which compensates for the inferiority of the product in other areas. But the only candidate for such a factor is immersion.

Contrary to "features", "cost" or "support", which are objective qualities of a product, "immersion" is a psychological quality of experience, and therefore a subjective factor and ultimately something which cannot be attributed to a product, but to the way users experience it -- and this will vary wildly from one user to another, as such is the prerrogative of everything subjective. Defining "immersion", as with everything subjective, is difficult. If you ask somebody who has experienced immersion whether they know how to define it, they will reply "yes, for sure" -- but when actually confronted to the task of defining it, they will begin to hesitate -- this is due to a very common fact: mistaking the certainty of having experienced something with one's ability to define what one has experienced.

Thus, we will not attempt to define what immersion is -- this would be a task for an essay, not a blog post. What we will do is to look at how the term is used, what are its most usual synonyms, and proceed from there -- this will be enough for the purposes of this post.

"Immersion" is usually used as "the feeling of being there". When used in this way, the argument of those defending immersion runs as follows: products like WebEx (or even more sophisticated teleconferencing systems) don't provide the feeling of "actually being there", because you are permanently confronted to a screen which gives you, at most, an abstraction of what's going on "in the other side" -- immersion, however, makes you feel "present" in that other side, and therefore somehow abolishes the separation between "your place" and "the other side". The argument starts to falter when you ask why that feeling of "presence" or "immersion" should be benefical for attending a meetings or a class. Indeed here the argument mistakes "being there" in the physical sense for "being there" in the intellectual sense. What is needed for a successful meeting or class is not "the feeling of being there", which is something psychological and ultimately cannot be evaluated, but the actual fact of being involved in the conversation and participating in it, which is something objective, can be evaluated, and does not depend on "feeling that you are there". In fact, the actual surroundings are of no importance when you are actually involved in a conversation -- this explains why some people close their eyes when concentrating: surroundings are distracting, a nuisance -- be them "there" or "here".

Actual experiences

"Immersion" is therefore a state of the mind. It always involves some dose of roleplaying: you have to pretend that you are your avatar, you have to act as if the other avatars actually "are" other people, you have to behave as if "you" are sitting when your avatar "sits", "you" are actually shaking hands to other people when your avatar shakes hands with another avatar, and so on.

The fact is that not everybody experiences immersion. See for example what Eric Krangel, reporter for Reuters in Second Life, had to say in an interview for the Silicon Valley Insider: "As part of walking my 'beat,' I'd get invited by sources to virtual nightclubs, where I'd right-click the dancefloor to send my avatar gyrating as I sat at home at my computer. It was about as fun as watching paint dry." You could argue that Mr. Krangel was somehow immersion-impaired, and that Reuters could well have chosen somebody with better feelings towards the product -- but the fact is that my experiences with other people are very similar to Mr. Krangel's experiences.

Now I hear the legions of immersionist fanatics starting to organize a lynch mob in which I would be the unwilling star. Stop it. I'm an immersive avatar, I enjoyed immersion since my first second in Second Life, I have an active and wonderful social life in Second Life, and I'm myself in love with virtual worlds. I even host an Opensim-based micro-grid. Go check my Flickr, my YouTube or this blog for details. It's not about me that I'm speaking, but about what's happening to most people.

For example: In the companies I worked for, I personally trained 20+ people: executives, teachers and advanced students. I showed them how the client worked, accompanied them to buy nice skins and clothes, taught them how to use the tools needed to manage a meeting or a class, etc. Of these 20+ people only three (3!) found the experience interesting enough that they devoted some of their free time to explore the world, socialize, etc. Other people ranged from a sudden and immediate loss of interest (i.e., they never used it except when it was needed for their work) to a clear phobia to use the system: they said that they felt "ridiculous using that game", that they felt that their avie was "a sinister puppet", and they could never go beyond the feeling that they were being forced to use a game that was distracting them from the tasks they had to perform.

Horrors of (non) immersion - a sample case

Here's a case I followed closely: classes were held in a mixed-reality scenario; some of the students attended the class in RL, while others came via Second Life. An image of the SL class was projected in the RL class, and a real-time video of the RL class was shown in SL. The audio system was configured in such a way that what was being said in RL was channeled to the audio stream of SL, and when somebody from SL spoke, their woice was heard in RL through the speakers.

Cool, no?

Well, in reality it was not cool at all. Let's see what happened:

SL side

In the SL side, things got pretty boring after the first minutes. The sitting animations are mostly static, and animations for teachers are dull and repetitive. After taking a peek at their fellow students and at the classroom, the interest of people participating in the class via SL faded quickly -- the only visual element that could show any novelty was the video stream, which had a delay of 5+ second with respect to the voice channel and therefore gave a somehow creepy impression. Most people ceased to look at their screens or opened another application (to sort out their spam in the meanwhile, for example). This had the unwanted side effect to make them fall in the "away" state rather quickly. Since many of them had absolutely refused to spend a cent in bettering their appearance, they were not precisely nice looking. And they were away. Very depressing :-)

RL side

In the RL side things were not much better. Since most RL students were not aware of the existence or meaning of virtual worlds, projecting an SL image in the RL class gave them the impression they were being shown a video game. SL has glicthes and SL students weren't very skilled at managing the product, so that they ended up sitting in the head of some fellow student, sitting on a table, suddenly unsitted and started to fly, etc, which was extremely distracting for everybody, real or virtual, and interrupted the class. Spatial voice is a disaster for classes; when a student that was sitting far away from the camera spoke, the RL teacher had to quickly move the camera so that she could be heard. Changing web-based slides was a mess and interrupted the class, and so on.

The immersive people

I've already mentioned that some few people had immersive avatars. You could quickly identify them because their avatars were much more beautiful, they took the time to change outfits for each meeting, etc. They explained that they spent most of the time looking at themselves and at their immersive fellow students (as everybody does in SL, by the way). After some minutes, they also got bored and started some other application while listening at what the teacher had to say.

So, is immersion absolutely useless?

Please notice that I'm not saying that immersion is completely useless for education. To the contrary, I'm convinced that there are scenarios where it is a wonderful tool -- for example, real-time collaboration in 3D modelling. What I am saying is that, in the general case of meetings and classes, the use of virtual worlds is presently useless.

Of course one could argue that this is due to the current imperfections of the technology. Better technology, goes the argument, would eliminate all the current pitfails of SL as a tool for meetings: the user interface will be more intuitive and less intrusive; animations will reflect accurately what the user is doing, and so they will stop being dull; avatars will automatically resemble their humans (if their humans so desire), and they'll even show facial emotions (like in James Cameron's film), etc. All of this might happen, and I for one would be very happy if it happened as soon as possible; but unfortunately this speaks of some possible future products and platforms, not of what we have today.

Wishful thinking, collective delusion, or a marketing strategy?

Since it appears clearly that it cannot be rationally claimed that virtual world technologies are useful, in a general sense, for business meetings and classes, we can ask ourselves why so many people are insisting that this is the case. It could be that the people making these claims were victims of some form of wishful thinking; it could also be the case that they were victims of a collective form of delusion; finally, it could also be that they were making these claims as some form of marketing strategy. My personal impression is that these three factors operate simultaneously.

Wishful thinking

It's human to mistake one's own desires for reality. It's happened to me, it's happened to you, it happens to everybody, daily. When I entered SL, I immediately experienced immersion. Since I was experiencing it, I didn't understand how it could be that other people weren't experiencing it. I attributed this fact to several factors: they were not so good with computers as I am, the technology was too new and they needed some time to adapt, they were future-shocked, etc. It took me several months to realize the truth: they weren't experiencing immersion because they were not interested in experiencing it; they simply didn't want to "be" an avatar. I call my self-delusion "wishful thinking" because at the time I really desired that everybody had an avatar. One could do so many nice things if everybody had one and experienced immersion as I did! But, as time has teached me, my wishes and how things are in reality are completely different things.

Collective delusion

Sometimes I think about Linden Lab. I don't know the company from inside, but I can imagine it -- a big company, formed by enthusiasts of virtual worlds. At least this was surely so at the beginning. Now the have hired new people, but it's a dogma that they all must pretend to be very immersive and enjoy their virtual lifes very much -- else LL would risk enraging the residents because they've put somebody who's not "one of us", who "understands nothing", to manage a certain part of the company.

Isn't that a perfect field for collective delusion? People from Linden Lab always explain how much they meet in Second Life, how they save considerably by doing so, and so on. If you think of it, it's no surprise -- it's as if you asked people who attended a party in SL whether they believed they had attended a party: of course all of them would reply they had.

What I'm arguing here is that Linden Lab is not a good example of the composition of your average company or your average school. What they say they are experiencing must be true for them, but it cannot be generalized to other collectives. So that they must be suffering of some form of collective delusion, believing that what is good for them can be immediately extrapolated to other businesses.

Marketing strategy

We could also be a little more cynical and think that some Lindens are not under any form of delusion, but that they are speaking about the superiority of Second Life as a tool for companies and educational institutions as a form or marketing strategy. Saying so would give them part of the market, and in the meanwhile they could invest to better the platform, so that in a short time it would not be such an inferior beast, but more comparable to WebEx and the rest of the competition. They could also be hoping that virtual worlds would "go mainstream" (M Linden actually says so in many places, including the interview cited at the beginning of this post), etc.

The problem with such an strategy is that it is very risky. What's happened to the companies I've been working for is happening now to a big number of other companies, and will happen in the near future to still more companies. And Linden Lab will have burnt these customers. As Adam Frisby says about a related topic (tele-workers), this risks provoking "yet-another-media 'Are virtual worlds over-hyped?' rush."

Conclusion

Virtual world platforms like Second Life and Opensim are today not developed enough to be of use, in the general case, for companies wanting to hold meetings and for educational institutions. This does not mean that it's false that, as the homepage for Opensim says, "many people are doing exciting things with it". Promoting the use of Second Life or Opensim as a tool for enterprises and educators, without adding big warnings or disclaimers, is the best way to actually delay adoption of the technology for several years: early adopters will get burned and start a backslash against the technology.

I will end this post citing part of a comment by At0m0 Beerbaum in an article by the Second Life Alphaville Herald about my Openspace Fiasco article. It's a comment that made me think a lot, and, seen in perspective, I have to say that I tend to agree with everything he says.

However, I said this months ago, SL is not a platform to do business on, it's more of the spider enticing the fly into its web. Linden Labs has no interest in actually providing enterprise support, they just want to push out a half-assed system, claim it has business potential because it can play embedded video and has voice, and profit from it with lots of feel good sales speak.

Hell, they havent even properly implemented shadows in their mainstream client, nor did they go anywhere with windlight.

You can easily go with a cisco conferencing solution or any other video conferencing solution, and pay much less overall than what Linden Labs wants to charge for zero support, and small pieces of server space.

SL is an entertainment platform, aka, a game. If you want to conduct real business, go with a company that has experience in this field. Otherwise if you just want a time waster and some eye candy, or a marketing hook, then look into getting a sim.

Update 1: There was an error in the calculation of costs for Opensim which has now been corrected. Given the variety of uses and configurations for Opensim, it's very difficult to estimate meaningful "minimum" and "average" values for the cost calculation. I've opted to set the minimum value to zero, assuming an intranet use where all services (voice, streaming video, etc) are provided by the intranet, and set the "average" value to the cost of a well-known provider + the cost for streaming video.

Update 2: I received some comments that made me realize that including Opensim in the cost table was not a good idea after all. Opensim is not a service (as Second Life and WebEx are), and therefore it doesn't make sense to speak of "minimum" or "average" costs "for Opensim". It would make sense if we chosed a determinate Opensim hosting provider, but again in this case there's no clear "average": OSGrid is free (if you can host your own sims), for example.


by Zonja Capalini at February 21, 2010 07:10 PM

February 16, 2010

Zonja Capalini » OpenSim

Potential RL-identity exploit with Avatars United [UPDATED]

[UPDATEMSo Lambert has posted a clarification in Snickers' and Peter's posts that indicate there is no risk of emails being exposed.]

I’m reproducing below in its entirety a post by Peter Stindberg. I’ve seen many people from Opensim grids, specially from OSGrid, in Avatars United. Peter’s post identified a potential security breach in Avatars United by which a malicious application could harvest avatar-email associations. Apart from the exposure to spam, this can lead to disclosure of RL details for those who are using RL email addresses in association with their avatars.

[Start of Peter's post]

For those of you using their RL-email for their SL-avatar, using the default settings of Avatars United might pose a risk of unintentional exposing the address!

Snickers Snook posted an insightful article about “Spam via Avatars United“, where she explained that since joining AU she receives significantly more spam on her supposedly undisclosed email address. She dug a bit into the settings and found that the default is that even non-installed AU-widgets can access certain data and send emails.

While Snickers primarily saw the spam problem, my friend Zonja Capalini pointed out that while being spammed is a nuisance, the bigger threat lies in the unsolicited disclosure of a potential RL email address and thus disclosure of the RL identity.

So if this concerns you, do two things:

  1. Read Snickers article and adjust your Avatars United settings
  2. Go and finally get a GMail/Yahoo/Hotmail/whatever address for your avatar

[End of Peter's post]


by Zonja Capalini at February 16, 2010 11:20 AM

February 13, 2010

Zonja Capalini » OpenSim

Splitting Megaregions

One of the most interesting developments in Opensim lately have been megaregions. Megaregions are non-standard “big” regions created by combining several standard, 256×256 meters regions. For example, you can combine four standard regions in a square to get a megaregion of 512×512 m. Megaregions are very convenient because of several reasons: for example the usual lag in region crossings disappears completely (since you are in the “same” region), and the same is true of vehicles. On the other hand, megaregion support is still experimental, and a number of things that work in normal regions don’t work or work only partially in megaregions. For example, you cannot define parcels outside of the SW region (this is due to the way parcel maps work), and therefore you can’t have independent music streams (for example) when x > 256 or y > 256.

Diva Canto’s distribution of Opensim directly supports megaregions. You can also migrate an existing non-megaregion installation to a megaregion configuration, if you follow certain precautions. Migrating from a megaregion configuration to a non-megaregion configuration is also possible — you change the setting that implements megaregions, “CombineContiguousRegions” to false, and it works as expected.

OAR support for megaregions is partial: since technically all the objects in the megaregion are stored in the SW region, when you take an OAR of the SW region you get all the objects of the megaregion but only the terrain for that same region — this means that you cannot fully rebuild a megaregion from an OAR, which is a pity (you will be missing the terrain files for all regions except the SW one).

Splitting megaregions

In this post I’ll describe some experiments I made with an OAR manipulation tool I developped following a suggestion of Stefan Andersson. The tool takes as its input a megaregion OAR and splits it into several non-megaregion OARs, creating one OAR for each region that constitutes the megaregion and has objects in it. This is so because megaregions may have holes, and when a possible region does not have objects there’s simply no information in the megaregion OAR about whether a it’s a region with no objects (for example, a sea-only region) or a hole in the megaregion.

The tool

The tool works in a very simple way: the OAR contents is first optionally extracted, and then it iterates over each object in the megaregion, extracting the x and y coordinates from the XML2 file and calculating the position of the corresponding region in the grid (relative to the SW region). Then a copy of the object with new non-megaregion coordinates is written to a temporary directory called ‘objects.i.j’, where ‘i’ and ‘j’ are the grid coordinates offset + 1 (for example, the SW region will have i = j = 1, the region to its east i = 2, j = 1, the region to its north i = 1, j = 2, etc). Finally, each of these directories is temporarily renamed to ‘objects’ (the standard directory name for objects in a OAR), and the ‘tar’ command is invoked to produce a file called fname.i.j, where fname is the name of the original OAR file, or ‘region’ if this name is unknown.

For example, using the tool against a 2×2 megaregion OAR called ‘test.oar’ will produce 4 OARs: test.1.1.oar (the SW region), test.2.1.oar (the SE region), test.1.2.oar (the NW region) and test.2.2.oar (the NE region). The current version of the tool has two problems: the first one is that it does not attempt to perform asset splitting, that is, the original megaregion OAR contains the assets (i.e., textures, scripts, object contents, etc) for all the objects in the megaregion, and the splitted OAR files will contain a copy of all the assets in the megaregion (instead of only the assets corresponding to the objects in the splitted region); this can be manually corrected by “normalizing” the OAR file: load it into an empty region and save a new OAR.

The second problem cannot be corrected, and is due to the (already mentioned) fact that megaregions do not contain terrain data for regions different from the SW region. Due to this fact, all the OAR files produced will contain the same terrain file, that is, the terrain file corresponding to the SW region (would it be better if I simply didn’t include any terrain?). This is not so much of a problem as it appears, if we can have access by other means to the missing terrain files: we can manually load the terrain in the target region and later load the oar with the ‘–merge’ option, or we can first load the oar and then the terrain.

How should megaregion terrains be stored in OAR files?

It is very probable that a future version of the OAR file format will include terrain information for all the regions in a megaregion. There are two ways to store such information: one is to store a big r32 file with the terrain data for the whole megaregion, and another one is to store the individual terrain files for each region. Both approaches have advantages and disadvantages: storing the terrain for the whole megaregion is ideal if we want to do some kind of online editing of the terrain (this can also be done if we have the single-region terrain files, but we have to aggregate the terrains first, which is cumbersome); on the other hand, storing the individual terrain files is ideal for megaregion splitting tools like the one presented in this article. The ideal solution would be to include both the megaregion terrain and the individual region terrains, and define semantics for the OAR load process: for example, “use the megaregion terrain if it is present, else use the individual region terrains”.

Implementation and technical details

To save coding time, I’ve implemented the tool as a new command called “SPLIT” in version 0.2 of my ZOE OAR editor. You open a megaregion OAR file with ZOE, type “SPLIT”, and that’s it — in some seconds you have the new OAR files. I’ve also updated ZOE so that it now depends on Cygwin being installed (instead of using 7z like in version 0.1) — this means that ZOE should run unchanged under Linux (but I can’t test that since I don’t have access to a Linux machine). This also means that ZOE should be called using “rexx zoe oarname” instead of “zoe oarname” (Cygwin bash does not understand the latter). To summarize, here’s what you’ll need:

  1. Open Object Rexx.
  2. (Only for Windows:) Cygwin (tested with Cygwin 1.7.1-1).
  3. ZOE version 0.2, which you can download here.

Other minor changes in ZOE 0.2 are that the “zoe ??” and “zoe (c)” special calls have been eliminated (please refer to the documentation for ZOE 0.1 for details).


by Zonja Capalini at February 13, 2010 12:49 PM

February 09, 2010

Darb Dabney's 3d GIS - OpenSim » OpenSim

OpenSim: and now, a word from the Founder [Second Life]

Many thanks to Singularity U, director Matt Rutherford, and to Randall Hand who brought it to my attention After chatting at SLCC 2009 this past summer, I appreciate the immediacy of this lecture. OpenSim is discussed around minute 37 (video is available at 720p HD, and is just over 51 minutes long.) Discussion of augmented […]

by Darb at February 09, 2010 09:01 AM

February 04, 2010

Darb Dabney's 3d GIS - OpenSim » OpenSim

A visit to ScienceSim Geography regions – OpenSim with turbo boost

I don’t have much to say about these regions that hasn’t been written already, and my views have been less aesthetic than Shenlei’s. But in the interest of boosting the bandwidth by which I can share OpenSim, I’ve invested in a much newer Adobe Premiere Elements than I’d been using for the past five or […]

by Darb at February 04, 2010 08:30 AM

January 25, 2010

Zonja Capalini » OpenSim

Partial documentation for SceneObjectGroup serialization in XML2 format

Warning: This is a work-in progress. I’m publishing this article now to see whether it generates interest and which kind of feedback I get. The material published here is incomplete, and contains for sure errors, ommisions and inaccuracies. I plan on extensively modifying it during the following days. Please take that into account when reading it.

The XML2 format

The XML2 format is used in Opensim to serialize objects or linksets (called “SceneObjectGroups” in the Opensim parlance). XML2 dumps of objects can be obtained using the ‘save xml2′ or ‘save prims xml2′ console commands, and are used internally to serialize objects in Opensim Archive (OAR) and Inventory Archive (IAR) files. For example, OARs are gzipped tar files containing a directory called ‘objects’ with one XML2 file for each linkset in the region.

XML2 files are standard XML files using an ASCII encoding and no whitespace. This means that there’s no extra indenting or formatting between tags to make the file more pleasant to the eye. You can use any XML editor (including Internet Explorer) to display an XML2 file with some additional prettyprinting and formatting.

XML2 is practically undocumented, but the fact that it’s undocumented is itself (informally) documented :-), in comments scattered through the Opensim wiki and in the Opensim-dev and Opensim-users lists. Essentially, what this means is that the format is subject to change, but not much change: attributes (i.e., new tags) may be added to the format without breaking it — the developers program the classes taking this possibility into account and storing default values when an attribute is expected but not present (for example, if you’re loading an old OAR file which does not have the ‘AllowedDrop’ attribute into a newer installation which does have this attribute).

In this article I document partially the structure of XML2 files using a variant of the BNF notation. I include the productions for most of the format, interspersing comments wherever I have some idea of the meaning of the tag contents. I’ve obtained this information by manually looking at the XML2 files when developing the simple OAR editor I called ZOE and in recent modifications to that editor. I’ve also taken a look at the source code for Opensim and at the code for libopenmetaverse. There may be errors and there are for sure omissions; any kind of comment, addition, correction or clarification would be greatly appreciated.

The whole SceneObjectGroup/SceneObjectPart model is about to be heavily refactored to be able to include very cool things like hyerarchical objects or meshes, and this will most probably require a new format (XML3?) to serialize Opensim objects. I am writing this article as a way to teach myself, and I’m making it public in case somebody else can find its contents useful. Please keep in mind at all times that this is not official documentation :-) — that’s one of the reasons why this appears as a blog article instead as a page in the Opensim wiki, the other being that I’d prefer to get some feedback before writing such a complicated wiki page, in case it’s considered useful to have it.

SceneObjectGroups

An Opensim “object” or “linkset” is a linked collection of “parts” (prims or prim-like objects, like Linden trees), called a “SceneObjectGroup”. This collection cannot be empty, i.e., it contains always at least one part, but it might contain several, in which case there is a distinguished part called the “root” part. The XML2 representation of a SceneObjectGroup, thus, contains the root part, the (possibly empty) collection of the other parts, and (optionally) the saved states of the scripts running in the linkset, so that a “load oar” is as equivalent as possible to a region restart.

  SceneObjectGroup ::= '<SceneObjectGroup>'
                            RootPart
                            OtherParts
                           [GroupScriptStates]
                       '</SceneObjectGroup>'

Parts are technically called "SceneObjectPart"s.

  RootPart ::= SceneObjectPart

When there is only a part, an empty "OtherParts" tag is used; otherwise, the sequence of the other parts are is enclosed between matching "OtherParts" tags.

  OtherParts ::= '<OtherParts />'
               | '<OtherParts>' SceneObjectPart+ '</OtherParts>'

The GroupScriptStates section may be absent; when present, a sequence of SavedScriptStates is enclosed between matching "GroupScripStates" tags:

  GroupScriptStates ::= '<GroupScriptStates>'
                            SavedScriptState+
                        '</GroupScriptStates>'

SavedScriptStates are, for the moment, undocumented, and will probably remain so until some changes are made in the Opensim script engine:

  SavedScriptState ::= TBD

Basic types and non-terminals

We will now need a set of basic non-terminals so that we don't have to include BNF for things that don't interest us at this stage, like real numbers, integers or text strings:

  bool       ::= 'true' | 'false';
  byte       ::= (* a natural number >= 0 and <= 255 *);
  sbyte      ::= (* a whole number >= -128 and <= 127 *);
  ushort     ::= (* a natural number >= 0 and <= 65,535 *);
  int        ::= (* a whole number >= –2,147,483,648 and <= 2,147,483,647 *);
  uint       ::= (* a natural number >= 0 and <= 4,294,967,295 *);
  ulong      ::= (* a natural number >= 0 and <= 18,446,744,073,709,551,615 *);
  uuid       ::= (* see http://en.wikipedia.org/wiki/Universally_Unique_Identifier *);
  float      ::= (* a real number, 7 digits of precision,
                 between 1.5 x 10–45 and 3.4 x 1038 *);
  string     ::= (* a descriptive string *);
  TBD        ::= (* To Be Documented *);
  Vector3    ::= '<X>' float '</X>'
                 '<Y>' float '</Y>'
                 '<Z>' float '</Z>';
  Quaternion ::= '<X>' float '</X>'
                 '<Y>' float '</Y>'
                 '<Z>' float '</Z>'
                 '<W>' float '</W>';

SceneObjectParts

Please refer to SceneObjectPart.cs in the Opensim source for details.

  SceneObjectPart ::= SOPStart SOPContents SOPEnd
  SOPStart ::= '<SceneObjectPart'
               ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance'
               ' xmlns:xsd="http://www.w3.org/2001/XMLSchema">'
  SOPEnd ::= '</SceneObjectPart>'

The extra attributes in the "<SceneObjectPart>" start tag are due to the fact that SceneObjectParts are serialized automatically by the .NET/Mono runtime (while SceneObjectGroups are serialized manually).

  SOPContents ::= [AllowedDrop] CreatorID FolderID InventorySerial
                  TaskInventory ObjectFlags UUID LocalId Name Material
                  PassTouches RegionHandle ScriptAccessPin GroupPosition
                  OffsetPosition RotationOffset Velocity AngularVelocity
                  Acceleration Description Color Text SitName TouchName
                  LinkNum ClickAction Shape Scale UpdateFlag
                  SitTargetOrientation SitTargetPosition SitTargetPositionLL
                  SitTargetOrientationLL ParentID CreationDate Category
                  SalePrice ObjectSaleType OwnershipCost GroupID
                  OwnerID LastOwnerID BaseMask OwnerMask GroupMask
                  EveryoneMask NextOwnerMask Flags CollisionSound
                  CollisionSoundVolume

Remember that the list of attributes of a SceneObjectPart can change between different releases of Opensim. For example, older version 0.2 OARs don't include an AllowedDrop attribute (that's why I have marked it as optional), and newer SceneObjectParts may include new attributes not specified here.

Most attributes are represented by the basic types defined above, exceptuating TaskInventory, which is a list of TaskInventoryItems representing the contents of a prim (i.e., what's on its "Contents" tab) and Shape, which is itself a structured attribute with many subattributes (please refer to PrimitiveBaseShape.cs in the Opensim source for details:

  Shape ::= '<Shape>'
      ProfileCurve TextureEntry ExtraParams PathBegin PathCurve
      PathEnd PathRadiusOffset PathRevolutions PathScaleX PathScaleY
      PathShearX PathShearY PathSkew PathTaperX PathTaperY PathTwist
      PathTwistBegin PCode ProfileBegin ProfileEnd ProfileHollow
      Scale State ProfileShape HollowShape SculptTexture SculptType
      SculptData FlexiSoftness FlexiTension FlexiDrag FlexiWind
      FlexiForceX FlexiForceY FlexiForceZ LightColorR LightColorG
      LightColorB LightColorA LightRadius LightFalloff LightIntensity
      FlexiEntry LightEntry SculptEntry
    '</Shape>'

For our purposes, the attributes of the SceneObjectPart and the attributes of its Shape attribute can be treated as a homogeneous set. You will notice that there is a Scale attribute both in the SceneObjectPart and in its Shape attribute; these are one and the same (i.e., they have always the same value). We will classify the combined set of attributes following the tabs of the standard object editor in the Second Life type of viewers.

General tab
Object tab
Features tab
Texture tab
Content tab
Other attributes

General tab

0816 - The 'General' tab, 1

  Name ::= '<Name />'
         | '<Name>'
              string
           '</Name>'

Name of this part. If this is the root part, this is also the name of the whole SceneObjectGroup.

  Description ::= '<Description />'
                | '<Description>'
                     string
                  '</Description>'

A (possibly empty) description for the part. If the part is the root part, this is also the description for the whole SceneObjectGroup.

  CreatorID ::= '<CreatorID><Guid>' uuid '</Guid></CreatorID>'

Uuid of the creator of this part.

  OwnerID ::= '<OwnerID><Guid>' uuid '</Guid></OwnerID>'

Uuid of the owner of this part (and therefore of the whole SceneObjectGroup).

  LastOwnerID ::= '<LastOwnerID><Guid>' uuid '</Guid></LastOwnerID>'

Uuid of the last owner of this part. Useful when returning objects.

  GroupID ::= '<GroupID><Guid>' uuid '</Guid></GroupID>'

Uuid of the group this part (and therefore the whole SceneObjectGroup) is assigned or deeded to.

0817 - The 'General' tab,2

  BaseMask ::= '<BaseMask>' uint '</BaseMask>'

See the PermissionMask enum in Permissions.cs in the libopenmetaverse source. The following information was adapted from http://opensimulator.org/wiki/OpenSim:Permissions:

 public enum PermissionMask : uint
 {
    None        = 0;
    Transfer    = 1 << 13, //0x00002000
    Modify      = 1 << 14, //0x00004000
    Copy        = 1 << 15, //0x00008000
 // EnterParcel = 1 << 16, //0x00010000 -- Obsolete
 // Terraform   = 1 << 17, //0x00020000 -- Obsolete
 // OwnerDebit  = 1 << 18, //0x00040000 -- Obsolete
    Move        = 1 << 19, //0x00080000
    Damage      = 1 << 20, //0x00100000
    All         = 0x7FFFFFFF
 }

Default: PermissionMask.All. This field represents the highest amount of permissions the owner of an object can have. For example, if you set next permissions as 'No transfer' for an object and transfer it, the NextOwnerMask will have the Transfer bit unset (see below), this will ANDed to the BaseMask, and thus the new BaseMask will also have the Transfer bit unset, so that the new owner cannot transfer the object or make it transferable again.

  OwnerMask ::= '<OwnerMask>' uint '</OwnerMask>'

Default: PermissionMask.All. These are the current owner's permissions for the object.

  GroupMask ::= '<GroupMask>' uint '</GroupMask>'

Default: PermissionMask.None.

  EveryoneMask ::= '<EveryoneMask>' uint '</EveryoneMask>'

Default: PermissionMask.None. These are the permissions that the general public have on the object. When the 'Move' flag is set, this is a 'Anyone can Move' object; similarly, when the 'Copy' flag is set, this is a 'Anyone can Copy' object.

  NextOwnerMask ::= '<NextOwnerMask>' uint '</NextOwnerMask>'

Default: PermissionMask.All. These are the permissions that the owner sets with the Modify, Copy and Transfer checkboxes.

BaseMask, OwnerBask and EveryoneMask  have their flags ANDed with the NextOwnerMask when the object is transferred.

  Flags ::= '<Flags>' flag [flag]* '</Flags>';

  flag ::= 'None' | 'CreateSelected' | 'ObjectModify' | 'ObjectCopy'
         | 'ObjectAnyOwner' | 'ObjectYouOwner' | 'Scripted' | 'Touch'
         | 'ObjectMove' | 'Money' | 'Phantom' | 'InventoryEmpty'
         | 'JointHinge' | 'JointP2P' | 'JointLP2P' | 'JointWheel'
         | 'AllowInventoryDrop' | 'ObjectTransfer' | 'ObjectGroupOwned' | 'ObjectYouOfficer' 
         | 'CameraDecoupled' | 'AnimSource' | 'CameraSource' | 'CastShadows'
         | 'ObjectOwnerModify' | 'TemporaryOnRez' | 'Temporary' | 'ZlibCompressed'

A set of flags. See the PrimFlags enum in Primitive.cs in the libopenmetaverse source. The following information was adapted from http://opensimulator.org/wiki/OpenSim:Permissions:

 public enum ObjectFlags : uint
 {
 None = 0,
            Physics = 0x00000001, CreateSelected = 0x00000002,     ObjectModify = 0x00000004,       ObjectCopy = 0x00000008,
     ObjectAnyOwner = 0x00000010, ObjectYouOwner = 0x00000020,         Scripted = 0x00000040,            Touch = 0x00000080,
         ObjectMove = 0x00000100,          Money = 0x00000200,          Phantom = 0x00000400,   InventoryEmpty = 0x00000800,
         JointHinge = 0x00001000,       JointP2P = 0x00002000,        JointLP2P = 0x00004000,       JointWheel = 0x00008000,
 AllowInventoryDrop = 0x00010000, ObjectTransfer = 0x00020000, ObjectGroupOwned = 0x00040000, ObjectYouOfficer = 0x00080000,
    CameraDecoupled = 0x00100000,     AnimSource = 0x00200000,     CameraSource = 0x00400000,      CastShadows = 0x00800000,
  //not defined yet   0x01000000,                  0x02000000,                    0x04000000,                    0x08000000,
  ObjectOwnerModify = 0x10000000, TemporaryOnRez = 0x20000000,        Temporary = 0x40000000,   ZlibCompressed = 0x80000000
 }

Default: ObjectFlags.None (0).

These bits are different from the previous masks, in the sense that they contain the 'actual' or 'calculated' values for the object (and many more options, to store, for example, whether the object is physical, phantom, or touch).

  SalePrice ::= '<SalePrice>' int '</SalePrice>'

Sale price.

  ObjectSaleType ::= '<ObjectSaleType>' byte '</ObjectSaleType>'

TBD

  OwnershipCost ::== '<OwnershipCost>' int '</OwnershipCost>'

TBD

Object tab

  GroupPosition ::= '<GroupPosition>' Vector3 '</GroupPosition>'

A vector defining the position of the whole SceneObjectGroup, that is, of its root part. It has the same value for all the SceneObjectParts -- each individual part individualizes its position by defining an OffsetPosition (i.e., for each part, its position = GroupPosition + OffsetPosition).

  OffsetPosition ::= '<OffsetPosition>' Vector3 ''</OffsetPosition>'

Offset of this part, relative to the position (GroupPosition) of the root part. See GroupPosition.

  Scale ::= '<Scale>' Vector3 '</Scale>'

Size of the part. Please note that the Scale attribute of the SceneObjectPart and the Scale attribute of its Shape attribute have always the same value.

  RotationOffset ::= '<RotationOffset>' Quaternion '</RotationOffset>'

Rotation of the SceneObjectPart, relative to the region if this is the root part, or relative to the root part if this is not the root part.

  ProfileCurve ::= '<ProfileCurve>' byte '</ProfileCurve>'

A logical OR of the byte values of the HollowShape and ProfileShape attributes.

  ProfileBegin ::= '<ProfileBegin>' ushort '</ProfileBegin>'

[See Opensim.Region.ScriptEngine.Shared.Api.LSL_Api,  SetPrimitiveBlockShapeParams and SetPrimitiveShapeParams.]

When Building Block Type is "Box", "Cylinder", "Prism", "Torus","Tube", "Ring": (ushort) (50,000 * (Value of "Path Cut Begin"))
When Building Block Type is "Sphere": (ushort) (50,000 * (Value of "Dimple Begin")).
When Building Block Type is "Sculpted": 0.

  ProfileEnd ::= '<ProfileEnd>' ushort '</ProfileEnd>'

[See Opensim.Region.ScriptEngine.Shared.Api.LSL_Api,  SetPrimitiveBlockShapeParams and SetPrimitiveShapeParams.]

When Building Block Type is "Box", "Cylinder", "Prism", "Torus", "Tube", "Ring": (ushort) (50,000 * (1 - (Value of "Path Cut End"))).
When Building Block Type is "Sphere": (ushort) (50,000 * (1 - (Value of "Dimple End"))).
When Building Block Type is "Sculpted": 0.

  ProfileShape ::= '<ProfileShape>'
                      ( 'Circle' | 'Square' | 'IsometricTriangle' |
                        'EquilateralTriangle' | 'RightTriangle' |
                        'HalfCircle'
                      )
                   '</ProfileShape>'

Where Circle = 0, Square = 1, IsometricTriangle = 2, EquilateralTriangle = 3, RightTriangle = 4, HalfCircle = 5, but the name is stored, not the value.

When Building Block Type is "Box", "Tube": "Square".
When Building Block Type is "Cylinder", "Torus", "Sculpted": "Circle".
When Building Block Type is "Prism", "Ring": "Equilateraltriangle".
When Building Block Type is "Sphere": "HalfCircle".

0771 - Hollow

Hollow attributes: ProfileHollow and HollowShape

  ProfileHollow ::= '<ProfileHollow>' ushort '</ProfileHollow>'

[See Opensim.Region.ScriptEngine.Shared.Api.LSL_Api,  SetPrimitiveBlockShapeParams and SetPrimitiveShapeParams.]

When Building Block Type is "Box", "Cylinder", "Prism", "Sphere", "Torus", "Tube", "Ring": (ushort) (50,000 *  (Value of "Hollow")).
When Building Block Type is "Sculpted": 0.

  HollowShape ::= '<HollowShape>'
                     ( 'Same' | 'Circle' | 'Square' | 'Triangle' )
                  '</HollowShape>'

Where Same = 0, Circle = 16, Square = 32, Triangle = 48, but the name is stored, not the value.

  PathBegin ::= '<PathBegin>' ushort '</PathBegin>'

When Building Block Type is "Sphere", "Torus", "Tube", "Ring": (ushort) (50,000 * (Value of "Path Cut Begin")).

  PathCurve ::= '<PathCurve>' byte '</PathCurve>'

Byte value (mask?) of the enum "Extrusion" in PrimitiveBaseShape.cs: Straight = 16, Curve1 = 32,  Curve2 = 48, Flexible = 128.

When Building Block Type is "Box", "Cylinder", "Prism": Extrusion.Straight.
When Building Block Type is "Sphere", "Torus", "Tube", "Ring", "Sculpted": Extrusion.Curve1.

  PathEnd ::= '<PathEnd>' ushort '</PathEnd>'

[See Opensim.Region.ScriptEngine.Shared.Api.LSL_Api,  SetPrimitiveBlockShapeParams and SetPrimitiveShapeParams.]

When Building Block Type is "Sphere", "Torus", "Tube", "Ring": (ushort) (50,000 * (1 - (Value of "Path Cut End"))).
Zero otherwise.

  PathRadiusOffset ::= '<PathRadiusOffset>' sbyte '</PathRadiusOffset>'

[See Opensim.Region.ScriptEngine.Shared.Api.LSL_Api,  SetPrimitiveBlockShapeParams and SetPrimitiveShapeParams.]

When Building Block Type is "Torus", "Tube", "Ring": (byte) (100 * (Value of "Radius")).
Zero otherwise.

  PathRevolutions ::= '<PathRevolutions>' byte '</PathRevolutions>'

[See Opensim.Region.ScriptEngine.Shared.Api.LSL_Api,  SetPrimitiveBlockShapeParams and SetPrimitiveShapeParams.]

When Building Block Type is "Torus", "Tube", "Ring": (byte) (100 * (Value of "Revolutions")).
Zero otherwise.

  PathScaleX ::= '<PathScaleX>' byte '</PathScaleX>'

[See Opensim.Region.ScriptEngine.Shared.Api.LSL_Api,  SetPrimitiveBlockShapeParams and SetPrimitiveShapeParams.]

When Building Block Type is "Box", "Cylinder", "Prism": (byte) (100 * (2.0 -  (Value of "Taper X"))).
When Building Block Type is "Torus", "Tube", "Ring": (byte) (100 * (2.0 -  (Value of "Hole Size X"))).
When Building Block Type is "Sphere", "Sculpted": 0.

  PathScaleY ::= '<PathScaleY>' byte '</PathScaleY>'

[See Opensim.Region.ScriptEngine.Shared.Api.LSL_Api,  SetPrimitiveBlockShapeParams and SetPrimitiveShapeParams.]

When Building Block Type is "Box", "Cylinder", "Prism": (byte) (100 * (2.0 -  (Value of "Taper Y"))).
When Building Block Type is "Torus", "Tube", "Ring": (byte) (100 * (2.0 -  (Value of "Hole size Y"))).
When Building Block Type is "Sphere", "Sculpted": 0.

  PathShearX ::= '<PathShearX>' byte '</PathShearX>'

[See Opensim.Region.ScriptEngine.Shared.Api.LSL_Api,  SetPrimitiveBlockShapeParams and SetPrimitiveShapeParams.]

When Building Block Type is "Box", "Cylinder", "Prism", "Torus", "Tube", "Ring": (byte) (100 * (Value of "Top Shear X")).
Otherwise: 0.

  PathShearY ::= '<PathShearY>' byte '</PathShearY>'

[See Opensim.Region.ScriptEngine.Shared.Api.LSL_Api,  SetPrimitiveBlockShapeParams and SetPrimitiveShapeParams.]

When Building Block Type is "Box", "Cylinder", "Prism", "Torus", "Tube", "Ring": (byte) (100 * (Value of "Top Shear Y")).
Otherwise: 0.

  PathSkew ::= '<PathSkew>' sbyte '</PathSkew>'

[See Opensim.Region.ScriptEngine.Shared.Api.LSL_Api,  SetPrimitiveBlockShapeParams and SetPrimitiveShapeParams.]

When Building Block Type is "Torus", "Tube", "Ring": (byte) (100 * (Value of "Skew")).
Otherwise: 0.

  PathTaperX ::= '<PathTaperX>' sbyte '</PathTaperX>'

[See Opensim.Region.ScriptEngine.Shared.Api.LSL_Api,  SetPrimitiveBlockShapeParams and SetPrimitiveShapeParams.]

When Building Block Type is "Torus", "Tube", "Ring": (byte) (100 * (Value of "Taper X")).
Otherwise: 0.

  PathTaperY ::= '<PathTaperY>' sbyte '</PathTaperY>'

[See Opensim.Region.ScriptEngine.Shared.Api.LSL_Api,  SetPrimitiveBlockShapeParams and SetPrimitiveShapeParams.]

When Building Block Type is "Torus", "Tube", "Ring": (byte) (100 * (Value of "Taper Y")).
Otherwise: 0.

  PathTwist ::= '<PathTwist>' sbyte '</PathTwist>'

[See Opensim.Region.ScriptEngine.Shared.Api.LSL_Api,  SetPrimitiveBlockShapeParams and SetPrimitiveShapeParams.]

When Building Block Type is "Box", "Cylinder", "Prism", "Sphere", "Torus", "Tube", "Ring": (sbyte) (100 *  (Value of "Twist End")).
Otherwise: 0.

  PathTwistBegin ::= '<PathTwistBegin>' sbyte '</PathTwistBegin>'

[See Opensim.Region.ScriptEngine.Shared.Api.LSL_Api,  SetPrimitiveBlockShapeParams and SetPrimitiveShapeParams.]

When Building Block Type is "Box", "Cylinder", "Prism", "Sphere", "Torus", "Tube", "Ring": (sbyte) (100 *  (Value of "Twist Begin")).
Otherwise: 0.

  SculptEntry ::= '<SculptEntry>' bool '</SculptEntry>'

This SceneObjectPart is sculpted.

  SculptTexture ::= '<SculptTexture><Guid>' uuid '</Guid></SculptTexture>'

The uuid of the sculpt texture, or the null uuid ("00000000-0000-0000-0000-000000000000") when this part is not a sculpty.

  SculptType ::= '<SculptType>' byte '</SculptType>'
Zero for non-sculpts, or one of PRIM_SCULPT_TYPE_SPHERE = 1, PRIM_SCULPT_TYPE_TORUS = 2, PRIM_SCULPT_TYPE_PLANE = 3, PRIM_SCULPT_TYPE_CYLINDER = 4.
  SculptData ::= '<SculptData />' | '<SculptData>' TBD '</SculptData>'

TBD

Features tab

0769 - Flexi

Flexible path attributes.

  FlexiEntry ::= '<FlexiEntry>' bool '</FlexiEntry>'

Whether this part has a flexible path.

  FlexiSoftness ::= '<FlexiSoftness>' int '</FlexiSoftness>'

Flexible path softness, as in the 'Features' tab.

  FlexiGravity ::= '<FlexiGravity>' float '</FlexiGravity>'

Flexible path gravity, as in the 'Features' tab.

  FlexiDrag ::= '<FlexiDrag>' float '</FlexiDrag>'

Flexible path drag, as in the 'Features' tab.

  FlexiWind ::= '<FlexiWind>' float '</FlexiWind>'

Flexible path wind, as in the 'Features' tab.

  FlexiTension ::= '<FlexiTension>' float '</FlexiTension>'

Flexible path tension, as in the 'Features' tab.

  FlexiForceX ::= '<FlexiForceX>' float '</FlexiForceX>'

Flexible path force X, as in the 'Features' tab.

  FlexiForceY ::= '<FlexiForceY>' float '</FlexiForceY>'

Flexible path force Y, as in the 'Features' tab.

  FlexiForceZ ::= '<FlexiForceZ>' float '</FlexiForceZ>'

Flexible path force Z, as in the 'Features' tab.

Partial documentation for SceneObjectGroup serialization in XML2 format

Light attributes

  LightEntry ::= '<LightEntry>' bool '</LightEntry>'

Whether this part emits light.

  LightColorR ::= '<LightColorR>' float '</LightColorR>'

The 'Red' component of the light color, between 0.0 and 1.0.

  LightColorG ::= '<LightColorG>' float '</LightColorG>'

The 'Green' component of the light color, between 0.0 and 1.0.

  LightColorB ::= '<LightColorB>' float '</LightColorB>'

The 'Blue' component of the light color, between 0.0 and 1.0.

  LightColorA ::= '<LightColorA>' float '</LightColorA>'

The Alpha value of the light color, between 0.0 and 1.0.

  LightIntensity ::= '<LightIntensity>' float '</LightIntensity>'

Light intensity, as in the 'Features' tab.

  LightRadius ::= '<LightRadius>' float '</LightRadius>'

Light radius, as in the 'Features' tab.

  LightFalloff ::= '<LightFalloff>' float '</LightFalloff>'

Light falloff, as in the 'Features' tab.

  LightCutoff ::= '<LightCutoff>' float '</LightCutoff>'

TBD

Texture tab

  TextureEntry ::= '<TextureEntry>' string '</TextureEntry>'

A Base64 encoded string. TBD.

  ExtraParams ::= '<ExtraParams>' string '</ExtraParams>'

A Base64 encoded string. TBD.

Content tab

  TaskInventory ::= '<TaskInventory />'
                  | '<TaskInventory>'
                       TaskInventoryItem+
                    '</TaskInventory>'

List of items contained in this part (i.e., what's on the 'Contents' tab for an object's settings).

Other attributes

  AllowedDrop ::= '<AllowedDrop>' bool '</AllowedDrop>'

TBD

  FolderID  ::= '<FolderID><Guid>' uuid '</Guid></FolderID>'

Same as UUID (except for very old prims).

  InventorySerial ::= '<InventorySerial>' uint '</InventorySerial>'

TBD

  ObjectFlags ::= '<ObjectFlags>' uint '</ObjectFlags>'

Flags of type OpenMetaverse.PrimFlags. See http://openmetaverse.org/viewvc/index.cgi/omf/libopenmetaverse/trunk/OpenMetaverse/Primitives/Primitive.cs?view=markup for details.

  UUID ::= '<UUID><Guid>' uuid '</Guid></UUID>'

Uuid of the part.

  LocalId ::= '<LocalId>' uint '</LocalId>'

TBD

  Material ::= '<Material>' byte '</Material>'

Semantics: Material type for a primitive. Value range: One of 0 (Stone), 1 (Metal), 2 (Glass), 3 (Wood), 4 (Flesh), 5 (Plastic), 6 (Rubber), 7 (Light). [Source: The Material enum in Primitive.cs]

  PassTouches ::= '<PassTouches>' bool '</PassTouches>'

TBD

  RegionHandle ::= '<RegionHandle>' ulong '</RegionHandle>'

TBD

  ScriptAccessPin ::= '<ScriptAccessPin>' int '</ScriptAccessPin>'

Pin for remote loading of scripts.

  Velocity ::= '<Velocity>' Vector3 '</Velocity>'

Physics-related attribute. The velocity of the prim.

  AngularVelocity ::= '<AngularVelocity>' Vector3 ''</AngularVelocity>'

Physics-related attribute. The angular velocity of the prim.

  Acceleration ::= '<Acceleration>' Vector3 '</Acceleration>'

Physics-related attribute. The acceleration of the prim.

  Color ::= '<Color />'
          | '<Color>'
               color
            '</Color>'

TBD

  Text ::= '<Text />'
         | '<Text>'
              string
           '</Text>'

Maximum length = 255, truncated otherwise. TBD

  SitName ::= '<SitName />'
            | '<SitName>'
                 string
              '</SitName>'

TBD

  TouchName ::= '<TouchName />'
              | '<TouchName>'
                   string
                '</TouchName>'

TBD

  LinkNum ::= '<LinkNum>' int '</LinkNum>'

This is a sequential number that defines the order in which parts are linked: it's always zero for the root part, 1 for the next part, etc.

  ClickAction ::= '<ClickAction>' byte '</ClickAction>'

TBD

  UpdateFlag ::= '<UpdateFlag>' byte '</UpdateFlag>'

TBD

  SitTargetOrientation ::= '<SitTargetOrientation>'
                              Quaternion
                           '</SitTargetOrientation>'

TBD

  SitTargetPosition ::= '<SitTargetPosition>'
                           Vector3
                        '</SitTargetPosition>'

TBD

  SitTargetPositionLL ::= '<SitTargetPositionLL>'
                             Vector3
                          '</SitTargetPositionLL>'

Same as SitTargetPosition.

  SitTargetOrientationLL ::= '<SitTargetOrientationLL>'
                                Quaternion
                             '</SitTargetOrientationLL>'

Same as SitTargetOrientation.

  ParentID ::= '<ParentID>' uint '</ParentID>'

TBD

  CreationDate ::= '<CreationDate>' int '</CreationDate>'

The date this prim was created, in TBD format.

  Category ::= '<Category>' uint '</Category>'

TBD

  CollisionSound ::= '<CollisionSound><Guid>'
                        uuid
                     '</Guid></CollisionSound>'

Uuid of TBD, or the zero uuid ("00000000-0000-0000-0000-000000000000") when TBD.

  CollisionSoundVolume ::= '<CollisionSoundVolume>'
                              float
                           '</CollisionSoundVolume>'

TBD

  PCode ::= '<PCode>' byte '</PCode>'

Semantics: Type of primitive. Value range: One of: 9 (Prim: a Primitive), 47 (Avatar: An Avatar), 95 (Grass: Linden grass), 111 (NewTree: Linden tree), 143 (ParticleSystem: A primitive that acts as the source for a particle stream), 255 (Tree: A Linden tree). [Source: The PCode enum in Primitive.cs]

  State ::= '<State>' byte '</State>'

TBD


by Zonja Capalini at January 25, 2010 05:55 PM

January 17, 2010

Zonja Capalini » OpenSim

Mirror Worlds: a hypergridded eternal art exhib

0695 - Mirror Worlds - Update - Florence Babenco

In this long overdue post, I introduce “Mirror Worlds”, an eternal (I will explain what I understand by ‘eternal’ in a minute) art exhibition located in the Opensim-based, hypergrid accesible, Condensation Land grid. The exhibition features pictures from Florence Babenco, Monika Finchy, Shoshisn Shilova, and Senna (SennaSpirit) Coronet, and from the Condensation Land residents Ludmilla Writer, Mikil Tiki and myself. Shoshisn also has contributed several of her wonderful sculptures for the exhibition.

Art exhibitions of all sorts are very common in Second Life, but unfortunately they are more unusual in the Opensim-based worlds — and, in case they exist at all, they get little or no publicity. Which is a real pity, because, contrary to the general lack of content for avatar clothing and embellishment in Opensim, for example, there is nothing which prevents Opensim-based worlds from hosting beautiful exhibitions. Nobody will ask where did you take a picture, after all — and texture uploads can’t be cheaper :-)

In this post I’ll present the exhibition and explain some of its more unusual features.  I’ll also describe some of the difficulties that I encountered in my work as an amateur curator — some of these difficulties may be due to my inexperience at the task, but I think that the other ones may help as a diagnosis of some problems the Opensim movement is facing.

What’s an ‘eternal’ exhibtion?

When I first though about making an exhibition in Condensation Land, I was thinking of setting up a permanent exhibition, i.e., one in which the artists changed and/or rotated with time. Soon I realized that virtual worlds technology allowed something more interesting: as artists changed, I could copy the old versions of the exhibition and put them in an airbox, so that visitors could come to look at the current version of the exhibition, but also teleport to the airboxes and see all the previous versions. That way, nothing would be lost, and we would have in fact, something new (and impossible IRL): an eternal exhibition.

Now since (if we got enough artists willing to participate) I envisaged having to perform the cloning operation several times, I decided to develop an automated tool to assist in the cloning, and I developed the (admittedly hacky) tool I called Zoe — you can find a detailed description of the technical details in my post “Moving and rotating OARs“.

Mirror Worlds: Layout, and some technical aspects

Mirror Worlds is located in the southeast corner of the Condensation Land region in the Condensation Land grid.

0751 - Condensation Land and Mirror Worlds

Aerial view of the 'Condensation Land' region. You can see the 'Mirror Worlds' exhibition in the southeast part, looking like an inverted 'L'.

The exhibition has seven rooms, with works from (left-to right, bottom-to-top) shoshisn, myself, Ludmilla, Monika (at the corner), Mikil, Florence and Senna. Since Mirror Worlds has to be integrated in the landscape (i.e., the sim is not devoted only to the exhibition), I was confronted to the following problem: what should be the aspect of the exhibition from outside? I wanted the building to be as luminous as possible and have almost transparent walls — but then pictures, when seen from outside, would present a blank face, and this would have been very ugly. Since we are in a virtual world, we don’t have to be 100% realistic; I could have copied the textures to the back side of the pictures, but then there would be no reason to enter the exhibition. I solved this dilemma by copying the textures to the back of the pictures and making this side 50% transparent — this way, the exhibition is beautiful from outside, and what you see from outside invites you to enter and see more.

0752 - Pictures are semitransparent from outside

Another decision was to also use the (cylindrical) ceiling as a place to also display pictures. You can see the results in the following shot, which shows a picture from Florence Babenco.

0753 - Pictures in the ceiling

To make the 3D environment more lively, I added abundant water and fire:

0754 - Water and fire in Mirror Worlds

I also counted on Shoshisn’s beautiful sculptures:

0496 - Condensation/OpenSim

You can visit Mirror Worlds by using the hypergrid: just go to an hypergrid-enabled region and teleport to condensationland.com:9000 — the Condensation Land grid is centered at 7789,7789.

The human side

Building the exhibition, taking design decisions and solving technical/aesthetical dilemmas was the easy part of setting up Mirror Worlds — managing the human side of the problem was much more complicated. On the easy part, I first counted on two good old friends from the Second Life/Flickr community: Senna and Shoshisn.

0298 - Talking with Senna

Senna and me in the wheatfield

Senna has asked me to model several times and working with him has always been a pleasure. He’s a great friend and a very generous person — as soon as I asked him to participate, he gave me all his support and complete freedom to act. The current selection of pictures is mine, but he’s promised to make a new selection by himself, which will be featured in a coming edition of Mirror Worlds.

0123

Shoshisn is a great friend, a great artist and a wonderful sculptor (apart from being very beautiful :-)). She’s one of the major contributors to Condensation Land: apart from the pictures and sculptures she has donated for the exhibition, she’s given us a lot of other nice sculptures, and, lately, these wonderful dolphins:

0736 - shoshisn's dolphins

Shoshisn is also a believer in the future of Opensim, and she has helped me to contact a number of other artists for their present or future inclusion in Mirror Worlds. One of these artists is Monika Finchy, whom I don’t know personally — Shoshisn introduced us and Monika kindly agreed to have her fantastic work displayed.

0199

Florence Babenco is an old Second Life friend. Florence, Ludmilla Writer and me made an exhibition in Second Life called “Las Tres Gracias” back in april 2008; for Ludmilla and me (but not for Florence) this was our first exhibition. When I asked her to participate, she immediately and generously agreed.

0231

Mikil Tiki is a great friend, the kind of person you need to have in a party to ensure its success, metamorph extraordinaire, and a resident of Condensation Land. She’s also one of the most intelligent persons I’ve never met in Second Life. Philosophizing with her about the virtues, defects and nuances in general of being virtual is a delight. She generously accepted to have her work exhibited in Mirror Worlds immediately after I asked her.

Ludmilla Writer is my indefatigable RL friend, co-founder, contributor and resident of Condensation Land (she owns the Condensation Beach region), and co-owner with Favio Piek and me of Arrabal Tango Club. She’s helped me, in RL and in SL/Opensim, to think about Mirror Worlds, to prepare it, to select the pictures, and, in general, has given me moral support when I was finding the project too difficult. Without Ludmilla Mirror Worlds would not exist. It’s a pleasure to have her work shown there.

That was the easy part. Now I’ll talk about the not-so-easy part of building Mirror Worlds. First of all I have to say something: it’s the first time I work in something remotely related to being a curator, and I’m probably not the most idoneous person to do the job, because of (maybe) lack of sensibility and (for sure) of experience. On the other hand, some of the difficulties I faced when recruiting artists have to be attributed to the artists themselves, not to my lack of skills. However, some of the things I observed made me think quite a lot. Particularly:

1) Many people mistake Opensim for Open Life. This is probably a result of the mass rush to Open Life that happened around the Openspace fiasco, and is a very bad thing, because of two things: first, because the performance and stability of Opensim at the moment was much worse than it is right now (but people are unaware of that); and second, because Open Life is anything but open, and the identification between Open Life and Opensim is bad for the Opensim movement. The net result is that they are lazy (i.e., refuse) to try (again) an Opensim grid.

2) Many people simply didn’t seem to understand what Opensim, or an Opensim-based grid, is. They seemed to think that I was  talking about a special region of Second Life, or something like that. Awareness of Opensim between an important sector of SL residents is near to zero.

3) Between the people who do seem to understand what Opensim is, an important number found it too complicated to connect to a grid, even with my personal help and the presence of abundant documentation. This is specially problematic for Mac users, because of poorer support in general for Mac viewers. Many people who connect to SL routinely are artists or creative people in general, and they lack the skills to connect to Opensim. This is a problem because content creators and producers are much needed at the moment.

I mention these points here because Second Life has a rich, vibrant, artists community, and having this community to look with love to the Opensim grids, creating and showing their art in them, would be a very important bonus towards the general acceptance of Opensim as a platform.

Additional resources

Mirror Worlds: a hypergridded eternal art exhib

Even if it’s not part of the Mirror Worlds exhibition, I would like to mention that Breen Whitman has donated a copy of his wonderfully crafted “Eastern Gasworks” building; it’s being shown in the southeast part of the Condensation South region — if you visit Mirror Worlds, please take some time to take a look at this building. It’s amazingly detailed, with a lot of shadows baked in the textures. I’m very grateful to Breen for this fantastic gift.

Here’s a video featuring a long travelling that includes the Mirror Worlds exhibition and Breen’s ‘Eastern Gasworks’:

<iframe class="youtube-player" frameborder="0" height="390" src="http://www.youtube.com/embed/WCL5fgfX-dI?version=3&amp;rel=1&amp;fs=1&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1&amp;wmode=transparent" type="text/html" width="640"></iframe>

Here’s another video featuring Mirror Worlds only:

<iframe class="youtube-player" frameborder="0" height="390" src="http://www.youtube.com/embed/2sfulY49POI?version=3&amp;rel=1&amp;fs=1&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1&amp;wmode=transparent" type="text/html" width="640"></iframe>

Finally, here‘s a very nice article (in Spanish) about Mirror Worlds, written by my friend Albert Revolution.


by Zonja Capalini at January 17, 2010 06:20 PM

January 13, 2010

xyzzy xyzzy... » opensim

OpenSim Zurich Lunch (r6)

for over a year we’ve been meeting more or less once a month or two over lunch to discuss and chat about all things OpenSim — very creatively volker gässler and i called them OpenSim Zurich Lunches back then when. for the past year we’ve been having lunch at the cafeteria of the IBM Research — Zurich lab, this month’s OpenSim Zurich Lunch will be the first time we meet closer to the downtown zurich area:

so, if you are around, have time to spare, and are interested to meet up with fellow OpenSim-ers, let volker know by dropping him an email — fe11 at gmx.ch — so that we can reserve enough seats at king’s kurry.

by dr_who at January 13, 2010 12:39 PM

January 05, 2010

xyzzy xyzzy... » opensim

debianized rezzme

the latest rezzme now contains the necessary code to build debian/ubuntu dpkgs — making it as easy to install rezzme packages on the latest debian/ubuntu systems as it already is for windows and mac OSX machines as the dpkg format allows me to explicitly specify the prerequisites (such as PyQt4).

while working on the dpkg support i also found out that debian/ubuntu has the very useful /etc/firefox-3.0, /etc/firefox-3.5, and /etc/thunderbird directories that allow me to provide package specific javascript to, for example, add a protocol handler for the rezzme: URI scheme. that along with gnome’s gconf tool gives us the same seamless rezzme user experience as on windows or mac OSX — unfortunately, it seems that nothing comparable exists for redhat/fedora based systems.1

also the windows build code has been cleaned up and the no longer required dependency on setuptools removed.


  1. at least i couldn’t find anything comparable; if you know how to do this — independent of minor version upgrades of firefox and thunderbird — i’d appreciate it very much to learn about that. 

by dr_who at January 05, 2010 10:50 AM

November 12, 2009

robsmart.co.uk » opensim

The Challenges of writing an OpenSim client in Unity3D

I thought I’d write a quick article on the possibilities of writing a client for OpenSim using Unity3d, I’m writing this as there has been a lot of discussion around this recently after the Unity3d indie version became free.

I’ve done a fair bit of prototyping and investigation on this in the past, so I’ll share what I’ve discovered and where I have got to.

Firstly I want to make clear a couple of points about the way Unity3d applications can be deployed. One option for creating a client is standalone mode, in this the produced client will be an executable desktop app that works on Windows or OS X. The second and most attractive option for an OpenSim client is deploying as a Web Plugin that can be embedded in any webpage.

Now I’ve made these two options clear I’ll point out the additional difficulties of creating a Web Plugin client. Firstly any Unity3d app deployed as a web plugin is security sandboxed just as a java applet would be. In practical terms what this means is that certain standard API calls in the embedded Mono engine are not allowed. For example one fairly critical class that can’t be used is System.Net.WebRequest. As far as I can tell there is not a list anywhere of API functions that do not work, it’s a case of trial and error and trawling the Unity forums.

The second issue with the web plugin is that you can’t use any additonal C/C++ libraries you can however use c# dlls. The restriction this causes though is that your included c# dlls can’t rely on any platform specific external libs, think System.Drawing and libgdi.

So now lets look at what we need to implement an OpenSim client. First off we’re going to need to communicate with the server so we need libOMV, for creating a standalone unity application using a pre 0.7 libomv libary there is no problem, it works straight out of the box. Why pre 0.7.0 ? Because in 0.7.0 some features of .NET 3.5 have been introduced (see this opensim-dev post for detail) and Unity3d is on a back level version of mono, i’m not sure exactly which but i think it’s around 2.0.

It is possible to work around these changes and get libomv 0.70 working in Unity for a standalone client. However try deploying your simple log on and chat client as a Web Plugin and you will soon find that you don’t even get to the login stage as libOMV uses HttpWebRequest which doesnt work in the browser plugin. The fix for this is to rewrite parts of libOMV to use the unity WWW object instead.

So next up we’ve got the issue of 3D object formats which luckily is solved (in the most part) by the availability of the PrimMesher library written by Dahlia. I spent some time the other week getting this working and shared the Unity side of things with Dahlia who has gone on to get sculpties working as well. The remaining issue with objects is texturing and more specifically the decoding of jpeg2000 images. At the moment I’m decoding these to regular jpegs on the server side before assigning the textures in Unity.

I guess that leads onto the discussion of whether to bother with trying to get libOMV working in the browser, personally i think it’s worth it. Many would disagree as they don’t see a client embedded in the browser as any different from a desktop app, however this argument is neutralized somewhat by the fact that Unity can communicate via javascript with the page it is embedded into, this leaves open the possiblity of widgetized system for things like inventory management, chat etc. etc. and custom widgets for different opensim grids.

The alternative option of course is to write a Unity specific client library and implement the matching iClientApi, this may in fact be a better solution as keeping a forked libOMV version just for unity will be a bit of a pain. The down side of this alternative is that the client won’t work with the main Second Life grid.

So that’s the end of this little brain dump,I hope it has informed anyone thinking of tackling a Unity client for OpenSim and also hope it hasn’t put you off at all.

by Rob Smart at November 12, 2009 11:51 AM

October 23, 2009

OpenSim/OSGrid Roundup

LSL Scripted Vehicles on OSGrid


To make a long story short:

The code is now part of the master branch of the opensim project.

Q: What does this mean?

A: It means that all of Kitto's work to-date is now a part of 'trunk'

Q: Does this mean that my vehicle scripts from SL will work now?

A: Not exactly. Kitto still has a few things to do before that can happen. That being said, good vehicle scripts -can- be written with whats finished if one is creative, and most vehicle scripts could probably be tweaked to work.

Q: So where does this leave us?
A: See my tutorial on the OSGrid forums at http://osgrid.org/forums/viewtopic.php?f=15&t=1861 to make your own boat :D

Cheers!
James/Hiro
8-)

by James Stallings II (noreply@blogger.com) at October 23, 2009 06:34 PM

October 06, 2009

OpenSim/OSGrid Roundup

Git, Network Protocol Versioning, and The Current State of the Code

BUSYBUSYBUSY

A lot has been going on with opensim! This is why it's been a very long time since I have posted concerning any of my git adventures; between opensim software development dynamics and the new business concern, I've been just about buried with higher priority things than blogging.

That said, time to play a bit of catch up:

First,  concerning my Git Tip of the Day

It isn't dead. I just had to do some agressive study and cognition on the topic, and then got very busy with the aforementioned other things. The short take: my efforts with respect to grokking git better have been very fruitful, but like just about everything else, I still dont know it all. Expect a post over the next few days with a great deal of detail compiled from my abundant notes.

Now, concerning network protocol versioning, and the recent osgrid bump in protocol version:

Late last week, thursday or friday depending on where you are in the world, osgrid updated their grid backend services and plazas to a ROBUST service paradigm (a project-local acronym, dont go pester google about it). As there are technically significant differences in the backend protocols implemented by the new server(s), an additional change was to increment the network protocol version number, forcing a cut-off of regions operating prior versions of the software. This has serious implications for region operators: they are forced to update to a version of the software from which they cannot roll back. If things go wrong, it's a rough ride until the kinks get ironed out. The bad news is, things went wrong this time. What went wrong? several things. A few fairly significant, a good many minor - no one thing contributed to the problems we've seen since the update. The good news is, a lot , and I mean a lot of good is to come of it. We're seeing memory footprints cut in half, really quick, really reliable on-the fly texture decoding (spells the end of blurry textures once and for all), and greatly increased capacity to endure loads in the release candidates - but issues remain and addressing them is an incremental, iterative process.

Which brings us to The Current State of the Code

There is a release on the website at OSGrid.org. It may, in fact, be a different revision from what is recommended. This state of affairs is no accident or oversight - it's a consequence of the dedication of the developement and testing teams to keeping the best possible code available at any given time. Many incremental improvements and hotfixes have been applied in the last 72 hours or so - if you need to download the binaries, you can have faith that what is there is the best code currently available.

You can expect that releases will be coming fast and furious in the days ahead. Work continues in the interest of producing some very dramatic improvements in opensim, in the broadest of senses. Refactoring projects that have been long under way are nearing completion, code has been cleaned up, new architectures implemented, and many optimizations of memory and other resource use are focused at delivering these benefits in the short term - so please bear with us as we labor to produce what will be nothing less than the most game-changing release of opensim we have ever produced.

And with that, I'll quit bending your ear, and get back to doing something productive.

Cheers!
James/Hiro

by James Stallings II (noreply@blogger.com) at October 06, 2009 01:46 PM

September 09, 2009

OpenSim/OSGrid Roundup

Maintaining an active local fork with Git

[WARNING: this is not a tutorial - it is a workflow deconstruction. Failure to read the entire article before attempting this operation could conceivably result in lost work. Please make certain you understand the process, and remain aware that this is not a linear sequence of instructions, but rather a description of one of my personal experiences. Thanks! James]



Topical Introduction: Git Operations vs. GitHub.com

 I have to say, before anything else is said, that I approached the task of maintaining a git fork with considerable trepidation. I've never really maintained a source tree before that I wasn't really the only one making commits - that was an SVN repo, and honestly, I was never very confident that it could handle more than a few users working on the same project in the absence of some considerable out-of-band cooperation and coordination between those users.

Yesterday I made my first such effort with Git, and though I'm by no means an expert overnight, the whole process went smoothly (including a graceful recovery from a significant mis-step!) and I am delighted to say that I have not only completed successfully the process of merging a changeset to our local fork, but I was also able to make that fork available to others as an upstream source for pulling the changeset for testing and potential incorporation to the project's master repository!

Needless to say, I am very excited about how much I was able to accomplish. Read on to see how I was able to get this done.


Git: Preparing a new (branch if necesary)

One of the first things you should do, typically speaking, is establish a working branch (if you havent already. If you have, skip ahead to 'Introducing new/modified source to the tree', below). This would tend to mean you are already logged into a command shell on the computer that hosts your local fork.

First things first: change your working directory to the top-level directory in the git repository. This allows git to find the repo you're working with, without you having to specify a bunch of location-designation parameters for git on the commandline.

Now, the branch: if you aren't reading this section because you appreciate my mad literary skillz, you're probably reading it because you want to know how to create a branch; and the answer is really simple: you use the 'branch' option to git as shown below:

git branch branch-name

This will create a new branch, containing the exact same source (initiallly) as the 'master' branch of head (whatever was in the repo at the time you made your local fork via a 'git clone url' command.

Simple, huh? Not so fast! now you have to check out that branch to actually work with it. This is done with the following command:

git checkout branchname

Executing this command makes the new branch the 'working' branch. Remember, git is a sort of object-database manager - it has a backstore in .git/ in the top-level directory in the repo, and inside it stores compressed representations of all your branches. This is not as heavy as it sounds - it stores changesets as a set of 'deltas' or changes to the main branch (master).

Now we are good to make changes to our new branch. What? you already incorporated your patched/new files into the 'master' branch (like I did)? Not to worry - putting the master branch back in it's original state is easy as pi:

git reset --hard #hashnum

#hashnum should be the hash value for the last commit in your repository before you cloned it - i.e., your local fork's original condition. The hash value can be obtained using the 'git log' command.

Having reset the repository to it's initial condition (assuming you made a similar mis-step), you are now ready to start over at the beginning of this section and make a proper branch to work in. This implies something:

you should not be editing code directly in the repository - you should be editing only the 'payload' - a working copy of the code extracted from the repository.

For a deconstruction of the simple process that accomplishes this, see my last blog entry :)




Introducing new/modified source to the tree

If you arrived here by skipping ahead, you probably already know that you need to be in a shell changed into the top-level directory of your repository. If not, you probably should go back and read what you skipped, just for the sake of getting some background info.

Adding source to the tree was accomplished with a very simple process; I copied any files from my working source tree that had been created anew or modified into the branch. How this was accomplished is an area I will be exploring in detail in the near future - for this operation, however, it was very simple. I simply copied the changed/added files from the working source into the repository, after having changed branches. I have a couple of questions about this methodology - I'll address them in a later post, but I'll go ahead and ask them now: 1. are there other (better) ways to go about this? and 2. under what conditions might this turn out to fail?

Copying the changed/added files into the repo is not enough, however - we need to invoke git in a couple of ways to prepare/preview the changes to be comitted. First, we need to add the files, as follows:

git add filespec

filespec is a pathspec that points at the new/changed files; if the files already existed in the repo, they are silently ignored - if the are new, they will be added to the repo. Next comes the preview:

git checkout

This will display a list of new and modified files. You should review them for completeness prior to the next command, which will acually make the commits.


Making the commit

git commit

and that will wrap up the commit of the changesets to the local repo.

Wow, was that easy or what!


GitHub.com: Pushing changes from your local fork to your GitHub.com account

GitHub is a relatively new and powerful website complimenting git by providing git users a social metaphor for 'organic' developement conducted on git repositories. It is feature-rich and targeted at both the opensource community and companies who employ opensource developement methodologies.

You will need to obtain an account and log in there, and then make the proper arrangements for authentication. This is done using ssh/rsa keypairs. Full instructions for establishing an account and configuring it for use are available on their website at http://github.com. I highly recommend it!


Exporting your GitHub-hosted repository: The pull request

The need to use GitHub implies certain things about your work and your repository: you will need it if, for instance, your local fork is used to develop code for a remote project you dont have the authorization to 'push' code to - that you want to make available to the maintainers of that remote project for evaluation and potential incorporation into the primary project.

Dont get me wrong, this can be accomplished without the use of GitHub - GitHub just makes it easy to be very communal in your approach. This is a good thing (tm), as git tends to be best used in a very organically organized project, as most opensource projects are.

The way to get your changes on GitHub is excrutiatingly simple: you push them. Your account at github will provide two types of interfaces (in the form of urls) to a fork you place there: one for public (anonymous) use, and one for private use. The former requires no authentication whatsoever; the latter employs a set of rsa keys, exactly as you would employ in the establishment of a secure shell connection. See the GitHub link 'Help with Keys' on the account settings page for details for creating and installing these credentials on your particular operating system platform. Having done so, and assuming you've created a target repository on the site, the push is accomplished as follows:

git push url

where url is the url of the GitHub repository, e.g., git@github.com:JamesStallings/opensim.git



Conclusion

If I have been clear at all, by now you should have a fair understanding of what I did to make this happen. It's not a perfect workflow, more of a discription of my first attempt to establish one with git. I am happy to report, that the operation seems to be a success. I'll continue asking and answering as many questions as I can about git and supporting technologies - if you have questions, use that comments button and I'll see if I can answer yours too.


In my next topic, a few days down the road, I hope to have some answers about the questions I asked wrt proper ways to import new code into the repository - and perhaps take a stab at a formal workflow tutorial.

Thanks for reading!
James

by James Stallings II (noreply@blogger.com) at September 09, 2009 03:09 PM

September 03, 2009

OpenSim/OSGrid Roundup

Welcome back to me!

It has been a very long time since I made a post to this blog. The reasons are many and varied - among them, that I had little to post about that wasn't some sort of whining or bitching or other negativity. As most of the reasons for this state of affairs were more personal than related to OpenSim or OSGrid, I felt it better that I remain silent than reflect personal issues on either of these splendid efforts.

Indeed, I have been considering passing the blog off to someone else, in the interest of keeping the name in good, productive hands.

That said, I've changed my mind. I do have something to post about after all, that is positive, usefull, and perhaps even potentially usefull to others! YAY!

So, without further ado, I'll make this new post, and hopefully many more to come, on the topic of the Git source control management system.

First, a little bit about why this topic comes to light at this time.

Recently, much to the dismay of many users (and not a few developers), OpenSim transitioned from the Subversion SCM to the Git SCM. Without getting too deeply into history, Linus Torvalds, originator of the Linux Operating System project, wrote git in an effort to make a better source control system, flexible enough to accomodate the needs of the many thousands of people submitting patches to the linux kernel, and to make his (or others, as the case may be), lives easier with respect to managing these many patch submissions when merging these patches. As with just about everything Linus does, he pushed the tool to the limits of software technology, and produced entirely new functionalities not previously seen in any SCM, that specifically target organic software developement processes within volunteer communities of open source developers.

Whew! good thing I didn't get too deep into history!

So, essentially, until it's a non-issue, have a look here each or every other day or so, for a 'Git Trick of the Day'. And with that, here's todays Git Trick of the Day, presented as a problem coupled with a solution to that problem (I'll try to stick to that format as I accumulate posts):

Problem:

The local git repository, obtained via the 'git clone' operation, contains much more than just the source tree for the project. It also contains a good number of git SCM artifacts, which represent the entire revision history of the project to the time of the clone. This makes it less than optimal as an environment for building and testing the code that resides in the project.

While this might seem an incredible handicap, it is in fact one of the chief sources of power that comes with git.

I dont want to get too far from the problem space I'm addressing here today, so I wont get into a discussion of those intricasies at this point - rather, I will provide a command for extraction of the source tree into a working directory apropos the build+test operation.

Without further ado, here's that command:
git tar-tree HEAD opensimstaging | (cd ~ && tar xf -)

Now, lets disect that a bit. But first, a little warning is in order: Git is still very much in developement, and change is the order of the day - you will need the latest stable revision to use this command (1.6.0.2 at the time of this writing). Further, I'm a linux user primarily, and I have not yet vetted this procedure on windows - though I will, in the near future, and in the not-too-distant future I will advise in a comment to this post as to how to accomplish this on that 'other' platform ;)

One last warning with respect to the changing nature of git: this command, even on this late stable revision of the code, is already deprecated! Dont let that concern you though - git is pretty smart, and will 're-write' the command for you to produce one that is more current. I'll add that to comments as well, once I've puzzled it out.

Onward!

The git command above does the following things:

Firstly, it executes the git command:
git tar-tree HEAD opensimstaging

What this does is extract an archive ready copy of the repository 'payload' from the HEAD - also referred to as the 'master' branch. This is the default branch of the repository, chronologically current as of the time the git clone command was used to instantiate a local 'fork' or working copy of the repository. It bases this tree in the relative directory 'opensimstaging'. You can feel free to replace 'opensimstaging' in this command with a directory name more appropriate to your local needs.

As the output being produced is in 'tar' (tape archive) format, this is the directory the tree will be unpacked to (were it actually being written to a tar file. Tar files are an associated topic, but a bit out of scope for this post). Suffice it to say, that this tar format file will be written to a special unix file called 'stdout'. This is also known as 'the console' - in other words, where things get printed.

This is where the rest of the command comes into play:
| (cd ~ && tar xf -)

Note the first character, the pipe '|' symbol. In unix parlance, this is the command's 'plumbing'. It literally ties the output from one command to the input of another, in this case a tar command.

Note the presence of the parentheses, the 'cd' command, and the double ampersand (&&). This construct has the following effects - the parenthesis binds commands together, and enforces the order of execution within them - think of it as a sort of aggregation of the commands within the parentheses, causing the shell to interpret them as if they were a single command. The double ampersands concatenate the commands adjacent to it such that the latter does not execute unless the former is successful. It's a sort of error-condition control. If the path requested in the 'cd' command does not exist, causing an error condition and failure of that command as a result, the subsequent 'tar' command will not be launched.

Barring any trouble, the sequence is like this: the tar formatted output from the git command will be passed to the tar command joined on the line by the pipe, but only if the encapsulated cd command works. Tar then unpacks the tar archive on git's output stream into the directory specified. Nifty, huh! and the product produced in the target directory is without the git-related objects that make up the repository proper, leaving it 'clean' for purposes of building and testing.

A further benefit is that the 'git pull' command can be used on the original clone to update it, and the process described herein repeated to produce an up-to-date build+test environment, without the overhead of cloning the project a second time from 'origin'.

I've tried to be both brief and thorough here, and I hope I've not added to your confusion - if you have questions, feel free to ask them in comments, or catch me on FreeNode IRC on #osgrid - I'm Hiro_Protagonist both there and on OSGrid.

Thanks for reading, and I hope I have been able to help you feel more comfortable with git!

Cheers
James

by James Stallings II (noreply@blogger.com) at September 03, 2009 01:17 PM

September 01, 2009

xyzzy xyzzy... » opensim

japanese language support for OpenSim

a colleague of mine in japan contacted us asking whether our in-world collaboration tools could be extended to support japanese characters — he had tried our internal, public sametime 3d servers and had noticed that while in-world chat and instant messaging worked just fine, our flipcharts, brain storming boards, calendar, and voting tools did just display rather boring little rectangles :-(

not good. even worse when it means lost leads. so i set out to investigate. since OpenSim is being used in japan, it was a fair assumption that we might have a font problem here. this was confirmed by a twitter from adamfrisby:

@DrScofield so it should load fine.Only issue you need to be aware of is fonts – you need to use a font with the correct charset availible.

so, first port of call: how are we specifying the font to use for text rendering? digging through the OpenSim source i ended up in the VectorRenderModule:

private void GDIDraw(string data, Graphics graph, char dataDelim)
    {
        Point startPoint = new Point(0, 0);
        Point endPoint = new Point(0, 0);
        Pen drawPen = new Pen(Color.Black, 7);
        string fontName = &quot;Arial&quot;;
        float fontSize = 14;
        Font myFont = new Font(fontName, fontSize);
        SolidBrush myBrush = new SolidBrush(Color.Black);
        ...

gulp: we’ve got it hard coded :-(

so, next question: can we change it dynamically? looking through the code, it seems like we might:

...
    else if (nextLine.StartsWith(&quot;FontName&quot;))
    {
        nextLine = nextLine.Remove(0, 8);
        fontName = nextLine.Trim();
        myFont = new Font(fontName, fontSize);
    }
    ...

except, hmph, there is no osSetFontName() OSSL function :-(

a couple of SMOPs later, we had osSetFontName() and could also configure the default font name in OpenSim.ini, good. now to figure out which linux font would do the trick.

i tried:1

  • Arial — no good: doesn’t have japanese script support
  • DejaVu Sans/Serif — again, no good, no japanese script support
  • Kochi Mincho — works!

— the configuration for that one is:

[VectorRender]
    font_name = "Kochi Mincho"

my next quest was to see whether i could find a font that would support the whole range: european scripts as well as japanese and also chinese.

…unfortunately, while windows users have Arial Unicode MS there is no such complete beast available to linux users — yes, there are fonts such as bitstream cybit, but their license conditions either don’t allow commercial use or only for a single user. so, if you are running under linux you need to localize your OpenSim installation via OpenSim.ini.

but! at least we figured out how to get japanese character sets supported in OpenSim on linux and can now configure one of our sametime 3d servers to support japanese OpenSim users properly! :-)


  1. lest you get the wrong impression: i know no japanese, instead i’m using google translate to produce suchs gems as “OpenSimは岩!”2 

  2. and hoping that the good folks at google don’t do a “Έχω τρεις όρχεις” on me… 

by dr_who at September 01, 2009 02:07 PM

July 27, 2009

OpenSim/OSGrid Roundup

July 11, 2009

xyzzy xyzzy... » opensim

40

a couple of weeks ago i blogged about our rather sobering tests with real avatars and that we run into serious trouble round about the 21 avatar mark. alan webb, arthur valadares, and i started looking at the what could possibly be biting us there.

having profiled opensim (albeit briefly, you end up with lots of data), arthur had found out that a lot of time was spend in the packet handling code, so we concentrated on the packet and textures handling — hypothesis #2 being that the on-rush of avatars trying to log in all at ance (and being logged in almost all at once) was causing a massive spike in textures demand: alan “outsourced” the texture handling to a thread of its own instead of having it part of the normal packet handling. arthur and i were successful in getting rid of a number of short-lived mass object instantiations.

the result: well, with even more vicious bots (20 of those new ones were sufficient to bring opensim to a stand-still now, similar to real avatars) we now managed to go up to 40 avatars! sure the region became laggy, but, and that is important, we could still use the in-world tools, could still move around, chat and work.

so, progress. now to figure out why massive amounts of collision events reported via LSL cause a deep ODE physics engine crash…

by dr_who at July 11, 2009 07:09 PM

full spatial voice for opensim

this morning i finally could push our VivoxVoiceModule into opensim trunk. we had been using it internally for almost three month as part of the Sametime3D project but only now got the necessary legal “paperwork” done so that we could finally release it into the wild!

VivoxVoiceModule works with the same voice technology which Linden Labs are using for their SecondLife virtual world — and, what’s even nicer, it plays along rather well with recent SecondLife clients (anything from 1.22.9 onwards), meaning you get full spatial sound, speaker indication, direct avatar-to-avatar voice chats, the works, without having to configure anything  client side.  you can even — in contrast to Linden Labs SecondLife grid — switch from spatial voice to conference call style voice channels, or change the range of voice, how quickly it fades, and so forth (all explained in OpenSim.ini.example). voice quality is superb — except for those occasions where we muck around with the grid itself (and thus cannot use in-world voice), we use it instead of conference calls and have been using it for a couple of months now.

VivoxVoiceModule does require a vivox voice server to talk to — which means that you need to obtain a customer admin account (IIRC) from vivox. as i don’t work for vivox (alan webb and i just wrote the module, nothing else), i can’t provide any further information on how to go about obtaining such an account nor can i tell you how it will cost. there are rumours on the opensim-dev mailing list that adam frisby has a bunch of licenses from vivox for OSgrid, again, i know no details.

by dr_who at July 11, 2009 06:54 PM

July 07, 2009

Darb Dabney's 3d GIS - OpenSim » OpenSim

OpenSim Terrain notes, and Darb has Process Credit history!

I’d read about this, but never before experienced the agony first-hand.  Extracting funds from SL, the wait for funds to arrive at PayPal was a bit slow.  In fact, in the time it took funds to go from Linden to PayPal, a bamboo shoot in my back yard could have grown taller than me (that’s […]

by Darb at July 07, 2009 05:17 AM

June 19, 2009

xyzzy xyzzy... » opensim

21

after our intoxicating stress test ten days ago we repeated the stress test today with a group of volunteers — thus, real SL clients instead of bots.

the result: 21. :-(

somewhere around the 21 avatar mark we are got stuck and the (single) region standalone system started becoming very laggy: avatars could not move anymore (or erratically at best), chat got relayed occasionally. interestingly enough we still saw new users logging in. looking at OpenSim’s log we saw that OpenSim was busy processing new user requests — a lot of new user requests.

so, the current hypothesis is that new users clog the out-pipe with large amount of texture requests, causing the existing users to starve and the system becoming unresponsive.

by dr_who at June 19, 2009 06:33 PM

April 24, 2009

UgoTrade » OpenSim

HomeCamp 2: Home Energy Management and Distributed Sustainability

picture-31

HomeCamp is a home hacking, automation and green technology community that will be gathering in London tomorrow, Saturday 25th April 2009, 10am until 6pm BST (GMT + 1), and in an OpenSim event running alongside for virtual participation, to brainstorm new possibilities for distributed sustainability, creative smart meters, monitoring, graphing and visulaizing energy usage.

More details and videos on the blog. The wiki, which includes signup, is the main portal to all the online activity.

As James Governor notes here:

there has been a huge amount of code and applications released focused purely on using technology for home energy monitoring and automation.  We have an active google group and quite a few videos and content showcasing the various applications and hardware currently being used by geeks to save money and live greener.

Now the challenge is to see how this seedling home energy management movement can really grow into widely adopted distributed sustainability solutions that everyone can use, and participate in.

Both Chris Dalby (see here), Andy Piper, James Governor of Monkchips (see here),  and Tom Raftery of GreenMonk (see here), have posted on tomorrow’s HomeCamp event. So I am just going to add some quick notes, especially to highlight some of what will be going on virtually for those of you, like me, who can’t make it to London.

You can tune in either on the live video ustream, or sign up on ReactionGrid and join the OpenSim event. Also, you can keep up on what is happening on Twitter #homecamp. I highly recommend that you catch Tom Raftery’s talk which will be streamed from Spain live into the London meeting, the OpenSim event on ReactionGrid, and Ustream. Tom Raftery, a leading Green technology analyst at RedMonk (see also GreenMonk), will be picking up, in depth, on some themes raised in his brilliant ETech 2009 presentation, “Electricity 2.0: Applying the Lessons of the Web to Our Energy Networks.”

tweetawatt

There will be homecampers dropping in to virtual homecamp in ReactionGrid throughout the day, including Chris Hart (the awesome “girl-geek”@dstrawberrygirl), MiketheBee, and Cminion, who has a number of cool projects to demo, including his energy turbinesDave Pentecost (pictured above with his Tweetawatt, Pachube Orb) and I (see our presentation for EarthWeek SL here) plan to be at Virtual Homecamp on ReactionGrid between 9am and 10.30am EST. Dave has done a number of cool energy monitoring hacks including a Pachube link to and from OpenSim.

Also keep your eye on Dave’s blog, The Daily Glyph, for what’s new in distributed sustainability. Dave just posted some great links on Sustainable Interaction, design and work by ITP researchers and others in sustainable use of technology.

Sustainable Interaction | Main / Papers

Sustainable interaction design | Sustainable Minds

Design For the Other 90% | Cooper-Hewitt, National Design Museum

If you are in London, look out for Oliver Goh of Shaspa as Oliver will be at Homecamp in London. As I mentioned in my previous post, Oliver will soon be launching both Shaspa commmunity and enterprise hardware and software packages for “Intelligent Energy Management.”

picture-35

For a bit of homecamp history, James Governor (picture below from Chinposin), recaps  some of the successes of  the first HomeCamp here.

And last but not least, a big thanks to sponsors, CurrentCost, Greenmonk, Pachube, Onzo, and ReactionGrid,  and media partner theattick.tv who are making the London and virtual homecamp events possible.

picture-33

by Tish Shute at April 24, 2009 07:14 PM

April 19, 2009

UgoTrade » OpenSim

Sensor Networks and Sustainability: “Connecting Real, Virtual, Mobile and Augmented Spaces”

picture-21

Today, I did a presentation, on connecting real, virtual, mobile, and augmented spaces to support sustainability, for Earth Week SL, with Dave Pentecost and Jim Purbrick, who presented on Carbon Goggles.

Dave and I focused on sensor networks, open data, Pachube, OpenSim, and sustainability from perspective of, “hack local, think global.”  Dave and I will be picking up on some of these themes of sensor networks and sustainability next week in our presentation with Dimitri Darras at ITP,  NYU, Aprl 24th, 6.30 pm to 8 pm – details here.  If you are in New York City, I hope to see you there.

We got some interesting insights into augmented reality from Jim Purbrick whose Carbon Goggles project prototypes how we can use augmented reality to read carbon identity and to combine well organized, verified data from AMEE – a neutral aggregation platform to measure the “carbon footprint” of everything on earth, with crowd sourced tagging and linking.

Shaspa – “the sensor network system that has it all”

picture-22

We also discussed, recently launched, Shaspa. Shaspa’s energy management packages connect spaces – real, virtual, mobile and augmented.  Shaspa has been blogged  by Maxping and Virtual World News, so you can read all about it, but the Shaspa device kit won’t be available until next week. Some key features of the Home Energy  package are listed on the slide above.  However, this evening, Dave Pentecost and I got a sneak preview of both the Shaspa commmunity and enterprise hardware and software packages from Shaspa founder Oliver Goh. We were pretty impressed.

Dave:It’s the ultimate hackable device for energy management!”

Oliver: “Bring us any sensor device – with documentation, and within three days we will put a driver into Shaspa.”

daveandoliverpost

Oliver is on the right and Dave on the left in the picture above. The picture below shows Shaspa in OpenSim. Oliver and I will be attending the 3D Training, Learning and Collaboration Conference in Washington, DC, next week.

picture-23

Links

Here are some of the links that came up in the presentation as many people asked for them to be published. Dave also has them on his blog.

SLIDES on GOOGLE DOCS:
Earth Week SL Presentation, April 18th, 2009 – Google Docs

Pachube, sensor networks

Dave’s blog covering Maya archaeology, jungle ecology, and technology

Maya Frontier, Usumacinta River videos

Collapse

Arduino

Pachube – tutorials

Pachube Apps -

Arduino-SL-Pachube data site

SL to Pachube site

Dave’s Danger Shield – Pachube tutorial

TweetaWatt site (LadyAda)

Dave’s post on TweetaWatt to Opensim/SL

Peter Quirk’s post on Importing Sketchup into RealXtend

Opensim

RealXtend

ReactionGrid

homecamp

cminion -wind turbines in OpenSim

MiketheBee

Is it “OMG finally” for Augmented Reality?

Smart Planet: Interview with Andy Stanford-Clark

Orange Cone – Information Shadows and Things as Services

by Tish Shute at April 19, 2009 06:32 AM

February 28, 2009

OpenSimulator Project

OSGrid has a newspaper – Woot!

Kudos to Alyvaral Aeghin on OSGrid for taking an idea and making something of it. There is now a newspaper on OSGrid and it is called “The Ruth”.

theruth

The first issue is 8 pages and is available here for viewing. There are also newstand vendors (no charge) on Teravus Plaza, Yang and others. It is absolutely terrific to see more of our community on OSGrid that has been evolving for over a year and a half as we move forward in both helping to develop OpenSim by testing the latest SVN builds each day and developing our community at the same time.


by ckrinke at February 28, 2009 08:56 PM

February 22, 2009

OpenSimulator Project

SpeedBuild on Sandbox Plaza

snapshot_002

The second “SpeedBuild” contest was help on “Sandbox Plaza” today at 11:00AM PST (1900UTC) on OSGrid. The theme was “impossible things I would like to see fly”. Each week this SpeedBuild is occurring at the same time and place.

There were about a dozen participants including four builders creating a variety of, er, impossible things. Such as what appeared to be a stage attached to a steam-powered helicopter, a turbine powered, er, question mark, a dual-bladed watermelon helicopter and a flying tea service with horizontal stabilizers.

All objects are available to anyone after the hour is finished. This is a great chance to see, learn and teach some building techniques. While I was there, I had a chance to speak with a genie hovering nearby (in his oil lamp) and an advanced scripter with his sripting screen in mid-air in front of him. It is turning out to be very interesting to just watch what goes on each Sunday at 11:00AM PST/SLT (1900UTC) on “Sandbox Plaza”.

The sim performed well, no crashes, so the secondary goal of a small stress test while four builders were building was successful for OpenSim.


by ckrinke at February 22, 2009 09:42 PM

February 15, 2009

randomhumanity » OpenSim

Alpha is the new Beta

Fröl and I were recently given a condo in Riverchapel, SL for free. It’s a small space, and we’re only allowed rez 50 prims, but hey, how much can you really expect for nothing, right? I have yet to meet our landlord Stoner, but apparently his reason for offering these spaces gratis is to generate traffic for the region. Presumably this is the same reason for the idling avatars that are frequently loitering around the region’s more central attractions, the rows and rows of random and questionably valuable stuff for sale. It’s a bit like living above a seedy street market, but I suppose Stoner has to pay his tier somehow…

Stoners Condos

Stoner's Condos. The land in Riverchapel was actually sold since I wrote this, and the towers were rebuilt in Putnam.

Wait, what’s this tier thing, exactly? It’s not rent since you supposedly own the land. An appropriate metaphor might be a council tax, except of course that there are no roads to be maintained, or grass to be cut. There is, in fact, no land at all. A tier, when you look behind the virtual curtain, is a hosting fee. The US$1,675 that a private island will set you back actually reserves for you a single core of a server, on which you can only run LL’s region software. The US$295 you pay a month is a hosting fee to continue sharing that server, as you would pay for web hosting or other application hosting.

You’d really have to go out of your way to find a deal as bad as that elsewhere. In fact, I couldn’t. Any hosting deal that approached that monthly price offered significantly more server power (4x at least), total control of the server’s configuration, and no setup fee. If all you really want is a patch of virtual land, $15 will get you a virtual server capable of hosting a single OpenSim region, 65,536m2 for the price of 2,048m2 in an SL mainland region. LL have been able to maintain this illusion of scarcity and charge these outrageous prices until now because they ran the only show in town, a walled garden where they could do as they pleased.

That, however, is changing. OpenSim is an open source virtual world server which allows anybody to set up their own grid which the SL viewer and others can connect to, or to run a single region server which can be attached to other grids. These independent grids can even be linked together to create a web of virtual worlds which an avatar can potentially navigate at will with an account on a single grid. LL aren’t oblivious to this change, and actually helped bring it about when they released the source of their viewer a couple of years ago, but they have been slow to fulfil their promise to release the code of their server software. In the meantime OpenSim has been catching up rapidly in terms of stability and features, even implementing features that are missing from LL’s software.

It’s far from perfect; most days I log into OSG I encounter a variety of weird and annoying bugs. Other grids are more stable because they follow SL’s model of centralised server control and don’t update to new versions of the software by the hour. The grids are also sparesly populated in comparison to SL, and don’t have the same variety of objects. But imperfections aside, what OpenSim offers that SL can’t is control and choice: the freedom to choose the hardware you require, modify the software to do what you need, or just to move easily between grids to find one with the theme, organisational structure, pricing or people you feel comfortable with.

We were also given some free land in OSG recently. It’s an 3952m2 space in a scenic atoll region surrounded by mountains, and we can rez 2714 prims where ever we want  rather than being confined to a tiny little box. There’s a bunch of other islands around, the residents of which spend a lot of their time building cool things and giving them away as presents, or thinking of ways to help newbies find their way around. Further afield there are freebie shops, test regions for a new jointed physics engine, and somebody has set up a link to a small grid they’re working on. It’s an exciting place to be. When I asked our landlord Snoopy why she offers free parcels, she said it was to allow people to get a first impression, so they can get to know each other and a community can develop. And that’s a reason that needs no excusing.

Our island in Heaven

Our island in Heaven

Down and Out in SecondLife

Down and Out in SecondLife

by randomhuman at February 15, 2009 01:02 AM

February 11, 2009

UgoTrade » OpenSim

People Meet People Meet Big Data: ScienceSim Explores Collaborative High Performance Computing

gwave_lg

Wilfred Pinfold, Director, Extreme Scale Programs for Intel, and the Supercomputing Conference general chair, is working with some Intel colleagues to make a project called ScienceSim the centerpiece of a special workshop event at the SC09 conference (see Supercomputing Conference, an ACM and IEEE Computer society sponsored event).

Recently, I interviewed Wilf Pinfold (see interview below), Mic Bowman (also see my previous interview here), and John A. Hengeveld (see interview below). I wanted to find out what are the underlying goals of this SC conference program?  Why are members of the SC community being encouraged to participate with the ScienceSim environment? What projects are beginning to emerge? And, what are Intel’s goals in giving infrastructure support to further the conversation between high performance computing and collaborative virtual worlds?

The vision of creating new ways to collaborate and interact with big data does seem to be one of the more significant steps we can take at a time when we find many of our most complex systems roiling and threatening total collapse. As Tim O’Reilly has pointed out – from financial markets to the climate, the complex systems we depend on for our survival seem to be reaching their limits.

But,  how can we get from the place we are now – see this example of an n-body simulation in OpenSim, to the point where we can collaboratively steer from our visualizations big data simulations of climate change, financial markets, or the depths of the universe.  The picture opening this post is a:

Frame from a 3D simulation of gravitational waves produced by merging black holes, representing the largest astrophysical calculation ever performed on a NASA supercomputer. The honeycomb structures are the contours of the strong gravitational field near the black holes. Credit: C. Henze, NASA

Wilf Pinfold explained to me part of the reason to begin a dialogue on collaborative visualization at SC ’09 is that super computing communities (that tend to be highly skilled and visionary) have played key roles in internet development in the past. Wilf pointed out,  key browser technology  developed out of these communities in the early days of the internet – see this wikipedia entry that gives  a background on the role of NCSA (National Center for Supercomputer Applications).

The hope is, while there are many obstacles to overcome, the super computing community has both the skills and motivation to find solutions to creating collaborative environments capable of the kind of rapid data movement that scientific/big data visualization needs. Solving the problems of realtime collaborative interaction with big data will  have many ramifications for the way we understand virtual reality, the metaverse, virtual worlds (all these terms are becoming increasingly inadequate for cyberspace in the age of ubiquitous computing, an argument I will make in another post!).

There have already been a number of blogs on ScienceSim (see Virtual World News, New World Notes, Vint Falken, and Daneel Ariantho). There have also been Intel blogs – see this post by John A. Hengeveld (a senior business strategist working with Intel planners and researchers to accelerate the adoption of Immersive Connected Experiences). And Intel CTO Justin Rattner’s post announcing the project this November.

But to blow my own horn a little, I think i was the first to blog the encounter between OpenSim and Supercomputing (an encounter I to some degree provoked by making the introductions) see this post.  So I have been following the ScienceSim initiative with great interest.

Very shortly after N-Body astrophysicicsts Piet Hut and Jun Makino, creators of  – GRAPE (an acronym for “gravity pipeline” and an intended pun on the Apple line of computers) – a super computer that will become one of the fastest super computers in the world (again), met Genkii – a Tokyo based strategic company working with OpenSim, the first N-body simulation appeared in OpenSim.  And in a matter of weeks  this video went up on YouTube – the result of a collaboration between MICA and Genkii.  But the nirvana of being able to create visualizations using real time data from super computers that can be steered from a collaborative environment is still a ways off.

Super computing communities tend to be geographically very dispersed and researchers often find themselves far from simulation facilities so there is both the motivation and skills to pioneer new tools for collaborative visualization. I know that astrophysicists certainly see their value (Piet Hut has some profound ideas on this). Astrophysicist Piet Hut and others  (see here for more) have been pioneering the use of VWs for collaboration.  There are two Virtual World organizations, both founded by Piet Hut and collaborators, that are currently exploring the use of OpenSim for scientific visualizations.  One is specifically aimed at astrophysics, MICA, the Meta Institute for Computational Astrophysics, and the other is aimed broadly at interdisciplinary collaborations in and beyond science, Kira, a 12-year old organization focused on `science in context’.  As of last week, there are two weekly workshops sponsored jointly by Kira and MICA that explore the use of OpenSim, ScienceSim, and other virtual worlds.  One of them is “Stellar Dynamics in a Virtual Universe Workshop” and the other is “ReLaM: Relocatable Laboratories in the Metaverse.”

MICA was founded two years ago by Piet Hut within the virtual world of Qwaq Forums (see the paper “Virtual Laboratories and Virtual Worlds”). The Kira Institute is much older: it was founded in 1997.  Later this month, on February 24, Kira will celebrate its 12th anniversary with a presentation of talks, a panel discussion, and a series of workshops.  See the Kira Calendar for the main event, and the Kira Japan branch for a special mixed RL/SL event in Tokyo.  During both events, Junichi Ushiba will give a talk about his research in which he let paralyzed patients steer avatars using only brain waves.

Other early adopters of ScienceSim include Tom Murphy, who teaches computer science at a Contra Costa College. Prior to teaching, Tom spent 35+ years working for supercomputer manufacturers. Tom said:

it is very natural for me to find significantly new ways to visualize and interact with scientific mathematical models via ScienceSim and the OpenSim software behind it. ScienceSim also allows us to interact with each other and teach students in new ways.

Also Charlie Peck, chair of the SC09 Education Program, (his day job is teaching computer science at Earlham College in Richmond, IN), is working with Wilf Pinfold, Tom Murphy and others “to explore how 3D Internet/metaverse technology can be used to support science education and outreach.”

Cristina Videira Lopes, University of Irvine, is doing very interesting work  on road and pedestrian traffic simulations. Crista is also the creator of hypergrid in OpenSim,

People Meet People Meet Data: A Conversation With Mic Bowman

sciencesim_002_thumb1
Screenshot of ScienceSim from Daneel Ariantho

Tish: How does this work on ScienceSim  fit into a wider dialogue on linked data? Where people meet people meet data, and where data meets data?

Mic: Yeah… that’s hard by the way.  Open integration of data (and more interestingly the functions on data) is very hard if it comes from multiple, independent sources.

That’s the people part. For example, if Crista can build a model of the UCI campus somebody else builds an accurate model of several cars and another expert provides the simulation that computes the pollution generated by those cars in that environment…its bringing people together to solve real problems, no matter how far apart physically.

Tish: You mention three different simulations here. Could you explain why it is difficult to integrate data from multiple sources?

Mic: integrating data from multiple sources has always been one of understanding & interpreting both the syntax & semantics of the data. Even relatively simple things like multiple date formats require explicit translation. More complex formats, like the many formats data is represented for urban planning, are barely computable independently let alone in conjunction with data from other sources (each with its own representation for data). Its often the expertise & the collaboration of bringing people (and their bag of tools) together that solves these problems.

Tish: and in this case the bag of tools is high performance modeling..?

Mic: high performance modeling, rich visualizations and data. Its the three that matter… data, function, and interface.

Tish: Some people have a very hard time wrapping their head aropund the fact that anything that seems related to Second Life can do this.  Can you explain more about the difference between SL and OpenSim?

Mic: OpenSim potentially improves data & function because it can be extended through region modules. Region modules hook directly into the simulator to provide additional functionality. For example, a region module could be implemented to drive the behavior of objects in a virtual world according based on a protein folding model.

We need to work on additional viewer capabilities to address the user interface limitations.

Tish:
Yes Rob Smart’s (IBM) recent data integrations with OpenSim (see here) are impressive. Re viewers one of the biggest objections to virtual worlds is the mouse pushing and pc tied interface.

Mic: There are great opportunities for improving the interface

Tish: Yes I really like where the Andy Piper’s experiments with Haptic Interfaces for OpenSim lead, see Haptic Fantastic! And I think that we will have cyberspace ubiquitous in our environment, not just stuck on a pc screen, sooner than we think.

Mic: Mic’s opinion (not Intel): until we get souped up sunglasses with HD screens embedded (or writing directly into the eye) there will always be a role for the PC/Console/TV).  But, it isn’t about the device… its about the services projected through the device… sometimes you’ll want a very rich experience… sometimes you’ll want an experience NOW wherever you are.

Tish: I think people are only just realizing that VWs will be a now and wherever you are experience very soon.

Mic: That’s the critical observation the virtual world is not an application you run… its a “place”… and you interact with it where you are or maybe interact through it. Speaking for Intel… it is the spectrum of experiences that are critical to support.

Interview with Wilfred Pinfold

gustav_h

Picture from National Science Foundation – “Climate Computer Modeling Heats Up.”

Tish Shute: I know your day job for Intel is in High Performance computing. Could you explain to me a little bit more about what you are working on in this regard – a mini state of play for high performance computing from your perspective?

Wilfred Pinfold: My title is Director, Extreme Scale Programs. This program drives a research agenda that will put in place the technologies required to make an Exa (10^18) scale systems by 2015. The current generation of high performance computers are Peta (10^15) scale so this is a 1000x increase in performance and this increase will require significant improvements in power efficiency, reliability, scalability and new techniques for dealing with locality and parallelism.

Tish: The nirvana in terms of linking supercomputers to the collaborative spaces of immersive virtual worlds is to be able to create visualizations using real time data from super computers in collaborative VW environments, and ultimately for researchers to be able to collaborate and steer their simulations from their visualizations.  Where are we at now in terms of scientific data visualization in VWs? And what are the current obstacles to using realtime data from super computers?

Wilf: Being able to steer a simulation from a visualization requires both a visualization interface that allows interaction and a simulation that operates at a speed that is responsive in interactive timeframes. For example a weather model that predicts the path of a hurricane would need to operate at something close to 1000x real time. This would run through a day in ~1.5 minutes allowing an operator to run the simulation over several days multiple times with different parameters in a single sitting to understand the likelyhood of certain outcomes?

Tish: Do you see a networked online collaborative virtual world being capable of being a visualization interface that allows meaningful interaction with the hurricane scenario you describe in the near future (next 6 to 18 months)?

Wilf: I was using the hurricane example to explain the usage model not an imminent capability. Hurricane Simulation: Accurate hurricane simulations require multiscale models able to resolve the global forces working on the storm as well as the microforces that define precipitation. We can build useful weather models today that run faster than real time (anything slower is not useful for prediction) but we are a long way from the ideal.
Visualization: There are excellent visualizations of weather systems but I have not yet seen a virtual world that can track a simulation and allow the scientist or team of scientists to see what is going on at both the macro scale and zoom in to see precipitation conditions. Today’s supercomputers are much better at this than they were a few years ago but they are a long way from ideal.

Tish: Open Source Virtual World technologies are pretty diverse in their approaches, Croquet, Sun’s Wonderland and OpenSim are quite different and have different strengths and weaknesses. As you have become more familiar with OpenSim, what have you found about the technology that particularly lends itself to this project – ScienceSim (Mic mentioned Crista’s hypergrid code for example, modularity is another feature often cited).

Wilf: We have found OpenSim’s client server model is well suited to the visualization model and the ability to put the server next to the supercomputer producing the visualization data is critical. We are however very interested in other environments and encourage papers, demonstrations and research on any of these platforms at the conference.

Interview with John A. Hengeveld

Tish Shute: OpenSim’s dependence on Second Life based viewers is sometimes cited as a limitation, and sometimes as a strength. What are your views on this?  What would a strong open viewer project directed at science applications bring to the picture?

John Hengeveld: There may be more than one strong open viewer project required for opensim compatible experiences.  The strength of the Hippo viewer, for example, is availability and its weakness is the size of the client.  We would love a ubiquitous, client.. that runs on all platforms, but each hardware platform brings tradeoff and restrictions of its own.  Today, probably all of the folks innovating in the space can deal with the size of a very fat rich client ap.. they have big computers anyway.  But as we get into more 3D entertainment and augmented reality applications.. virtual mall, collaboration apps.. etc… there is a great deal of room to optimize for the specific experience.  Balancing visual experience with bandwidth and compute performance available .. tying into standard browsers, etc… people have done some of this work.. and I think all of it adds to the usefulness of these worlds.

Tish: Integrating highend game engines and OpenSim opens up new possibilities. But licensing issues have been an obstacle. Could a project like ScienceSim get a non-commercial license on a high end game engine?  What would that bring to the picture?

John: Anything is possible. Game engines can give a great deal of design power for high value experiences, but the programming of these experiences must be simplified.  Mainstream adoption in enterprise can’t be premised on the programming model of studio games… that’s a big step to get over I think.  There are very interesting possibilities when we take that step tho.  Simulation, training, agents of various types (I just finished watching “The Matrix” for like the billionth time… I think agents are cool…)

Tish: Where does Larabee fit into the picture of ScienceSim and next generation virtual worlds?

John: We are all very excited about the Larrabee architecture and its application to work loads like next generation virtual worlds, both in the client.. delivering immersive reality.. and someday potentially in a distributed architecture simulating and producing these worlds.  For Intel CVC is an all play.  Atom will be used in strong mobile clients.  Core will be used in Enterprise PCs, Laptops and Desktops   Xeon will be simulating these environments and handling the data communication, and Whatever we brand Larrabee… will be enabling compelling visual experiences. Oh.. and our software products (Havoc, tools and others) will be building blocks in knitting all this together.  Larrabee is a part, but there are a lot of other pieces in our vision…

Tish: If the kind of rapid data movement that scientific visualization needs is achieved in virtual worlds, this will be quite a game changer for business applications of VWs too. Also it will blurr the boundaries between what we call virtual worlds and mirror worlds. It seems to me this kind of rapid data movement is a vital step towards what Mic described to me as Intel’s vision of CVC: “Connected Visual Computing is the union of three application domains: mmog, metaverse, and paraverse (or augmented reality).” It almost seems to me that if you achieve your goals for ScienceSim you will change how we think about virtual worlds in general? What do you think?

John: I certainly hope so..  Part of our goal is to stimulate innovation in the technology and usage models that will enable broad mainstream adoption of CVC based applications (what we categorize as immersive connected experiences).   By tackling the scientific visualization problem, we hope to find the key technology barriers and encourage the ecosystem to solve them.

Tish: To me virtual worlds and augmented reality should be complimentary and connected experiences. How do you see this connection evolving?

John: We certainly see them as related.  In the long term, there are many common building blocks.. but they aren’t united per se.  Its about the user experience, and in some usages these two are almost identical…  in some.. they don’t look or feel at all alike… the viewer is distinct by a lot.  Our approach is to enable building blocks that people can quickly build out usages that are robust.

Tish: What is Intel’s vision for ubiquitous mobile computing and an internet of objects?  How can high performance computing be an enabler for this vision?

John: Mobile computing is a central part of our life, culture and community in economically enabled economies.  It feeds the data of our decisions, it connects us to entertainment, it is the access point to our soapboxes, pulpits, economy and families.  This creates a massive increase in data, a massive increase in interactions, transactions and visualizations.  While many HPC applications will be behind the scenes (finance, health, energy, visual analytics and others), HPC will emerge as a part of a scale solution to serving some of this increase… particularly that part where interactions and visualizations are complex or compelling.. or where scale enables the usage per se .. I talked about my love of agents earlier.. and some of that comes in here.  Compute working behind the scenes to help managed the data complexity, manage some of the base interactions between ourselves and technology.  The other thing we talk internally about the “Hannah Montana usage” where millions of people use their mobile devices to access and participate (using the sensors in the device) with an interactive live concert.  When Mylie hears the applause of a virtual interactive audience… and can scream back at them.. we’re there.  Access to ubiquitous compute will be mobile, and interactive experiences will be complex.. and HPC can help make that real.  Watch out for the mental trap that HPC is always high end super compute clusters tho… the “mainstream HPC”.. smaller clusters… high threads, etc… will play a key part in all of this as well.

Interesting that John ended on this point as this just came in from Wired.

by Tish Shute at February 11, 2009 10:40 PM

February 05, 2009

OpenSimulator Project

OSG Metaversity (second class meeting)

The second class for C# programming was help on OSGrid today at Teravus Plaza at 2100UTC. Ten people were there *and* use was made of Justin’s “Graffiti Board”, a white board script he kindly placed in the OpenSim library for all to use.

Most students were there an hour before the class started to discuss programming, *and* I heard some even asking about additional homework on the #osgrid-college IRC channel on FreeNode earlier. The enthusiasm is joyful, to say the least.

csharpclass0205_001

I hope that we can strive to use “Teravus Plaza” for various meetings around this time of the day everyday, both classes, question answer hours and other learning and sharing activities as the community using OpenSim continues to grow.

Since we are concentrating on using the SecondLife Official client, currently 1.21.6 and the Hippo also, this is a good time and place for us to get reliability and stress data for the use of a major plaza to help the OpenSim development along.

Charles Krinke
OpenSim Core Developer
Director of OSGrid


by ckrinke at February 05, 2009 08:55 PM

February 04, 2009

OpenSimulator Project

Vehicles in OpenSim

There are three types of vehicles in OpenSim. These three are:

Type 1: Non-physical vehicles moved with llSetPos().
Type 2: Physical vehicles moved with llSetForce().
Type 3: Physics vehicles moved with llSetVehicleType().

There has been significant success with Type 1, modest success with Type 2 and Type 3 is incompletely implemented at this point.

Type 1:
One can find an example of a Type 1 vehicle in the form of a tour bus and a taxi on the region ‘Port Edward’ on OSGrid. The tourbus runs a fixed route around the streets of the town and the taxi accepts commands to move around the town.

Type 2:
A couple of folks have reported success with motor cycles and boats.

Type 3:
The 10 or so llSetVehicle* functions are incompletely implemented. That is, they are missing the last connection to ODE. It turns out that ODE is a little different then Havoc in its definitions of joints and motors and this is waiting for a “zealot” to help move it forward.

In chatting with folks about Type 1 and Type 2, our current issue seems to be crossing a region with either type of vehicle. Either we loose the reference of the prim or script from the scene, we loose the physical state, or both.

It seems to me that setting up a number of copies of a simple script and run a fixed route vehicle at a region boundary while monitoring the consoles of the “from” region and the “to” region to create and add notes to Mantis is one of our best ways forward to figure this out. At this point, I would like to recommend a few folks on the various grids using OpenSim test this notion and help us get vehicles to where they can reliably cross a sim boundary and keep their state.

Charles Krinke
OpenSim Core Developer
Director of OSGrid


by ckrinke at February 04, 2009 04:43 PM

OSG Metaversity

The OSG College idea has now morphed into the “OSG Metaversity” on OSGrid.

Today, I attended the first meeting of a new C# programming class on “Teravus Plaza” in the small ampitheater. Normally, I am one of the most conservative members of OpenSim, but to see a teacher, SnowDrop Short gather 12 students together, form teams of three, exchange e-mails, assign a little independent study is so exhilarating that I needed to describe it tonight.

This class, partly organized by BlueWall Slade and others represents the instantiation of a dream I have had for two years now. That is, the use of OpenSim to teach others in a virtual environment useful lessons to help them grow and understand.

The class will be meeting regularly each Tuesday at 2000UTC, right after “Office Hour” on Wright Plaza. There is room for more students next week and I see C# as an extremely interesting skill to acquire. After all, we support C# scripts in OpenSim as well as LSL scripts. I see this as useful to those that might wish to create region modules also.

In fact, the admins in OSGrid discussed this after the course and we feel that we would like to dedicate the suffix “Campus” to any educational group or institute that would like to support learning on OSGrid.

This is an exciting thing to see happen, and it has the side benefit of demonstrating and perhaps stressing the sim with students on a regular basis as we work to increase the number of simultaneous avatars in a region.

Charles Krinke
OpenSim Core Developer
Director of OSGrid


by ckrinke at February 04, 2009 04:31 AM

January 31, 2009

OpenSimulator Project

OSG Community College

Normally, I am the quiet, factual team member, but today I was invited to an organizational meeting on “Teravus Plaza” for the “OSG Community College”. This is something very near and dear to my heart. That is, the use of OSGrid and OpenSim to teach others building, scripting, C#, mysql, php and other interesting subjects. So please pardon me if I bubble over a bit.

One of the most important uses of OpenSim is to allows folks to learn and teach. In our grid, we have two goals and they are:

1. To test OpenSim SVN on a regular basis on a large number of regions with Windows, Linux and Mac computers and report back via Mantis, IRC and e-mail testing results to help develop OpenSIm.
2. To build a long-lasting and diverse community with exchange of ideas, knowledge, social interaction, objects, builds and scripts.

One of the most important parts of the second goal is a way for folks to have a somewhat structured way to learn. The things that seem interesting to such learning at this time are: Building, Scripting, C#, OpenSim Configuration, MySQL, MSSQL, PHP, just to name a few that I think about.

With a group willing to start down the path of making a formalized time and place for teaching and learning, we are beginning to realize and important part of the second goal. I take my hat off to BlueWall Slade, Robert Omeganu, Garland Greene, Starky Rubble, Teravus, Tommi Laukkanen, Flash Lefevre, Praxis Thinker and Programmer Mohr for attending and inviting me to this wonderful meeting.

I hope this will grow into a campus on OSGrid and perhaps a plaza to support learning and teaching.

The next meeting will be on February 6th at 2100UTC, again on Teravus Plaza and will be 15 minutes of organizational discussion followed by a class on basic building.

Lets do it!!

Charles Krinke
OpenSim Core Developer
Director of OSGrid


by ckrinke at January 31, 2009 02:50 AM

January 22, 2009

robsmart.co.uk » opensim

Visualizing live shipping data in OpenSim (Isle of Wight Ferries)

A couple of months back i spent some time writing a module for OpenSim, the purpose of this module being to allow you to connect directly to an MQTT messaging server from within the OpenSim scripting language. Thereby enabling real-time Publish Subscribe messaging in a 3d environment.

Adding messaging capability to the scripting language opens up a raft of possibilities for integrating other live systems with in world objects, for previous demonstrations I have implemented chat between virtual worlds and also
synchronous presentations across words and opensim regions amongst other things.

For this one I heard of some live data available from one of our local master inventors Andy Stanford-Clark on the positions of Ferries around the Southampton, Portsmouth and the Isle of Wight. He was publishing these message onto his MQTT microbroker which meant with my module for OpenSim i could show the positions of all the local shipping in near real-time along with the name of the ship and other information like course speed and cargo type.

In order to show this data i first terraformed an island within the IBM opensim grid to look like the Isle of Wight and surrounding sea. I did this by creating an image in photoshop and then using OpenSims terrain import feature. The image was based on a satellite photo of the area.

This is the resulting opensim island

aerial shot of opensim model of the isle of wight, uk

The next step was to write a script for the ships, this script took the description of the object(ferry) it was assigned to and used it to subscribe to the information for that ship. Each description is the pubsub topic for the ship e.g. ferries/Isle Of Wight/Red Cat 1

The script listens for incoming messages then moves the ship object to the correct location on the simulated region by converting latitude and longnitude into an X Y position. It also takes the bearing and makes the ship face in the correct direction.

here’s a couple more shots of the ferries in action

ferries from afar

ferries close up

The Ferries currently live on the IBM internal opensim grid (sorry only accessible to folks inside the IBM firewall :( )

by Rob Smart at January 22, 2009 05:47 PM

December 08, 2008

OpenSim/OSGrid Roundup

TERAVUS OUSLEY FTW!!!!!!!!!11 uno

Teravus Ousley, among many other things, is the Open Dynamics Engine physics engine guru for the OpenSim project. Teravus, who is a proficient and prolific c# programmer, committed work on the evening of Dec 6 (or thereabouts) that fixed physical linkset and linkset collision issues.

This is a matter of some significance, and the importance of this work from a simulation science standpoint cannot be overstated.

Thanks Teravus, and Kudos!

W00Tz!!!



by James Stallings II (noreply@blogger.com) at December 08, 2008 02:27 PM

October 27, 2008

robsmart.co.uk » opensim

XML Parsing in OpenSim: Example – reading RSS feeds

In OpenSim you’re not just restricted to using LSL for scripting, it’s also possible to use c#. This opens up the possiblilities for far more powerful scripts that can access c# in built libraries.

For example I’ve previously mentioned that the string processing methods in Second Life are not very flexible when it comes to reading formatted data. Thus the reason I implemented the osParseJSON method to make Web APIs easier to use.

Obviously another common data format is XML, in this case I don’t have to implement any new OpenSim script functions because the XML capabilities are available natively in c#.

Here is a simple example of reading the RSS feed for my blog, and reading out the entries in chat.


//c#
// displays the contents of an RSS 2.0 feed

string URL = “http://robsmart.co.uk/feed”;
System.Xml.XmlDocument xDoc = new System.Xml.XmlDocument();
LSL_Types.LSLString requestID;

public void default_event_state_entry()
{
llSay(0,”RSS reader current Feed is ” + URL);
getFeedContent();

}

public void getFeedContent()
{
requestID = llHTTPRequest(URL, new LSL_Types.list(), “” );
}

public void default_event_touch_start(LSL_Types.LSLInteger total_number)
{
// read out the RSS feed.
displayFeed();

}

public void displayFeed()
{
System.Xml.XmlNodeList items = xDoc.GetElementsByTagName(“item”);

for(int i=0;i < items.Count ; i++)
{
string title = items[i].SelectSingleNode(“title”).InnerXml;
string link = items[i].SelectSingleNode(“link”).InnerXml;

string description=”no description available”;

if(items[i].SelectSingleNode(“description”)!=null)
description = items[i].SelectSingleNode(“description”).InnerXml;

llSay(0,title + “\n” + description + “\n”);
}
}

public void default_event_http_response(LSL_Types.LSLString request_id, LSL_Types.LSLInteger status, LSL_Types.list metadata, LSL_Types.LSLString body)
{
if (requestID == request_id)
{
// store the xml
xDoc.LoadXml(body);

// process the xml
llOwnerSay(“loaded feed”);
}
}

by Rob Smart at October 27, 2008 01:21 PM

September 30, 2008

robsmart.co.uk » opensim

Thoughts on OpenSim, interview on UgoTrade

Tish Shute very kindly asked me to do an interview for her excellent blog over on Ugotrade. In the interview I discuss where OpenSim fits in with the rest of the Web and particularly how some of the recent work i’ve been doing makes it a more viable platform for consuming data and services from websites.

You can find the interview here.

by Rob Smart at September 30, 2008 10:38 PM

September 14, 2008

robsmart.co.uk » opensim

OpenSim Web 2.0 contribution

As described over on Eightbar I have made my first contribution to the OpenSim opensource project. The contribution is in the form of a new scripting function called osParseJSON. This function allows a c# script in OpenSim to consume the JSON notation provided by many of the major Web 2.0 APIs provided by services such as Flickr and Google translation.

The following example is a script that uses the Google Translate API to let an OpenSim avatar translate ther conversations between 23 different languages.

(disclaimer – please read the terms of conditions of the Google translate API and abide by them)


//c#
// This script is written as an example use of the osParseJSON method
// it uses the Google translate API
// ensure you have read the terms and conditions of the Google translate API
// http://code.google.com/apis/ajaxlanguage/documentation/

LSL_Types.key requestID;
string sourceLang = "en";
string targetLang = "fr";

public void default_event_state_entry()
{
llSay(0,"translator running say '/1 sentence' to translate something");
llSay(0,"translator running say '/2 source langage' to change target language e.g. '/2 fr'");
llSay(0,"translator running say '/3 target langage' to change source language e.g. '/3 en'");
llSay(0,"translator running say '/4 help', to list languages");
llListen(1, "", NULL_KEY, "");
llListen(2, "", NULL_KEY, "");
llListen(3, "", NULL_KEY, "");
llListen(4, "", NULL_KEY, "");
}

public void default_event_touch_start(LSL_Types.LSLInteger total_number)
{
llSay(0,"translator running say '/1 sentence' to translate something");
llSay(0,"translator running say '/2 source langage' to change target language e.g. '/2 fr'");
llSay(0,"translator running say '/3 target langage' to change source language e.g. '/3 en'");
llSay(0,"translator running say '/4 help', to list languages");
}

public void default_event_http_response(LSL_Types.LSLString request_id, LSL_Types.LSLInteger status, LSL_Types.list metadata, LSL_Types.LSLString body)
{
if (requestID == request_id)
{
// the Google JSON string returned wil be of the format
// {"responseData": {"translatedText":"Bonjour"}, "responseDetails": null, "responseStatus": 200}
// call the osParseJSON method so we can read the contents
System.Collections.Hashtable response = (System.Collections.Hashtable) osParseJSON(body);
System.Collections.Hashtable responsedata = (System.Collections.Hashtable) response["responseData"];

llSay(0,(string)responsedata["translatedText"]);
}
}

public void default_event_listen(LSL_Types.LSLInteger channelIn, LSL_Types.LSLString name, LSL_Types.LSLString id, LSL_Types.LSLString message)
{
if(channelIn==1)
{
string toTranslate = (string) message;
requestID = llHTTPRequest( "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q="+toTranslate+"&langpair="+sourceLang+"%7C"+targetLang, new LSL_Types.list(), "" );

}
else if(channelIn==2)
{
sourceLang = (string) message;
}
else if(channelIn==3)
{
targetLang = (string)message;
}
else if(channelIn==4)
{
llOwnerSay("LANGUAGE (CODE)");
llOwnerSay("* Arabic (ar)");
llOwnerSay("* Bulgarian (bg)");
llOwnerSay("* Chinese (zh)");
llOwnerSay("* Croatian (hr)");
llOwnerSay("* Czech (cs)");
llOwnerSay("* Danish (da)");
llOwnerSay("* Dutch (nl)");
llOwnerSay("* English (en)");
llOwnerSay("* Finnish (fi)");
llOwnerSay("* French (fr)");
llOwnerSay("* German (de)");
llOwnerSay("* Greek (el)");
llOwnerSay("* Hindi (hi)");
llOwnerSay("* Italian (it)");
llOwnerSay("* Japanese (ja)");
llOwnerSay("* Korean (ko)");
llOwnerSay("* Norwegian(no) ");
llOwnerSay("* Polish (pl)");
llOwnerSay("* Portuguese (pt-PT)");
llOwnerSay("* Romanian (ro)");
llOwnerSay("* Russian (ru)");
llOwnerSay("* Spanish (es)");
llOwnerSay("* Swedish (sv)");

}
}

by Rob Smart at September 14, 2008 09:37 PM

August 29, 2008

UgoTrade » OpenSim

Meet the Rising Stars of the Open Metaverse at Virtual Worlds 2008, LA

OpenSim developers will be explaining OpenSim to Virtual Worlds Conference and Expo,LA, 2008, attendees from a “very-spacious booth being sponsored by DeepThink, Genkii, RealXtend, SineWave and ISID.” The booth will be an important place to meet some of the key innovators in virtual worlds.

While OpenSim is still alpha there are already some pretty advanced projects on the OpenSim platform including some truly game changing innovation from realXtend, and Tribal Media (more on RealXtend here and Tribal here), IBM’s 60 sim behind their firewall OpenSim Grid, the Microsoft Developer community’s OpenSim grid, Project Manhattan, and the awesome immersive education Greenbush Grid, the collaboration between IBM and the Fashion Research Institute to develop new technologies for the $1.7 trillion apparel industry, Genkii’s work with astrophysicists Piet Hut and Junichiro Makino on N-body simulation in OpenSim, and an extensive list of virtual world providers, and much more!

Thanks Lynn Cullens (Bjorlyn Loon in SL), Director of Communications for Metanomics for the picture of Adam above.

DeepThink has sponsored a screenshot competition so many OpenSim projects will be on display in the booth. Also, Adam a will be unveiling a new OpenSim demo from DeepThink (the screenshot above is a sneak peak). OSGrid (the OpenSim test grid) guru and organizer Charles Krinke (avatar Charles Krinkeb) will be in LA also, so this is a great opportunity to find out how to get involved with OpenSim development.

Three from RealXtend will be in LA!

RealXtend will have three team members in LA – you can look for them at the OpenSim booth. In the picture from the left – Hannu Hollström (ADMINO technologies), Tomi Kujanpää (LudoCraft/realXtend Art Director & Avatar Specialist), Antti Ilomäki (realXtend Communications/ADMINO technologies Project Manager).

ADMINO technologies and LudoCraft, the two main contributors of the realXtend project, are pioneers in virtual world development and interactive experience design. LudoCraft Ltd. is a game studio specializing in the design and development of collaborative multiplayer 3D games and simulations. ADMINO technologies develop unique, scalable virtual world server solutions.

Novamente’s virtual pets coming to RealXtend soon!

Recently, Ben Goertzel, Novamente, visited realXtend in Oulu, Finland and his visit made the local newspaper. Novamente will have their own booth so stop by to learn more. Ben Goertzel explained:

This summer a collaboration between RealXTend, Novamente LLC, and the open-source AI project OpenCog was established. The initial focus of the collaboration is on creating open-source virtual dogs using the OpenCog software, similar to the Novamente LLC virtual pets which are currently being developed mainly in the Multiverse platform (see screenshot below), and have also previously been prototyped in Second Life, and to launch these pets in the RealXTend platform.

At first the dogs will be used for research and experimentation purposes; then afterwards there is the potential of offering them freely to RealXTend users to use in their own RealXTend worlds or publicly-provided worlds. The Novamente/OpenCog virtual pets differ from other existing virtual pets in that they possess powerful, open-ended learning ability: they can learn an endless variety of behaviors, not just a handful of behaviors provided in advance by the programmers. And the pets are just the start: the plan is to roll out a series of progressively more and more intelligent, learning-capable virtual agents in RealXTend, Multiverse and other virtual worlds, including talking parrots and humanoids that can carry out various practical tasks as well as providing entertainment.


Genkii Goes to Hollywood

Virtual Worlds 2008, LA will be a unique opportunity to meet the Genkii team and see their work with Piet Hut and Jun Makino on N-body simulation in OpenSim.

In the picture above, Jeff Ames, CTO, Genkii, is coding up  the N-body algorithms in a meeting/dinner with astrophysicist Piet Hut in Tokyo. The pictures below are the CCO of Genkii, Yuki Saeki’s portraits of Ken Brady (CEO), herself, and Adam Johnson (COO).

CEO Ken Brady will be leading a panel in the Enterprise Track called “Using Virtual Worlds to Streamline and Augment the Film-Making Process.”

ISID -  business value in open source virtual worlds

On the left is Yuhei Shinada, and on the right, Takashi Shima of ISID.

ISID is one of the sponsors of the OpenSim booth at VW2008.

What ISID wants to do with OpenSim:

- Analyze the platform to search for possible business applications
- Develop intraverse environments in order to find new ways for companies to communicate internally
- Develop a closed environment to provide a place for information exchange and experimentation within the companies with the same interest

ISID’S outlook:

In the future, several open source virtual worlds will emerge. However, given OpenSim’s prevalence and level of sophistication, it will be the most successful.

Fashion Research Institute creating enterprise solutions in OpenSim

The image above is the Shenlei Winkler’s, avatar (Shenlei is CEO of Fashion Research Institute, Inc.), photographed in the OpenSim Shengri La region in the Shengri La Bliss sim, part of FRI’s 9 sim grid. Shenlei Winkler (Shenlei Flasheart in Second Life) is leading the way with IBM in making OpenSim fit for business and in using OpenSim to develop new technologies for the $1.7 trillion apparel industry, (see my upcoming interview with Shenlei to learn more about her work and vision).

We’re working with IBM to harden Opensim as an enterprise-ready solution for a number of different reasons not the least of which is the fact that IBM can handle issues of scalability, interoperability, and data security. Right now, we’re testing the IBM OpenSim installation ShengriLa Spirit so that we can really stress the platform in a controlled environment. This offers feedback to our development team in a codified way. The fatc that I insist that it be beautiful just aligns with the Fashion Research Institute’s overall vision.
FRI is a business partner and customer of IBM, plus, we have a research agreement with them to develop new technologies for the apparel industry, a $1.7 trillion industry.


Justin Clark-Casey formerly of IBM is now working full time with the Fashion Research Institute on OpenSim development. Justin will be in LA, so look out for him at the OpenSim booth or catch him speaking on the last day of the conference with Adam Frisby, DeepThink, Mic Bowman, Intel, and myself, Thursday, September, 4th, 4pm to 5pm on our panel, “Open-Source, Interoperable Virtual Worlds,” which will be part of the Future of Virtual Worlds track.

Eolus – “The Path to Sustainable Real Estate”

Oliver Goh, Implenia, will be at VW2008 demoing the latest work from Eolus on “The Path to Sustainable Real Estate,” (see my earlier posts here, and here on Oliver’s work with with IBM on prototyping Virtual Operation Centers and building automation in OpenSim).

The Eolus 3D Virtual Operations Centers represents the next level of innovation and green technology offered by the Eolus solution.   The 3D environment is customized according to unique requirements, and can be delivered as classic command centers, control rooms, datacenters, or hybrids or custom solutions.  The versatile virtual world environment ensures a platform for innovation for scalability, performance, and growth as the business value it brings is expanded to other areas.

Michael Osias, IBM, Chief 3D Architect, Grid Operator, IT Optimization

You will be able to find Michael at the IBM booth.  And don’t worry, he is not always as serious as in this photo!  So my advice is to grab this chance to meet the developer of some of the most advanced OpenSim enterprise applications.

I have blogged a lot about Michael’s work with Oliver Goh on Eolus in the past year.  They recently got a lot of main stream press attention including being written up in the Guardian (also see my posts: The Archeology and Future of Software Design: Interview with Grady Booch, Interoperability for Virtual Worlds in 2008, Eolus Goes OpenSim, Next Generation of Software Design: 3D Command/Service Centers in Second Life, Eolus Makes Leap to 3D Internet in Second Life).

Michael’s pioneering integrations of “virtual” and “real” worlds give us, perhaps, our first glimpse of how virtual worlds will play a vital role in management, optimization and control of energy, data, business processes and more, changing the way we relate to the software infrastructure of our technology driven world.

As the architect and grid operator of IBM’s fast growing ‘behind the firewall’ OpenSim grid  – it now has sixty regions and 123 users – Michael has been doing some interesting work. Most recently he has been integrating xen an open source virtualization product by Citrix with OpenSim to do dynamic provisioning of new region servers, move the region servers among nodes, resize virtual CPU and memory allocation, and more.

Doug Thompson – CEO, Remedy Communciations

And, look out for Doug Thompson! He is also known as the great blogger Dusan Writer who sponsored the Second Life (TM) User Interface competition.

Second Life Ui Contest July 3 2008<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" height="355" width="425"><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><param name="src" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=second-life-ui-contest-july-3-2008-1215107315760973-8&amp;stripped_title=second-life-ui-contest-july-3-2008&amp;pid=48b76d9509c1efcd"/><embed allowfullscreen="true" allowscriptaccess="always" height="355" src="http://static.slideshare.net/swf/ssplayer2.swf?doc=second-life-ui-contest-july-3-2008-1215107315760973-8&amp;stripped_title=second-life-ui-contest-july-3-2008&amp;pid=48b76d9509c1efcd" type="application/x-shockwave-flash" width="425"></embed></object>

Tom Hoff – OpenSim Core Developer

“Tom Hoff is an independent software developer and digital artist. He is contributing to the OpenSimulator project as a core developer, currently specializing in geometry issues. His prior experiences include a 23 year career as a technical staff member at Hewlett-Packard Company, where he spent much of his time developing digital halftoning and printing algorithms for ink jet printers and robotic machine vision systems for automated print quality evaluation. His interests include digital image processing, 3D geometry, and computational behavioral models. He is also an avid fitness enthusiast despite his higher than normal consumption of diet cola.”

by Tish Shute at August 29, 2008 05:45 AM

August 28, 2008

UgoTrade » OpenSim

“OpenSource, Interoperable Virtual Worlds” at VW 2008, LA

OpenSim is designed for interoperability innovation. Adam Frisby explains:

By allowing easy customization and extension, we can test and refine interoperability protocols very quickly and efficiently. The interconnect with Second Life (TM) was developed by David Levine, IBM, in only a number of days (David Levine on the right, Adam Frisby, left).

Please join us on Thursday, September, 4th, 4pm to 5pm at the Virtual Worlds Conference and Expo, LA for our panel, “Open-Source, Interoperable Virtual Worlds,” which will be part of the Future of Virtual Worlds track.


Support for standardisation in Virtual World technologies has been growing steadily in recent times, join the developers of OpenSim and industry commentators as they discuss where open-source virtual worlds are heading and the progress made towards standard protocols for interoperability.


- Adam Frisby, Director, DeepThink (and OpenSim Developer)
- Tish Shute, Writer/Virtual World Evangelist, Ugotrade.com
- Mic Bowman, Principal Engineer, Intel
- Justin Clark-Casey, OpenSim Developer, IBM

Also, special panel guest Mike Mazur, OpenSim Developer, 3Di. We hope David Levine, IBM, will be back from Europe and join us too!

Adam Frisby, Deep Think, is one of the founders and leading developers of OpenSim. Adam has been behind so many important steps forward in the open metaverse that I cannot list them all here. But a notable recent project of Adam’s is a new “Lively style” viewer for OpenSim and Second Life (TM), Xenki (see Adam’s blog for more).

Mic Bowman, Intel

Mic Bowman presented at the Intel Developer’s Forum earlier this month. He outlined a road map for how virtual worlds will move into the fabric of everyday computing with open source software playing a key role (the slide of OpenSim architecture above is from this presentation). Virtual Worlds are an important part of Intel’s strategy for developing connected visual computing experiences. For more about Intel’s CVC initiative (see this press coverage of IDF, The Inquirer, bit-tech.net, hexus, Trusted Reviews).

Basically… my message for the panel is this: To achieve a thriving, growing, broadly adopted CVC ecosystem, we believe the industry must come to some agreement on common building block technologies. Open source technologies represent a critical element in the discovery and development of these technologies, and foster innovative usages that drive adoption.

Justin Clark-Casey, Fashion Research Institute, Inc.

Another interesting member of our panel and important OpenSim developer is Justin Clark-Casey. Justin, formerly of IBM, is now with the Fashion Reasearch Institute, Inc as a full time OpenSim developer/architect. Fashion Research Institute is considered by many one of the most advanced business cases on OpenSim (more about Shenlei Winkler, CEO of FRI, in my next post, “Meet the Rising Stars of the Open Metaverse at VW 2008.”

Recently Justin has been working on something called a region archive in OpenSim.

Basically, this is a way of saving a sim to a single file (currently a tar.gz) and reloading it into another OpenSimulator. This file contains all the necessary data (prim xml and assets such as textures and scripts) necessary to restore the entire region.

It’s currently experimental so still has some bugs. But, it can be used via the load-oar/save-oar commands on the OpenSim region console.

The ability to save and load archives is something that people developing whole applications using OpenSim will be very interested in, and will contribute to the business value of OpenSim.


OpenSim and Linden Lab are at the Center of Interoperability Innovation

Since the launch of Open Grid (beta) the interoperability initiative from OpenSim and Linden Lab (for more see here), cross world interoperability has begun with avatar hopping. Now the thorny issues of trust management, economy, and IP that are the major part of asset interoperability are on the table.

The picture above of Gridnaut, Lawson English, (Saijanai Kuhn in SL) is from Lynn Cullens (Bjorlyn Loon in SL), Director of Communications for Metanomics.
Open Grid has expanded to 31 regions in less than a month and there is now OGP support in OpenSim trunk. Vivaty has expressed interest in joining interoperability efforts so we may see some of the new browser based worlds become part of this initiative soon

Hamilton Linden, who is leading the Open Platform Product Group (OPPG) as Director, Engineering for Linden Lab, and, Tess Linden, Technical Director, leading design and Implementation for the OPPG (Open Platform Product Group), will be holding office hours at the Linden Lab booth at VW2008, LA to discuss Open Grid. We hope that both Hamilton and Tess will special guests at the panel also!

by Tish Shute at August 28, 2008 12:10 AM

July 13, 2008

Digital Ghosts

Candlewick on OSGrid

This just in: Virtual Candlewick Manor is now on OSGrid thanks to the generosity of OSGrid user Richie Ward.

To visit, go to the OSGrid site for instructions on connecting your viewer to the grid. (Note: the linux instructions are slightly incorrect. The part that says "-loginpage http://osgrid.org/loginpage.htm" should say "-loginpage http://osgrid.org/loginscreen.php")

When you start the SL Viewer following those instructions, you will be shown the OSGrid login screen (linked here as an example) with a list of regions in a box on the left side. Find and click on Candlewick in that list. Doing that should log you into the Candlewick region directly. (Alternately, you can try to use the world map to teleport to Candlewick. The region is two spaces west of SeaPrior Plaza, which in turn is about seven sims southwest of Lbsa Plaza, and about 12 southwest of Wright Plaza.)

Note that the build is still a work in progress, so large parts are not done.

July 13, 2008 11:21 PM

July 05, 2008

Digital Ghosts

VWORP - Virtual World Online Roleplaying - Part 2

(Continuing my thoughts from Part 1...)

I mentioned previously that there was a lot of room for compromise between "high graphics, low flexibility" and "high flexibility, no graphics".

Second Life was one alternative which offered a lot of flexibility, but it still had issues.

You had the same "recurring fee" problem of an MMO, and it was considerably more of a show-stopper if you needed a significant amount of land to run your game, which you probably would. (As of this writing, Sim prices are $1000 set-up and $200 per month for a full-fledged region, or $200 set-up and $75 per month for a crippled OpenSpace sim. Most roleplaying groups would be rather put-off by that as a prerequisite, to put it mildly.)

And unless you got such a sim, you had no real ability to make your land truly private; parcel ban lines aren't as effective as a closed island in SL. Not everyone wants to hold their tabletop session on the equivalent of the corner sidewalk.

Using SL also would mean that griefer attacks were as much a risk as in an MMO, if not more (few MMOs have as many groups explicitly and publicly dedicated to deliberately ruining the experience for others as SL does, precisely because of the lack of subscription fees).


After awhile, I concluded that a good solution might be to go back to my old stomping grounds: First Person Shooters were traditionally very flexible thanks to the precedent of id software's Doom and Quake directly supporting modders, and they had excellent quality.

A modern game like Half-life 2, combined with something like Garry's Mod (a sandbox mod, sort of like Second Life, only using HL2 props and supporting Lua scripting) would be very useful for creating compelling environments. Garry's Mod even has a roleplaying gametype straight out of the box, though it has always felt a lot more video game-ish than what I'm intending to do. Add a Lua script like LiteRP, you have much of the work done on the interface and engine side of things. So you just need to handle the content angle.

But then we come back to that old problem: good graphics are time consuming and difficult. Most gamers just want to run/play their game, not spend months per session building stuff. The way I see VWORP games working is sort of a virtual LARP: it tends to be socially-oriented and it tends to have a number of recurring environments (the secret headquarters, the night club, etc.) So, in many games, once you have a good library of content built up, your needs tend to diminish somewhat. But still, getting started is a problem. How can we lower that initial barrier?

The solution I first came up with was a community of content creators (who often make stuff for fun) and gamers (who need stuff made so they can have fun). Bring the two together, and the problem could be taken care of. I have an image of a site where you can download packs of content in specific styles, or even for specific game settings. Modular buildings, to be connected up into an MMO-style area, for example. For more unique content, gamers could post requests, and creators could even take commissions on more unique things, such as custom player-models for specific PCs, just as artists on deviantArt take commissions on illustrations of those characters. And, being based on an FPS engine, the graphical quality would tend to be very high (higher than in an MMO).

However, that is for the future. In order to get there, I needed a way to bootstrap the community from basically, just me. So I still needed a short-term platform.

That's when I realized that OpenSim was much further along than when I had last checked (I previously mentioned OpenSim in my initial post). It has most of the advantages of Second Life (much quicker and more accessible building and character customization tools compared to an FPS) and few of the limitations of SL (it's free, you can run it completely privately, etc.). The only drawbacks are finding a way to host it, and the fact that the software is still in alpha and undergoing rapid development. Sometimes things break. Some things don't work at all. Still, it was sufficient for my purposes.

So, currently, my work on VWORP is being performed in OpenSim. I'm presently building private regions for our current Changeling game and our recurring Mage game, as well as the eponymous building from The Dreadful Secrets of Candlewick Manor.

We'll see how it goes.

July 05, 2008 12:09 PM