<?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:coop="http://www.google.com/coop/namespace"
	>

<channel>
	<title>Systems of Seven</title>
	<atom:link href="http://www.systemsofseven.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.systemsofseven.com/blog</link>
	<description>Crafting Patterns from the Formless</description>
	<pubDate>Sat, 06 Dec 2008 06:54:08 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Better than Polymorphic Associations</title>
		<link>http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/</link>
		<comments>http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/#comments</comments>
		<pubDate>Sat, 06 Dec 2008 06:33:56 +0000</pubDate>
		<dc:creator>viatropos</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[Acts]]></category>

		<category><![CDATA[acts_as_commentable]]></category>

		<category><![CDATA[acts_as_dag]]></category>

		<category><![CDATA[acts_as_taggable_on_steroids]]></category>

		<category><![CDATA[Acyclic Graphs]]></category>

		<category><![CDATA[Adva]]></category>

		<category><![CDATA[adva_cms]]></category>

		<category><![CDATA[Apps]]></category>

		<category><![CDATA[Beautiful]]></category>

		<category><![CDATA[Bu]]></category>

		<category><![CDATA[Circumstances]]></category>

		<category><![CDATA[Cms]]></category>

		<category><![CDATA[Composition]]></category>

		<category><![CDATA[Composition over inheritance]]></category>

		<category><![CDATA[Consistency]]></category>

		<category><![CDATA[Custom Models]]></category>

		<category><![CDATA[Dag]]></category>

		<category><![CDATA[design patterns]]></category>

		<category><![CDATA[Direct Acyclic Graphs]]></category>

		<category><![CDATA[Inheritance]]></category>

		<category><![CDATA[Lot]]></category>

		<category><![CDATA[Martin Fowler]]></category>

		<category><![CDATA[Mephisto]]></category>

		<category><![CDATA[Nodes]]></category>

		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[Other Ones]]></category>

		<category><![CDATA[Plugins]]></category>

		<category><![CDATA[Polymorphic Associations]]></category>

		<category><![CDATA[Polymorphism]]></category>

		<category><![CDATA[Preamble]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[rails modules]]></category>

		<category><![CDATA[Relationships]]></category>

		<category><![CDATA[Ruby On Rails]]></category>

		<category><![CDATA[Stereotypes]]></category>

		<category><![CDATA[Steroids]]></category>

		<guid isPermaLink="false">http://www.systemsofseven.com/blog/?p=25</guid>
		<description><![CDATA[Preamble:  Acts_as_dags may prove all you need as a plugin for all content nesting and association in Ruby on Rails.  No more acts_as_polymorphs, acts_as_commentable, acts_as_taggable, has_many :through, has_many => :as ownable, etc.  All of that can be easily handled using acts_as_dag and should allow you to build anything you want and have]]></description>
			<content:encoded><![CDATA[<p><strong>Preamble</strong>:  Acts_as_dags may prove all you need as a plugin for all content nesting and association in Ruby on Rails.  No more acts_as_polymorphs, acts_as_commentable, acts_as_taggable, has_many :through, has_many => :as ownable, etc.  All of that can be easily handled using acts_as_dag and should allow you to build anything you want and have it be way more customizable than any blogging engine or wiki out there so far.</p>
<p><img src="http://www.systemsofseven.com/images/istockphoto_network.jpg" alt="istockphoto image of network" /></p>
<p><strong>The Story</strong><br />
I&#8217;ve recently been trying to design a framework abstract enough to build<br />
all of the web 2.0 stereotypes (blog, wiki, forum, social network, e-<br />
commerce, etc.).  As such, I&#8217;ve looked a lot into how to create<br />
classes dynamic enough to make components that are reusable in all circumstances.<br />
The message is starting to spread around that 90% of the time you<br />
don&#8217;t need to use Inheritance, and a lot of <a class = 'linkit' href='http://wordpress.org/extend/plugins/' rel='external ' title=''>Plugins</a> are starting to<br />
make Rails apps a beautiful Composition of classes, using Modules.</p>
<p>However, I&#8217;ve noticed that people use a lot of the same patterns when<br />
they design their <a class = 'linkit' href='http://wordpress.org/extend/plugins/' rel='external ' title=''>Plugins</a>: acts_as_taggable_on_steroids and<br />
acts_as_commentable both basically use &#8220;Polymorphic Association&#8221; to<br />
allow any of your custom models to be tagged or commented.  A lot of<br />
the other ones are like that too.  And this is definitely NOT DRY.</p>
<p>I&#8217;ve also noticed that most of the open source apps (Mephisto,<br />
Insoshi, CommunityEngine, Adva CMS, Radiant, etc.) all have their own<br />
interpretation of how to divide up the base classes or objects to make<br />
&#8220;a web 2.0 site&#8221;.  In short, there is no consistency where there needs<br />
to be a lot.</p>
<p>What it boils down to is that there are Objects and Relationships Between Objects.<br />
Also called Nodes and Links.  Or Models and Join Models.  Why should there be<br />
A BlogPost, Entry, Content, WikiPost, Comment, Article, and Document when they<br />
are all the same thing, NODES?  And why should you have a Taggable, Commentable,<br />
Favoritable, or Attachable when they are all the same thing, LINKS?</p>
<p>Thinking as such, it seems that all of these web 2.0 applications can be<br />
modeled much much better and in such a way so they are COMPLETELY<br />
modular and scalable.  How can this be done?  Direct Acyclic Graphs.<br />
How could you create a blog with comments, tags, and albums?  You<br />
could use the standard <a class = 'linkit' href='http://wordpress.org/extend/plugins/' rel='external ' title=''>Plugins</a>, but that is not DRY at all since they<br />
are basically performing the same actions just with different names.<br />
You could also just build it as you go, saying X belongs_to Y and Y has_many<br />
X&#8217;s, but in the end your just hard coding non-DRY subclasses&#8230;</p>
<p>Instead, all you need are Links and Nodes.  Links and Nodes.</p>
<p><img src="http://upload.wikimedia.org/wikipedia/commons/0/08/Directed_acyclic_graph.png" alt="Direct Acyclic Graph - The "WEB"" /><br />
(wikipedia image)</p>
<p>Now say you call your root node Content, and your root link Link.<br />
Content could then be subclassed by Post, Comment, Album, etc., models<br />
which only provide extra functionality but which are saved through STI<br />
(Single Table Inheritance) to the database.  Then using acts-as-dag,<br />
a brilliant plugin so that your Node objects can have multiple parents<br />
(instead of using the very limited hierarchical nested set algorithms<br />
as seen in better_nested_set which only allow your objects one parent)<br />
you could have a Post with many Comments (Post as the &#8220;parent&#8221; of the<br />
Comment), while also having the privilege of being able to give those<br />
same Comments another parent.  Example: </p>
<pre language="ruby">
post_one = Post.create!
post_two = Post.create!
comment_one = Comment.create!
comment_two = Comment.create!
post_one.children << comment_one
post_one.children << comment_two
post_two.children << comment_one
post_two.children << comment_two
</pre>
<p>Then in the Link class, which is basically the Join Model like<br />
&#8220;Taggings&#8221; for acts_as_taggable_on_steroids, you say what Model is<br />
allowed to be the parent of what other Model.  So that may look<br />
something like this:</p>
<pre language="ruby">
class Link < ActiveRecord::Base
  acts_as_dag_links :polymorphic => true, :for => {&#8217;Content&#8217; =>
['Content','Comment','Post'],
                          &#8216;Post&#8217; => ['Comment']}
end
</pre>
<p>While this is a very simple example, it basically says that you don&#8217;t<br />
need the <a class = 'linkit' href='http://wordpress.org/extend/plugins/' rel='external ' title=''>Plugins</a> because they aren&#8217;t DRY, or that the <a class = 'linkit' href='http://wordpress.org/extend/plugins/' rel='external ' title=''>Plugins</a> can be<br />
refactored to create a generic LINKABLE one.  Your Link join model does<br />
all of the Polymorphic Associating and wiring of the <a class = 'linkit' href='http://wordpress.org/extend/plugins/' rel='external ' title=''>Plugins</a> PLUS<br />
gives you the option of assigning those comments or tags to other<br />
objects.  Very cool.</p>
<p>This means that you can have a Post in your Blog have multiple parents<br />
(i.e. stored in the database with a reference to &#8220;My Blog about Rails&#8221; and<br />
&#8220;My Blog about Flex&#8221;).  It also means that more complex things like taxonomies<br />
and ontologies can be applied to web 2.0 applications, and this could<br />
really change the way data is structured in our oh-so-common blogs.</p>
<p>Best,<br />
Lance</p>
<p>P.S. I&#8217;m doing this because I hate Wordpress.  I can&#8217;t do anything to make it look nice and do important things unless I work on it for weeks!  It&#8217;s a terrible design.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d25').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d25" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://blinkbits.com/bookmarklets/save.php?v=1&amp;source_url=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;title=Better+than+Polymorphic+Associations" title="Add to&nbsp;BlinkBits"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/blinkbits.png" title="Add to&nbsp;BlinkBits" alt="Add to&nbsp;BlinkBits" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://blinklist.com/index.php?Action=Blink/addblink.php&amp;Name=Better+than+Polymorphic+Associations&amp;Description=Better+than+Polymorphic+Associations&amp;Url=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/" title="Add to&nbsp;BlinkList"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/blinklist.png" title="Add to&nbsp;BlinkList" alt="Add to&nbsp;BlinkList" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.bloglines.com/sub/http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/" title="Add to&nbsp;Bloglines"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/bloglines.png" title="Add to&nbsp;Bloglines" alt="Add to&nbsp;Bloglines" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;title=Better+than+Polymorphic+Associations" title="Add to&nbsp;Blogmarks"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/bmarks.png" title="Add to&nbsp;Blogmarks" alt="Add to&nbsp;Blogmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.blogmemes.net/post.php?url=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;title=Better+than+Polymorphic+Associations" title="Add to&nbsp;Blogmemes"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/blogmemes.png" title="Add to&nbsp;Blogmemes" alt="Add to&nbsp;Blogmemes" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://bluedot.us/Authoring.aspx?u=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;t=Better+than+Polymorphic+Associations" title="Add to&nbsp;Blue Dot"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/bluedot.png" title="Add to&nbsp;Blue Dot" alt="Add to&nbsp;Blue Dot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.bumpzee.com/bump.php?u=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/" title="Add to&nbsp;BUMPzee"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/bumpzee.png" title="Add to&nbsp;BUMPzee" alt="Add to&nbsp;BUMPzee" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://co.mments.com/track?url=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;title=Better+than+Polymorphic+Associations" title="Add to&nbsp;Co.mments"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/comments.png" title="Add to&nbsp;Co.mments" alt="Add to&nbsp;Co.mments" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.connotea.org/addpopup?continue=confirm&amp;uri=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;title=Better+than+Polymorphic+Associations" title="Add to&nbsp;Connotea"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/connotea.png" title="Add to&nbsp;Connotea" alt="Add to&nbsp;Connotea" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;title=Better+than+Polymorphic+Associations" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://de.lirio.us/login/?action=add&amp;address=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;title=Better+than+Polymorphic+Associations" title="Add to&nbsp;De.lirio.us"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/delirious.png" title="Add to&nbsp;De.lirio.us" alt="Add to&nbsp;De.lirio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.diigo.com/post?url=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;title=Better+than+Polymorphic+Associations" title="Add to&nbsp;Diigo"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/diigo.png" title="Add to&nbsp;Diigo" alt="Add to&nbsp;Diigo" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;title=Better+than+Polymorphic+Associations" title="Add to&nbsp;digg"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;title=Better+than+Polymorphic+Associations" title="Add to&nbsp;DotNetKicks"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/dotnetkicks.png" title="Add to&nbsp;DotNetKicks" alt="Add to&nbsp;DotNetKicks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dzone.com/links/add.html?description=Better+than+Polymorphic+Associations&amp;url=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;title=Better+than+Polymorphic+Associations" title="Add to&nbsp;DZone"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/dzone.png" title="Add to&nbsp;DZone" alt="Add to&nbsp;DZone" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://cgi.fark.com/cgi/fark/edit.pl?new_url=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;new_comment=Better+than+Polymorphic+Associations&amp;new_comment=Better+than+Polymorphic+Associations&amp;linktype=Misc" title="Add to&nbsp;Fark"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/fark.png" title="Add to&nbsp;Fark" alt="Add to&nbsp;Fark" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://feedmelinks.com/categorize?from=toolbar&amp;op=submit&amp;name=Better+than+Polymorphic+Associations&amp;url=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;version=0.7" title="Add to&nbsp;Feed Me Links"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/feedmelinks.png" title="Add to&nbsp;Feed Me Links" alt="Add to&nbsp;Feed Me Links" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://extension.fleck.com/?v=b.0.804&amp;url=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/" title="Add to&nbsp;Fleck"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/fleck.png" title="Add to&nbsp;Fleck" alt="Add to&nbsp;Fleck" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://FriendSite.com/users/bookmarks/?u=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;t=Better+than+Polymorphic+Associations" title="Add to&nbsp;FriendSite"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/friendsite.png" title="Add to&nbsp;FriendSite" alt="Add to&nbsp;FriendSite" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://furl.net/storeIt.jsp?t=Better+than+Polymorphic+Associations&amp;u=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/" title="Add to&nbsp;FURL"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/furl.png" title="Add to&nbsp;FURL" alt="Add to&nbsp;FURL" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;title=Better+than+Polymorphic+Associations" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.kaboodle.com/za/selectpage?p_pop=false&amp;pa=url&amp;u=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/" title="Add to&nbsp;Kaboodle"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/kaboodle.png" title="Add to&nbsp;Kaboodle" alt="Add to&nbsp;Kaboodle" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.linkagogo.com/go/AddNoPopup?url=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;title=Better+than+Polymorphic+Associations" title="Add to&nbsp;LinkaGoGo"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/linkagogo.png" title="Add to&nbsp;LinkaGoGo" alt="Add to&nbsp;LinkaGoGo" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.maple.nu/submit.php?url=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/" title="Add to&nbsp;Maple"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/maple.png" title="Add to&nbsp;Maple" alt="Add to&nbsp;Maple" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://ma.gnolia.com/bookmarklet/add?url=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;title=Better+than+Polymorphic+Associations&amp;description=Better+than+Polymorphic+Associations" title="Add to&nbsp;Ma.gnolia"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/magnolia.png" title="Add to&nbsp;Ma.gnolia" alt="Add to&nbsp;Ma.gnolia" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;bm_description=Better+than+Polymorphic+Associations" title="Add to&nbsp;Mister Wong"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/misterwong.png" title="Add to&nbsp;Mister Wong" alt="Add to&nbsp;Mister Wong" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;T=Better+than+Polymorphic+Associations" title="Add to&nbsp;Netscape"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://netvouz.com/action/submitBookmark?url=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;title=Better+than+Polymorphic+Associations&amp;popup=no" title="Add to&nbsp;Netvouz"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/netvouz.png" title="Add to&nbsp;Netvouz" alt="Add to&nbsp;Netvouz" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.newsvine.com/_wine/save?u=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;h=Better+than+Polymorphic+Associations" title="Add to&nbsp;Newsvine"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/newsvine.png" title="Add to&nbsp;Newsvine" alt="Add to&nbsp;Newsvine" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.plugim.com/submit?url=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;title=Better+than+Polymorphic+Associations" title="Add to&nbsp;PlugIM"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/plugim.png" title="Add to&nbsp;PlugIM" alt="Add to&nbsp;PlugIM" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://popcurrent.com/submit?url=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;title=Better+than+Polymorphic+Associations" title="Add to&nbsp;PopCurrent"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/popcurrent.png" title="Add to&nbsp;PopCurrent" alt="Add to&nbsp;PopCurrent" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.rawsugar.com/tagger/?turl=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;tttl=Better+than+Polymorphic+Associations" title="Add to&nbsp;RawSugar"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/rawsugar.png" title="Add to&nbsp;RawSugar" alt="Add to&nbsp;RawSugar" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;title=Better+than+Polymorphic+Associations" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.rojo.com/add-subscription/?resource=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/" title="Add to&nbsp;Rojo"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/rojo.png" title="Add to&nbsp;Rojo" alt="Add to&nbsp;Rojo" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.simpy.com/simpy/LinkAdd.do?href=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;title=Better+than+Polymorphic+Associations" title="Add to&nbsp;Simpy"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/simpy.png" title="Add to&nbsp;Simpy" alt="Add to&nbsp;Simpy" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.sk-rt.com/submit.php?url=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/" title="Add to&nbsp;Sk*rt"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/skirt.png" title="Add to&nbsp;Sk*rt" alt="Add to&nbsp;Sk*rt" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;title=Better+than+Polymorphic+Associations" title="Add to&nbsp;Slashdot"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/slashdot.png" title="Add to&nbsp;Slashdot" alt="Add to&nbsp;Slashdot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;title=Better+than+Polymorphic+Associations" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.shoutwire.com/?p=submit&amp;link=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/" title="Add to&nbsp;Shoutwire"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/shoutwire.png" title="Add to&nbsp;Shoutwire" alt="Add to&nbsp;Shoutwire" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.squidoo.com/lensmaster/bookmark?http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/" title="Add to&nbsp;Squidoo"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/squidoo.png" title="Add to&nbsp;Squidoo" alt="Add to&nbsp;Squidoo" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.sphere.com/search?q=sphereit:http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;title=Better+than+Polymorphic+Associations" title="Add to&nbsp;SphereIt"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/sphereit.png" title="Add to&nbsp;SphereIt" alt="Add to&nbsp;SphereIt" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.spurl.net/spurl.php?url=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;title=Better+than+Polymorphic+Associations" title="Add to&nbsp;Spurl"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/spurl.png" title="Add to&nbsp;Spurl" alt="Add to&nbsp;Spurl" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://taggly.com/bookmarks.php/pass?action=add&amp;address=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/" title="Add to&nbsp;Taggly"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/taggly.png" title="Add to&nbsp;Taggly" alt="Add to&nbsp;Taggly" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://tailrank.com/share/?title=Better+than+Polymorphic+Associations&amp;link_href=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/" title="Add to&nbsp;Tailrank"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/tailrank.png" title="Add to&nbsp;Tailrank" alt="Add to&nbsp;Tailrank" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.thisnext.com/pick/new/submit/sociable/?url=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;name=Better+than+Polymorphic+Associations" title="Add to&nbsp;ThisNext"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/thisnext.png" title="Add to&nbsp;ThisNext" alt="Add to&nbsp;ThisNext" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://webride.org/discuss/split.php?uri=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;title=Better+than+Polymorphic+Associations" title="Add to&nbsp;Webride"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/webride.png" title="Add to&nbsp;Webride" alt="Add to&nbsp;Webride" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.wists.com/t.php?c=null&amp;r=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;u=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;title={text}" title="Add to&nbsp;Wists"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/wists.png" title="Add to&nbsp;Wists" alt="Add to&nbsp;Wists" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/&amp;t=Better+than+Polymorphic+Associations" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
<a style="font-size:90%;text-align: right; " title="Click me to hide the sites." href="#" onclick="$$('div.d25').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); return false;">Hide Sites</a>
</div>
</div>
<!-- Social Bookmarks END -->
<script type="text/javascript">$$('div.d25').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); </script>]]></content:encoded>
			<wfw:commentRss>http://www.systemsofseven.com/blog/2008/12/better-than-polymorphic-associations/feed/</wfw:commentRss>
	
		<coop:keyword><![CDATA[Uncategorized]]></coop:keyword>

		<coop:keyword><![CDATA[Acts]]></coop:keyword>

		<coop:keyword><![CDATA[acts_as_commentable]]></coop:keyword>

		<coop:keyword><![CDATA[acts_as_dag]]></coop:keyword>

		<coop:keyword><![CDATA[acts_as_taggable_on_steroids]]></coop:keyword>

		<coop:keyword><![CDATA[Acyclic Graphs]]></coop:keyword>

		<coop:keyword><![CDATA[Adva]]></coop:keyword>

		<coop:keyword><![CDATA[adva_cms]]></coop:keyword>

		<coop:keyword><![CDATA[Apps]]></coop:keyword>

		<coop:keyword><![CDATA[Beautiful]]></coop:keyword>

		<coop:keyword><![CDATA[Bu]]></coop:keyword>

		<coop:keyword><![CDATA[Circumstances]]></coop:keyword>

		<coop:keyword><![CDATA[Cms]]></coop:keyword>

		<coop:keyword><![CDATA[Composition]]></coop:keyword>

		<coop:keyword><![CDATA[Composition over inheritance]]></coop:keyword>

		<coop:keyword><![CDATA[Consistency]]></coop:keyword>

		<coop:keyword><![CDATA[Custom Models]]></coop:keyword>

		<coop:keyword><![CDATA[Dag]]></coop:keyword>

		<coop:keyword><![CDATA[design patterns]]></coop:keyword>

		<coop:keyword><![CDATA[Direct Acyclic Graphs]]></coop:keyword>

		<coop:keyword><![CDATA[Inheritance]]></coop:keyword>

		<coop:keyword><![CDATA[Lot]]></coop:keyword>

		<coop:keyword><![CDATA[Martin Fowler]]></coop:keyword>

		<coop:keyword><![CDATA[Mephisto]]></coop:keyword>

		<coop:keyword><![CDATA[Nodes]]></coop:keyword>

		<coop:keyword><![CDATA[Open Source]]></coop:keyword>

		<coop:keyword><![CDATA[Other Ones]]></coop:keyword>

		<coop:keyword><![CDATA[Plugins]]></coop:keyword>

		<coop:keyword><![CDATA[Polymorphic Associations]]></coop:keyword>

		<coop:keyword><![CDATA[Polymorphism]]></coop:keyword>

		<coop:keyword><![CDATA[Preamble]]></coop:keyword>

		<coop:keyword><![CDATA[rails]]></coop:keyword>

		<coop:keyword><![CDATA[rails modules]]></coop:keyword>

		<coop:keyword><![CDATA[Relationships]]></coop:keyword>

		<coop:keyword><![CDATA[Ruby On Rails]]></coop:keyword>

		<coop:keyword><![CDATA[Stereotypes]]></coop:keyword>

		<coop:keyword><![CDATA[Steroids]]></coop:keyword>
	</item>
		<item>
		<title>FlexPV3D - Flex UIComponents in Papervision w/ Source</title>
		<link>http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/</link>
		<comments>http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/#comments</comments>
		<pubDate>Sat, 01 Nov 2008 22:05:02 +0000</pubDate>
		<dc:creator>viatropos</dc:creator>
		
		<category><![CDATA[Actionscript 3.0]]></category>

		<category><![CDATA[Enterprise Application Integration]]></category>

		<category><![CDATA[Flash]]></category>

		<category><![CDATA[Flex]]></category>

		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[3d Objects]]></category>

		<category><![CDATA[actionscript]]></category>

		<category><![CDATA[BitmapMaterial]]></category>

		<category><![CDATA[Code Source]]></category>

		<category><![CDATA[Cubes]]></category>

		<category><![CDATA[Demo]]></category>

		<category><![CDATA[design patterns]]></category>

		<category><![CDATA[Event Listener]]></category>

		<category><![CDATA[flex]]></category>

		<category><![CDATA[FlexPV3D]]></category>

		<category><![CDATA[Manipulation]]></category>

		<category><![CDATA[Movieclip]]></category>

		<category><![CDATA[MovieMaterial]]></category>

		<category><![CDATA[Object Move]]></category>

		<category><![CDATA[Papervision]]></category>

		<category><![CDATA[Papervision 3d]]></category>

		<category><![CDATA[Planes]]></category>

		<category><![CDATA[PV3D]]></category>

		<category><![CDATA[Random Posts]]></category>

		<category><![CDATA[Source Code]]></category>

		<category><![CDATA[Source Word]]></category>

		<category><![CDATA[uicomponent]]></category>

		<guid isPermaLink="false">http://www.systemsofseven.com/blog/?p=24</guid>
		<description><![CDATA[Word.  I&#8217;ve been trying to figure out how to make a 3D Flex UIComponent with Papervision 2 for a while now and have come up with a system that seems to work.  I learned a lot from the YahooMapInPV3D AIR example, as well as a ton of other random posts.  Check out]]></description>
			<content:encoded><![CDATA[<p>Word.  I&#8217;ve been trying to figure out how to make a <strong>3D Flex UIComponent with Papervision 2</strong> for a while now and have come up with a system that seems to work.  I learned a lot from the <a href="http://www.pathf.com/blogs/2008/08/papervision3d-20-great-white-in-flex-3-part-ii-iii-combined-with-source-code/">YahooMapInPV3D AIR example</a>, as well as a ton of other random posts.  Check out this demo and see the source code:</p>
<p><a href="http://www.systemsofseven.com/papervision/pv3d_flex/DocumentBased3D.html#"><img src='http://www.systemsofseven.com/images/FlexPV3D_small.png' alt='Flex UIComponent in Papervision' class='alignnone' /></a></p>
<p><a href="http://www.systemsofseven.com/papervision/FlexPV3D.zip">Source</a></strong></p>
<p><strong>How it Works&#8230;</strong><br />
The important class is the FlexBasicView.  This extends Papervision&#8217;s BasicView, making it easy to just add whatever 3D objects you want and to apply MovieMaterials to them all in one place, separate from the main Flex application.  In this class, a few things happen.</p>
<p>First, you create a main DisplayObject3D called sceneManipulationContainer into which you are going to add your Flex-skinned Papervision 3D objects (planes, cubes, etc.) for easy manipulation.  You add that to the FlexBasicView.  The next thing is the most important:  <code>renderMovieClips()</code>.  This packages your UIComponents, which themselves can only be instantiated 3 children down from the main application (for now at least), into a movieClip that is used to create the MovieMaterial.  Once that movieClip is made, you then pass it to the MovieMaterial.  Then you create your DisplayObject3D (Plane in this case), and add your material, which is basically a thick nest => <code>material(movie(uiComponent))</code>.</p>
<p>The <code>movie</code> movieClip (the one used for the material) is then added to a parent movieClip, called <code>movieParent</code>.  And this <code>movieParent</code> is added to the FlexBasicView. </p>
<p>After this, another important step must take place, and this is straight from the YahooMapInPV3D example.  You first add an event listener for the plane (<code>InteractiveScene3DEvent.OBJECT_MOVE</code>).  Then once the object is created and there is movement, this event is handled by the method <code>skinDisplayObject3D()</code>.  What this does is align the movieClip/bundle/material into the right place on the Plane.  Strange&#8230;  But it works!!!</p>
<p>All you have to do now to add custom Flex UIComponents onto this plane is to 1) get a reference to your uiComponent which is 3 levels down from the main application, and 2) pass them into a movieClip which then is passed into the &#8220;movie&#8221; movieClip:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript"><span style="color: #000000; font-weight: bold;">var</span> newMovieClip:<span style="color: #0066CC;">MovieClip</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">MovieClip</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
newMovieClip<span style="color: #66cc66;">&#40;</span>Application.<span style="color: #006600;">application</span>.<span style="color: #006600;">myUIComponent</span><span style="color: #66cc66;">&#41;</span>;
movie.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>newMovieClip<span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p><strong>Better Design Patterns for the Future</strong><br />
I would like to have separated this FlexBasicView into more well defined classes, but I don&#8217;t have the time right now to dig that deep.  Basically, you would create a UIComponentMaterial class that did all the movieClip configuration, and this would take in a UIComponent from the 3-level-down location.  To make this so you don&#8217;t have to do <code>Application.application.myComponent</code>, it would be nice to create this on the main app, and to have a method like <code>UIComponentMaterial.addUIComponent(myComponent)</code> that took care of everything for you.  However, the UIComponent you use for the MovieMaterial skin must also have a reference to the DisplayObject3D in order to become the correct width and height and whatnot, so this might get tricky.  <a href="http://rockonflash.wordpress.com/2008/07/24/papervision3d-fixes-to-virtualmouse-interactivity-and-using-uicomponents/">John Grden&#8217;s</a> <a href="http://online.richmediainstitute.com/course/view.php?id=20">WinterWonderland screencast</a>, which is a pretty hardcore example of what papervision can do, has an excellent example of how to let the movieClip used to make a MovieMaterial have reference to its parent MovieMaterial AND the DisplayObject3D it&#8217;s skinning.  It&#8217;s pretty neat, and maybe that can be applied in this situation.</p>
<p>The goal would be a scenario something like this:</p>
<p>-In the main application mxml file, add the 2 canvases and make the 3rd layer &#8220;FlexBasicView&#8221;</p>

<div class="wp_syntax"><div class="code"><pre class="xml"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;Application<span style="font-weight: bold; color: black;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;Canvas</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;pv3dContainer&quot;</span><span style="font-weight: bold; color: black;">&gt;</span></span>
		<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;me:FlexBasicView</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;flexBasicView&quot;</span><span style="font-weight: bold; color: black;">&gt;</span></span>
		<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/me:FlexBasicView<span style="font-weight: bold; color: black;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/Canvas<span style="font-weight: bold; color: black;">&gt;</span></span></span>
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/Application<span style="font-weight: bold; color: black;">&gt;</span></span></span></pre></div></div>

<p>-Then it would be nice to be able to just put some MXML nested in the FlexBasicView tag that created Papervision components skinned with your UIComponent.  Something like this:</p>

<div class="wp_syntax"><div class="code"><pre class="xml"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;Application<span style="font-weight: bold; color: black;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;Canvas</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;pv3dContainer&quot;</span><span style="font-weight: bold; color: black;">&gt;</span></span>
		<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;me:FlexBasicView</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;flexBasicView&quot;</span><span style="font-weight: bold; color: black;">&gt;</span></span>
			<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;me:sceneManipulationContainer<span style="font-weight: bold; color: black;">&gt;</span></span></span>
				<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;me:FlexPlane</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;extendsDisplayObject3D&quot;</span> <span style="color: #000066;">material</span>=<span style="color: #ff0000;">&quot;{myUIComponent}&quot;</span><span style="font-weight: bold; color: black;">&gt;</span></span>
				<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/me:FlexPlane<span style="font-weight: bold; color: black;">&gt;</span></span></span>
				<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;me:FlexCube</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;alsoExtendsDisplayObject3D&quot;</span><span style="font-weight: bold; color: black;">&gt;</span></span>
					<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;me:MaterialList<span style="font-weight: bold; color: black;">&gt;</span></span></span>
						<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;Lots</span> of Materials with UIComponent references<span style="font-weight: bold; color: black;">&gt;</span></span>
					<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/me:MaterialList<span style="font-weight: bold; color: black;">&gt;</span></span></span>
				<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/me:FlexCube<span style="font-weight: bold; color: black;">&gt;</span></span></span>
			<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/me:sceneManipulationContainer<span style="font-weight: bold; color: black;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/me:FlexBasicView<span style="font-weight: bold; color: black;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;Canvas</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;2ndLayer&quot;</span><span style="font-weight: bold; color: black;">&gt;</span></span>
			<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;me:CommentBox</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;myCommentUIComponent&quot;</span><span style="font-weight: bold; color: black;">/&gt;</span></span>
			<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;me:ProfileBox</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;myProfileUIComponent&quot;</span><span style="font-weight: bold; color: black;">/&gt;</span></span>
			<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;me:CustomBox</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;myUIComponent&quot;</span><span style="font-weight: bold; color: black;">/&gt;</span></span>
		<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/Canvas<span style="font-weight: bold; color: black;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/Canvas<span style="font-weight: bold; color: black;">&gt;</span></span></span>
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/Application<span style="font-weight: bold; color: black;">&gt;</span></span></span></pre></div></div>

<p>Another way of doing that would be to stop at the <FlexBasicView> level, and then do the rest in Actionscript so you could have a little more control.  If any of you guys have any ideas or suggestions, please comment!</p>
<p><strong>Now for the glitches&#8230;</strong><br />
Some things I&#8217;ve noticed.</p>
<ul>
<li>1) You&#8217;ll notice I have a custom Font in the assets folder.  This is because, for some reason, the Text appears in the top left corner if you use Flex&#8217;s default font.  The main glitch you get in all cases is something unexpected appearing in the left corner.</li>
<li>2) If you nest things too deeply, you will get a white box appearing in the top left corner.  This seems to be somewhat arbitrary and I haven&#8217;t pinpointed the reason why it happens.  For example, if you add another nested DataGrid into the CommentBox that comes with the source code, nesting it into a FormItem (just for testing purposes), the white box glitch appears.  Maybe I am missing something about the way Flex UIComponents are supposed to be nested?  This also happens in more normal cases.</li>
<li>3) Sometimes there are differences between Flex Boxes vs. Panels/Canvases.  I&#8217;ve had HBoxes show the white box in the corner too&#8230;</li>
<li>4) In the renderMovieClips() function in FlexBasicView, there are many ways to addChild the movieClips.  Sometimes it works with just one.  Sometimes every nested UIComponent should get their own newMovieClip, and then you add all of them in the order you want to a main movieClip as shown above.</li>
<li>5) Things with Popups don&#8217;t work well, such as the ComboBox.  And there&#8217;s no way to capture the Popup from that class unless you change either the PopupManager or create a CustomComboBox.  You can grab the Combobox.dropdown, but it also tweens, so it&#8217;s sketchy.</li>
<li>6) The scrollbar is jumpy.</li>
<li>7) In some situations you can comment out //movieParent.addChild(movie) and //addChild(movieParent) and you&#8217;ll still see it work, in other situations you won&#8217;t.</li>
<li> <img src='http://www.systemsofseven.com/blog/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> If the width of your component is not a % (like width=&#8221;100%&#8221;), it may create that white box in the corner.  That is, if your width is an absolute value.</li>
<li>9) Sometimes, if you add your UIComponent in MXML it won&#8217;t work.  So you just do it in actionscript.  But sometimes you can also add your UIComponent in MXML, and also say &#8220;addChild(myComponent)&#8221; in actionscript at it will work.</li>
</ul>
<p><strong>Flex and Papervision Don&#8217;t Mix Well&#8230;<br />
But with enough time, it&#8217;s definitely possible</strong><br />
As you can see, this is very rough; there&#8217;s no real system for making Papervision Flex UIComponents yet, though I wish there was!  Maybe the guys from <a href="http://dev.getoutsmart.com/os3d/demos/videoroom/">OutSmart</a> can shed some of their wisdom&#8230;  I have just found that there are no examples on the internet of this being successfully done, and done in such a way that you can switch out components easily and apply it to different DisplayObject3D&#8217;s.  So I&#8217;m throwin this out there for everyone to mess around with <img src='http://www.systemsofseven.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Needless to say, Flex doesn&#8217;t play very well with Papervision, at least in my experience.  Sure there are a few examples on the web of using Sprites in Flex, like the <a href="http://www.sitepoint.com/article/create-3d-product-viewer-flex-3/">3d product gallery</a>, but the real goal is to have 3D Flex UIComponents.  If anyone knows of a better way to do this, by all means let us know.  I&#8217;m looking forward to seeing how this can be done better.</p>
<p>Cheers,<br />
Lance</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d24').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d24" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://blinkbits.com/bookmarklets/save.php?v=1&amp;source_url=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;title=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;BlinkBits"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/blinkbits.png" title="Add to&nbsp;BlinkBits" alt="Add to&nbsp;BlinkBits" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://blinklist.com/index.php?Action=Blink/addblink.php&amp;Name=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source&amp;Description=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source&amp;Url=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/" title="Add to&nbsp;BlinkList"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/blinklist.png" title="Add to&nbsp;BlinkList" alt="Add to&nbsp;BlinkList" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.bloglines.com/sub/http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/" title="Add to&nbsp;Bloglines"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/bloglines.png" title="Add to&nbsp;Bloglines" alt="Add to&nbsp;Bloglines" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;title=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;Blogmarks"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/bmarks.png" title="Add to&nbsp;Blogmarks" alt="Add to&nbsp;Blogmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.blogmemes.net/post.php?url=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;title=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;Blogmemes"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/blogmemes.png" title="Add to&nbsp;Blogmemes" alt="Add to&nbsp;Blogmemes" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://bluedot.us/Authoring.aspx?u=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;t=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;Blue Dot"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/bluedot.png" title="Add to&nbsp;Blue Dot" alt="Add to&nbsp;Blue Dot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.bumpzee.com/bump.php?u=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/" title="Add to&nbsp;BUMPzee"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/bumpzee.png" title="Add to&nbsp;BUMPzee" alt="Add to&nbsp;BUMPzee" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://co.mments.com/track?url=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;title=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;Co.mments"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/comments.png" title="Add to&nbsp;Co.mments" alt="Add to&nbsp;Co.mments" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.connotea.org/addpopup?continue=confirm&amp;uri=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;title=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;Connotea"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/connotea.png" title="Add to&nbsp;Connotea" alt="Add to&nbsp;Connotea" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;title=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://de.lirio.us/login/?action=add&amp;address=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;title=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;De.lirio.us"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/delirious.png" title="Add to&nbsp;De.lirio.us" alt="Add to&nbsp;De.lirio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.diigo.com/post?url=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;title=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;Diigo"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/diigo.png" title="Add to&nbsp;Diigo" alt="Add to&nbsp;Diigo" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;title=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;digg"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;title=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;DotNetKicks"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/dotnetkicks.png" title="Add to&nbsp;DotNetKicks" alt="Add to&nbsp;DotNetKicks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dzone.com/links/add.html?description=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source&amp;url=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;title=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;DZone"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/dzone.png" title="Add to&nbsp;DZone" alt="Add to&nbsp;DZone" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://cgi.fark.com/cgi/fark/edit.pl?new_url=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;new_comment=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source&amp;new_comment=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source&amp;linktype=Misc" title="Add to&nbsp;Fark"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/fark.png" title="Add to&nbsp;Fark" alt="Add to&nbsp;Fark" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://feedmelinks.com/categorize?from=toolbar&amp;op=submit&amp;name=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source&amp;url=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;version=0.7" title="Add to&nbsp;Feed Me Links"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/feedmelinks.png" title="Add to&nbsp;Feed Me Links" alt="Add to&nbsp;Feed Me Links" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://extension.fleck.com/?v=b.0.804&amp;url=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/" title="Add to&nbsp;Fleck"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/fleck.png" title="Add to&nbsp;Fleck" alt="Add to&nbsp;Fleck" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://FriendSite.com/users/bookmarks/?u=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;t=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;FriendSite"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/friendsite.png" title="Add to&nbsp;FriendSite" alt="Add to&nbsp;FriendSite" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://furl.net/storeIt.jsp?t=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source&amp;u=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/" title="Add to&nbsp;FURL"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/furl.png" title="Add to&nbsp;FURL" alt="Add to&nbsp;FURL" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;title=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.kaboodle.com/za/selectpage?p_pop=false&amp;pa=url&amp;u=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/" title="Add to&nbsp;Kaboodle"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/kaboodle.png" title="Add to&nbsp;Kaboodle" alt="Add to&nbsp;Kaboodle" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.linkagogo.com/go/AddNoPopup?url=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;title=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;LinkaGoGo"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/linkagogo.png" title="Add to&nbsp;LinkaGoGo" alt="Add to&nbsp;LinkaGoGo" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.maple.nu/submit.php?url=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/" title="Add to&nbsp;Maple"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/maple.png" title="Add to&nbsp;Maple" alt="Add to&nbsp;Maple" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://ma.gnolia.com/bookmarklet/add?url=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;title=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source&amp;description=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;Ma.gnolia"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/magnolia.png" title="Add to&nbsp;Ma.gnolia" alt="Add to&nbsp;Ma.gnolia" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;bm_description=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;Mister Wong"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/misterwong.png" title="Add to&nbsp;Mister Wong" alt="Add to&nbsp;Mister Wong" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;T=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;Netscape"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://netvouz.com/action/submitBookmark?url=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;title=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source&amp;popup=no" title="Add to&nbsp;Netvouz"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/netvouz.png" title="Add to&nbsp;Netvouz" alt="Add to&nbsp;Netvouz" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.newsvine.com/_wine/save?u=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;h=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;Newsvine"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/newsvine.png" title="Add to&nbsp;Newsvine" alt="Add to&nbsp;Newsvine" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.plugim.com/submit?url=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;title=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;PlugIM"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/plugim.png" title="Add to&nbsp;PlugIM" alt="Add to&nbsp;PlugIM" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://popcurrent.com/submit?url=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;title=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;PopCurrent"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/popcurrent.png" title="Add to&nbsp;PopCurrent" alt="Add to&nbsp;PopCurrent" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.rawsugar.com/tagger/?turl=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;tttl=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;RawSugar"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/rawsugar.png" title="Add to&nbsp;RawSugar" alt="Add to&nbsp;RawSugar" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;title=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.rojo.com/add-subscription/?resource=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/" title="Add to&nbsp;Rojo"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/rojo.png" title="Add to&nbsp;Rojo" alt="Add to&nbsp;Rojo" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.simpy.com/simpy/LinkAdd.do?href=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;title=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;Simpy"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/simpy.png" title="Add to&nbsp;Simpy" alt="Add to&nbsp;Simpy" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.sk-rt.com/submit.php?url=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/" title="Add to&nbsp;Sk*rt"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/skirt.png" title="Add to&nbsp;Sk*rt" alt="Add to&nbsp;Sk*rt" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;title=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;Slashdot"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/slashdot.png" title="Add to&nbsp;Slashdot" alt="Add to&nbsp;Slashdot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;title=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.shoutwire.com/?p=submit&amp;link=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/" title="Add to&nbsp;Shoutwire"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/shoutwire.png" title="Add to&nbsp;Shoutwire" alt="Add to&nbsp;Shoutwire" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.squidoo.com/lensmaster/bookmark?http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/" title="Add to&nbsp;Squidoo"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/squidoo.png" title="Add to&nbsp;Squidoo" alt="Add to&nbsp;Squidoo" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.sphere.com/search?q=sphereit:http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;title=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;SphereIt"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/sphereit.png" title="Add to&nbsp;SphereIt" alt="Add to&nbsp;SphereIt" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.spurl.net/spurl.php?url=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;title=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;Spurl"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/spurl.png" title="Add to&nbsp;Spurl" alt="Add to&nbsp;Spurl" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://taggly.com/bookmarks.php/pass?action=add&amp;address=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/" title="Add to&nbsp;Taggly"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/taggly.png" title="Add to&nbsp;Taggly" alt="Add to&nbsp;Taggly" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://tailrank.com/share/?title=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source&amp;link_href=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/" title="Add to&nbsp;Tailrank"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/tailrank.png" title="Add to&nbsp;Tailrank" alt="Add to&nbsp;Tailrank" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.thisnext.com/pick/new/submit/sociable/?url=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;name=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;ThisNext"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/thisnext.png" title="Add to&nbsp;ThisNext" alt="Add to&nbsp;ThisNext" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://webride.org/discuss/split.php?uri=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;title=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;Webride"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/webride.png" title="Add to&nbsp;Webride" alt="Add to&nbsp;Webride" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.wists.com/t.php?c=null&amp;r=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;u=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;title={text}" title="Add to&nbsp;Wists"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/wists.png" title="Add to&nbsp;Wists" alt="Add to&nbsp;Wists" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/&amp;t=FlexPV3D+-+Flex+UIComponents+in+Papervision+w%2F+Source" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
<a style="font-size:90%;text-align: right; " title="Click me to hide the sites." href="#" onclick="$$('div.d24').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); return false;">Hide Sites</a>
</div>
</div>
<!-- Social Bookmarks END -->
<script type="text/javascript">$$('div.d24').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); </script>]]></content:encoded>
			<wfw:commentRss>http://www.systemsofseven.com/blog/2008/11/flexpv3d-flex-uicomponents-in-papervision/feed/</wfw:commentRss>
	
		<coop:keyword><![CDATA[Actionscript 3.0]]></coop:keyword>

		<coop:keyword><![CDATA[Enterprise Application Integration]]></coop:keyword>

		<coop:keyword><![CDATA[Flash]]></coop:keyword>

		<coop:keyword><![CDATA[Flex]]></coop:keyword>

		<coop:keyword><![CDATA[Uncategorized]]></coop:keyword>

		<coop:keyword><![CDATA[3d Objects]]></coop:keyword>

		<coop:keyword><![CDATA[actionscript]]></coop:keyword>

		<coop:keyword><![CDATA[BitmapMaterial]]></coop:keyword>

		<coop:keyword><![CDATA[Code Source]]></coop:keyword>

		<coop:keyword><![CDATA[Cubes]]></coop:keyword>

		<coop:keyword><![CDATA[Demo]]></coop:keyword>

		<coop:keyword><![CDATA[design patterns]]></coop:keyword>

		<coop:keyword><![CDATA[Event Listener]]></coop:keyword>

		<coop:keyword><![CDATA[flex]]></coop:keyword>

		<coop:keyword><![CDATA[FlexPV3D]]></coop:keyword>

		<coop:keyword><![CDATA[Manipulation]]></coop:keyword>

		<coop:keyword><![CDATA[Movieclip]]></coop:keyword>

		<coop:keyword><![CDATA[MovieMaterial]]></coop:keyword>

		<coop:keyword><![CDATA[Object Move]]></coop:keyword>

		<coop:keyword><![CDATA[Papervision]]></coop:keyword>

		<coop:keyword><![CDATA[Papervision 3d]]></coop:keyword>

		<coop:keyword><![CDATA[Planes]]></coop:keyword>

		<coop:keyword><![CDATA[PV3D]]></coop:keyword>

		<coop:keyword><![CDATA[Random Posts]]></coop:keyword>

		<coop:keyword><![CDATA[Source Code]]></coop:keyword>

		<coop:keyword><![CDATA[Source Word]]></coop:keyword>

		<coop:keyword><![CDATA[uicomponent]]></coop:keyword>
	</item>
		<item>
		<title>Ruboss - Overview of Architecture and Magic</title>
		<link>http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/</link>
		<comments>http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/#comments</comments>
		<pubDate>Thu, 04 Sep 2008 06:00:16 +0000</pubDate>
		<dc:creator>viatropos</dc:creator>
		
		<category><![CDATA[Enterprise Application Integration]]></category>

		<category><![CDATA[Flex]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<category><![CDATA[actionscript]]></category>

		<category><![CDATA[Agile]]></category>

		<category><![CDATA[Application Architecture]]></category>

		<category><![CDATA[Attributes]]></category>

		<category><![CDATA[Binary Data]]></category>

		<category><![CDATA[Check Boxes]]></category>

		<category><![CDATA[Checkbox Data]]></category>

		<category><![CDATA[design patterns]]></category>

		<category><![CDATA[Dispatches]]></category>

		<category><![CDATA[flash]]></category>

		<category><![CDATA[flex]]></category>

		<category><![CDATA[Flex on Rails]]></category>

		<category><![CDATA[Flexible Rails]]></category>

		<category><![CDATA[Hard Drive]]></category>

		<category><![CDATA[Hash]]></category>

		<category><![CDATA[Json]]></category>

		<category><![CDATA[Key Value]]></category>

		<category><![CDATA[Main Goal]]></category>

		<category><![CDATA[Message Format]]></category>

		<category><![CDATA[model view control]]></category>

		<category><![CDATA[mvc]]></category>

		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[Nutshell]]></category>

		<category><![CDATA[Post Boxes]]></category>

		<category><![CDATA[Python]]></category>

		<category><![CDATA[Ruboss]]></category>

		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[Ruby On Rails]]></category>

		<category><![CDATA[Senddata]]></category>

		<category><![CDATA[Server Data]]></category>

		<category><![CDATA[Subtitle]]></category>

		<category><![CDATA[Text Input Boxes]]></category>

		<category><![CDATA[User Interface]]></category>

		<category><![CDATA[Value Pairs]]></category>

		<category><![CDATA[web services]]></category>

		<category><![CDATA[Wed Framework]]></category>

		<guid isPermaLink="false">http://www.systemsofseven.com/blog/?p=23</guid>
		<description><![CDATA[Architecture of the Ruboss Application
The Flex Part:
Let&#8217;s first take a look at the Flex front end.  The main goal of an Enterprise Flex application is to send and receive data to/from a server.  Data may be sent in three main formats: XML, JSON, or AMF.  XML as a data transfer format is]]></description>
			<content:encoded><![CDATA[<p><strong>Architecture of the Ruboss Application</strong></p>
<p><strong>The Flex Part:</strong></p>
<p>Let&#8217;s first take a look at the Flex front end.  The main goal of an Enterprise Flex application is to send and receive data to/from a server.  Data may be sent in three main formats: XML, JSON, or AMF.  XML as a data transfer format is the simplest to understand and most widely used, so that&#8217;s what we will use here.  JSON is an up and coming format that uses a hash of key:value pairs to transfer data and is thus faster than XML, which can become bulky.  AMF is Adobe&#8217;s binary data transfer format (Action Message Format) and is by far the fastest to transfer data, but we will save that for later.</p>
<p>So our goal is send XML data from Flex (or Flash, it&#8217;s just Actionscript) out to a server so a language such as Ruby, PHP, or Python can act do something with it (access a database, store it on a remote hard drive, etc.); we are using Ruby.  Once Ruby does its thing to the data, it sends back data to Flex in any format (and it can be a different format).  Flex then displays the changes on the user interface.  All of this data transfer occurs RESTfully, that is, occurs over HTTP using only GET, POST, UPDATE, and DELETE.</p>
<p><strong>So what is happening???</strong></p>
<p>Enter Cairngorm.  Enter RESTful Cairngorm.  When we type text into the <code>Post</code> text input boxes and check the check boxes in the view, and click &#8220;Save&#8221;, here&#8217;s what happens, in a nutshell&#8230;</p>
<p>View:<br />
-Text and checkbox data are assigned to the attributes of the <code>Post</code> model.  Our <code>Post</code> model has the attributes <code>title</code>, <code>subtitle</code>, <code>body</code>, <code>author</code>, <code>published</code> boolean, and <code>created_at</code> date.<br />
-The button click executes a simple function and passes it a RESTful Event type: <code>sendData(Flexible_blogEvents.CREATE_POST)</code>.<br />
-The <code>sendData(eventType)</code> method dispatches a Cairngorm Event (a regular Event with the added <code>data:*</code> parameter that we use to pass in the <code>Post</code> model) of <code>eventType</code> <code>Flexible_blogEvents.CREATE_POST</code>.</p>
<p>Controller:<br />
-A centralized FlexibleBlogEvents class keeps a list of all the RESTful Events in the application.  This eliminates the need to have a potentially unlimited number of similar event classes.<br />
-The AppController class is instantiated in the Flexible_blog.mxml main Application MXML file.  This allows all events to be listened to and acted upon from the centralized main application file.  The AppController executes the appropriate Command based on the Event it receives, and passes the Command the Event along with its data.  In our case, the PostCommand would be passed the <code>CairngormEvent</code> of type <code>Flexible_blogEvents.CREATE_POST</code> and executed.<br />
-The PostCommand&#8217;s <code>execute()</code> method is called, assigns the <code>event.data</code> value (the <code>Post</code> model and the values it was assigned from the view) to a variable called <code>editedPost</code> of type <code>Post</code>, and calls the corresponding <em>createPost()</em> RESTful method.  The <em>createPost()</em> method then does some neat Ruboss magic.  Where you would normally have to create a delegate and then do a complicated HTTPService request, Ruboss made it so all you need to do is call the <code>create()</code> method on the <code>editedPost</code> model and pass it a callback function.  We do this with the line: <code>editedPost.create({afterCallback: onPostCreate})</code>.<br />
-All of the complicated data transferring over the server to Rails and ultimately to MySQL is handled by some Ruboss magic we don&#8217;t have to worry about, but I&#8217;ll go a little in a bit anyway.</p>
<p>Model:<br />
-The model extends the RubossModel class, allowing us to call RESTful methods directly from the model.  The model is also an Actionscript representation of the database entity, so it has a reference to all of its attributes and its relationships to other entities (<code>belongs_to</code>, <code>has_one</code>, <code>has_many</code>).  Our <code>Post</code> model has the attributes <code>title</code>, <code>subtitle</code>, <code>body</code>, <code>author</code>, <code>published</code>, and <code>createdAt</code>.<br />
-I&#8217;ve also included a ModelLocator that is instantiated anywhere we want to change the view state of the application (say, from the login screen to the main application).</p>
<p>So now we have a Flex application that follows a RESTful MVC Architecture.  Cairngorm was made RESTful by 1) creating a single and centralized Events class that is really just a collection of strings, and 2) creating a single Command for every Model that executes either of four RESTful methods based on the Event type (done by Ruboss magic).  Now you hardly have to think about how to connect a Flex UIComponent to a database.  </p>
<p><strong>Ruboss&#8217;s Flex Magic:</strong></p>
<p>Ruboss effectively eliminates the need to manually use Flex&#8217;s HTTPService class to talk to transfer data across a server.  It does so through its <strong>RubossModelController</strong> class.  The RubossModelController&#8217;s main job is to call the appropriate RESTful methods on a model.  So if you send an event type <code>Flexible_blogEvents.CREATE_POST</code>, it will execute the <code>create()</code> method on the <code>Post</code> model in the RubossModelController.  each RESTful method has reference to the <code>targetServiceId</code> (HTTP, AMF, etc.), the metadata of the model as it transfers across the server, and a a <em>callback</em> object to handle the server response.  All the hard stuff is done for you!   Note, only the &#8220;index&#8221; and &#8220;show&#8221; methods dispatch a <em>propertyChange</em> event, allowing Flex to update its view.</p>
<p>Another important Ruboss class is the <strong>SimpleHTTPController</strong>.  It has one method called <code>send()</code> that instantiates Flex&#8217;s HTTPService, assigns the service an HTTP method, and uses an AsyncToken to send the HTTP request to the server.  This is how it is used, for example, in creating a &#8220;session&#8221; from the SessionsCommand.as file:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript"><span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> createSession<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
     <span style="color: #808080; font-style: italic;">// the &quot;session&quot; is the url we invoke in rails.</span>
	<span style="color: #000000; font-weight: bold;">new</span> SimpleHTTPController<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #0066CC;">send</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;session&quot;</span>, <span style="color: #66cc66;">&#123;</span>login: session.<span style="color: #006600;">login</span>,
	<span style="color: #0066CC;">password</span>: session.<span style="color: #0066CC;">password</span><span style="color: #66cc66;">&#125;</span>, SimpleHTTPController.<span style="color: #006600;">POST</span>, <span style="color: #0066CC;">this</span><span style="color: #66cc66;">&#41;</span>;
     <span style="color: #808080; font-style: italic;">// &quot;this&quot; is the &quot;responder&quot;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Because Flex and Actionscript only support two HTTP methods (GET and POST), Ruboss does some magic to add DELETE and UPDATE.  Pretty neat!  To see an example of how to use the SimpleHTTPController class in a Command, check out how the SessionsCommand was implemented.</p>
<p>Now we have the <strong>RubossModel</strong> class.  This is a <em>bindable</em> class that all models extend (like our <code>Post</code> model) that 1) creates variables for each model attribute you typed into the command line, and 2) allows you to call RESTful methods directly from itself.  Again, the &#8220;show&#8221; method dispatches a <code>propertyChange</code> event to update Flex&#8217;s view.</p>
<p>In order to clone a model, use the <strong>RubossUtils</strong> class: <code>RubossUtils.clone(model)</code>.  It also has functions to see if the model <code>belongs_to</code> another model, or <code>has_many</code> or <code>has_one</code> of some other model.  There&#8217;s some great stuff in this class.</p>
<p>Finally, we have the main <strong>Ruboss</strong> class.  The only two things you need to know now about this class are that it has a reference to the ModelsCollection class through the variable &#8220;models&#8221;, and the &#8220;filter()&#8221; method.  When you call the &#8220;create()&#8221; method on your Post model (or any other of the RESTful methods), the RubossModel class executes the following:<br />
Ruboss.models.create(editedPost, onPostCreate).  Ruboss handles a lot of the repetitive coding was handled for us in the background.  You <a href="http://groups.google.com/group/ruboss-framework/browse_thread/thread/77a5a071173c07c2/0c259c033c4c176f?#0c259c033c4c176f">use the filter method</a> if you want to provide different views of the same model.  Implement it like this:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript">Ruboss.<span style="color: #006600;">filter</span><span style="color: #66cc66;">&#40;</span>Ruboss.<span style="color: #006600;">models</span>.<span style="color: #0066CC;">index</span><span style="color: #66cc66;">&#40;</span>Post<span style="color: #66cc66;">&#41;</span>, yourFilterFunction<span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>There is also an AirServiceProvider class, but we will do that sometime later.  That&#8217;s it for the Ruboss magic!  Ruboss takes care of all the HTTPService requests in the background, making it so we can just call the method we want from the model. In addition, the Ruboss Framework is extremely elegant and only consists of 22 classes.  Nice.</p>
<p><strong>The Rails Part&#8230;</strong></p>
<p>So now we have XML data (or JSON or AMF) that has bend sent from Flex as an HTTP request, and our Rails side of the application needs to handle it.  No problem.   This works because of Rails &#8220;routing&#8221; and its MVC architecture.</p>
<p>When we called the <code>editedPost.create()</code> method, an HTTPService request was sent that was packaged with a URL to manipulate our database <code>Post</code> model.  It sends off a URL called &#8220;posts&#8221; along with the method &#8220;POST&#8221;.  The URL &#8220;posts&#8221; tells you that we are using the posts_controller.  When Rails receives this URL request and HTTP method, it executes the &#8220;create&#8221; method in Ruby.</p>
<p>Here is the &#8220;create&#8221; method that Ruboss scaffolds for us:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby"><span style="color:#008000; font-style:italic;"># POST /posts</span>
<span style="color:#008000; font-style:italic;"># POST /posts.xml</span>
<span style="color:#008000; font-style:italic;"># POST /posts.fxml</span>
<span style="color:#9966CC; font-weight:bold;">def</span> create
  <span style="color:#0066ff; font-weight:bold;">@post</span> = Posts.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:post</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
  respond_to <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>format<span style="color:#006600; font-weight:bold;">|</span>
    <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#0066ff; font-weight:bold;">@post</span>.<span style="color:#9900CC;">save</span>
      flash<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:notice</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#996600;">'Post was successfully created.'</span>
      <span style="color:#CC0066; font-weight:bold;">format</span>.<span style="color:#9900CC;">html</span> <span style="color:#006600; font-weight:bold;">&#123;</span> redirect_to<span style="color:#006600; font-weight:bold;">&#40;</span>@post<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
      <span style="color:#CC0066; font-weight:bold;">format</span>.<span style="color:#9900CC;">xml</span>  <span style="color:#006600; font-weight:bold;">&#123;</span> render <span style="color:#ff3333; font-weight:bold;">:xml</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0066ff; font-weight:bold;">@post</span>, <span style="color:#ff3333; font-weight:bold;">:status</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:created</span>, <span style="color:#ff3333; font-weight:bold;">:location</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0066ff; font-weight:bold;">@post</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
      <span style="color:#CC0066; font-weight:bold;">format</span>.<span style="color:#9900CC;">fxml</span>  <span style="color:#006600; font-weight:bold;">&#123;</span> render <span style="color:#ff3333; font-weight:bold;">:xml</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0066ff; font-weight:bold;">@post</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
    <span style="color:#9966CC; font-weight:bold;">else</span>
      <span style="color:#CC0066; font-weight:bold;">format</span>.<span style="color:#9900CC;">html</span> <span style="color:#006600; font-weight:bold;">&#123;</span> render <span style="color:#ff3333; font-weight:bold;">:action</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;new&quot;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
      <span style="color:#CC0066; font-weight:bold;">format</span>.<span style="color:#9900CC;">xml</span>  <span style="color:#006600; font-weight:bold;">&#123;</span> render <span style="color:#ff3333; font-weight:bold;">:xml</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0066ff; font-weight:bold;">@post</span>.<span style="color:#9900CC;">errors</span>, <span style="color:#ff3333; font-weight:bold;">:status</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:unprocessable_entity</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
      <span style="color:#CC0066; font-weight:bold;">format</span>.<span style="color:#9900CC;">fxml</span>  <span style="color:#006600; font-weight:bold;">&#123;</span> render <span style="color:#ff3333; font-weight:bold;">:xml</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0066ff; font-weight:bold;">@post</span>.<span style="color:#9900CC;">errors</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Every Ruby on Rails controller class looks the same, thanks to the excellent design patterns and scaffolding.  First we create a new post, then the respond_to do block saves the Post and renders the result as either HTML or XML.  I&#8217;m guessing the FXML format is &#8220;Flex XML&#8221; and basically reformats the XML to get rid of dashes and subtle formatting differences between Flex and Ruby on Rails.  All of that is happening in the background.  To see how it actually works, go to the file in the vendor/<a class = 'linkit' href='http://wordpress.org/extend/plugins/' rel='external ' title=''>Plugins</a>/ruboss_rails_integration/lib directory called ruboss_rails_integration.rb.  This is where they register the FXML mimetype and do all the conversions and such.</p>
<p>Here&#8217;s what happens in Ruby on Rails in a nutshell&#8230;</p>
<p>View<br />
- Ruboss doesn&#8217;t use Rails&#8217; ActionView templates because of Flex.  So our View is Flex, and it sends its data as XML (or JSON or AMF).</p>
<p>Controller<br />
-URL from the Flex HTTPService request is routed to the appropriate controller (<code>posts_controller</code> in this case) via the routes.rb file.<br />
-The appropriate controller method is executed (&#8221;create&#8221; in this case).  This access and manipulates the database object using, for instance, <code>Post.find(:id)</code> for &#8220;show&#8221; or <code>Post.new(params[:post])</code> for &#8220;create&#8221;.<br />
-The resulting data is returned to the controller and then formatted to XML or any other specified format.  This is then read by Flex.</p>
<p>Model<br />
-In its most basic form, the model has just references to the objects it associates with (<code>belongs_to</code>, <code>has_one</code>, <code>has_many</code>).  Can have other methods if you want to organize the data a certain way.<br />
-A Migration file is created (<code>create_posts</code>) that allows for easy integration of the model into the database.</p>
<p>That&#8217;s it for now.</p>
<p>ToDo&#8217;s:</p>
<p>- Create a scale-proof Ruby on Rails server cluster to embed into Ruboss (<a href="http://highscalability.com/heroku-simultaneously-develop-and-deploy-automatically-scalable-rails-applications-cloud">Heroku</a>?)<br />
- Create Flex MXML templates for a Blog, Comments, Search (with <a href="http://kpumuk.info/ror-plugins/using-sphinx-search-engine-in-ruby-on-rails/">Sphinx</a>) Forum, Profile, Wiki, PhotoGallery, and Podcast Viewer.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d23').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d23" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://blinkbits.com/bookmarklets/save.php?v=1&amp;source_url=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;title=Ruboss+-+Overview+of+Architecture+and+Magic" title="Add to&nbsp;BlinkBits"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/blinkbits.png" title="Add to&nbsp;BlinkBits" alt="Add to&nbsp;BlinkBits" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://blinklist.com/index.php?Action=Blink/addblink.php&amp;Name=Ruboss+-+Overview+of+Architecture+and+Magic&amp;Description=Ruboss+-+Overview+of+Architecture+and+Magic&amp;Url=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/" title="Add to&nbsp;BlinkList"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/blinklist.png" title="Add to&nbsp;BlinkList" alt="Add to&nbsp;BlinkList" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.bloglines.com/sub/http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/" title="Add to&nbsp;Bloglines"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/bloglines.png" title="Add to&nbsp;Bloglines" alt="Add to&nbsp;Bloglines" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;title=Ruboss+-+Overview+of+Architecture+and+Magic" title="Add to&nbsp;Blogmarks"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/bmarks.png" title="Add to&nbsp;Blogmarks" alt="Add to&nbsp;Blogmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.blogmemes.net/post.php?url=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;title=Ruboss+-+Overview+of+Architecture+and+Magic" title="Add to&nbsp;Blogmemes"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/blogmemes.png" title="Add to&nbsp;Blogmemes" alt="Add to&nbsp;Blogmemes" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://bluedot.us/Authoring.aspx?u=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;t=Ruboss+-+Overview+of+Architecture+and+Magic" title="Add to&nbsp;Blue Dot"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/bluedot.png" title="Add to&nbsp;Blue Dot" alt="Add to&nbsp;Blue Dot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.bumpzee.com/bump.php?u=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/" title="Add to&nbsp;BUMPzee"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/bumpzee.png" title="Add to&nbsp;BUMPzee" alt="Add to&nbsp;BUMPzee" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://co.mments.com/track?url=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;title=Ruboss+-+Overview+of+Architecture+and+Magic" title="Add to&nbsp;Co.mments"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/comments.png" title="Add to&nbsp;Co.mments" alt="Add to&nbsp;Co.mments" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.connotea.org/addpopup?continue=confirm&amp;uri=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;title=Ruboss+-+Overview+of+Architecture+and+Magic" title="Add to&nbsp;Connotea"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/connotea.png" title="Add to&nbsp;Connotea" alt="Add to&nbsp;Connotea" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;title=Ruboss+-+Overview+of+Architecture+and+Magic" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://de.lirio.us/login/?action=add&amp;address=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;title=Ruboss+-+Overview+of+Architecture+and+Magic" title="Add to&nbsp;De.lirio.us"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/delirious.png" title="Add to&nbsp;De.lirio.us" alt="Add to&nbsp;De.lirio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.diigo.com/post?url=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;title=Ruboss+-+Overview+of+Architecture+and+Magic" title="Add to&nbsp;Diigo"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/diigo.png" title="Add to&nbsp;Diigo" alt="Add to&nbsp;Diigo" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;title=Ruboss+-+Overview+of+Architecture+and+Magic" title="Add to&nbsp;digg"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;title=Ruboss+-+Overview+of+Architecture+and+Magic" title="Add to&nbsp;DotNetKicks"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/dotnetkicks.png" title="Add to&nbsp;DotNetKicks" alt="Add to&nbsp;DotNetKicks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dzone.com/links/add.html?description=Ruboss+-+Overview+of+Architecture+and+Magic&amp;url=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;title=Ruboss+-+Overview+of+Architecture+and+Magic" title="Add to&nbsp;DZone"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/dzone.png" title="Add to&nbsp;DZone" alt="Add to&nbsp;DZone" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://cgi.fark.com/cgi/fark/edit.pl?new_url=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;new_comment=Ruboss+-+Overview+of+Architecture+and+Magic&amp;new_comment=Ruboss+-+Overview+of+Architecture+and+Magic&amp;linktype=Misc" title="Add to&nbsp;Fark"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/fark.png" title="Add to&nbsp;Fark" alt="Add to&nbsp;Fark" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://feedmelinks.com/categorize?from=toolbar&amp;op=submit&amp;name=Ruboss+-+Overview+of+Architecture+and+Magic&amp;url=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;version=0.7" title="Add to&nbsp;Feed Me Links"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/feedmelinks.png" title="Add to&nbsp;Feed Me Links" alt="Add to&nbsp;Feed Me Links" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://extension.fleck.com/?v=b.0.804&amp;url=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/" title="Add to&nbsp;Fleck"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/fleck.png" title="Add to&nbsp;Fleck" alt="Add to&nbsp;Fleck" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://FriendSite.com/users/bookmarks/?u=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;t=Ruboss+-+Overview+of+Architecture+and+Magic" title="Add to&nbsp;FriendSite"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/friendsite.png" title="Add to&nbsp;FriendSite" alt="Add to&nbsp;FriendSite" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://furl.net/storeIt.jsp?t=Ruboss+-+Overview+of+Architecture+and+Magic&amp;u=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/" title="Add to&nbsp;FURL"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/furl.png" title="Add to&nbsp;FURL" alt="Add to&nbsp;FURL" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;title=Ruboss+-+Overview+of+Architecture+and+Magic" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.kaboodle.com/za/selectpage?p_pop=false&amp;pa=url&amp;u=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/" title="Add to&nbsp;Kaboodle"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/kaboodle.png" title="Add to&nbsp;Kaboodle" alt="Add to&nbsp;Kaboodle" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.linkagogo.com/go/AddNoPopup?url=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;title=Ruboss+-+Overview+of+Architecture+and+Magic" title="Add to&nbsp;LinkaGoGo"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/linkagogo.png" title="Add to&nbsp;LinkaGoGo" alt="Add to&nbsp;LinkaGoGo" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.maple.nu/submit.php?url=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/" title="Add to&nbsp;Maple"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/maple.png" title="Add to&nbsp;Maple" alt="Add to&nbsp;Maple" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://ma.gnolia.com/bookmarklet/add?url=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;title=Ruboss+-+Overview+of+Architecture+and+Magic&amp;description=Ruboss+-+Overview+of+Architecture+and+Magic" title="Add to&nbsp;Ma.gnolia"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/magnolia.png" title="Add to&nbsp;Ma.gnolia" alt="Add to&nbsp;Ma.gnolia" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;bm_description=Ruboss+-+Overview+of+Architecture+and+Magic" title="Add to&nbsp;Mister Wong"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/misterwong.png" title="Add to&nbsp;Mister Wong" alt="Add to&nbsp;Mister Wong" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;T=Ruboss+-+Overview+of+Architecture+and+Magic" title="Add to&nbsp;Netscape"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://netvouz.com/action/submitBookmark?url=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;title=Ruboss+-+Overview+of+Architecture+and+Magic&amp;popup=no" title="Add to&nbsp;Netvouz"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/netvouz.png" title="Add to&nbsp;Netvouz" alt="Add to&nbsp;Netvouz" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.newsvine.com/_wine/save?u=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;h=Ruboss+-+Overview+of+Architecture+and+Magic" title="Add to&nbsp;Newsvine"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/newsvine.png" title="Add to&nbsp;Newsvine" alt="Add to&nbsp;Newsvine" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.plugim.com/submit?url=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;title=Ruboss+-+Overview+of+Architecture+and+Magic" title="Add to&nbsp;PlugIM"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/plugim.png" title="Add to&nbsp;PlugIM" alt="Add to&nbsp;PlugIM" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://popcurrent.com/submit?url=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;title=Ruboss+-+Overview+of+Architecture+and+Magic" title="Add to&nbsp;PopCurrent"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/popcurrent.png" title="Add to&nbsp;PopCurrent" alt="Add to&nbsp;PopCurrent" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.rawsugar.com/tagger/?turl=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;tttl=Ruboss+-+Overview+of+Architecture+and+Magic" title="Add to&nbsp;RawSugar"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/rawsugar.png" title="Add to&nbsp;RawSugar" alt="Add to&nbsp;RawSugar" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;title=Ruboss+-+Overview+of+Architecture+and+Magic" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.rojo.com/add-subscription/?resource=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/" title="Add to&nbsp;Rojo"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/rojo.png" title="Add to&nbsp;Rojo" alt="Add to&nbsp;Rojo" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.simpy.com/simpy/LinkAdd.do?href=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;title=Ruboss+-+Overview+of+Architecture+and+Magic" title="Add to&nbsp;Simpy"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/simpy.png" title="Add to&nbsp;Simpy" alt="Add to&nbsp;Simpy" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.sk-rt.com/submit.php?url=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/" title="Add to&nbsp;Sk*rt"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/skirt.png" title="Add to&nbsp;Sk*rt" alt="Add to&nbsp;Sk*rt" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;title=Ruboss+-+Overview+of+Architecture+and+Magic" title="Add to&nbsp;Slashdot"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/slashdot.png" title="Add to&nbsp;Slashdot" alt="Add to&nbsp;Slashdot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/&amp;title=Ruboss+-+Overview+of+Architecture+and+Magic" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.shoutwire.com/?p=submit&amp;link=http://www.systemsofseven.com/blog/2008/09/ruboss-overview-of-architecture-and-magic/" title="Add to&nbsp;Shoutwire"><img class="social_img" src="http://www.systemsofseven.com/blog/wp-content/plugins/social_bookmarks/images/shoutwire.png" title="Add to&nbsp;Shoutwire" alt="Add to&nbsp;Shoutwire" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar