<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>computers should be less friendly</title>
	<atom:link href="http://blog.danmcweeney.com/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.danmcweeney.com</link>
	<description></description>
	<lastBuildDate>Mon, 10 Aug 2009 20:38:22 +0000</lastBuildDate>
	<language>en-US</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.7.1</generator>
	<item>
		<title>Web 2 dot Screw You</title>
		<link>http://blog.danmcweeney.com/82</link>
		<comments>http://blog.danmcweeney.com/82#comments</comments>
		<pubDate>Mon, 10 Aug 2009 20:38:22 +0000</pubDate>
		<dc:creator><![CDATA[dan]]></dc:creator>
				<category><![CDATA[et alii]]></category>
		<category><![CDATA[innovation]]></category>

		<guid isPermaLink="false">http://blog.danmcweeney.com/?p=82</guid>
		<description><![CDATA[With all the trouble in the banking industry nowadays you&#8217;d think your mega banking conglomerate would be willing to seek advice and differentiators from anywhere. You&#8217;d also be horribly wrong. I&#8217;ve been a Bank of America customer for a long time and have even gotten other people to switch over because I think their online [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>With all the trouble in the banking industry nowadays you&#8217;d think your mega banking conglomerate would be willing to seek advice and differentiators from anywhere.  You&#8217;d also be horribly wrong.</p>
<p>I&#8217;ve been a Bank of America customer for a long time and have even gotten other people to switch over because I think their online banking is the best in the business.  So, today I was looking around for a particular feature and couldn&#8217;t find it.  After searching through their FAQs I decided that the feature just didn&#8217;t exist.  So, being the helpful customer I am, I went to go send them a suggestion.  I was going to tell them where they should put it, how it could work, how useful it would be and how it would make their site better.  Basically, a solid gold use case they could drop into their product backlog ASAP.  The &#8220;Contact Us&#8221; link was nice and easy to find and on that page was a link to &#8220;Bank of America&#8217;s Unsolicited Idea Submission Policy&#8221;, which reads:</p>
<blockquote><p>Bank of America and its associates do not accept or consider unsolicited ideas, including ideas for new or improved products, processes or technologies, product enhancements, advertising and marketing campaigns, promotions or new product names. Please do not send any original materials, suggestions or other items.</p></blockquote>
<p>-<a href="http://www.bankofamerica.com/contact/data/general.cfm">Source</a></p>
<p>Ouch, well, so much for listening to your users and working with them to create a better product.  I get the need to protect your IP but go have a talk with the executives at Procter &#038; Gamble who completely changed their R&#038;D model to get more innovation from the outside.  &#8220;Today, more than 35 percent of our new products in market have elements that originated from outside P&#038;G, up from about 15 percent in 2000&#8243;, according to a <a href="http://hbswk.hbs.edu/archive/5258.html">March 2006 article by The Harvard Business Review</a>.  I am sure this number has grown just look at their huge web presence for external innovations called,<a href="http://www.pgconnectdevelop.com"> P&#038;G Connect + Develop</a>.  Time to get on the <a href="http://www.cluetrain.com/">Train</a>, BofA</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danmcweeney.com/82/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>IP Soup</title>
		<link>http://blog.danmcweeney.com/78</link>
		<comments>http://blog.danmcweeney.com/78#comments</comments>
		<pubDate>Wed, 10 Sep 2008 22:54:27 +0000</pubDate>
		<dc:creator><![CDATA[dan]]></dc:creator>
				<category><![CDATA[innovation]]></category>
		<category><![CDATA[SAP]]></category>

		<guid isPermaLink="false">http://blog.danmcweeney.com/78</guid>
		<description><![CDATA[&#160; Years ago, innovation took place in locked basements behind steel doors with retinal scanners.&#160; With the publication of Wikinomics crowd sourced innovation has slowly become commonplace.&#160; Companies ranging from P&#38;G to Big Pharma now try and incent external people into solving their pressing R&#38;D problems.&#160; This model can work pretty well &#8212; just ask [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>&#160;</p>
<p><a title="iraq" href="http://www.flickr.com/photos/35703177@N00/2418298451/"><img style="margin: 0px 10px 10px 0px" alt="iraq" src="http://static.flickr.com/2353/2418298451_463aeaa0ce_m.jpg" align="left" border="0" /></a>Years ago, innovation took place in locked basements behind steel doors with retinal scanners.&#160; With the publication of Wikinomics crowd sourced innovation has slowly become commonplace.&#160; Companies ranging from P&amp;G to Big Pharma now try and incent external people into solving their pressing R&amp;D problems.&#160; This model can work pretty well &#8212; just ask P&amp;G about the <a href="http://www.swiffer.com/swiffer/en_US/home.do">Swiffer</a>.&#160; </p>
<p>This week SAP <a href="http://www.innocentive.com/crowd-sourcing-news/2008/09/09/sap-embraces-next-generation-collaborative-innovation-with-innocentive/">announced</a> a &quot;partnership&quot; with <a href="http://www.innocentive.com/">Innocentive</a> a company that facilitates crowd sourcing of ideas and solutions.&#160; The company has received a fair bit of press over the million dollar prize to find the gene responsible for <a href="http://www.innocentive.com/servlets/account/Login.po?id=4470259">Lou Gehrig&#8217;s Disease</a>(ALS).&#160; The company was originally founded around helping Pharma companies reduce R&amp;D spending.&#160; David Ritter, the CTO, said, &quot;R&amp;D spending at Pharma companies was growing faster then revenue, that is not sustainable.&quot; </p>
<p>Clients of Innocentive (Seekers) put challenges up on the company&#8217;s site to <a href="http://innocentive.com/solver_challenges.php">deliver either ideas or complete solutions</a> to some of these R&amp;D challenges.&#160; One of Innocentive&#8217;s differentiators appears to be their ability to make the Seekers secure that the IP they are receiving is clear of claims.&#160; I however, worry more about the implications of competing for a prize, being a Solver.</p>
<p>The company receives all entries for their review so that they can select the best one and reward the prize.&#160; This probably works well in a space like Pharma or real goods where infringing on a patent is more obvious, a compound has a composition or a product does something and looks a certain way.&#160; With software this is a bit more muddled.&#160; The exact implementation of the software isn&#8217;t as important as what it actually does and why it is an improvement.&#160; Additionally, software is compiled, obfuscated and it can be hard to even prove if someone has stolen or not stolen code.&#160; Ask SCO and IBM about how much it costs to sort that out.&#160; </p>
<p>More troubling, Mr. Ritter noted that &quot;The bulk of problems on Innocentive are submitted anonymously, because they don&#8217;t want to &quot;tip&quot; their hat to the problems they are working on.&quot;&#160; Which makes it even hard to find where your software idea or algorithm went.</p>
<p>When pressed on this Mr. Ritter conceded that there was a certain amount of faith the Solvers are putting into both Innocentive and their clients.&#160; Personally, given my knowledge of SAP I would feel perfectly safe in giving in an idea and if it did not win, not having to check every new product for some of my ideas.&#160; I don&#8217;t know if this is true for every person or every company.</p>
<p>Photo courtesy of <a href="http://www.flickr.com/photos/soldiersmediacenter/">soldiersmediacenter</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danmcweeney.com/78/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Community Day &#8217;08</title>
		<link>http://blog.danmcweeney.com/77</link>
		<comments>http://blog.danmcweeney.com/77#comments</comments>
		<pubDate>Wed, 10 Sep 2008 01:05:44 +0000</pubDate>
		<dc:creator><![CDATA[dan]]></dc:creator>
				<category><![CDATA[SAP]]></category>

		<guid isPermaLink="false">http://blog.danmcweeney.com/77</guid>
		<description><![CDATA[Community day is over and I think the Mentor Hands On sessions went well.&#160; All the sessions were totally packed which is usually a good measure of value.&#160; I think we were turning people away for my session, which I guess is both good and bad.&#160; If you weren&#8217;t able to make it to Community [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Community day is over and I think the Mentor Hands On sessions went well.&#160; All the sessions were totally packed which is usually a good measure of value.&#160; I think we were turning people away for my session, which I guess is both good and bad.&#160; If you weren&#8217;t able to make it to Community Day we have all posted our hands on sessions on this <a href="http://code.google.com/p/sdn-mentor-handson-2008/">Google Code site</a> for download.&#160; There 3 exercises ranging from ABAP tutorials to Flex Component development.&#160; For more information about each session, <a href="https://weblogs.sdn.sap.com/pub/wlg/10372">Thomas Jung&#8217;s</a> post is a good starting point.&#160; I spent the entire day in just that one session room&#160; &#8212; so I don&#8217;t have a lot of information about the other sessions.&#160; I must admit I bummed out I didn&#8217;t get to see <a href="http://blog.lostlake.org/">David Pollack&#8217;s</a> Lift session or <a href="http://tknight.org/">Thomas Ritter&#8217;s</a> Mylyn session.</p>
<p>&#160;<a title="IMG_1770" href="http://www.flickr.com/photos/17639473@N00/2844244513/"><img height="295" alt="IMG_1770" src="http://static.flickr.com/3076/2844244513_fbfd345fbc.jpg" width="443" border="0" /></a></p>
<p>The only other thing I was able to attend was a session run by Amir Blich about the future of the SAP Sneak Preview systems.&#160; All I can really say is that it is great to see SAP looking to the mentors and to their community for advice about how to proceed.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danmcweeney.com/77/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mr. Mcweeney goes to Washington</title>
		<link>http://blog.danmcweeney.com/76</link>
		<comments>http://blog.danmcweeney.com/76#comments</comments>
		<pubDate>Tue, 19 Aug 2008 13:15:55 +0000</pubDate>
		<dc:creator><![CDATA[dan]]></dc:creator>
				<category><![CDATA[et alii]]></category>

		<guid isPermaLink="false">http://blog.danmcweeney.com/76</guid>
		<description><![CDATA[As many of you know my girlfriend has been attending law school for the past year and as many of you don&#8217;t know she was applying to transfer to other schools around the country.&#160; We recently found out she was accepted at Georgetown Law, which means we need to head down to D.C for at [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>As many of you know my girlfriend has been attending law school for the past year and as many of you don&#8217;t know she was applying to transfer to other schools around the country.&nbsp; We recently found out she was accepted at Georgetown Law, which means we need to head down to D.C for at least the next few years.&nbsp; For her this is a truly amazing opportunity to attend one of the best law schools in the country, for me it&#8217;s just going to be a fun ride checking out a new city &#8212; which incidentally we know nothing about!&nbsp; I&#8217;ve lived my entire life in the Northeast so this will certainly be an adventure.</p>
<p>However, exciting it is to move to a new city I will certainly miss being in the NY area and so close to many of closest friends.&nbsp; I will remain at the same numbers which you all have and of course will try and continue to post here at least as infrequently has I have till this point.</p>
<p>If anyone is ever down in DC make sure to drop and line so we can meet up.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danmcweeney.com/76/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dynamically Generated Static Methods</title>
		<link>http://blog.danmcweeney.com/75</link>
		<comments>http://blog.danmcweeney.com/75#comments</comments>
		<pubDate>Thu, 07 Aug 2008 23:42:24 +0000</pubDate>
		<dc:creator><![CDATA[dan]]></dc:creator>
				<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[Adobe]]></category>

		<guid isPermaLink="false">http://blog.danmcweeney.com/?p=75</guid>
		<description><![CDATA[If you made it here based solely on the title &#8212; good for you, you are apparently endowed with a fair bit of programming-intestinal fortitude. I figured out this little hack months ago and I just got around to writing it up over the past week or so &#8212; I&#8217;ve been busy, sue me. I [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>If you made it here based solely on the title &#8212; good for you, you are apparently endowed with a fair bit of programming-intestinal fortitude.  I figured out this little hack months ago and I just got around to writing it up over the past week or so &#8212; I&#8217;ve been busy, sue me.</p>
<p>I was inspired to investigate this topic by Derek Wischusen&#8217;s<a href="http://flexonrails.net/?feed=rss2"><img src="http://www.danmcweeney.com/static/images/feed-icon-14x14.png"></a> post &#8220;<a href="http://flexonrails.net/?p=95">method_missing in ActionScript</a>.&#8221;&nbsp; I saw it and immediately set out to build a port of ActiveRecord to Actionscript.</p>
<p>I&#8217;m not convinced this is the &#8220;best&#8221; implementation for this type of functionality but after much toying about it is the best one I was able to come up with.&nbsp; Also, you have to remember you can&#8217;t eval anything in AS3, so in reality this is just creating Static Methods that point to an existing method that knows how to do something based on the new function&#8217;s name, but that&#8217;s pretty much what the Rails framework does so, I view that as just fine.</p>
<h2>Goal</h2>
<p>The initial goal was to set out and get a method like this to work:</p>
<div class="csharpcode">var item:Blog = Blog.find_by_title(<span class="str">&#8220;Dynamically Generated Static Methods&#8221;</span>);</div>
<p>The class &#8220;Blog&#8221; should have as little, preferably no, extra coding in it.&nbsp; It should just attempt to call that method with no burden on the programming trying to create the class &#8220;Blog.&#8221;</p>
<h2>Strike One</h2>
<p>The first place to start is with Derek&#8217;s post that I referenced earlier, I created a class called &#8220;ActiveRecord&#8221; that was the same as his &#8220;BaseProxy&#8221; class. </p>
<p></p><p><strong><a href='http://snipplr.com/view/7765/activerecord-v01'>ActiveRecord v0.1</a></strong><br/></p><div class='code' style='border: 1px dotted; overflow: auto; white-space:nowrap;'><ol><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">package</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">{</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; import flash.utils.flash_proxy;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; import flash.utils.Proxy;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; import flash.utils.getDefinitionByName;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; import flash.utils.getQualifiedClassName;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; public dynamic class ActiveRecord extends Proxy</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; {</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; public function ActiveRecord()</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; {</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; }</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; flash_proxy override function callProperty(method: *, ...args): * {</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var clazz : Class = getDefinitionByName(getQualifiedClassName(this)) as Class;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return clazz.prototype[method].apply(method, args);</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; catch (e : Error) {</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return methodMissing (method, args);</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; }</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;protected function methodMissing(method : *, args : Array) : Object{</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; throw( new Error(&quot;Method Missing&quot;));</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return null;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; }</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; }</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">}</div></li></ol></div><p>
<p>The above code is taken from this &#8220;<a href="http://flexonrails.net/?p=95">method_missing in ActionScript</a>.&#8221;&nbsp;<br />
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
</p>
<p>Then I subclass &#8220;ActiveRecord&#8221; to get a class called &#8220;Blog.&#8221;</p>
<p></p><p><strong><a href='http://snipplr.com/view/7766/blogas-v01'>Blog.as v0.1</a></strong><br/></p><div class='code' style='border: 1px dotted; overflow: auto; white-space:nowrap;'><ol><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">package</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">{</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; dynamic public class Blog extends ActiveRecord</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; {</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; public function Blog()</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; {</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; }</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; }</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">}</div></li></ol></div><p></p>
<p></p><p><strong><a href='http://snipplr.com/view/7767/testappmxml-v01'>TestApp.mxml v0.1</a></strong><br/></p><div class='code' style='border: 1px dotted; overflow: auto; white-space:nowrap;'><ol><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&lt;mx:Application xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot; layout=&quot;absolute&quot;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; applicationComplete=&quot;testObject()&quot;&gt;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &lt;mx:Script&gt;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &lt;![CDATA[</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; private function testObject():void{</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var blog:Blog;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blog = Blog.find_by_name(&quot;Some Text Here.&quot;);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; ]]&gt;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &lt;/mx:Script&gt;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&lt;/mx:Application&gt;</div></li></ol></div><p></p>
<p>To even get the above syntax to run you have to go to Project-&gt;Properties then Flex Compiler and un-check &#8220;Enable Strict type checking.&#8221;&nbsp; This will allow the file to compile.&nbsp; </p>
<p>However, when you run the TestApp you will see an exception thrown, not by Derek&#8217;s code like we&#8217;d hope but by the player, &#8220;TypeError: Error #1006: find_by_name is not a function.&#8221;</p>
<h2>Tweak the Syntax</h2>
<p>Just to keep things on the up and up I want you to go back and change that project property back ( Project-&gt;Properties then Flex Compiler and check &#8220;Enable Strict type checking ).&nbsp; Then we can tweak the syntax of the TestApp.mxml line 8( blog = Blog.find_by_name&#8230; ) to be:</p>
<pre class="csharpcode">blog = Blog[<span class="str">"find_by_name"</span>](<span class="str">"Some Text Here."</span>);</pre>
<p>We still get a type error from the player, &#8220;TypeError: Error #1006: value is not a function.&#8221; but at least our syntax compiles cleanly.</p>
<h2>Why doesn&#8217;t this work</h2>
<p>To answer this question you might first want to go read &#8220;<a href="http://livedocs.adobe.com/flex/3/html/help.html?content=04_OO_Programming_12.html">Object-oriented programming in ActionScript Advanced Topics</a>&#8221; but to summarize, the &#8220;callProperty&#8221; method Derek overrode only works on instances of the class not on the &#8220;prototype&#8221; of the class which is where the static methods live.&nbsp; So some how we need to access the prototype before execution.&nbsp; Sadly, there is no proxy method like &#8220;callProperty&#8221; for the class&#8217;s prototype, so we have to go in a more ghetto direction.</p>
<h2>staticInitializer</h2>
<p>The direction to move in is to use a static initializer in the Blog class to kick off building the static methods we need.&nbsp; I will jump straight in the flow of the working solution.</p>
<p></p><p><strong><a href='http://snipplr.com/view/7770/blog-v02'>Blog v0.2</a></strong><br/></p><div class='code' style='border: 1px dotted; overflow: auto; white-space:nowrap;'><ol><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">package</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">{</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; dynamic public class Blog extends ActiveRecord</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; {</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; staticInitializer(prototype.constructor);&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public function Blog()</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; }</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">}</div></li></ol></div><p></p>
<p>The only thing we&#8217;ve now added to Blog.as is a call to staticInitializer passing in the prototype.constructor of our current class.&nbsp; ( To understand what that means, check the OOP in AS article mentioned previously ).&nbsp; This will allow us to insert some calls before anything in this object is ever called.&nbsp; Think of methods like this as constructors for the Class object, not an instance of the class, but of the definition of the class &#8212; remember everything is an object.&nbsp; This method is actually defined in the base class ActiveRecord.as:</p>
<p></p><p><strong><a href='http://snipplr.com/view/7860/activerecord-v02'>ActiveRecord v0.2</a></strong><br/></p><div class='code' style='border: 1px dotted; overflow: auto; white-space:nowrap;'><ol><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">package</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">{</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; import flash.utils.Proxy;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; import flash.utils.describeType;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; import flash.utils.getDefinitionByName;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; import flash.utils.getQualifiedClassName;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; import flash.utils.flash_proxy;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">//&nbsp; &nbsp; &nbsp; import flash.utils.flash_proxy;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; </div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; public dynamic class ActiveRecord extends Proxy</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; {</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; private static var functionsToAdd:Array = [&quot;find_by_name&quot;,&quot;find_by_id&quot;,&quot;find_all&quot;];</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; protected static var methodFactory:DynamicMethodFactory;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public function ActiveRecord()</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public static function staticInitializer(klass:Class):void{</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var typeInfo:XML = describeType(klass);&nbsp;&nbsp;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for each(var s:String in functionsToAdd){</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; klass[s] = getMethod(typeInfo.@name,s);</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public static function getMethod(objectName:String,methodName:String):Function{</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return function(...args):Object{return endPoint(objectName,methodName,args);};</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public static function endPoint(objectName:String,methodName:String,...args):Object{</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; trace(&quot;You called: &quot; + objectName + &quot;.&quot; + methodName + &quot;(&quot; + args + &quot;)&quot;);</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var klass:Class = getDefinitionByName(objectName) as Class;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var o:ActiveRecord = new klass();</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return o;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; flash_proxy override function callProperty(method: *, ...args): * {</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try { &nbsp; &nbsp;&nbsp; </div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var clazz : Class = getDefinitionByName(getQualifiedClassName(this)) as Class;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return clazz.prototype[method].apply(method, args);</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; catch (e : Error) {</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return methodMissing (method, args);</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;protected function methodMissing(method : *, args : Array) : Object{</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; throw( new Error(&quot;Method Missing&quot;));</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return null;</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; }</div></li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">}</div></li></ol></div><p></p>
<p>So you can see a few things have been added, line 13, is just a list of methods we want to add to the object, you could generated these from anything you want(hint hint).&nbsp; The definition for staticInitializer  in line 19 is where the real stuff starts to happen.&nbsp; In this simple example we will loop across the functions we want to add then create a new anonymous function that remaps a bunch of parameters to our function called endPoint, which really handles the function call.&nbsp; This allows us to easily do anything we want based on, the class name, method name and argument list.</p>
<h2>Tweak the Syntax, Again</h2>
<p>If you want to make it look like a normal method call again, you can change that compiler flag back to disable strict type checking and then call your new dynamic static functions like normal.</p>
<p>There maybe more posts in this area, extending this concept out to create some very useful Rails-ish Actionscript libraries.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danmcweeney.com/75/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spirit</title>
		<link>http://blog.danmcweeney.com/73</link>
		<comments>http://blog.danmcweeney.com/73#comments</comments>
		<pubDate>Tue, 27 May 2008 13:10:44 +0000</pubDate>
		<dc:creator><![CDATA[dan]]></dc:creator>
				<category><![CDATA[et alii]]></category>
		<category><![CDATA[innovation]]></category>
		<category><![CDATA[photo]]></category>

		<guid isPermaLink="false">http://blog.danmcweeney.com/73</guid>
		<description><![CDATA[&#8220;There is no strife, no prejudice, no national conflict in outer space as yet. Its hazards are hostile to us all. Its conquest deserves the best of all mankind, and its opportunity for peaceful cooperation may never come again. But why, some say, the moon? Why choose this as our goal? And they may well [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>
<div class="wlWriterSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:d41b077c-502a-4b81-b8ed-571f12599bdb" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; width: 385px; padding-top: 0px">
<div id="9948bd6e-48f6-4b62-a7ad-9dba42a36786" style="margin: 0px; padding: 0px; display: inline;">
<div><a href="http://www.youtube.com/watch?v=6gr3mlBQR8M&amp;hl=en" target="_new"><img src="http://blog.danmcweeney.com/wp-content/uploads/2008/05/videoc0b1ec571b56.jpg" galleryimg="no" onload="var downlevelDiv = document.getElementById('9948bd6e-48f6-4b62-a7ad-9dba42a36786'); downlevelDiv.innerHTML = &quot;&lt;div&gt;&lt;object width=\&quot;385\&quot; height=\&quot;322\&quot;&gt;&lt;param name=\&quot;movie\&quot; value=\&quot;http://www.youtube.com/v/6gr3mlBQR8M&amp;hl=en\&quot;&gt;&lt;\/param&gt;&lt;param name=\&quot;wmode\&quot; value=\&quot;transparent\&quot;&gt;&lt;\/param&gt;&lt;embed src=\&quot;http://www.youtube.com/v/6gr3mlBQR8M&amp;hl=en\&quot; type=\&quot;application/x-shockwave-flash\&quot; wmode=\&quot;transparent\&quot; width=\&quot;385\&quot; height=\&quot;322\&quot;&gt;&lt;\/embed&gt;&lt;\/object&gt;&lt;\/div&gt;&quot;;" alt=""></a></div>
</div>
</div>
<blockquote><p>&#8220;There is no strife, no prejudice, no national conflict in outer space as yet. Its hazards are hostile to us all. Its conquest deserves the best of all mankind, and its opportunity for peaceful cooperation may never come again. But why, some say, the moon? Why choose this as our goal? And they may well ask why climb the highest mountain. Why, 35 years ago, fly the Atlantic? Why does Rice play Texas? We choose to go to the moon. <strong>We choose to go to the moon in this decade and do the other things, not because they are easy, but because they are hard, because that goal will serve to organize and measure the best of our energies and skills, because that challenge is one that we are willing to accept, one we are unwilling to postpone, and one which we intend to win, and the others, too.</strong> It is for these reasons that I regard the decision last year to shift our efforts in space from low to high gear as among the most important decisions that will be made during my incumbency in the Office of the Presidency.&#8221;</p>
</blockquote>
<p>Where has this type of spirit gone in our nation?&nbsp; Is it dead or just sleeping waiting for the right time to reemerge?&nbsp; It makes me sad I wasn&#8217;t around to see the US in it&#8217;s glory days, just in it&#8217;s seeming twilight, although this is a ray of hope:</p>
<p>&nbsp;</p>
<p><a href="http://blog.danmcweeney.com/wp-content/uploads/2008/05/230214main-phx-lander.jpg"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="450" alt="230214main_PHX_Lander" src="http://blog.danmcweeney.com/wp-content/uploads/2008/05/230214main-phx-lander-thumb.jpg" width="424" border="0"></a> </p>
<p><a href="http://www.nasa.gov/mission_pages/phoenix/images/press/PHX_Lander.html">Phoenix lander descends to Martian surface, shot from MRO</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danmcweeney.com/73/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Some Useful Flex/AIR Tidbits</title>
		<link>http://blog.danmcweeney.com/69</link>
		<comments>http://blog.danmcweeney.com/69#comments</comments>
		<pubDate>Tue, 22 Apr 2008 14:03:21 +0000</pubDate>
		<dc:creator><![CDATA[dan]]></dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://blog.danmcweeney.com/69</guid>
		<description><![CDATA[Recently I had the &#8220;pleasure&#8221; of learning the ins and outs of building Flex and AIR applications via the SDK on a Linux machine.&#160; I wanted to do this for some of the libraries that underpin my project so that they could be built and tested automatically.&#160; So, I setup SVN, Trac and CruiseControl on [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Recently I had the &#8220;pleasure&#8221; of learning the ins and outs of building Flex and AIR applications via the SDK on a Linux machine.&nbsp; I wanted to do this for some of the libraries that underpin my project so that they could be built and tested automatically.&nbsp; So, I setup SVN, Trac and CruiseControl on a Ubuntu VM on my mac.&nbsp; To get started there are tons of resources about getting SVN and Trac setup under Apache on Ubuntu so, just Google for them.&nbsp; Setting up CruiseControl was really easy thanks to their good documents, I started with the source distro but, do whatever works.</p>
<p>Now, onto why I&#8217;m posting today, along the way I found some annoying things about how FlexBuilder played with the SDK.&nbsp; For instance, the .flexLibProperties file that is hidden in your FB project, is not the right format to be taken in as a parameter to &#8220;compc&#8221; ( the library compiler, which seems to require a list of class names to include ), so I wrote a quick Python script to convert that file into a config file that is readable by compc.&nbsp; Here is how to include it in your Ant script:</p>
<div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 300px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4">
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><p><span style="color: #0000ff">&lt;</span><span style="color: #800000">target</span> <span style="color: #ff0000">name</span><span style="color: #0000ff">="setupClassList"</span><span style="color: #0000ff">&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">exec</span> <span style="color: #ff0000">executable</span><span style="color: #0000ff">="python"</span> <span style="color: #ff0000">failonerror</span><span style="color: #0000ff">="yes"</span><span style="color: #0000ff">&gt;</span>
        <span style="color: #0000ff">&lt;</span><span style="color: #800000">arg</span> <span style="color: #ff0000">line</span><span style="color: #0000ff">="${helperDir}/classFileConverter.py ${lib_root_dir}/.flexLibProperties classes.xml"</span><span style="color: #0000ff">/&gt;</span>
    <span style="color: #0000ff">&lt;/</span><span style="color: #800000">exec</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span>
</p><p>&nbsp;</p></pre>
</div>
<p>It takes in two parameters so you can manipulate the output location of the new file.<br />Another odd part is that the application descriptor for an AIR project doesn&#8217;t get correctly populated.&nbsp; FB itself fills in the &lt;content&gt; tag for you when it goes to compile.&nbsp; If you look in your source directory the application descriptor has this string, &#8220;[This value will be overwritten by Flex Builder in the output app.xml]&#8221; instead of the name of the SWF.&nbsp; One more little python script:</p>
<div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 300px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, 'Courier New', courier, monospace; background-color: #f4f4f4">
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><p><span style="color: #0000ff">&lt;</span><span style="color: #800000">exec</span> <span style="color: #ff0000">executable</span><span style="color: #0000ff">="python"</span> <span style="color: #ff0000">failonerror</span><span style="color: #0000ff">="yes"</span><span style="color: #0000ff">&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">arg</span> <span style="color: #ff0000">line</span><span style="color: #0000ff">="${helperDir}/appDescrFix.py ../bin-debug/${app_descriptor}"</span><span style="color: #0000ff">/&gt;</span>
<span style="color: #0000ff">&lt;/</span><span style="color: #800000">exec</span><span style="color: #0000ff">&gt;</span></p><p><span style="color: #0000ff"></span><font color="#0000ff"></font>
</p></pre>
</div>
<p>&nbsp;</p>
<p>Of course, I am going to give you the scripts!&nbsp; Here are the links:<br /><a href="http://www.danmcweeney.com/static/mxmlcHelpers/classFileConverter.py">.flexLibProperties Converter</a><br /><a href="http://www.danmcweeney.com/static/mxmlcHelpers/appDescrFix.py">Application Descriptor Fixer</a></p>
<p>&nbsp;</p>
<p>If someone knows a much easier way to do this just using the command line tools and/or Ant, I&#8217;d love to hear it!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danmcweeney.com/69/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New Year, New Gig</title>
		<link>http://blog.danmcweeney.com/63</link>
		<comments>http://blog.danmcweeney.com/63#comments</comments>
		<pubDate>Wed, 09 Jan 2008 21:11:31 +0000</pubDate>
		<dc:creator><![CDATA[dan]]></dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[et alii]]></category>
		<category><![CDATA[SAP]]></category>

		<guid isPermaLink="false">http://blog.danmcweeney.com/63</guid>
		<description><![CDATA[My&#160;blog has been quiet and I&#8217;ve been off Twitter for close to a month now, mostly due to taking some well needed time off after the SAP Fellowship but also weighing a pretty big choice I had to make. Stay at Colgate-Palmolive or leave for a job working for Adobe in a new product group [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a title="Photo Sharing" href="http://www.zooomr.com/photos/danmcweeney/978846/"><img style="margin: 0px 5px 5px 0px" height="147" alt="San Francsico" src="http://static.zooomr.com/images/978846_f99441a1dd.jpg" width="198" align="left"></a>
<p>My&nbsp;blog has been quiet and I&#8217;ve been off Twitter for close to a month now, mostly due to taking some well needed time off after the <a href="http://weblogs.sdn.sap.com/pub/wlg/6253" target="_blank">SAP Fellowship</a> but also weighing a pretty big choice I had to make.</p>
<p>Stay at Colgate-Palmolive or leave for a job working for Adobe in a new product group creating a new enterprise software offering.&nbsp; A new job certainly has its risks especially when compared to the stable home I have made for myself at Colgate.&nbsp; However, with some good advice from my friends I have decided to leave Colgate to pursue the opportunity with Adobe.</p>
<p>Working at Colgate has allowed me to do so much and&nbsp;opened so many doors for me.&nbsp; &nbsp;I cannot begin to express how much I appreciated all the support through the years the company&#8217;s management has give me.&nbsp; I&#8217;ve traveled ( and taken pictures )&nbsp;all over the world from <a href="http://picasaweb.google.com/daniel.mcweeney/India">India</a> to <a href="http://www.zooomr.com/photos/danmcweeney/sets/27365/" target="_blank">Bangkok</a> to <a href="http://www.zooomr.com/photos/danmcweeney/sets/27366/" target="_blank">Dublin</a>.&nbsp; I got to learn what makes a business like Colgate run from both the IT and business side.&nbsp; I&#8217;ve presented in front of thousands of people in both the <a href="http://picasaweb.google.com/daniel.mcweeney/TechEdLasVegas">US </a>and <a href="http://picasaweb.google.com/daniel.mcweeney/TechEdLasVegas">EU</a>.&nbsp; These experiences cannot be learned from a book and having this as my first job out of school was a great experience.</p>
<p>However, working for Adobe is going to be a great new chapter in my life &#8212; getting to see how software goes from just an idea on a whiteboard to a full fledged product is going to quite an adventure and I look forward to the challenge.</p>
<p>Thanks again to Colgate and more importantly all the Colgate people that made my time there so enjoyable.</p>
<p>For those of you keeping track my last day at Colgate will be Jan 18th and I will start at Adobe that following&nbsp;Monday, Jan 21st.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danmcweeney.com/63/feed</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Crack Addicted Invisible Hand</title>
		<link>http://blog.danmcweeney.com/62</link>
		<comments>http://blog.danmcweeney.com/62#comments</comments>
		<pubDate>Sun, 09 Dec 2007 23:25:49 +0000</pubDate>
		<dc:creator><![CDATA[dan]]></dc:creator>
				<category><![CDATA[innovation]]></category>
		<category><![CDATA[SAP]]></category>

		<guid isPermaLink="false">http://blog.danmcweeney.com/62</guid>
		<description><![CDATA[In Scoble&#8217;s blog Why enterprise software isn’t&#160;sexy, he asks a simple question, &#8220;Any of you have any ideas on how to make business software sexy?&#8221;&#160; A lot of my fellow Enterprise Irregulars have taken Robert to task about this, saying that it is in reality sexy: &#8220;[B]eauty and sexiness is in the eye of the [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>In Scoble&#8217;s blog <a href="http://scobleizer.com/2007/12/09/why-enterprise-software-isnt-sexy/">Why enterprise software isn’t&nbsp;sexy</a>, he asks a simple question, &#8220;Any of you have any ideas on how to make business software sexy?&#8221;&nbsp; <a href="http://blogs.zdnet.com/Howlett/?p=253">A</a> <a href="http://craig.cmehil.com/2007/12/why-enterprise-software-isnt-sexy.html">lot</a> <a href="http://123suds.blogspot.com/2007/12/enterprise-software-not-significant.html">of</a> <a href="http://www.anshublog.com/2007/12/enterprise-software-sexy-like-diane.html">my</a> <a href="http://blogs.zdnet.com/projectfailures/?p=524">fellow</a> <a href="http://ei.wordframe.net/">Enterprise Irregulars</a> have taken Robert to task about this, saying that it is in reality sexy:</p>
<blockquote><p>&#8220;[B]eauty and sexiness is in the eye of the beholder&#8230; [seeing] <a href="http://florence20.typepad.com/renaissance/2005/12/technology_inno_1.html">UPS</a> give each one of its drivers a DIAD &#8211; and they did it years before the recent wave of personal gadgets &#8211; with GPS, wifi, scanning and other technologies. And with a battery that lasts all day. Can our iPhones do that?&#8221;</p>
</blockquote>
<p><a href="http://dealarchitect.typepad.com/deal_architect/2007/12/damn-proud-to-b.html">Vinnie</a> does a great job showing how underneath the ugly exterior enterprise software is amazing and sexy.&nbsp; Most of these posts are all missing the important comparison Scoble is making that Nick Carr picks up on <a href="http://www.roughtype.com/archives/2007/12/michael_krigsma.php">here</a>:</p>
<blockquote><p>perpetuating a false dichotomy between the friendliness of consumer apps and the seriousness of business apps, all that Krigsman is doing is giving enterprise vendors cover for continuing to produce software that&#8217;s difficult and unpleasant to use</p>
</blockquote>
<p>The <a href="http://blogs.zdnet.com/projectfailures/?p=524">post from Michael Krigsman</a>(which although Nick beats up on chooses not to link to)&nbsp;talks about, how all this isn&#8217;t relevant because enterprise software is &#8220;intended to “enable core business processes” with a high degree of reliability, security, scalability, and so on.&#8221;</p>
<p>Enterprise vendors need to be keenly aware of the consumer market but, SAP&#8217;s&nbsp;customers don&#8217;t pay them&nbsp;to run around like Scoble and chase every new technology/website that comes out.&nbsp; They pay them to make measured,&nbsp;smart choices with what they create and how they spend their R&amp;D money.&nbsp; Their customers do indeed expect the software they create to have a &#8220;a high degree of reliability, security, scalability.&#8221;</p>
<p>Enterprise vendors have an advantage&nbsp;&#8211;&nbsp;they can ride on top of the frothy startup market cherry picking things that work well and will deliver value back to an enterprise&#8217;s bottom line.&nbsp;&nbsp;In the consumer tech industry, the invisible hand of the market is addicted to crack and has the attention span of a two year old.&nbsp; The consumer market is chaotic, jumpy and prone to fickleness.&nbsp; Online companies/ideas are created and destroyed everyday, and it is up to Scoble and other followers of tech to survey what&#8217;s out there, they need the thousands of readers.&nbsp; The two industries have totally different business models, Twitter needs millions of users to monetize their software, SAP is very profitable on about&nbsp;40k &#8220;users&#8221; world wide.</p>
<p>This shows the Enterprise software market is much more focused and so is their advertising.&nbsp; <a href="http://blogs.zdnet.com/BTL">Dan Farber</a> does an excellent job of handling this topic and refocusing the discussion on what Gates actually said:</p>
<blockquote><p>The business computing market, which is way bigger than the consumer computing market, no one pays attention to it. Even in the Wall Street Journal, and you think, oh, this is the paper they’re going to tell me about business computing; no, it’s all about consumer computing</p>
<p>LiveSide.net &#8211; <a href="http://www.liveside.net/blogs/opinion/archive/2007/12/09/bill-gates-mix-n-mash-and-the-future-of-microsoft.aspx">Bill Gates, Mix n Mash, and the future of Microsoft</a></p>
</blockquote>
<p>Dan goes on to point out <a href="http://blogs.zdnet.com/BTL/?p=7285">why ZDnet covers enterprise topics</a>:</p>
<blockquote><p>We recognize that in the 21st century you cannot easily separate the two, given technology is deeply embedded in work and personal lives&#8230; [T]he financial equation is not just about page views or number of readers–more important is the quality of readers we draw into the ZDNet orbit</p>
</blockquote>
<p>Who am I to contradict Dan when it comes to the determination of advertising revenue &#8212; after all he is the Editor in Chief of ZDnet.&nbsp; In the advertising arena you can also point to things like SAP sponsoring <a href="http://www.sap.com/about/company/sports/player/index.epx">golf stars</a>, <a href="http://www.sap.com/about/company/sports/roddick/index.epx">tennis pros</a>, <a href="http://www.sap.com/about/company/sports/mclaren/index.epx">formula one cars</a>, <a href="http://www.sap.com/about/company/sports/index.epx">etc</a>.&nbsp; Who watches these things?&nbsp; CIOs, and other TLA execs who make these decisions.&nbsp; If SAP&nbsp;cared about CPM they would advertise with NASCAR.&nbsp; Let&#8217;s just give SAP the benefit of the doubt that they understand their market more then Scoble.</p>
<p>I couldn&#8217;t agree more that Enterprise vendors need to make things easier to use and an all around friendlier experience but, they need to be smart and measured because that&#8217;s what their customers want.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danmcweeney.com/62/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Please don&#8217;t chase Waterfalls</title>
		<link>http://blog.danmcweeney.com/60</link>
		<comments>http://blog.danmcweeney.com/60#comments</comments>
		<pubDate>Thu, 06 Dec 2007 06:44:41 +0000</pubDate>
		<dc:creator><![CDATA[dan]]></dc:creator>
				<category><![CDATA[Methods]]></category>
		<category><![CDATA[SDN blogger]]></category>

		<guid isPermaLink="false">http://blog.danmcweeney.com/60</guid>
		<description><![CDATA[There have been&#160;a couple of blogs recently about the waterfall method and it&#8217;s usefulness: one from The CIO Weblog, which linked to Eugene Nizker at CIO Magazine&#160;which points to an IBM article by Dr. Kruchten&#160;on the subject. For some reason none of these blogs comes right out and says the obvious.&#160; Software development methodologies are [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>There have been&nbsp;a couple of blogs recently about the waterfall method and it&#8217;s usefulness: one from <a href="http://www.cio-weblog.com/50226711/did_the_waterfall_model_fail.php">The CIO Weblog</a>, which linked to <a href="http://advice.cio.com/eugene_nizker/why_the_waterfall_failed">Eugene Nizker at CIO Magazine</a>&nbsp;which points to an IBM article by <a href="http://www.ibm.com/developerworks/rational/library/4626.html">Dr. Kruchten</a>&nbsp;on the subject.
<p>For some reason none of these blogs comes right out and says the obvious.&nbsp; Software development methodologies are like religions:&nbsp; everyone has one and they all hate everyone else&#8217;s for no reason except they aren&#8217;t their sworn religion.&nbsp; In real life, this is dangerous, expensive and prone to the types of failures noted in the blogs.
<p>I haven&#8217;t worked in industry for 35+ years like <a href="http://advice.cio.com/user/eugene_nizker">Mr. Nizker</a> but after a few projects it became obvious to me when you can use agile methods and when waterfall is the most appropriate.&nbsp; Let&#8217;s try and do what none of the other blogs tried to do and break it down.<br />
<h3>&#8220;Roll-out&#8221;</h3>
<p>A very common thing in large companies (this was found via the <a href="http://www.cio-weblog.com/">CIO Weblog</a> right?) is to take a newly developed solution and push it all over the world to standardize a business process.&nbsp; These systems are the perfect candidate for the waterfall method.&nbsp; The users can look at a system and see the gaps and let the people in charge of creating their &#8220;copy&#8221; of the system know about the changes.&nbsp; This allows the &#8220;developers&#8221; to take the requirements in advance and while creating this new &#8220;copy&#8221; of the system add the modifications required for the new location.&nbsp; Once the system is ready it can be easily tested with prior business cases and be easily validated for the new location.&nbsp;&nbsp; I guess this is the &#8220;deterministic&#8221; task talked about by <a href="http://advice.cio.com/eugene_nizker/why_the_waterfall_failed">CIO Magazine</a>.<br />
<h3>&#8220;I think I need&#8230;&#8221;</h3>
<p>Everything else falls into this category.&nbsp; The category where the person defining the system has only half of a clue about what they need or want.&nbsp; I do like the way Mr. Nizker classifies these problems, &#8220;[there is a] volatile reality, which changes on them every day [and] the systems we develop influence [that] reality.&#8221;&nbsp; It&#8217;s sort of the <a href="http://www.aip.org/history/heisenberg/p08.htm">Heisenberg uncertainly principal</a> of IT systems.&nbsp; Until we start to peel back the layers the people trying to define the system don&#8217;t know the extent of their own delusion.&nbsp; You should think of it like therapy we must slowly work to the actual root of the problem.&nbsp; You can only do this in an iterative manner until the user has seen the solution they have no clue what their problem even is.
<p>It is all about using the right tool for the job and being able to tell the different before you start.&nbsp; Just as using the iterative method is overkill for a roll-out style project, the&nbsp;waterfall spells total doom for the iterative project.&nbsp; I rarely have a hard time deciding which tool to use.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danmcweeney.com/60/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
