<?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>Sönke Rohde &#187; Flex</title>
	<atom:link href="http://soenkerohde.com/category/flex/feed/" rel="self" type="application/rss+xml" />
	<link>http://soenkerohde.com</link>
	<description>Flash Platform (Flash, Flex, AIR) thoughts and examples</description>
	<lastBuildDate>Wed, 18 Apr 2012 22:45:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>Detect Spark List Control Scroll To End</title>
		<link>http://soenkerohde.com/2011/02/detect-spark-list-control-scroll-to-end/</link>
		<comments>http://soenkerohde.com/2011/02/detect-spark-list-control-scroll-to-end/#comments</comments>
		<pubDate>Fri, 04 Feb 2011 23:47:59 +0000</pubDate>
		<dc:creator>Sönke</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://soenkerohde.com/?p=1040</guid>
		<description><![CDATA[<p>If you want to implement lazy loading (when the user scrolls to the end of the list it triggers to fetch more items) for a spark List control you have to use a workaround right now.</p>
<p>Usually you would add an event listener on the scrollers verticalScrollBar but due to a bug it does not fire events [...]]]></description>
			<content:encoded><![CDATA[<p>If you want to implement lazy loading (when the user scrolls to the end of the list it triggers to fetch more items) for a spark List control you have to use a workaround right now.</p>
<p>Usually you would add an event listener on the scrollers verticalScrollBar but due to a <a href="http://bugs.adobe.com/jira/browse/SDK-26533">bug</a> it does not fire events if the user scroll with the mouse wheel or uses the arrow buttons. The bug shows a workaround by listening to the PropertyChangeEvent of the scrollers viewport.</p>
<p>Here a little example app:<br />
<script src="https://gist.github.com/812030.js?file=ListScrollToBottomExample.as"></script></p>
<p>The bug has been fixed for Flex 4.5. If there is a better workaround for Flex 4.1 please let me know.</p>
]]></content:encoded>
			<wfw:commentRss>http://soenkerohde.com/2011/02/detect-spark-list-control-scroll-to-end/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Compile-time FXG</title>
		<link>http://soenkerohde.com/2010/12/compile-time-fxg/</link>
		<comments>http://soenkerohde.com/2010/12/compile-time-fxg/#comments</comments>
		<pubDate>Thu, 16 Dec 2010 14:13:50 +0000</pubDate>
		<dc:creator>Sönke</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://soenkerohde.com/?p=991</guid>
		<description><![CDATA[<p>FXG was introduced with Flex 4 and offers a great way to skin and style your application without relying on bitmaps like PNGs.</p>
<p>&#8220;FXG is a declarative XML syntax for defining vector graphics in applications built with Flex.&#8221;</p>
<p>When you declare FXG within your MXML it is computed at runtime but there is also a way to use compile [...]]]></description>
			<content:encoded><![CDATA[<p>FXG was introduced with Flex 4 and offers a great way to skin and style your application without relying on bitmaps like PNGs.</p>
<blockquote><p>&#8220;FXG is a declarative XML syntax for defining vector graphics in applications built with Flex.&#8221;</p></blockquote>
<p>When you declare FXG within your MXML it is computed at runtime but there is also a way to use compile time FXG. There is up to 10x improvement in memory consumption and start-up time when converting complex MXML Graphics (with lots of Paths) into FXG.</p>
<p><a href="http://iamdeepa.com/blog/?p=45">Deepa explains it</a> like this:</p>
<blockquote><p>&#8220;This is an optimization scheme which takes advantage of the fact that a lot of FXG content is simply static assets that do not need to be updatd or re-rendered at runtime. In cases like that, you could imagine that instead of creating ActionScript objects to represent those graphic elements, the Flex compiler could instead create SWF graphic primitive tags to draw the static FXG asset&#8221;</p></blockquote>
<p>So there is some benefit in using compile time FXG and in many cases you can just copy and paste the FXG to an .fxg file with some minor syntactical changes. The downside of compile time FXG is that you have to specify fix dimensions. This means you cannot use percentage values for the width and height.</p>
<p>Let&#8217;s look at an example which uses FXG to define the background of a Group.<br />
Comparison:</p>
<p><strong>Runtime FXG</strong><br />
<script src="https://gist.github.com/742722.js?file=Content.mxml"></script></p>
<p><strong>Compile-time FXG</strong><br />
<script src="https://gist.github.com/742724.js?file=Content2.mxml"></script><br />
<script src="https://gist.github.com/742726.js?file=Background.fxg"></script></p>
<p>You see that you can instantiate the Background.fxg like any other class.<br />
The differences between compile and runtime are fairly simple:</p>
<ul>
<li>Add a Graphic tag</li>
<li>Replace spark namespace with default namespace</li>
<li>Change numeric values 0x to #</li>
<li>Define fix width and height</li>
</ul>
<p>Another difference is that you  have to apply a scale-9-grid for the background in case of rounded corners and filters. This would like like this:</p>
<p><script src="https://gist.github.com/743387.js?file=Background2.fxg"></script></p>
<p>These are still simple examples and it can get way more complex and you will run into limitations. Compile time FXG was developed by <a href="http://blogs.adobe.com/pfarland/">Peter Farland</a> from the Flex side and he gave some inside about the limitations of compile time FXG in combination with scale-9-grid:</p>
<ul>
<li>An item with a scaling grid cannot have child &lt;Group&gt; elements (because ata lower level a scaling grid cannot be applied to a DefineSprite that has a child DefineSprite(s)&#8230; this also means that you can’t use a scaling grid with children that are ultimately DefineSprite based including &lt;RichText&gt;,or a custom Library Definition, and I think if alpha masks, luminosity masks, or pixel-bender based blend modes (such as colordodge, colorburn,exclusion, softlight, hue, saturation, color, luminosity) are applied).</li>
<li>A scaling grid must be a valid rectangle &#8211; i.e. the resulting rect must have a non-zero width and height and the left extent must be to the left of the right extend, and the top extent must be above the bottom extent.</li>
<li>The scaling grid¹s center rectangle must be wholly within the bounds ofthe item(s) being scaled.</li>
<li>Rotated items cannot be scaled with a scaling grid (I think? though notethat restriction doesn’t apply to rotated gradient fills applied to shapesbeing scaled, for instance).</li>
<li>There are several bugs when applying a scaling grid to a collection of child shapes &#8211; adding a transparent Rect underneath that spans the bounds of all of the child shapes can help.</li>
<li>When manually calculating the dimensions of a scaling grid you need to consider the total bounds of the item(s) being scaled. This must take into account the stroke width, miter and joint types. Watch out for fractionalpixels of strokes that apply once an item is scaled.</li>
</ul>
<p><strong>Conclusion</strong><br />
Try to use compile-time FXG when possible. The performance of your application will improve and you have a better separation of design and code which is one step further for the designer/developer workflow.<br />
For further reference check the <a href="http://opensource.adobe.com/wiki/display/flexsdk/FXG+2.0+Specification">FXG 2.0 Specification</a></li>
<p>.</p>
]]></content:encoded>
			<wfw:commentRss>http://soenkerohde.com/2010/12/compile-time-fxg/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>AIR Mobile StageWebView UIComponent</title>
		<link>http://soenkerohde.com/2010/11/air-mobile-stagewebview-uicomponent/</link>
		<comments>http://soenkerohde.com/2010/11/air-mobile-stagewebview-uicomponent/#comments</comments>
		<pubDate>Tue, 09 Nov 2010 16:28:53 +0000</pubDate>
		<dc:creator>Sönke</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://soenkerohde.com/?p=995</guid>
		<description><![CDATA[<p>When you want to use webkit to display HTML in AIR 2.5 mobile projects you want to use StageWebView. Since StageWebView is a subclass of EventDispatcher you cannot add it to the display chain right away. The API works a bit differently and you need to define a Rectangle as the viewPort. However, I thought it [...]]]></description>
			<content:encoded><![CDATA[<p>When you want to use webkit to display HTML in AIR 2.5 mobile projects you want to use <a href="http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/flash/media/StageWebView.html">StageWebView</a>. Since StageWebView is a subclass of EventDispatcher you cannot add it to the display chain right away. The API works a bit differently and you need to define a Rectangle as the viewPort. However, I thought it would be convenient to have a StageWebView UIComponent so that you can add it to the display chain. It is just a wrapper class which exposes the needed APIs like the <em>text</em> and <em>url</em> setter and the methods <em>show</em>, <em>hide</em> and <em>dispose</em>. Further you can listen for all event listeners which just get cloned and re-dispatched.</p>
<p>Example:<br />
<script src="https://gist.github.com/666366.js?file=StageWebViewUIComponentExampleView.mxml"></script></p>
<p>Source:<br />
<script src="https://gist.github.com/666342.js?file=StageWebViewUIComponent.as"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://soenkerohde.com/2010/11/air-mobile-stagewebview-uicomponent/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>How to Skin AIR Mobile ActionBar</title>
		<link>http://soenkerohde.com/2010/11/how-to-skin-air-mobile-actionbar/</link>
		<comments>http://soenkerohde.com/2010/11/how-to-skin-air-mobile-actionbar/#comments</comments>
		<pubDate>Mon, 08 Nov 2010 16:57:36 +0000</pubDate>
		<dc:creator>Sönke</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://soenkerohde.com/?p=1001</guid>
		<description><![CDATA[<p>It took me a bit to figure out how to skin the ActionBar in a mobile AIR application so here a short tutorial. There are also two small bugs when you want to skin the ActionBar but there are decent workarounds for now.</p>
<p>To apply a custom skin to the ActionBar you first have to define a [...]]]></description>
			<content:encoded><![CDATA[<p>It took me a bit to figure out how to skin the <a href="http://opensource.adobe.com/wiki/display/flexsdk/Mobile+ActionBar">ActionBar</a> in a mobile AIR application so here a short tutorial. There are also two small bugs when you want to skin the ActionBar but there are decent workarounds for now.</p>
<p>To apply a custom skin to the ActionBar you first have to define a skin for the MobileApplication itself.</p>
<p><script src="https://gist.github.com/666983.js?file=ActionBarSkinExample.mxml"></script></p>
<p>In the ApplicationSkin.mxml you have to define a ViewNavigator component with the id <em>navigagor</em>:</p>
<p><script src="https://gist.github.com/666996.js?file=ApplicationSkin.mxml"></script></p>
<p>The ViewNavigatorSkin.mxml contains the push and pop transition, the ActionBar component and the content group.<br />
Due to a small bug in the SlideViewTransition.as you have to set the direction to right on creationComplete:</p>
<p><script src="https://gist.github.com/667083.js?file=ViewNavigatorSkin.mxml"></script></p>
<p>Finally we can create the ActionBarSkin. There is another small bug so for now you have to define an empty Group at the 1st position.</p>
<p><script src="https://gist.github.com/667084.js?file=ActionBarSkin.mxml"></script></p>
<p>So right now you have to create 4 different skins to change the dimensions and look of the ActionBar. From an architectural standpoint this looks very clean but having to create 4 skins to just change the height is kind of overkill.<br />
MobileApplication should expose a style to define the dimensions of the ActionBar and should support to set the <em>actionBarSkin</em> right away.</p>
<p>You can <a href="http://soenkerohde.com/downloads/ActionBarSkinExample.fxp">download the example project here</a>. The example uses compile-time FXG for the ActionBar background. More on that in a later post.</p>
]]></content:encoded>
			<wfw:commentRss>http://soenkerohde.com/2010/11/how-to-skin-air-mobile-actionbar/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Updating to AIR 2.0 Barriers</title>
		<link>http://soenkerohde.com/2010/06/updating-to-air-2-0-barriers/</link>
		<comments>http://soenkerohde.com/2010/06/updating-to-air-2-0-barriers/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 17:58:48 +0000</pubDate>
		<dc:creator>Sönke</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://soenkerohde.com/?p=969</guid>
		<description><![CDATA[<p>Now that Adobe 2.0 is released it&#8217;s time to update some older apps to use the new APIs.
The process to update seems kind of complicated and definitely worth a blog post. In my special case I am upgrading from an self signed 1.5.2 app to a self signed 2.0 app.</p>
<p>Since 1.5.3 the publisherID works differently so [...]]]></description>
			<content:encoded><![CDATA[<p>Now that <a href="http://www.adobe.com/products/air/">Adobe 2.0</a> is released it&#8217;s time to update some older apps to use the new APIs.<br />
The process to update seems kind of complicated and definitely worth a blog post. In my special case I am upgrading from an self signed 1.5.2 app to a self signed 2.0 app.</p>
<p>Since <a href="http://www.adobe.com/support/documentation/en/air/1_5_3/releasenotes_developers.html">1.5.3 the publisherID works differently</a> so you have to add the publisherID to the XML descriptor like also <a href="http://gregsramblings.com/2010/06/18/adobe-air-common-auto-upgrade-issues-when-upgrading-your-app-to-air-2-0/#comment-3280">described here</a>. If you are not using EncryptedLocalStore you might be fine by now but otherwise you get this error when you debug the application: <strong>EncryptedLocalStore may not use publisher IDs passed in from ADL</strong></p>
<p>A <a href="http://ebrentnelson.blogspot.com/2009/07/encryptedlocalstore-may-not-use.html">quick search</a> lead me to add the publisherID to the debug configuration but then you get the error that the publisherID can&#8217;t be passed anymore by ADL since 1.5.3, damn.</p>
<p>More research brought me to this <a href="http://groups.google.com/group/air-tight/browse_thread/thread/3c6b425ad17eb4f1/b6a222f8467518b9?show_docid=b6a222f8467518b9">forum thread</a>. So it looks like this bug is in the AIR 2.0 final so the only solution is to remove the publisherID from the descriptor while debugging the application. Before packaging the app you then have to add it to not break the update for your users who still have the older version of your app.</p>
<p>Ok, I removed the publisherID and finally could run my app with AIR 2.0, not! My next runtime exception is <strong>TypeError: Error #1034: Type Coercion failed: cannot convert flashx.textLayout.formats::TextLayoutFormat@184eb041 to flashx.textLayout.formats.TextLayoutFormatValueHolder</strong>.</p>
<p>Solution is to change TextLayoutFormat to TextLayoutFormatValueHolder like here:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> cfg : Configuration = TextFlow.<span style="color: #006600;">defaultConfiguration</span>;
<span style="color: #000000; font-weight: bold;">var</span> normalTLF : TextLayoutFormat = <span style="color: #000000; font-weight: bold;">new</span> TextLayoutFormat<span style="color: #66cc66;">&#40;</span> cfg.<span style="color: #006600;">defaultLinkNormalFormat</span> <span style="color: #66cc66;">&#41;</span>;
cfg.<span style="color: #006600;">defaultLinkNormalFormat</span> = normalTLF;</pre></div></div>

<p>to</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> normalTLF : TextLayoutFormatValueHolder = <span style="color: #000000; font-weight: bold;">new</span> TextLayoutFormatValueHolder<span style="color: #66cc66;">&#40;</span> cfg.<span style="color: #006600;">defaultLinkNormalFormat</span> <span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>Now I can finally run the app with AIR 2.0 without any runtime exceptions or other errors, uhh!<br />
The TextArea default height seems to have changed though but that&#8217;s for another time.</p>
]]></content:encoded>
			<wfw:commentRss>http://soenkerohde.com/2010/06/updating-to-air-2-0-barriers/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Swiz Yahoo Finance Metadata Processor</title>
		<link>http://soenkerohde.com/2010/03/swiz-yahoo-finance-metadata-processor/</link>
		<comments>http://soenkerohde.com/2010/03/swiz-yahoo-finance-metadata-processor/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 19:38:19 +0000</pubDate>
		<dc:creator>Sönke</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Swiz]]></category>

		<guid isPermaLink="false">http://soenkerohde.com/?p=957</guid>
		<description><![CDATA[<p>Swiz 1.0 alpha introduced a very cool new feature which lets you extend Swiz be creating custom metadata processors.
This means that if you want to add a metadata like [MyCustomMetadata] you can now do so and Swiz offers you a very easy way to implement it.
For the Swiz 360 Flex demo app I have build a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://swizframework.org">Swiz</a> 1.0 alpha introduced a very cool new feature which lets you extend Swiz be creating custom metadata processors.<br />
This means that if you want to add a metadata like [MyCustomMetadata] you can now do so and Swiz offers you a very easy way to implement it.<br />
For the <a href="http://github.com/srohde/Swiz1Example">Swiz 360 Flex demo app</a> I have build a proof of concept YahooFinance metadata processor. The idea was to have something like this:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #66cc66;">&#91;</span>YahooFinance<span style="color: #66cc66;">&#40;</span>tickerSymbol=<span style="color: #ff0000;">&quot;ADBE&quot;</span>, days=<span style="color: #ff0000;">&quot;60&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> adobeStocks:IList;</pre></div></div>

<p>When you annotate the list variable with that metadata the YahooFinanceProcessor gets notified to process it and for the case above fetches the Adobe stock data for the last 60 days. The result is a list of objects which contain a date and a price. You can then bind this list to a chart é voilá, your chart shows live fetched data without writing any code (ok, except declaring the variable).</p>
<p>Here the full source of the view component:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #66cc66;">&lt;</span>?<span style="color: #0066CC;">xml</span> <span style="color: #0066CC;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> encoding=<span style="color: #ff0000;">&quot;utf-8&quot;</span>?<span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&lt;</span>s:Group xmlns:fx=<span style="color: #ff0000;">&quot;http://ns.adobe.com/mxml/2009&quot;</span> 
		 xmlns:s=<span style="color: #ff0000;">&quot;library://ns.adobe.com/flex/spark&quot;</span> 
		 xmlns:mx=<span style="color: #ff0000;">&quot;library://ns.adobe.com/flex/mx&quot;</span><span style="color: #66cc66;">&gt;</span>
&nbsp;
	<span style="color: #66cc66;">&lt;</span>fx:Script<span style="color: #66cc66;">&gt;</span>
		<span style="color: #66cc66;">&lt;!</span><span style="color: #66cc66;">&#91;</span>CDATA<span style="color: #66cc66;">&#91;</span>
			<span style="color: #0066CC;">import</span> mx.<span style="color: #006600;">collections</span>.<span style="color: #006600;">IList</span>;
&nbsp;
			<span style="color: #66cc66;">&#91;</span>Bindable<span style="color: #66cc66;">&#93;</span>
			<span style="color: #66cc66;">&#91;</span>YahooFinance<span style="color: #66cc66;">&#40;</span>tickerSymbol=<span style="color: #ff0000;">&quot;ADBE&quot;</span>, days=<span style="color: #ff0000;">&quot;60&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
			<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> adobeStocks:IList;
&nbsp;
			<span style="color: #66cc66;">&#91;</span>Bindable<span style="color: #66cc66;">&#93;</span>
			<span style="color: #66cc66;">&#91;</span>YahooFinance<span style="color: #66cc66;">&#40;</span>tickerSymbol=<span style="color: #ff0000;">&quot;MSFT&quot;</span>, days=<span style="color: #ff0000;">&quot;60&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
			<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> microsoftStocks:IList;
		<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;/</span>fx:Script<span style="color: #66cc66;">&gt;</span>
&nbsp;
	<span style="color: #66cc66;">&lt;</span>s:layout<span style="color: #66cc66;">&gt;</span>
		<span style="color: #66cc66;">&lt;</span>s:VerticalLayout<span style="color: #66cc66;">/&gt;</span>
	<span style="color: #66cc66;">&lt;/</span>s:layout<span style="color: #66cc66;">&gt;</span>
&nbsp;
	<span style="color: #66cc66;">&lt;</span>s:Label <span style="color: #0066CC;">text</span>=<span style="color: #ff0000;">&quot;Stock Prices last 60 days&quot;</span> <span style="color: #66cc66;">/&gt;</span>
	<span style="color: #66cc66;">&lt;</span>mx:LineChart id=<span style="color: #ff0000;">&quot;chart&quot;</span> <span style="color: #0066CC;">width</span>=<span style="color: #ff0000;">&quot;100%&quot;</span> <span style="color: #0066CC;">height</span>=<span style="color: #ff0000;">&quot;100%&quot;</span> showDataTips=<span style="color: #ff0000;">&quot;true&quot;</span> dataProvider=<span style="color: #ff0000;">&quot;{adobeStocks}&quot;</span><span style="color: #66cc66;">&gt;</span>
		<span style="color: #66cc66;">&lt;</span>mx:horizontalAxis<span style="color: #66cc66;">&gt;</span>
			<span style="color: #66cc66;">&lt;</span>mx:CategoryAxis categoryField=<span style="color: #ff0000;">&quot;date&quot;</span> title=<span style="color: #ff0000;">&quot;Time&quot;</span> <span style="color: #66cc66;">/&gt;</span>
		<span style="color: #66cc66;">&lt;/</span>mx:horizontalAxis<span style="color: #66cc66;">&gt;</span>
		<span style="color: #66cc66;">&lt;</span>mx:verticalAxis<span style="color: #66cc66;">&gt;</span>
			<span style="color: #66cc66;">&lt;</span>mx:LinearAxis title=<span style="color: #ff0000;">&quot;Price&quot;</span> baseAtZero=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #66cc66;">/&gt;</span>
		<span style="color: #66cc66;">&lt;/</span>mx:verticalAxis<span style="color: #66cc66;">&gt;</span>
&nbsp;
		<span style="color: #66cc66;">&lt;</span>mx:series<span style="color: #66cc66;">&gt;</span>
			<span style="color: #66cc66;">&lt;</span>mx:LineSeries dataProvider=<span style="color: #ff0000;">&quot;{microsoftStocks}&quot;</span> displayName=<span style="color: #ff0000;">&quot;Microsoft&quot;</span> xField=<span style="color: #ff0000;">&quot;date&quot;</span> yField=<span style="color: #ff0000;">&quot;price&quot;</span> <span style="color: #66cc66;">/&gt;</span>
			<span style="color: #66cc66;">&lt;</span>mx:LineSeries dataProvider=<span style="color: #ff0000;">&quot;{adobeStocks}&quot;</span> displayName=<span style="color: #ff0000;">&quot;Adobe&quot;</span> xField=<span style="color: #ff0000;">&quot;date&quot;</span> yField=<span style="color: #ff0000;">&quot;price&quot;</span> <span style="color: #66cc66;">/&gt;</span>
		<span style="color: #66cc66;">&lt;/</span>mx:series<span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;/</span>mx:LineChart<span style="color: #66cc66;">&gt;</span>
	<span style="color: #66cc66;">&lt;</span>mx:Legend dataProvider=<span style="color: #ff0000;">&quot;{chart}&quot;</span> <span style="color: #66cc66;">/&gt;</span>
&nbsp;
<span style="color: #66cc66;">&lt;/</span>s:Group<span style="color: #66cc66;">&gt;</span></pre></div></div>

<p>The result looks like this:<br />
<img src="/img/yahoochart.png" /></p>
<p>When you have a look at the <a href="http://github.com/srohde/Swiz1Example/blob/master/src/com/soenkerohde/example/processor/YahooFinanceProcessor.as">source of the YahooFinaceProcessor</a> you see how easy it is to build.</p>
<p>The example also shows how to use the <a href="http://code.google.com/p/foomonger-swizframework/">MediateSignalProcessor</a> build by <a href="http://blog.foomonger.com">Sam Ahn</a>.<br />
There are also a bunch of other custom metadata processors on the way like the <a href="http://blog.foomonger.com/2010/03/10/swiz-resourcemanager-and-resource/">ResourceProcessor</a> also by Sam.<br />
Note that I had to add -keep-as3-metadata+=YahooFinance which you have to do for any new metadata you introduce.</p>
]]></content:encoded>
			<wfw:commentRss>http://soenkerohde.com/2010/03/swiz-yahoo-finance-metadata-processor/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Running Project Sprouts</title>
		<link>http://soenkerohde.com/2010/03/running-project-sprouts/</link>
		<comments>http://soenkerohde.com/2010/03/running-project-sprouts/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 02:12:16 +0000</pubDate>
		<dc:creator>Sönke</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://soenkerohde.com/?p=907</guid>
		<description><![CDATA[<p>A few weeks ago I attended the SanFlashCisco usergroup meeting which was really great. After the meeting we moved to the Mars bar where I got to know Luke Bayes who founded Project Sprouts. Project Sprouts is a Ruby based open-source, cross-platform project generation and configuration tool for ActionScript 2, ActionScript 3, Adobe AIR and Flex [...]]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago I attended the <a href="http://sanflashcisco.com/">SanFlashCisco</a> usergroup meeting which was really great. After the meeting we moved to the Mars bar where I got to know <a href="http://www.lukebayes.com/">Luke Bayes</a> who founded <a href="http://projectsprouts.org/">Project Sprouts</a>. Project Sprouts is a Ruby based open-source, cross-platform project generation and configuration tool for ActionScript 2, ActionScript 3, Adobe AIR and Flex projects. Also be sure to check the the <a href="http://github.com/lukebayes/project-sprouts">GitHub repository</a>.</p>
<p>The following works on a Mac with <a href="http://www.ruby-lang.org/en/downloads/">Ruby</a> and <a href="http://rubyforge.org/frs/?group_id=126">RubyGems</a> installed but should be similar under Windows. Open the Terminal, switch to your working directory where you want to create your new project and:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># installs project sprouts</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> gem <span style="color: #c20cb9; font-weight: bold;">install</span> sprout
<span style="color: #666666; font-style: italic;"># creates a new Flex 4 project named SproutsExample</span>
sprout <span style="color: #660033;">-n</span> flex4 SproutsExample
<span style="color: #666666; font-style: italic;"># switch directory</span>
<span style="color: #7a0874; font-weight: bold;">cd</span> SproutsExample
<span style="color: #666666; font-style: italic;"># build the project</span>
rake</pre></div></div>

<p>Now you see all dependencies like SDK and Flash Player being downloaded. So you can run this on a machine without Flex SDK and Flash Player installed because Sprouts handles all dependencies. However, I got this error:</p>
<pre>/Library/Ruby/Gems/1.8/gems/sprout-flashplayer-bundle-10.22.7/lib/clix_wrapper.rb:20:  (RuntimeError)
[ERROR] You must install the rb-appscript gem to use the desktop debug Flash Player, you do this by running: sudo gem install rb-appscript</pre>
<p>As being told I tried to run: <em>sudo gem install rb-appscript</em> which ended up in this error:</p>
<pre>ERROR:  Error installing rb-appscript:
ERROR: Failed to build gem native extension.
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb
mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ruby.h</pre>
<p>After a little web search I <a href="http://www.ruby-forum.com/topic/191688">found out</a> that I need to install the latest <a href="http://developer.apple.com/tools/xcode/">XCode</a> since I am on Snow Leopard.</p>
<p>Having XCode installed I tried again <em>sudo gem install rb-appscript</em> and it works!</p>
<p>So another try with <em>rake</em> and horray, the project gets compiled and the standalone flash player comes up showing the compiled default project!</p>
<p>So far so good. Now let&#8217;s try to create a class and a unit test for it.<br />
Due to a little bug in the flex 4 gem edit scripts/generate and replace</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"> <span style="color:#9966CC; font-weight:bold;">begin</span>
      <span style="color:#6666ff; font-weight:bold;">Sprout::Sprout</span>.<span style="color:#9900CC;">generate</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'flex4'</span>, ARGV.<span style="color:#9900CC;">shift</span>, ARGV, <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">__FILE__</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">rescue</span> <span style="color:#6666ff; font-weight:bold;">RubiGen::GeneratorError</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; e
      <span style="color:#6666ff; font-weight:bold;">Sprout::Sprout</span>.<span style="color:#9900CC;">generate</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'as3'</span>, ARGV.<span style="color:#9900CC;">shift</span>, ARGV, <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">__FILE__</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>with</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#6666ff; font-weight:bold;">Sprout::Sprout</span>.<span style="color:#9900CC;">generate</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'as3'</span>, ARGV.<span style="color:#9900CC;">shift</span>, ARGV, <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">__FILE__</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>btw: when the fix for this is in place update with</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> gem update sprout-flex4-bundle</pre></div></div>

<p>So, now you are ready to create a class including test classes:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># creates the class com.soenkerohde.util.MathUtil and test classes</span>
script<span style="color: #000000; font-weight: bold;">/</span>generate com.soenkerohde.util.MathUtil</pre></div></div>

<p>You see the output</p>
<pre>create  src/com/soenkerohde/util
create  src/com/soenkerohde/util/MathUtil.as
create  test/com/soenkerohde/util
create  test/com/soenkerohde/util/MathUtilTest.as
force  test/AllTests.as
</pre>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Run the tests</span>
rake <span style="color: #7a0874; font-weight: bold;">test</span></pre></div></div>

<p>Now you see your tests compiling and they fail for now to remind you that you haven&#8217;t implemented the actual test code yet.</p>
<p>Pretty impressed by Sprouts so far but enough for now. In my next post I will try to go a little bit deeper and check what else Sprouts can do for me to not waste time on what can be automated.</p>
]]></content:encoded>
			<wfw:commentRss>http://soenkerohde.com/2010/03/running-project-sprouts/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Powerful Cancelable Events</title>
		<link>http://soenkerohde.com/2010/01/powerful-cancelable-events/</link>
		<comments>http://soenkerohde.com/2010/01/powerful-cancelable-events/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 19:04:38 +0000</pubDate>
		<dc:creator>Sönke</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://soenkerohde.com/?p=873</guid>
		<description><![CDATA[<p>When you dispatch events I bet that most Flash/Flex devs don&#8217;t take advantage of the fact that dispatchEvent returns a Boolean value indicating wether or not the event has been canceled. Normally your code looks similar to this:</p>

var event:MyEvent = new MyEvent&#40;MyEvent.FOO&#41;;
dispatchEvent&#40;event&#41;

<p>If you want to let something only happen if the event wasn&#8217;t canceled it should [...]]]></description>
			<content:encoded><![CDATA[<p>When you dispatch events I bet that most Flash/Flex devs don&#8217;t take advantage of the fact that dispatchEvent returns a Boolean value indicating wether or not the event has been canceled. Normally your code looks similar to this:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> event:MyEvent = <span style="color: #000000; font-weight: bold;">new</span> MyEvent<span style="color: #66cc66;">&#40;</span>MyEvent.<span style="color: #006600;">FOO</span><span style="color: #66cc66;">&#41;</span>;
dispatchEvent<span style="color: #66cc66;">&#40;</span>event<span style="color: #66cc66;">&#41;</span></pre></div></div>

<p>If you want to let something only happen if the event wasn&#8217;t canceled it should look like this:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">// The second &quot;true&quot; sets the event cancelable, first one sets bubbles</span>
<span style="color: #000000; font-weight: bold;">var</span> event:MyEvent = <span style="color: #000000; font-weight: bold;">new</span> MyEvent<span style="color: #66cc66;">&#40;</span>MyEvent.<span style="color: #006600;">FOO</span>, <span style="color: #000000; font-weight: bold;">true</span>, <span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>dispatchEvent<span style="color: #66cc66;">&#40;</span>event<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
   <span style="color: #808080; font-style: italic;">// do the actual task</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>With the code above the event listener can control if the actual task gets executed or not:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">dispatchingInstance.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>MyEvent.<span style="color: #006600;">FOO</span>, fooHandler<span style="color: #66cc66;">&#41;</span>;
<span style="color: #000000; font-weight: bold;">function</span> fooHandler<span style="color: #66cc66;">&#40;</span>event:MyEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><span style="color: #66cc66;">&#123;</span>
   <span style="color: #808080; font-style: italic;">// depending on what you want to achieve you can cancel the event by calling preventDefault</span>
   event.<span style="color: #006600;">preventDefault</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
   <span style="color: #808080; font-style: italic;">// this will cause dispatchEvent to return false so the actual task doesn't get executed</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>A real life usecase for UI related events could be dispatching an event before closing a popup window:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> closeButtonHandler<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span><span style="color: #66cc66;">&#123;</span>
   <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>dispatchEvent<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> MyWindowEvent<span style="color: #66cc66;">&#40;</span>MyWindowEvent.<span style="color: #0066CC;">CLOSE</span>, <span style="color: #000000; font-weight: bold;">true</span>, <span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
      PopUpManager.<span style="color: #006600;">closePopup</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span><span style="color: #66cc66;">&#41;</span>;
   <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Cancelable events are also very interesting when you develop APIs because it offers powerful and easy to use hooks for the API user.<br />
I am making heavy use of cancelable events in my <a href="http://github.com/srohde/swizdesktop">swizdesktop lib</a>. Catching the different update phase events you get hooks to stop the update process by calling preventDefault on the listened event.</p>
]]></content:encoded>
			<wfw:commentRss>http://soenkerohde.com/2010/01/powerful-cancelable-events/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flex 4 main class interface errors</title>
		<link>http://soenkerohde.com/2010/01/flex-4-main-class-interface-errors/</link>
		<comments>http://soenkerohde.com/2010/01/flex-4-main-class-interface-errors/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 16:02:24 +0000</pubDate>
		<dc:creator>Sönke</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://soenkerohde.com/?p=865</guid>
		<description><![CDATA[<p>I ended up a few times with these kind of errors while migrating to newer Flex 4 builds:</p>
<p>Description	Resource	Path	Location	Type
1044: Interface method invalidateParentSizeAndDisplayList in namespace mx.managers:ISystemManager not implemented by class _Main_mx_managers_SystemManager.	example-project		line 23	Flex Problem</p>
<p>Description	Resource	Path	Location	Type
1144: Interface method callInContext in namespace mx.core:IFlexModuleFactory is implemented with an incompatible signature in class _Main_mx_managers_SystemManager.	example-project		line 23	Flex Problem</p>
<p>The location/resource for these errors is the main MXML itself [...]]]></description>
			<content:encoded><![CDATA[<p>I ended up a few times with these kind of errors while migrating to newer Flex 4 builds:</p>
<p>Description	Resource	Path	Location	Type<br />
1044: Interface method invalidateParentSizeAndDisplayList in namespace mx.managers:ISystemManager not implemented by class _Main_mx_managers_SystemManager.	example-project		line 23	Flex Problem</p>
<p>Description	Resource	Path	Location	Type<br />
1144: Interface method callInContext in namespace mx.core:IFlexModuleFactory is implemented with an incompatible signature in class _Main_mx_managers_SystemManager.	example-project		line 23	Flex Problem</p>
<p>The location/resource for these errors is the main MXML itself but that&#8217;s all you get. So you ask yourself what went wrong? A quick Google search does not help (until I blogged this hopefully) so where to start?</p>
<p>The problem is that you are mixing different SDK versions. In my case my project linked to a library which was compiled with a different SDK version and now the important thing: the framework linkage in the library was set to &#8220;<strong>Merge into code</strong>&#8220;. Change it to &#8220;<strong>Use default (external)</strong>&#8221; and you are fine.</p>
<div class="thumbnail"><a href="http://skitch.com/soenkerohde/nxp6x/properties-for-actionscript3-v3-api"><img src="http://img.skitch.com/20100114-nk7djfhhfbgnaawpp1n7ap3cqw.preview.jpg" alt="Properties for actionscript3_v3_api" /></a><br />
<span style="font-family: Lucida Grande, Trebuchet, sans-serif, Helvetica, Arial; font-size: 10px; color: #808080;">Uploaded with <a href="http://plasq.com/">plasq</a>&#8216;s <a href="http://skitch.com">Skitch</a>!</span></div>
<div class="thumbnail"><span style="font-family: Lucida Grande, Trebuchet, sans-serif, Helvetica, Arial; font-size: 10px; color: #808080;"><br />
</span></div>
]]></content:encoded>
			<wfw:commentRss>http://soenkerohde.com/2010/01/flex-4-main-class-interface-errors/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Migrate Flex 4 Beta 2 to Latest Nightly Builds</title>
		<link>http://soenkerohde.com/2010/01/migrate-flex-4-beta-2-to-latest-nightly-builds/</link>
		<comments>http://soenkerohde.com/2010/01/migrate-flex-4-beta-2-to-latest-nightly-builds/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 14:00:52 +0000</pubDate>
		<dc:creator>Sönke</dc:creator>
				<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://soenkerohde.com/?p=856</guid>
		<description><![CDATA[<p>I have a project based on Flex 4 Beta 2 and now I wanted to migrate to the latest nightly build since there were many important fixes.
Things have changed so here what I did to get my project up and running again:</p>
<p>Halo is now mx</p>
<p>The namespace for halo (Flex 3) components changed from xmlns:mx=&#8221;library://ns.adobe.com/flex/halo&#8221; to xmlns:mx=&#8221;library://ns.adobe.com/flex/mx&#8221;. Just [...]]]></description>
			<content:encoded><![CDATA[<p>I have a project based on Flex 4 Beta 2 and now I wanted to migrate to the <a href="http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+4">latest nightly build</a> since there were many important fixes.<br />
Things have changed so here what I did to get my project up and running again:</p>
<p><strong>Halo is now mx</strong></p>
<p>The namespace for halo (Flex 3) components changed from <em>xmlns:mx=&#8221;library://ns.adobe.com/flex/halo&#8221;</em> to <em>xmlns:mx=&#8221;library://ns.adobe.com/flex/mx&#8221;</em>. Just do a quick search and replace and this one is solved. Also do not forget to update you CSS file namespace to <em>@namespace mx &#8220;library://ns.adobe.com/flex/mx&#8221;;</em></p>
<p><strong>Flex 3 compatibility mode is gone</strong></p>
<p>My project originally was based on Flex 3 so I used the Flex 3 compatibility option in Flex 4 Beta 2. This does not seem supported anymore and you get lots of dependency errors for halo/mx components that they require at least 4.0.0. So disable the Flex 3 mode and select the halo theme to be still compatible with Flex 3 aka halo components.</p>
<p><strong>Ant</strong></p>
<p>I build my AIR project with Ant so I had to define to use the halo theme:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;compiler.theme</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;${flex.sdk.dir}/frameworks/themes/Halo/&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;include</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;halo.swc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/compiler.theme<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>In my case I switched to build 4.0.0.13323 and it looks pretty cool. The compiler seems faster and my app in general performed well. There is now also a Spark ToggleButton but a few things are still missing like IconButton, SparkAlert and so on. Anyway, I use Flex 4 for production already and feel pretty solid about it. The workflow is way better than with Flex 3 because of the new state syntax, better skinning, FXG, light weight groups etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://soenkerohde.com/2010/01/migrate-flex-4-beta-2-to-latest-nightly-builds/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

