<?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://organizeseries.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 - Its about the codedougrdotnet - Its about the code</title>
	
	<link>http://dougr.net</link>
	<description>It's about the code</description>
	<lastBuildDate>Sat, 19 Jan 2013 16:33:56 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
<!-- podcast_generator="Blubrry PowerPress/4.0.6" -->
	<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>ColdFusion – Change Your Server CFIDE Mapping</title>
		<link>http://feedproxy.google.com/~r/Dougrdotnet/~3/ozawQuRv-To/</link>
		<comments>http://dougr.net/2013/01/19/coldfusion-change-your-server-cfide-mapping/#comments</comments>
		<pubDate>Sat, 19 Jan 2013 16:33:56 +0000</pubDate>
		<dc:creator>dougr</dc:creator>
				<category><![CDATA[CF]]></category>
		<category><![CDATA[cf]]></category>
		<category><![CDATA[cfide]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[mapping]]></category>

		<guid isPermaLink="false">http://dougr.net/?p=816</guid>
		<description><![CDATA[If you have a need to move your coldfusion CFIDE directory then you will also need to change the CFIDE mapping in ColdFusion administrator.  The problem here is that the CFIDE mapping is not editable in the administrator, so it is necessary to edit the XML file that stores the CFIDE path.]]></description>
				<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>If you have a need to move your coldfusion CFIDE directory then you will also need to change the CFIDE mapping in ColdFusion administrator.  The problem here is that the CFIDE mapping is not editable in the administrator, so it is necessary to edit the XML file that stores the CFIDE path.  This file is found in your ColdFusion install location, in my case it is located in /Applications/coldfusion9/lib/.  The file we need to edit is named neo-runtime.xml.  It is minified, so it is helpful to do a simple find on &#8216;/CFIDE&#8217;.  We want to edit the string property of the var element <code><var name='/CFIDE'><string>/Applications/ColdFusion9/wwwroot/CFIDE</string></var></code>.  Change that path to your new CFIDE location and restart ColdFusion.  Checking in your ColdFusion administrator Mappings should now reflect your new path.</p>
<div class="shr-publisher-816"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><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='standard' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fdougr.net%2F2013%2F01%2F19%2Fcoldfusion-change-your-server-cfide-mapping%2F' data-shr_title='ColdFusion+-+Change+Your+Server+CFIDE+Mapping'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fdougr.net%2F2013%2F01%2F19%2Fcoldfusion-change-your-server-cfide-mapping%2F'></a><a class='shareaholic-googleplusone' data-shr_size='standard' data-shr_count='true' data-shr_href='http%3A%2F%2Fdougr.net%2F2013%2F01%2F19%2Fcoldfusion-change-your-server-cfide-mapping%2F' data-shr_title='ColdFusion+-+Change+Your+Server+CFIDE+Mapping'></a><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fdougr.net%2F2013%2F01%2F19%2Fcoldfusion-change-your-server-cfide-mapping%2F' data-shr_title='ColdFusion+-+Change+Your+Server+CFIDE+Mapping'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic --><!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic --><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Dougrdotnet?a=ozawQuRv-To:8DlZF6wAE3E: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/ozawQuRv-To" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dougr.net/2013/01/19/coldfusion-change-your-server-cfide-mapping/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://dougr.net/2013/01/19/coldfusion-change-your-server-cfide-mapping/</feedburner:origLink></item>
		<item>
		<title>CF ORM – A CFC with entityname could not be found.</title>
		<link>http://feedproxy.google.com/~r/Dougrdotnet/~3/xpsVJ9SnTUg/</link>
		<comments>http://dougr.net/2012/11/14/cf-orm-a-cfc-with-entityname-could-not-be-found/#comments</comments>
		<pubDate>Thu, 15 Nov 2012 03:10:06 +0000</pubDate>
		<dc:creator>dougr</dc:creator>
				<category><![CDATA[CF]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[cf]]></category>
		<category><![CDATA[errors]]></category>
		<category><![CDATA[orm]]></category>

		<guid isPermaLink="false">http://dougr.net/?p=810</guid>
		<description><![CDATA[I just spent an hour looking for syntax errors in an entity CFC and double checking for case issues throughout an application.  As it turns out, even with reinitialization, CF must have been caching and not recognizing the existence of my entity object.]]></description>
				<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Hey Googler&#8230; restart ColdFusion before you look any further.</p>
