<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml"
>

<channel>
	<title>xyzzy xyzzy... &#187; opensim</title>
	<atom:link href="http://xyzzyxyzzy.net/tag/opensim/feed/" rel="self" type="application/rss+xml" />
	<link>http://xyzzyxyzzy.net</link>
	<description>...you are in a grid of twisty, little links, all alike. there's a teleport gate here.</description>
	<lastBuildDate>Fri, 15 Jan 2010 15:49:20 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>OpenSim Zurich Lunch (r6)</title>
		<link>http://xyzzyxyzzy.net/2010/01/13/opensim-zurich-lunch-r6/</link>
		<comments>http://xyzzyxyzzy.net/2010/01/13/opensim-zurich-lunch-r6/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 12:39:32 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
				<category><![CDATA[from the grid]]></category>
		<category><![CDATA[lunch]]></category>
		<category><![CDATA[meetup]]></category>
		<category><![CDATA[opensim]]></category>
		<category><![CDATA[switzerland]]></category>
		<category><![CDATA[zurich]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=389</guid>
		<description><![CDATA[for over a year we&#8217;ve been meeting more or less once a month or two  over lunch
to discuss and chat about all things OpenSim &#8212; very creatively
volker gässler and i called them OpenSim Zurich Lunches back then
when. for the past year we&#8217;ve been having lunch at the cafeteria of
the IBM Research &#8212; Zurich lab, [...]]]></description>
			<content:encoded><![CDATA[<p>for over a year we&#8217;ve been meeting more or less once a month or two  over lunch
to discuss and chat about all things <a href="http://opensimulator.org/">OpenSim</a> &#8212; very creatively
volker gässler and i called them <em>OpenSim Zurich Lunches</em> back then
when. for the past year we&#8217;ve been having lunch at the cafeteria of
the <a href="http://www.zurich.ibm.com/index.html">IBM Research &#8212; Zurich lab</a>, this month&#8217;s OpenSim Zurich Lunch
will be the first time we meet closer to the downtown zurich area:</p>

<ul>
<li><strong>monday, january 25th, 12:30h &#8212; 14:00h (approx)</strong></li>
<li><strong><a href="http://maps.google.ch/maps?f=q&amp;source=s_q&amp;hl=de&amp;geocode=&amp;q=Freyastrasse+3,+8004+Z%C3%BCrich&amp;sll=47.37156,8.524562&amp;sspn=0.006932,0.01929&amp;gl=ch&amp;ie=UTF8&amp;hq=&amp;hnear=Freyastrasse+3,+8004+Z%C3%BCrich&amp;t=h&amp;z=16">king&#8217;s kurry, freyastrasse 3, zürich</a> (close to the train station wiedikon)</strong></li>
</ul>

<p>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
&#8212; fe11 at gmx.ch &#8212; so that we can reserve enough seats at <em>king&#8217;s
kurry</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2010/01/13/opensim-zurich-lunch-r6/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<georss:point featurename="[47.308883299155255, 8.544209003448486]">47.308883299155255 8.544209003448486</georss:point>
	</item>
		<item>
		<title>debianized rezzme</title>
		<link>http://xyzzyxyzzy.net/2010/01/05/debianized-rezzme/</link>
		<comments>http://xyzzyxyzzy.net/2010/01/05/debianized-rezzme/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 10:50:03 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
				<category><![CDATA[from the grid]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[opensim]]></category>
		<category><![CDATA[redhat]]></category>
		<category><![CDATA[rezzme]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=381</guid>
		<description><![CDATA[the latest rezzme now contains the necessary code to build debian/ubuntu dpkgs &#8212; 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 [...]]]></description>
			<content:encoded><![CDATA[<p>the <a href="http://github.com/drscofield/rezzme">latest rezzme</a> now contains the necessary code to build debian/ubuntu dpkgs &#8212; 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).</p>

<p>while working on the dpkg support i also found out that debian/ubuntu has the very useful <code>/etc/firefox-3.0</code>, <code>/etc/firefox-3.5</code>, and <code>/etc/thunderbird</code> directories that allow me to provide package specific javascript to, for example, add a protocol handler for the <code>rezzme:</code> URI scheme. that along with gnome&#8217;s gconf tool gives us the same seamless rezzme user experience as on windows or mac OSX &#8212; unfortunately, it seems that nothing comparable exists for redhat/fedora based systems.<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup></p>

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

<div class="footnotes">
<hr />
<ol>

<li id="fn:1">
<p>at least i couldn&#8217;t find anything comparable; if you know how to do this &#8212; independent of minor version upgrades of firefox and thunderbird &#8212; i&#8217;d appreciate it very much to learn about that.&#160;<a href="#fnref:1" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2010/01/05/debianized-rezzme/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point featurename="[47.131074826701266, 8.747992515563965]">47.131074826701266 8.747992515563965</georss:point>
	</item>
		<item>
		<title>japanese language support for OpenSim</title>
		<link>http://xyzzyxyzzy.net/2009/09/01/japanese-language-support-for-opensim/</link>
		<comments>http://xyzzyxyzzy.net/2009/09/01/japanese-language-support-for-opensim/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 14:07:57 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
				<category><![CDATA[from the grid]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[fonts]]></category>
		<category><![CDATA[japanese]]></category>
		<category><![CDATA[kochi mincho]]></category>
		<category><![CDATA[opensim]]></category>
		<category><![CDATA[unicode]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=353</guid>
		<description><![CDATA[a colleague of mine in japan contacted us asking whether our in-world
collaboration tools could be extended to support japanese characters
&#8212; 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 [...]]]></description>
			<content:encoded><![CDATA[<p>a colleague of mine in japan contacted us asking whether our in-world
collaboration tools could be extended to support japanese characters
&#8212; he had tried our internal, public <em>sametime 3d</em> 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 <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>

<p>not good. even worse when it means lost leads. so i set out to
investigate. since OpenSim <strong>is</strong> being used in japan, it was a fair
assumption that we might have a font problem here. this was confirmed
by <a href="http://twitter.com/AdamFrisby/status/3555720286">a twitter from
adamfrisby</a>:</p>

<blockquote>
  <p>@DrScofield so it should load fine.Only issue you need to be aware
  of is fonts &#8211; you need to use a font with the correct charset
  availible.</p>
</blockquote>

<p>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
<code>VectorRenderModule</code>:</p>

<p><pre class="brush: csharp;">
    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);
        ...
</pre></p>

<p>gulp: we&#8217;ve got it <em>hard coded</em> <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>

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

<p><pre class="brush: csharp;">
    ...
    else if (nextLine.StartsWith(&quot;FontName&quot;))
    {
        nextLine = nextLine.Remove(0, 8);
        fontName = nextLine.Trim();
        myFont = new Font(fontName, fontSize);
    }
    ...
</pre></p>

<p>except, hmph, there is no <code>osSetFontName()</code> OSSL function <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>

<p>a couple of <a href="http://en.wikipedia.org/wiki/SMOP">SMOP</a>s later, we had <code>osSetFontName()</code> and could also
configure the default font name in <code>OpenSim.ini</code>, good. now to figure
out which linux font would do the trick.</p>

<p>i tried:<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup></p>

<ul>
<li><em>Arial</em> &#8212; no good: doesn&#8217;t have japanese script support</li>
<li><em>DejaVu Sans/Serif</em> &#8212; again, no good, no japanese script support</li>
<li><em>Kochi Mincho</em> &#8212; works!</li>
</ul>

<p>&#8212; the configuration for that one is:</p>

<p><pre class="brush: plain;">
[VectorRender]
    font_name = &quot;Kochi Mincho&quot;
</pre></p>

<p>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.</p>

<p>&#8230;unfortunately, while windows users have <em>Arial Unicode MS</em> there is
no such complete beast available to linux users &#8212; yes, there are
fonts such as <em>bitstream cybit</em>, but their license conditions either
don&#8217;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
<code>OpenSim.ini</code>.</p>

<p>but! at least we figured out how to get japanese character sets
supported in OpenSim on linux and can now configure one of our
<em>sametime 3d</em> servers to support japanese OpenSim users properly! <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:1">
<p>lest you get the wrong impression: i know <strong>no</strong> japanese,
  instead i&#8217;m using <a href="http://translate.google.com/translate_t#en|ja|OpenSim%20rocks!">google translate</a> to produce suchs gems as
  &#8220;OpenSimは岩！&#8221;<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup>&#160;<a href="#fnref:1" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:2">
<p>and hoping that the good folks at google don&#8217;t do a &#8220;<a href="http://www.imdb.com/title/tt0259446/quotes">Έχω τρεις
  όρχεις</a>&#8221; on me&#8230;&#160;<a href="#fnref:2" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2009/09/01/japanese-language-support-for-opensim/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point featurename="[47.308883299155255, 8.544209003448486]">47.308883299155255 8.544209003448486</georss:point>
	</item>
		<item>
		<title>40</title>
		<link>http://xyzzyxyzzy.net/2009/07/11/40/</link>
		<comments>http://xyzzyxyzzy.net/2009/07/11/40/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 19:09:34 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
				<category><![CDATA[from the grid]]></category>
		<category><![CDATA[avatars]]></category>
		<category><![CDATA[bots]]></category>
		<category><![CDATA[opensim]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=343</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>a <a href="t/2009/06/19/21/">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</a>. alan webb, arthur valadares, and i started looking at the what could possibly be biting us there.</p>

<p>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 &#8212; 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 &#8220;outsourced&#8221; 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.</p>

<p>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.</p>

<p>so, progress. now to figure out why massive amounts of collision events reported via LSL cause a deep ODE physics engine crash&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2009/07/11/40/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<georss:point featurename="[47.131074826701266, 8.747992515563965]">47.131074826701266 8.747992515563965</georss:point>
	</item>
		<item>
		<title>full spatial voice for opensim</title>
		<link>http://xyzzyxyzzy.net/2009/07/11/full-spatial-voice-for-opensim/</link>
		<comments>http://xyzzyxyzzy.net/2009/07/11/full-spatial-voice-for-opensim/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 18:54:44 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
				<category><![CDATA[from the grid]]></category>
		<category><![CDATA[opensim]]></category>
		<category><![CDATA[vivoxvoice]]></category>
		<category><![CDATA[voice]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=339</guid>
		<description><![CDATA[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 &#8220;paperwork&#8221; done so that we could finally release it into the wild!

VivoxVoiceModule works with the same voice technology which Linden Labs [...]]]></description>
			<content:encoded><![CDATA[<p>this morning i finally could push our <code>VivoxVoiceModule</code> 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 &#8220;paperwork&#8221; done so that we could finally release it into the wild!</p>

<p>VivoxVoiceModule works with the same voice technology which Linden Labs are using for their SecondLife virtual world &#8212; and, what&#8217;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 <em>anything</em>  client side.  you can even &#8212; in contrast to Linden Labs SecondLife grid &#8212; 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 <code>OpenSim.ini.example</code>). voice quality is superb &#8212; 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.</p>

<p>VivoxVoiceModule does require a <a href="http://www.vivox.com/virtualworlds.html">vivox voice server</a> to talk to &#8212; which means that you need to obtain a <em>customer admin account</em> (IIRC) from vivox. as i don&#8217;t work for vivox (alan webb and i just wrote the module, nothing else), i can&#8217;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.</p>
]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2009/07/11/full-spatial-voice-for-opensim/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<georss:point featurename="[47.131074826701266, 8.747992515563965]">47.131074826701266 8.747992515563965</georss:point>
	</item>
		<item>
		<title>21</title>
		<link>http://xyzzyxyzzy.net/2009/06/19/21/</link>
		<comments>http://xyzzyxyzzy.net/2009/06/19/21/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 18:33:18 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
				<category><![CDATA[from the grid]]></category>
		<category><![CDATA[research]]></category>
		<category><![CDATA[opensim]]></category>
		<category><![CDATA[stress test]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=334</guid>
		<description><![CDATA[after our intoxicating stress test ten days ago we repeated the stress test today with a group of volunteers &#8212; 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 [...]]]></description>
			<content:encoded><![CDATA[<p>after our <a href="/2009/06/09/81/">intoxicating stress test ten days ago</a> we repeated the stress test today with a group of volunteers &#8212; thus, real SL clients instead of bots.</p>

<p>the result: <strong>21</strong>. <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>

<p>somewhere around the 21 avatar mark we are got stuck and the (single) region standalone system started becoming <em>very</em> 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&#8217;s log we saw that OpenSim was busy processing new user requests &#8212; a lot of new user requests.</p>

<p>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.</p>
]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2009/06/19/21/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		<georss:point featurename="[47.131074826701266, 8.747992515563965]">47.131074826701266 8.747992515563965</georss:point>
	</item>
		<item>
		<title>avatar machine</title>
		<link>http://xyzzyxyzzy.net/2009/06/18/avatar-machine/</link>
		<comments>http://xyzzyxyzzy.net/2009/06/18/avatar-machine/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 16:31:11 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
				<category><![CDATA[from the grid]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[appearance]]></category>
		<category><![CDATA[avatar]]></category>
		<category><![CDATA[opensim]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[quick-hack]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=326</guid>
		<description><![CDATA[for stress testing i needed to create 100 avatar accounts quickly. instead of going via opensim&#8217;s console i started ipython and entered the following python script:


import xmlrpclib
os = xmlrpclib.Server('http://127.0.0.1:9000/')
for i in range(100):
    os.admin_create_user(dict(password = 'SECRET', 
                 [...]]]></description>
			<content:encoded><![CDATA[<p>for stress testing i needed to create 100 avatar accounts quickly. instead of going via opensim&#8217;s console i started <a href="http://ipython.scipy.org/moin/">ipython</a> and entered the following python script:</p>

<pre><code><pre class="brush: python;">
import xmlrpclib
os = xmlrpclib.Server('http://127.0.0.1:9000/')
for i in range(100):
    os.admin_create_user(dict(password = 'SECRET', 
                              user_firstname = 'Bot%d' % i,
                              user_lastname = 'Dude', 
                              user_password = 'b0tb0tb0t', 
                              start_region_x = 1000, 
                              start_region_y = 1000, 
                              model = 'Bot Dude')) 
</pre>
</code></pre>

<p>a couple of minutes later i had successfully created 100 avatar
accounts, &#8221;Bot0 Dude&#8221; to &#8221;Bot99&#8242;, all wearing the same outfit as
&#8221;Bot Dude&#8221;, an avatar i had prepared earlier.</p>

<p>voila! avatar machine <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2009/06/18/avatar-machine/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<georss:point featurename="[47.308883299155255, 8.544209003448486]">47.308883299155255 8.544209003448486</georss:point>
	</item>
		<item>
		<title>81</title>
		<link>http://xyzzyxyzzy.net/2009/06/09/81/</link>
		<comments>http://xyzzyxyzzy.net/2009/06/09/81/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 20:38:37 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
				<category><![CDATA[from the grid]]></category>
		<category><![CDATA[bots]]></category>
		<category><![CDATA[load]]></category>
		<category><![CDATA[opensim]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=318</guid>
		<description><![CDATA[it was a dark and stormy night. lightning was ripping the heavens
apart, thunder was rolling through the valley. no living soul dared
venture outside&#8230;1

&#8230;and i wasn&#8217;t. i sat in front of my screen, mesmerized by the
numbers coming up: 20&#8230;27&#8230;34&#8230;38&#8230;40&#8230;43&#8230;48&#8230;52&#8230; eventually
peaking at 81! we were stress testing our opensim server and our
in-world build. the numbers represented rather [...]]]></description>
			<content:encoded><![CDATA[<p>it was a dark and stormy night. lightning was ripping the heavens
apart, thunder was rolling through the valley. no living soul dared
venture outside&#8230;<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup></p>

<p>&#8230;and i wasn&#8217;t. i sat in front of my screen, mesmerized by the
numbers coming up: 20&#8230;27&#8230;34&#8230;38&#8230;40&#8230;43&#8230;48&#8230;52&#8230; eventually
peaking at <strong>81!</strong> we were stress testing our opensim server and our
in-world build. the numbers represented rather brutal bots, that, as
soon as they were in-world started running around, chatting with one
another and grabbing all the textures they could find &#8212; we&#8217;d
lovingly nicknamed them &#8220;hooligan bots&#8221; as they&#8217;d successfully managed
to demolish a number of our opensim test instances and reduced them to
nothing more than a pile of broken bits and bytes.</p>

<p>after fixing another memory gobbling piece of code and some tetchy ODE
physics engine part, we&#8217;d gone past the 20 mark that had meant the end
of our opensim instance in the past couple of trials and the numbers
kept on climbing. during the test we had to create more and more test
accounts to be able to keep sending in the bots. the system behaved
extraordinarily stable: not only were we able to keep moving around
and not only did opensim keep chugging along but also our scripts
(themselves not exactly shy when it comes to CPU cycles and memory)
did!</p>

<p>our test system, a 4 core intel system, running in 32-bit <a href="http://en.wikipedia.org/wiki/Physical_Address_Extension">PAE
mode</a> with
about 8GB of memory, coped rather well on the memory front: with about
5 regions (script heavy) we clocked at about 1.3 &#8212; 1.5 GB memory
usage &#8212; CPU load, however, was a different story: that went up like
crazy: up to 390% CPU utilization, load level of about 9&#8211;10. still,
the only effect was that things became a bit sluggish.<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup></p>

<p>note, this was a one off! a pleasant and encouraging one off but
nevertheless so far just a one off. we need to carry out further
testing to corroborate this.</p>

<p>still, 81 avatars in one region!</p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:1">
<p>always wanted to start a blog like that. and there <em>was</em> a
severe thunderstorm going on in our valley while we were doing the
test <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> &#160;<a href="#fnref:1" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:2">
<p>to be honest, at one point during the test, the lights did dim
quite a bit in my office&#8230;but with the test server being located in
chicago and my home office being in switzerland, i don&#8217;t think it was
due to our opensim server but rather due the thunderstorm that was
raging outside.&#160;<a href="#fnref:2" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2009/06/09/81/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<georss:point featurename="[47.131074826701266, 8.747992515563965]">47.131074826701266 8.747992515563965</georss:point>
	</item>
		<item>
		<title>OpenSim: sending inventory client side&#8230;and have the avatar take notice!</title>
		<link>http://xyzzyxyzzy.net/2009/06/04/opensim-sending-inventory-client-side/</link>
		<comments>http://xyzzyxyzzy.net/2009/06/04/opensim-sending-inventory-client-side/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 07:54:19 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
				<category><![CDATA[from the grid]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[inventory]]></category>
		<category><![CDATA[opensim]]></category>
		<category><![CDATA[SL client]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=295</guid>
		<description><![CDATA[recently i was in need of being able to send inventory items (well, a whole folder full of stuff) to the inventory of a logged-in avatar.

just copying the the inventory items to the avatar inventory (for example, using Scene.GiveInventoryItem() or Scene.GiveInventoryFolder()) will not cause your avatar to notice that there is additional junk in her [...]]]></description>
			<content:encoded><![CDATA[<p>recently i was in need of being able to send inventory items (well, a whole folder full of stuff) to the inventory of a logged-in avatar.</p>

<p>just copying the the inventory items to the avatar inventory (for example, using <code>Scene.GiveInventoryItem()</code> or <code>Scene.GiveInventoryFolder()</code>) will not cause your avatar to notice that there is additional junk in her inventory all of a sudden &#8212; once the avatar is logged out and logs in again, she will find the stuff in her inventory. kicking the avatar out every time you want to send some inventory her way is a tad bad on the user experience side<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>. clearly not something we want to do.</p>

<p>after trying a 101 ways of sending inventory to the avatar and none of them catching, i finally remembered that avatars can give inventory to one another, even whole folders!<sup id="fnref:3"><a href="#fn:3" rel="footnote">2</a></sup> taking my favorite tool to the OpenSim source tree<sup id="fnref:4"><a href="#fn:4" rel="footnote">3</a></sup> i found code in the <code>InventoryTransferModule</code> that seemed to take care of this process. the first attempt of just sending a <code>GridInstantMessage</code> via the usual means was not producing the right result: the avatar would get the pop-up that a folder was being given to her and would she like to keep it? looked good but checking the inventory revealed it to be a big blue lie.</p>

<p>here&#8217;s what i finally figured out. you need:</p>

<ul>
<li>a <code>ScenePresence</code> object representing the avatar</li>
<li>the <code>UUID</code> of the sending &#8220;avatar&#8221;</li>
<li>the name of the sending &#8220;avatar&#8221;</li>
<li>the <code>InventoryNodeBase</code> object (actually you would pass in a subclass such as <code>InventoryItemBase</code> or <code>InventoryFolderBase</code> or similar)</li>
</ul>

<p>here&#8217;s the &#8220;pseudo-code&#8221;:</p>

<pre><code>
// pseudo code: send inventory content to a logged in avatar's
// inventory 
//
// avatar: ScenePresence object
// src: struct containing &amp;quot;UUID&amp;quot; and &amp;quot;Name&amp;quot; of the source &amp;quot;avatar&amp;quot;

// get the CachedUserInfo object for the target avatar
CachedUserInfo cuiAvatar = 
    m_commsManager.UserProfileCacheService.GetUserDetails(avatar,UUID);
if (!cuiAvatar.HasReceivedInventory) cuiAvatar.FetchInventory();

// target folder is the Clothing folder (type 5)
InventoryFolderImpl dstFolder = cuiAvatar.FindFolderForType(5);

// copy source folder from src avatar to dstFolder
copyFolder = scene.GiveInventoryFolder(avatar.UUID, src.UUID, 
                                       dstFolder.ID);

// content is in the target folder, ping target avatar and let her
// know about it: we do this through a GridInstantMessage

// GridInstantMessage: prepare bucket byte array first byte is asset
// type, remaining bytes are the UUID of the InventoryItem
byte[] idBytes = item.ID.GetBytes();
byte[] bucket = new byte[1 + idBytes.Length];

if (item is InventoryFolderBase)
    bucket[0] = (byte)AssetType.Folder;
else if (item is InventoryItemBase)
    bucket[0] = (byte)(item as e).AssetType;

Array.Copy(idBytes, 0, bucket, 1, idBytes.Length);

GridInstantMessage im = 
    new GridInstantMessage(scene, src.UUID, src.Name, avatar.UUID,  
                           (byte)InstantMessageDialog.InventoryOffered,
                           false, item.Name, item.ID,
                           Vector3.Zero, bucket);

// send bulk update inventory message and GridInstantMessage
avatar.ControllingClient.SendBulkUpdateInventory(item);
avatar.ControllingClient.SendInstantMessage(im);
[/c-sharp]
</code></pre>

<div class="footnotes">
<hr />
<ol>

<li id="fn:1">
<p>though, i was reminded of windows&#8217;s tendency of asking you to reboot ever time you installed some piece of software&#8230;<sup id="fnref:2"><a href="#fn:2" rel="footnote">4</a></sup>&#160;<a href="#fnref:1" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:3">
<p>yes, i&#8217;m a bit dense sometimes&#8230;or&#8230;too focused! <img src='http://xyzzyxyzzy.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> &#160;<a href="#fnref:3" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:4">
<p>no, not <em>that</em> one. <em>emacs&#8217;s</em> <code>M-x grep-find</code>!&#160;<a href="#fnref:4" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:2">
<p>on second thoughts, that just proves the earlier point about this not being very user friendly&#8230;&#160;<a href="#fnref:2" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2009/06/04/opensim-sending-inventory-client-side/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<georss:point featurename="[47.131074826701266, 8.747992515563965]">47.131074826701266 8.747992515563965</georss:point>
	</item>
		<item>
		<title>using the regioninfo REST call</title>
		<link>http://xyzzyxyzzy.net/2009/05/11/using-the-regioninfo-rest-call/</link>
		<comments>http://xyzzyxyzzy.net/2009/05/11/using-the-regioninfo-rest-call/#comments</comments>
		<pubDate>Mon, 11 May 2009 09:08:38 +0000</pubDate>
		<dc:creator>DrScofield</dc:creator>
				<category><![CDATA[from the grid]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[opensim]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[regioninfo]]></category>
		<category><![CDATA[REST]]></category>

		<guid isPermaLink="false">http://xyzzyxyzzy.net/?p=287</guid>
		<description><![CDATA[a couple of weeks ago i added the regioninfo REST call to OpenSim. here is a little python script that shows you how to use it:


#!/usr/bin/python
# -*- encoding: utf-8 -*-

import sys
import urllib2
import xml.etree.ElementTree as ET

def RegionInfo(url):
    if not url.endswith('/'):
        url = '%s/' % url
  [...]]]></description>
			<content:encoded><![CDATA[<p>a couple of weeks ago i added the <code>regioninfo</code> REST call to OpenSim. here is a little python script that shows you how to use it:</p>

<pre><code><pre class="brush: python;">
#!/usr/bin/python
# -*- encoding: utf-8 -*-

import sys
import urllib2
import xml.etree.ElementTree as ET

def RegionInfo(url):
    if not url.endswith('/'):
        url = '%s/' % url
    regionInfoUri = '%sadmin/regioninfo/' % url
    print '== OpenSim server %s ==' % url

    riXml = ET.parse(urllib2.urlopen(regionInfoUri)).getroot()
    print 'regions (curr): %d' % int(riXml.attrib['number'])
    print 'regions (max):  %d' % int(riXml.attrib['max'])

    totalAvatars = 0
    totalObjects = 0

    for region in riXml:
        print '- region %-20s: avatars: %d' % (region.attrib['name'], int(region.attrib['avatars']))
        print '         %-20s  objects: %d' % (' ', int(region.attrib['objects']))

        totalAvatars += int(region.attrib['avatars'])
        totalObjects += int(region.attrib['objects'])

    print 'total avatars: %d' % totalAvatars
    print 'total objects: %d\n' % totalObjects


if __name__ == '__main__':
    for opensim in sys.argv[1:]:
        RegionInfo(opensim)
</pre>
</code></pre>

<p>invoke it like this:</p>

<pre><code>% osinfo http://opensim.zurich.ibm.com:9000
</code></pre>

<p>and you will get output similar to this:</p>

<pre><code>== OpenSim server http://opensim.zurich.ibm.com:9000/ ==
regions (curr): 6
regions (max):  10
- region ST3D theatre        : avatars: 0
                               objects: 494
- region ST3D collaboration  : avatars: 0
                               objects: 283
- region ST3D boardroom      : avatars: 0
                               objects: 243
- region Zurich ISL          : avatars: 0
                               objects: 0
- region IBM ACVWS 2009      : avatars: 0
                               objects: 283
- region Sametime 3D         : avatars: 0
                               objects: 16
total avatars: 0
total objects: 1319
</code></pre>

<p>quite useful.</p>
]]></content:encoded>
			<wfw:commentRss>http://xyzzyxyzzy.net/2009/05/11/using-the-regioninfo-rest-call/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point featurename="[47.308883299155255, 8.544209003448486]">47.308883299155255 8.544209003448486</georss:point>
	</item>
	</channel>
</rss>
