<?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>Friday Inc.</title>
	<atom:link href="http://zaki.asia/feed/" rel="self" type="application/rss+xml" />
	<link>http://zaki.asia</link>
	<description>Virtual Worlds - Real Experience</description>
	<lastBuildDate>Mon, 21 Dec 2009 10:26:02 +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>OSGrid in Rei</title>
		<link>http://zaki.asia/2009/12/21/osgrid-in-rei/</link>
		<comments>http://zaki.asia/2009/12/21/osgrid-in-rei/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 10:26:02 +0000</pubDate>
		<dc:creator>Zaki</dc:creator>
				<category><![CDATA[OpenSim]]></category>
		<category><![CDATA[3Di OpenViewer]]></category>
		<category><![CDATA[osgrid]]></category>
		<category><![CDATA[Rei]]></category>
		<category><![CDATA[virtual worlds]]></category>

		<guid isPermaLink="false">http://zaki.asia/?p=163</guid>
		<description><![CDATA[Textures
Before Rei was released at the end of September, it was called 3Di OpenViewer. As it stands, that viewer didn&#8217;t need to download textures through the region server, rather, it would download assets (textures, meshes, avatars) directly from an asset server. For this reason, when someone logged in to an upstream OpenSim grid with 3Di [...]]]></description>
			<content:encoded><![CDATA[<h3>Textures</h3>
<p>Before Rei was released at the end of September, it was called 3Di OpenViewer. As it stands, that viewer didn&#8217;t need to download textures through the region server, rather, it would download assets (textures, meshes, avatars) directly from an asset server. For this reason, when someone logged in to an upstream OpenSim grid with 3Di OpenViewer, textures and avatars would not appear.</p>
<p>But that changed when we released Rei as an open-source viewer at the end of September. At that time, textures were already being fetched from OpenSim. You can go ahead and grab the installer from github and it will display textures. What it won&#8217;t do with textures is correctly apply UV coordinates in some (fortunately very rare) twisted-hollow-prim cases (but it was more about PrimMesher than Rei). Since September, we have done many improvements to PrimMesher &#8211; and Rei too, so now even those rare cases appear correctly (big thanks to the bug reporters). Texture downloads are slow unfortunately, but more on that later.</p>
<h3>Avatars</h3>
<p>Now this is a very delicate issue. The heart of the issue is that currently there is no non-LL viewer that supports SecondLife(tm) avatars. Let me say that again: there are no viewers that support SL(tm) avatars. Naali has a built-in mesh (the same as the old viewer), IdealistViewer has a built-in mesh, LookingGlass doesn&#8217;t yet have avatars (correct me if it does), Xenki doesn&#8217;t have an avatar yet as far as I know either.</p>
<p>The closest a viewer gets to SL avatar support is the PandaViewer by dahlia (<a href="http://vimeo.com/6812213" target="_blank">http://vimeo.com/6812213</a>) , which supports avatar shapes and actually looks really nice. Unfortunately it&#8217;s not open source (yet?), nor is it available in any form.</p>
<p>The thing with avatar support is that it&#8217;s pretty difficult to do right. No, not only technically, but there&#8217;s the issue of using or not using Linden Labs(tm)&#8217;s original mesh. You can find <a href="http://secondlife.com/community/avatar.php" target="_blank">downloadable meshes</a>, but there is a nice warning hidden neatly inside an obj file:</p>
<blockquote><p># This model is released for use by residents of Second Life.<br />
# It may be imported into external 3D modeling, texturing, and animation applications to aid in the creation of character animations and textures for Second Life, as well as for any non-commercial purpose.<br />
# Use or modification of this model for any other commercial purpose is prohibited without the express written consent of Linden Lab.</p></blockquote>
<p>With all this said, we are looking at SL(tm) avatar support. It definitely won&#8217;t happen before the end of this year, the target is early next year.</p>
<h3>OpenSim support</h3>
<p>Of course Rei still has issues with upstream OpenSim support. This is partially due to the very very bad way textures are downloaded (through a single server, in UDP). The truth is, even SL(tm) viewer chokes on those: in heavy regions it would download the low resolution image, but the full image is never actually downloaded. My personal opinion is that the sooner we can break free from that way of transferring assets to clients, the better (guess how 3Di OpenViewer delivers content). Hopefully OpenSim will not remain an SL(tm) clone and there will be lots of innovations in the virtual world space coming from OpenSim. Rei is supposed to show what is possible when we can control both the viewer and the server side without the fear of not being able to work on one or the other for six months.</p>
<h3>The current state</h3>
<p>Below are two videos of Rei logging in to OSGrid&#8217;s Lbsa Plaza and Wright Plaza.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="295" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/cgNL4-oMLOc&amp;hl=en_US&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="295" src="http://www.youtube.com/v/cgNL4-oMLOc&amp;hl=en_US&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="295" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/FBbR4txM9M4&amp;hl=en_US&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="295" src="http://www.youtube.com/v/FBbR4txM9M4&amp;hl=en_US&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>So, what do you think of the viewer so far? What sort of improvements do you think would be nice? What do you think is missing, other than the avatar support?</p>
<p>In general, what are the things you absolutely expect from a virtual world viewer?</p>
<p>Let me know in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://zaki.asia/2009/12/21/osgrid-in-rei/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Wii Controller Plugin for 3Di Viewer &#8220;Rei&#8221;</title>
		<link>http://zaki.asia/2009/11/20/wii-controller-plugin-for-3di-rei/</link>
		<comments>http://zaki.asia/2009/11/20/wii-controller-plugin-for-3di-rei/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 08:56:53 +0000</pubDate>
		<dc:creator>Zaki</dc:creator>
				<category><![CDATA[OpenSim]]></category>
		<category><![CDATA[3Di OpenViewer]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[Rei]]></category>
		<category><![CDATA[virtual worlds]]></category>

		<guid isPermaLink="false">http://zaki.asia/?p=157</guid>
		<description><![CDATA[ 

Wii Controller Plugin
3Di Viewer &#8220;Rei&#8221; provides a great flexibility when it comes to adding custom functionality to the core viewer by making it possible to create binary plugins. Just drop these binaries into the Rei folder and let the viewer find and load it automatically the next time it starts. While these plugins are still [...]]]></description>
			<content:encoded><![CDATA[<p align="center"> </p>
<p align="center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/g_xum05b6xQ&amp;hl=en_US&amp;fs=1&amp;hd=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/g_xum05b6xQ&amp;hl=en_US&amp;fs=1&amp;hd=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h3>Wii Controller Plugin</h3>
<p>3Di Viewer &#8220;Rei&#8221; provides a great flexibility when it comes to adding custom functionality to the core viewer by making it possible to create binary plugins. Just drop these binaries into the Rei folder and let the viewer find and load it automatically the next time it starts. While these plugins are still in their early phase &#8211; we can do a lot more to ease the process of deploying plugins and resolving their dependencies &#8211; you can get a glimpse at their power already.</p>
<p>The WiiControllerPlugin is a fun project, a proof-of-concept, rather than a commercial solution, so before you dive in, be warned, that it is sometimes rough around the edges. With that out of the way, if you have Rei, head over to http://github.com/zaki/ReiWiiControllerPlugin and grab the binary from the Download section. Just copy the contents into the Rei installation folder (usually C:\Program Files\3Di\Rei). And&#8230; that&#8217;s basically it.</p>
<h3>How to connect the controller?</h3>
<p>To use a Wiimote, you will need a Wiimote, a nunchuck and a bluetooth adapter. I&#8217;ve heard that Toshiba adapters works best, but I have used Broadcomm&#8217;s chips successfully as well. It is said that the Microsoft stack doesn&#8217;t work most of the time with the Wiimote.</p>
<p>Before you start the viewer, connect/pair the Wiimote via bluetooth. If you find it difficult to connect, I found that keeping (1) and (2) pressed simultaneously while connecting helps a lot.</p>
<p>Once the Wiimote is connected, start Rei and if everything goes well, the primary Wiimote will have its first LED turned on. You are now ready.</p>
<h3>How to use the Wiimote?</h3>
<p>The WiiControllerPlugin allows you to use the Wiimote and the nunchuck to control your avatar and the camera. The nunchuck&#8217;s joystick, or the directional controller on the wiimote can be used to make you avatar walk. Up will always make your avatar walk forward, regardless of the position of the camera.</p>
<p>The camera is controlled with a combination of the wiimote and the nunchuck. Zoom in and out by holding down (Z) and tilting the nunchuck forward and backward. Hold the wiimote straight up; while you press (B), you can tilt the wiimote in four directions to rotate the camera around your avatar. Remember, you don&#8217;t have to look away from the screen to change the camera angle.</p>
<p>If you get lost with the camera, you can always press (C) to go back to behind your avatar. Pressing (C) also switches to &#8220;follow&#8221; mode, so your camera will &#8220;stick&#8221; to  your avatar and will follow it from behind if you move. Pressing (C) another time will switch back to the free camera mode.</p>
<p>If you get tired of moving with the wiimote and want to switch back to using the keyboard or mouse, you can disable avatar movements by pressing (-). Your wiimote&#8217;s will light the third LED when it&#8217;s disabled. Press (-) again to enable moving by the wii controller.</p>
<h3>About the demo</h3>
<p>The video above contains a very dull maze, in which there are colored balls that hurt or heal you when you touch them (I&#8217;ve never said I was a great contents designer, have I <img src='http://zaki.asia/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ) The demo shows how easy it is to integrate custom features with an unmodified OpenSim grid. All that was used is simple LSL script that detects collisions and gives commands via llSay. These commands can be intercepted by javascript and further dispatched to all plugins, that can act accordingly. In this case a simple health bar is adjusted.</p>
<p>As my LSL was sending plaintext commands like &#8220;heal,20&#8243;, the necessary javascript looks really simple:</p>
<pre class="brush: jscript;">
function DispatchCommand(message)
{
	var strList = new Array();
	strList = message.split(",");

	if (strList.length == 2)
	{
		ctrl.Callback(strList[0], strList[1]);
	}
}
</pre>
<p>If you have a question, or have a good idea about plugins, or the WiiControllerPlugin, please share it in the comments.</p>
<p> </p>
<p> </p>
<hr />
<p><span>Please note: WiiControllerPlugin is not endorsed by Nintendo. WiiControllerPlugin depends on  WiiMoteLib, which is release under the license MS-PL. For more details, see <a title="WiiMoteLib@CodePlex" href="http://wiimotelib.codeplex.com/" target="_blank">http://wiimotelib.codeplex.com/</a></span></p>
]]></content:encoded>
			<wfw:commentRss>http://zaki.asia/2009/11/20/wii-controller-plugin-for-3di-rei/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Plugins for Rei</title>
		<link>http://zaki.asia/2009/11/11/plugins-for-rei/</link>
		<comments>http://zaki.asia/2009/11/11/plugins-for-rei/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 09:09:23 +0000</pubDate>
		<dc:creator>Zaki</dc:creator>
				<category><![CDATA[OpenSim]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[Rei]]></category>
		<category><![CDATA[virtual worlds]]></category>

		<guid isPermaLink="false">http://zaki.asia/?p=140</guid>
		<description><![CDATA[Plugins
In “Rei”, there is a curious little green “health” bar above the avatar’s head. That bar is not something that is built in to the viewer, rather, a simple plugin provides the functions that are necessary to have a very rudimentary health bar. Of course this TestPlugin is only to show what sort of things [...]]]></description>
			<content:encoded><![CDATA[<h2>Plugins</h2>
<p>In “Rei”, there is a curious little green “health” bar above the avatar’s head. That bar is not something that is built in to the viewer, rather, a simple plugin provides the functions that are necessary to have a very rudimentary health bar. Of course this TestPlugin is only to show what sort of things are possible with “Rei”.</p>
<p align="center"><a href="http://zaki.asia/images/TestPlugin.jpg"><img title="TestPlugin" src="http://zaki.asia/images/TestPlugin.jpg" alt="" height="150" /></a><a href="http://zaki.asia/images/TestPlugin_Damage.jpg"><img class=" alignnone" title="TestPlugin - Damage" src="http://zaki.asia/images/TestPlugin_Damage.jpg" alt="" height="150" /></a><a href="http://zaki.asia/images/TestPlugin_Heal.jpg"><img class=" alignnone" title="TestPlugin - Heal" src="http://zaki.asia/images/TestPlugin_Heal.jpg" alt="" height="150" /></a><a href="http://zaki.asia/images/TestPlugin_Dead.jpg"><img class=" alignnone" title="TestPlugin - Dead" src="http://zaki.asia/images/TestPlugin_Dead.jpg" alt="" height="150" /></a></p>
<h3><a href="http://zaki.asia/images/TestPlugin_JS.jpg"><img class="aligncenter" title="Javascript" src="http://zaki.asia/images/TestPlugin_JS.jpg" alt="" width="485" height="114" /></a></h3>
<h2>What do plugins do?</h2>
<p>Plugins are intended for two main purposes. First, to communicate &#8211; through javascript &#8211; with the 2D web, and second, to interact with objects within the 3d scene. Of course a plugin is a .NET assembly, so it can pretty much do anything, but the main functions it is intended for are the above two. For instance TestPlugin provides two javascript functions: one to inflict damage and one to heal, basically allowing a regular 2d web application, for instance an SNS site or an online game, to change the health meter of the avatar within the 3d world according its own rules. Responding to these javascript functions then, the plugin interacts with the 3d world by rendering its own little health bar above the user’s head.</p>
<h2>How to write plugins?</h2>
<p>To make things as simple as possible, “Rei” uses the same method for developing plugins as OpenSim. Essentially one writes an addin for the <em>/OpenViewer/Managers</em> extension by implementing the IManagerPlugin interface and then creating and embedding a plugin manifest to the assembly.</p>
<h3>IManagerPlugin</h3>
<p>All plugins need to implement IManagerPlugin, which means implementing a few methods:</p>
<pre class="brush: plain;">void Initialise(Viewer viewer);</pre>
<p>-<strong> Initialise </strong>is the method that will be called right after constructing the plugin class. This will be only called once for the life of the plugin and is used to create objects that will persist through the entire lifetime such as static resources (textures, models), configurations.</p>
<pre class="brush: plain;">void Initialize();</pre>
<p>- <strong>Initialize</strong> (note the <strong>z</strong> in the name) will be called when “Rei” is getting ready to enter a region. This happens on the first startup as well as after logout or before entering a new region after a teleport. This is to make sure that unnecessary scene objects do not make it over to a new environment, therefore Initialize would create objects that persist only through the lifetime of one region, such as dynamic resources (textures, meshes) or dynamic information (region data, prim data)</p>
<pre class="brush: plain;">void Update(uint frame);</pre>
<p>-<strong> Update</strong> is called every frame. This is the place to calculate the next state of the plugin, including objects in the 3d scene. This is the only place where it is allowed to change properties of any object that is within the scenegraph. By using the frame parameter, it is possible to count or skip frames.</p>
<pre class="brush: plain;">void Draw();</pre>
<p>- <strong>Draw</strong> is also called every frame and it is where drawing directly to the 3d canvas is possible. Generally it is recommended to use proper scenenodes that draw automatically, instead of drawing directly.</p>
<pre class="brush: plain;">void Cleanup();</pre>
<p>- Just like Initialize is called before “Rei” is ready to log in to a new region, <strong>Cleanup</strong> is called every time a region is no longer needed, such as when logging out or when leaving a region by teleport. Cleanup is responsible of releasing resources that were allocated by Initialize (but not Initialise!)</p>
<pre class="brush: plain;">RefController Reference { get; set; }</pre>
<p>- This property is the entry point to &#8220;Rei&#8221;s core. Through this object it is possible to call into the public api of the viewer or to access javascript. <strong>Reference</strong> must always be initialized from the viewer parameter passed in to Initialise()</p>
<h3>Communication with Javascript</h3>
<h5>Plugin to Javascript: Dispatch</h5>
<p>A plugin can call Reference.Viewer.Adapter.Dispatch(string action, string message) when it wants to send a message to javascript. If a handler was added to the javascript library for the particular action, this dispatch will be processed by passing the message to the handler function. For future compatibility it is recommended although not required that the message be passed in json format.</p>
<h5>Javascript to Plugin: Callback</h5>
<p>The Adapter supplies a Callback delegate and a registry to handle calls from Javascript. A plugin can register a callback method that it is interested in receiving by calling</p>
<pre class="brush: plain;">Reference.Viewer.Adapter.RegisterCallback</pre>
<p>. It must pass the name of the method it wants to listen to and the method to call when the event arrives. The way a Callback works is very much like delegates work in the .NET framework.</p>
<p>From the javascript side, one can use</p>
<pre class="brush: plain;">ctrl.Callback(&quot;method&quot;, parameters)</pre>
<p>and all plugins that are listening to “method” will receive a callback to their registered functions. For an example of Callbacks, you can see the DoDamage and DoHeal from test.js and TestPlugin.cs</p>
<h5>Plugin to Plugin: Message</h5>
<p>It is also possible to send messages from one plugin to another, even without being aware of the other plugin. The mechanism is very similar to Callbacks: a plugin registers a message handler by calling</p>
<pre class="brush: plain;">Reference.Viewer.Adapter.RegisterMessage</pre>
<p>. The first parameter must be the name of the message to listen to and the second one is a message handler delegate.</p>
<p>A plugin can then raise a Message by calling</p>
<pre class="brush: plain;">Rerence.Viewer.Adapter.SendMessage(&quot;message&quot;, parameters)</pre>
<p>and all plugins that subscribed to the message being sent will receive it.</p>
<hr />A draft of this post also appears on the github wiki for 3Di Viewer &#8220;Rei&#8221;. For more up-to-date information, refer to <a title="Rei Plugin Development" href="http://wiki.github.com/3di/3di-viewer-rei/plugin-development" target="_blank">this page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://zaki.asia/2009/11/11/plugins-for-rei/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Irrlicht.NETCP and 3Di Rei on Linux</title>
		<link>http://zaki.asia/2009/11/05/irrlicht-netcp-rei-on-linux/</link>
		<comments>http://zaki.asia/2009/11/05/irrlicht-netcp-rei-on-linux/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 03:49:06 +0000</pubDate>
		<dc:creator>Zaki</dc:creator>
				<category><![CDATA[OpenSim]]></category>
		<category><![CDATA[Irrlicht]]></category>
		<category><![CDATA[Irrlicht.NETCP]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Rei]]></category>
		<category><![CDATA[virtual worlds]]></category>

		<guid isPermaLink="false">http://zaki.asia/?p=116</guid>
		<description><![CDATA[Irrlicht.NETCP
I&#8217;ve spent the last couple of weeks working towards rebasing the now abandoned Irrlicht.NETCP to use the latest Irrlicht released: 1.6. There are multiple reasons to do so, probably the most straightforward is to get the bugfixes or some of the new features, like the new light manager. However the less direct reason to do [...]]]></description>
			<content:encoded><![CDATA[<h3>Irrlicht.NETCP</h3>
<p>I&#8217;ve spent the last couple of weeks working towards rebasing the now abandoned Irrlicht.NETCP to use the latest Irrlicht released: 1.6. There are multiple reasons to do so, probably the most straightforward is to get the bugfixes or some of the new features, like the new light manager. However the less direct reason to do the rebase is that it includes Mac support out of the box &#8211; and now that I have a macbook sitting on my desk at work (albeit, temporarily), that is something of very high interest for me. In my dreamland, OpenGL ES support (for the iPhone) would work without much work too &#8211; hey, I can dream, can&#8217;t I.</p>
<p>So, for this rebase, I&#8217;ve started a new repo on github, that I hope will soon become the official repository for 3Di Viewer &#8220;Rei&#8221;, and maybe even for users of Irrlicht.NETCP (if any are still left, but who knows, maybe this can spark some new interest). The repository starts with a clean Irrlicht 1.6 SDK and gradually adds the fixes and features that are necessary for Rei (but of course those are fixes and features that would probably come up in other development as well).</p>
<p>On top of the improvements to Irrlicht, there is one huge patch, that makes the IrrlichtW wrapper compatible with 1.6. This mostly consists of type changes in the method interfaces and other minor details, but the patch itself is pretty monstrous, as many things changed at the same time. It is only after this collective patch, that the .NETCP library is usable again (it won&#8217;t even compile before this fix, so be careful with the history).</p>
<p>Later, IrrlichtML fixes were added. ML stands for multilingual and these changes are required even though things finally started  moving away from c8* to proper strings and io::paths in the core, stuff like IME support was not included and the unicode support is still horrible to say the least.</p>
<h3>Getting Irrlicht.NETCP</h3>
<p>If you want to give the new Irrlicht.NETCP libraries a try, head to github: <a title="Irrlicht.NETCP" href="http://github.com/zaki/irrlicht.netcp" target="_blank">http://github.com/zaki/irrlicht.netcp</a> and check out the sources (either using git, or click on download in github). For the impatient, I&#8217;ve also uploaded binary files for 32-bit windows (Release mode).</p>
<p>To compile the libraries yourself, you will have to compile three components: Irrlicht SDK, IrrlichtW and Irrlicht.NET, in basically this order. To compile Irrlicht SDK, go to Irrlicht SDK\source\Irrlicht and open Irrlicht9.0.sln in Visual Studio 2008 and build. IrrlichtW&#8217;s solution is found in IrrlichtW, named IrrlichtW.sln</p>
<p>Irrlicht.NET uses Prebuild to create its solution files, so before you can compile, the file runprebuild2008.bat needs to be run. That creates the solution file Irrlicht.NET.sln, that can be opened and built in VS.</p>
<h3>Rei and Irrlicht.NETCP</h3>
<p>To use the new binaries with &#8220;Rei&#8221;, some minor changes need to be made to Rei&#8217;s source. I committed these changes to my github repository: <a title="3Di Viewer &quot;Rei&quot;" href="http://github.com/zaki/3di-viewer-rei" target="_blank">http://github.com/zaki/3di-viewer-rei</a>, however the changes are not in the master branch, which I try to keep as a clean integration copy (therefore there is a little time delay). Get the Irrlicht 1.6 supporting sources from the &#8216;linux&#8217; branch.</p>
<h3>One more thing&#8230;</h3>
<p>Ahem&#8230; did I just say &#8216;linux&#8217; branch? Well, that&#8217;s probably because I&#8217;ve also started working on Rei linux support and so far things look quite bright (as opposed to the MacOSX support, but maybe later about that). I managed to make Rei run on my Ubuntu machine in standalone mode using Irrlicht.NETCP and mono. There are still a ton of things that need fixing, but it&#8217;s only a matter of time before a consistent framerate is achieved &#8211; I had driver issues and occasional performance problems, probably not unrelated. There are some problems with JPEG2000 support that I didn&#8217;t have time to look at yet and haven&#8217;t written shaders (OpenGL seems to hate HLSL shaders for some reason <img src='http://zaki.asia/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> , but everything in its own time.</p>
<p>So if you feel particularly adventurous, go ahead and grab the sources from the &#8216;linux&#8217; branch &#8211; Irrlicht.NETCP&#8217;s master branch now includes linux support -, compile them on your linux machine and do let me know how it works for you.</p>
<p style="text-align: center;"><a href="http://zaki.asia/images/3DiRei_onLinux.png"><img class="aligncenter" title="Rei on Linux" src="http://zaki.asia/images/3DiRei_onLinux.png" alt="" width="586" height="608" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://zaki.asia/2009/11/05/irrlicht-netcp-rei-on-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Intelligent evolution</title>
		<link>http://zaki.asia/2009/09/16/intelligent-evolution/</link>
		<comments>http://zaki.asia/2009/09/16/intelligent-evolution/#comments</comments>
		<pubDate>Tue, 15 Sep 2009 19:26:43 +0000</pubDate>
		<dc:creator>Zaki</dc:creator>
				<category><![CDATA[Fiction]]></category>
		<category><![CDATA[evolution]]></category>
		<category><![CDATA[intelligent design]]></category>

		<guid isPermaLink="false">http://zaki.asia/?p=106</guid>
		<description><![CDATA[The two publications appeared practically at the same time and they started an argument of epic proportions within the scientific community. Both scientists claimed nothing less than having solved the mystery of the origin of life &#8211; and not less important &#8211; of humankind. Two distinctly different, even contradicting theories, two proofs. Both of them [...]]]></description>
			<content:encoded><![CDATA[<p>The two publications appeared practically at the same time and they started an argument of epic proportions within the scientific community. Both scientists claimed nothing less than having solved the mystery of the origin of life &#8211; and not less important &#8211; of humankind. Two distinctly different, even contradicting theories, two proofs. Both of them offering a complete solution: from the proposed axioms, both of them explained the diversity &#8211;  the development of the individual and the similarities between species not only those currently existing but even those long extinct.</p>
<p>Some questions did remain unanswered though. The two schools differed greatly on their views on the mass extinctions during which time whole families of species have disappeared leaving only a faint trace in the form of fossil evidence: a skeleton here and there or an object we could connect to ancient &#8211; primitive &#8211; species. The community was simply amazed when remains of a smaller colony from a couple of thousands of years ago was unearthed, but even that could not compare to what excitement spread through scientific journals when fossils of a long disappeared ancient species were found in a rare excavation. Scientists from both camps would throw themselves at the new samples, trying to fit the new pieces of the puzzle to their theories.</p>
<p>One group has claimed, that species evolved through a very coordinated, but seemingly random process from other &#8211; usually more primitive &#8211; species. Through time, organs that were more useful for survival have been &#8211; in a manner &#8211; selected. It&#8217;s as if there was an algorithm in nature that experiments with randomly changing the variables, keeping results that it deems good while terminating those it finds unworthy. This algorithm has been present for millions if not billions of years (some even went as far as proposing that the same process can be found before life itself appeared). There was however a strange gap between humans of the long gone past and humans of the present &#8211; as if only the right fossils that would bridge this gap were hiding  somewhere, waiting to be found one day.</p>
<p>Followers of this theory &#8211; called evolutions &#8211; found that pieces of evidence fit their theory perfectly. They argued, that evolution of the present humans from ancient human forms is completely possible, as the natural selection process would experiment practically randomly, therefore given enough time, ancestor  species could be significantly different from descendant species.<br />
The other group also proposed a complete explanation, however their theory immediately caused an uproar in the scientific community. They claimed that present form humans have not appeared through a lengthy process of evolution, rather, it was created through an intelligent design. Their theory proposed that present day humans were created by an ancient, intelligent entity, or even by the &#8211; in lack of a better word &#8211; consciousness of some ancient species.<br />
Many would instantly distance themselves from members of this second group and some even went as far as calling the professor that first published this  theory an idiot. As the arguments started to spiral out of hand, finally a well-known scientific association has organized a public forum for members of  these groups where they were given the chance to present their findings and evidence. In the heated debate, followers of the school of evolution would claim that intelligent design is unscientific, while proponents of intelligent design would argue on the improbability of random evolution. A noted professor of  the second group was quoted to say:</p>
<p>&#8220;I firmly believe that humans were created by in ancient intelligent designer. The probability of complex organs evolving at random is not in accordance with nature. The probability of a complex structure evolving randomly is provably smaller than the theoretically conceivable smallest probability in the Universe. It is laughable to assume that the organ we know as our brains have evolved at random from lesser life forms. I don&#8217;t think it is even theoretically possible  that the our alleged ancestors&#8217; primitive carbohydrate-based organs would spontaneously evolve into our immeasurably complex silicon chips.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://zaki.asia/2009/09/16/intelligent-evolution/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Slowly getting there&#8230;</title>
		<link>http://zaki.asia/2009/09/08/3di-openviewer-textures/</link>
		<comments>http://zaki.asia/2009/09/08/3di-openviewer-textures/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 16:20:37 +0000</pubDate>
		<dc:creator>Zaki</dc:creator>
				<category><![CDATA[OpenSim]]></category>
		<category><![CDATA[3Di OpenViewer]]></category>
		<category><![CDATA[textures]]></category>
		<category><![CDATA[virtual worlds]]></category>

		<guid isPermaLink="false">http://zaki.asia/?p=96</guid>
		<description><![CDATA[

Pretty close, but still not close enough. I guess, I&#8217;ll need to take a deep, hard look at PrimMesher too.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://zaki.asia/images/osgrid_textures.jpg"><img title="3Di OpenViewer on OSGrid" src="/images/osgrid_textures.jpg" alt="3Di OpenViewer on OSGrid" width="100%" /></a></p>
<p><a href="http://zaki.asia/images/osgrid_hippo.jpg"><img title="Hippo Viewer on OSGrid" src="/images/osgrid_hippo.jpg" alt="Hippo Viewer on OSGrid" width="100%" /></a></p>
<p>Pretty close, but still not close enough. I guess, I&#8217;ll need to take a deep, hard look at PrimMesher too.</p>
]]></content:encoded>
			<wfw:commentRss>http://zaki.asia/2009/09/08/3di-openviewer-textures/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How to install and use 3Di OpenViewer</title>
		<link>http://zaki.asia/2009/08/19/how-to-install-and-use-3di-openviewer/</link>
		<comments>http://zaki.asia/2009/08/19/how-to-install-and-use-3di-openviewer/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 17:06:27 +0000</pubDate>
		<dc:creator>Zaki</dc:creator>
				<category><![CDATA[OpenSim]]></category>
		<category><![CDATA[3Di OpenViewer]]></category>
		<category><![CDATA[virtual worlds]]></category>

		<guid isPermaLink="false">http://zaki.asia/?p=86</guid>
		<description><![CDATA[Recently the question is asked more and more: how do I install and run 3Di OpenViewer? In this post I go into details about installing the viewer, embedding into web pages, using it in English and of course connecting to OpenSim grids.]]></description>
			<content:encoded><![CDATA[<p><strong>How to install 3Di OpenViewer?</strong></p>
<p>First and foremost, please note, that the viewer is currently for Windows and 3Di only supports Internet Explorer 6+ and Firefox 3.0 and 3.5 at this time.</p>
<p>Step 1.</p>
<p>IE Users:</p>
<p>Go to <a title="3Di OpenViewer for IE" href="http://www.3di-opensim.com/openviewer/ie_install.html " target="_blank">http://www.3di-opensim.com/openviewer/ie_install.html </a></p>
<p>The ActiveX bar will appear, click Install</p>
<p>FF Users:<strong> </strong></p>
<p>Go to <a title="3Di OpenViewer for Firefox" href="http://3di-opensim.com/openviewer/ff_install.html" target="_blank">http://3di-opensim.com/openviewer/ff_install.html</a></p>
<p>Click on the orange button with the arrow to download and install the plugin.</p>
<p>Step 2.</p>
<p>The installer will appear.</p>
<p><img src="http://www.3di-opensim.com/images/plugin/p_install06.jpg" alt="3Di OpenViewer Installer screen 1" /></p>
<p>The first screen is only an introduction. It asks you to close other applications before clicking next. The left button says Next, the right one is Cancel.</p>
<p><img src="http://www.3di-opensim.com/images/plugin/p_install07.jpg" alt="3Di OpenViewer Installer screen 2" /></p>
<p>The second screen is the EULA. I won&#8217;t try to translate it to english, you can get a raw English version by pushing this through any online translation service. The long and the short of it was summarized in these two sentences:</p>
<p>1) No commercial use<br />
2) No reverse engineering</p>
<p>The first radio button says Agree, the second says Disagree. Again the buttons are Back, Next and Cancel in that order. I guess it is pretty difficult to Agree with something you can&#8217;t read (I always feel that way in Japan <img src='http://zaki.asia/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ). There are no traps in there and as long as you don&#8217;t use it to become a millionaire celebrity without 3Di&#8217;s consent, you should be alright. (If you happen to be a millionaire celebrity already, you should definitely contact us <img src='http://zaki.asia/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )</p>
<p><img src="http://www.3di-opensim.com/images/plugin/p_install08.jpg" alt="3Di OpenViewer Installer screen 3" /></p>
<p>The next screen has three buttons saying Back, Install and Cancel respectively. After clicking Install, it will start the automatic install process. When it finishes, you can click on the Finish button on the next screen.</p>
<p><strong>How do I embed the Viewer on a web page?</strong></p>
<p>If you just want to try the viewer out, you can head to this page: <a title="3Di OpenViewer test page" href="http://zaki.asia/3di/ov/index.html" target="_blank">http://zaki.asia/3di/ov/index.html</a></p>
<p>You can of course see (and therefore use yourself) the HTML and JS codes that are used to embed the viewer. Please keep in mind though that 3Di is just about to make these available officially (and more conveniently) very soon as well.</p>
<p>You can see some details about changing the login behavior from javascript here: <a title="3Di OpenViewer feature focus - Login" href="http://zaki.asia/?p=46" target="_self">http://zaki.asia/?p=46</a></p>
<p><strong>Is it possible to use 3Di OpenViewer in English?</strong></p>
<p>This question is asked many times lately, so here&#8217;s a short guide on how to do it. Please do note, that this is sort of a pre-release thing, that might in some places be a little rough around the edges. And if you find any leftover Japanese text after the switch, do let me know.</p>
<p>When you install the viewer, and open a page with the viewer embedded, it will appear in default Japanese locale, but it is possible to change this to English. There are two ways to do it: you can log in to an OpenSim grid with the Japanese version and change the locale from the menu, or you could change the configuration file to make the viewer appear in English from the first login page. Either method you choose, you will have to start the viewer at least once (to initialize the necessary directories and configuration files).</p>
<p>Method 1 &#8211; Using the menu<br />
<img src="/images/openviewer_login_jp.jpg" alt="3Di OpenViewer login Japanese" /><br />
Using the login screen, specify the login URI, first name, last name and password in that order, then click on the button to log in.<br />
<img src="/images/openviewer_settings_jp.jpg" alt="3Di OpenViewer settings Japanese" /><br />
After you log in, move the cursor towards the upper right corner until the menu appears. Click on the wrench icon to go to settings. The last selectbox on the first tab is the locale, you should select the first option and press OK. A dialog will appear telling you that the settings will be effective after you restart the viewer. Do so, and the UI will appear in English now.<br />
<img src="/images/openviewer_login_en.jpg" alt="3Di OpenViewer login English" /></p>
<p>Method 2 &#8211; Changing the configuration file</p>
<p>After you start the viewer, the configuration file will be created in your local settings directory. On XP, this will be in Documents and Settings/&lt;username&gt;/Local Settings/Application Data/3Di/OpenViewer/, while on Vista and Win7, this will be in Users/&lt;username&gt;/AppData/LocalLow/3Di/OpenViewer</p>
<p>Open the file in configs/ called OpenViewer.ini and change <em>locale</em> to en</p>
<p>locale = en</p>
<p>Start the viewer again and it should be in English now.</p>
<p><strong>Can I connect to OpenSim grids?</strong></p>
<p>The short answer is &#8216;yes&#8217;. The long answer is &#8216;yes, but&#8217;. You can definitely log in to OpenSim grids with the current release version and prims will display. However textures and the avatar will not currently appear. The reason for this is that assets are not downloaded through the region server. We are working on a fully compatible version that we will release in the future, but for the moment to get the full experience, unfortunately you will have to connect to 3Di&#8217;s servers. We are also preparing more demo servers, but I have to ask for just a little more patience on that.</p>
<p>If you try 3Di OpenViewer, your feedback is always appreciated.</p>
]]></content:encoded>
			<wfw:commentRss>http://zaki.asia/2009/08/19/how-to-install-and-use-3di-openviewer/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>FreeSWITCH, OpenSim and the G722.1C codec</title>
		<link>http://zaki.asia/2009/05/18/freeswitch-opensim-and-the-g7221c-codec/</link>
		<comments>http://zaki.asia/2009/05/18/freeswitch-opensim-and-the-g7221c-codec/#comments</comments>
		<pubDate>Mon, 18 May 2009 08:48:53 +0000</pubDate>
		<dc:creator>Zaki</dc:creator>
				<category><![CDATA[OpenSim]]></category>
		<category><![CDATA[freeswitch]]></category>
		<category><![CDATA[slvoice]]></category>
		<category><![CDATA[voice chat]]></category>
		<category><![CDATA[voip]]></category>
		<category><![CDATA[voipforvw]]></category>

		<guid isPermaLink="false">http://zaki.asia/?p=79</guid>
		<description><![CDATA[Kai Ludwig has recently left a very valuable comment (thank you, Kai):
Actually the new FreeSwitch siren14 codec has never been used with SLVoice! Everybody having voicechat with OpenSim is using PCMU without knowing it.
Actually I didn&#8217;t realize that at first either, but after he pointed this out, I started looking for a way to be [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.talentraspel.de/" target="_blank">Kai Ludwig</a> has recently left a very valuable <a href="  http://zaki.asia/?p=41&amp;cpage=1#comment-760" target="_self">comment</a> (thank you, Kai):</p>
<blockquote><p>Actually the new FreeSwitch siren14 codec has never been used with SLVoice! Everybody having voicechat with OpenSim is using PCMU without knowing it.</p></blockquote>
<p>Actually I didn&#8217;t realize that at first either, but after he pointed this out, I started looking for a way to be able to use siren14. I haven&#8217;t really come up with a way to use the SLVoice.exe included with the SecondLife viewer, rather, I modified the <a href="https://sourceforge.net/projects/voipforvw/" target="_blank">voipforvw</a> codes to support it. Voice quality is now way better than the stock PCMU.<br />
<img src="http://zaki.asia/images/freeswitch_g7221c.jpg" alt="Connecting to FreeSWITCH with G722.1" width="100%" /></p>
<p>In the near future, I intend to make a post on how to use voipforvw with FreeSWITCH.</p>
]]></content:encoded>
			<wfw:commentRss>http://zaki.asia/2009/05/18/freeswitch-opensim-and-the-g7221c-codec/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How to compile Voipforvw&#8217;s SLVoice</title>
		<link>http://zaki.asia/2009/05/10/how-to-compile-voipforvws-slvoice/</link>
		<comments>http://zaki.asia/2009/05/10/how-to-compile-voipforvws-slvoice/#comments</comments>
		<pubDate>Sat, 09 May 2009 16:18:08 +0000</pubDate>
		<dc:creator>Zaki</dc:creator>
				<category><![CDATA[OpenSim]]></category>
		<category><![CDATA[slvoice]]></category>
		<category><![CDATA[voice chat]]></category>
		<category><![CDATA[voip]]></category>
		<category><![CDATA[voipforvw]]></category>

		<guid isPermaLink="false">http://zaki.asia/?p=67</guid>
		<description><![CDATA[What is Voipforvw?
With the SecondLife viewer comes an executable named SLVoice.exe. This is the piece of software that is responsible for the &#8220;low level&#8221; voice communication, so while the viewer does the accounting (login information, UI), this part does all the heavy lifting of contacting the voice servers and of  course translating the voice of [...]]]></description>
			<content:encoded><![CDATA[<h3>What is Voipforvw?</h3>
<p>With the SecondLife viewer comes an executable named SLVoice.exe. This is the piece of software that is responsible for the &#8220;low level&#8221; voice communication, so while the viewer does the accounting (login information, UI), this part does all the heavy lifting of contacting the voice servers and of  course translating the voice of the speaker to RTP packets and back. The long and the short of it is that <a href="http://sourceforge.net/projects/voipforvw/" target="_blank">voipforvw</a> (voip for virtual worlds) is a snap-in replacement for this executable that communicates with the viewer and as you&#8217;d guess, does the heavy lifting and coding/decoding. The core of this application was originally developped by <a href="http://www.3di.jp/en/index.html" target="_blank">3Di</a> (more specifically sempuki, who in the meantime left for greener pastures and skiryu, who is now the CEO of the startup <a href="http://www.magicalim.com/home_en.html" target="_blank">Magical Implements</a>) I came to the project around August 2008 and was working, among others, on this project with skiryu until about October 2008, when the internal priorities changed, so for a very long time we didn&#8217;t have the time to maintain voipforvw. Now here we are in May 2009 and I hope that with the new FreeSWITCH module for OpenSim working (mostly), attention might come back to voice and thus voipforvw. At 3Di, internally we are also increasing the amount and quality of community activity compared to last year (before we shifted temporarily to a shipping-oriented mindset), so we will have more time to work on and share various projects like this.</p>
<h3>But why should I care about it?</h3>
<p>The thing is, that the original SLVoice was developped for Linden Labs by a company named <a href="http://www.vivox.com/" target="_blank">Vivox</a> and is of a proprietary license. The good news is, that it is insanely high quality (it runs on a couple of plaftorms and powers virtual worlds like SecondLife or games like EVE Online) with ready-made 3D positional audio. The bad news is that it&#8217;s proprietary to the point that you are explicitly disallowed from using it for OpenSim. From the <a href="http://www.vivox.com/open/faq.php" target="_blank">FAQ</a> on vivox&#8217;s home page says:</p>
<blockquote><p><strong>Can I distribute this to friends?</strong><br />
No, currently Vivox software and service is offered for individual, non-commercial use only.</p></blockquote>
<blockquote><p><strong>Can I use this outside of Second Life?</strong><br />
No, the currently offered software is only available for the Second Life Viewer open source community.</p></blockquote>
<p>Tough luck if you are a commercial entity who wants to provide a VoIP solution for your customers based on OpenSim.</p>
<p>I was pretty surprised that outside 3Di (and to be self-critical, for a long time even inside 3Di &#8211; even if it&#8217;s for a <a href="http://3di-opensim.com/" target="_blank">reason</a>) nobody really cared about this project and that voice patches were not accepted becase of a base64 encoded UUID (that by the way works the same way in the new FreeSWITCH module that was committed by the same person). My hope is that more developers from the community can join to the project in the future and help clean up the relative mess it is in right now.</p>
<h3>What&#8217;s the catch?</h3>
<p>Well, unfortunately there <strong>is</strong> a catch. The license of the SIP/RTP stack used in vopforvw is GPL. This has a simple effect on the whole project, that is, voipforvw automatically becomes GPL. Unfortunately currently there is no good library that comes with a BSD-like license, the closest we can get is LGPL. (If you happen to know of one, please do let me know in the comments). While I&#8217;m a fan of C#, there is basically no free SIP/SDP library of any license for C# either.</p>
<p>Second, at the moment noone is maintaining the Linux version: in theory it should compile just OK, but that is not something I&#8217;d personally guarantee. I will try to look into that later.</p>
<h3>But it&#8217;s sooooo difficult to use.</h3>
<p>I&#8217;ve heard this argument for quite some time: it is probably my failure to do zilch about it so far and i guess being busy (look up the japanese word karoushi) for the last half a year or so is no excuse, so I will try to make amends now. Compiling the SLVoice replacement is not really that difficult. If you have problems with building, take a look at the screencast below and see if it can help fixing your problem. And of course, you can leave comments here (sorry, I am not really monitoring the sourceforge project forum)</p>
<p><strong>Please note:</strong> trunk contains a version that only works with SLViewer versions below 1.22 (1.19, 1.20 and 1.21 were tested). For 1.22, I started a branch named sl_1.22 that contains an updated version that &#8211; in turn &#8211; only works with 1.22. As I am not allowed to look at the viewer&#8217;s source code, many thanks go to yk, who described the major API changes to me. Unfortunately this also means, that I can&#8217;t guarantee that the 1.22 version works properly. At least I had success making conferences work with that branch, but further testing will be needed for that branch to be integrated back into trunk.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/snEyl-hLhVo&amp;hl=en&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/snEyl-hLhVo&amp;hl=en&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h3>What will I need?</h3>
<p>You will need voipforvw, that you can check out from sourceforge.net:</p>
<pre class="brush: bash;">
svn co https://voipforvw.svn.sourceforge.net/svnroot/voipforvw voipforvw
</pre>
<p>Next, you will need <a href="http://www.boost.org/" target="_blank">boost</a>, <a href="http://curl.haxx.se/download.html" target="_blank">curl</a> and <a href="http://www.pjsip.org/download.htm" target="_blank">pjsip</a>. The versions that I was using are 1.39, 7.19.4 and 1.0.2 respectively. For PjSIP, 1.x series will currently not work due to API changes.</p>
<p>For compiling on Windows, you will also need the Platform SDK and DirectX SDK. Voipforvw uses <a href="http://www.cmake.org/cmake/resources/software.html" target="_blank">CMake</a> for its configuration too.</p>
<h4>Step 1. Compile dependencies</h4>
<p>Set up (if you haven&#8217;t already) the platform SDK and DirectX SDK folders in Visual Studio.</p>
<p>Compile boost with bjam. To build bjam first, just run build.bat, which creates bjam.exe; use that in the boost directory with the following commandline:</p>
<pre class="brush: bash;">
#
#
#
bjam --toolset=msvc link=static runtime-link=static threading=multi --with-thread stage
</pre>
<p>To compile cURL, open the solution file, change the build type to Release and set the Runtime Library to Multithreaded (/MT). These changes are necessary, because we will be using multiple boost state machines from a multithreaded environment. Build only libcurl.</p>
<p>PjSIP will need you to move the file  pjlib/include/pj/config_site_sample.h into config_site.h No changes are necessary to this file, the defaults will work fine.</p>
<p>Open  pjproject-vs8.sln (and convert it as needed) set it to Release and build the solution.</p>
<h4>Step 2: Configure and build voipforvw</h4>
<p>Next, go to the voipforvw trunk and edit CMakeLists.txt You will need to change the paths for PJDIR, CURLDIR and BOOSTDIR. Don&#8217;t use backslashes, replace them with forward slashes. The CURLLIBS variable needs to be changed from curllib.lib to libcurl.lib.</p>
<p>Open up CMake-gui and set the source directory to the voipforvw trunk. The output directory can be the same. Hit Configure (it will probably complain about backwards compatibility, but just ignore it and hit Configure again). If configuring goes well, there will be no red lines in the config window. Hit Generate, that will ask for the format of the solution file, choose the Visual Studio version you have and click OK. This creates the main solution file.</p>
<p>After opening this solution, there are three things you will need to check: first, set the build type to Release. Next check that the Runtime Library is Multithreaded (/MT) to match the other libraries and finally, LIBCMT will have to be removed from the libraries (because it conflicts with MSVCRT). Now you can build SLVoice.exe that you can use as a replacement for the vivox solution.</p>
<h4>Debug</h4>
<p>You probably noticed that we are building everything in Release mode. That&#8217;s fine as long as it works, but sometimes you will want to debug (hopefully less often). In this case you will need to change the Runtime Library to /MTd for PjSIP and voipforvw. Then CMakeLists.txt needs to be updated to reflect this by setting</p>
<p>SET (PJTARGET i386-win32-vc8-debug)</p>
<p>Where you remove the LIBCMT library, now you will have to do the same thing for both LIBCMT and LIBCMTD and you can build SLVoice.exe in debug mode.</p>
<p>If you only need logging to see what&#8217;s going on inside, you can change the code:</p>
<p>// CHANGE FILE: main.h:37<br />
#define LOG<br />
#ifdef LOG<br />
extern FILE *logfp;<br />
#define  VFVW_LOGINIT()  logfp = fopen(&#8220;test.log&#8221;, &#8220;a&#8221;)<br />
/*<br />
#define  VFVW_LOG(fmt, &#8230;)  fprintf(stderr, &#8220;[VFVW] %s:%d &#8211; &#8220;, __FILE__, __LINE__);	\<br />
fprintf(stderr, fmt, ## __VA_ARGS__);	\<br />
fprintf(stderr, &#8220;\r\n&#8221;)<br />
*/<br />
#define  VFVW_LOG(fmt, &#8230;)  fprintf(logfp, &#8220;[VFVW] %s:%d &#8211; &#8220;, __FILE__, __LINE__);	\<br />
fprintf(logfp, fmt, ## __VA_ARGS__);	\<br />
fprintf(logfp, &#8220;\r\n&#8221;);	\<br />
fflush(logfp)<br />
#else<br />
#define VFVW_LOGINIT()		void()<br />
#define VFVW_LOG(fmt, &#8230;)	void()<br />
#endif</p>
<p>//CHANGE FILE main.cpp:15<br />
#ifdef LOG<br />
FILE *logfp = NULL;<br />
#endif</p>
]]></content:encoded>
			<wfw:commentRss>http://zaki.asia/2009/05/10/how-to-compile-voipforvws-slvoice/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>3Di OpenViewer Feature Focus: Login</title>
		<link>http://zaki.asia/2009/05/01/3di-openviewer-feature-focus-login/</link>
		<comments>http://zaki.asia/2009/05/01/3di-openviewer-feature-focus-login/#comments</comments>
		<pubDate>Fri, 01 May 2009 07:04:03 +0000</pubDate>
		<dc:creator>Zaki</dc:creator>
				<category><![CDATA[OpenSim]]></category>
		<category><![CDATA[3Di OpenViewer]]></category>
		<category><![CDATA[feature focus]]></category>
		<category><![CDATA[login]]></category>

		<guid isPermaLink="false">http://zaki.asia/?p=46</guid>
		<description><![CDATA[3Di OpenViewer provides a number of ways to connect to a grid, let&#8217;s look at those in a little more detail.
Manual
Manual login is the normal way, that everyone using SecondLife/realXtend/Hippo/etc are already used to using. This mode will show a login box right within the application and will allow you to specify the login uri, [...]]]></description>
			<content:encoded><![CDATA[<p>3Di OpenViewer provides a number of ways to connect to a grid, let&#8217;s look at those in a little more detail.</p>
<h3>Manual</h3>
<p>Manual login is the normal way, that everyone using SecondLife/realXtend/Hippo/etc are already used to using. This mode will show a login box right within the application and will allow you to specify the login uri, the first and last name and password. You can set the default values with additional params as well.</p>
<pre class="brush: xml;">
&lt;param name=&quot;LoginMode&quot; value=&quot;manual&quot; /&gt;
&lt;!-- Optional --&gt;
&lt;param name=&quot;ServerURI&quot; value=&quot;http://1.2.3.4:10001&quot; /&gt;
&lt;param name=&quot;FirstName&quot; value=&quot;first&quot; /&gt;
&lt;param name=&quot;LastName&quot; value=&quot;last&quot; /&gt;
&lt;param name=&quot;Password&quot; value=&quot;password&quot; /&gt;
</pre>
<p><img src="/images/manual_login.jpg" alt="3Di OpenViewer manual login" /></p>
<h3>Click</h3>
<p>Click login is great if you want to specify all the information for  the login and not allow the user to change it in any way (for example dynamically creating the login page based on an already existing session information). In this case, the user can only see an empty screen with no login box; when they click on this screen, login starts automatically.</p>
<p>Of course in click mode, you will have to specify all the login information like above.</p>
<pre class="brush: xml;">
&lt;param name=&quot;LoginMode&quot; value=&quot;click&quot; /&gt;
</pre>
<p><img src="/images/hide_login.jpg" alt="3Di OpenViewer click login" /></p>
<h3>Hide</h3>
<p>Users can also use a JavaScript function to log in. Sometimes, it is better not to allow users to specify any information, but at the same time, login information can dynamically change at any time. In this case, you can set the login mode to hide, which will not show the login box, but also not allow login from within the application. Rather, it only allows JavaScript logins.</p>
<pre class="brush: xml;">
&lt;param name=&quot;LoginMode&quot; value=&quot;hide&quot; /&gt;
</pre>
<p>To log in from JavaScript, one can use the following function:</p>
<pre class="brush: jscript;">
openviewerCtl.Login(firstname,
                    lastname,
                    password,
                    server_uri,
                    login_location);
</pre>
<p>For the JavaScript login method, it is also possible to specify the exact location to log in to. The format is</p>
<pre class="brush: jscript;">
// " uri:regionname&amp;amp;x&amp;amp;y&amp;amp;z"
uri:region1&amp;amp;128&amp;amp;128&amp;amp;25
</pre>
]]></content:encoded>
			<wfw:commentRss>http://zaki.asia/2009/05/01/3di-openviewer-feature-focus-login/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