<p>I just spent an hour looking for syntax errors in an entity CFC and double checking for case issues throughout an application.  As it turns out, even with reinitialization, CF must have been caching and not recognizing the existence of my entity object.  Upon restart of ColdFusion server the entity was found and everything worked as expected.<br />
The error was directly related to the use of EntityNew(&#8220;EntityName&#8221;) and the error would no longer be present when removed.  I found solutions which ranged from the case sensitivity, mentioned above, to problems with dependency injection or mapping errors.  In the end, CF was caching and the new entity did not exist in the cache.  Also, I should note that in my configuration I had coldbox.handlerCaching = false; and coldbox.eventCaching = false;<br />
So, give CF a restart just in case, it might save you some time.</p>
<div class="shr-publisher-810"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><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='standard' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fdougr.net%2F2012%2F11%2F14%2Fcf-orm-a-cfc-with-entityname-could-not-be-found%2F' data-shr_title='CF+ORM+-+A+CFC+with+entityname+could+not+be+found.'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fdougr.net%2F2012%2F11%2F14%2Fcf-orm-a-cfc-with-entityname-could-not-be-found%2F'></a><a class='shareaholic-googleplusone' data-shr_size='standard' data-shr_count='true' data-shr_href='http%3A%2F%2Fdougr.net%2F2012%2F11%2F14%2Fcf-orm-a-cfc-with-entityname-could-not-be-found%2F' data-shr_title='CF+ORM+-+A+CFC+with+entityname+could+not+be+found.'></a><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fdougr.net%2F2012%2F11%2F14%2Fcf-orm-a-cfc-with-entityname-could-not-be-found%2F' data-shr_title='CF+ORM+-+A+CFC+with+entityname+could+not+be+found.'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic --><!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic --><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Dougrdotnet?a=xpsVJ9SnTUg:oRzjWN3TgwM: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/xpsVJ9SnTUg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dougr.net/2012/11/14/cf-orm-a-cfc-with-entityname-could-not-be-found/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://dougr.net/2012/11/14/cf-orm-a-cfc-with-entityname-could-not-be-found/</feedburner:origLink></item>
		<item>
		<title>ColdFusion 9.0.2 Installation on 64bit Mountain Lion</title>
		<link>http://feedproxy.google.com/~r/Dougrdotnet/~3/3Yf7IqdtVQ4/</link>
		<comments>http://dougr.net/2012/11/05/coldfusion-9-0-2-installation-on-64bit-mountain-lion/#comments</comments>
		<pubDate>Mon, 05 Nov 2012 19:46:03 +0000</pubDate>
		<dc:creator>dougr</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[CF]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[cf]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[mountain lion]]></category>

		<guid isPermaLink="false">http://dougr.net/?p=775</guid>
		<description><![CDATA[CF Web Server Connector appears to successfully configure during installation but silently fails to connect to Apache Web server.]]></description>
				<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>CF Web Server Connector appears to successfully configure during installation but silently fails to connect to Apache Web server.</p>
<p>During a ColdFusion 9.0.2 installation I was configuring CF to connect to Apache Web server and experienced the behavior of index.cfm being downloaded instead of rendering in Chrome.  This behavior is indicative of Apache either not running or not having index.cfm configured as a directory index in httpd.conf.  The first place I looked was to make sure that I had restarted Apache and it was indeed running.  Once verified I went to have a look at my httpd.conf file.  The only changes I had made to default conf were changing my DocumentRoot, Directory, DirectoryIndex, and enabling Virtual hosts. Everything looked fine in Apache, except that the JRun Settings configuration had not been added by the Web connector durning installation.  Okay, so I figured I blew the install, uninstalled, reinstalled, same thing.  On to the ColdFusionLauncher.</p>
<p>Here is where things became more interesting.  I started up the CF Launcher so that I could use the WebServerConnector Utility to configure CF/Apache connection manually.  Here are some screenshots of my configuration:</p>
<p><a href="http://dougr.net/wp-content/uploads/2012/11/webConfig_step1.png"><img src="http://dougr.net/wp-content/uploads/2012/11/webConfig_step1-1024x677.png" alt="Web Configuration Step 1" title="webConfig_step1" width="720" height="476" class="aligncenter size-large wp-image-786" /></a><br />
<a href="http://dougr.net/wp-content/uploads/2012/11/webConfig_step2.png"><img src="http://dougr.net/wp-content/uploads/2012/11/webConfig_step2-1024x412.png" alt="Web configuration step 2" title="webConfig_step2" width="720" height="289" class="aligncenter size-large wp-image-788" /></a><br />
This all looks fine, no problems thus far&#8230;Then I receive this warning:<br />
<a href="http://dougr.net/wp-content/uploads/2012/11/webConfig_warning.png"><img src="http://dougr.net/wp-content/uploads/2012/11/webConfig_warning-1024x345.png" alt="Warning missing mod_jrun22.so" title="webConfig_warning" width="720" height="242" class="aligncenter size-large wp-image-789" /></a></p>
<p>At this point I really wasn&#8217;t sure what was going on.  A colleague, Mike McKellip, suggested that I have a look at the wsconfig directory.  I pulled it up and wsconfig has no content.  After some more research, it appears there is an issue with the ColdFusion installer on 64bit Mountain Lion.  So, what to do&#8230;  Mike provided me with a wsconfig and a mod_jrun22.so to use for manual installation.  Along with the JRUN entry for httpd.conf to complete configuration:</p>
<pre class="brush: plain; title: ; notranslate">
# JRun Settings
LoadModule jrun_module /Applications/ColdFusion9/runtime/lib/wsconfig/1/mod_jrun22.so
&lt;IfModule mod_jrun22.c&gt;
    JRunConfig Verbose false
    JRunConfig Apialloc false
    JRunConfig Ignoresuffixmap false
    JRunConfig Serverstore /Applications/ColdFusion9/runtime/lib/wsconfig/1/jrunserver.store
    JRunConfig Bootstrap 127.0.0.1:51800
    #JRunConfig Errorurl url &lt;optionally redirect to this URL on errors&gt;
    #JRunConfig ProxyRetryInterval 600 &lt;number of seconds to wait before trying to reconnect to unreachable clustered server&gt;
    #JRunConfig ConnectTimeout 15 &lt;number of seconds to wait on a socket connect to a jrun server&gt;
    #JRunConfig RecvTimeout 300 &lt;number of seconds to wait on a socket receive to a jrun server&gt;
    #JRunConfig SendTimeout 15 &lt;number of seconds to wait on a socket send to a jrun server&gt;
    AddHandler jrun-handler .jsp .jws .cfm .cfml .cfc .cfr .cfswf
