<?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/"
	>

<channel>
	<title>Metaverse Ink Blog &#187; Metaverse Ink Blog &#187; </title>
	<atom:link href="http://www.metaverseink.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.metaverseink.com/blog</link>
	<description>Virtual Worlds and Beyond</description>
	<lastBuildDate>Mon, 20 Apr 2020 19:52:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.32</generator>
	<item>
		<title>Content protection: an incomplete proposal</title>
		<link>http://www.metaverseink.com/blog/hypergrid/content-protection-an-incomplete-proposal/</link>
		<comments>http://www.metaverseink.com/blog/hypergrid/content-protection-an-incomplete-proposal/#comments</comments>
		<pubDate>Sun, 19 Apr 2020 18:44:01 +0000</pubDate>
		<dc:creator><![CDATA[Diva Canto]]></dc:creator>
				<category><![CDATA[Hypergrid]]></category>
		<category><![CDATA[OpenSim]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.metaverseink.com/blog/?p=654</guid>
		<description><![CDATA[This post comes on the heels of a conversation Ubit and I had about protecting content on the Hypergrid. As all of you know, content protection, in general, is a big problem, and not just for the Hypergrid. Even for closed grids that can enforce permissions, content theft happens via modified viewers: a sufficiently skilled developer [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>This post comes on the heels of a conversation Ubit and I had about protecting content on the Hypergrid. As all of you know, content protection, in general, is a big problem, and not just for the Hypergrid. Even for closed grids that can enforce permissions, content theft happens via modified viewers: a sufficiently skilled developer can grab the source code of any of the legit viewers and add modifications to it that allows them to copy all the content they see, and alter their permissions on the copies. The Hypergrid opens up yet another avenue for abuse: when an avatar travels to another grid, their appearance and the inventory items on their Suitcase folder become available to the destination grid. If the owner of that destination grid is a decent developer but a bad actor, they can add modules to OpenSim that grab copies of those items and change their permissions on the database.</p>
<p>Some time back, Melanie added a new flag to items, the &#8220;Export&#8221; flag, which some viewers started to support. The Export flag allows creators of content to mark them as exportable or not exportable &#8212; meaning ok to export to other grids or not. That gives some level of flexibility to content creators, but it doesn&#8217;t solve the problem. If an item is marked &#8220;No copy&#8221; but &#8220;Exportable&#8221;, a bad grid operator can easily change the permissions on it. So, at the moment, our recommendation to viewer developers is that they only allow to mark the &#8220;Export&#8221; flag when the item is fully &#8220;free&#8221;: no constraints on copy, transfers, and modifications. This is so people don&#8217;t get a wrong sense of security.</p>
<p>I should note that there are no reports of Hypergrid thefts, even though they are technically possible. As far as I know, most copy-botted content comes from using altered viewers on closed, non-HG grids; those loots are then imported into other OpenSim-based grids via those viewers too. So altered viewers, not HG thefts, are the main problem. Nevertheless, the fact that the HG opens additional doors for abuse has been a deterrent for commerce on the Hypergrid, so much so that we recommend &#8220;Export&#8221; only for freebies. It would be nice to change that perception. The incomplete proposal I have here solves the problem not just for the Hypergrid but also for viewer-based thefts in closed grids, even if those grids don&#8217;t ever want to connect to the Hypergrid. It solves the problem so thoroughly that, if implemented, it would allow commerce on the Hypergrid to bloom. The problem is in the implementation; hence, the &#8220;incomplete&#8221; in the title of this post&#8230;</p>
<p>The proposal, in a nutshell: ledgers.<br />
Specifically for the Hypergrid: distributed, decentralized ledgers. Yes, blockchain, but minus the coin.</p>
<h2>How it works, birds-eye view</h2>
<p>Let&#8217;s ignore implementation details for a moment. I&#8217;ll cover them at the end.</p>
<p>Here is the main idea of a ledger: every time an item changes hands (from one avatar to another) a record about the transaction should be entered on a database. The information should include: the item ID, the time of original creation of the item, the timestamp of the transaction, the owner ID, the receiver ID, and the item&#8217;s permissions at the time of the transaction. Ledgers are append-only databases: they hold the historical record of all transactions since the beginning of time. (A side note to mention that OpenSim already has append-only databases: the assets.) So if any item&#8217;s origin is ever in question, the ledger can be queried for the ground truth.</p>
<p>Next, I will go through various theft scenarios, and explain how the ledger gives honest grid operators the technical justification for punitive action against thieves, and how it it will help identify (and, hopefully, socially isolate) dishonest grid operators.</p>
<h2>Detecting theft within a closed grid</h2>
<p>Let&#8217;s ignore the HG for a moment, and focus on centralized ledgers.</p>
<p>Let&#8217;s consider the viewer-based theft scenario in closed grids: some bad actor logs in with an altered viewer and copies all content that it sees into this bad actor&#8217;s inventory, changing permissions, and even authorship, along the way. This bad actor goes on to sell this content as their own on that same grid. Nothing in this proposal prevents this from happening. However, if and when the original creator detects this shenanigan, they can file a complain with the grid, who now is armed with the ledger, the historical record of all transactions. A simple query on the ledger can find out when the items in question were first transactioned; the offender&#8217;s item&#8217;s timestamp will be later than the original creator&#8217;s item&#8217;s timestamp. If the items are, indeed, similar, as per the original creator&#8217;s complaint, then the timestamps, and the lack of a transaction chain between the items, are proof that there was a theft, and who the offender was. The grid owner can act swiftly.</p>
<h2>Detecting theft across grids</h2>
<p>Let&#8217;s continue to ignore HG for a little longer.</p>
<p>Let&#8217;s consider the same viewer-based theft scenario, but now the bad actor imports the stolen content from closed grid X into another closed grid Y via the altered viewer. Assume both grids have their own separate ledgers, and both grid operators are honest. Again, this proposal doesn&#8217;t prevent theft from happening. It&#8217;s only when suspicion of theft is raised that the matter can be investigated.</p>
<p>In this scenario, suppose the bad actor with the altered viewer imports the stolen content into grid Y as their own. Grid Y will store the item as if it was legitimately created by this person at time T1, when it was imported there. It knows nothing about its true origin. Some time later, there is a complain from the original creator who first created this item in grid X at time T0 &lt; T1. Both grids can easily investigate by agreeing that the items are, indeed, very similar, and by checking their own ledgers independently. If they find that T0 &lt; T1, then it&#8217;s clear theft was at play, and who the thief was. They can act.</p>
<h2>Detecting theft between a closed grid and OSGrid</h2>
<p>Continuing to ignore HG, let&#8217;s focus on hybrids like OSG: in OSG-like grids, many independent people control their regions, but they are all connected to central grid services operated by osgrid.org, specifically inventory; this ledger would be another grid-wide service. Assume the region operators may be bad actors, but that the grid services operators are honest.</p>
<p>In this scenario, a bad actor, armed with an altered viewer, logs in to a closed commercial grid, steals content via the viewer, and then imports it to OSG using their own region, where they not only have God-like powers but can also alter the simulator code. They have a lot more opportunities to tamper with the timestamps of creation, ownership, etc. But that doesn&#8217;t matter much, as long as inventory and ledger are centralized services of the grid, and are capable of correcting any region-sent information. When suspicion of theft is raised, both grids can check their ledgers for timestamps.</p>
<h2>Managing transactions across the Hypergrid</h2>
<p>Having separate ledgers is fine for grids that trust each other, but in the Hypergrid, some grid operators may be bad actors themselves, and they control their grid&#8217;s ledgers. If they steal something, they can then enter those items on their own databases as having been created in a date that is sufficiently in the past to escape proof of theft, or, even worse, to harass the original content creators! &#8220;I created this before you did!&#8221; That&#8217;s bad.</p>
<p>For this to work on the Hypergrid, we need to establish a distributed, decentralized ledger system, blockchain style. Here is how it works.</p>
<p>Every time an item changes hands (from one avatar to another) a record about the transaction should be entered onto the distributed ledger. The distributed ledger is a kind of replicated database over a peer-to-peer network, but where peers can independently verify the veracity of the information that is sent to them &#8212; sometimes directly and sometimes via some voting algorithm. If we trust the information on the distributed, replicated ledger, rather than on any single node, then we can always verify whether something was stolen or not across grids that are part of the network.</p>
<p>The weak link of decentralized ledgers is false information. How can we prevent false information from entering the ledger? Here are a couple of scenarios of false information:</p>
<ul>
<li><strong>Problem</strong>: a bad grid operator creates a false record of a transaction between a visiting avatar and a local avatar. That is, they send to the ledger &#8220;HG visitor A gave a copy of item H to local avatar B at time T1&#8243; when that transaction never happened.<br />
<strong>Solution</strong>: any transactions between avatars should always take place on the grid of origin of the avatar that gives the item. In other words, visitors can get things, but should not give things. All transactions should be local to the originator avatar. This can easily be checked at ledger-entry time by verifying that the issuer grid is the grid of the originator avatar. If it isn&#8217;t, nodes of the distributed ledger won&#8217;t accept the transaction.<br />
(We can implement non-local transactions, too, but that will complicate the giving procedure substantially, as it will require confirmation from the originator when it comes back to their grid)</li>
<li><strong>Problem</strong>: a bad grid operator changes the items&#8217; creation time to the past. For example, they import stolen content with an altered viewer, and then they send the following record to the ledger &#8220;Item H was created in 12/12/2012.&#8221;<br />
<strong>Solution</strong>: ledger nodes need to verify that the timestamps of a creation record are credible.</li>
</ul>
<h2>Implementation Issues: Where Things May Come to a Halt</h2>
<p>While the general idea will definitely be the best solution for protecting content, implementing it in practice for the Hypergrid is not a trivial matter.</p>
<p>Ledgers are append-only databases; their size can grow very large. This is a common problem of all blockchain solutions. For example, the Bitcoin ledger <a href="https://www.blockchain.com/charts/blocks-size" target="_blank">currently 275G</a>, and it will continue to increase forever. In our case, we could either do some garbage collection when items are removed from inventory, or we could do what blockchain operators do: archive old records into separate, slower, databases. But these solutions aren&#8217;t very good for the Hypergrid, where a large number of single person grids exist, many of them running in people&#8217;s home networks. Those small shops would end up having to deal with a very large database, most of which is irrelevant to them; they would get it just because they would be part of this ledger network.</p>
<p>We can estimate how large a distributed ledger for the HG would be, and how fast it would grow based on the current estimates of people&#8217;s inventories. One thing that will definitely contribute to the large size of the ledger is if we enter every inventory item on the ledger: if anything created in inventory, whether it will be passed around or not, is entered into the ledger, the ledger will become unsustainably large very quickly. For reference, there are hundreds of millions of entries in OSGrid&#8217;s inventory service, and probably billions of items have been created there. Multiply that by 1000 grids. This would quickly grow to be a terabyte-size database.</p>
<p>We could focus only on the items that are transferred from one avatar to another, and use the timestamp of the first transaction as a proxy for time of creation. This approximation will fail to detect thefts if the item is stolen before the first transaction happens, and then the thief quickly makes a first transaction themselves. This should be rare, and people could be aware and compensate for it. It will definitely decrease the size of the ledger by several orders of magnitude, as the vast majority of items in people&#8217;s inventories aren&#8217;t passed to another avatar.</p>
<p>Still, even with optimizations, the ledger will be large, and this will be a problem for small standalone grids.</p>
<p>Perhaps the right thing to do is to decouple the ledger from the grids. We can implement a distributed ledger system that is operated by a few trusted people in the community, with access to enough resources, and that ledger can hold the transactions of everyone who wants to ensure the use of legitimate content in their grids. Any grid not on this ledger will be suspicious; social pressure will make them look bad.</p>
<p>Of course, nothing prevents a single entity from creating a centralized ledger for many independent grids, as a service. That will require complete trust in the ledger operator.</p>
<p>Anyway, I hope this post will trigger some discussion and maybe even some action, as it is clear that without a mechanism for content protection, commerce on the Hypergrid will never take off, and the nice professionally-created items will not be available to those with good intentions, such as Universities.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metaverseink.com/blog/hypergrid/content-protection-an-incomplete-proposal/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>OnLook: Server-Side Configuration</title>
		<link>http://www.metaverseink.com/blog/opensim/onlook-server-side-configuration/</link>
		<comments>http://www.metaverseink.com/blog/opensim/onlook-server-side-configuration/#comments</comments>
		<pubDate>Sun, 06 Dec 2015 19:42:01 +0000</pubDate>
		<dc:creator><![CDATA[Diva Canto]]></dc:creator>
				<category><![CDATA[OpenSim]]></category>
		<category><![CDATA[Viewer]]></category>

		<guid isPermaLink="false">http://www.metaverseink.com/blog/?p=639</guid>
		<description><![CDATA[As promised at OSCC&#8217;15, here is a post explaining how to configure OpenSim in order to experiment with the OnLook viewer. OnLook experiments with two orthogonal UX features: (1) the user&#8217;s representation inworld; and (2) the GUI. I&#8217;ll talk about them separately. Camera-Only Mode Description: The camera-only mode, as the name suggests, presents a view of [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><img class="alignnone" src="http://metaverseink.com/blog/wp-content/uploads/2014/11/onlook_icon.png" alt="" width="256" height="256" /></p>
<p>As promised at <a href="http://conference.opensimulator.org/2015">OSCC&#8217;15</a>, here is a post explaining how to configure OpenSim in order to experiment with the <a href="http://www.metaverseink.com/blog/opensim/onlook-viewer">OnLook viewer</a>.</p>
<p><span id="more-639"></span>OnLook experiments with two orthogonal UX features: (1) the user&#8217;s representation inworld; and (2) the GUI. I&#8217;ll talk about them separately.</p>
<h2>Camera-Only Mode</h2>
<p><strong>Description</strong>: The camera-only mode, as the name suggests, presents a view of the virtual environment without the user&#8217;s self-avatar. In other words, it&#8217;s a just a camera into the world. You can move the camera using the arrow keys, more or less like you would move the avatar. In reality, the user avatar is in the world, and others will see it; but it&#8217;s just standing there, without moving, and the person operating that avatar won&#8217;t see him/herself. (This could potentially be expanded to also remove other avatars except, perhaps, NPCs, but I haven&#8217;t done that yet)</p>
<p><strong>Implementation</strong>: The server-side implementation of this mode is under OpenSim/Region/OptionalModules/ViewerSupport/CameraOnlyModeModule.cs</p>
<p><strong>Configuration</strong>: Add this somewhere in your ini files:</p>
<pre>[CameraOnlyModeModule]
     enabled = true
     ;; Users with UserLevel equal or less than this will be sent this mode.
     ;; Others above will not. 
     UserLevel = 0</pre>
<h2>Special UI Module</h2>
<p><strong>Description</strong>: The special UI module allows us to control the buttons shown on the bottom of the viewer. It also hides the top menu bar.</p>
<p><strong>Implementation</strong>: the server-side implementation of this mode is under OpenSim/Region/OptionalModules/ViewerSupport/SpecialUIModule.cs</p>
<p><strong>Configuration</strong>: There are two parts to the configuration. First you need to define the buttons you want to show in an XML file that is sent to the viewer when the user connects to your sim, then you need to turn the mode on.</p>
<p>I have an XML file that you can use as a starting point: get it from <a href="https://github.com/diva/OnLook/tree/OnLook/opensim/bin/ViewerSupport" target="_blank">here</a> and place it under your OpenSim bin/ViewerSupport. You can then do your own research and experimentation, comparing that file with the <a href="https://github.com/diva/OnLook/blob/OnLook/indra/newview/skins/default/xui/en-us/panel_toolbar.xml" target="_blank">default one</a>, for purposes of defining what buttons you want to show to, and hide from, your users.</p>
<p>To turn this on, add this somewhere in your ini files:</p>
<pre>[SpecialUIModule]
    enabled = true
    ;; Users with UserLevel equal or less than this will be sent this mode.
    ;; Others above will not. 
    UserLevel = 0</pre>
<h2>Final Remarks</h2>
<p>I want to stress that the purpose of this is NOT to design any one alternative UX/UI, so please don&#8217;t comment on the set of buttons that I chose to hide in the example XML file for the bottom panel. That&#8217;s besides the point. The point here is that YOU, as operator of an OpenSim environment, can decide which buttons to show and which buttons hide when users visit your world. And people will get different UX/UI as they visit different worlds.</p>
<p>Finally, OnLook is not a separate viewer project; it&#8217;s a proof-concept on configurable UX/UI using Singularity. It served to guide me through the study of how easy/hard it will be to do it for real with any existing SL-derived viewer.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metaverseink.com/blog/opensim/onlook-server-side-configuration/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Policies for Patching OpenSimulator</title>
		<link>http://www.metaverseink.com/blog/opensim/policies-for-patching-opensimulator/</link>
		<comments>http://www.metaverseink.com/blog/opensim/policies-for-patching-opensimulator/#comments</comments>
		<pubDate>Fri, 21 Aug 2015 20:06:07 +0000</pubDate>
		<dc:creator><![CDATA[Diva Canto]]></dc:creator>
				<category><![CDATA[OpenSim]]></category>

		<guid isPermaLink="false">http://www.metaverseink.com/blog/?p=600</guid>
		<description><![CDATA[This post explains the policies used in the OpenSimulator project regarding acceptance/rejection of patches. It starts with a few pointers to the existing documentation, then it explains the major criteria for acceptance/rejection, and it ends with a few pointers to examples of recently accepted and rejected patches. Existing Documentation Coding standards. Summary: it&#8217;s the C# coding standards plus a [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>This post explains the policies used in the OpenSimulator project regarding acceptance/rejection of patches. It starts with a few pointers to the existing documentation, then it explains the major criteria for acceptance/rejection, and it ends with a few pointers to examples of recently accepted and rejected patches.</p>
<p><span id="more-600"></span></p>
<h2>Existing Documentation</h2>
<ul>
<li><a href="http://opensimulator.org/wiki/Coding_standards">Coding standards</a>.<br />
Summary: it&#8217;s the C# coding standards plus a couple of extra rules</li>
<li><a href="http://opensimulator.org/wiki/Codebase_overview">Code base overview</a>. (credit: Justin)<br />
A lot more could be said, but documenting the framework properly is a huge amount of work. More below.</li>
<li><a href="http://opensimulator.org/wiki/Submitting_code_to_OpenSim">Submitting patches</a>.<br />
Summary: <strong>small is beautiful</strong>. I highlight the following paragraph:<br />
&#8220;<em>Please put only one logical change in a patch at a time. Patches that contain more than one logical change tend to be larger, more complex and hence take more time to be applied. At worse, developers will tend not to look at them because it&#8217;s hard to disentangle all the possible effects. Multiple logical changes can be in a patch if they only affect a single feature (like, for example, the feature the patch enables).</em>&#8220;</li>
</ul>
<h2>Major Acceptance/Rejection Criteria</h2>
<p>The pointers above give the easy reasons for why patches may be rejected. For example, patches that don&#8217;t follow the C# coding conventions or that are trying to do many things at the same time will likely be either ignored, rejected or pushed back to the contributors with requests for improvements. But these are easy-to-spot problems. There are other problems that aren&#8217;t so easy to spot, but that are even more important: whether or not a patch follows the<strong> architectural principles of the project</strong>.</p>
<p>This may be a foreign concept to to many, so here is an introduction to <a href="https://en.wikipedia.org/wiki/Software_architecture">software architecture</a>. There are many definitions for what software architecture is. I like <a href="http://www.ics.uci.edu/~taylor/">Dick Taylor</a>&#8216;s <a href="http://www.amazon.com/Software-Architecture-Foundations-Theory-Practice/dp/0470167742">definition</a>:</p>
<p>&#8220;<em>A system&#8217;s architecture is the set of <strong>principal design decisions</strong> made during its development and any subsequent evolution</em>&#8221;</p>
<p>Given this definition, software architecture is usually implicit in the code and present only in the minds of the developers, unless an explicit effort is made to externalize it, which is very rare in open source projects. That&#8217;s why it&#8217;s so critical that <strong>people who want to make non-trivial contributions to open source projects like OpenSimulator join the developers in their day-to-day conversations</strong> in order understand the dynamics of design decisions. Alternatively, they may develop a working relationship with one or more developers. In the case of OpenSimulator, most of the action happens in the IRC (irc.freenode.net #opensim-dev); all core developers are there most of the time.</p>
<p>Before explaining the high-level design decisions of OpenSimulator, let me continue to be academic for a moment and point to a wonderful effort made by a <a href="http://www.st.ewi.tudelft.nl/~arie/">colleague in Delft</a> with the goal of (1) teaching students about software architecture and (2) contribute to open source projects in the process. Please follow this link (it will open in another tab):</p>
<p><strong><a href="http://delftswa.github.io/" target="_blank">Delft Students On Software Architecture 2015</a></strong></p>
<p>As you can see, it took teams of 3-4 students 10 weeks in order to document each of the projects. I won&#8217;t do it in one post. But I can explain the very high-level architectural themes of OpenSimulator:</p>
<ul>
<li><strong>The core developers are the major stakeholders</strong>. Each one of us has high stakes in the code base. We are not the only stakeholders, obviously, there are many more. The large community of users also has a stake in the project; but they don&#8217;t have as much power as the core developers or even as the non-core developers. In OpenSimulator, people who contribute code have more power over its evolution than those who don&#8217;t. See for example the <a href="http://delftswa.github.io/chapters/jekyll/index.html#powerinterest-grid" target="_blank">Power/Interest grid of Jekyll</a>; OpenSimulator has a similar grid.</li>
<li><strong>The project is a *<span style="color: #ff0000;">framework</span>* packaged together with a default application</strong>, SL-ish. It&#8217;s really important to understand what <a href="https://en.wikipedia.org/wiki/Software_framework">software frameworks</a> are, with their <em>hot</em> and <em>frozen</em> spots. Two consequences come from OpenSimulator being a framework, rather than a regular application:
<ul>
<li>Patches that touch <strong><em>frozen spots</em></strong> unnecessarily are likely to be rejected. <strong>OpenSim.Region.Framework</strong>, <strong>OpenSim.Framework.Servers</strong>,<strong> OpenSim.Server</strong>, <strong>OpenSim.Services.Interfaces</strong>, <strong>OpenSim.ApplicationPlugins.RegionModulesController</strong> and <strong>OpenSim</strong> itself are the major <em>frozen </em>spots. Everything else is a <em>hot</em> spot.</li>
<li>We encourage the encapsulation of new features in region modules (the plugins of the simulator), which extend/replace <em>hot spots.</em> If that implementation proves difficult, we&#8217;d like to know why it is difficult; we&#8217;ll gladly change the APIs when they prove to be getting in the way of doing things, but it requires discussion.</li>
</ul>
</li>
<li><strong>We may or may not take in <em>new plugins</em> into the core distribution, depending on how important we think they are for the stakeholders.</strong> When we don&#8217;t take them in, we encourage their developers to maintain them and make them available to everyone, either by hosting the code in some open source repository or by distributing binary versions of their plugin.</li>
<li><strong>The <em>existing plugins</em> in the core distribution reflect a certain level of performance, operations and security that the core developers deem acceptable wrt usability and vulnerabilities</strong>. Alternatives to these implementations may change levels of performance and security (up or down), and sometimes those changes have tradeoffs in terms of usability and vulnerability. We may or may not accept those new tradeoffs in core. Patches that increase performance and security without any changes to usability and no additional vulnerabilities are usually very welcome and accepted immediately. Patches that move the levels of usability and exposure to vulnerabilities need a serious assessment. If we deem them unacceptable, we continue to encourage the developers to maintain their own implementations and even make them available to others; we just don&#8217;t want to have them in the core distribution.</li>
<li><strong>We encourage the community to develop and maintain their own plugins. </strong>Several core developers have their own alternative implementations of many of the core plugins in their own usage of OpenSimulator, as well as lots of additional features developed as plugins. That&#8217;s the whole point of having a framework. The core distribution reflects a certain balance in a large spectrum of implementation options that we believe benefit a large portion of the stakeholders, but possibly not all.</li>
</ul>
<h2>Examples of Accepted and Rejected Patches</h2>
<p>Here are some examples of patches that have been recently accepted and rejected. For each, I give a brief reason for the decision:</p>
<ul>
<li><a href="http://opensimulator.org/mantis/view.php?id=7254">7254</a>. <strong>Status</strong>: <span style="color: #008000;">accepted</span>. Reason: very small patch, harmless change to existing Robust plugin.</li>
<li><a href="http://opensimulator.org/mantis/view.php?id=7673">7673</a>. <strong>Status</strong>: <span style="color: #008000;">accepted</span>. Reason: small bug fix patch to frozen spot, confirmation of resolution by users.</li>
<li><a href="http://opensimulator.org/mantis/view.php?id=7682">7682</a>. <strong>Status</strong>: <span style="color: #008000;">accepted</span>. Reason: very small patch, harmless bug fix to Linden client plugin.</li>
<li><a href="http://opensimulator.org/mantis/view.php?id=7345">7345</a>: <strong>Status</strong>: <span style="color: #008000;">accepted after discussion</span>. Reason: very small patch for fixing annoying bug in AttachmentsModule plugin. Issue of discussion: hard-coded sleeps and placement of the code.</li>
<li><a href="http://opensimulator.org/mantis/view.php?id=7676">7676</a>. <strong>Status</strong>: <span style="color: #ff0000;">rejected</span>.  Reason: very small patch, but with unacceptable downtime for existing grids.</li>
<li><a href="http://opensimulator.org/mantis/view.php?id=7677">7677</a>. <strong>Status</strong>: <span style="color: #ff0000;">rejected</span>. Reason: very small patch, but with unacceptable change in security of one of the Hypergrid plugins vs. usability.</li>
<li>7653. <strong>Status</strong>: <span style="color: #ff0000;">rejected as is</span>, waiting for improvement. Reason: very large patch trying to do too many things at the same time, and with unnecessary intrusion in frozen spots of the framework. Part of it should be rewritten as a plugin, other parts could also be rewritten as a (different) plugin.</li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metaverseink.com/blog/opensim/policies-for-patching-opensimulator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wifi and Other Diva Addons</title>
		<link>http://www.metaverseink.com/blog/diva-addons/wifi-and-other-diva-addons/</link>
		<comments>http://www.metaverseink.com/blog/diva-addons/wifi-and-other-diva-addons/#comments</comments>
		<pubDate>Sun, 05 Apr 2015 00:08:39 +0000</pubDate>
		<dc:creator><![CDATA[Diva Canto]]></dc:creator>
				<category><![CDATA[diva addons]]></category>
		<category><![CDATA[diva distro]]></category>

		<guid isPermaLink="false">http://metaverseink.com/blog/?p=592</guid>
		<description><![CDATA[Hello everyone! OpenSim 0.8.1 brings a few minor bug fixes to core OpenSim and a significant change to how the web app Wifi is deployed in grids (no changes for D2 standalones). In general, this release introduces a mechanism for me and others to provide 3rd-party addons via mono addins, a mechanism that has been in OpenSim for a very [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Hello everyone! OpenSim 0.8.1 brings a <a href="http://opensimulator.org/wiki/0.8.0.1_Release">few minor bug fixes to core OpenSim</a> and a significant change to how the web app Wifi is deployed <strong>in grids</strong> (no changes for D2 standalones). In general, this release introduces a mechanism for me and others to provide 3rd-party addons via <a href="http://www.mono-project.com/archived/introduction_to_monoaddins/">mono addins</a>, a mechanism that has been in OpenSim for a very long time, but that was severely underutilized. Let me explain how to deploy Wifi in your grid from here on, and then I&#8217;ll explain how to install additional Diva addons in either grids or standalones.</p>
<p>NOTE: mono addins works in both .NET and mono. If you run Wifi in Windows you do not need to install mono in order to run mono addins. Everything you need is already included in the OpenSim distribution.</p>
<p><span id="more-592"></span></p>
<h2>Wifi for Grids</h2>
<p>Let me recap how Wifi has been deployed in grids up to now. Again, operators of D2 standalones don&#8217;t need to know any of this, since Wifi comes pre-installed in D2.</p>
<p>Up to now, every time I made a new D2 release, I also made a special package (a zip file) with just the Wifi DLLs (see <a href="http://metaverseink.com/Downloads.html">here</a>). Some people in the community have written <a href="http://opensimulator.org/wiki/Wifi">detailed instructions</a> on what to do with these DLLs, which boils down to copying files manually to certain folders and then adding a few configuration sections to the Robust configuration file. (Wifi for grids runs in a Robust server)</p>
<p>From here on, I will stop producing this extra zip file. Instead, I am producing a mono addin package (which happens to also be a zip file, but with more information inside), and I&#8217;m making it available from the metaversink mono addins repository listed <a href="http://metaverseink.com/repo/">here</a>. Installation and future updates are done via the generic mono addins mechanism, not by copying files by hand.</p>
<p>So here are the detailed instructions for how to install Wifi in your grid when updating from OpenSim 0.8.0 to OpenSim 0.8.1. <strong>Note: If you are making a new install from scratch, skip to step 6.</strong></p>
<ol>
<li>Make a backup of your WifiPages folder to somewhere safe, especially if you customized some of them. Likely you won&#8217;t need this backup, but better safe than sorry.</li>
<li>Update your robust installation to 0.8.1</li>
<li>Make sure to incorporate any OpenSim configuration changes in your Robust configuration file</li>
<li>(<em>From here on, all console commands are supposed to be given from the opensim bin folder</em>)</li>
<li>Edit your Robust configuration file and remove the DivaWifi server connector. Depending on how old your config file is, this may be at the end of a very long string called ServiceConnectors under [Startup] or in a variable under [ServiceList]. Wherever it is, remove it, because Wifi now will run as a mono addin.</li>
<li>Still in your Robust configuration file, go to the [Startup] section. Set the RegistryLocation and the ConfigDirectory to folders outside of the bin folder. For example:
<pre> [Startup]
    RegistryLocation = "../../addins-registry"
    ConfigDirectory = "../../addins-config"</pre>
<p>Alternatively, you can give absolute paths, for example:</p>
<pre> [Startup]
    RegistryLocation = "/home/opensim/addins-registry"
    ConfigDirectory = "/home/opensim/addins-config"</pre>
</li>
<li>Still in your Robust config file, go to the [DatabaseService] section. If you had
<pre>StorageProvider = "<strong>Diva</strong>.Data.MySQL.dll"</pre>
<p>switch it back to the default</p>
<pre>StorageProvider = "<strong>OpenSim</strong>.Data.MySQL.dll"</pre>
<p>Don&#8217;t worry, Diva Wifi will use the right one, but the rest of your Robust will use the default.<br />
Save and close your Robust configuration file.</li>
<li>Populate the mono addins registry with all the OpenSim core addins:
<pre> $ [mono] mautil.exe -reg /path/to/registry reg-update</pre>
<p>where /path/to/registry is the RegistryLocation you set in the configuration file, so for example ../../addins-registry or /home/opensim/addins-registry. <strong>IT&#8217;S VERY IMPORTANT THAT THIS PATH IS EXACTLY THE SAME AS THE ONE YOU WROTE IN YOUR CONFIG FILE FOR RegistryLocation.</strong></li>
<li>Add the metaversink addins repo as one of your sources of addins, and update its contents locally:
<pre>$ [mono] mautil.exe -reg /path/to/registry rep-add http://metaverseink.com/repo
$ [mono] mautil.exe -reg /path/to/registry rep-update</pre>
</li>
<li>You can now see the list of all the available addins:
<pre>$ [mono] mautil.exe -reg /path/to/registry list-av</pre>
</li>
<li>Install the Diva.Wifi addin:
<pre>$ [mono] mautil.exe -reg /path/to/registry install Diva.Wifi</pre>
</li>
</ol>
<p>Note that this command, as is, will install the latest version of  Diva.Wifi. This may or may not be what you need. Typically, several versions of it will be available from the Metaverseink repository (e.g. for OpenSim 0.8.1, 0.8.2, etc.), and you can see them all when you list what&#8217;s available (with the command in step 10). So, if your OpenSim installation is not the latest, you  need to install the particular version of Diva.Wifi that corresponds to your OpenSim version.</p>
<p>At this point, you can run your Robust server:</p>
<pre>$ [mono] Robust.exe -inifile <em>YourRobustConfig.ini</em></pre>
<p>As you will see, it will warn you that Wifi needs to be configured, something like this:</p>
<p>2015-04-04 14:53:54,273 ERROR &#8211; Diva.Wifi.WifiServerConnector [Wifi]: PLEASE EDIT ../../addins-config/Wifi.ini BEFORE RUNNING THIS SERVICE</p>
<p>If you don&#8217;t see this warning message, something is wrong, likely the path to registry is inconsistent. Recheck the previous steps starting in step 8.</p>
<p>What does this warning message mean? Up to now, the Wifi configuration section was included into your Robust configuration file; from here on, it is in a separate file. That file is placed under ConfigDirectory/Wifi.ini, where ConfigDirectory is whatever you set in your Robust config file (see point 5 above). So, for example, ../../addins-config/Wifi.ini or /home/opensim/addins-config/Wifi.ini.</p>
<p>So edit that file and set up everything appropriately as you had before (copy-paste from your old file will do it). The configuration variables themselves didn&#8217;t change. Only one was added: don&#8217;t forget to set <strong>Enabled = true</strong>.</p>
<p>Once you&#8217;re done, save the file and restart Robust. This time everything should work.</p>
<p><strong>IMPORTANT</strong>: from here on you can delete the [WifiService] section in your main Robust configuration file, because it will not be used anymore. Wifi configs will be read from /path/to/addins-config/Wifi.ini</p>
<h2>Updating Wifi in the Future</h2>
<p>I know changes of process are always a bit painful, and you may be wondering why I changed this. The reason is twofold: (1) much easier updates from here on; and (2) additional optional goodies coming up. Let me explain the updates.</p>
<p>When you follow the instructions above, your installation of Wifi will be relatively independent of your installation of OpenSim. The Wifi app itself is in /path/to/registry/addins/Diva.Wifi.0.8.1.0.3/ and its configuration file in /path/to/config/Wifi.ini.</p>
<p>The next time that I make a new release of Wifi, all you have to do is to update Wifi, something like this:</p>
<pre>$ [mono] mautil.exe -reg /path/to/registry rep-update 
$ [mono] mautil.exe -reg /path/to/registry list-update 
$ [mono] mautil.exe -reg /path/to/registry update Diva.Wifi</pre>
<p>Voila! No copying things by hand anywhere. I&#8217;ll make sure to repeat these instructions again next time I make a release of Wifi.</p>
<h2>Optional Diva Addons</h2>
<p>The second reason why I did this is to be able to provide additional functionality in a modular manner. Take another look at the available addins:</p>
<pre>$ [mono] mautil.exe -reg /path/to/registry list-av
Available add-ins:
 - Diva.AddinExample,0.8.1.0.1 (metaverseink.com)
 - Diva.AddinExample,0.8.1.0.2 (metaverseink.com)
 - Diva.Interfaces,0.8.1.0.1 (metaverseink.com)
 - Diva.MISearchModules,0.8.1.0.2 (metaverseink.com)
 - Diva.Modules,0.8.1.0.3 (metaverseink.com)
 - Diva.TOS,0.8.1.0.1 (metaverseink.com)
 - Diva.VirtualOffice,0.8.1.0.1 (metaverseink.com)
 - Diva.VirtualOffice,0.8.1.0.2 (metaverseink.com)
 - Diva.Wifi,0.8.1.0.2 (metaverseink.com)
 - Diva.Wifi,0.8.1.0.3 (metaverseink.com)
 - Diva.Wifi.GridManagement,0.8.1.0.1 (metaverseink.com)</pre>
<p>What is all this? These are all Diva addons &#8212; modular functionality that I have been working on for some of my grids &#8212; several versions of them. Some of these addons are for Wifi, others are for the simulators. Also, some of them are free, others require a license. Here is an explanation of what they all are:</p>
<ul>
<li><strong>Diva.AddinExample</strong> is just an example of how to write addins for OpenSim. It&#8217;s intended for OpenSim developers. An explanation can be found <a href="http://opensimulator.org/wiki/Developing_OpenSim_Addins">here</a>. It&#8217;s free, but you really don&#8217;t want to install it, it&#8217;s a dummy addon.</li>
<li><strong>Diva.Interfaces</strong> is a generic piece of code upon which many Diva addons depend. It doesn&#8217;t provide any functionality by itself. Its free, but it doesn&#8217;t do anything by itself.</li>
<li><strong>Diva.MISearchModules</strong> contains functionality that people may want to install on their simulators, so that their content and images are listed in the <a href="http://search.metaverseink.com/opensim/results.jsp?q=type%3Aregion&amp;submit=Search">MISearch engine</a>. It&#8217;s included in D2, and it&#8217;s free.</li>
<li><strong>Diva.TOS</strong> contains functionality to support a Terms of Service acceptance step when people login or HG-teleport to a grid. It pertains to simulators. The Wifi part is already included in the free Wifi app, and this addon is included in D2. This addon is also free.</li>
<li><strong>Diva.VirtualOffice</strong> contains a simulator-bound feature that supports the upload and display of PDF files inworld. It requires a license.</li>
<li><strong>Diva.Wifi</strong> is&#8230;Diva Wifi. Free.</li>
<li><strong>Diva.Wifi.GridManagement</strong> is an addon to Wifi that provides a much richer set of features for grid management, such as estate and group management; it requires a license.</li>
</ul>
<p>Up to now it was really painful to deploy this additional functionality on my grids, and pretty much impractical to make it available to others. This new mechanism makes it much simpler for me, and makes it possible for me to share it. Let me explain what you need to do if you want to install one of them, for example, Diva.MISearchModules.</p>
<ol>
<li>Go to your opensim installation &#8212; the simulators, not robust. Change to the bin folder.</li>
<li>If you have a D2 installation, you can skip this step. If you don&#8217;t have a D2 installation, edit your configuration file OpenSim.ini, go to the section [Startup]. Set the variables RegistryLocation and ConfigDirectory to outside the OpenSim installation, for example:
<pre>[Startup]
    RegistryLocation = "/home/opensim/addins-registry"
    ConfigDirectory = "/home/opensim/addins-config"</pre>
</li>
<li>If your simulators installation folder is the same as your robust installation, you can skip this step. Otherwise do this to get the metaverseink repo and cache its contents locally:
<pre>$ [mono] mautil.exe -reg /path/to/registry rep-add http://metaverseink.com/repo
$ [mono] mautil.exe -reg /path/to/registry rep-update</pre>
<p>where path/to/registry is whatever you set it in RegistryLocation in step 1. In D2s it is ../../addins-registry</li>
<li>Install the addon:
<pre>$ [mono] mautil.exe -reg /path/to/registry install Diva.MISearchModules</pre>
</li>
<li>Reboot your simulator(s). You will likely get warnings about having to configure these addons. Follow the instructions in the warnings, and reboot the simulators again.</li>
<li>README files, if any, are placed under /path/to/registry/addins/&lt;addin&gt;</li>
</ol>
<p>If you are interested in any of the non-free addons, let me know.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metaverseink.com/blog/diva-addons/wifi-and-other-diva-addons/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>OnLook Viewer</title>
		<link>http://www.metaverseink.com/blog/opensim/onlook-viewer/</link>
		<comments>http://www.metaverseink.com/blog/opensim/onlook-viewer/#comments</comments>
		<pubDate>Fri, 14 Nov 2014 00:16:45 +0000</pubDate>
		<dc:creator><![CDATA[Diva Canto]]></dc:creator>
				<category><![CDATA[OpenSim]]></category>
		<category><![CDATA[Viewer]]></category>

		<guid isPermaLink="false">http://metaverseink.com/blog/?p=566</guid>
		<description><![CDATA[As I&#8217;ve announced at OSCC&#8217;14, I am working with Liru on a Singularity-based viewer whose main goal is to make the viewer&#8217;s UI as programmable as possible server-side. You know, more like Web browsers. The idea here is to allow OpenSim operators to have more control over the experience that their users will have; specifically, I want to [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a href="http://metaverseink.com/blog/wp-content/uploads/2014/11/onlook_icon.png"><img class="alignleft size-full wp-image-569" src="http://metaverseink.com/blog/wp-content/uploads/2014/11/onlook_icon.png" alt="onlook_icon" width="256" height="256" /></a></p>
<p>As I&#8217;ve announced at OSCC&#8217;14, I am working with Liru on a Singularity-based viewer whose main goal is to make the viewer&#8217;s UI as programmable as possible <strong>server-side</strong>. You know, more like Web browsers.</p>
<p>The idea here is to allow OpenSim operators to have more control over the experience that their users will have; specifically, I want to be able to design much simpler user interfaces that are more appropriate for people who have no experience with Second Life and/or may be even uncomfortable with seeing themselves as avatars. But more importantly that any specific UI, I want to be able to provide those UI specifications dynamically as the user enters the simulator, rather than being hard-coded during the viewer&#8217;s build process. This way, we can change the UI without forcing users to install new versions of the viewer. And no one needs to agree on any specific UI.</p>
<p>I&#8217;m happy to announce that the very first alpha release of OnLook is now available for testing! Without the server-side UI specs, OnLook behaves exactly like Singularity, so you won&#8217;t see any difference when you login to your world. In order to help people test it, I have deployed a small test world that can be accessed via the Hypergrid. So here is a description of the steps that you can do to test this, along with pictures of what you&#8217;ll see.</p>
<p><span id="more-566"></span></p>
<h2>Step 1. Install OnLook</h2>
<p>Here is the <a href="http://www.metaverseink.com/cgi-bin/link_counter.php?url=http://metaverseink.com/download/OnLook_1-8-6-6289_Setup.exe">link </a>to the installer in Windows and the <a href="http://www.metaverseink.com/cgi-bin/link_counter.php?url=http://metaverseink.com/download/OnLook_1_8_6_6276.dmg">link</a> to the dmg for Mac. (Thanks to Cinder Biscuits for the Mac version)</p>
<h2>Step 2. Login to your HG-enabled world</h2>
<p>Login to your world somewhere. It needs to be HG-enabled. Once you login, the interface will be exactly like Singularity.</p>
<h2>Step 3. Teleport to my Test world</h2>
<p>Pull up the map and search for <strong>http://ucigrid01.nacs.uci.edu:8002</strong>. Teleport there.</p>
<p><a href="http://metaverseink.com/blog/wp-content/uploads/2014/11/OnLookTest1.png"><img class="alignleft wp-image-571 size-large" src="http://metaverseink.com/blog/wp-content/uploads/2014/11/OnLookTest1-1024x560.png" alt="OnLookTest1" width="625" height="341" /></a></p>
<p>Once you land, notice the new UI: The top menu disappears, and the bottom toolbar changes to show only a few options. This is a simplified UI that I&#8217;m defining and sending from the server. Others may want to send a different UI.</p>
<p>Next, click on Destinations and choose Epic Castle:</p>
<p><a href="http://metaverseink.com/blog/wp-content/uploads/2014/11/OnLookTest2.png"><img class="alignleft size-large wp-image-572" src="http://metaverseink.com/blog/wp-content/uploads/2014/11/OnLookTest2-1024x560.png" alt="OnLookTest2" width="625" height="341" /></a></p>
<h2>Step 4. Teleport to Epic Castle</h2>
<p>Click to teleport to Epic Castle, which is another region on this same test grid.</p>
<p><a href="http://metaverseink.com/blog/wp-content/uploads/2014/11/OnLookTest3.png"><img class="alignleft size-large wp-image-573" src="http://metaverseink.com/blog/wp-content/uploads/2014/11/OnLookTest3-1024x560.png" alt="OnLookTest3" width="625" height="341" /></a></p>
<p>This region is configured in &#8220;camera-only&#8221; mode. What this means is that your avatar will be invisible. <span style="text-decoration: line-through;">For this alpha release, you will still see your attachments, if you have them, but we are working to make them invisible too, to make it truly &#8220;camera-only&#8221;.</span> (Since I wrote this post, this has been fixed, so now your avatar will be completely transparent, attachments and all)</p>
<p>Notice that the controls are completely different too. If you press the arrow keys, your avatar stays in the same place, but the camera moves. Shift+arrows gives you more movements of the camera. Shift+Esc brings the camera to its original position. In any case, the avatar&#8217;s position stays unchanged when in this mode.</p>
<p>The objects in the scene are still interactive. See that yellow sphere? You can click it.</p>
<p>This mode is something that I wanted to do for a long time in order to make these wonderful worlds accessible to people who don&#8217;t like to see themselves as avatars. <a href="http://www.encitra.com">Encitra</a> is going to use this mode in urban planning applications, as these environments become more like the modeling tools that urban planners are familiar with.</p>
<p>Before you leave this region, you may want to play with the options under the Settings button.</p>
<p><a href="http://metaverseink.com/blog/wp-content/uploads/2014/11/OnLookTest4.png"><img class="alignleft size-large wp-image-574" src="http://metaverseink.com/blog/wp-content/uploads/2014/11/OnLookTest4-1024x560.png" alt="OnLookTest4" width="625" height="341" /></a></p>
<h2>Step 5. Go back</h2>
<p>The camera-only mode is very restrictive; you can&#8217;t even use keyboard shortcuts. In order to go back, pull up the Destinations guide and choose Convention Center.</p>
<p><a href="http://metaverseink.com/blog/wp-content/uploads/2014/11/OnLookTest5.png"><img class="alignleft size-large wp-image-575" src="http://metaverseink.com/blog/wp-content/uploads/2014/11/OnLookTest5-1024x560.png" alt="OnLookTest5" width="625" height="341" /></a></p>
<p>That will take you to the first region you visited on this test grid. Your avatar will be visible again.</p>
<p>Finally, press Cntrl+Shift+h to go back to your home world. Once you arrive, notice the full-fledged Singularity UI coming back.</p>
<p>That&#8217;s it! Thanks for testing!</p>
<h2>Final Words</h2>
<p>OnLook is available in <a href="https://github.com/diva/OnLook">Github</a> and the server-side modules are already in OpenSim(Dev), undocumented for now. Once they stabilize, I promise I will write documentation for how to use them. One thing to know is that these UI modes can be defined on a user level basis, meaning that you can have builders login with the default UI, and regular users login with a much simpler/restrictive UI.</p>
<p>This work has been supported by <a href="http://www.encitra.com/">Encitra</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metaverseink.com/blog/opensim/onlook-viewer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New in 0.8: Profiles and Variable-Sized Regions</title>
		<link>http://www.metaverseink.com/blog/d2/new-in-0-8-profiles-and-variable-sized-regions/</link>
		<comments>http://www.metaverseink.com/blog/d2/new-in-0-8-profiles-and-variable-sized-regions/#comments</comments>
		<pubDate>Thu, 19 Jun 2014 14:34:13 +0000</pubDate>
		<dc:creator><![CDATA[Diva Canto]]></dc:creator>
				<category><![CDATA[D2]]></category>
		<category><![CDATA[diva distro]]></category>

		<guid isPermaLink="false">http://metaverseink.com/blog/?p=552</guid>
		<description><![CDATA[OpenSimulator 0.8 brings one much requested feature, profiles, and a fantastic new feature, variable-sized regions (varregions for short), something we got from an offshoot of OpenSim with collaboration from viewer developers. Profiles and varregions both work out of the box for new installations of D2, so if you&#8217;re doing it from scratch, you don&#8217;t need to read this. [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a href="http://metaverseink.com/blog/wp-content/uploads/2014/06/Snapshot_001.png"><img class="alignnone size-medium wp-image-557" src="http://metaverseink.com/blog/wp-content/uploads/2014/06/Snapshot_001-300x225.png" alt="Snapshot_001" width="300" height="225" /></a></p>
<p>OpenSimulator 0.8 brings one much requested feature, profiles, and a fantastic new feature, variable-sized regions (<a href="http://opensimulator.org/wiki/Varregion">varregions</a> for short), something we got from an <a href="https://github.com/aurora-sim/Aurora-Sim">offshoot of OpenSim</a> with collaboration from viewer developers. Profiles and varregions both work out of the box for <strong>new</strong> installations of D2, so if you&#8217;re doing it from scratch, you don&#8217;t need to read this. But if you are upgrading your D2, there is some manual upgrading to do. Please read on!</p>
<p><span id="more-552"></span></p>
<h2>Profiles</h2>
<p>For profiles to work in D2, edit your existing bin/MyWorld.ini and add this section somewhere:</p>
<pre>[UserProfiles] 
  ProfileServiceURL = "http://myworld.com:9000"   (replace with your domain name)</pre>
<p>Then add this extra variable under [LoginService]:</p>
<pre>[LoginService] 
  SRV_ProfileServerURI = "http://myworld.com:9000"  (replace with your domain name)</pre>
<h2>How to Change D2 from Mega to Varregion</h2>
<p>During all this time, D2 has been packaged with a precursor of varregions called mega-regions. Mega-regions, however, failed to work well on many details like crossing borders or teleports to the middle of the area. Varregions involves improvements in the viewers, so users need to use a relatively recent viewer like Singularity, but they solve all of the problems that mega-regions had, and make the specification of the space much simpler too.</p>
<p>Starting in this release (r24886, OpenSim 0.8), new installations of D2 use varregions out of the box instead of mega-regions. The default size of the space is as before 512&#215;512, but it can easily be changed. Because the old mega-regions are difficult to deal with, <strong>existing D2 worlds are not automatically updated to varregions, so they will continue to work using mega-regions if nothing is done</strong>. However, I strongly recommend D2 users to update their worlds immediately after updating D2.</p>
<p><span style="color: #ff0000;"><strong>Please note</strong></span>: upgrading to varregion will eliminate the existing parcels in all but the SW area; you will need to redo the parcels again. Although this is inconvenient, I highly recommend changing to varregions now, because support for mega-regions in OpenSim will eventually be dropped.</p>
<ol>
<li>Update your D2 to diva-r24886
<pre> $ [mono] Update.exe</pre>
</li>
<li>Change to diva-r24886/bin and restart OpenSim as usual
<pre> $ [mono] OpenSim.exe</pre>
<p>Note that this will run your world still as a mega-region. Everything should work as before.</li>
<li>Make oars of all of your regions. Assuming the default 4-cell megaregion configuration:
<pre> # change region "&lt;SW&gt;"  (where SW is the name of the lower-left region)
 # save oar sw.oar
 # change region "&lt;SE&gt;"   (where SE is the name of the lower-right region)
 # save oar se.oar
 # change region "&lt;NE&gt;"  (where NE is the name of the upper-right region)
 # save oar ne.oar
 # change region "&lt;NW&gt;"   (where NW is the name of the upper-left region)
 # save oar nw.oar</pre>
</li>
<li>Shutdown OpenSim:
<pre> # shutdown</pre>
</li>
<li><strong>IMPORTANT</strong>: Make a copy of bin/RegionConfig.ini for backup, in case you need to go back to mega-regions.</li>
<li>Edit bin/RegionConfig.ini. Again, assuming the default 4-cell megaregion that came with D2, you should see 4 blocks of region specification there, one per region. <strong>Leave the first one, and delete, or comment (</strong>with semicolon &#8216;;&#8217;<strong>), the other three</strong>. On the first block that is left, add the following variables:
<pre> SizeX = 512
 SizeY = 512</pre>
<p>So, your entire (single) block should look something like this:</p>
<pre> [My World 1]
 RegionUUID = "bd60a94c-bebe-bebe-96bc-26564f652111"
 Location = "2238,2550"
 InternalAddress = "0.0.0.0"
 InternalPort = 9000
 AllowAlternatePorts = False
 ExternalHostName = "myworld.com"
 SizeX = 512
 SizeY = 512</pre>
</li>
<li>Restart OpenSim
<pre> $ [mono] OpenSim.exe</pre>
<p>You will now have 1 large region that has all the content, but the terrain everywhere except the SW area is wrong. Don&#8217;t panic! You are now going to load the rest of the terrain.</li>
<li>Leave the SW corner as is, since it already has the right content. Load the other 3 oars with the corresponding displacement:
<pre># change region "&lt;SW&gt;"  (where SW is the name of the lower-left, and now only, region)
# load oar se.oar --displacement "&lt;256,0,0&gt;" --merge --force-terrain 
# load oar ne.oar --displacement "&lt;256,256,0&gt;" --merge --force-terrain 
# load oar nw.oar --displacement "&lt;0,256,0&gt;" --merge --force-terrain</pre>
</li>
</ol>
<p>That&#8217;s it! You now have a D2 with a proper variable-sized region that will work much better than the mega-region we had before. From here on, saving OARs will involve only this one region, not four. This is a true single region, not many regions pretending to be one, like mega-regions.</p>
<p>If you had previously changed the default 2&#215;2 mega-region of D2 by adding more regions in bin/RegionConfig.ini, you need to delete all but the first region in that file and set the size to whatever your space size is. You will also need to save all of the oars for all of your regions and then load them into the single varregion with the corresponding displacements.</p>
<h2>Changing the Size of Your World</h2>
<p>If you want you can increase the size of your region by changing SizeX and SizeY in bin/RegionConfig.ini, and then restarting OpenSim. Two constraints must be observed: (1) SizeX=SizeY (so, only square regions are allowed); and (2) the size needs to be a multiple of 256.</p>
<p>I don&#8217;t recommend regions larger than 1024&#215;1024, though, because the terrain will be massive.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metaverseink.com/blog/d2/new-in-0-8-profiles-and-variable-sized-regions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OSCC 2013 &#8212; Why You Should Care and How You Can Help</title>
		<link>http://www.metaverseink.com/blog/opensim/oscc-2013-why-you-should-care-and-how-you-can-help/</link>
		<comments>http://www.metaverseink.com/blog/opensim/oscc-2013-why-you-should-care-and-how-you-can-help/#comments</comments>
		<pubDate>Thu, 01 Aug 2013 19:38:54 +0000</pubDate>
		<dc:creator><![CDATA[Diva Canto]]></dc:creator>
				<category><![CDATA[OpenSim]]></category>
		<category><![CDATA[oscc]]></category>
		<category><![CDATA[virtual conference]]></category>

		<guid isPermaLink="false">http://metaverseink.com/blog/?p=540</guid>
		<description><![CDATA[As all of you probably already know, we are organizing the first OpenSimulator Community Conference on the first full weekend of September, 7-8. This event has been in the making since, roughly, March. But it took us a couple of years before that to actually convince ourselves that it was worth doing it. Here are [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a title="Load Test by Diva Canto, on Flickr" href="http://www.flickr.com/photos/20665379@N03/9417536026/"><img alt="Load Test" src="http://farm6.staticflickr.com/5500/9417536026_caa002bc46_n.jpg" width="320" height="219" /></a></p>
<p>As all of you probably already know, we are organizing the first <a href="http://conference.opensimulator.org/2013/">OpenSimulator Community Conference</a> on the first full weekend of September, 7-8. This event has been in the making since, roughly, March. But it took us a couple of years before that to actually convince ourselves that it was worth doing it. Here are all the reasons why I think this event a great thing, and why everyone who uses OpenSimulator <em>should </em>be involved in some way.</p>
<p><span id="more-540"></span></p>
<p><strong>Reason #1: Dramatic Improvements to OpenSimulator Performance</strong></p>
<p>When we started planning this in March and we faced the prospect of a 200 people event, we went &#8220;omg!&#8221; Although we had never even tried, we knew that we could not host a 200 people event with OpenSimulator as it was in March &#8212; period. The maximum number of people we had ever attempted was <a href="http://metaverseink.com/blog/?p=25">52</a>, and in that test, lag started lurking in at 20, and never went away;we hit 52 people, but no one could move and chat was laggy as hell; the simulator eventually crashed. That test was back in 2009, too, a long time ago. Apart from Intel and its Distributed Scene Graph work, which takes a drastically different  architectural approach, none of us has ever paid much attention to core simulator performance.  It was clear that if we were going to attempt a 200 people event, we would need to invest a lot of our time in making OpenSimulator perform not just as well as the Second Life simulators, but&#8230; better.</p>
<p>Well, 4 months and 926 commits later, we have now taken the performance of OpenSimulator to levels that it has never seen before. In recent load tests, we have had as many as 117 avatars distributed over a 4-sim corner, with one of the sims usually hosting close to 60 avatars. After initial arrival of avatars, which is still a heavy load, the CPU usage on those simulators stays well under 100%. There&#8217;s very little to no chat lag and people can walk around without freezing neither the sim nor their own viewers. (Although we ask people to sit, because that&#8217;s the scenario for the conference)</p>
<p>A sim with 10 people standing around and chatting, which is a typical scenario for these virtual environments, now uses as little as 15% CPU &#8212; you can practically hear it yawn!</p>
<p><strong>Reason #2: Dramatic Improvements to the Stability of Existing Features</strong></p>
<p>Just to name three: the Hypergrid, teleports in general and Groups.</p>
<p>The Conference Center grid is hosted in a special-purpose server that is completely independent from any existing grid; it&#8217;s <a href="http://cc.opensimulator.org/">its own grid</a>. Account creation on that grid is limited, by design. Except for conference staff, it doesn&#8217;t make much sense to host user accounts and their corresponding inventory in the Conference Center grid, because this is just a one-time event. It makes more sense for participants to come from their own persistent home worlds. Indeed, in all of the load tests that we have been making, the vast majority of avatars come from other grids &#8212; 33 grids so far! Consequently, a few bugs and poor performance in the Hypergrid had to be fixed&#8230;</p>
<p>In chasing bugs, we realized that what we were doing with teleports was not exactly in accordance to what the viewer was expecting. So we completely rewrote the Teleport protocol. The new protocol conforms with what the Linden grid does, as far as we can tell. As a consequence, teleports are now more solid than they ever were.</p>
<p>As for Groups (V2), even though I added this to OpenSimulator back in February, it had never been tested at scale. In using groups in the Conference Center grid, it was clear that there were some major issues in there that had been inherited from the Flotsam groups implementation. One of the major ones was in Group chat, which was very laggy and.. well, wrong. Group chat is now fixed. In the last load test we had 100+ people chatting (abusing) over the Load Test group with no additional CPU usage, no duplicate messages and generally no noticeable bugs. We also plan to make heavy use of groups for access control and permissions. Our smaller tests indicate that this can now be safely done.</p>
<p><strong>Reason #3: Increased Synergy with Viewer Developers</strong></p>
<p>This has, perhaps, been the best surprise of the process: we have had an increasing synergy with some of the viewer developers, specifically <a href="http://www.singularityviewer.org/">Singularity</a>. So much so that we are planning to release a version of Singularity that is branded for the conference event. Some of the Singularity developers have been part of the load tests, and they have been extremely responsive to information and change requests that make the whole system work better. For example, thanks to lkalif, I was able to make the edit beams work in OpenSim (have you ever noticed that in OpenSim the edit beams were gone?). Another example, because of the new way that the viewers handle the map tiles, the map was useless after an Hypergrid Teleport; thanks also to lkalif, this has now been fixed in Singularity!</p>
<p>I see a whole new world of possibilities now&#8230;</p>
<p><strong>Reason #4: New Features in D2 Wifi</strong></p>
<p>Q: how would sponsors bring their content to the Conference Center grid, especially those whose grids aren&#8217;t Hypergrid-enabled?<br />
A: add a feature to Wifi that allows users to upload IARs.</p>
<p>Done. It will be part of the next release of Wifi.</p>
<p><strong>Reason #5:  Community Building</strong></p>
<p>The OpenSimulator core developers are a bunch of radically independent nerds that have shown more talent to code than to do community management. That&#8217;s an unalterable fact. Luckily for this conference, we&#8217;ve engaged with <a href="http://www.avacon.org/blog/">AvaCon</a>, a non-profit whose sole purpose is to help foster communities in the Metaverse. It&#8217;s been great to see the volunteers and presentation proposals coming in, managed by them! Now that I see it, I can&#8217;t wait to hear what people have been doing with OpenSim!</p>
<p><strong>Reason #6: The Program!</strong></p>
<p>Finally, conferences can be fun to attend. The program is shaping up to be very interesting, starting with <a href="http://conference.opensimulator.org/2013/opensimulator-community-conference-announces-keynote-speaker-grady-booch/">Grady Booch&#8217;s keynote</a> and ending with the breakout sessions and 3rd party social events.  The panels are interesting, the presentations I&#8217;ve seen being proposed are also interesting. As the program goes, the conference looks like a serious real world conference, as far as I can tell. (The final  program will be announced soon!)</p>
<p>I don&#8217;t think I ever attended a virtual conference like this before, so this is a first! If we are really able to pull this off in September, we might see more conferences going virtual instead of contributing to waste the ozone layer!</p>
<p><strong>So here are some ways for you to get involved and help in this multi-purpose activity</strong>:</p>
<ul>
<li>We are still in need of inworld volunteers. <a href="http://conference.opensimulator.org/2013/staff/volunteer-application/">Consider volunteering to help during the conference</a>. You&#8217;ll get an inworld ticket, and those are limited!</li>
<li>Don&#8217;t have much time to volunteer or cannot attend the conference? <a href="http://conference.opensimulator.org/2013/sponsors/call-for-sponsors/">Consider being a sponsor</a>, even if at the lowest level (US$50). While a virtual conference is 80x cheaper than a RL world one, it is not free of costs entirely. These sponsorships help defray the costs that we are incurring in.</li>
<li>Come participate in the load tests. We have one every Tuesday at noon PST. There is also a special <a href="http://conference.opensimulator.org/2013/special-conference-grid-load-test-scheduled-for-saturday-august-3rd/">load test this Saturday</a>, where we hope to get close to 200 avatars &#8212; the real deal. Be part of a major milestone in the history of OpenSim/Second Life.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.metaverseink.com/blog/opensim/oscc-2013-why-you-should-care-and-how-you-can-help/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>D2 Addons: Groups, Offline IM, TOS module</title>
		<link>http://www.metaverseink.com/blog/d2/d2-addons-groups-offline-im-tos-module/</link>
		<comments>http://www.metaverseink.com/blog/d2/d2-addons-groups-offline-im-tos-module/#comments</comments>
		<pubDate>Wed, 13 Feb 2013 01:06:32 +0000</pubDate>
		<dc:creator><![CDATA[Diva Canto]]></dc:creator>
				<category><![CDATA[D2]]></category>
		<category><![CDATA[diva distro]]></category>

		<guid isPermaLink="false">http://metaverseink.com/blog/?p=534</guid>
		<description><![CDATA[The latest release of D2 (diva-r22043) includes a few new addons that are missing from the core of OpenSim, namely: Groups, Offline IM and a Terms of Service feature. I&#8217;ve waited this long to implement these, but it has finally come to a point that I can&#8217;t live without them. Groups are pretty important for [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>The latest release of D2 (diva-r22043) includes a few new addons that are missing from the core of OpenSim, namely: Groups, Offline IM and a Terms of Service feature. I&#8217;ve waited this long to implement these, but it has finally come to a point that I can&#8217;t live without them. Groups are pretty important for access control and permissions, and it has been a battle to work without them; offline IM is convenient; and showing a Terms of Service agreement has become important to me, especially for foreign visitors.</p>
<p>D2 is meant to be a personal virtual world server, so some of these addons have limitations that reflect the spirit of a personal virtual world. For example, in D2 you can create at most 2 groups. I have an unlimited version of Groups, too, but that is meant for larger worlds.</p>
<p>Anyway, you can find all the information about these addons <a href="https://github.com/diva/d2/wiki/Addons">here</a>. The Wifi web app has been extended with some minimal support for managing groups.</p>
<p>These addons are works in progress, and I will keep improving them. This is their first release to the public, so expect some hickups. Please report those issues <a href="https://github.com/diva/d2/issues">here</a>, but make sure to read the <a href="https://github.com/diva/d2/wiki/Addons">documentation</a> first.</p>
<p>Have fun!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metaverseink.com/blog/d2/d2-addons-groups-offline-im-tos-module/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Updating D2 to r22043 in Linux</title>
		<link>http://www.metaverseink.com/blog/d2/updating-d2-to-r22043-in-linux/</link>
		<comments>http://www.metaverseink.com/blog/d2/updating-d2-to-r22043-in-linux/#comments</comments>
		<pubDate>Wed, 13 Feb 2013 00:52:40 +0000</pubDate>
		<dc:creator><![CDATA[Diva Canto]]></dc:creator>
				<category><![CDATA[D2]]></category>

		<guid isPermaLink="false">http://metaverseink.com/blog/?p=521</guid>
		<description><![CDATA[NOTE: This affects only Linux installations. D2 on Windows machines is fine. If you are updating your D2 in Linux from r20232-b to the latest, you will very likely encounter the following problem: $ mono Update.exe Using download link http://metaverseink.com/download/diva-r22043.zip Your current release is diva-r20232-b. Available release is diva-r22043 New release available. Updating&#8230; Downloading new [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>NOTE: This affects only Linux installations. D2 on Windows machines is fine.</p>
<p>If you are updating your D2 in <strong>Linux</strong> from <span style="color: #ff6600;">r20232-b</span> to the latest, you will very likely encounter the following problem:</p>
<p>$ mono Update.exe<br />
Using download link http://metaverseink.com/download/diva-r22043.zip<br />
Your current release is diva-r20232-b. Available release is diva-r22043<br />
New release available. Updating&#8230;<br />
Downloading new release from http://metaverseink.com/download/diva-r22043.zip to /tmp/diva-r22043.zip. This may take a few minutes.<br />
&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;:-)<br />
Extracting new release to /home/opensim<br />
<span style="color: #ff0000;"> * Unable to unzip. Please try updating later. (Reason: Path is empty)</span><br />
*********************************************************************<br />
Your installation has been updated. The new release is in<br />
&gt;&gt; /home/opensim/diva-r22043 &lt;&lt;<br />
Your regions have been migrated.<br />
Please read the RELEASENOTES to know what changed.<br />
If you made changes to OpenSim.ini, please copy that file over<br />
or change the new one.<br />
*********************************************************************</p>
<p>&lt;Press return to exit&gt;</p>
<p>In other words, the Update tool fails to unzip the new package.</p>
<p>This is due to a bug in a library included in OpenSim 0.7.4, on which diva-r20232-b is based. The offending library is called Ionic.Zip.dll. Here is what you need to do in order to get past this issue.</p>
<p>1 &#8211; Download <a href="http://www.metaverseink.com/download/Ionic.Zip.dll">this version</a> of that library and place it in your current d2 bin folder, diva-r20232-b/bin. You can overwrite  the one that&#8217;s there, or move it somewhere before placing the new version there. Note that some download tools (e.g. wget) don&#8217;t overwrite files and instead give them new names. Make sure the new version has the right name.</p>
<p>2 &#8211; Run the Update tool again.<br />
$ mono Update.exe</p>
<p>Voila! Problem solved.</p>
<p>The latest D2 release has the correct version of Ionic.Zip.dll, so hopefully this won&#8217;t happen next time you need to update.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metaverseink.com/blog/d2/updating-d2-to-r22043-in-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bad Ubuntu!</title>
		<link>http://www.metaverseink.com/blog/uncategorized/bad-ubuntu/</link>
		<comments>http://www.metaverseink.com/blog/uncategorized/bad-ubuntu/#comments</comments>
		<pubDate>Tue, 09 Oct 2012 21:17:02 +0000</pubDate>
		<dc:creator><![CDATA[Diva Canto]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://metaverseink.com/blog/?p=503</guid>
		<description><![CDATA[$ less /etc/hosts 127.0.0.1 localhost 127.0.1.1 nile.ics.uci.edu nile # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters Yesterday, I spent a lot of time harassing just about everyone in my University&#8217;s Networking Support department because I couldn&#8217;t get an OpenSim server to serve clients anywhere. [&#8230;]]]></description>
				<content:encoded><![CDATA[<pre>$ less /etc/hosts</pre>
<pre>127.0.0.1 localhost
<span style="color: #ff0000;">127.0.1.1 nile.ics.uci.edu nile</span></pre>
<pre># The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters</pre>
<p>Yesterday, I spent a lot of time harassing just about everyone in my University&#8217;s Networking Support department because I couldn&#8217;t get an OpenSim server to serve clients anywhere. We know that OpenSim networking is hard. But, damn it, I&#8217;m one of the core devs of OpenSim, and I have a pretty good idea of what&#8217;s involved in the protocols between the server and the client. I&#8217;ve had lots of OpenSim servers running successfully in all sorts of networks, including my University&#8217;s. Well, the problem turned out to be&#8230; Ubuntu!</p>
<p><span id="more-503"></span>The default installation of Ubuntu comes with a horrible hack in /etc/hosts:</p>
<p>127.0.1.1 nile.ics.uci.edu nile</p>
<p>Yes, this maps the domain name to an interface in localhost, for reasons explained <a href="http://www.leonardoborda.com/blog/127-0-1-1-ubuntu-debian/">here</a>. As stated in the <a href="http://qref.sourceforge.net/quick/ch-gateway.en.html">Debian Reference</a>:</p>
<p>&#8220;This is really improper because system hostnames and domain names are two very different things; but there you have it.&#8221;</p>
<p>How does this impact OpenSim?</p>
<p>Upon client login (over TCP), OpenSim sends its UDP address to the client. In doing so, it needs to send the actual IP address, not the domain name &#8212; the client expects the IP address. Due to that entry in /etc/hosts, OpenSim was getting nile.ics.uci.edu translated into the localhost IP&#8230; Fail!</p>
<p>Fix: either remove/comment that line from /etc/hosts or replace it with the external IP address of that server, if it has one.</p>
<p>Conclusion: bad Ubuntu! (Debian may suffer from the same problem)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.metaverseink.com/blog/uncategorized/bad-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
