<?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>SYERIT LABS</title>
	<atom:link href="http://labs.syerit.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://labs.syerit.com</link>
	<description>&#34;follow the vision&#34;</description>
	<lastBuildDate>Tue, 22 Jun 2010 11:31:31 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Feburary work</title>
		<link>http://labs.syerit.com/?p=153</link>
		<comments>http://labs.syerit.com/?p=153#comments</comments>
		<pubDate>Sat, 27 Feb 2010 19:38:07 +0000</pubDate>
		<dc:creator>benm</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://labs.syerit.com/?p=153</guid>
		<description><![CDATA[Syerit work for Febuarary,
Nabs Vegas Big Bash Site
Ogilvy Interactive has created a site and used a bit of Syerit expertise to get the job done.
the finished product can be viewed at:
http://www.nabsbigbash.co.uk/

]]></description>
			<content:encoded><![CDATA[<p>Syerit work for Febuarary,</p>
<p>Nabs Vegas Big Bash Site</p>
<p>Ogilvy Interactive has created a site and used a bit of Syerit expertise to get the job done.</p>
<p>the finished product can be viewed at:</p>
<p><a href="http://www.nabsbigbash.co.uk/">http://www.nabsbigbash.co.uk/</a></p>
<p><img class="aligncenter size-full wp-image-162" title="nabsss" src="http://labs.syerit.com/wp-content/uploads/2010/02/nabsss2.jpg" alt="nabsss" width="541" height="290" /></p>
]]></content:encoded>
			<wfw:commentRss>http://labs.syerit.com/?feed=rss2&amp;p=153</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Behind The Scenes: Think360 : Part 3</title>
		<link>http://labs.syerit.com/?p=82</link>
		<comments>http://labs.syerit.com/?p=82#comments</comments>
		<pubDate>Fri, 29 Jan 2010 00:25:09 +0000</pubDate>
		<dc:creator>pavelj</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Behind The Scenes]]></category>

		<guid isPermaLink="false">http://labs.syerit.com/?p=82</guid>
		<description><![CDATA[Implementing enterprise solutions into “cool shit” application
This is series of articles called “Behind The Scenes”, where we describe particular project in different ways. this time it will be our fist one. Think360.
Think360
Series Articles:
1) Planning, Platforms, Frameworks, Workspace
2) Architecting, Folder structures, Backend
3) Away3D vs Papervision3D, 3D Modelling, Physics, Sound, Optimization
Away3D vs Papervision3D
We started to build this [...]]]></description>
			<content:encoded><![CDATA[<h2>Implementing enterprise solutions into “cool shit” application</h2>
<p>This is series of articles called “Behind The Scenes”, where we describe particular project in different ways. this time it will be our fist one. <a href="http://www.syerit.com/think360/default.aspx">Think360</a>.</p>
<div id="attachment_7" style="width: 385px;"><a href="http://www.syerit.com/think360/default.aspx"><img title="Think360" src="../wp-content/uploads/2009/10/Picture1.png" alt="Picture1" width="375" height="191" /></a>Think360</div>
<h2><strong>Series Articles:</strong></h2>
<p>1) <a href="http://labs.syerit.com/?p=4">Planning, Platforms, Frameworks, Workspace</a><br />
2) <span style="color: #ccffcc;"><span style="color: #000000;"><a title="Behind The scenes part 2" href="http://labs.syerit.com/?p=53" target="_self">Architecting, Folder structures, Backend</a></span></span><br />
<span style="color: #99cc00;"><strong><span style="color: #ccffcc;">3) Away3D vs Papervision3D, 3D Modelling, Physics, Sound, Optimization</span></strong></span></p>
<h2>Away3D vs Papervision3D</h2>
<p><a href="http://away3d.com"><img class="size-full wp-image-123 alignleft" title="away3d" src="http://labs.syerit.com/wp-content/uploads/2010/01/away.gif" alt="away3d" width="134" height="122" /></a>We started to build this project on top of papervision3d engine. But somewhere in the middle of project we hit the wall (or roof better say) what was technically possible to do. So I had to find some way. One of them was to risk it and swap engine to another one and hope for better performance. After few days intensive researches there were few choices. Sandy3D, <a title="Away3D" href="http://away3d.com/">Away3D</a> and Alternativa3D. As our main issue was performance it was hard choice. There are not lot of performance comparisons on high poly objects.</p>
<p>On the end of the day, I decided to go for Away3D.  There few reasons for that.</p>
<p>Engine is continually evolving. Guys around engine development are very clever and open to community. Engine has surprisingly loads of features. Support for Flash Player 10.</p>
<p>Last one was probably biggest advantage.</p>
<p>We made few performance tests and engine seemed to be pretty fast. Actually our first full scene un-optimized test was as fast as maximum optimized papervision3d one.</p>
<p>Away3d engine is surprisingly easy to set up. Actually you need just 2 lines of code to set it up:</p>
<p><span style="color: #00ccff;">view = <strong>new</strong> View3D();</span></p>
<p><span style="color: #00ccff;">addChild(view);</span></p>
<p>Because Away3D is actually a branch of Papervision3D it has similar API.<br />
Only difference between PV3D and Away3D is way how you set up objects. While in PV3D you pass parameters in constructors:</p>
<p><span style="color: #00ccff;">var plane:Plane = new Plane(200,200);</span></p>
<p>In Away3D you pass object with {name: value} pairs:</p>
<p><span style="color: #00ccff;">var plane:Plane = new Plane({width:200,height:200});</span></p>
<p>or:</p>
<p><span style="color: #00ccff;">var plane:Plane = new Plane();<br />
plane.width = 200;<br />
plane.height = 200;</span></p>
<p>I think this is down to own preference. However I found PV3D way little bit more clean and more safe as values are strong typed. But it has its drawbacks when you need to setup just particular properties.</p>
<p><span style="color: #ff6600;">NOTE:</span><br />
Away3DLite has instniation based on strong typed parameters as PV3D:<br />
<span style="color: #33cccc;">var plane:Plane = new Plane(null,200,200);</span></p>
<p>For game itself we used just one main Scene in Away3D and every other scene (Main Hall, Office etc) was just Object3DContainer with additional Meshes and 3DObjects.</p>
<p><em><span style="color: #ff6600;">Image shows how effective can be proper 3D design combined with Away3D. With first tests we were able to walk around hall without noticeable loss of frame rate with nearly 17000 triangles in the scene!</span></em></p>
<p><img class="alignnone size-full wp-image-118" title="fov" src="http://labs.syerit.com/wp-content/uploads/2010/01/fov.jpg" alt="fov" width="600" height="409" /></p>
<h3>KISS Rule</h3>
<p>Keep It Simple Stupid. That was main goal in order to build all scenes with this size. No light. No special effects. No reflections. No shades. With all that in mind, everything had to look realistic.</p>
<p><strong>Away3DLite</strong></p>
<p>Funny thing is that just few days before we finished our project, guys from Away3D released lightweight version called Away3DLite.</p>
<h3><strong>3D Modelling</strong></h3>
<p>3D modelling for flash player is artistic fight rather modelling itself. Because flash player is so idiotically slow in compare with any today’s 3d capable environment that every little polygon makes difference. Model optimization is one of crucial factors when creating 3d content for flash.</p>
<h3><strong>Scene modelling</strong></h3>
<p>-scenes had to be modelled in way that triangles are spread out in balanced way<br />
- we also used 2 versioned models:</p>
<ul>
<li>High-poly for modelling and baking</li>
<li>Low-poly for Flash Player export</li>
</ul>
<p><span style="color: #ff6600;"><em>Hi-poly vs Low-poly triangle count difference</em></span></p>
<p><img class="alignnone size-full wp-image-96" title="04" src="http://labs.syerit.com/wp-content/uploads/2010/01/041.jpg" alt="04" width="600" height="268" /></p>
<h3>Pre-Baking</h3>
<p>In order to keep up with speed we use pre-baked materials (you create lighting in 3D modelling tool and export materials with all effects already on them)<br />
Baking was applied on high-poly mesh and then implemented on low poly in flash player.</p>
<p><span style="color: #ff6600;"><em>Baking procedure </em></span></p>
<h3><img class="alignnone size-full wp-image-115" title="baking" src="http://labs.syerit.com/wp-content/uploads/2010/01/baking.jpg" alt="baking" width="600" height="604" /></h3>
<h3><strong>Z-sorting</strong></h3>
<p>One of biggest issues we had was z-sorting. To spare every possible frame we couldn’t use built-in z-sorting camera. So we had to optimize again.</p>
<p>Objects sitting on floor had to be sitting on holes.</p>
<p>Object always in front could be forced to front with:<br />
<span style="color: #00ccff;">obj.ownCanvas = true;</span></p>
<p>For example in the office scene there is document on wall as additional element. Without obj.ownCanvas there would be issue with picture disappearing occasionally. On other hand obj.ownCanvas = true, 3d object is always in front. So solution was to set  obj.ownCanvas = false while moving into office and after camera finish movement set it to obj.ownCanvas = true and vice versa.</p>
<p><span style="color: #ff6600;"><em>Implementation of ownCanvas in the Office </em></span></p>
<p><img class="alignnone size-full wp-image-111" title="office" src="http://labs.syerit.com/wp-content/uploads/2010/01/office1.jpg" alt="office" width="600" height="345" /></p>
<p>Without z-sorting you have to be very careful while modeling your 3D content. There are few simple rules to help this issue:</p>
<ul>
<li>If model sits on floor put floor into different View or merge object with floor</li>
<li>On places where are more &#8220;triangle flicking&#8221; chance put little bit more triangles.</li>
</ul>
<p><em><span style="color: #ff6600;">Example of merged objects to avoid flicking of triangles:</span></em><br />
<img class="alignnone size-full wp-image-138" title="hole" src="http://labs.syerit.com/wp-content/uploads/2010/01/hole.jpg" alt="hole" width="600" height="348" /></p>
<h2>3D Optimization</h2>
<h3><strong>As exporter</strong></h3>
<p>Because we went pretty wild with all 3d stuff on this project we had to find way how not to kill flash and browser while parsing all that data. And there is when brilliant as3 exporter comes to play. It allows you to export any 3d object from blender into as class. So instead of loading dae or other format into flash it’s already compiled into actionscript and available immediately. We used great blender plugin <a title="Blender AS3 Exporter" href="http://www.rozengain.com/blog/2008/01/02/export-your-blender-objects-straight-to-away3d-papervision3d-and-sandy/">AS3 Blender Exporter</a> to export 3D models as plain actionscript class.</p>
<h3><strong>Video material</strong></h3>
<p>We had 2 options here. Use video material or use AnimatedBitmapMaterial. First is small but it also affecting performance. Second perform very well but it is very big in size (especially on large or longer videos). So we applied animated material on short and small sequences and Video on longer and bigger ones. Video Material was created as movieclip in flash and exported as swc.</p>
<p>Example on this one can be found in main hall and office. Videos in “default” mode are Animated bitmaps. After you click on them it swaps to video.</p>
<p><img class="alignnone size-full wp-image-132" title="vidMaterial" src="http://labs.syerit.com/wp-content/uploads/2010/01/vidMaterial.jpg" alt="vidMaterial" width="600" height="285" /></p>
<h3><strong>Real video animation</strong></h3>
<p>To get realistic effect inside office scene. We shoot several team members on green screen with camera positioned and angled as it would be in virtual office. Then members were cut out and colorized to match colour tone of office. Then video was attached on planes. Again, all planes copy camera y rotation.</p>
<p>Step 1:</p>
<p><span style="color: #ff6600;"><em>We shoot one of our members on green screen and then cut him out. After that we published video with alpha channel.</em></span></p>
<p><img class="alignnone size-full wp-image-98" title="office_madeOf_r1_c1" src="http://labs.syerit.com/wp-content/uploads/2010/01/office_madeOf_r1_c1.jpg" alt="office_madeOf_r1_c1" width="581" height="400" /></p>
<p>Step 2:</p>
<p><em><span style="color: #ff6600;">We imported video into Flash IDE, recompile it into timeline based video and then exported it as SWC.<br />
Then we attached video into scene as Plane with AnimatedBitmapMaterial.</span></em></p>
<p><img class="alignnone size-full wp-image-99" title="office_madeOf_r2_c2" src="http://labs.syerit.com/wp-content/uploads/2010/01/office_madeOf_r2_c2.jpg" alt="office_madeOf_r2_c2" width="600" height="316" /></p>
<h3><strong>Fire</strong></h3>
<p>Fire in gallery scene was great for AnimatedBitmapMaterial. It is just small plane. All planes are stored in vector array and copy rotation of camera on y axis.</p>
<p>Videos has been created in Flash IDE as timeline videos and exported as swc files.</p>
<p><img class="alignnone size-full wp-image-102" title="_r2_c2" src="http://labs.syerit.com/wp-content/uploads/2010/01/r2_c2.jpg" alt="_r2_c2" width="600" height="345" /></p>
<h2>Physics</h2>
<p>Because we had to keep frame rate high in every corner of scene we had to come up also with solution for physics. We tried jiglib but it was too slow for such a huge number of polygons and complexity of scene. Also WOW was better but still slow. So instead of using 3d physics I decided to go for 2d physics and excellent library called Box2D. It is blazingly fast in compare with jig lib and because our scenes floor was flat I could implement this 2d approach into 3d world.</p>
<p>We created something similar to mapping tool. It was interface responsible for creating physics objects on the fly.</p>
<p>Something like this:</p>
<p><span style="color: #33cccc;">var map:Map = new Map();<br />
map.w(1522,1233).g(1400,1374);</span></p>
<p><em><span style="color: #ff6600;">Image shows how 2D physics map is directly related to 3D world</span></em></p>
<p><img class="alignnone size-full wp-image-134" title="physics" src="http://labs.syerit.com/wp-content/uploads/2010/01/physics.jpg" alt="physics" width="600" height="405" /></p>
<h2>Sound</h2>
<p>This was another place where I found PureMVC extremely useful. We created SoundMediator responsible for sound management. Then we added list of notification interests.</p>
<p>Now we could play sound from any location by sending notification.</p>
<p>sendNotification(AppConstants.PLAY_SOUND,{volume:1,repeat:3}, AppConstants.SOUND_WALK)</p>
<p>Because Flash Player has issues with looping Mp3 files, we used Flash IDE to conver all sounds and export them as swf file.</p>
<h2>Additional Performance Optimization:</h2>
<p>So after all that there was still room to optimize few bits. These optimizations should be done always as last with relevant “stable” version saved. On top of general optimizations for flash player we’ve done these:</p>
<ul>
<li>Simplify unused events to base Event. Instead of (e:MouseEvent) use (e:Event)</li>
<li>Test wmode=”gpu/direct” and use fastest one</li>
<li>Simplify classes. Instead of var myMesh:MyMesh use var myMesh:Mesh/Object3D (depends on which functions you need to use)</li>
<li>Cast to interfaces instead of Classes</li>
<li>Mark heavily used classes as “final”</li>
<li>PNG files optimization. More find <a href="http://www.smashingmagazine.com/2009/07/15/clever-png-optimization-techniques/">here</a></li>
<li>Exclude unused classes</li>
<li>Remove unused conditions in cpu intensive places (especially Away3D)</li>
</ul>
<p>As I said before, these changes must be done on the end and you should do them if you really need squeeze every bit from your application (our case). Otherwise they are not worth of invested time.</p>
<p><strong>Conclusion</strong></p>
<p>As we found by ourselves, pushing flash to its boundaries is quite hard task and we just hope that we won&#8217;t need to spend so much hours by doing tasks which shouldn’t be necessary for general mortal person in future. We hope that Flash Player will evolve into something where these tasks will be thing of past. But till then we will rely on ourselvs and amazing work of flash community and its projects inluding Away3D,PV3D,PureMVC and many others.</p>
<p><strong> </strong></p>
]]></content:encoded>
			<wfw:commentRss>http://labs.syerit.com/?feed=rss2&amp;p=82</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Behind The Scenes: Think360 : Part 2</title>
		<link>http://labs.syerit.com/?p=53</link>
		<comments>http://labs.syerit.com/?p=53#comments</comments>
		<pubDate>Sat, 31 Oct 2009 14:13:35 +0000</pubDate>
		<dc:creator>pavelj</dc:creator>
				<category><![CDATA[Behind The Scenes]]></category>

		<guid isPermaLink="false">http://labs.syerit.com/?p=53</guid>
		<description><![CDATA[Implementing enterprise solutions into “cool shit” application
This is series of articles called “Behind The Scenes”, where we describe particular project in different ways. this time it will be our fist one. Think360.
Think360
Series Articles:
1) Planning, Platforms, Frameworks, Workspace
2) Architecting, Folder structures, Backend
3) Away3D vs Papervision3D, 3D Modelling, Physics, Sound, Optimization
Folder Structure:
In flash builder you can create [...]]]></description>
			<content:encoded><![CDATA[<h2>Implementing enterprise solutions into “cool shit” application</h2>
<p>This is series of articles called “Behind The Scenes”, where we describe particular project in different ways. this time it will be our fist one. <a href="http://www.syerit.com/think360/default.aspx">Think360</a>.</p>
<div id="attachment_7" style="width: 385px;"><a href="http://www.syerit.com/think360/default.aspx"><img title="Think360" src="../wp-content/uploads/2009/10/Picture1.png" alt="Picture1" width="375" height="191" /></a>Think360</div>
<h2><strong>Series Articles:</strong></h2>
<p>1) <a href="http://labs.syerit.com/?p=4">Planning, Platforms, Frameworks, Workspace</a><br />
<span style="color: #ccffcc;"><strong>2) Architecting, Folder structures, Backend</strong></span><br />
3) <a href="http://labs.syerit.com/?p=82">Away3D vs Papervision3D, 3D Modelling, Physics, Sound, Optimization</a></p>
<h2>Folder Structure:</h2>
<p>In flash builder you can create modules in your project. However if your project become bigger it is better to move your module into new project. In this way you create your flex workspace as one project and each project inside of that workspace represent one module/application.</p>
<p>I found very useful to name our workspace as namespace</p>
<p>With this name you can easily put Flex project to svn with .NET project.</p>
<p>ie:<br />
Syerit.Flex.Web.Portfolio (flex workspace)<br />
Syerit.Net.Web.Portfolio (.net solution folder)</p>
<p>Yes that’s right. We use <a href="http://subversion.tigris.org/">SVN</a> for .NET development.<br />
Why? It’s mainly because of costs. TFS, VSS are great but also very expensive. Those solutions are suitable for much bigger enterprise projects where you have business analysts, testers, developers, build managers, all together counting 50+ staff.<br />
For mid size projects SVN is fairly enough.It’s free and with tools like <a href="http://www.visualsvn.com/">VisualSVN</a>, <a href="http://subclipse.tigris.org/">Subclipse</a> and <a href="http://tortoisesvn.tigris.org/">Tortoise</a>, it&#8217;s very easy to integrate into your project.<br />
And with used structure it&#8217;s relatively easy to migrate project to TFS later if you will need to do so.</p>
<p>SVN Structure:</p>
<p><img class="alignnone size-full wp-image-73" title="SVN Structure" src="http://labs.syerit.com/wp-content/uploads/2009/10/caseStudy4.jpg" alt="SVN Structure" width="614" height="326" /></p>
<h2>Naming Conventions:</h2>
<p>If you work on bigger project, you can find easily lost because of number of projects in your workspace. To help with this issue, we started to use naming conventions for our projects. Each internal project name starts with some prefix dependent on type of project.</p>
<ul>
<li>FX – flex application</li>
<li>FXT – flex based test project</li>
<li>FXL – library project</li>
<li>FXM – flex based module</li>
<li>AS – actionscript based application</li>
<li>AST – actionscript test project</li>
<li>ASM – Actionscript based module</li>
<li>FXB – directory for build scripts</li>
</ul>
<p>Note: In our case, term Module doesn’t state for Flex module (&lt;fx:Module) but for any sub application loaded into main application. (Module, Sub-application, Flash application)</p>
<p>So in this particular project, we had something like that:</p>
<p>Syerit.Flex.Web.Portfolio (workspace)</p>
<ul>
<li>FX_MainApp</li>
<li>ASM_VirtualWorld</li>
<li>FXL_MainApp (used as bridge(strong typed VOs) and shared library     between main application and module)</li>
<li>FXB_MainApp (ant build scripts for project. We used it for easy deployment)</li>
<li>AST_PhysicsTest</li>
<li>AST_AwayTest</li>
</ul>
<h2>Architecture/Structure:</h2>
<p>Now, the graphical representation of logical structure would look like this:</p>
<p><img class="alignnone size-full wp-image-60" title="Syerit Application Structure" src="http://labs.syerit.com/wp-content/uploads/2009/10/caseStudy3.jpg" alt="Syerit Application Structure" width="593" height="591" /></p>
<p>Also here is Legend to describe color sections:</p>
<ul>
<li>Light Grey &#8211; Flex based application</li>
<li>Red &#8211; AS3/Flex based module</li>
<li>Yellow &#8211; XML data</li>
<li>White &#8211; Developed Application</li>
<li>Light Green &#8211; Architectural framework</li>
<li>Light Blue &#8211; Other Libraries</li>
<li>Purple &#8211; HTML Based Application</li>
<li>Amber &#8211; .NET Application</li>
<li>Grey &#8211; CMS</li>
<li>Blue &#8211; Data Tier</li>
</ul>
<p>You can see that on sides, there are descriptions of each sections of application.</p>
<ul>
<li>On right hand side we have whole application dividend by .NET metrics</li>
<li>On left hand side we have application dividend by RIA metrics</li>
</ul>
<p>Each application/module in presentation layer has its own config file. We use IoC container called <a href="http://www.springactionscript.org/">SpringActionscript</a> to inject config classes with some data.</p>
<p>In this way we can change application(replace module, add additional, change control settings, disable deep linking etc.) without recompiling application. <a href="http://en.wikipedia.org/wiki/Dependency_injection">DI</a> is very popular these days in Flex community (there are several frameworks including <a href="http://mate.asfusion.com/">Mate</a>, <a href="http://www.springactionscript.org/">SpringActionscript</a>, <a href="http://www.spicefactory.org/parsley/">Parsley</a>, <a href="http://code.google.com/p/swizframework/">Swiz</a> for instance). This pattern is very powerful and often used in enterprise development (<a href="http://www.springsource.org/">Spring</a> in Java, <a href="http://www.springframework.net/">Spring.NET</a> in .NET and may others).</p>
<p>However because we are in real world, every pros has its cons. And the same is it with IoC. While it&#8217;s very flexible, extend use of it could lead project to be hardly testable and debugging could be nightmare. So instead of use IoC based framework we went for MVC based <a href="http://puremvc.org/">PureMVC</a> with IoC extension as <a href="http://www.springactionscript.org/">SpringActionscript</a>. Development with <a href="http://puremvc.org/">PureMVC</a> could be time consuming so to help this issue some unknown genius called <a href="http://www.codedrunks.com/">Darshan Sawardekar</a> created small utility called <a href="http://code.google.com/p/fabrication/">Fabrication</a> and suddenly creating multicore, multimodule, mvc applications became piece of cake.</p>
<p>So what’s the advantage of this model? Imagine if in the future we’ll want to put another section to our application. We simply create additional module and add to main application view. Nothing else has to be changed.</p>
<p>Or later on we’ll decide to use Flash based CMS instead of html. We just unplug CMS Client and replace with our own CMS. This CMS will use the same functionality available trough Pureherit which use <a href="http://www.themidnightcoders.com/">WebOrb</a> to communicate with <a href="http://umbraco.org/">Umbraco</a>.</p>
<p><img class="alignnone size-full wp-image-61" title="Replaced CMS as Application" src="http://labs.syerit.com/wp-content/uploads/2009/10/caseStudy11.jpg" alt="Replaced CMS as Application" width="585" height="243" /></p>
<p>We can even decide if we want to create it as new application, or simply create additional module. And use all available functionality provided by core application.</p>
<p><img class="alignnone size-full wp-image-62" title="Replaced CMS as Module" src="http://labs.syerit.com/wp-content/uploads/2009/10/caseStudy21.jpg" alt="Replaced CMS as Module" width="583" height="334" /></p>
<p>Because we use Pureherit as some kind of extended façade, we could even replace whole backend system without letting front-end know about it.</p>
<p>I tried to explain whole concept instead of diving ito details, as this could cover whole book. I hope, this part was useful for anybody thinking about creating mid to large interactive applications.</p>
<p>In next chapter We will concentrate on Virtual Office module including 3D, physics, Animation etc..</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.syerit.com/?feed=rss2&amp;p=53</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Kaboom</title>
		<link>http://labs.syerit.com/?p=47</link>
		<comments>http://labs.syerit.com/?p=47#comments</comments>
		<pubDate>Tue, 27 Oct 2009 10:40:48 +0000</pubDate>
		<dc:creator>pavelj</dc:creator>
				<category><![CDATA[Animation]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://labs.syerit.com/?p=47</guid>
		<description><![CDATA[Our 3D designer Edie had few rage moments and decided to destroy something

Enjoy:)
]]></description>
			<content:encoded><![CDATA[<p>Our 3D designer Edie had few rage moments and decided to destroy something</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" 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/bcSck-o3R00&amp;hl=en&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/bcSck-o3R00&amp;hl=en&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Enjoy:)</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.syerit.com/?feed=rss2&amp;p=47</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Behind The Scenes: Think360 : Part 1</title>
		<link>http://labs.syerit.com/?p=4</link>
		<comments>http://labs.syerit.com/?p=4#comments</comments>
		<pubDate>Sun, 04 Oct 2009 03:17:03 +0000</pubDate>
		<dc:creator>pavelj</dc:creator>
				<category><![CDATA[Behind The Scenes]]></category>

		<guid isPermaLink="false">http://labs.syerit.com/?p=4</guid>
		<description><![CDATA[Implementing enterprise solutions into &#8220;cool shit&#8221; application
This is series of articles called &#8220;Behind The Scenes&#8221;, where we describe particular project in different ways. this time it will be our fist one. Think360.
Series Articles:
1) Planning, Platforms, Frameworks, Workspace
2) Architecting, Folder structures, Backend
3) Away3D vs Papervision3D, 3D Modelling, Physics, Sound, Optimization
Introduction:
Why I’m writing those articles? Well, for [...]]]></description>
			<content:encoded><![CDATA[<h2>Implementing enterprise solutions into &#8220;cool shit&#8221; application</h2>
<p>This is series of articles called &#8220;Behind The Scenes&#8221;, where we describe particular project in different ways. this time it will be our fist one. <a href="http://www.syerit.com/think360/default.aspx">Think360</a>.</p>
<div id="attachment_7" class="wp-caption alignnone" style="width: 385px"><a href="http://www.syerit.com/think360/default.aspx"><img class="size-full wp-image-7" title="Think360" src="http://labs.syerit.com/wp-content/uploads/2009/10/Picture1.png" alt="Picture1" width="375" height="191" /></a><p class="wp-caption-text">Think360</p></div>
<h2><strong>Series Articles:</strong></h2>
<h4><span style="color: #ccffcc;">1) Planning, Platforms, Frameworks, Workspace</span></h4>
<p>2) <a href="http://labs.syerit.com/?p=53">Architecting, Folder structures, Backend</a><br />
3) <a href="http://labs.syerit.com/?p=82">Away3D vs Papervision3D, 3D Modelling, Physics, Sound, Optimization</a></p>
<h2><strong>Introduction:</strong></h2>
<p>Why I’m writing those articles? Well, for last 3 years I was reading articles of others and learn from them, so had some “philanthropic” moment when I decided that would be good to share my knowledge finally and this was perfect project for that.</p>
<p>Aim of this article is not to give you ready to go solution rather than to show you how you COULD build more complex solutions on flash platform. I’m warning you, I’m not Adobe expert, I’m not Flash evangelist and I’m not even university educated (author-note: consider removing last words). So whatever you read here is my subjective opinion coming from my experience with this project.</p>
<h2><strong>Planning:</strong></h2>
<h4>Choice of platform/frameworks</h4>
<p>It’s very important to choose right base blocks for your project. Bigger project means bigger importance of this stage. So what was our choice? When I was planning those essential blocks, many times my mind came across eternal sentence “Make everything as simple as possible, but not simpler”. I’m sure everybody knows well who said that.<br />
But, there was one issue with this and it could be described like this:<br />
“When you want build sports car you have generally two options upgrade normal car or downgrade supercar”.<br />
This is one of the most essential questions you should answer when planning bigger scale project. On the end we decided to go for “supercar” philosophy because of probability of adding supercar features into our sports car in future.</p>
<h2><strong>Platforms:</strong></h2>
<h4><a href="http://www.adobe.com/flashplatform/">Flash</a></h4>
<p>We are flash developers in most of the time and we love flash community. Speaking technically, despite hard fight on front with HTML5 (6, 7 so on), Silverlight, JavaFX, AJAX, Unity3D and others, Flash is still the best overall choice for interactive content on web and it was definitely best for this project.</p>
<h4><a href="http://www.microsoft.com/NET/">.NET</a></h4>
<p>Ok, If you stop reading here I completely understand it:). Microsoft technology is not very favourite chap in Flash territory. But we decided to go for it because of more scalable choice, Umbraco and VisualStudio (Forgive me all, but as far as like Flex Builder and even more new Flash Builder and I mean it, they are still little bit of joke in compare with this monsterous mother of IDE. Adobe, please stop treating evolving of Flash Builder as upgraded &#8220;car&#8221; and start treat it as downgrading supercar). And yes, for me as person coming from both backgrounds nearly simultaneously was this favour choice anyway. But our html version is done with WordPress which means PHP to be fair.</p>
<h2><strong>Backend:</strong></h2>
<h4><a href="http://umbraco.org/">Umbraco</a></h4>
<p>For me, best open source .NET CMS and one of best overall. It’s even better than some commercial alternatives. Great community, even the story behind evolution of it is very interesting.</p>
<h4><a title="WebORB for .NET" href="http://www.themidnightcoders.com/products/weborb-for-net/overview.html">WebORB for .NET</a></h4>
<p>Connect two opposite worlds, Flash and .NET. It offers you practically everything you need to for develop, test and deploy RIA applications. Another great choice was <a href="http://www.fluorinefx.com/">FluorineFX </a>(open source) but WebORB.NET’s superior console application won.</p>
<h4>Pureherit.NET</h4>
<p>our internal framework which is responsible to provide facade bridge between Front-end and Umbraco.</p>
<h2><strong>Front End:</strong></h2>
<h4><a href="http://puremvc.org/">PureMVC</a></h4>
<p>As core part of our internal framework this was obvious choice. If you need small-mid size project, go for something like Cairngorm. If fact I used it before I get into PureMVC and in some way I still like it despite its chronic singeltoniolity. But if you plan big project, go for PureMVC. It’s more complex and slower to setup but once you’ll have several hundreds or even thousands files in your structure, you’ll see why.</p>
<h4><a href="http://code.google.com/p/fabrication/">Fabrication</a></h4>
<p>This little utility should be nominated on Nobel Prize. It just revolutionized our development (and I’m sure many other ones). PureMVC is like solid powerful computer. On other end, fabrication is like operating system. It hides all that complexity and allows you to build incredibly complex solutions incredibly quickly. Fabrication however works on top of another great utility called Pipes to be exact. Thanks <a href="http://www.codedrunks.com/">Darshan</a> for this!</p>
<h4><a href="http://www.springactionscript.org/">SpringActionscript</a></h4>
<p>This is very helpful IoC/DI container for AS3 based on Spring framework. It made deployment of our project a piece of cake.</p>
<h4>Pureherit</h4>
<p>this is our internal enterprise framework we use for building complex solutions. It wraps features of previous frameworks under one hood and adds additional scalability, modularity and platform features.</p>
<h2><strong>Development:</strong></h2>
<h4><a href="http://opensource.adobe.com/wiki/display/flexsdk/Gumbo">Flex4</a></h4>
<p>It was tough choice between well established Flex 3 and Flex 4, which is still in beta. But looking on “craziness” of this project we decided to give it go wit new baby. Project itself wasn’t really “Flexi”. It doesn’t have spreadsheets, loads of data or shopping cart. However the reason why this “flexiness” IS there and why IS hidden is similar to one when you buy one of those boring German cars like BMW M divisions or Audi RS*… they are very civilized, comfortable and in some way boring when you drive them gently, but at some point you met some geek on traffic lights with his shiny blinking Porsche thinking he is driving god so you have to put him out of this illusion. That time you really need that power. And those civilized cars become monsters and leaves Porsche guy looking embarrassed like child who lost his lollipop (nothing against Porches to be clear). Similar to this weird example, it is with software. You need think forward when deciding how much complexity on the beginning of project is worth of, when adding another robustness/complexity in future, whiles still maintaining cost, speed, maintainability and other factors of present. At some point, many days, months or even years after you finished project, client comes back to you and says “Hey what about shopping cart?” and should be able to predict this or at least try it in some way. Flex is heavy, slow, more complex, but as there is possibility to add future modules and complexity we go for this rather than recoding whole thing from scratch when it comes to it. And as seen on this project, doing it properly you don’t loose on speed or size practically anything.</p>
<h4><a href="http://away3d.com/">Away3D</a></h4>
<p>This thingy saved our butts. When PV3D was on its last breath with hi-poly performance this just started showing real potential of flash player and its 3D future allowing us to fine-tune it nearly like famous Toyota Supra. I&#8217;ll be writing about Away3D closely in following articles.</p>
<h4><a href="http://blog.papervision3d.org/">Papervision3D</a></h4>
<p>on final version we dropped PV3D in favour of Away3D but is still worth of mentioning as most of our knowledge comes from PV3D core team, forums, enthusiasts and actually engine itself. And all that knowledge was used when working with and optimizing Away3D. PV3D is great engine, but unfortunately its lack of support for new FP10 features was really noticeable in this project.</p>
<h4><a href="http://code.google.com/p/bulk-loader/">Bulkloader</a></h4>
<p>this little library is synonym of “loading”. It’s engine behind of all our assets management tools.</p>
<h4><a href="http://blog.greensock.com/tweenmaxas3/">TweenMAX</a></h4>
<p>Hard choice was between GTween and this. On the end we decided for TweenMAX as all of us already familiar with it and it’s little bit more feature packed.</p>
<h4><a href="http://code.google.com/p/swfobject/">SWFObject</a></h4>
<p>When it comes to scary (for most of flash population as I found) HTML world and embedding flash there, this is unquestionable choice. Even Flex4 support it so what else to say.</p>
<h4><a href="http://www.asual.com/swfaddress/">SWFAddress</a></h4>
<p>The only thing what really surprise me is how it’s possible that SWFObject and SWFAdress are still separate projects. They are destined to be together! <a href="http://www.asual.com/">Rostislav</a>, <a href="http://blog.deconcept.com/">Geoff</a>…c’mon guys, buy each other some beer and marry those 2 brilliant things with each other.</p>
<h4><a href="http://box2dflash.sourceforge.net/">Box2D</a> (full name is Box2DFlashAS3 &#8230;Well, I&#8217;ll stick with Box2D)</h4>
<p>I felt in love with this little physics engine . It’s like ugly duck when you first look at it (it has c like interface so what you expect) which transform to beautiful swan when you put it to do what it supposed to do…physics. The speed of this thing is just impressive.</p>
<h4>Mayherit</h4>
<p>this is our internal game framework I started developing few moths ago and it hides the complexity of Box2D for example.</p>
<h2><strong>Testing:</strong></h2>
<h4><a href="http://opensource.adobe.com/wiki/display/flexunit/FlexUnit">FlexUnit</a></h4>
<p><strong></strong>Our unit testing framework of choice. Even better that new Flash Builder got it by default. To be honest I like <a href="http://asunit.org/">ASUnit</a> more, but looking forward to use FB 4, we decided to go for FlexUnit.</p>
<h4><a href="http://osflash.org/xray">XRay</a></h4>
<p>As our old school testing tool, we used this for our AS3 Projects/Modules. Even it&#8217;s little bit outdated and there are now more choices outhere, It still do it&#8217;s job well.</p>
<h4><a href="http://code.google.com/p/fxspy/">FlexSpy</a></h4>
<p>We used it to test flex related projects. Great testing interface and simplicity were major arguments to adopt this tool.</p>
<h4><a href="http://code.google.com/p/beherit/">Beherit</a></h4>
<p>this is (now open source and in Alpha version) flash micro-framework I developed and used on my small-scale projects when I worked at ASOS.com. It was created to simplify high volume development, leaving developer time to do all that cool stuff (with deep-linking, state machine, paging etc is in some way similar to Gaia Framework, but is more oriented to developer designed to work in Flex Builder not Flash). But this time it was used rather for testing small bits. As setting up ready to go project template was matter of 1-2 minutes it was our first choice.</p>
<h2><strong>Other free/open source tools and software we used:</strong></h2>
<p><a href="http://subclipse.tigris.org/">Subclipse</a> – Flex Builder svn client<br />
<a href="http://tortoisesvn.tigris.org/">TroiseSVN</a> – Windows based context menu svn client<br />
<a href="http://www.visualsvn.com/server/">VisualSVN Server</a> – Great, easy to setup svn server<br />
<a href="http://www.dotproject.net/">DotProject</a> – PHP based project managment tool<br />
<a href="http://www.mantisbt.org">Mantis</a> – PHP based bug tracking<br />
<a href="http://staruml.sourceforge.net/en/">StarUML</a> – UML design tool. It even has utility to export UML classes straight to Actionscript ones. Great feature!<br />
<a href="http://hamachi.en.softonic.com/">Hamachi</a> – allows you to setup VPN in practically “seconds”</p>
<p>So this was introduction of our building blocks. Now we can start building something.</p>
<p>In next article I will go trough architecting phase allowing backend/frond end scalability by still leaving performance on both sides.</p>
<p>As our first post hopefully you wasn&#8217;t bored. If you know something cool what could be implemented in such a workflow or use different one, put some comment. Would be happy to see!<br />
Stay tuned <img src='http://labs.syerit.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div id="_mcePaste" style="overflow: hidden; left: -10000px; width: 1px; position: absolute; top: 202px; height: 1px;"><a href="http://www.microsoft.com/NET/">.NET</a><br />
Ok, If you stop reading here I completely understand it. Microsoft technology is not very favourite chap in Flash territory. But we decided to go for it because of more scalable choice, Umbraco and VisualStudio (Forgive me all, but as far as like Flex Builder and new Flash Builder and I mean it, they are still little bit of joke in compare with this monster mother of all IDE. Adobe, please stop treating evolving of Flash Builder as upgraded normal car and start treat it as downgrading supercar). And yes, for me as person coming from both backgrounds nearly simultaneously was this favour choice anyway. But our html version is done with WordPress which means PHP.</div>
]]></content:encoded>
			<wfw:commentRss>http://labs.syerit.com/?feed=rss2&amp;p=4</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