&lt;/IfModule&gt;
</pre>
<p>You can find the solution details related to creating the wsconfig directory and compiling mod_jrun22.so over on <a href="http://www.12robots.com/index.cfm/2012/9/27/Installing-ColdFusion-9-on-OSX-Snow-Leopard-Lion-and-Mountain-Lion-64bit" title="Installing-ColdFusion-9-on-OSX-Snow-Leopard-Lion-and-Mountain-Lion-64bit" target="_blank">12Robots.com</a> or <a href="http://craigkaminsky.blogspot.com/2012/06/problem-with-and-resolution-for-adobe.html" title="Problem with (and Resolution for) Adobe ColdFusion 9.0.2 (Mac, 64-bit) Web Server Connector" target="_blank">Just Another Tech Blog</a>.</p>
<div class="shr-publisher-775"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><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='standard' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fdougr.net%2F2012%2F11%2F05%2Fcoldfusion-9-0-2-installation-on-64bit-mountain-lion%2F' data-shr_title='ColdFusion+9.0.2+Installation+on+64bit+Mountain+Lion'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fdougr.net%2F2012%2F11%2F05%2Fcoldfusion-9-0-2-installation-on-64bit-mountain-lion%2F'></a><a class='shareaholic-googleplusone' data-shr_size='standard' data-shr_count='true' data-shr_href='http%3A%2F%2Fdougr.net%2F2012%2F11%2F05%2Fcoldfusion-9-0-2-installation-on-64bit-mountain-lion%2F' data-shr_title='ColdFusion+9.0.2+Installation+on+64bit+Mountain+Lion'></a><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fdougr.net%2F2012%2F11%2F05%2Fcoldfusion-9-0-2-installation-on-64bit-mountain-lion%2F' data-shr_title='ColdFusion+9.0.2+Installation+on+64bit+Mountain+Lion'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic --><!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic --><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Dougrdotnet?a=3Yf7IqdtVQ4:BFHgZ1nz9EQ: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/3Yf7IqdtVQ4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dougr.net/2012/11/05/coldfusion-9-0-2-installation-on-64bit-mountain-lion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://dougr.net/2012/11/05/coldfusion-9-0-2-installation-on-64bit-mountain-lion/</feedburner:origLink></item>
		<item>
		<title>Apple Script: Show and Hide Hidden Files on Mac</title>
		<link>http://feedproxy.google.com/~r/Dougrdotnet/~3/H8J9sQ2cwME/</link>
		<comments>http://dougr.net/2012/11/03/apple-script-show-and-hide-hidden-files-on-mac/#comments</comments>
		<pubDate>Sun, 04 Nov 2012 02:16:42 +0000</pubDate>
		<dc:creator>dougr</dc:creator>
				<category><![CDATA[AppleScript]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Tools/Utilities]]></category>
		<category><![CDATA[applescript]]></category>
		<category><![CDATA[hidden files]]></category>
		<category><![CDATA[utility]]></category>

		<guid isPermaLink="false">http://dougr.net/?p=760</guid>
		<description><![CDATA[I need to show hidden files quite often and rather than leaving the hidden files visible all the time, e.g. .localized and .DS_Store files showing on desktop, I rather toggle hidden file visibility on and off.]]></description>
				<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>I need to show hidden files quite often and rather than leaving the hidden files visible all the time, e.g. .localized and .DS_Store files showing on desktop, I rather toggle hidden file visibility on and off.  The terminal command for this is:</p>
