<?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 &#187; SDN blogger</title>
	<atom:link href="http://blog.danmcweeney.com/category/sdn-blogger/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</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<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>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 [...]]]></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>3</slash:comments>
		</item>
		<item>
		<title>Community Activism</title>
		<link>http://blog.danmcweeney.com/58</link>
		<comments>http://blog.danmcweeney.com/58#comments</comments>
		<pubDate>Wed, 28 Nov 2007 19:48:47 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[SDN blogger]]></category>

		<guid isPermaLink="false">http://blog.danmcweeney.com/58</guid>
		<description><![CDATA[The SDN leadership have done a great thing, they have linked their &#8220;points&#8221; incentive program to a good world cause, School Feeding.&#160; From Chief Evangelist Mark Finnern&#8217;s blog Food for Points: The whole community collected around 2.5 million points last year. If we reach the same amount of points next year, we will have 100K [...]]]></description>
			<content:encoded><![CDATA[<p>The SDN leadership have done a great thing, they have linked their &#8220;points&#8221; incentive program to a good world cause, <a href="http://www.wfp.org/food_aid/school_feeding">School Feeding</a>.&nbsp; From Chief Evangelist Mark Finnern&#8217;s blog <a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/7898">Food for Points</a>:</p>
<blockquote><p>The whole community collected around 2.5 million points last year.
<p>If we reach the same amount of points next year, we will have 100K Euro. (If we don&#8217;t, we will walk in shame.)
<p>If we reach 3.0 million points, SAP will donate 150K Euro.
<p>Now if we even reach 3.5 million points, the amount will rise to the maximum of 200K Euro. </p>
</blockquote>
<p>From the World Food Programme&#8217;s web site:</p>
<blockquote><p>It costs just 10 US cents a day to give a child a cup of porridge at school. An additional nine US cents a day provides a child with a nutritional package, including basic health and sanitation support.</p>
</blockquote>
<p>1 Pt * ( # of Euros / # of Points ) *&nbsp; ( 1&nbsp;USD / .67 EUR ) * ( child / .1 USD ) = Conversion</p>
<p>Roughly translated back to points that means for every point you earn on SDN you will feed between .6 and .85 children for one day.&nbsp; With the average blog post getting around 50 points, one blog can feed 30-40 children that day.</p>
<p><strong>“One person can make a difference and every person should try.” John Fitzgerald Kennedy</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danmcweeney.com/58/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SAP Web Services in Flex Builder</title>
		<link>http://blog.danmcweeney.com/57</link>
		<comments>http://blog.danmcweeney.com/57#comments</comments>
		<pubDate>Wed, 14 Nov 2007 19:52:43 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[ABAP]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[SDN blogger]]></category>

		<guid isPermaLink="false">http://blog.danmcweeney.com/57</guid>
		<description><![CDATA[SAP web services are really complex, tables inside rows inside tables inside structures.&#160; I&#8217;ve been fielding an increasing number of questions about using these in the forum so, instead of answering everyone separately here are a few examples from simple to complex. Let&#8217;s start off with one of the simpler examples just to get the [...]]]></description>
			<content:encoded><![CDATA[<p>SAP web services are really complex, tables inside rows inside tables inside structures.&nbsp; I&#8217;ve been fielding an increasing number of questions about using these in the forum so, instead of answering everyone separately here are a few examples from simple to complex.</p>
<p>Let&#8217;s start off with one of the simpler examples just to get the hang of it.&nbsp; Use SAPLink and install this <a href="http://zclguialvgrid.googlecode.com/files/FUGR_ZSDN_TESTS.slnk">function group</a> and generate a web service from the one function in it.&nbsp; Now, lets write some Flex code to call this.</p>
<h3>Import Statements</h3>
<p>A few people have asked me to add the import statements to this.&nbsp; For reference if you go to the object that has the error, move your cursor to the end of the word hold control and press space the import will be added for you automatically, welcome to the wonderful world of a good IDE.&nbsp; But the following in a &lt;mx:Script&gt; block between the &lt;mx:Application&gt; tags.</p>
<div class="wlWriterEditableSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:cfad4a30-9b29-416c-93d9-133e8c4b2b76" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre style="background-color: white">
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

--><span style="color: #000000">import mx.rpc.AbstractOperation;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.soap.LoadEvent;
import mx.rpc.soap.WebService;</span></div>
</pre>
</div>
<h2>Simplest Example</h2>
<h3>Step 1 &#8211; Get your WSDL</h3>
<div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:177a0323-a5da-495a-b187-ee5972c3502e" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; width: 703px; padding-top: 0px">
<pre style="background-color:White;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;">
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

--><span style="color: #008080; ">1</span> <span style="color: #0000FF; ">private</span><span style="color: #000000; "> function callWebService():</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">{
</span><span style="color: #008080; ">2</span> <span style="color: #000000; ">    fooService </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> WebService();
</span><span style="color: #008080; ">3</span> <span style="color: #000000; ">    fooService.wsdl </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">http://localhost/sap/bc/srt/rfc/sap/Z_TEST_CHANGING_PARAM?sap-client=300&amp;wsdl=1.1</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">;
</span><span style="color: #008080; ">4</span> <span style="color: #000000; ">    fooService.addEventListener(LoadEvent.LOAD, loadListener);
</span><span style="color: #008080; ">5</span> <span style="color: #000000; ">    fooService.addEventListener(ResultEvent.RESULT, resultTrigger);
</span><span style="color: #008080; ">6</span> <span style="color: #000000; ">    fooService.addEventListener(FaultEvent.FAULT,fault);
</span><span style="color: #008080; ">7</span> <span style="color: #000000; ">    fooService.loadWSDL();
</span><span style="color: #008080; ">8</span> <span style="color: #000000; ">}</span></div>
</pre>
</div>
<p><strong>Line by Line:</strong></p>
<ol>
<li>Declare a function that will start the whole process</li>
<li>Create a WebService object, this should be global or at least visible to the other methods ( you&#8217;ll need it later )</li>
<li>Point the WS to the location of the WSDL</li>
<li>Add an EventListener for when the Loading of the WSDL is complete</li>
<li>Add an EventListener for the results coming back from the call</li>
<li>Add an EventListener for any errors that occur</li>
<li>Tell the WS to load the WSDL</li>
</ol>
<h3><font face="Verdana">Step 2 &#8211; Set Some Parameters</font></h3>
<p><div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:438555d6-8ee2-4317-b461-6b80d6189730" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; width: 694px; padding-top: 0px">
<pre style="background-color:White;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;">
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

--><span style="color: #008080; ">1</span> <span style="color: #0000FF; ">private</span><span style="color: #000000; "> function loadListener(</span><span style="color: #0000FF; ">event</span><span style="color: #000000; ">:LoadEvent):</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">{
</span><span style="color: #008080; ">2</span> <span style="color: #000000; ">    var op:AbstractOperation </span><span style="color: #000000; ">=</span><span style="color: #000000; "> fooService.getOperation(</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">Z_DOUBLE_ROWS</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">);
</span><span style="color: #008080; ">3</span> <span style="color: #000000; ">    var input:Object </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> Object();
</span><span style="color: #008080; ">4</span> <span style="color: #000000; ">    input.TEST </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> Array();
</span><span style="color: #008080; ">5</span> <span style="color: #000000; ">    input.TEST.push(</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">foo</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">);
</span><span style="color: #008080; ">6</span> <span style="color: #000000; ">    input.TEST.push(</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">bar</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">);
</span><span style="color: #008080; ">7</span> <span style="color: #000000; ">    op.arguments </span><span style="color: #000000; ">=</span><span style="color: #000000; "> input;
</span><span style="color: #008080; ">8</span> <span style="color: #000000; ">    op.send();
</span><span style="color: #008080; ">9</span> <span style="color: #000000; ">}</span></div>
</pre>
</div>
<p><strong>Line by Line:</strong></p>
<ol>
<li>Declare a function who handles the event you subscribed to in the Step&nbsp;1 line 4.</li>
<li>Get the Operation from the WSDL file.&nbsp; This is one of those &#8220;standard&#8221; ways of doing things.&nbsp; If you look at your WSDL file you will see that it could have more then one operation in it, this gets the particular operation you want to call.</li>
<li>Create a dynamic object that will hold the inbound parameters to your WS.&nbsp; In this case the parameter TEST is a table of strings.</li>
<li>Here we create what Flex builder thinks is how to hold&nbsp; a table, an Array.</li>
<li>Then we push each &#8220;row&#8221; of the table into the array again, in this case it&#8217;s just one string at a time.</li>
<li>See Line 5</li>
<li>We then map the input object to the arguments of the WS.</li>
<li>Send our request including all the input data to the server</li>
</ol>
<h3>Step 3 &#8211; Look at the Output</h3>
<p><div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:d2cd3332-1cb8-4784-b329-fe14eb61a44c" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; width: 694px; padding-top: 0px">
<pre style="background-color:White;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;">
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

--><span style="color: #008080; ">1</span> <span style="color: #0000FF; ">private</span><span style="color: #000000; "> function resultTrigger(</span><span style="color: #0000FF; ">event</span><span style="color: #000000; ">:ResultEvent):</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">{
</span><span style="color: #008080; ">2</span> <span style="color: #000000; ">    var item:String;
</span><span style="color: #008080; ">3</span> <span style="color: #000000; ">    </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> each(item </span><span style="color: #0000FF; ">in</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">event</span><span style="color: #000000; ">.result){
</span><span style="color: #008080; ">4</span> <span style="color: #000000; ">        trace(item);
</span><span style="color: #008080; ">5</span> <span style="color: #000000; ">    }
</span><span style="color: #008080; ">6</span> <span style="color: #000000; ">}</span></div>
</pre>
</div>
<p><strong>Line by Line</strong></p>
<ol>
<li>Define a function to handle the event from section 1 line 5</li>
<li>Declare on object to hold each result</li>
<li>Loop at each item in the result list, which happen to be strings.</li>
<li>Print them out to the debug console</li>
</ol>
<p>I will talk about more advanced parsing of the result set later on.</p>
<h2>Inbound Table Parameter</h2>
<p>First, get your WSDL, in this case I will be using the FM BAPI_FLIGHT_GETLIST from the SFLIGHTS example we are all so fond of.&nbsp; You should run this FM a few times to make sure you have data on the ABAP side, I will be passing in a date range to this FM so, you might want to find two dates that return some data for you. ( I named my WebService &#8220;Z_GET_FLIGHT_LIST&#8221; )</p>
<h3>Step 1 &#8211; Get Your WSDL</h3>
<p>This is the same exact thing you did before, just with a different WSDL.</p>
<h3>Step 2 &#8211; Set some Parameters</h3>
<p>There is a strange behavior with ABAP WebServices where if you have a table that is both Input and Output you must pass it as part request to get it filled.&nbsp; You&#8217;ll see in a second:</p>
<div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:69c09289-32e6-49d6-bf4d-a6302ba552cb" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; width: 697px; padding-top: 0px">
<pre style="background-color:White;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;">
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

--><span style="color: #008080; ">1</span> <span style="color: #0000FF; ">private</span><span style="color: #000000; "> function loadListener(</span><span style="color: #0000FF; ">event</span><span style="color: #000000; ">:LoadEvent):</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">{
</span><span style="color: #008080; ">2</span> <span style="color: #000000; ">    var op:AbstractOperation </span><span style="color: #000000; ">=</span><span style="color: #000000; "> fooService.getOperation(</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">BAPI_FLIGHT_GETLIST</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">);
</span><span style="color: #008080; ">3</span> <span style="color: #000000; ">    var input:Object </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> Object();
</span><span style="color: #008080; ">4</span> <span style="color: #000000; ">    input.FLIGHT_LIST </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> Array();
</span><span style="color: #008080; ">5</span> <span style="color: #000000; ">    input.RETURN </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> Array();
</span><span style="color: #008080; ">6</span> <span style="color: #000000; ">    op.arguments </span><span style="color: #000000; ">=</span><span style="color: #000000; "> input;
</span><span style="color: #008080; ">7</span> <span style="color: #000000; ">    op.send();
</span><span style="color: #008080; ">8</span> <span style="color: #000000; ">}</span></div>
</pre>
</div>
<p><strong>Line by Line</strong></p>
<ol>
<li>Define a function that handles the event</li>
<li>Get the right operation</li>
<li>Dynamic input object</li>
<li>You have to pass blank parameters to the WS so that the Web Application Server will fill them</li>
<li>See line 4</li>
<li>Same as last time</li>
<li>Same here</li>
</ol>
<p><strong><font face="Trebuchet MS"></font></strong></p>
<h3>Set Table Parameters</h3>
<div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:aa159222-3442-4c18-aa83-e3ec8a1d1097" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; width: 707px; padding-top: 0px">
<pre style="background-color:White;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;">
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

--><span style="color: #008080; ">1</span> <span style="color: #000000; ">    var dateRangeRow:Object </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> Object();
</span><span style="color: #008080; ">2</span> <span style="color: #000000; ">    input.DATE_RANGE </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> Array();
</span><span style="color: #008080; ">3</span> <span style="color: #000000; ">    dateRangeRow.SIGN </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">I</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">;
</span><span style="color: #008080; ">4</span> <span style="color: #000000; ">    dateRangeRow.OPTION </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">EQ</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">;
</span><span style="color: #008080; ">5</span> <span style="color: #000000; ">    dateRangeRow.LOW </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">2002-12-20</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">;
</span><span style="color: #008080; ">6</span> <span style="color: #000000; ">    dateRangeRow.HIGH </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">&quot;&quot;</span><span style="color: #000000; ">;
</span><span style="color: #008080; ">7</span> <span style="color: #000000; ">    input.DATE_RANGE.push(dateRangeRow);</span></div>
</pre>
</div>
<p><strong>Line by Line ( add this between lines 5 and 6 from the prior example )</strong></p>
<ol>
<li>Create a new dynamic object that holds a Row of the DATE_RANGE table</li>
<li>Create an array called DATE_RANGE which will map to the DATE_RANGE input parameter</li>
<li>Set each field dynamically</li>
<li>More fields</li>
<li>More fields</li>
<li>More fields ( don&#8217;t need to pass this one because it&#8217;s blank )</li>
<li>Push this row into the array</li>
</ol>
<h3>Step 3 &#8211; Look at the Output</h3>
<div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:75a8b0ec-b550-49fc-b543-b28156dc611e" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; width: 701px; padding-top: 0px">
<pre style="background-color:White;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;">
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

--><span style="color: #008080; ">1</span> <span style="color: #0000FF; ">private</span><span style="color: #000000; "> function resultTrigger(</span><span style="color: #0000FF; ">event</span><span style="color: #000000; ">:ResultEvent):</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">{
</span><span style="color: #008080; ">2</span> <span style="color: #000000; ">    var row:Object;
</span><span style="color: #008080; ">3</span> <span style="color: #000000; ">    </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> each (row </span><span style="color: #0000FF; ">in</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">event</span><span style="color: #000000; ">.result.FLIGHT_LIST){
</span><span style="color: #008080; ">4</span> <span style="color: #000000; ">        trace(row.AIRLINE </span><span style="color: #000000; ">+</span><span style="color: #000000; "> </span><span style="color: #000000; ">&quot;</span><span style="color: #000000; "> </span><span style="color: #000000; ">&quot;</span><span style="color: #000000; "> </span><span style="color: #000000; ">+</span><span style="color: #000000; "> row.CITYFROM);
</span><span style="color: #008080; ">5</span> <span style="color: #000000; ">    }
</span><span style="color: #008080; ">6</span> <span style="color: #000000; ">}</span></div>
</pre>
</div>
<p><strong>Line by Line</strong></p>
<ol>
<li>Function, again.</li>
<li>Use a place holder dynamic object</li>
<li>Loop at the table called FLIGHT_LIST ( looks like ABAP doesn&#8217;t it? )</li>
<li>Print to the console the fields you want ( looks like ABAP doesn&#8217;t it? )</li>
</ol>
<p>Disclaimer: There are a number of ways to call WebServices in Flex, I believe this is the most complete and &#8220;standard&#8221; way to call them, if not someone please point me to Adobe docs that show the most correct way.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danmcweeney.com/57/feed</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Synthesizers</title>
		<link>http://blog.danmcweeney.com/50</link>
		<comments>http://blog.danmcweeney.com/50#comments</comments>
		<pubDate>Tue, 23 Oct 2007 15:13:57 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[et alii]]></category>
		<category><![CDATA[innovation]]></category>
		<category><![CDATA[SDN blogger]]></category>

		<guid isPermaLink="false">http://blog.danmcweeney.com/50</guid>
		<description><![CDATA[At SAP TechEd Las Vegas I wanted to bounce some ideas off the RedMonk Gang( Michael Cotè and James Governor ) about what I think the new Developer will look like instead I somehow got roped into a full blown interview on Synthesizers.&#160; So, I&#8217;ve frantically spent the last few weeks solidifying my ideas in [...]]]></description>
			<content:encoded><![CDATA[<p><a title="M5 Modular Synthesizer" href="http://www.flickr.com/photos/8491225@N08/1650071282/"><img style="margin: 5px" height="126" alt="M5 Modular Synthesizer" hspace="5" src="http://static.flickr.com/2319/1650071282_dea38fc8d4.jpg" width="142" align="left" vspace="5" border="0"></a>At SAP TechEd Las Vegas I wanted to bounce some ideas off the <a href="http://www.redmonk.com/" target="_blank">RedMonk</a> Gang( <a href="http://www.redmonk.com/cote/" target="_blank">Michael Cotè</a> and <a href="http://www.redmonk.com/jgovernor/" target="_blank">James Governor</a> ) about what I think the new Developer will look like instead I somehow got roped into a full blown <a href="http://redmonk.com/tv/2007/10/08/the-rise-of-the-designerdeveloper-mashup-developer/" target="_blank">interview on Synthesizers</a>.&nbsp; So, I&#8217;ve frantically spent the last few weeks solidifying my ideas in this area.</p>
<p>The new Synthesizer will have a few required tenets, listed in order of importance, underneath are a many &#8220;optional&#8221; components.&nbsp; It&#8217;s okay if you don&#8217;t exhibit these characteristics &#8212; you might still be able to get a job flipping burgers:</p>
<h3>Code</h3>
<p>Sorry, namby-pamby non-coder types need not apply.&nbsp; A real understanding of programming concepts is required.&nbsp; However, I&#8217;ve found that Synthesizers are generally <em>not language Nazis</em>.&nbsp; They are more <em>opportunistic</em> in their choice of language, they know a lot about probably one language but, also know when it&#8217;s not a good fit for what they are doing.&nbsp; For instance, why would write a screen saver in <a href="http://en.wikipedia.org/wiki/Abap" target="_blank">ABAP</a>?</p>
<h3>Community</h3>
<p>This is the area that allows Synthesizers to move faster then anyone else.&nbsp; They know what is going on, they&#8217;re &#8220;plugged in.&#8221;&nbsp; They know who is doing good work and they know how to stick those disparate parts together in order to get something better.&nbsp; <a href="http://dougmccune.com/blog/" target="_blank">Doug Mccune</a> ( my model synthesizer ) has put it best in a post about <a href="http://www.tileui.com" target="_blank">TileUI</a>:</p>
<blockquote><p><font color="#333333">&#8230;how badass [the] open source community libraries for Flex are. I was able to grab these open source libraries and within a few days have something pretty sweet to show for it. A big thanks to everyone behind the PaperVision project, and to <a href="http://cove.org">Alec Cove</a> for the APE engine. You guys make this stuff easy. [ <a href="http://dougmccune.com/blog/2007/08/04/the-making-of-tileui/" target="_blank">The making of TileUI</a> ]</font></p>
</blockquote>
<p>What else is in this quote?&nbsp; <em>Attribution</em>, &#8220;A big thanks to <a href="http://cove.org">Alec Cove</a>&nbsp;for the APE engine.&#8221;&nbsp; <em>Promoter</em>, you can tell from Doug&#8217;s tone how much the open source community helped him write this application.&nbsp; <em>Collaboration</em>, without giving back to these communities you end up looking like a strip miner taking all the best out and not returning anything back.&nbsp; A example from a totally different world is <a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/u/251694270" target="_blank">Thomas Jung</a>, <a href="https://wiki.sdn.sap.com/wiki/display/profile/Thomas+Jung" target="_blank">SAP geek</a> and ABAP coder #1.&nbsp; Thomas has built a ton of innovative stuff in ABAP from Matrix Screen Savers to a full replacement for the delivered web rendering system, changing it from HTML to Flex, named <a href="http://code.google.com/p/flob/" target="_blank">Flob</a>.&nbsp; At TechEd this year he released <a href="http://code.google.com/p/flob/" target="_blank">Flob</a>, built using my library <a href="http://code.google.com/p/abapjs/" target="_blank">AJS</a>, which he mentioned he had a few fixes for functionality.&nbsp; This back and forth consumption and production allow open source projects to grow organically as need.</p>
<h3>Communication</h3>
<p><a title="Communications" href="http://www.flickr.com/photos/35034356678@N01/195957286/"><img style="margin: 5px" height="137" alt="Communications" src="http://static.flickr.com/77/195957286_5de4b91bd7.jpg" width="206" align="left" border="0"></a>This is an obvious one, but again has a similar ebb and flow characteristic.&nbsp; The most effective Synthesizers have a blog or are really active in forums.&nbsp; They produce not only code but content, documentation, opinions &#8212; they care about what&#8217;s out there and what they are putting out there.&nbsp; They probably read RSS feeds from dozens(at least) of different sources from many different areas.</p>
<h3>Broad Knowledge</h3>
<p>Underlying all these is less a tenet and more an obvious prerequisite.&nbsp; Synthesizers want to understand stuff, they want to know about many areas not just Coding.&nbsp; They might read about other sciences or be super into music.&nbsp; <a href="http://www.levelofindustry.com/" target="_blank">Samuel Agesilas Pastel</a>&nbsp;is great example of someone with groundings in music and design who also happens to be a sick programmer.&nbsp; His UML modeling tool, called <a href="http://www.levelofindustry.com/journal/saffron-air-uml-tool-update-3.html" target="_blank">Saffron UML</a>, parses actionscript libraries and generates great looking UML diagrams.&nbsp; Just read his blog of a bit and you will see the <a href="http://www.levelofindustry.com/journal/2007/10/9/seeking-inspiration-in-unconventional-places.html" target="_blank">diverse</a>&nbsp;<a href="http://www.levelofindustry.com/journal/2007/9/4/objective-actionscript-a-look-inside-the-newly-revamped-obje.html" target="_blank">view</a> <a href="http://www.levelofindustry.com/journal/dave-thomas-on-xml.html" target="_blank">he</a> takes to <a href="http://www.levelofindustry.com/journal/2007/6/13/bruce-lee-on-design-and-coding.html" target="_blank">software development</a>.&nbsp; That diversity&nbsp;allows Synthesizers to&nbsp;keep an anything&nbsp;goes mentality that enables them to see connections where other people see chasms they will never cross.</p>
<p>The funny thing with this set is maybe if you replace the first tenet with &#8220;<a href="http://www.redmonk.com/" target="_blank">industry analysis</a>&#8221; or &#8220;<a href="http://www.accmanpro.com" target="_blank">accounting</a>&#8221; you might get some other folks that are producing new Synthesizers &#8212; but I&#8217;m just a programmer what do I know.</p>
<p>Thanks to <a href="http://www.flickr.com/photos/synthesizers/" target="_blank">Synthesizer</a>, <a href="http://www.flickr.com/photos/mave99a/" target="_blank">maverick</a>&nbsp;for the images.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danmcweeney.com/50/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Secrets of the Subscription EULA</title>
		<link>http://blog.danmcweeney.com/49</link>
		<comments>http://blog.danmcweeney.com/49#comments</comments>
		<pubDate>Wed, 17 Oct 2007 10:33:13 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[ABAP]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[SDN blogger]]></category>

		<guid isPermaLink="false">http://blog.danmcweeney.com/49</guid>
		<description><![CDATA[I was able to ask Zia Yusuf this morning about some of the restrictions around the SAP Subscription License.&#160; paraphrasing his answer a bit: The license you are granted is a development license if you intend to resell or license any of your solutions you create you need to get a different license from SAP [...]]]></description>
			<content:encoded><![CDATA[<p>I was able to ask Zia Yusuf this morning about some of the restrictions around the SAP Subscription License.&nbsp; paraphrasing his answer a bit:</p>
<blockquote><p><font color="#333333">The license you are granted is a development license if you intend to resell or license any of your solutions you create you need to get a different license from SAP</font></p>
</blockquote>
<p>So what this means is that if you develop something on the subscription program you cannot resell it.&nbsp; The EULA is pretty clear in this regard:</p>
<blockquote><p>If You wish to use an Add-On or Consuming Product Application created by You in a production environment, or to otherwise commercialize and/or distribute that Add-On or Consuming Product Application, You must first enter into a separate agreement with SAP.&nbsp; Under this Agreement You are not entitled to: &#8230; license sell, offer to sell, transfer, rent, lease, distribute and/or otherwise make available the SAP Software and/or any Add-On to third parties. [source: <a href="https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/webcontent/uuid/10436b59-dcf0-2910-e9bd-d839ceb83b6d?revisionid=3&amp;language=en" target="_blank">EULA</a>]</p>
</blockquote>
<p>Thanks to <a href="http://blog.ewherrmann.com/" target="_blank">Eddie</a> for the link to the EULA.
<p>Basically this means if you want to sell something you need a new license and probably any open source work would also meet with a cease and desist from the SAP legal team.&nbsp;
<p>To compare this to another player in the industry the <a href="http://download.microsoft.com/documents/useterms/MSDN%20Subscription_Premium%20Edition_English_36b85cb5-cdc0-43d8-90c1-fa168f15ee6d.pdf" target="_blank">EULA associated with the MSDN subscription</a> appears to not make any distinctions like this.&nbsp; Granted the <a href="http://msdn2.microsoft.com/en-us/vstudio/aa718657.aspx" target="_blank">pricing for the MSDN subscription</a> is a bit higher, New $10,939, then $3,499 / year thereafter.&nbsp; Compared to the <a href="https://www.sdn.sap.com/irj/sdn/subscriptions" target="_blank">SDN Subscription cost</a> which is $2,300 / year.&nbsp; I wonder how the MSDN numbers compare with the cost of the&nbsp;SAP license to resell your solutions.
<p>I think the subscription is a great idea and a big step forward for SAP but, to become a &#8220;platform company&#8221; they need to make it easier(cheaper being part of this) to get started in the ISV market.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danmcweeney.com/49/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Majority Desk Architecture</title>
		<link>http://blog.danmcweeney.com/48</link>
		<comments>http://blog.danmcweeney.com/48#comments</comments>
		<pubDate>Tue, 09 Oct 2007 15:32:26 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[innovation]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[SDN blogger]]></category>

		<guid isPermaLink="false">http://blog.danmcweeney.com/48</guid>
		<description><![CDATA[One of the common questions I was asked after demoing Majority Desk&#160;was how the heck is it built?&#160; To explain, I will first break down the individual components and then talk about how the Wiihands move across the screen.&#160; There is a lot more to the interactions in this system but, moving the Wiihands should [...]]]></description>
			<content:encoded><![CDATA[<p>One of the common questions I was asked after demoing <a href="http://www.majoritydesk.com" target="_blank">Majority Desk</a>&nbsp;was how the heck is it built?&nbsp; To explain, I will first break down the individual components and then talk about how the Wiihands move across the screen.&nbsp; There is a lot more to the interactions in this system but, moving the Wiihands should give you a pretty good insight into how the whole thing is built.&nbsp; Just to frame the following discussion Majority Desk is <em>mostly</em> an AIR application built using Flex Builder 3.</p>
<h3>ODE2Paper</h3>
<p>ODE2Paper is the main visualization and physics library I wrote that underpins the Majority Desk application.&nbsp; It binds the&nbsp;<a href="http://www.ode.org/" target="_blank">Open Dynamics Engine</a> (ODE for short), which is the underlying physics system to <a href="http://blog.papervision3d.org/" target="_blank">Papervision3d</a>&nbsp;(PV3D for short), the 3d rendering system.&nbsp; The foundation of this interaction is actually very simple: every time Flex fires an ENTER_FRAME event I issue a refresh command over a socket that is connected to the physics server.&nbsp; The physics server is a python application that uses <a href="http://pyode.sourceforge.net/" target="_blank">pyODE</a>&nbsp;to wrap the ODE libraries.&nbsp; The physics server &#8220;parses&#8221; the refresh command,</p>
<div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:847a1a26-6409-4f1e-bde1-a076d040c00a" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; width: 440px; padding-top: 0px">
<pre style="background-color:White;">
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">refresh</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">

</span></div>
</pre>
</div>
<p> iterates across all the objects in its world producing a new XML document with the position and transformation matrices of all the existing objects and sends that XML back to Flex.&nbsp; </p>
<div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:1a99593d-90f2-4859-b6de-16affdb7deac" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; width: 402px; padding-top: 0px">
<pre style="background-color:White;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;">
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">world</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">
    </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">o1 </span><span style="color: #FF0000; ">x</span><span style="color: #0000FF; ">=&quot;0.0&quot;</span><span style="color: #FF0000; "> y </span><span style="color: #0000FF; ">=&quot;0.0&quot;</span><span style="color: #FF0000; "> z</span><span style="color: #0000FF; ">=&quot;0.0&quot;</span><span style="color: #FF0000; "> r0</span><span style="color: #0000FF; ">=&quot;0.0&quot;</span><span style="color: #FF0000; "> r1</span><span style="color: #0000FF; ">=&quot;0.0&quot;</span><span style="color: #FF0000; "> r2</span><span style="color: #0000FF; ">=&quot;0.0&quot;</span><span style="color: #FF0000; "> r3</span><span style="color: #0000FF; ">=&quot;0.0&quot;</span><span style="color: #FF0000; "> r4</span><span style="color: #0000FF; ">=&quot;0.0&quot;</span><span style="color: #FF0000; "> r5</span><span style="color: #0000FF; ">=&quot;0.0&quot;</span><span style="color: #FF0000; "> r6</span><span style="color: #0000FF; ">=&quot;0.0&quot;</span><span style="color: #FF0000; "> r7</span><span style="color: #0000FF; ">=&quot;0.0&quot;</span><span style="color: #FF0000; "> r8</span><span style="color: #0000FF; ">=&quot;0.0&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
    </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">o2 </span><span style="color: #FF0000; ">x</span><span style="color: #0000FF; ">=&quot;10.0&quot;</span><span style="color: #FF0000; "> y </span><span style="color: #0000FF; ">=&quot;15.0&quot;</span><span style="color: #FF0000; "> z</span><span style="color: #0000FF; ">=&quot;10.0&quot;</span><span style="color: #FF0000; "> r0</span><span style="color: #0000FF; ">=&quot;0.0&quot;</span><span style="color: #FF0000; "> r1</span><span style="color: #0000FF; ">=&quot;0.0&quot;</span><span style="color: #FF0000; "> r2</span><span style="color: #0000FF; ">=&quot;0.0&quot;</span><span style="color: #FF0000; "> r3</span><span style="color: #0000FF; ">=&quot;0.0&quot;</span><span style="color: #FF0000; "> r4</span><span style="color: #0000FF; ">=&quot;0.0&quot;</span><span style="color: #FF0000; "> r5</span><span style="color: #0000FF; ">=&quot;0.0&quot;</span><span style="color: #FF0000; "> r6</span><span style="color: #0000FF; ">=&quot;0.0&quot;</span><span style="color: #FF0000; "> r7</span><span style="color: #0000FF; ">=&quot;0.0&quot;</span><span style="color: #FF0000; "> r8</span><span style="color: #0000FF; ">=&quot;0.0&quot;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">collisions</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">
</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">world</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">

</span></div>
</pre>
</div>
<p>When this data transfer is complete on the Flex side, I move all the objects in the PV3d scene and then call the camera render.&nbsp; Simple right? <img src='http://blog.danmcweeney.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h3>A Wii bit of background</h3>
<p>The Wiimote is a blue tooth transmitter, it reports its position and state to the blue tooth receiver on the client computer.&nbsp; It determines its position by &#8220;looking&#8221; through the IR port on the front of the Wiimote at the poorly named sensor bar.&nbsp; The sensor bar in reality has no sensors in it &#8212; it has two IR emitters that allow the Wiimote to triangulate its X and Y position in space.&nbsp; The Wiimote also has an accelerometer on board that allows it to measure movement in the X, Y, Z planes (pitch, yaw, and roll).&nbsp; This page has a mountain of <a href="http://www.wiili.org/index.php/Wiimote" target="_blank">technical detail about the Wiimote</a>.</p>
<h3>WiiFlash</h3>
<p>The information from the Wiimote is sent to the <a href="http://www.wiiflash.org" target="_blank">WiiFlash</a>&nbsp;server.&nbsp; WiiFlash removes all the complexity out of using Wiimotes to control any Flash application.&nbsp; The API is pretty complete and we found it to be fairly stable.&nbsp; This is the section <a href="http://blog.ewherrmann.com/" target="_blank">Eddie</a> dealt with most so, I can&#8217;t talk too intelligently about it except to say that we use the WiiFlash AS3 API to access all the position and button state information from the Wiimote.&nbsp; The API handles all the calls&nbsp;through a local connection that streams the information from the projects <a href="http://code.google.com/p/wiiflash/downloads/list" target="_blank">WiiFlash Server</a>, which for now only runs on windows, sorry Mac faithful.&nbsp; </p>
<p>This pretty much rounds out the subsystems that lie underneath the application.&nbsp; This doesn&#8217;t really explain how the thing works so, I will walk you through how the Wiihands move around the screen to hopefully give you a better idea of what is going on.</p>
<h3>Moving Wiihands</h3>
<p>The most common thing we do in Majority Desk&nbsp;is move our Wiihands to interact with the world.&nbsp; To allow interactions with the state of the physical world maintained by the physics server we have a set of commands in ODE2Paper.&nbsp; The ones that matter for the Wiihands are createSphere, setObjPos, createJoint and breakJoint.&nbsp; These methods serve as proxy for the real commands flying over to the physics server.&nbsp; The rationale for this is again the main underlying concept that the physics server knows where the objects are and PV3d simply renders them.&nbsp; So all the interactions are really taking place on the physics server.&nbsp; The Wiihands are represented in the physics system as sphere because they are in reality just a cool texture wrapped on a sphere in PV3d.</p>
<p>So as a Wiimote moves we get its position and call a setObjPos method in ODE2Paper library which moves the object in the physics server.&nbsp; Again the physics server leads and PV3d simply renders a view of the world.</p>
<h3>Grabbing stuff</h3>
<p>If you got the chance during Hacker Night or our Meet the Jammers session to mess with Majority Desk you may remember that if you hold the trigger and bump into something&nbsp;with your Wiihands you can grab it.&nbsp; Letting go of the trigger will release the object and let it float around again.&nbsp; This is achieved using the collisions&nbsp;XML node that I didn&#8217;t talk about earlier.&nbsp; If you look back at the XML doc that the physics server creates to represent the world you will see an empty node there for collisions.&nbsp; ODE2Paper notifies our Flex application that two bodies are about to collide via this XML node.&nbsp; This allows us to detect that the Wiihand is touching something and then build a joint, using the ODE2Paper method createJoint.&nbsp; A joint is a type of attachment between two bodies in ODE, we use simple static joints but a whole slew of <a href="http://www.ode.org/ode-latest-userguide.html#sec_7_3_0" target="_blank">different joints types are supported by ODE</a>.&nbsp; This is why the widget seems to follow a Wiihand around as it moves.&nbsp; The great thing is this affect is achieved by just calling setObjPos on the&nbsp;Wiihand, which is the normal behavior described previously.&nbsp;&nbsp; To release the object we simply call breakJoint and the physics server breaks the joint allow the attached object to move fluidly again.</p>
<p>If you want a run down of links and a good video that shows <a href="http://www.youtube.com/watch?v=jaYmXLIPVSc" target="_blank">Majority Desk in action</a>, check out <a href="http://blog.ewherrmann.com/2007/10/08/majority-desk-get-your-wiihands-on/" target="_blank">Eddie&#8217;s blog post about it</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danmcweeney.com/48/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Drowning in Swim Lanes</title>
		<link>http://blog.danmcweeney.com/47</link>
		<comments>http://blog.danmcweeney.com/47#comments</comments>
		<pubDate>Mon, 08 Oct 2007 14:55:17 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[SAP]]></category>
		<category><![CDATA[SDN blogger]]></category>

		<guid isPermaLink="false">http://blog.danmcweeney.com/47</guid>
		<description><![CDATA[SAP is really starting to push the Composition Environment at this TechEd.&#160; Recently I&#8217;ve started to think&#160;a lot about this topic given that it could radically change the way enterprise developers do their jobs.&#160; This environment must also come with a new and necessary workflow akin to the Design &#8211; Developer workflow that MS and [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Photo Sharing" href="http://www.zooomr.com/photos/danmcweeney/3431413/"><img style="margin: 0px 10px 0px 0px" height="180" alt="IMG_1687" src="http://static.zooomr.com/images/3431413_08c1cc4d21_m.jpg" width="240" align="left"></a><strong> </strong>
<p>SAP is really starting to push the Composition Environment at this TechEd.&nbsp; Recently I&#8217;ve started to think&nbsp;a lot about this topic given that it could radically change the way enterprise developers do their jobs.&nbsp; This environment must also come with a new and necessary workflow akin to the Design &#8211; Developer workflow that MS and Adobe&nbsp;are both talking about.&nbsp; Adobe has recently released <a href="http://labs.adobe.com/wiki/index.php/Thermo" target="_blank">Thermo</a> which tries to address this gap with software.&nbsp; <a href="http://blog.digitalbackcountry.com/" target="_blank">Ryan Stewart</a> gives <a href="http://blog.digitalbackcountry.com/?p=1065" target="_blank">a great rundown of the Thermo</a> and the importance of this interaction:</p>
<blockquote><p>It&#8217;s all possible because Thermo is a jewel of the designer-developer workflow. We can rely on Adobe&#8217;s incredible experience in creating design tools with our growing and powerful development framework, Flex. A good designer-developer workflow is so important to creating great RIAs. You only get great experiences when you combine the right brain of a designer with the left brain of the developer and let them collaborate.</p>
</blockquote>
<p>Although, the design-developer paradigm is a good starting point it isn&#8217;t nearly complex enough ( not to say this interplay isn&#8217;t complicated but, come on if you put the wrong color somewhere your enterprise doesn&#8217;t stop running ).&nbsp; The design-developer workflow relies on something else too &#8212; that both parties have at least a tacit understanding of what the other does.&nbsp; There has been a lot of talk on SDN/BPX about this but, I am unconvinced that a common &#8220;language&#8221; is all we need.&nbsp; </p>
<h2>Life Guards</h2>
<p>Development-QA-Production, the 3&nbsp;tiered architecture that helps stabilize SAP development.&nbsp; How will this be implemented in this workflow?&nbsp; Where do the we do business process re-engineering?&nbsp; Who tests these changes?&nbsp; How can we communicate the shared responsibility?</p>
<p>A common language doesn&#8217;t solve this problem &#8212; it would seem more like IT would have to transition resources to be the life guards at the pool.&nbsp; Changing workflows and/or &#8220;document flows&#8221; can radically affect &nbsp;the running or compliance of the enterprise.&nbsp; Who serves as the gate keeper for these things?</p>
<h2>Treading Water</h2>
<p>Right now the average IT department is trying to do more with much less.&nbsp; They are trying hard to build new functionality for their businesses in a choreographed manner, using all manner of controls from code reviews to OO design patterns.&nbsp; One big question is how does the business person even ask for this new functionality?&nbsp; What if there isn&#8217;t something in their enterprise service repository or what if a field they want isn&#8217;t there?&nbsp; Do they create some <a href="https://www.sdn.sap.com/irj/sdn/wiki?path=/display/BPX/Community+Project&amp;" target="_blank">vast wiki system</a>?&nbsp; Do they open an OSS message&nbsp;( although we would have to make the GUI a bit easier to deal with! )?&nbsp; Ah, I know Solution Manager &#8212; open a message there.&nbsp; Great.&nbsp; </p>
<p>We use certain programming techniques to do more with less, &#8220;Why not write this section of the project as a set of subsystems and a facade so we can use it again if we want.&#8221;&nbsp; How can we see these interconnections if IT is just trying to tread water supporting these new &#8220;business process reengineering&#8221; tasks.</p>
<h2>Leaky</h2>
<p>I guess my main problem is that I know enough about programming to know that even when we have nice abstractions they never work exactly as planned.&nbsp; &#8220;<a href="http://www.joelonsoftware.com/articles/LeakyAbstractions.html" target="_blank">All non-trivial abstractions, to some degree, are leaky</a>.&#8221;</p>
<blockquote><p>&#8230;you can&#8217;t drive as fast when it&#8217;s raining, even though your car has windshield wipers and headlights and a roof and a heater, all of which protect you from caring about the fact that it&#8217;s raining (they abstract away the weather), but lo, you have to worry about hydroplaning (or aquaplaning in England) and sometimes the rain is so strong you can&#8217;t see very far ahead so you go slower in the rain, because the weather can never be completely abstracted away, because of the law of leaky abstractions.</p>
</blockquote>
<p>When someone goes to change a business process they are using abstractions to deal with the complexity of business.&nbsp; They are using objects created by programmers to represent the world and when we try and put them together there will be instances where they leak.&nbsp; The biggest&nbsp;problem with&nbsp;this is that the person doing the re-engineering isn&#8217;t going to know.&nbsp; They are just going to try and move blocks around till it works right and this is dangerous.&nbsp; Adding more steps or trying to&nbsp;circumvent the&nbsp;abstractions inherent leakiness is bad and will just produce poorly designed&nbsp;processes.&nbsp;</p>
<h2>Mark Spitz</h2>
<p>Success in this is possible &#8212; we just have to realize that the only way to do this is get people on both sides who have a shred of understanding about what the other half does.&nbsp; The optimum process has to have a collaborative model at it&#8217;s core where the person doing the re-engineering is leading the way.&nbsp; IT would continue to support this function with technical knowledge and broad enterprise experience.&nbsp; Here is an over simplified version:</p>
<p><iframe style="width: 478px; height: 558px" src="http://www.gliffy.com/publish/1297211/"></p>
<p>The process person leads the way but, with the support of your IT s</p>
<p>Do you have a lot of these people in your enterprise today that are comfortable on both sides?&#038;nbsp If not time to find them.</p>
</div>
</div>
</div>
</div>
</div>
<p></body></html></iframe></p>
<p>See even I can do swim lanes!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danmcweeney.com/47/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Community Mindspace</title>
		<link>http://blog.danmcweeney.com/46</link>
		<comments>http://blog.danmcweeney.com/46#comments</comments>
		<pubDate>Thu, 04 Oct 2007 18:48:13 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[SAP]]></category>
		<category><![CDATA[SDN blogger]]></category>

		<guid isPermaLink="false">http://blog.danmcweeney.com/46</guid>
		<description><![CDATA[Big thanks to Marilyn Pratt for creating the &#8220;Community Mindspace.&#8221;&#160; Which is a living graphical&#160;representation of the thoughts and spirit of TechEd.&#160;&#160;Nancy Margulies, the artist for the project, has been taking people&#8217;s thoughts and ideas and drawing them onto 2 ~40 foot canvases in the clubhouse.&#160; Here are some really great snippets: &#160;This is such [...]]]></description>
			<content:encoded><![CDATA[<p>Big thanks to <a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/u/1915" target="_blank">Marilyn Pratt</a> for creating the &#8220;Community Mindspace.&#8221;&nbsp; Which is a living graphical&nbsp;representation of the thoughts and spirit of TechEd.&nbsp;&nbsp;<a href="http://www.nancymargulies.com/" target="_blank">Nancy Margulies</a>, the artist for the project, has been taking people&#8217;s thoughts and ideas and drawing them onto 2 ~40 foot canvases in the clubhouse.&nbsp; Here are some really great snippets:</p>
<p><a title="Photo Sharing" href="http://www.zooomr.com/photos/danmcweeney/3430352/"><img height="345" alt="IMG_1667" src="http://static.zooomr.com/images/3430352_a23bdd43e8.jpg" width="461"></a></p>
<p>&nbsp;This is such a great representation of online communities everyone does this &#8212; everyone has multiple personas when they are online, at the same time a noob and expert.</p>
<p><a title="Photo Sharing" href="http://www.zooomr.com/photos/danmcweeney/3430543/"><img height="347" alt="IMG_1683" src="http://static.zooomr.com/images/3430543_54475abeed.jpg" width="463"></a></p>
<p><strong>&#8220;Get your Wiihands on!&#8221;</strong></p>
<p>For more pictures of the Mindspace check out <a href="http://www.flickr.com/photos/marilynpratt/sets/72157602253369856/show/" target="_blank">Marilyn&#8217;s flickr photo stream</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danmcweeney.com/46/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>TechEd US 2007</title>
		<link>http://blog.danmcweeney.com/45</link>
		<comments>http://blog.danmcweeney.com/45#comments</comments>
		<pubDate>Thu, 04 Oct 2007 17:53:56 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[innovation]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[SDN blogger]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://blog.danmcweeney.com/45</guid>
		<description><![CDATA[So far the highlight of TechEd for me has been people&#8217;s reaction to Majority Desk.&#160; I said to&#160;a number of people before the demo that everyone&#8217;s reactions would be the same, &#8220;Oh my god&#8230;&#8221;&#160; The problem is that that reaction would come because of two very different reasons, &#8220;Oh my god&#8230; what is wrong with [...]]]></description>
			<content:encoded><![CDATA[<p>So far the highlight of TechEd for me has been people&#8217;s reaction to <a href="http://www.majoritydesk.com" target="_blank">Majority Desk</a>.&nbsp; I said to&nbsp;a number of people before the demo that everyone&#8217;s reactions would be the same, &#8220;Oh my god&#8230;&#8221;&nbsp; The problem is that that reaction would come because of two very different reasons, &#8220;Oh my god&#8230; what is wrong with you people that has no business value!&#8221; or &#8220;Oh my god&#8230; that is the coolest thing I&#8217;ve seen in a long time.&#8221;&nbsp; </p>
<p>It seems that most people fall in the latter category.&nbsp; I&#8217;ve already spoke to a number SDNers from all different industries who see how they can use this type of interface in a broad range of applications.&nbsp; A airplane manufacturer navigating large engineering drawings to business people visualizing data sets in 3d to see patterns.&nbsp; This was the reaction we were hoping to create in the community a true sense of innovation and possibility.&nbsp; It&#8217;s also been a blast watching people mess around with the interface.</p>
<p>Here are some great photos from hacker night with Mark Finnern and Marilyn Pratt messing around with Majority Desk.</p>
<p><a title="Photo Sharing" href="http://www.zooomr.com/photos/danmcweeney/3430359/"><img height="333" alt="IMG_1673" src="http://static.zooomr.com/images/3430359_904aa39586.jpg" width="445"></a></p>
<p><a title="Photo Sharing" href="http://www.zooomr.com/photos/danmcweeney/3430334/"><img height="500" alt="IMG_1682" src="http://static.zooomr.com/images/3430334_0d806761ed.jpg" width="375"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danmcweeney.com/45/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Majority Desk Sneak Peek</title>
		<link>http://blog.danmcweeney.com/44</link>
		<comments>http://blog.danmcweeney.com/44#comments</comments>
		<pubDate>Wed, 03 Oct 2007 23:28:25 +0000</pubDate>
		<dc:creator>dan</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[innovation]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[SDN blogger]]></category>

		<guid isPermaLink="false">http://blog.danmcweeney.com/44</guid>
		<description><![CDATA[Before the Demo Jam got started we gave James and CotÃ© from RedMonk a sneak peek of our demo called Majority Desk.&#160; Majority Desk is a 3d virtual environment that allows you to interact with Flex based widgets with the help of a pair of Wiimotes.&#160;&#160; CotÃ© talks a bit about Majority Desk but, a [...]]]></description>
			<content:encoded><![CDATA[<p>Before the Demo Jam got started we gave <a href="http://www.redmonk.com/jgovernor/" target="_blank">James</a> and <a href="http://www.redmonk.com/cote/" target="_blank">CotÃ©</a> from <a href="http://www.redmonk.com" target="_blank">RedMonk</a> a sneak peek of our demo called <a href="http://www.majoritydesk.com" target="_blank">Majority Desk</a>.&nbsp; Majority Desk is a 3d virtual environment that allows you to interact with Flex based widgets with the help of a pair of Wiimotes.&nbsp;&nbsp; <a href="http://www.redmonk.com/cote/2007/10/03/majority-desk-wiimote-3d-widget-desktop-totally-sick/" target="_blank">CotÃ© talks a bit about Majority Desk</a> but, a video is worth 1,000 words * 32 * (length of video).</p>
<p> <script src="http://www.podtech.net/player/popup.js" type="text/javascript"></script> <embed src="http://www.podtech.net/player/podtech-player.swf?bc=c90ad26ba7b74e3b80c9fcf4ad1158c0" width="320" height="269" type="application/x-shockwave-flash" allowscriptaccess="always" flashvars="content=http://media1.podtech.net/media/2007/10/PID_012730/Podtech_MajorityDesk_Wiimote_widget_d.flv&amp;totalTime=277000&amp;permalink=http://www.podtech.net/home/4299/majority-desk-wiimote-3d-widget-desktop&amp;breadcrumb=c90ad26ba7b74e3b80c9fcf4ad1158c0"></p>
<p>Big thanks to CotÃ© at Redmonk for getting this video up so quickly!</p>
<p>For those of you at TechEd you can drop by the clubhouse at 5 to &#8220;get your Wiihands on&#8221; MajorityDesk.</p>
<p>Also we will be talking about the architecture and the OSS we used at this evening&#8217;s hacker night.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.danmcweeney.com/44/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

