<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:series="http://unfoldingneurons.com/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:rawvoice="http://www.rawvoice.com/rawvoiceRssModule/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>dougrdotnet</title>
	
	<link>http://dougr.net</link>
	<description>Ramblings of Flex, ActionScript, and Technology</description>
	<lastBuildDate>Sat, 18 Feb 2012 00:27:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
<!-- podcast_generator="Blubrry PowerPress/2.0.4" -->
	<itunes:summary>Learn about Tech and Business-related topics from professionals.
Brought to you by Douglas Reynolds Consulting
"Putting it all together"
RIA | Business Systems | Executive Administration</itunes:summary>
	<itunes:author>Douglas Reynolds</itunes:author>
	<itunes:explicit>clean</itunes:explicit>
	<itunes:image href="http://dougr.net/wp-content/uploads/powerpress/dougrdotnet_Podcast_Logo.png" />
	<itunes:owner>
		<itunes:name>Douglas Reynolds</itunes:name>
		<itunes:email>dougrdotnet@gmail.com</itunes:email>
	</itunes:owner>
	<managingEditor>dougrdotnet@gmail.com (Douglas Reynolds)</managingEditor>
	<copyright>dougrdotnet</copyright>
	<itunes:subtitle>dougrdotnet - Tech and Business Interviews</itunes:subtitle>
	<itunes:keywords>Technology, Flex, ActionScript, Social Media, Marketing</itunes:keywords>
	<image><link>http://creativecommons.org/licenses/by-sa/3.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image>
	<itunes:category text="Technology" />
	<itunes:category text="Business" />
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Dougrdotnet" /><feedburner:info uri="dougrdotnet" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><thespringbox:skin xmlns:thespringbox="http://www.thespringbox.com/dtds/thespringbox-1.0.dtd">http://feeds.feedburner.com/Dougrdotnet?format=skin</thespringbox:skin><creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license><feedburner:emailServiceId>Dougrdotnet</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>What is RIA?  Why Rich Internet Applications Are Good For Your Business</title>
		<link>http://feedproxy.google.com/~r/Dougrdotnet/~3/NbsGlIWPIAA/</link>
		<comments>http://dougr.net/2012/02/16/what-is-ria-why-rich-internet-applications-are-good-for-your-business/#comments</comments>
		<pubDate>Fri, 17 Feb 2012 03:04:48 +0000</pubDate>
		<dc:creator>dougr</dc:creator>
				<category><![CDATA[Presentations]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://dougr.net/?p=750</guid>
		<description><![CDATA[I was privileged to present on RIA, on behalf of <a href="http://douglasreynoldsconsulting.com/#/Home" title="Douglas Reynolds Consulting" target="_blank">Douglas Reynolds Consulting</a> to the <a href="http://www.aitp.org/" title="Association of Information Technology Professionals" target="_blank">Association of Information Technology Professionals</a> group this evening.]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/3-qEZMGCH1yLq94p-9HqTrTcg80/0/da"><img src="http://feedads.g.doubleclick.net/~a/3-qEZMGCH1yLq94p-9HqTrTcg80/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/3-qEZMGCH1yLq94p-9HqTrTcg80/1/da"><img src="http://feedads.g.doubleclick.net/~a/3-qEZMGCH1yLq94p-9HqTrTcg80/1/di" border="0" ismap="true"></img></a></p><!-- Start Shareaholic LikeButtonSetTop --><!-- End Shareaholic LikeButtonSetTop --><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fdougr.net%2F2012%2F02%2F16%2Fwhat-is-ria-why-rich-internet-applications-are-good-for-your-business%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fdougr.net%2F2012%2F02%2F16%2Fwhat-is-ria-why-rich-internet-applications-are-good-for-your-business%2F&amp;source=dougrdotnet&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>I was privileged to present on RIA, on behalf of <a href="http://douglasreynoldsconsulting.com/#/Home" title="Douglas Reynolds Consulting" target="_blank">Douglas Reynolds Consulting</a> to the <a href="http://www.aitp.org/" title="Association of Information Technology Professionals" target="_blank">Association of Information Technology Professionals</a> group this evening.  They provided an extremely nice venue, networking, dinner, and were very gracious hosts.  The group was comprised of IT professionals, mainly from large enterprise corporations, with roles including Network Administrators, Embedded Systems Developers, Software Developers, Managers, Marketing Specialists, and more.  The audience was involved, interacting with me during the presentation, which made presenting a great deal of fun.  Below is my presentation deck on &#8220;What is RIA?  Why Rich Internet Applications Are Good For Your Business.&#8221;</p>
<div style="width:425px" id="__ss_11623089"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/dougrdotnet/aitpkey" title="Aitp.key" target="_blank">Aitp.key</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/11623089" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/dougrdotnet" target="_blank">Douglas Reynolds</a> </div>
</p></div>
<iframe src='http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdougr.net%2F2012%2F02%2F16%2Fwhat-is-ria-why-rich-internet-applications-are-good-for-your-business%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=35' scrolling='no' frameborder='0' style='border:none; overflow:hidden; width:450px; height:35px' allowTransparency='true'></iframe><div class="shr-publisher-750"></div><!-- Start Shareaholic LikeButtonSetBottom --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fdougr.net%2F2012%2F02%2F16%2Fwhat-is-ria-why-rich-internet-applications-are-good-for-your-business%2F' data-shr_title='What+is+RIA%3F++Why+Rich+Internet+Applications+Are+Good+For+Your+Business'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fdougr.net%2F2012%2F02%2F16%2Fwhat-is-ria-why-rich-internet-applications-are-good-for-your-business%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fdougr.net%2F2012%2F02%2F16%2Fwhat-is-ria-why-rich-internet-applications-are-good-for-your-business%2F' data-shr_title='What+is+RIA%3F++Why+Rich+Internet+Applications+Are+Good+For+Your+Business'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom --><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Dougrdotnet?a=NbsGlIWPIAA:fNWQhyNCc1Q:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Dougrdotnet?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Dougrdotnet/~4/NbsGlIWPIAA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dougr.net/2012/02/16/what-is-ria-why-rich-internet-applications-are-good-for-your-business/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://dougr.net/2012/02/16/what-is-ria-why-rich-internet-applications-are-good-for-your-business/</feedburner:origLink></item>
		<item>
		<title>My FITC Boston 2011 Schedule – Want To Trade Notes?</title>
		<link>http://feedproxy.google.com/~r/Dougrdotnet/~3/FMXFlVZ2bAU/</link>
		<comments>http://dougr.net/2011/10/12/my-fitc-boston-2011-schedule-want-to-trade-notes/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 23:04:33 +0000</pubDate>
		<dc:creator>dougr</dc:creator>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[FITC]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[fitc]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://dougr.net/?p=734</guid>
		<description><![CDATA[<a href="http://www.fitc.ca/events/about/?event=121" target="_blank">FITC Boston</a>, 2011 is coming up quickly and I am finding that there are some sessions that I am interested in that are being presented in the same time slot.  I am planning on doing some post-conference articles here on the sessions that I am attending.  If you would be interested in "Teaming Up" on sharing notes, links, and other insights on sessions then be sure to add a comment below with a link to where your post-session write-ups may be found.]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/9WEVPGEFaaQuKjJwKFmodVM65b0/0/da"><img src="http://feedads.g.doubleclick.net/~a/9WEVPGEFaaQuKjJwKFmodVM65b0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/9WEVPGEFaaQuKjJwKFmodVM65b0/1/da"><img src="http://feedads.g.doubleclick.net/~a/9WEVPGEFaaQuKjJwKFmodVM65b0/1/di" border="0" ismap="true"></img></a></p><!-- Start Shareaholic LikeButtonSetTop --><!-- End Shareaholic LikeButtonSetTop --><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fdougr.net%2F2011%2F10%2F12%2Fmy-fitc-boston-2011-schedule-want-to-trade-notes%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fdougr.net%2F2011%2F10%2F12%2Fmy-fitc-boston-2011-schedule-want-to-trade-notes%2F&amp;source=dougrdotnet&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://www.fitc.ca/events/about/?event=121"><img src="http://dougr.net/wp-content/uploads/2011/10/ria_200x100_forweb_4.jpg" alt="RIA Unleashed Boston 2011" title="ria_200x100_forweb_4" width="200" height="100" class="alignleft size-full wp-image-737" /></a><a href="http://www.fitc.ca/events/about/?event=121" target="_blank">FITC Boston</a>, 2011 is coming up quickly and I am finding that there are some sessions that I am interested in that are being presented in the same time slot.  I am planning on doing some post-conference articles here on the sessions that I am attending.  If you would be interested in &#8220;Teaming Up&#8221; on sharing notes, links, and other insights on sessions then be sure to add a comment below with a link to where your post-session write-ups may be found.  Hopefully, the presenters will publish links to their slides as well and I will be including those when/if available.</p>
<p>My intended schedule looks like it will be:<br />
<strong>Thursday October 27, 2011</strong></p>
<ul>
<li>9:00 AM &#8211; 12:30 PM &#8211; <a href="http://www.fitc.ca/events/presentations/presentation.cfm?event=121&#038;presentation_id=1683" target="_blank">Getting social with Flex with Rob Rusher</a></li>
<li>1:30 PM &#8211; 5:00 PM &#8211; <a href="http://www.fitc.ca/events/presentations/presentation.cfm?event=121&#038;presentation_id=1673" target="_blank">Flex Mobile Boot Camp with Christophe Coenraets and Holly Schinsky</a></li>
</ul>
<p><strong>Friday October 28, 2011</strong></p>
<ul>
<li>9:00 AM &#8211; 10:00 AM &#8211; Adobe Keynote with <a href="http://twitter.com/#!/ryanstewart" target="_blank">Ryan Stewart</a> and <a href="http://twitter.com/#!/tpryan" target="_blank">Terry Ryan</a></li>
<li>10:15 AM &#8211; 11:15 AM &#8211; <a href="http://www.fitc.ca/events/presentations/presentation.cfm?event=121&#038;presentation_id=1655" target="_blank">Refactoring: Getting Things Done, Keeping the Code Clean  with Jesse Warden</a></li>
<li>11:30 AM &#8211; 12:30 PM &#8211; <a href="http://www.fitc.ca/events/presentations/presentation.cfm?event=121&#038;presentation_id=1670" target="_blank">Customizing the look of Mobile Flex with Terry Ryan</a></li>
<li>1:30 PM &#8211; 2:30 PM &#8211; <a href="http://www.fitc.ca/events/presentations/presentation.cfm?event=121&#038;presentation_id=1710" target="_blank">Cross Platform Mobile Applications from the Trenches with Christophe Coenraets</a></li>
<li>2:45 PM &#8211; 3:45 PM &#8211; <a href="http://www.fitc.ca/events/presentations/presentation.cfm?event=121&#038;presentation_id=1669" target="_blank">Introducing Robotlegs 2.0 with Joel Hooks</a></li>
<li>4:00 PM &#8211; 5:00 PM &#8211; <a href="http://www.fitc.ca/events/presentations/presentation.cfm?event=121&#038;presentation_id=1700" target="_blank">Mobile Payments with Flex with Sidney Maestre</a></li>
<li>5:00 PM &#8211; 5:15 PM &#8211; Closing Ceremonies</li>
</ul>
<p>I would love to have a chance to meet you!!  If we don&#8217;t hook up during the conference or at the hotel, I will be planning on stopping in at the Evening Event After Party presented by Digital Primates at The Lansdowne Pub @ 9 Lansdowne Street, Boston (www.lansdownepubboston.com)</p>
<iframe src='http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdougr.net%2F2011%2F10%2F12%2Fmy-fitc-boston-2011-schedule-want-to-trade-notes%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=35' scrolling='no' frameborder='0' style='border:none; overflow:hidden; width:450px; height:35px' allowTransparency='true'></iframe><div class="shr-publisher-734"></div><!-- Start Shareaholic LikeButtonSetBottom --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F10%2F12%2Fmy-fitc-boston-2011-schedule-want-to-trade-notes%2F' data-shr_title='My+FITC+Boston+2011+Schedule+-+Want+To+Trade+Notes%3F'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F10%2F12%2Fmy-fitc-boston-2011-schedule-want-to-trade-notes%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F10%2F12%2Fmy-fitc-boston-2011-schedule-want-to-trade-notes%2F' data-shr_title='My+FITC+Boston+2011+Schedule+-+Want+To+Trade+Notes%3F'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom --><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Dougrdotnet?a=FMXFlVZ2bAU:OblXmgI_6TY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Dougrdotnet?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Dougrdotnet/~4/FMXFlVZ2bAU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dougr.net/2011/10/12/my-fitc-boston-2011-schedule-want-to-trade-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://dougr.net/2011/10/12/my-fitc-boston-2011-schedule-want-to-trade-notes/</feedburner:origLink></item>
		<item>
		<title>Testing a Model Robotlegs EventDispatcher In FlexUnit</title>
		<link>http://feedproxy.google.com/~r/Dougrdotnet/~3/Bpo5xttLIzM/</link>
		<comments>http://dougr.net/2011/10/02/testing-a-model-robotlegs-eventdispatcher-in-flexunit/#comments</comments>
		<pubDate>Sun, 02 Oct 2011 14:37:35 +0000</pubDate>
		<dc:creator>dougr</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flex 4]]></category>
		<category><![CDATA[FlexUnit]]></category>
		<category><![CDATA[Robotlegs]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[flexunit]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[setter]]></category>
		<category><![CDATA[unit test]]></category>

		<guid isPermaLink="false">http://dougr.net/?p=721</guid>
		<description><![CDATA[First off, what makes a model a Robotlegs model?  There is a base class in Robotlegs which is called <a href="http://api.robotlegs.org/org/robotlegs/mvcs/Actor.html" target="_blank">Actor</a>.  By extending Actor, generally used in models and services in Robotlegs applications, we are able to access a property of Actor which is named eventDispatcher.  EventDispatcher is shared throughout the Robotlegs framework, thusly, any events dispatched upon the eventDispatcher may be heard across the entire application.]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/2ho70H4Sxd5GmbnjNBb5bt0e0PY/0/da"><img src="http://feedads.g.doubleclick.net/~a/2ho70H4Sxd5GmbnjNBb5bt0e0PY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/2ho70H4Sxd5GmbnjNBb5bt0e0PY/1/da"><img src="http://feedads.g.doubleclick.net/~a/2ho70H4Sxd5GmbnjNBb5bt0e0PY/1/di" border="0" ismap="true"></img></a></p><!-- Start Shareaholic LikeButtonSetTop --><!-- End Shareaholic LikeButtonSetTop --><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fdougr.net%2F2011%2F10%2F02%2Ftesting-a-model-robotlegs-eventdispatcher-in-flexunit%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fdougr.net%2F2011%2F10%2F02%2Ftesting-a-model-robotlegs-eventdispatcher-in-flexunit%2F&amp;source=dougrdotnet&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>First off, what makes a model a Robotlegs model?  There is a base class in Robotlegs which is called <a href="http://api.robotlegs.org/org/robotlegs/mvcs/Actor.html" target="_blank">Actor</a>.  By extending Actor, generally used in models and services in Robotlegs applications, we are able to access a property of Actor which is named eventDispatcher.  EventDispatcher is shared throughout the Robotlegs framework, thusly, any events dispatched upon the eventDispatcher may be heard across the entire application.  It is not required to extend Actor in a Robotlegs application.  Actor exists as a helper, should you need to be able to dispatch an event and have it heard anywhere in the application.  However, if you do not need to dispatch an event from a particular model, there is no obligation to extend Actor (it is recommended that you don&#8217;t in this case).  Additionally, you may, of course, dispatch an event on the standard Flex framework and not create the dependency on Robotlegs.  You might choose to do this if you plan to use your code in other framework-agnostic applications.<br />
About models and services from <a href="http://shop.oreilly.com/product/0636920021216.do" target="_blank">ActionScript Developer&#8217;s Guide To Robotlegs</a>:</p>
<blockquote><p>
<strong>They don&#8217;t listen, they only talk</strong><br />
Models and services are like the worst kind of dinner party guest.  They have no interest in what other people have to say.  All they do is send messages out to the framework&#8211;they never listen directly to their eventDispatcher property to see what other classes are saying.
</p></blockquote>
<p><em>Aside: If you haven&#8217;t read ActionScript Developer&#8217;s Guide To Robotlegs yet then stop right here.  Over on the right you will find a link to the books site on O&#8217;Reilly Media, go get it NAO!!</em></p>
<p>Okay, the purpose of a model, in general, is to provide an API which preserves state in an application.  A model is updated with state data that then may be used by other classes in your application.  However, we don&#8217;t necessarily want to tightly couple our model to other classes.  The best way to decouple our model is by dispatching events that may be heard by any classes that are interested in knowing that state data has changed.  Enter Actor.  By extending Actor in our model we now have access to the application&#8217;s framework eventDispatcher.</p>
<p>Here is the scenario:  A service call requests some data from some remote data source (e.g. database, Webservice, HttpService, etc&#8230;).  The result event of the service receives the data in the result and passes it to a factory class where it builds the resulting data into an object that we can use.  The factory updates the model&#8217;s property that we are interested in and notifies the service where we can do whatever else we need to do.  The important part here is that the model gets updated.  We could dispatch an event from the factory or service that the model has been updated, but we really don&#8217;t know 100% from these classes that the model data is actually updated.  The only place we can dispatch this event with complete certainty that the data was updated in the model is from the model itself.<br />
Here is the model&#8217;s mutator that we will be testing:</p>
<pre class="brush: as3; title: ; notranslate">
public function set myObject ( myObject : Object ) : void
{
	this._myObject = myObject;
	eventDispatcher.dispatchEvent ( new MyEvent ( MyEvent.MODEL_UPDATED, false, false, myObject ) );
}
</pre>
<p>A benefit of accessors (getters) and mutators (setters).  By using getters and setters in our model we create a public API.  Additionally, by virtue of the setter method, we have a distinct method where a property gets set/updated.  It is within the mutator that we can dispatch an event when we know for certain that the property has been updated.  We also have public methods that we can test, such as testing state data is what it is supposed to be, and in our case for this example that an event is dispatched when state data changes.<br />
The way I approach this is to simply check that the event dispatches when I provide the model&#8217;s property with a new value.  We can add an event listener in the test whose handler method confirms that the event dispatched.  Then we can assert that the result of the handler method is the same as what we expect.  In this case, I increment a counter from an anonymous function if the event listener hears the event and then assertEquals.  If the counter and expected value are equal, then our test passes.  Otherwise, the test fails and we know there is a problem.</p>
<pre class="brush: as3; title: ; notranslate">
[Test]
public function testMyModelSetMyObject_dispatchEvent_MyEventIsDispatched():void
{
	var count:Number = 0;
	instanceModel.eventDispatcher.addEventListener(MyEvent.MODEL_UPDATED, function (event : MyEvent):Number { return count++;} );
	instanceModel.myObject =  MY_OBJECT;

	assertEquals(1,count);

}
</pre>
<p>A bit of convention explained here.  The test name provides for three distinct pieces of information that will be valuable to yourself and anyone who later is maintaining your tests.  A test class name provides the following information:</p>
<ul>
<li>The name of the method under test</li>
<li>The state, or condition, which is under test</li>
<li>The expected behavior of the test method</li>
</ul>
<p>I then declare an instance counter that will be used to assert against.  The instanceModel is the model that we are testing, by setting an eventListener on its eventDispatcher we can listen for the specific event for which we are interested.  In this case, I want to know if the event/type, MyEvent.MODEL_UPDATED is dispatched when the myObject property of the model is updated.  For ease of implementation, I use an anonymous function which takes the MyEvent type as an argument and returns a number to increment a counter and return its value.  Then, I updated the model&#8217;s property, which should dispatch the event.  Lastly, I assertEquals that the counter value is 1 as expected, meaning that the event dispatched, was heard in the anonymous handler method and incremented the counter.</p>
<iframe src='http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdougr.net%2F2011%2F10%2F02%2Ftesting-a-model-robotlegs-eventdispatcher-in-flexunit%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=35' scrolling='no' frameborder='0' style='border:none; overflow:hidden; width:450px; height:35px' allowTransparency='true'></iframe><div class="shr-publisher-721"></div><!-- Start Shareaholic LikeButtonSetBottom --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F10%2F02%2Ftesting-a-model-robotlegs-eventdispatcher-in-flexunit%2F' data-shr_title='Testing+a+Model+Robotlegs+EventDispatcher+In+FlexUnit'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F10%2F02%2Ftesting-a-model-robotlegs-eventdispatcher-in-flexunit%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F10%2F02%2Ftesting-a-model-robotlegs-eventdispatcher-in-flexunit%2F' data-shr_title='Testing+a+Model+Robotlegs+EventDispatcher+In+FlexUnit'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom --><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Dougrdotnet?a=Bpo5xttLIzM:2L-omcBPw-E:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Dougrdotnet?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Dougrdotnet/~4/Bpo5xttLIzM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dougr.net/2011/10/02/testing-a-model-robotlegs-eventdispatcher-in-flexunit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://dougr.net/2011/10/02/testing-a-model-robotlegs-eventdispatcher-in-flexunit/</feedburner:origLink></item>
		<item>
		<title>Stubbing a Command Dependency With Mockolate and FlexUnit</title>
		<link>http://feedproxy.google.com/~r/Dougrdotnet/~3/FHTZMlOWPGo/</link>
		<comments>http://dougr.net/2011/09/26/stubbing-a-command-dependecy-with-mockolate-and-flexunit/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 21:54:02 +0000</pubDate>
		<dc:creator>dougr</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flex 4]]></category>
		<category><![CDATA[FlexUnit]]></category>
		<category><![CDATA[Mockolate]]></category>
		<category><![CDATA[dependency injection]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[flexunit]]></category>
		<category><![CDATA[mockolate]]></category>
		<category><![CDATA[mocks]]></category>
		<category><![CDATA[stubs]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[unit test]]></category>

		<guid isPermaLink="false">http://dougr.net/?p=707</guid>
		<description><![CDATA[In Test Driven Development (TDD) and Unit Testing, it is often necessary to provide the Class Under Test (CUT) with a stub of a class for which it has a dependency.  For instance, this example illustrates a command class that injects a model.  In order to run a test against the execute method of the CUT we need to ensure that the model and related model properties exist for the CUT in order to assert against the command's execute method.]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/Yq8dKOOsy5gy5mHbpudy2vuZKSs/0/da"><img src="http://feedads.g.doubleclick.net/~a/Yq8dKOOsy5gy5mHbpudy2vuZKSs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/Yq8dKOOsy5gy5mHbpudy2vuZKSs/1/da"><img src="http://feedads.g.doubleclick.net/~a/Yq8dKOOsy5gy5mHbpudy2vuZKSs/1/di" border="0" ismap="true"></img></a></p><!-- Start Shareaholic LikeButtonSetTop --><!-- End Shareaholic LikeButtonSetTop --><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fdougr.net%2F2011%2F09%2F26%2Fstubbing-a-command-dependecy-with-mockolate-and-flexunit%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fdougr.net%2F2011%2F09%2F26%2Fstubbing-a-command-dependecy-with-mockolate-and-flexunit%2F&amp;source=dougrdotnet&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>In Test Driven Development (TDD) and Unit Testing, it is often necessary to provide the Class Under Test (CUT) with a stub of a class for which it has a dependency.  For instance, this example illustrates a command class that injects a model.  In order to run a test against the execute method of the CUT we need to ensure that the model and related model properties exist for the CUT in order to assert against the command&#8217;s execute method.<br />
<strong>Mocks and Stubs are Different</strong><br />
First, I want to describe the difference between a Mock and a Stub as there seems to be general confusion over the slight difference that exists.  According to Roy Osherove, in &#8220;The Art of Unit Testing&#8221; a Stub is defined as:</p>
<blockquote><p>
A <em>stub</em> is a controllable replacement for an existing dependency (or collaborator) in the system.
</p></blockquote>
<p>And a Mock is defined as:</p>
<blockquote><p>
A <em>mock object</em> is a fake object in the system that decides whether the unit test has passed or failed.  It does so by verifying whether the object under test interacted as expected with the fake object.
</p></blockquote>
<p>The difference between a Mock and a Stub isn&#8217;t necessarily evident in simply looking at the test code, the two may look very similar.  Instead, it is necessary to consider just what it is that a Mock does as opposed to a Stub.  The difference can be found in how each one is used.  Quite simply, a Mock gets asserted against, we are testing it to verify that the CUT interacted with the Mock as expected; a Stub is not under test and is provided simply as a means to fulfill a dependency of the CUT.  So, again, a Mock is under test and a Stub is a helper class that is fulfilling a dependency of the CUT and it, itself, is not under test.</p>
<p>Here is a diagram that illustrates a model Stub (fake) as is used in a test that asserts against a class, a command for our purposes, for which has a dependency on the model.  Notice the layer of abstraction that is created by the use of an Interface which allows us to swap the the Stub in place of the actual model class by injecting the StubModel rather than Model as would be used in production code:<br />
<a href="http://dougr.net/wp-content/uploads/2011/09/CommandModelDependencyStub_optimized.png"><img src="http://dougr.net/wp-content/uploads/2011/09/CommandModelDependencyStub_optimized.png" alt="Stubbing A Model Dependency" title="CommandModelDependencyStub_optimized" width="495" height="451" class="aligncenter size-full wp-image-709" /></a><br />
Mockolate facilitates the injection of a &#8220;Mockolate&#8221; for us using some metadata to prepare and inject our Stub dependency.  There are a couple of Mockolate helpers that are important to take note of as I will be using them in the example which follows.  In FlexUnit there is the concept of a rule.  Like [Before] and [After] provide that a method will be run before or, respectively, after each test, we can create a rule that defines a dependency injection and have it inject the additional functionality into our test.  Mockolate&#8217;s [Rule] metadata is a helper that invokes FlexUnit&#8217;s [Rule] for us, thereby simplifying the implementation of injected dependency.  Using MockolateRule will asynchronously prepare your dependency before each test and will wait for prepare completion prior to running each test.  MockolateRule  prepares the dependency prior to needing it, ensuring that it exists when used.<br />
Then how do we get our dependency prepared?  Mockolate has another metadata tag, [Mock].  Any public instance variable declared with [Mock] metadata will be automatically prepared and injected for us.  This is very powerful and very sweet!!<br />
<strong>So how do you use this stuff?</strong><br />
Let&#8217;s look at some code to help illustrate how we implement Mockolate Rule and Mockolate Mock and setup our test class:</p>
<pre class="brush: as3; title: ; notranslate">
public class MyCommandTest
{
	[Rule]
	public var rule:MockolateRule = new MockolateRule();

	[Mock]
	public var model:IModelInterface;

	private var instanceCommand:MyCommand;
	protected static const MODEL_OBJECT:ModelObject = new ModelObject();

	[Before]
	public function setUp():void
	{
		instanceCommand = new MyCommand();
		instanceCommand.eventDispatcher = new EventDispatcher();
		instanceCommand.event = new MyEvent ( MyEvent.DO_SOMETHING, false, false, MODEL_OBJECT );
		instanceCommand.model = model;
	}

	[After]
	public function tearDown():void
	{
		instanceCommand = null;
	}
}
</pre>
<p>In the MyCommand test class the following Mockolate and declarations are getting defined:</p>
<ul>
<li>Create a new Mockolate Rule</li>
<li>Create a new Mockolate Mock of the model to be prepared and injected</li>
<li>Create an instand of the command CUT</li>
<li>Create a constant of the model object which is the dependency property we need</li>
</ul>
<p>We need to write our setup and teardown methods which will run before and after each test:</p>
<ul>
<li>Using FlexUnit [Before], create setup which will run before each test in the class</li>
<li>Create a new instanceCommand</li>
<li>Create a new EventDispatcher as our Robotlegs Command needs it</li>
<li>Create a new event as our command happens to inject this event</li>
<li>Assign the model that Mockolate will have prepared for us</li>
<li>Using FlexUnit [After], create a teardown method to clear our setup before the next test</li>
</ul>
<p>At this point we are ready to write our first test.  This test will check to see if the overridden public method execute actually does what it is supposed to.  The execute method in this command updates the injected model with an object payload from the injected event.  Although we need to test that the model does get updated, we are not testing the model here, we only need it because it is a dependency of the command, which we are testing to see that it successfully updates the model.</p>
<pre class="brush: as3; title: ; notranslate">
[Test]
public function testInstanceUpdatesModel_updatesModel_instanceCommandUpdatesModel():void
{
        stub(instanceCommand.model).getter(&quot;modelObject&quot;).returns(MODEL_OBJECT);
	instanceCommand.execute();
}
</pre>
<p>A bit of convention explained here.  The test name provides for three distinct pieces of information that will be valuable to yourself and anyone who later is maintaining your tests.  A test class name provides the following information:</p>
<ul>
<li>The name of the method under test</li>
<li>The state, or condition, which is under test</li>
<li>The expected behavior of the test method</li>
</ul>
<p>Following the method naming, we see a Mockolate method which has not been previously discussed here.  The Mockolate stub method allows us to define a Mockolate expectation, in other words, a dependency.  Again, <em>a Mock is under test and a Stub is a helper class that is fulfilling a dependency of the CUT and it, itself, is not under test.</em><br />
In this case we need to stub the getter of the model&#8217;s &#8220;modelObject&#8221; property and check to make sure that it returns a value of type MODEL_OBJECT when the execute method is called on the command.  The execute method updates the model&#8217;s modelObject property and the getter returns a MODEL_OBJECT object.  If it returns a different type or null, then our test will fail.  If it successfully returns a MODEL_OBJECT type, then it will pass.<br />
Now, to write our command class so we have something to test.  First, write the basic shell of the command with an empty execute method and run the test.  The test will fail, perfect!  Now, lets make the test pass:</p>
<pre class="brush: as3; title: ; notranslate">
public class MyCommand extends Command
{
	[Inject]
	public var model:IModelInterface;
	[Inject]
	public var event:MyEvent;

	override public function execute() : void
	{
		if ( event.myObject ) {
			model.modelObject = event.modelObject;
		}
	}
}
</pre>
<p>The MyCommand class injects the model, mapped to its interface, as well as the event which has our payload to update the model.  The execute method checks to see if myObject payload exists on the event, which it will because we are providing that in our test&#8217;s setup, and then updates the model with the event modelObject.  We run our test again&#8230;Pass!!  Excellent!  At this point we look and see if we need to refactor our command production code, if so, refactor and test again and continue this process until complete.</p>
<p>References:<br />
<a href="http://mockolate.org/" target="_blank">Mockolate</a><br />
<a href="http://docs.flexunit.org/index.php?title=Main_Page" target="_blank">FlexUnit</a></p>
<iframe src='http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdougr.net%2F2011%2F09%2F26%2Fstubbing-a-command-dependecy-with-mockolate-and-flexunit%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=35' scrolling='no' frameborder='0' style='border:none; overflow:hidden; width:450px; height:35px' allowTransparency='true'></iframe><div class="shr-publisher-707"></div><!-- Start Shareaholic LikeButtonSetBottom --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F09%2F26%2Fstubbing-a-command-dependecy-with-mockolate-and-flexunit%2F' data-shr_title='Stubbing+a+Command+Dependency+With+Mockolate+and+FlexUnit'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F09%2F26%2Fstubbing-a-command-dependecy-with-mockolate-and-flexunit%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F09%2F26%2Fstubbing-a-command-dependecy-with-mockolate-and-flexunit%2F' data-shr_title='Stubbing+a+Command+Dependency+With+Mockolate+and+FlexUnit'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom --><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Dougrdotnet?a=FHTZMlOWPGo:DGk0C3mGbFU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Dougrdotnet?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Dougrdotnet/~4/FHTZMlOWPGo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dougr.net/2011/09/26/stubbing-a-command-dependecy-with-mockolate-and-flexunit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://dougr.net/2011/09/26/stubbing-a-command-dependecy-with-mockolate-and-flexunit/</feedburner:origLink></item>
		<item>
		<title>ActionScript – Trim Leading and Trailing 0′s From a String</title>
		<link>http://feedproxy.google.com/~r/Dougrdotnet/~3/wnF7OPv63PQ/</link>
		<comments>http://dougr.net/2011/09/15/actionscript-trim-leading-and-trailing-0s-from-a-string/#comments</comments>
		<pubDate>Fri, 16 Sep 2011 00:16:03 +0000</pubDate>
		<dc:creator>dougr</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[leading 0]]></category>
		<category><![CDATA[regex]]></category>
		<category><![CDATA[string manipulation]]></category>
		<category><![CDATA[trailing 0]]></category>

		<guid isPermaLink="false">http://dougr.net/?p=697</guid>
		<description><![CDATA[Here are some quick and easy solutions for trimming leading and trailing 0's from a string in ActionScript.]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/VuptAtwa5pIpHcS9iO8An1pzG6k/0/da"><img src="http://feedads.g.doubleclick.net/~a/VuptAtwa5pIpHcS9iO8An1pzG6k/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/VuptAtwa5pIpHcS9iO8An1pzG6k/1/da"><img src="http://feedads.g.doubleclick.net/~a/VuptAtwa5pIpHcS9iO8An1pzG6k/1/di" border="0" ismap="true"></img></a></p><!-- Start Shareaholic LikeButtonSetTop --><!-- End Shareaholic LikeButtonSetTop --><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fdougr.net%2F2011%2F09%2F15%2Factionscript-trim-leading-and-trailing-0s-from-a-string%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fdougr.net%2F2011%2F09%2F15%2Factionscript-trim-leading-and-trailing-0s-from-a-string%2F&amp;source=dougrdotnet&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Here are some quick and easy solutions for trimming leading and trailing 0&#8242;s from a string in ActionScript.  The examples that follow illustrate trimming leading 0&#8242;s from a string of numbers only, trimming leading 0&#8242;s from an alpha-numeric string, and trimming trailing 0&#8242;s from either a numeric or alpha-numeric string.  All three are very simple to implement.<br />
In the first problem, we need to trim the leading 0&#8242;s from a string of numbers, &#8220;00076925&#8243; for example.  This is easily accomplished using a simple parseFloat method:</p>
<pre class="brush: as3; title: ; notranslate">
private function trimLeading0sFromString() : void
{
	var numericString:String = &quot;00076925&quot;;
	numericString = parseFloat ( numericString ).toString();
	trace ( numericString ); // 76925
}
</pre>
<p>The next problem is a bit more complex, but nonetheless simple to solve and implement.  In this case we need to trim the leading 0&#8242;s from a string of alpha-numeric characters, &#8220;000076925-B72A32&#8243;.  We&#8217;ll implement a simple regular expression to do the work for us here because using parseFloat would leave us with a result of &#8220;76925&#8243;:</p>
<pre class="brush: as3; title: ; notranslate">
private function trimLeading0sFromString() : void
{
	var alphaNumericString:String = &quot;000076925-B72A32&quot;;
	var pattern:RegExp = new RegExp ( '^0+' );
	alphaNumericString = alphaNumericString.replace ( pattern,'' );
	trace ( alphaNumericString ); 	// 76925-B72A32
}
</pre>
<p>A bit about this simple regex.  We are using a couple of metacharacters to help us.  The caret (^) metacharacter matches the beginning of a string.  We are looking for a beginning of string match, using ^0, which says &#8211; look for a match of 0 at beginning of string.  Lastly, the plus (+) metacharacter matches the previous item, in this case a 0, one or many times.  In this way we can look for as many leading 0&#8242;s in a string and remove them using the replace method, which simply replaces the pattern match with an empty string.</p>
<p>Here in our last example, our problem is that we need to remove the trailing 0&#8242;s, this expression may be used for both numeric and alpha-numeric strings.  Again, in this example we&#8217;ll use a regular expression to accomplish this:</p>
<pre class="brush: as3; title: ; notranslate">
private function trimTrailing0sFromString() : void
{
	var alphaNumericString:String = &quot;76925-B72A320000&quot;;
	var pattern:RegExp = new RegExp ( '[0]+$' );
	alphaNumericString = alphaNumericString.replace ( pattern,'' );
	trace ( alphaNumericString ); 	// 76925-B72A32
}
</pre>
<p>Note the change to the regular expression.  In this example we use the metacharacter [ and ] to create a character class.  We are defining that we will match any number of 0&#8242;s that we may find, matching the previous item, &#8220;+&#8221; at the end of the string &#8220;$&#8221;.</p>
<iframe src='http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdougr.net%2F2011%2F09%2F15%2Factionscript-trim-leading-and-trailing-0s-from-a-string%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=35' scrolling='no' frameborder='0' style='border:none; overflow:hidden; width:450px; height:35px' allowTransparency='true'></iframe><div class="shr-publisher-697"></div><!-- Start Shareaholic LikeButtonSetBottom --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F09%2F15%2Factionscript-trim-leading-and-trailing-0s-from-a-string%2F' data-shr_title='ActionScript+-+Trim+Leading+and+Trailing+0%27s+From+a+String'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F09%2F15%2Factionscript-trim-leading-and-trailing-0s-from-a-string%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F09%2F15%2Factionscript-trim-leading-and-trailing-0s-from-a-string%2F' data-shr_title='ActionScript+-+Trim+Leading+and+Trailing+0%27s+From+a+String'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom --><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Dougrdotnet?a=wnF7OPv63PQ:Dg94pj4fMxk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Dougrdotnet?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Dougrdotnet/~4/wnF7OPv63PQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dougr.net/2011/09/15/actionscript-trim-leading-and-trailing-0s-from-a-string/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://dougr.net/2011/09/15/actionscript-trim-leading-and-trailing-0s-from-a-string/</feedburner:origLink></item>
		<item>
		<title>The Agile Manifesto and Principles</title>
		<link>http://feedproxy.google.com/~r/Dougrdotnet/~3/y2-XwmAso_I/</link>
		<comments>http://dougr.net/2011/09/11/the-agile-manifesto-and-principles/#comments</comments>
		<pubDate>Sun, 11 Sep 2011 16:35:29 +0000</pubDate>
		<dc:creator>dougr</dc:creator>
				<category><![CDATA[Agile Development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[software process]]></category>

		<guid isPermaLink="false">http://dougr.net/?p=674</guid>
		<description><![CDATA[I think it is best to start off a discussion of agile development with reference to the formal origin. The Manifesto for Agile Software Development is the definition of the approach, or methodology, to agile software development.]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/dcZqEoln7clxKp6PRCOcc2oAJHc/0/da"><img src="http://feedads.g.doubleclick.net/~a/dcZqEoln7clxKp6PRCOcc2oAJHc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/dcZqEoln7clxKp6PRCOcc2oAJHc/1/da"><img src="http://feedads.g.doubleclick.net/~a/dcZqEoln7clxKp6PRCOcc2oAJHc/1/di" border="0" ismap="true"></img></a></p><!-- Start Shareaholic LikeButtonSetTop --><!-- End Shareaholic LikeButtonSetTop --><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fdougr.net%2F2011%2F09%2F11%2Fthe-agile-manifesto-and-principles%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fdougr.net%2F2011%2F09%2F11%2Fthe-agile-manifesto-and-principles%2F&amp;source=dougrdotnet&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>I think it is best to start off a discussion of agile development with reference to the formal origin. <a href="http://agilemanifesto.org/" target="_blank">The Manefesto for Agile Software Development</a> is the definition of the approach, or methodology, to agile software development.  Created in 2001, by a group of 17 developers, the Agile Manefesto stands as the basis for what is defined as agile software development.</p>
<blockquote><p>We are uncovering better ways of developing<br />
software by doing it and helping others do it.<br />
Through this work we have come to value:</p>
<p><strong>Individuals and interactions</strong> over processes and tools<br />
<strong>Working software</strong> over comprehensive documentation<br />
<strong>Customer collaboration</strong> over contract negotiation<br />
<strong>Responding to change</strong> over following a plan</p>
<p>That is, while there is value in the items on<br />
the right, we value the items on the left more.</p>
<p style="text-align: center;">Kent Beck Mike Beedle Arie van Bennekum Alistair Cockburn Ward Cunningham Martin Fowler James Grenning Jim Highsmith Andrew Hunt Ron Jeffries Jon Kern Brian Marick Robert C. Martin Steve Mellor Ken Schwaber Jeff Sutherland Dave Thomas</p>
</blockquote>
<p>What is the Manifesto declaring here?  It is a list of principles and intentions.  A public policy that states that we will value individuals and their interactions with one-another over the processes and tools that are used in project development.  Individuals and their interactions are about people and organizational culture, the environment they are in when collaborating on a shared set of goals. A culture that supports individuals in a fluid structure, allowing for a sharing of roles and creativity.  People are empowered in this culture, empowered to create and contribute, to provide solutions to problems and interact with anyone else on the project team. This culture is not about blame, it is about honesty and accountability where mistakes are leveraged as a tool for improvement and learning.</p>
<p>The Manifesto states that we will value working software over comprehensive documentation.  Indeed, what is really the most important deliverable we can give the stakeholders?  Working software.  Additionally, the tenets of &#8220;Clean Code&#8221; provide that well written code is self-documenting.  By using techniques of convention within software development, we are able to produce documentation as a byproduct of well written code.  During discovery, using techniques such as user stories, we are able to capture user requirements documentation directly from the customer, which then is developed into the functionality of the project.  As such, we have allowed the client to participate in, not only the definition of the project, but in the development of the project documentation.  The point is that we can develop a set of documentation that provides nothing without working software.  Obviously, we as developers need to understand what it is that we are going to build.  In planning, we use tools to define such aspects as the functionality, the integration and flow, the user interface design, etc&#8230;  These are very important to our discovery of what it is that we are building and ensuring that what we are about to build is aligned with the vision and roadmap of the project.  In the end, however, it is the working software that determines success or failure of the project, not the documentation.</p>
<p>The next mantra of the Manifesto is customer collaboration over contract negotiation.  Are you really arrogant enough to think that you know what your customer needs?  Should customer collaboration be limited to a requirements document, an executive summary, change orders, project documentation, and a contract, not to mention several other standard project documents?  What about interaction with the client throughout the process?  Client involvement IN the project, throughout the project, has the intended effect of empowering their ownership in the project. Involving the customer in the day-to-day development ensures their accountability in the project.  Customer collaboration provides that we may develop intricacies in the project that not only meet the customer needs but that are within the project scope; scope can be determined and developed in real-time with the interaction of the stakeholder.  What is this collaboration thing?  Collaboration is effective, ongoing, communication with the client that gives us, as developers, the means to listen and understand the client requirements. Collaboration is our opportunity to provide alternatives, point out potential problems, to guide and consult from our professional point of view how we might best achieve the client&#8217;s vision.</p>
<p>Lastly, the Manifesto states that we value responding to change over following a plan.  We are fluid, adaptable, able to bend and redirect the project flow without causing a project failure.  We are able to write code in such a way as to easily incorporate new features, change existing functionality, and provide for changing needs within the project&#8217;s lifecycle.  Any plan, no matter how accurately drafted, is subject to change.  &#8220;Plans in the sand&#8221;.  Obviously, we must have plans in order to communicate processes.  However, it is the plans themselves that must be adaptable and their authors understand that they are but a draft.  Changes need to be assessed and it is important to perform impact analysis on these changes.  It is important to address changes to scope and cost.  The point is, that a plan be able to adapt, to communicate the effects of change, and to incorporate resulting information relevant to deliverables, risks, costs, time, and the impact on down-stream resources.</p>
<p>The Manifesto was created, based upon 12 self-explanatory principles as a guide to software development practice:</p>
<blockquote><p><strong>Principles behind the Agile Manifesto</strong></p>
<p><em>We follow these principles:</em></p>
<ol>
<li>Our highest priority is to satisfy the customer<br />
through early and continuous delivery<br />
of valuable software.</li>
<li>Welcome changing requirements, even late in<br />
development. Agile processes harness change for<br />
the customer&#8217;s competitive advantage.</li>
<li>Deliver working software frequently, from a<br />
couple of weeks to a couple of months, with a<br />
preference to the shorter timescale.</li>
<li>Business people and developers must work<br />
together daily throughout the project.</li>
<li>Build projects around motivated individuals.<br />
Give them the environment and support they need,<br />
and trust them to get the job done.</li>
<li>The most efficient and effective method of<br />
conveying information to and within a development<br />
team is face-to-face conversation.</li>
<li>Working software is the primary measure of progress.</li>
<li>Agile processes promote sustainable development.<br />
The sponsors, developers, and users should be able<br />
to maintain a constant pace indefinitely.</li>
<li>Continuous attention to technical excellence<br />
and good design enhances agility.</li>
<li>Simplicity&#8211;the art of maximizing the amount<br />
of work not done&#8211;is essential.</li>
<li>The best architectures, requirements, and designs<br />
emerge from self-organizing teams.</li>
<li>At regular intervals, the team reflects on how<br />
to become more effective, then tunes and adjusts<br />
its behavior accordingly.</li>
</ol>
</blockquote>
<iframe src='http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdougr.net%2F2011%2F09%2F11%2Fthe-agile-manifesto-and-principles%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=35' scrolling='no' frameborder='0' style='border:none; overflow:hidden; width:450px; height:35px' allowTransparency='true'></iframe><div class="shr-publisher-674"></div><!-- Start Shareaholic LikeButtonSetBottom --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F09%2F11%2Fthe-agile-manifesto-and-principles%2F' data-shr_title='The+Agile+Manifesto+and+Principles'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F09%2F11%2Fthe-agile-manifesto-and-principles%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F09%2F11%2Fthe-agile-manifesto-and-principles%2F' data-shr_title='The+Agile+Manifesto+and+Principles'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom --><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Dougrdotnet?a=y2-XwmAso_I:8zdJT7uDK1E:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Dougrdotnet?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Dougrdotnet/~4/y2-XwmAso_I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dougr.net/2011/09/11/the-agile-manifesto-and-principles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[Agile]]></series:name>
	<feedburner:origLink>http://dougr.net/2011/09/11/the-agile-manifesto-and-principles/</feedburner:origLink></item>
		<item>
		<title>Agile</title>
		<link>http://feedproxy.google.com/~r/Dougrdotnet/~3/S3Ovl42plEI/</link>
		<comments>http://dougr.net/2011/09/09/agile/#comments</comments>
		<pubDate>Sat, 10 Sep 2011 02:30:43 +0000</pubDate>
		<dc:creator>dougr</dc:creator>
				<category><![CDATA[Agile Development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[software process]]></category>

		<guid isPermaLink="false">http://dougr.net/?p=663</guid>
		<description><![CDATA[Agile...I rather like that this word was coined to represent a development methodology.  As defined by <a href="http://www.merriam-webster.com/dictionary/agile" target="_blank">Merriam-Webster</a>, I believe it is quite accurate.]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/RucoFy4_BJIU5MOsizRS2_sjdOU/0/da"><img src="http://feedads.g.doubleclick.net/~a/RucoFy4_BJIU5MOsizRS2_sjdOU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/RucoFy4_BJIU5MOsizRS2_sjdOU/1/da"><img src="http://feedads.g.doubleclick.net/~a/RucoFy4_BJIU5MOsizRS2_sjdOU/1/di" border="0" ismap="true"></img></a></p><!-- Start Shareaholic LikeButtonSetTop --><!-- End Shareaholic LikeButtonSetTop --><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fdougr.net%2F2011%2F09%2F09%2Fagile%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fdougr.net%2F2011%2F09%2F09%2Fagile%2F&amp;source=dougrdotnet&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Agile&#8230;I rather like that this word was coined to represent a development methodology.  As defined by <a href="http://www.merriam-webster.com/dictionary/agile" target="_blank">Merriam-Webster</a>, I believe it is quite accurate.</p>
<blockquote><p>
1: marked by ready ability to move with quick easy grace <an agile dancer><br />
2: having a quick resourceful and adaptable character <an agile mind><br />
&#8230;<br />
Origin of Agile<br />
Middle French, from Latin agilis, from agere to drive, act<br />
&#8230;<br />
Synonyms: graceful, featly, feline, gracile, light, light-footed (also light-foot), lightsome, lissome (also lissom), lithe, lithesome, nimble, spry</p>
<p>Antonyms: awkward, clumsy, gawky, graceless, klutzy, lumbering, ungainly, ungraceful
</p></blockquote>
<p>Moving quickly with easy grace, having quick resourceful and adaptable character, to drive.  Not only does Agile refer to physical movement and grace, it encompasses the mind, resourcefulness, and adaptation.  All of these things are important to us as developers and when incorporated into our project development methodology we have the potential to become better, provide a higher degree of professionalism and quality.  Agile allows us to become more accurate, be more flexible, break down complexity into less complex and manageable chunks.  Agile provides us a means to break out of linear, tightly coupled, waterfall monoliths; allowing us to create code in a communicative, craftsman-like, professional manner.  Code which more readily meets our Customer&#8217;s (Stakeholder&#8217;s) requirements, code which is more manageable, testable, clean, and, well&#8230;, beautiful.</p>
<p>We have an obligation to be professional, just as bound to this obligation as any other professional &#8211; whether a surgeon, a CPA, or a cabinet maker.  We can be artisans of our trade.</p>
<p>Herein we discuss User Stories, requirements elicitation, communication, feedback, prioritization, definition of scenarios, understanding.  We talk about Test Driven Development and Unit Testing, having a look at &#8220;The Art of Unit Testing&#8221; by <a href="http://osherove.com/" target="_blank">Roy Osherove</a>.  We discuss &#8220;Clean Code&#8221; concepts from <a href="http://www.cleancoders.com/" target="_blank">Uncle Bob Martin</a> and why this should be required reading for every developer.  We cover SCRUM, its purpose and benefits in agile development.  Along the way we learn more and cover additional Agile topics.</p>
<p>Welcome to my Agile series.</p>
<iframe src='http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdougr.net%2F2011%2F09%2F09%2Fagile%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=35' scrolling='no' frameborder='0' style='border:none; overflow:hidden; width:450px; height:35px' allowTransparency='true'></iframe><div class="shr-publisher-663"></div><!-- Start Shareaholic LikeButtonSetBottom --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F09%2F09%2Fagile%2F' data-shr_title='Agile'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F09%2F09%2Fagile%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F09%2F09%2Fagile%2F' data-shr_title='Agile'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom --><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Dougrdotnet?a=S3Ovl42plEI:enZGOGClabo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Dougrdotnet?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Dougrdotnet/~4/S3Ovl42plEI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dougr.net/2011/09/09/agile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[Agile]]></series:name>
	<feedburner:origLink>http://dougr.net/2011/09/09/agile/</feedburner:origLink></item>
		<item>
		<title>Improving Flash Builder Performance</title>
		<link>http://feedproxy.google.com/~r/Dougrdotnet/~3/KvnmQycM_0M/</link>
		<comments>http://dougr.net/2011/08/12/improving-flash-builder-performance/#comments</comments>
		<pubDate>Fri, 12 Aug 2011 15:52:55 +0000</pubDate>
		<dc:creator>dougr</dc:creator>
				<category><![CDATA[FlashBuilder]]></category>
		<category><![CDATA[jvm]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://dougr.net/?p=654</guid>
		<description><![CDATA[Ever do something and then wonder why you didn't do it years ago?

I just updated my Flash Builder 4.5.ini jvm settings to increase allocated memory and found a noticeable improvement, overall, in Flash Builder.]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/cLigreDT62stL4uImAvkTh7IPhA/0/da"><img src="http://feedads.g.doubleclick.net/~a/cLigreDT62stL4uImAvkTh7IPhA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/cLigreDT62stL4uImAvkTh7IPhA/1/da"><img src="http://feedads.g.doubleclick.net/~a/cLigreDT62stL4uImAvkTh7IPhA/1/di" border="0" ismap="true"></img></a></p><!-- Start Shareaholic LikeButtonSetTop --><!-- End Shareaholic LikeButtonSetTop --><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fdougr.net%2F2011%2F08%2F12%2Fimproving-flash-builder-performance%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fdougr.net%2F2011%2F08%2F12%2Fimproving-flash-builder-performance%2F&amp;source=dougrdotnet&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Ever do something and then wonder why you didn&#8217;t do it years ago?</p>
<p>I just updated my Flash Builder 4.5.ini jvm settings to increase allocated memory and found a noticeable improvement, overall, in Flash Builder.  I am using the stand-alone installation on Mac, so my .ini file is found by clicking on my Adobe Flash Builder 4.5.app (launcher) file and selecting &#8220;Show Package Contents&#8221;.  The Adobe Flash Builder 4.5.ini file is found in Contents/MacOS/ folder in the launcher.  If you are using an Eclipse plugin installation, then it would be the same path from your Eclipse installation.</p>
<p>I have 6GB of RAM on my machine, these settings might be able to be tweaked for even better performance but I am really pleased with the performance increase I&#8217;m getting from this configuration:</p>
<pre>
-nl
en_US
-startup
../../../eclipse/plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar
--launcher.library
../../../eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx_1.1.1.R36x_v20100810
--launcher.defaultAction
openFile
-showsplash
-vmargs
-Xms512m
-Xmx1024m
-XX:MaxPermSize=512m
-XX:PermSize=128m
-Xdock:name=Flash Builder
-Xdock:icon=../Resources/fb_app.icns
-XstartOnFirstThread
-Dorg.eclipse.swt.internal.carbon.smallFonts
-Declipse.product=com.adobe.flexbuilder.standalone.producte36
-Declipse.application=com.adobe.flexbuilder.standalone.FlashBuilderApplication
</pre>
<p>Basically, I simply doubled all memory settings.  Improvements were immediate and noticeable upon restart.</p>
<p>_HTH</p>
<p>References:<br />
<a href="http://kb2.adobe.com/cps/863/cpsid_86392.html">Adobe Knowledge Base</a><br />
<a href="http://polygeek.com/2496_flex_improve-flash-builders-performance-by-updating-your-eclipse-ini-file">PolyGeek</a></p>
<iframe src='http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdougr.net%2F2011%2F08%2F12%2Fimproving-flash-builder-performance%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=35' scrolling='no' frameborder='0' style='border:none; overflow:hidden; width:450px; height:35px' allowTransparency='true'></iframe><div class="shr-publisher-654"></div><!-- Start Shareaholic LikeButtonSetBottom --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F08%2F12%2Fimproving-flash-builder-performance%2F' data-shr_title='Improving+Flash+Builder+Performance'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F08%2F12%2Fimproving-flash-builder-performance%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F08%2F12%2Fimproving-flash-builder-performance%2F' data-shr_title='Improving+Flash+Builder+Performance'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom --><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Dougrdotnet?a=KvnmQycM_0M:NeqLt-4qvY0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Dougrdotnet?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Dougrdotnet/~4/KvnmQycM_0M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dougr.net/2011/08/12/improving-flash-builder-performance/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://dougr.net/2011/08/12/improving-flash-builder-performance/</feedburner:origLink></item>
		<item>
		<title>32GB 10.1″ Android Tablet Poll</title>
		<link>http://feedproxy.google.com/~r/Dougrdotnet/~3/W8O_uAmf-8s/</link>
		<comments>http://dougr.net/2011/07/22/32gb-10-1-android-tablet-poll/#comments</comments>
		<pubDate>Fri, 22 Jul 2011 23:35:37 +0000</pubDate>
		<dc:creator>dougr</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Devices]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[devices]]></category>
		<category><![CDATA[tablets]]></category>

		<guid isPermaLink="false">http://dougr.net/?p=643</guid>
		<description><![CDATA[Motorolla Xoom, Samsung Galaxy Tab, and the Acer Iconia A500. All 3 are 10.1". All specs are pretty much the same except for the following:]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/8vcWX8UTyiRYsIM2v6IXSPXO7L4/0/da"><img src="http://feedads.g.doubleclick.net/~a/8vcWX8UTyiRYsIM2v6IXSPXO7L4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/8vcWX8UTyiRYsIM2v6IXSPXO7L4/1/da"><img src="http://feedads.g.doubleclick.net/~a/8vcWX8UTyiRYsIM2v6IXSPXO7L4/1/di" border="0" ismap="true"></img></a></p><!-- Start Shareaholic LikeButtonSetTop --><!-- End Shareaholic LikeButtonSetTop --><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fdougr.net%2F2011%2F07%2F22%2F32gb-10-1-android-tablet-poll%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fdougr.net%2F2011%2F07%2F22%2F32gb-10-1-android-tablet-poll%2F&amp;source=dougrdotnet&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.
<p>I&#8217;m thinking about getting an Android tablet for Dev, as well as regular tablet use. There are 3 that I am considering: Motorolla Xoom, Samsung Galaxy Tab, and the Acer Iconia A500. All 3 are 10.1&#8243;. All specs are pretty much the same except for the following:</p>
<p>Samsung has the greatest resolution on it&#8217;s rear-facing camera (8 megapixels, compared to 5 on the other 2) &#8211; +1<br />
Samsung records in 1080p, compared to 720 on the others +1<br />
Samsung has no SD card (boo!) &#8211; <del datetime="2011-07-23T13:37:02+00:00">Xoom&#8217;s currently doesn&#8217;t work right</del> (Galaxy -2<del datetime="2011-07-23T13:37:02+00:00">, Xoom -1</del>)<br />
Samsung has no hdmi output -1<br />
Acer has a USB interface, Xoom has a microUSB interface, Samsung has a proprietary interface to USB (acer +1, xoom +1)</p>
<p>Final Score:<br />
Samsung -1<br />
Xoom +1<br />
Acer +1</p>
<p>Oh, cost:<br />
Acer ~ $450<br />
Galaxy Tab ~ $599<br />
Xoom ~ $499</p>
<p>What do you think of this comparison and weighting of scores?<br />
Feel free to add comment about additional considerations or tablets you feel should be included.</p>
<iframe src='http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdougr.net%2F2011%2F07%2F22%2F32gb-10-1-android-tablet-poll%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=35' scrolling='no' frameborder='0' style='border:none; overflow:hidden; width:450px; height:35px' allowTransparency='true'></iframe><div class="shr-publisher-643"></div><!-- Start Shareaholic LikeButtonSetBottom --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F07%2F22%2F32gb-10-1-android-tablet-poll%2F' data-shr_title='32GB+10.1%22+Android+Tablet+Poll'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F07%2F22%2F32gb-10-1-android-tablet-poll%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F07%2F22%2F32gb-10-1-android-tablet-poll%2F' data-shr_title='32GB+10.1%22+Android+Tablet+Poll'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom --><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Dougrdotnet?a=W8O_uAmf-8s:X8k_wtpru10:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Dougrdotnet?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Dougrdotnet/~4/W8O_uAmf-8s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dougr.net/2011/07/22/32gb-10-1-android-tablet-poll/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://dougr.net/2011/07/22/32gb-10-1-android-tablet-poll/</feedburner:origLink></item>
		<item>
		<title>Robotlegs Project Skeleton With TDD</title>
		<link>http://feedproxy.google.com/~r/Dougrdotnet/~3/vMCo6riZoV8/</link>
		<comments>http://dougr.net/2011/07/10/robotlegs-project-skeleton-with-tdd/#comments</comments>
		<pubDate>Mon, 11 Jul 2011 00:43:00 +0000</pubDate>
		<dc:creator>dougr</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flex 4]]></category>
		<category><![CDATA[FlexUnit]]></category>
		<category><![CDATA[Robotlegs]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[flexunit]]></category>
		<category><![CDATA[robotlegs]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Unit Testing]]></category>

		<guid isPermaLink="false">http://dougr.net/?p=626</guid>
		<description><![CDATA[I like to setup a basic skeleton project to use as a template for new projects.  Given that I've been developing with <a href="http://www.robotlegs.org/">Robotlegs</a> for the past couple months, and I'm getting more and more comfortable with it, I decided to go ahead and flush out a skeleton project with <a href="http://flexunit.org/" target="_blank">FlexUnit</a> for TDD and UnitTesting.]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/07xus1SNPM6Q1HtKcZD8XcFFPyg/0/da"><img src="http://feedads.g.doubleclick.net/~a/07xus1SNPM6Q1HtKcZD8XcFFPyg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/07xus1SNPM6Q1HtKcZD8XcFFPyg/1/da"><img src="http://feedads.g.doubleclick.net/~a/07xus1SNPM6Q1HtKcZD8XcFFPyg/1/di" border="0" ismap="true"></img></a></p><!-- Start Shareaholic LikeButtonSetTop --><!-- End Shareaholic LikeButtonSetTop --><div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fdougr.net%2F2011%2F07%2F10%2Frobotlegs-project-skeleton-with-tdd%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fdougr.net%2F2011%2F07%2F10%2Frobotlegs-project-skeleton-with-tdd%2F&amp;source=dougrdotnet&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>I like to setup a basic skeleton project to use as a template for new projects.  Given that I&#8217;ve been developing with <a href="http://www.robotlegs.org/">Robotlegs</a> for the past couple months, and I&#8217;m getting more and more comfortable with it, I decided to go ahead and flush out a skeleton project with <a href="http://flexunit.org/" target="_blank">FlexUnit</a> for TDD and UnitTesting.<br />
Another great thing about skeleton projects is that they illustrate how a project can be setup in as bare form as possible.  It is always difficult to get into docs and get started quickly when trying to figure out how to simply get a project setup.  So for beginners in Robotlegs, I hope this gives you a head start on sorting through the framework.</p>
<p>Here is the quick rundown on Robotlegs with links to docs:<br />
Be sure to checkout the <a href="https://github.com/robotlegs/robotlegs-framework/wiki/Best-Practices" target="_blank">Robotlegs Best Practices</a> wiki, and&#8230;<br />
<a href="http://api.robotlegs.org/" target="_blank">Robotlegs API Documentation</a><br />
.<br />
<strong>Context</strong><br />
Every Robotlegs project has a <a href="https://github.com/robotlegs/robotlegs-framework/wiki/Best-Practices#thecontext" target="_blank">context</a>, which is the central application communication mechanism.</p>
<p><strong>Controllers</strong><br />
Controllers are comprised of command objects which perform something specific in the application.</p>
<p><strong>Commands</strong><br />
Commands are stateless objects that do specific work.</p>
<p><strong>Model</strong><br />
Models are stateful objects which provide a means to store application state.</p>
<p><strong>Views and Mediators</strong><br />
<a href="https://github.com/robotlegs/robotlegs-framework/wiki/Best-Practices#viewandmediators" target="_blank">Views and Mediators</a> are the user interface to your application and the pattern of handling interaction with the views in the application.  A mediator decouples the view from the application by handling event listening and dispatching view and framework events.</p>
<p><strong>Dependency Injection</strong><br />
Robotlegs uses the SwiftSuspenders dependency injection library to provide IoC in the framework.  <a href="https://github.com/robotlegs/robotlegs-framework/wiki/Best-Practices#usingtheinjectors" target="_blank">Dependency Injection</a> is basically providing an object with its properties.  For instance, you could inject an event into your command so that you can access that event&#8217;s properties and values.</p>
<p>The skeleton project provides a template that can be modified and tailored to meet your needs, changing and improving over time, so that you can quickly ramp up new projects.  This project provides a basic application directory structure and Robotlegs framework architecture, along with implemented FlexUnit test suite and test classes.  It is completely setup for Test Driven Development and continual Unit Testing as you develop your application.  The skeleton is setup for Flash Builder 4.5 Premium, for use with FlexUnit.  If you find errors in your FlexUnitApplication and/or FlexUnitCompilerApplication files upon creating your project, rebuild those files in the FlexUnit view by clicking on its refresh button.</p>
<p>Below, for convenience, I have provided a running .swf of the application, being that it is just a skeleton it doesn&#8217;t do anything yet other than launch an alert.  You can right click on the .swf to view its source.  I will be maintaining the skeleton based upon feedback and ideas about what should be included.</p>

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_RobotlegsSkeleton_1848379142"
			class="flashmovie"
			width="500"
			height="300">
	<param name="movie" value="http://dougr.net/projects/robotlegs_skeleton/RobotlegsSkeleton.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://dougr.net/projects/robotlegs_skeleton/RobotlegsSkeleton.swf"
			name="fm_RobotlegsSkeleton_1848379142"
			width="500"
			height="300">
	<!--<![endif]-->
		
<p><a href="http://adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>

	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p>You can download the .fxp here <a class='wpdm-popup' rel='colorbox' title='Robotlegs Skeleton With TDD Project' href='http://dougr.net/?download=1' style="background:url('http://dougr.net/wp-content/plugins/download-manager/icon/download.png') no-repeat;padding:3px 12px 12px 28px;font:bold 10pt verdana;">Robotlegs Skeleton With TDD</a><br><small style='margin-left:30px;'>Downloaded 104 times</small></p>
<p>Thanks to <a href="http://twitter.com/seantheflexguy">@seantheflexguy</a> for project review and ideas.<br />
Reference: <a href="https://github.com/Stray/robotlegs-demo-StrategyGame">Strategy game</a>.   Test setup is largely influenced by <a href="http://twitter.com/stray_and_ruby">Stray</a></p>
<iframe src='http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdougr.net%2F2011%2F07%2F10%2Frobotlegs-project-skeleton-with-tdd%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=35' scrolling='no' frameborder='0' style='border:none; overflow:hidden; width:450px; height:35px' allowTransparency='true'></iframe><div class="shr-publisher-626"></div><!-- Start Shareaholic LikeButtonSetBottom --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F07%2F10%2Frobotlegs-project-skeleton-with-tdd%2F' data-shr_title='Robotlegs+Project+Skeleton+With+TDD'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F07%2F10%2Frobotlegs-project-skeleton-with-tdd%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fdougr.net%2F2011%2F07%2F10%2Frobotlegs-project-skeleton-with-tdd%2F' data-shr_title='Robotlegs+Project+Skeleton+With+TDD'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom --><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Dougrdotnet?a=vMCo6riZoV8:BJykyVW9qvo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Dougrdotnet?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Dougrdotnet/~4/vMCo6riZoV8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dougr.net/2011/07/10/robotlegs-project-skeleton-with-tdd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://dougr.net/2011/07/10/robotlegs-project-skeleton-with-tdd/</feedburner:origLink></item>
	</channel>
</rss>

