<?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>The Park is Vast &#187; Open Source</title>
	<atom:link href="http://theparkisvast.com/VastPark/nerdy/open-source/feed/" rel="self" type="application/rss+xml" />
	<link>http://theparkisvast.com</link>
	<description></description>
	<lastBuildDate>Mon, 31 Oct 2011 18:44:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Open Avatar Introductory Video</title>
		<link>http://theparkisvast.com/2011/06/25/open-avatar-introductory-video/</link>
		<comments>http://theparkisvast.com/2011/06/25/open-avatar-introductory-video/#comments</comments>
		<pubDate>Fri, 24 Jun 2011 14:09:58 +0000</pubDate>
		<dc:creator>craigomatic</dc:creator>
				<category><![CDATA[Content]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[OpenAvatar]]></category>

	<!-- AutoMeta Start -->
	<category>openavatar</category>
	<category>avatars</category>
	<category>failure</category>
	<category>success</category>
	<category>discussion</category>
	<category>launch</category>
	<category>positive</category>
	<category>avatar</category>
	<category>openavatar</category>
	<category>avatars</category>
	<category>failure</category>
	<category>success</category>
	<category>discussion</category>
	<category>launch</category>
	<category>positive</category>
	<category>avatar</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://theparkisvast.com/?p=663</guid>
		<description><![CDATA[At the beginning of June we launched Open Avatar, an initiative to create a framework artists could use when building avatars. By adhering to a convention, avatars, or parts of avatars, could become more portable across many different applications, produced by many different vendors. Recently a video was uploaded to vimeo that gives a nice [...]]]></description>
			<content:encoded><![CDATA[<p>At the beginning of June we <a href="http://www.vastpark.com/company/news/news-press/95-vastpark-launches-openavatar-sdk.html">launched</a> <a href="http://vastpark.org/projects/vp/wiki/OpenAvatar">Open Avatar</a>, an initiative to create a framework artists could use when building avatars.</p>
<p>By adhering to a convention, avatars, or parts of avatars, could become more portable across many different applications, produced by many different vendors.</p>
<p>Recently a video was uploaded to vimeo that gives a nice introduction to OpenAvatar and it&#8217;s purpose:</p>
<p><iframe src="http://player.vimeo.com/video/25552334?title=0&amp;byline=0&amp;portrait=0&amp;color=80ceff" width="580" height="326" frameborder="0"></iframe></p>
<p>Since the launch, we&#8217;ve had some positive feedback and a lot of interesting discussion. </p>
<p>If you&#8217;ve tried it out and have had some success (or failure) please let us know!</p>
]]></content:encoded>
			<wfw:commentRss>http://theparkisvast.com/2011/06/25/open-avatar-introductory-video/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Presentation: The Technology Behind VastPark</title>
		<link>http://theparkisvast.com/2011/06/11/presentation-the-technology-behind-vastpark/</link>
		<comments>http://theparkisvast.com/2011/06/11/presentation-the-technology-behind-vastpark/#comments</comments>
		<pubDate>Fri, 10 Jun 2011 14:40:29 +0000</pubDate>
		<dc:creator>craigomatic</dc:creator>
				<category><![CDATA[IMML]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[VastPark General]]></category>

	<!-- AutoMeta Start -->
	<category>paris</category>
	<category>cantine</category>
	<category>slideshare</category>
	<category>10th</category>
	<category>june</category>
	<category>presentation</category>
	<category>technology</category>
	<category>audience</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://theparkisvast.com/?p=652</guid>
		<description><![CDATA[Today I presented at La Cantine in Paris to both a real world audience and a virtual audience inside of VastPark. The presentation covered the technology that powers VastPark, where to find the open source code and the specifications such as IMML, Continuum, and the recently announced OpenAvatar. I also showed some live demonstrations of [...]]]></description>
			<content:encoded><![CDATA[<p>Today I presented at La Cantine in Paris to both a real world audience and a virtual audience inside of VastPark.</p>
<p>The presentation covered the technology that powers VastPark, where to find the open source code and the specifications such as IMML, Continuum, and the recently announced OpenAvatar. I also showed some live demonstrations of VastPark in action (the selective Continuum capture I did can be downloaded from <a href='http://theparkisvast.com/wp-content/uploads/2011/06/Retreat-2011-06-10-1031.continuum'>here</a>).</p>
<p>See the slideshare below, there was a lot of talking during the presentation so the slides may seem a little light on content. If you have questions about the slides feel free to comment and I will answer. </p>
<div style="width:595px" id="__ss_8271303"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/craigomatic/la-cantine-presentation-paris-10th-june-2011" title="La Cantine Presentation, Paris, 10th June 2011">La Cantine Presentation, Paris, 10th June 2011</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/8271303" width="595" height="497" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> </div>
]]></content:encoded>
			<wfw:commentRss>http://theparkisvast.com/2011/06/11/presentation-the-technology-behind-vastpark/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Pianist v2</title>
		<link>http://theparkisvast.com/2011/04/15/the-pianist-v2/</link>
		<comments>http://theparkisvast.com/2011/04/15/the-pianist-v2/#comments</comments>
		<pubDate>Fri, 15 Apr 2011 04:29:51 +0000</pubDate>
		<dc:creator>craigomatic</dc:creator>
				<category><![CDATA[IMML]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Audio]]></category>
		<category><![CDATA[Behaviours]]></category>
		<category><![CDATA[Continuum]]></category>
		<category><![CDATA[Recording]]></category>
		<category><![CDATA[Roland HP1300e]]></category>
		<category><![CDATA[Virtual Piano]]></category>

	<!-- AutoMeta Start -->
	<category>piano</category>
	<category>sound</category>
	<category>behaviours</category>
	<category>csharp</category>
	<category>pianist</category>
	<category>played</category>
	<category>parkengine</category>
	<category>visually</category>
	<category>piano</category>
	<category>sound</category>
	<category>behaviours</category>
	<category>csharp</category>
	<category>pianist</category>
	<category>played</category>
	<category>parkengine</category>
	<category>visually</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://theparkisvast.com/?p=588</guid>
		<description><![CDATA[Back in April of 2007 I was inspired to build a virtual piano in VastPark, you can read the super brief post about it here. At the time, I was pretty happy with the way it turned out and recently decided it was time for it to make a comeback! How it works This time [...]]]></description>
			<content:encoded><![CDATA[<p>Back in April of 2007 I was inspired to build a virtual piano in VastPark, you can read the super brief post about it <a href="http://theparkisvast.com/2007/04/18/the-pianist-v10/">here</a>. </p>
<p>At the time, I was pretty happy with the way it turned out and recently decided it was time for it to make a comeback!</p>
<p><a href="http://theparkisvast.com/wp-content/uploads/2011/04/the-pianist-v2.jpg" rel="lightbox"><img src="http://theparkisvast.com/wp-content/uploads/2011/04/the-pianist-v2.jpg" alt="" title="the-pianist-v2" width="836" height="499" class="alignnone size-full wp-image-590" /></a></p>
<h4>How it works</h4>
<p>This time around I decided to do things a little differently and shift all of the logic to a single .NET plugin that controls the entire piano experience. </p>
<p>While this has a number of benefits, I was primarily interested in keeping the structure of the environment cleanly separated from the logic.</p>
<p>To keep this separation simple, I made use of a little known feature of IMML called behaviours. Here&#8217;s a sample of my IMML:</p>
<pre class="brush: xml; highlight: [20,26]; title: ; notranslate">&lt;IMML Name=&quot;The Pianist v2&quot; Camera=&quot;camera&quot; xmlns=&quot;http://schemas.vastpark.com/2007/imml/&quot;&gt;

  &lt;!-- The plugin manages all interaction with the piano via behaviours --&gt;
  &lt;Plugin Name=&quot;PianoPlugin&quot; Enabled=&quot;True&quot; Source=&quot;plugins/Piano.plugin&quot;&gt;
    &lt;Parameter Key=&quot;HighlightColour&quot; Value=&quot;#00FF00&quot; /&gt;
    &lt;Parameter Key=&quot;RotationWhenPressed&quot; Value=&quot;0.03120605, 0, 0&quot; /&gt;
  &lt;/Plugin&gt;

  &lt;Model Name=&quot;black_piano&quot;
         Size=&quot;1.193525,1.065062,0.524349&quot;
         Rotation=&quot;6.283185,0,0&quot;
         Position=&quot;4.76837E-07,1.63393E-08,0.111626&quot;
         Source=&quot;models/black_piano.model&quot; /&gt;

  &lt;!-- Piano key models --&gt;
  &lt;Model Name=&quot;key_b_8&quot;
         Size=&quot;0.01918364,0.02875674,0.1308559&quot;
         Rotation=&quot;6.283185,0,0&quot;
         Position=&quot;-0.4839502,0.8194631,0.2247874&quot;
         Behaviours=&quot;piano-key&quot;
         Source=&quot;models/white_key1.model&quot; /&gt;
  &lt;!-- other models snipped for brevity --&gt;

  &lt;!-- Piano sounds --&gt;
  &lt;Sound Name=&quot;note_b_8&quot;
         Behaviours=&quot;piano-key-sound&quot;
         Source=&quot;sounds/pianokey_b_8.mp3&quot; /&gt;
  &lt;!-- other sounds snipped for brevity --&gt;

&lt;/IMML&gt;</pre>
<p>Note the usage of the piano-key and piano-key-sound behaviours. </p>
<p>Also, I&#8217;ve only shown one model and one sound, the actual file contains 88 of each named according to a convention so that the appropriate sound can be mapped.</p>
<h4>Using Behaviours</h4>
<p>Every IMML element has the ability to be marked as having one or more behaviours that can be accessed as a list via the DOM.</p>
<p>This is extremely handy when writing plugins that manipulate elements, as you can simply query the scene for elements that match the desired behaviours like so:</p>
<pre class="brush: csharp; title: ; notranslate">
//find all audio and models based on behaviour
var keyModels = base.ParkEngine.Context.Elements.Where(e =&gt; e.Behaviours.Contains(this.KeyModelBehaviour));
var keySounds = base.ParkEngine.Context.Elements.Where(e =&gt; e.Behaviours.Contains(this.KeySoundBehaviour));

if(keyModels.Any())
{
    //build keys for each model/sound combination
}
</pre>
<p>This works really well during the <em>Load()</em> method and can also be performed on elements dynamically added into the scene by listening to the <em>ParkEngine.ElementLoaded</em> event</p>
<p>In the context of the-pianist, it finds all elements of type <em>piano-key</em> and <em>piano-key-sound</em> and builds a PianoKey instance to manage them so that:</p>
<ul>
<li>When the mouse is down, the key is visually down, highlighted and the sound plays.</li>
<li>When the mouse is up, the key is visually up.</li>
<li>When the sound is no longer playing, the key is no longer highlighted</li>
</ul>
<h4>Continuum</h4>
<p>Next, I wanted to make sure that the work my plugin was doing would be correctly captured by Continuum. By default, Continuum will happily capture any series of changes in IMML state, so this initially didn&#8217;t seem like it would be a concern. </p>
<p>However, in my implementation of the Piano plugin I wanted to allow the same key to be pressed while the previous sound for that key was still playing. Just like a real piano.</p>
<p>To do this, I&#8217;ve been a little sneaky by going directly to the sound engine, bypassing the IMML change notification infrastructure which means that Continuum doesn&#8217;t see that change and cannot record it without some additional help.</p>
<p>You can see the two contrasting approaches below:</p>
<pre class="brush: csharp; title: ; notranslate">
//toggle approach
this.Audible.Enabled = true;

//direct approach, bypass the IMML change framework
this.ParkEngine.SoundEngine.Play(this.Audible);
</pre>
<p>To overcome this limitation, I wrote an implementation of IStateRecorder for my plugin with one very simple method:</p>
<pre class="brush: csharp; title: ; notranslate">
/// &lt;summary&gt;
/// Marks the sound as being played directly by the SoundEngine.
/// &lt;/summary&gt;
/// &lt;param name=&quot;sound&quot;&gt;The sound.&lt;/param&gt;
public void MarkSoundPlayed(Sound sound)
{
        if (!this.IsStarted)
        {
            return;
        }

        var captureState = new PianoCaptureState(Encoding.ASCII.GetBytes(sound.Name), Constants.Guid, DateTime.UtcNow, 0);

        this.Buffer.Enqueue(captureState);
}
</pre>
<p>It takes the name of the element that was played directly and writes it into the Continuum stream. </p>
<p>Later during playback, that element is resolved and at the appropriate time is played directly by the PianoStateController.</p>
<h4>Goodies</h4>
<p>I&#8217;ve zipped up the full source code to Plugin.Piano, along with the IMML and models you see in the screenshot at the beginning of this post. </p>
<p>Download here: <a href="http://tpiv.s3.amazonaws.com/the-pianist-v2.7z">http://tpiv.s3.amazonaws.com/the-pianist-v2.7z</a></p>
<p>Note that In order to run this properly, you&#8217;ll need to be a member of the Closed Beta community on <a href="http://vastpark.org">vastpark.org</a> (contact me if you&#8217;d like in) and be rocking Player v1.5.2 build 92 or newer.</p>
<p><strong>Update:</strong> <em>A more recent version of the-pianist IMML is available <a href='http://theparkisvast.com/wp-content/uploads/2011/04/the-pianist.zip'>here</a>. </p>
<p>Simply unzip into the hosting root directory of your WorldServer to host.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://theparkisvast.com/2011/04/15/the-pianist-v2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Continuum v2 &#8211; Open Capture Framework</title>
		<link>http://theparkisvast.com/2011/03/28/continuum-v2-open-capture-framework/</link>
		<comments>http://theparkisvast.com/2011/03/28/continuum-v2-open-capture-framework/#comments</comments>
		<pubDate>Sun, 27 Mar 2011 14:55:32 +0000</pubDate>
		<dc:creator>craigomatic</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Capture]]></category>
		<category><![CDATA[Continuum]]></category>
		<category><![CDATA[IMML]]></category>
		<category><![CDATA[Open Specification]]></category>
		<category><![CDATA[Record]]></category>

	<!-- AutoMeta Start -->
	<category>istaterecorder</category>
	<category>istatecontroller</category>
	<category>stream</category>
	<category>continuum</category>
	<category>buffer</category>
	<category>header</category>
	<category>state</category>
	<category>states</category>
	<category>istaterecorder</category>
	<category>istatecontroller</category>
	<category>stream</category>
	<category>continuum</category>
	<category>buffer</category>
	<category>header</category>
	<category>state</category>
	<category>states</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://theparkisvast.com/?p=515</guid>
		<description><![CDATA[Continuum is an open framework designed to read and write changes in state. It supports forward and backwards playback and random seek and is designed to be streamed over a network. The data is captured in a format that can be reused, replayed, repurposed and investigated in much further detail than the flat view provided [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://theparkisvast.com/wp-content/uploads/2011/03/continuum.jpg" rel="lightbox"><img src="http://theparkisvast.com/wp-content/uploads/2011/03/continuum.jpg" alt="" title="continuum" width="349" height="195" class="alignnone size-full wp-image-522" /></a></p>
<p>Continuum is an open framework designed to read and write changes in state. It supports forward and backwards playback and random seek and is designed to be streamed over a network. The data is captured in a format that can be reused, replayed, repurposed and investigated in much further detail than the flat view provided by a video capture.</p>
<p>While in VastPark we use Continuum for &#8220;deep recording&#8221; the scene, it can have other uses outside of virtual worlds also. </p>
<p>I can think of many industries (ie: finance, manufacture, emergency services) where being able to capture a series of events for analysis later is of great benefit.</p>
<h4>Continuum v1</h4>
<p>In v1, Continuum was limited to captures of IMML states; any time an element was added, removed or updated, a corresponding Continuum entry would be generated and added into a filestream.</p>
<p>This made it possible to record what was going on inside of the virtual world both client and server side, as initially everything being used by world developers was IMML based.</p>
<p>Unfortunately, v1 came with a number of limitations due to it&#8217;s ties with IMML:</p>
<ul>
<li>Live audio/video were not able to be captured as they aren&#8217;t static resources and the IMML just pointed to the stream. Playback of the Continuum file later would end up seeing different video/audio than when it was recorded. Or even worse, the stream no longer exists as is often the case with live events.</li>
<li>Custom texture manipulation could not be captured as it skips the IMML layer and writes directly to the texture</li>
<li>Custom animation (LIXA) uses direct bone manipulation which also skips the IMML layer</li>
</ul>
<p>These limitations and others became quite frustrating, as additional features being added to the worlds platform often didn&#8217;t make sense to integrate into IMML and as a result could not be recorded easily.</p>
<h4>Continuum v2</h4>
<p>With v2, lessons have been learned and some major changes to the way Continuum works have been made. </p>
<p>Most notably:</p>
<ul>
<li>API for building custom state types</li>
<li>Support for an almost infinite (~2 billion) number of arbitrary state types per stream</li>
<li>Support for compressed and/or encrypted states</li>
<li>Concurrent playback of multiple streams on a single timeline</li>
<li>Concurrent record of states into the one stream</li>
</ul>
<p>The design for v2 is a complete overhaul of v1 and revolves around the concept of state controllers and recorders. These constructs work against capture state instances, which is what a Continuum stream is composed of.</p>
<p>The header of a v2 Continuum stream looks like this:</p>
<p><a href="http://theparkisvast.com/wp-content/uploads/2011/03/Continuum-v2-Header.png" rel="lightbox"><img src="http://theparkisvast.com/wp-content/uploads/2011/03/Continuum-v2-Header.png" alt="" title="Continuum-v2-Header" width="879" height="430" class="alignnone size-full wp-image-543" /></a></p>
<p>Of note is the inclusion of the State Allocation Table (or SAT) which provides the glue between the custom state types and a stream. Each state controller has a GUID that the stream stores alongside an internal stream identifier:</p>
<p><a href="http://theparkisvast.com/wp-content/uploads/2011/03/Continuum-v2-SAT.png" rel="lightbox"><img src="http://theparkisvast.com/wp-content/uploads/2011/03/Continuum-v2-SAT.png" alt="" title="Continuum-v2-SAT" width="881" height="569" class="alignnone size-full wp-image-546" /></a></p>
<p>The body of a Continuum stream contains sequential blocks of capture states. Each state node is self contained and stores an array of bytes:</p>
<p><a href="http://theparkisvast.com/wp-content/uploads/2011/03/Continuum-v2-CaptureState.png" rel="lightbox"><img src="http://theparkisvast.com/wp-content/uploads/2011/03/Continuum-v2-CaptureState.png" alt="" title="Continuum-v2-CaptureState" width="997" height="400" class="alignnone size-full wp-image-550" /></a></p>
<h4>Source Code</h4>
<p>Find the code under the Continuum and Continuum.Imml folders <a href="http://vastpark.svn.cvsdude.com/common/trunk/src/">here</a>.</p>
<p>If you&#8217;d like to have a go at building your own capture types, you really only need to play with two interfaces, IStateController and IStateRecorder which are fed into the StateRegistry and the CaptureService respectively.</p>
<p>They look like this:</p>
<p><a href="http://theparkisvast.com/wp-content/uploads/2011/03/Continuum-v2-IStateRecorder.png" rel="lightbox"><img src="http://theparkisvast.com/wp-content/uploads/2011/03/Continuum-v2-IStateRecorder.png" alt="" title="Continuum-v2-IStateRecorder" width="259" height="205" class="alignnone size-full wp-image-545" /></a></p>
<p><a href="http://theparkisvast.com/wp-content/uploads/2011/03/Continuum-v2-IStateController.png" rel="lightbox"><img src="http://theparkisvast.com/wp-content/uploads/2011/03/Continuum-v2-IStateController.png" alt="" title="Continuum-v2-IStateController" width="403" height="186" class="alignnone size-full wp-image-544" /></a></p>
<p>During a record, the buffer of the IStateRecorder is polled and written into the capture stream. Objects should be monitored for change and inserted into the buffer of the IStateRecorder at that time.</p>
<p>During playback, the Create and Execute methods of IStateController are used to recreate the state and then execute it at the appropriate time.</p>
<p>I&#8217;ll blog at a later date showing how to do this in more detail, along with taking Continuum in the other direction and integrating it into your own application outside of VastPark.</p>
]]></content:encoded>
			<wfw:commentRss>http://theparkisvast.com/2011/03/28/continuum-v2-open-capture-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recent changes to the VastPark SVN structure</title>
		<link>http://theparkisvast.com/2010/05/09/recent-changes-to-the-vastpark-svn-structure/</link>
		<comments>http://theparkisvast.com/2010/05/09/recent-changes-to-the-vastpark-svn-structure/#comments</comments>
		<pubDate>Sun, 09 May 2010 03:15:20 +0000</pubDate>
		<dc:creator>craigomatic</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[SVN]]></category>

	<!-- AutoMeta Start -->
	<category>repository</category>
	<category>legacy</category>
	<category>structure</category>
	<category>public</category>
	<category>branches</category>
	<category>longer</category>
	<category>external</category>
	<category>externals</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://theparkisvast.com/?p=268</guid>
		<description><![CDATA[Recently we decided to do some repository reorganisation to make life easier for new developers wanting to tinker with the open source code for VastPark. This involved quite a bit of thought and a substantial amount of effort to migrate towards (actually, we&#8217;re still in the process of migrating some of the code) but we [...]]]></description>
			<content:encoded><![CDATA[<p>Recently we decided to do some repository reorganisation to make life easier for new developers wanting to tinker with the open source code for VastPark. This involved quite a bit of thought and a substantial amount of effort to migrate towards (actually, we&#8217;re still in the process of migrating some of the code) but we are already seeing the benefits of a cleaner structure.</p>
<h3>The structure</h3>
<p><a href="http://theparkisvast.com/wp-content/uploads/2010/05/repository-structure.png" rel="lightbox"><img src="http://theparkisvast.com/wp-content/uploads/2010/05/repository-structure.png" alt="" title="repository-structure" width="691" height="472" class="alignright size-full wp-image-269" /></a></p>
<p>As you will notice from the image above, we&#8217;ve gone with a multi-repository approach. This has a number of benefits for us internally, such as less duplication of files, as well as for those externally in that we can lock the public repository to specific external revisions to avoid pushing out code which might break compatibility.</p>
<h4>Lib repository</h4>
<p>Contains mainly third party source and binaries that we make use of in the platform. </p>
<h4>Common repository</h4>
<p>Contains the public source code for the VastPark libraries as well as VastPark developed specifications such as IMML, Metaforik and Continuum</p>
<h4>Public repository</h4>
<p>Externals common and lib repositories and sample projects developers can use to understand how the system works. It&#8217;s recommended that external developers work off the public trunk</p>
<h3>Legacy code</h3>
<p>Two quick points on some legacy issues to be aware of:</p>
<ul>
<li>There are some orphaned branches in public that we plan to keep around for a little bit longer as we migrate code out of there and into the new structure, please avoid working against these branches as they won&#8217;t be around for too much longer!</li>
<li>There are two legacy folders, legacy-slimdx and legacy that exist in the common repository. These libraries will slowly be dropped in favour of newer code that replaces the functionality within. We plan to be much more sane with the number of projects in future <img src='http://theparkisvast.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<h3>Getting the source</h3>
<p>Using a subversion client, SVN checkout from:</p>
<p><a href="http://vastpark.svn.cvsdude.com/public/trunk/">http://vastpark.svn.cvsdude.com/public/trunk/</a></p>
<p><strong>Be sure to enable externals</strong> or you will find only a fraction of the source code will be downloaded.</p>
<p>Happy coding! I&#8217;m interested to hear how simple it is to get up and running with the source code. Comments both positive and negative are welcomed on this.</p>
]]></content:encoded>
			<wfw:commentRss>http://theparkisvast.com/2010/05/09/recent-changes-to-the-vastpark-svn-structure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flocking algorithm in VastPark</title>
		<link>http://theparkisvast.com/2010/04/13/flocking-algorithm-in-vastpark/</link>
		<comments>http://theparkisvast.com/2010/04/13/flocking-algorithm-in-vastpark/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 03:47:26 +0000</pubDate>
		<dc:creator>craigomatic</dc:creator>
				<category><![CDATA[IMML]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Boids]]></category>
		<category><![CDATA[Flocking]]></category>

	<!-- AutoMeta Start -->
	<category>flocking</category>
	<category>boids</category>
	<category>boids</category>
	<category>implement</category>
	<category>algorithm</category>
	<category>rule</category>
	<category>enjoy</category>
	<category>cool</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://theparkisvast.com/?p=236</guid>
		<description><![CDATA[Many months ago during May of 09, after meeting Ian Hughes at FCVW, I came across an interesting post on his blog discussing an implementation of the flocking algorithm in Unity. I&#8217;d not heard of the term flocking or boids, so proceeded to get stuck into some research, which lead me to Conrad Parker&#8217;s page [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://theparkisvast.com/wp-content/uploads/2010/04/flocking.jpg" rel="lightbox"><img src="http://theparkisvast.com/wp-content/uploads/2010/04/flocking.jpg" alt="" title="flocking" width="242" height="150" class="alignright size-full wp-image-255" /></a></td>
<p>Many months ago during May of 09, after meeting Ian Hughes at <a href="http://www.ndu.edu/IRMC/fedconsortium.html">FCVW</a>, I came across an <a href="http://www.feedingedge.co.uk/blog/2009/05/11/flocking-brilliant-fill-in-own-joke-here/">interesting post</a> on his blog discussing an implementation of the <a href="http://www.red3d.com/cwr/boids/">flocking algorithm</a> in Unity. </p>
<p>I&#8217;d not heard of the term flocking or boids, so proceeded to get stuck into some research, which lead me to Conrad Parker&#8217;s page on <a href="http://www.vergenet.net/~conrad/boids/pseudocode.html">Boids Pseudocode</a> as well as many others who had implemented the algorithm, I figured it would be a fun little plugin to write for VastPark so gave it a try.</p>
<h4>Implementing the algorithm</h4>
<p>Thinking about what was required, I came up with the following as the plan for the plugin:</p>
<ul>
<li>Any IPositionalElement (Model, Primitive, Sound, Camera, Light, etc) would be supported</li>
<li>Implement Rule 1 &#8211; &#8220;Boids try to fly towards the centre of mass of neighbouring boids&#8221;</li>
<li>Implement Rule 2 &#8211; &#8220;Boids try to keep a small distance away from other objects (including other boids)&#8221;</li>
<li>Implement Rule 3 &#8211; &#8220;Boids try to match velocity with near boids&#8221;</li>
<li>For bonus points I&#8217;d implement &#8220;Tendency towards a particular place&#8221;, &#8220;Limiting the speed&#8221;, &#8220;Bounding the position&#8221;, &#8220;Perching&#8221; and &#8220;Scattering the flock&#8221;</li>
</ul>
<p>In terms of the plugin this translates into these properties:</p>
<ul>
<li>SmallDistance</li>
<li>MaxVelocity</li>
<li>MinVelocity</li>
<li>EnableBounds</li>
<li>MaxBounds</li>
<li>MinBounds</li>
<li>EnablePerching</li>
<li>MinPerchTime</li>
<li>MaxPerchTime</li>
<li>PerceivedCentre (get only)</li>
</ul>
<p>The following callbacks:</p>
<ul>
<li>ElementPerched</li>
<li>ElementLeftPerch</li>
</ul>
<p>The following methods:</p>
<ul>
<li>SetPointOfInterest</li>
<li>AddPlaceToAvoid</li>
<li>AddPerch</li>
<li>Scatter</li>
</ul>
<p>The class diagrams look like this:<br />
<a href="http://theparkisvast.com/wp-content/uploads/2010/04/flocking-plugin-class-diagram.png" rel="lightbox"><img src="http://theparkisvast.com/wp-content/uploads/2010/04/flocking-plugin-class-diagram.png" alt="" title="flocking-plugin-class-diagram" width="619" height="523" class="aligncenter size-full wp-image-243" /></a></p>
<h4>How does it work?</h4>
<p>Put quite simply, the plugin works like this:</p>
<ul>
<li><em>AddElement(ImmlElement element)</em> creates a boid instance for the positional element passed</li>
<li>The plugin Update method (called once each update by the VastPark framework) proceeds to calculate the rules, one at a time for each boid to work out the new velocity and position for the element it represents</li>
<li>Scatter requests made during runtime are dealt with during the next update</li>
</ul>
<h4>Downloads</h4>
<p>Here is some sample IMML and the source code to the plugin, enjoy! Let me know if you decide to implement any of the other rules or do something cool with it <img src='http://theparkisvast.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Sample IMML: <a href='http://theparkisvast.com/wp-content/uploads/2010/04/flocking.imml'>flocking.imml</a><br />
Source code to plugin: <a href='http://theparkisvast.com/wp-content/uploads/2010/04/Plugin.Flocking.zip'>Plugin.Flocking.zip</a></p>
<p><strong>Note:</strong> The source code will probably complain about some missing references. Install the Player from <a href="http://www.vastpark.com">www.vastpark.com</a> and link against the relevant binaries included with it.</p>
]]></content:encoded>
			<wfw:commentRss>http://theparkisvast.com/2010/04/13/flocking-algorithm-in-vastpark/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Updated IMML for Stock Market Ticker</title>
		<link>http://theparkisvast.com/2010/02/17/updated-imml-for-stock-market-ticker/</link>
		<comments>http://theparkisvast.com/2010/02/17/updated-imml-for-stock-market-ticker/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 03:56:28 +0000</pubDate>
		<dc:creator>craigomatic</dc:creator>
				<category><![CDATA[IMML]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[stock market]]></category>
		<category><![CDATA[Yahoo]]></category>

	<!-- AutoMeta Start -->
	<category>define</category>
	<category>tooltip</category>
	<category>tooltipid</category>
	<category>tooltipplugin</category>
	<category>lines</category>
	<category>settext</category>
	<category>lasttradeprim</category>
	<category>mouse</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://theparkisvast.com/?p=208</guid>
		<description><![CDATA[I&#8217;ve made some adjustments to the stock ticker built as part of my building a stock ticker in vastpark post to take advantage of the new Tooltip Plugin and the Define element in IMML. Rather than going all out, I&#8217;ve simply added a tip that shows the volume for the current day when the mouse [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve made some adjustments to the stock ticker built as part of my <a href="http://theparkisvast.com/2009/01/12/building-a-stock-market-ticker-in-vastpark/">building a stock ticker in vastpark post</a> to take advantage of the new Tooltip Plugin and the Define element in IMML. Rather than going all out, I&#8217;ve simply added a tip that shows the volume for the current day when the mouse is over one of the green bars and a Define that lets you more easily choose which stocks should be displayed.</p>
<p>If you haven&#8217;t already read the original article and are interested in how it works, be sure to <a href="http://theparkisvast.com/2009/01/12/building-a-stock-market-ticker-in-vastpark/">have a read</a> before continuing.</p>
<h4>Define Element</h4>
<p>The Define element is a declarative way of expressing a variable in IMML. It&#8217;s equivalent to doing element:set(&#8216;variableName&#8217;, variableValue) but doesn&#8217;t require interpretation via the scripting engine which results in much better performance. It&#8217;s also a much nicer way to store global variables as they can be placed in more a easily identifiable location in the IMML rather than being buried within a script.</p>
<p>My Define in the sample looks similar to this (truncated for brevity):<br />
<pre class="php">&lt;!--Use any Yahoo stock codes in the below <a href="http://www.php.net/define"><span style="color: #000066;">define</span></a> to control the stocks being generated and updated--&gt;
 &lt;Define <a href="http://www.php.net/key"><span style="color: #000066;">Key</span></a>=<span style="color: #ff0000;">&quot;stocks&quot;</span> Value=<span style="color: #ff0000;">&quot;IPL.AX,VIL.AX,FMG.AX,RIO.AX,BHP.AX,BOQ.AX&quot;</span> /&gt;</pre></p>
<p>To change the ticker to show different stocks, replace any of the entries in the Value of the Define with the appropriate <a href="http://finance.yahoo.com/lookup">Yahoo ticker code</a> for the relevant stock.</p>
<h4>Tooltip Plugin</h4>
<p>Note: To use the Tooltip plugin, you&#8217;ll need to be running either the most recent Player snapshot or version 0.98+ as it uses the <em>Handle</em> property that was added recently to the IRenderEngine interface. </p>
<p>The tooltip concept has been around for quite a while and is used by just about every modern desktop application. Ever wondered what that big red button does and hovered your mouse to find out? If yes, you&#8217;ve seen a tooltip. This plugin extends the concept to allow developers to associate a tip with an element in world. </p>
<p>To do so is quite simple, the following functions are provided with the plugin:<br />
<pre class="php">int Add<span style="color: #66cc66;">&#40;</span>string text, ImmlElement element<span style="color: #66cc66;">&#41;</span>
void Remove<span style="color: #66cc66;">&#40;</span>int id<span style="color: #66cc66;">&#41;</span>
void SetText<span style="color: #66cc66;">&#40;</span>int id, string text<span style="color: #66cc66;">&#41;</span></pre></p>
<p>To make use of these, I&#8217;ve added 2 lines to <em>_updateStock</em> in the UpdateStocks script:<br />
<pre class="php">--update the volume tooltip	
id = lastTradeVisual:get<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'tooltipId'</span><span style="color: #66cc66;">&#41;</span>
tooltipplugin:settext<span style="color: #66cc66;">&#40;</span>id, <span style="color: #ff0000;">'Volume: '</span>..volume<span style="color: #66cc66;">&#41;</span></pre></p>
<p>&#8230;and 3 lines to <em>_generateStock</em> in the GenerateStocks script:<br />
<pre class="php">--store a <a href="http://www.php.net/define"><span style="color: #000066;">define</span></a> value on the last trade to represent volume <span style="color: #b1b100;">for</span> the tooltip
lastTradePrim:set<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'volume'</span>, volume<span style="color: #66cc66;">&#41;</span>
id = tooltipplugin:add<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Volume: '</span>..volume, lastTradePrim<span style="color: #66cc66;">&#41;</span>
lastTradePrim:set<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'tooltipId'</span>, id<span style="color: #66cc66;">&#41;</span></pre></p>
<p>The end result still looks similar to before, but we now get tooltips when hovering:</p>
<p><a href="http://theparkisvast.com/wp-content/uploads/2010/02/stock-ticker-with-tooltip.jpg" rel="lightbox"><img src="http://theparkisvast.com/wp-content/uploads/2010/02/stock-ticker-with-tooltip-300x162.jpg" alt="" title="stock-ticker-with-tooltip" width="300" height="162" class="aligncenter size-medium wp-image-210" /></a></p>
<p>Download the updated IMML here:  <a href="http://theparkisvast.com/wp-content/plugins/download-monitor/download.php?id=6">stock-ticker.imml</a></p>
]]></content:encoded>
			<wfw:commentRss>http://theparkisvast.com/2010/02/17/updated-imml-for-stock-market-ticker/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Army of Craig</title>
		<link>http://theparkisvast.com/2009/09/11/army-of-craig/</link>
		<comments>http://theparkisvast.com/2009/09/11/army-of-craig/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 10:36:16 +0000</pubDate>
		<dc:creator>craigomatic</dc:creator>
		<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/theparki/public_html/wp-content/plugins/autometa/autometa.php</b> on line <b>300</b><br />
		<category><![CDATA[Content]]></category>
		<category><![CDATA[Nerdy]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[VastPark General]]></category>

	<!-- AutoMeta Start -->
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://theparkisvast.com/?p=133</guid>
		<description><![CDATA[I&#8217;ve always wondered what it would be like to have an army of clones that I could send out to do my bidding&#8230; VastPark OpenGL &#8220;Army of Craig&#8221; Demo from VastPark on Vimeo. Yes. It is a little strange.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve always wondered what it would be like to have an army of clones that I could send out to do my bidding&#8230;</p>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=6528686&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=6528686&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object>
<p><a href="http://vimeo.com/6528686">VastPark OpenGL &#8220;Army of Craig&#8221; Demo</a> from <a href="http://vimeo.com/vastpark">VastPark</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>Yes. It is a little strange.</p>
]]></content:encoded>
			<wfw:commentRss>http://theparkisvast.com/2009/09/11/army-of-craig/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VastPark VNC Plugin</title>
		<link>http://theparkisvast.com/2009/04/08/vastpark-vnc-plugin/</link>
		<comments>http://theparkisvast.com/2009/04/08/vastpark-vnc-plugin/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 04:38:56 +0000</pubDate>
		<dc:creator>craigomatic</dc:creator>
		<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/theparki/public_html/wp-content/plugins/autometa/autometa.php</b> on line <b>300</b><br />
		<category><![CDATA[IMML]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Plugins]]></category>

	<!-- AutoMeta Start -->
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://theparkisvast.com/?p=99</guid>
		<description><![CDATA[After some recent improvements to the core VastPark framework and the way textures are made available to the plugin API, I decided to build a VNC plugin for VastPark, basing it upon VncSharp. For those of you know don&#8217;t know what VNC is, there&#8217;s a good overview of it available on Wikipedia. In it&#8217;s simplest [...]]]></description>
			<content:encoded><![CDATA[<p>After some recent improvements to the core VastPark framework and the way textures are made available to the plugin API, I decided to build a VNC plugin for VastPark, basing it upon <a href="http://cdot.senecac.on.ca/projects/vncsharp/">VncSharp</a>. For those of you know don&#8217;t know what VNC is, there&#8217;s a good overview of it available on <a href="http://en.wikipedia.org/wiki/Vnc">Wikipedia</a>.</p>
<p>In it&#8217;s simplest form the IMML for the VNC Plugin will look something like this:<br />
<pre class="php">&lt;Plugin Name=<span style="color: #ff0000;">&quot;VncPlugin&quot;</span> Enabled=<span style="color: #ff0000;">&quot;True&quot;</span> 
Source=<span style="color: #ff0000;">&quot;http://content.vastpark.com/VastParkWS/get.vpws?publisher=craigomatic&amp;amp;name=VncPlugin&amp;amp;domain=vastpark&amp;amp;context=park&quot;</span>&gt;
	&lt;Element Name=<span style="color: #ff0000;">&quot;TargetElement&quot;</span>/&gt;
	&lt;Element Name=<span style="color: #ff0000;">&quot;OnPasswordRequired&quot;</span>/&gt;
	&lt;Parameter <a href="http://www.php.net/key"><span style="color: #000066;">Key</span></a>=<span style="color: #ff0000;">&quot;Uri&quot;</span> Value=<span style="color: #ff0000;">&quot;the-vnc-server-address.com&quot;</span>/&gt;
	&lt;Parameter <a href="http://www.php.net/key"><span style="color: #000066;">Key</span></a>=<span style="color: #ff0000;">&quot;Port&quot;</span> Value=<span style="color: #ff0000;">&quot;5900&quot;</span>/&gt;
 	&lt;Parameter <a href="http://www.php.net/key"><span style="color: #000066;">Key</span></a>=<span style="color: #ff0000;">&quot;PasswordRequired&quot;</span> Value=<span style="color: #ff0000;">&quot;OnPasswordRequired&quot;</span>/&gt;
&lt;/Plugin&gt;
&lt;Script Name=<span style="color: #ff0000;">&quot;OnPasswordRequired&quot;</span>&gt;
    <span style="color: #000000; font-weight: bold;">function</span> main<span style="color: #66cc66;">&#40;</span>obj, args<span style="color: #66cc66;">&#41;</span>
        vncplugin:setpassword<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'pass'</span><span style="color: #66cc66;">&#41;</span> --hardcoding password is bad, you should ask the user to enter one!
    <a href="http://www.php.net/end"><span style="color: #000066;">end</span></a>
<span style="color: #000000; font-weight: bold;">&lt;/Script&gt;</span>
&lt;Primitive Type=<span style="color: #ff0000;">&quot;Box&quot;</span> Name=<span style="color: #ff0000;">&quot;TargetElement&quot;</span> Size=<span style="color: #ff0000;">&quot;1,1,1&quot;</span>/&gt;</pre> </p>
<p>Here&#8217;s one I prepared earlier (well, Adrian did most of the work&#8230;):</p>
<p><a href="http://theparkisvast.com/wp-content/uploads/2009/04/vncplugin-in-action.jpg" rel="lightbox"><img src="http://theparkisvast.com/wp-content/uploads/2009/04/vncplugin-in-action-300x148.jpg" alt="vncplugin-in-action" title="vncplugin-in-action" width="300" height="148" class="alignnone size-medium wp-image-103" /></a></p>
<h4>Plugin Parameters</h4>
<h5>Uri</h5>
<p>The host address of the VNC server. You should avoid using the scheme at the start of this address (ie: <strong>don&#8217;t</strong> put the <em>http://</em>)</p>
<h5>Port</h5>
<p>Defaults to the VNC default of 5900</p>
<h5>ConnectionFailed</h5>
<p>Name of a Script/Timeline/other ITimelineExecutable element to execute when a VNC connection has failed</p>
<h5>PasswordRequired</h5>
<p>Name of a Script/Timeline/other ITimelineExecutable element to execute when a password is required to connect to the VNC server</p>
<h5>UpdateFrequency</h5>
<p>The number of milliseconds to wait before automatically refreshing the remote screen when ManualUpdate is false. Defaults to 500.</p>
<h5>ManualUpdate</h5>
<p>True/False. When true, you need to call the vncplugin:requestupdate(true) for a fullscreen update. Defaults to False</p>
<p>You can download an example IMML document here: <a href="http://theparkisvast.com/wp-content/plugins/download-monitor/download.php?id=4">basic-vnc.imml</a> and view the source code for the VNC Plugin over here: <a href="http://vastpark-svn.cvsdude.com/public/trunk/Plugins/Plugin.VNC/">http://vastpark-svn.cvsdude.com/public/trunk/Plugins/Plugin.VNC/</a></p>
<p>A good free windows VNC Server is <a href="http://www.tightvnc.com/">TightVNC</a></p>
]]></content:encoded>
			<wfw:commentRss>http://theparkisvast.com/2009/04/08/vastpark-vnc-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VastPark Source Code Online</title>
		<link>http://theparkisvast.com/2009/03/07/vastpark-source-code-online/</link>
		<comments>http://theparkisvast.com/2009/03/07/vastpark-source-code-online/#comments</comments>
		<pubDate>Fri, 06 Mar 2009 21:01:39 +0000</pubDate>
		<dc:creator>craigomatic</dc:creator>
		<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/theparki/public_html/wp-content/plugins/autometa/autometa.php</b> on line <b>300</b><br />
		<category><![CDATA[Open Source]]></category>

	<!-- AutoMeta Start -->
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://theparkisvast.com/?p=88</guid>
		<description><![CDATA[Yesterday as part of the many happenings during the Virtual Worlds Down Under 09 event, we made the source code for the core VastPark libraries available to the public The source is pure C# targeting .NET 3.0, licensed under GPL and is available for anonymous access at this address: http://vastpark-svn.cvsdude.com/public/ Be sure to check out [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://theparkisvast.com/wp-content/uploads/2009/03/cvs-corporate_logo_rgb-larger.gif" rel="lightbox"><img src="http://theparkisvast.com/wp-content/uploads/2009/03/cvs-corporate_logo_rgb-larger.gif" alt="cvs-corporate_logo_rgb-larger" title="cvs-corporate_logo_rgb-larger" width="188" height="52" class="alignnone size-full wp-image-89" /></a></p>
<p>Yesterday as part of the many happenings during the Virtual Worlds Down Under 09 event, we made the source code for the core VastPark libraries available to the public</p>
<p>The source is pure C# targeting .NET 3.0, licensed under GPL and is available for anonymous access at this address:</p>
<p><a href="http://vastpark-svn.cvsdude.com/public/">http://vastpark-svn.cvsdude.com/public/</a></p>
<p>Be sure to check out Sample projects\read first.txt for information in acquiring and setting up 3rd party dependencies to avoid losing hair getting the code to compile <img src='http://theparkisvast.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Many thanks to <a href="http://cvsdude.com">CVSDude</a> for supporting us with hosting and you can find out more about VastPark&#8217;s open source philosophy <a href="http://www.vastpark.com/open_source">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://theparkisvast.com/2009/03/07/vastpark-source-code-online/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