<pre class="brush: as3; title: ; notranslate">
$ defaults write com.apple.Finder AppleShowAllFiles TRUE
$ killall Finder
</pre>
<p><a href="http://dougr.net/wp-content/uploads/2012/11/applescript.jpg"><img src="http://dougr.net/wp-content/uploads/2012/11/applescript.jpg" alt="applescript logo image - rights by respective owner" title="applescript" width="204" height="205" class="alignright size-full wp-image-766" /></a><br />
The first line here sets hidden files visible and the second line refreshes Finder.  Change the boolean to &#8216;FALSE&#8217; in order to hide the files again.<br />
This works great but its a pain and I just wanted to make it simple and fast.  I&#8217;m aware of Hidden Files but wasn&#8217;t able to install at the time of this post due to redirection to iCloud, which I don&#8217;t use.  As a result, I decided to just write a simple Apple Script as an application that I can keep in my dock.<br />
Here is the script:</p>
<pre class="brush: as3; title: ; notranslate">
display dialog &quot;Show Hidden Files...&quot; buttons {&quot;SHOW&quot;, &quot;HIDE&quot;} default button 2
copy the result as list to {buttonpressed}

try
	if the buttonpressed is &quot;HIDE&quot; then do shell script &quot;defaults write com.apple.finder AppleShowAllFiles FALSE&quot;
	if the buttonpressed is &quot;SHOW&quot; then do shell script &quot;defaults write com.apple.finder AppleShowAllFiles TRUE&quot;
end try

do shell script (&quot;killall Finder&quot;)
</pre>
<p>The first line launches a dialogue with button options for SHOW or HIDE.  The button press result is placed in a variable, &#8216;buttonpressed&#8217; and then checked in a try condition.  Finder is then refreshed.<br />
Simply compile the script and Save As an application.</p>
<div class="shr-publisher-760"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><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='standard' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fdougr.net%2F2012%2F11%2F03%2Fapple-script-show-and-hide-hidden-files-on-mac%2F' data-shr_title='Apple+Script%3A+Show+and+Hide+Hidden+Files+on+Mac'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fdougr.net%2F2012%2F11%2F03%2Fapple-script-show-and-hide-hidden-files-on-mac%2F'></a><a class='shareaholic-googleplusone' data-shr_size='standard' data-shr_count='true' data-shr_href='http%3A%2F%2Fdougr.net%2F2012%2F11%2F03%2Fapple-script-show-and-hide-hidden-files-on-mac%2F' data-shr_title='Apple+Script%3A+Show+and+Hide+Hidden+Files+on+Mac'></a><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fdougr.net%2F2012%2F11%2F03%2Fapple-script-show-and-hide-hidden-files-on-mac%2F' data-shr_title='Apple+Script%3A+Show+and+Hide+Hidden+Files+on+Mac'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic --><!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic --><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Dougrdotnet?a=H8J9sQ2cwME:AiuHtgFqsDQ: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/H8J9sQ2cwME" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dougr.net/2012/11/03/apple-script-show-and-hide-hidden-files-on-mac/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://dougr.net/2012/11/03/apple-script-show-and-hide-hidden-files-on-mac/</feedburner:origLink></item>
		<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[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><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>
<div class="shr-publisher-750"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><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='standard' 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='standard' 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><a class='shareaholic-tweetbutton' data-shr_count='none' 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 Automatic --><!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic --><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[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><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>
<div class="shr-publisher-734"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><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='standard' 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='standard' 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><a class='shareaholic-tweetbutton' data-shr_count='none' 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 Automatic --><!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic --><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[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><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>
<div class="shr-publisher-721"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><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='standard' 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='standard' 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><a class='shareaholic-tweetbutton' data-shr_count='none' 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 Automatic --><!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic --><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[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><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>
<div class="shr-publisher-707"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><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='standard' 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='standard' 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><a class='shareaholic-tweetbutton' data-shr_count='none' 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 Automatic --><!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic --><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[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><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>
<div class="shr-publisher-697"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><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='standard' 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='standard' 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><a class='shareaholic-tweetbutton' data-shr_count='none' 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 Automatic --><!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic --><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[<div class="seriesmeta">This entry is part 2 of 2 in the series <a href="http://dougr.net/series/agile/" class="series-173" title="Agile">Agile</a></div><!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><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>
<div class="shr-publisher-674"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><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='standard' 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='standard' 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><a class='shareaholic-tweetbutton' data-shr_count='none' 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 Automatic --><!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic --><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>
	</channel>
</rss>
