<?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>Lab49 Blog &#187; Adobe Flex</title>
	<atom:link href="http://blog.lab49.com/archives/category/advanced-visualization/flex-advanced-visualization-2/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.lab49.com</link>
	<description>Technology and industry insights from Lab49.</description>
	<lastBuildDate>Wed, 08 Feb 2012 09:02:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>UI mediation sucks. Mediate behaviours, not views.</title>
		<link>http://justinjmoses.wordpress.com/2011/08/07/ui-mediation-sucks-mediate-behaviours-not-views/</link>
		<comments>http://justinjmoses.wordpress.com/2011/08/07/ui-mediation-sucks-mediate-behaviours-not-views/#comments</comments>
		<pubDate>Sun, 07 Aug 2011 16:05:39 +0000</pubDate>
		<dc:creator>Justin Moses</dc:creator>
				<category><![CDATA[Adobe Flex]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Lab49]]></category>

		<guid isPermaLink="false">http://justinjmoses.wordpress.com/?p=415</guid>
		<description><![CDATA[Code for this post can be found on Github. In this post, we’re going to look at how the variance utility for Robotlegs allows mediation against interfaces rather than concrete classes. Apart from the gains in decoupling, we can mediate purely against behaviours, rather than specific implementation. And, as we’re talking interfaces, a UI component [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=justinjmoses.wordpress.com&#38;blog=2539888&#38;post=415&#38;subd=justinjmoses&#38;ref=&#38;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="background-color:#eee;border:1px dashed #AAA;padding:.5em;">Code for this post can be found on <a title="Github" href="https://github.com/justinjmoses/mediate-behaviours-example" >Github</a>.</p>
<p>In this post, we’re going to look at how the variance utility for Robotlegs allows mediation against interfaces rather than concrete classes. Apart from the gains in decoupling, we can mediate purely against behaviours, rather than specific implementation. And, as we’re talking interfaces, a UI component can implement as many interfaces (behaviours) as it likes!</p>
<ul>
<li>Shout out to <a href="http://twitter.com/guyinthechair">Paul Taylor</a> for the <a href="http://guyinthechair.com/2011/07/design-by-contract-in-robotlegs-1-4/">inspiration of this post</a>.</li>
</ul>
<p>Libraries used in this post:</p>
<ul>
<li><a href="https://github.com/robotlegs/robotlegs-framework/">Robotlegs v1.5.2</a></li>
<li><a href="https://github.com/dnalot/robotlegs-utilities-variance">Robotlegs Variance Utility v1.1</a></li>
<li><a href="https://github.com/robertpenner/as3-signals">As3-Signals v0.9-BETA</a></li>
</ul>
<p style="font-size:larger;font-weight:bold;"><strong>Why use mediation at all?</strong></p>
<p>Mediation is a design pattern that performs the job of managing communication between parts to decouple logic. In terms of modern MVC frameworks, mediators are typically employed to monitor UI pieces from the outside in, so that the UI has no references to the framework whatsoever. The common alternative is the Presentation Model pattern (PM) that typically involves injecting in one or more presentation models to the UI component. As such, the UI component is thus coupled to the particular PMs it uses. That said, when mediating against classes (rather than interfaces, which we’ll get to), we couple the mediator to the UI, which is suboptimal.</p>
<p style="font-size:larger;font-weight:bold;"><strong>Why Robotlegs?</strong></p>
<p>Robotlegs (RL) is a lightweight (50KB) and prescriptive library for MVCS applications. Out of the box it provides us with Mediation, IOC container and Dependency Injection via the familiar [Inject] metadata (thanks to SwiftSuspenders).</p>
<p style="font-size:larger;font-weight:bold;"><strong>Regular (invariant) mediation</strong></p>
<p>Take some UI component: (<strong>SomeComponent.mxml</strong>)</p>
<p>
<pre class="brush: as3;">
&lt;s:VGroup&gt;
    &lt;fx:Script&gt;
        //the mediator will tell me when something happens
        public function asyncReturned():void
        {
            //something happened!
        }

        private function onClick(evt:MouseEvent):void
        {
            //tell whoever's listening to do something
            dispatchEvent(new ControlEvent(ControlEvent.START));
        }
    &lt;/fx:Script&gt;

    &lt;s:Button label=&quot;Start&quot; click=&quot;onClick(event)&quot; /&gt;
&lt;/s:VGroup&gt;
</pre>
</p>
<p>A mediator for this component might look like (<strong>SomeComponentMediator.as</strong>):</p>
<p>
<pre class="brush: as3;">
public class SomeComponentMediator extends Mediator
{
    [Inject]
    public var view:SomeComponent;

    [Inject]
    public var service:ISomeService;

    private var viewHandler:Function;
    private var serviceHandler:Function;

    //called when UI component is added to stage and mediator assigned
    override public function onRegister():void
    {
        //handle control events responding
        viewHandler = function(evt:ControlEvent):void
        {
            serviceHandler = function(evt:ServiceEvent):void
            {
                //some where later on tell the view it is done...
                view.asyncReturned();
            }
            service.addEventListener(ServiceEvent.COMPLETE, serviceHandler);

            service.doSomething();
        }

        //attach the listener
        view.addEventListener(ControlEvent.DO_ASYNC, viewHandler);
    }

    //called when UI component is removed from stage, prior to mediator being destroyed
    override public function onRemove():void
    {
       service.removeEventListener(ServiceEvent.COMPLETE, serviceHandler);
       view.removeEventListener(ControlEvent.DO_ASYNC, viewHandler);
    }
}
</pre>
</p>
<p>Via the ADDED_TO_STAGE event, Robotlegs wires up an instance of a mediator for each UI component it finds. All that it requires is that you map in the mediator:</p>
<p>
<pre class="brush: as3;">
IMediatorMap.mapMediator(SomeComponent, SomeComponentMediator);
</pre>
</p>
<blockquote style="background-color:#eee;border:1px dashed #AAAAAA;padding:1em;"><p>Don’t like extending base classes or want your own implementation of mediation? No problems just implement IMediator instead.</p>
</blockquote>
<p style="font-size:larger;font-weight:bold;"><strong>So why covariance?</strong></p>
<p>Because there are some problems here with mediating directly to views:</p>
<ul>
<li>A UI component can only have one mediator;</li>
<li>The mediator is tightly coupled to the UI control.</li>
</ul>
<p>So, what if we wanted to map to an interface instead? We could include the Robotlegs Variance Utility (as a library to our project), and tweak our mediator mapping call to:</p>
<p>
<pre class="brush: as3;">
IVariantMediatorMap.mapMediator(ISomeComponent, SomeComponentMediator);
</pre>
</p>
<p>The above example becomes:</p>
<p>
<pre class="brush: as3;">
&lt;s:VGroup implements=&quot;ISomeBehaviour&quot;&gt;
	&lt;fx:Script&gt;
		//the mediator will tell me when async returns
		public function asyncReturned():void
		{
			//something happened!
		}

		private function onClick(evt:MouseEvent):void
		{
		     //tell whoever's listening to do something
		     dispatchEvent(new ControlEvent(ControlEvent.START));
		}
        &lt;/fx:Script&gt;

    &lt;s:Button label=&quot;Start&quot; click=&quot;onClick(event)&quot; /&gt;
&lt;/s:VGroup&gt;
</pre>
</p>
<p>Using this interface:</p>
<p>
<pre class="brush: as3;">
[Event(name=&quot;startAsync&quot;,type=&quot;ControlEvent&quot;)]
public interface ISomeBehaviour
{
	function asyncReturned();
}
</pre>
</p>
<p>And the mediator becomes:</p>
<p>
<pre class="brush: as3;">
public class SomeComponentMediator extends Mediator
{
    [Inject]
    public var view:ISomeBehaviour;

    //... (as before)

}
</pre>
</p>
<p>And voila &#8211; we’ve solved both problems in one fell swoop! A UI control can implement as many interfaces as it needs, and our mediates now mediate against a behaviour rather than a concrete UI piece.</p>
<p style="font-size:larger;font-weight:bold;"><strong>So now what?</strong></p>
<p>There’s still room for improvement. Flash has no way to enforce that the class &#8211; SomeComponent &#8211; will actually dispatch the ControlEvent. If we’re writing these interfaces &#8211; these behaviours &#8211; we want a contract that explicitly states which events should be fired. Better yet, we’d like the option to state if these events are a functional level or a type level.</p>
<p style="font-size:larger;font-weight:bold;"><strong>Enter Signals, stage right</strong></p>
<p>Signals provide an alternative to events. They are designed to be used within APIs and class libraries, rather than replacing events altogether (Flash events are well suited to UI hierarchies). Where events fire and are handled at a type (class) level, signals live at the variable level. Not only can we pass them to and return them from methods, we can also enforce their presence in types that implement our interfaces. Check out an earlier post on <a href="http://justinjmoses.wordpress.com/2011/07/07/whats-the-deal-with-signals/">Signals</a>.</p>
<p>By including the lightweight Signals SWC, we have access to the ISignal contract and some common implementations.</p>
<p>Our interface from before now becomes:</p>
<p>
<pre class="brush: as3;">
public interface ISomeBehaviour
{
    function asyncReturned();

    function get start():ISignal;
}
</pre>
</p>
<p>Our view becomes:</p>
<p>
<pre class="brush: as3;">
&lt;s:VGroup implements=&quot;ISomeBehaviour&quot;&gt;
    &lt;fx:Declarations&gt;
        &lt;signals:Signal id=&quot;startSignal&quot; /&gt;
    &lt;/fx:Declarations&gt;

    &lt;fx:Script&gt;
        //the mediator will tell me when something happens
        public function asyncReturned():void
        {
            //something happened!
        }

        //provide access to the type-level signal
        public function get start():ISignal
        {
            return startSignal;
        }
    &lt;/fx:Script&gt;

    &lt;!-- Here we actually send the message to the mediator --&gt;
    &lt;s:Button label=&quot;Start&quot; click=&quot;start.dispatch()&quot; /&gt;
&lt;/s:VGroup&gt;
</pre>
</p>
<p>We actually now have a property <em>start</em>, exposed from the view that implements the interface, that we can attach and remove handlers to in our mediator.</p>
<p>And so our mediator finally becomes:</p>
<p>
<pre class="brush: as3;">
public class SomeComponentMediator extends Mediator
{
    [Inject]
    public var view:ISomeComponent;

    [Inject]
    public var service:ISomeService;

    private var serviceSignal:ISignal;

    override public function onRegister():void
    {
        //handle control events responding
        view.start.add(function():void
        {
            serviceSignal = service.doSomething();

            serviceSignal.add(function():void
            {
                //when the service returns, notify the view
                view.asyncReturned();
            });
        });
    }

    override public function onRemove():void
    {
        serviceSignal.removeAll();
        view.start.removeAll(); //clean up any listeners
    }
}
</pre>
</p>
<p style="font-size:larger;font-weight:bold;"><strong>So what now?</strong></p>
<p>Grab the code on <a title="Github" href="https://github.com/justinjmoses/mediate-behaviours-example" >Github</a> and have a play around. For ease of use, I’ve included the dependencies along with the source.</p>
<p>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/justinjmoses.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/justinjmoses.wordpress.com/415/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/justinjmoses.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/justinjmoses.wordpress.com/415/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/justinjmoses.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/justinjmoses.wordpress.com/415/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/justinjmoses.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/justinjmoses.wordpress.com/415/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/justinjmoses.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/justinjmoses.wordpress.com/415/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/justinjmoses.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/justinjmoses.wordpress.com/415/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/justinjmoses.wordpress.com/415/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/justinjmoses.wordpress.com/415/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=justinjmoses.wordpress.com&amp;blog=2539888&amp;post=415&amp;subd=justinjmoses&amp;ref=&amp;feed=1" width="1" height="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://justinjmoses.wordpress.com/2011/08/07/ui-mediation-sucks-mediate-behaviours-not-views/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>An introduction to Maven and Flexmojos</title>
		<link>http://justinjmoses.wordpress.com/2011/07/27/an-introduction-to-maven-and-flexmojos/</link>
		<comments>http://justinjmoses.wordpress.com/2011/07/27/an-introduction-to-maven-and-flexmojos/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 14:49:20 +0000</pubDate>
		<dc:creator>Justin Moses</dc:creator>
				<category><![CDATA[Adobe Flex]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Lab49]]></category>

		<guid isPermaLink="false">http://justinjmoses.wordpress.com/?p=385</guid>
		<description><![CDATA[I presented an introduction to Maven and Flexmojos last night. The talk is a varient of the one I will be giving at FITC@MAX this year. The talk starts off discussing Maven, the hierarchical structure of projects, POMs and the build life cycle. We then discuss the Flexmojos plugin to build Flex applications. After that, we [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=justinjmoses.wordpress.com&#38;blog=2539888&#38;post=385&#38;subd=justinjmoses&#38;ref=&#38;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I presented an introduction to Maven and Flexmojos last night. The talk is a varient of the one I will be giving at <a title="FITC@MAX" href="http://www.fitc.ca/events/about/?event=122" ><strong>FITC@MAX</strong> </a>this year.</p>
<p>The talk starts off discussing Maven, the hierarchical structure of projects, POMs and the build life cycle. We then discuss the Flexmojos plugin to build Flex applications. After that, we talk about repositories &#8211; both local and remote, and discuss how Nexus can perform the role of remote repository within your organisation, proxying to others on the web.</p>
<p>We work through 6 main examples. All code is on <a title="Github" href="https://github.com/justinjmoses/flexmojos-introduction" >Github</a>.</p>
<ol>
<li>The simplest application possible &#8211; a custom Hello World that uses the latest Flexmojos (4.0-RC1) and Flex SDK (4.5.1)</li>
<li>Adding automated unit tests to the build</li>
<li>Installing custom dependencies that aren&#8217;t hosted on the web</li>
<li>Using the Flasbuilder goal to create a Flashbuilder project from a build script</li>
<li>Starting Flex applications from the supported archetypes (templates)</li>
<li>A basic application that has custom dependencies and its own class library.</li>
</ol>
<div id="__ss_8697845" style="width:510px;"><iframe src='http://www.slideshare.net/slideshow/embed_code/8697845' width='510' height='418' scrolling='no'></iframe></div>
<p>Source files: <a title="Source" href="https://github.com/justinjmoses/flexmojos-introduction" >https://github.com/justinjmoses/flexmojos-introduction</a></p>
<p>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/justinjmoses.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/justinjmoses.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/justinjmoses.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/justinjmoses.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/justinjmoses.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/justinjmoses.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/justinjmoses.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/justinjmoses.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/justinjmoses.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/justinjmoses.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/justinjmoses.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/justinjmoses.wordpress.com/385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/justinjmoses.wordpress.com/385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/justinjmoses.wordpress.com/385/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=justinjmoses.wordpress.com&amp;blog=2539888&amp;post=385&amp;subd=justinjmoses&amp;ref=&amp;feed=1" width="1" height="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://justinjmoses.wordpress.com/2011/07/27/an-introduction-to-maven-and-flexmojos/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Changing default workspace in FB 4.5.1</title>
		<link>http://backgroundthinking.wordpress.com/2011/07/15/changing-default-workspace-in-fb-4-5-1/</link>
		<comments>http://backgroundthinking.wordpress.com/2011/07/15/changing-default-workspace-in-fb-4-5-1/#comments</comments>
		<pubDate>Fri, 15 Jul 2011 21:01:55 +0000</pubDate>
		<dc:creator>Mateusz Juszkiewicz</dc:creator>
				<category><![CDATA[Adobe Flex]]></category>

		<guid isPermaLink="false">http://backgroundthinking.wordpress.com/?p=126</guid>
		<description><![CDATA[I find it really annoying when applications I use keep creating their own folders in my Documents directory. Luckily some applications can be configured not to do it. Today I was fighting against Flash Builder, trying to make persuade it not to create workspace in Documents (I have separate folder for development). Using File &#062; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=backgroundthinking.wordpress.com&#38;blog=11544784&#38;post=126&#38;subd=backgroundthinking&#38;ref=&#38;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I find it really annoying when applications I use keep creating their own folders in my Documents directory. Luckily some applications can be configured not to do it. Today I was fighting against Flash Builder, trying to make persuade it not to create workspace in Documents (I have separate folder for development). Using File &#62; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=backgroundthinking.wordpress.com&amp;blog=11544784&amp;post=126&amp;subd=backgroundthinking&amp;ref=&amp;feed=1" width="1" height="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://backgroundthinking.wordpress.com/2011/07/15/changing-default-workspace-in-fb-4-5-1/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What’s the deal with Signals?</title>
		<link>http://justinjmoses.wordpress.com/2011/07/07/whats-the-deal-with-signals/</link>
		<comments>http://justinjmoses.wordpress.com/2011/07/07/whats-the-deal-with-signals/#comments</comments>
		<pubDate>Fri, 08 Jul 2011 03:06:45 +0000</pubDate>
		<dc:creator>Justin Moses</dc:creator>
				<category><![CDATA[Adobe Flex]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Lab49]]></category>

		<guid isPermaLink="false">http://justinjmoses.wordpress.com/?p=302</guid>
		<description><![CDATA[Signals. Heard of them? What's the big deal you say?

Simple. The event system in AS3 is both limited and antiquated. True, native AS3 events offer a convenient way of messaging (bubbling) withinUI hierarchies. Yet, at an abstract API level, they more often as not restrict the developer than aid them.

Chiefly, what Robert Penner has done with <strong>as3-signals</strong> is create a way to represent events as variables, rather than as magical strings firing off at the type (class) level. It sounds simple. It is. Yet the implications for your architecture is vast.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=justinjmoses.wordpress.com&#38;blog=2539888&#38;post=302&#38;subd=justinjmoses&#38;ref=&#38;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a title="Signals Home" href="https://github.com/robertpenner/as3-signals" >Signals</a>. Heard of them? What&#8217;s the big deal you say?</p>
<p>Simple. The event system in AS3 is both limited and antiquated. True, native AS3 events offer a convenient way of messaging (bubbling) withinUI hierarchies. Yet, at an abstract API level, they more often as not restrict the developer than aid them.</p>
<p>Chiefly, what Robert Penner has done with <strong>as3-signals</strong> is create a way to represent events as variables, rather than as magical strings firing off at the type (class) level. It sounds simple. It is. Yet the implications for your architecture is vast.</p>
<p>Consider the following interface of asynchronous methods:</p>
<p>
<pre class="brush: as3; wrap-lines: false;">
public interface IServiceStream
{
  function open():void;
  function close():void;
}</pre>
</p>
<p>Now, as the contract is asynchronous, we&#8217;ll need some events to notify us when methods have completed. Let&#8217;s say we have the following events:</p>
<ul>
<li>OPENED</li>
<li>CLOSED</li>
<li>ERROR</li>
<li>TIMEOUT</li>
</ul>
<p>In keeping with the native AS3 model, the best we can hope for is using the following metadata at the type level:</p>
<p>
<pre class="brush: as3; wrap-lines: false;">
[Event(name=&quot;streamOpened&quot;,type=&quot;...&quot;)]
[Event(name=&quot;streamClosed&quot;,type=&quot;...&quot;)]
[Event(name=&quot;streamError&quot;,type=&quot;...&quot;)]
[Event(name=&quot;streamTimeout&quot;,type=&quot;...&quot;)]
public interface IServiceStream
{
 //...
}
</pre>
</p>
<p>There are four problems with this approach:</p>
<ol>
<li>Decorating via metadata does not enforce that implementors of the interface actually dispatch these events.</li>
<li>We should, for completeness, define the events somewhere as static constants. This means we can no longer simply write interfaces, and need to write event implementations and deploy them with our API;</li>
<li>We&#8217;re using magic strings, and as there is no compile-time checking of the metadata, we&#8217;re opening ourselves up to illusive runtime errors, if the wrong events are dispatched.</li>
<li>There is nothing to specify which events fire when &#8211; and which events belong to which method, and which belong to the class itself.</li>
</ol>
<div>The first two are fairly straightforward, so let&#8217;s focus on the latter two.</div>
<p style="font-size:larger;"><strong>Magic Strings and No Contract</strong></p>
<div>We have no way of tying the event type to the constant in some Event class it will eventually correspond to. &#8220;streamOpened&#8221; may map to ServiceStreamEvent.OPENED, and yet we cannot know this at the metadata level (not for the interface or even the implementor). From #1, it is evident that although we can put these requirements in, we cannot enforce their usage.</div>
<p style="font-size:larger;"><strong>Method vs Type-level Events </strong></p>
<div>Anyone listening to an implementor of our interface, would listen at the type level for all events, and deal with them as they occurred.</div>
<p>For example:</p>
<p>
<pre class="brush: as3; wrap-lines: false;">
var service:IServiceStream = new ServiceStreamImplementation(...);

service.addEventListener(ServiceStreamEvent.OPENED, function(evt:Event):void { ... } );
service.addEventListener(ServiceStreamEvent.CLOSED, function(evt:Event):void { ... } );
service.addEventListener(ServiceStreamEvent.ERROR, function(evt:Event):void { ... } );
service.addEventListener(ServiceStreamEvent.TIMEOUT, function(evt:Event):void { ... } );

//later when required
service.open();
</pre>
</p>
<div>We&#8217;ve been forced to declare all our handlers in one point, early enough to precede the calling of any event-dispatching methods. Anyone reading the code will have no real knowledge at which point the implementing class dispatches which event &#8211; hence why all the listeners need to be adding initially. As the interface writer, all we can do is say &#8220;this interface can dispatch any of these events&#8221; &#8211; we cannot even enforce that they are used. From #1 above, the metadata is not enforced, it&#8217;s just decoration.</div>
<p>Here is where Signals come in. Let&#8217;s rewrite the interface using simple signals.</p>
<div>
<pre class="brush: as3; wrap-lines: false;">
public interface IServiceStream
{
  function open():ISignal;
  function close():ISignal;
}</pre>
</p>
</div>
<div>Now let&#8217;s look at a partial implementation.</div>
<div>
<pre class="brush: as3; wrap-lines: false;">
import mx.rpc.events.ResultEvent;
import mx.rpc.http.HTTPService;

import org.osflash.signals.ISignal;
import org.osflash.signals.Signal;

public class ServiceStream implements IServiceStream
{
	public function open():ISignal
	{
		var signal:Signal = new Signal(Object);

		//do something asynchronously...
		var httpService:HTTPService = new HTTPService();
		httpService.addEventListener(ResultEvent.RESULT,
			function(evt:ResultEvent):void
			{
				//use the closure to access your signal and dispatch it async
				signal.dispatch(evt.result);
			});

		httpService.send();

		return signal;
	}

	//function close();
}
</pre>
</p>
</div>
<p>Now, the usage of this implementation can become:</p>
<div>
<pre class="brush: as3; wrap-lines: false;">
var service:IServiceStream = new ServiceStreamImplementation(...);

service.open().addOnce(function(result:Object):void
{
    //do something with your returned &quot;result&quot;
});
</pre>
</p>
</div>
<p><strong>In one fell swoop we fixed all four of the problems with events.</strong> We even have the convenience methods <em>addOnce()</em> and <em>removeAll()</em> from the ISignal interface. The former ensures your listener is removed after it is first used, the latter is pretty self-explanatory. If you look even closer, you&#8217;ll see we just implemented the <a title="Fluent Interface" href="http://en.wikipedia.org/wiki/Fluent_interface" >Fluent interface</a> for free.</p>
<p style="line-height:1.2;background-color:#eeeeee;border:1px solid #CCCCCC;padding:5px;">Imagine this in your mediator pattern &#8211; your UIs by definition have no reference to their mediator. Now they have a prescribed way of notifying their mediators that something has occurred.</p>
<p style="font-size:larger;"><strong>Wait a second. What about those other events?</strong></p>
<p>How do you return multiple items from a regular method call &#8211; compose a type for your requirements.</p>
<p>You could write the following signal collection:</p>
<p>
<pre class="brush: as3; wrap-lines: false;">
public class ServiceSignals
{
	public var open:ISignal = new Signal(Object);
	public var error:ISignal = new Signal(String);
	public var timeout:ISignal = new Signal();
}
</pre>
</p>
<p>and change your interface to:</p>
<p>
<pre class="brush: as3; wrap-lines: false;">
public interface IServiceStream
{
  function open():ServiceSignals;
  //...
}
</pre>
</p>
<p>Better yet, you could keep your interface and simply conform your Signal collection into an ISignal with a default listener/dispatcher:</p>
<p>
<pre class="brush: as3; wrap-lines: false;">
public class ServiceSignal extends Signal
{
	var open:ISignal = new Signal(Object);
	var error:ISignal = new Signal(String);
	var timeout:ISignal = new Signal();

	override public function add(listener:Function):ISignalBinding
	{
		return open.add(listener);
	}

	override public function addOnce(listener:Function):ISignalBinding
	{
		return open.addOnce(listener);
	}

	override public function dispatch(...parameters):void
	{
		open.dispatch();
	}

	override public function remove(listener:Function):ISignalBinding
	{
		return open.remove(listener);
	}

	override public function removeAll():void
	{
		open.removeAll();
	}
}
</pre>
</p>
<p>Then you could use it as such:</p>
<p>
<pre class="brush: as3; wrap-lines: false;">
var service:IServiceStream = new ServiceStreamImplementation(...);

var signal:ServiceSignal = service.open();

signal.addOnce(function(result:Object):void
{
    //do something with your returned &quot;result&quot;
});

signal.error.addOnce(...);

signal.timeout.addOnce(...);
</pre>
</p>
<p>Perhaps you&#8217;re not a huge fan of this solution. You may find that the error &amp; timeout signals are type-level events, and you don&#8217;t want to have to add handlers for both open() and close(). OK &#8211; so what about this implementation?</p>
<p>
<pre class="brush: as3; highlight: [30]; wrap-lines: false;">
public class ServiceStream implements IServiceStream
{
	public var error:ISignal = new Signal(String);
	public var timeout:ISignal = new Signal();

	private var _time:int = 30000;
	private var timer:Timer;

	public function open():ISignal
	{
		var signal:Signal = new Signal(Object);

		//do something asynchronously...
		var httpService:HTTPService = new HTTPService();
		httpService.addEventListener(ResultEvent.RESULT,
			function(evt:ResultEvent):void
			{
				//use the closure to access your signal and dispatch it async
				signal.dispatch(evt.result);
			});

		httpService.addEventListener(FaultEvent.FAULT,
			function(evt:FaultEvent):void
			{
				error.dispatch(evt.fault.faultString);
			});

		timer = new Timer(_time,1);

		var timerHandler:Function = function(evt:TimerEvent):void
			{
				timeout.dispatch();
				timer.removeEventListener(TimerEvent.TIMER_COMPLETE, timerHandler);
			}
		timer.addEventListener(TimerEvent.TIMER_COMPLETE, timerHandler);

		httpService.send();

		timer.start();

		return signal;
	}

	//function close();

}
</pre>
</p>
<p style="line-height:1.2;background-color:#eeeeee;border:1px solid #CCCCCC;padding:5px;">Notice how we define the handler function as a variable so we can remove it in the listener. This is replicating the ISignal.addOnce() functionality. True, we could have used weak event listeners to allow for garbage collection, however this way is closer to our approach with Signals, so we&#8217;ll keep it for consistency.</p>
<p>Your implementor could then be used like this:</p>
<p>
<pre class="brush: as3; wrap-lines: false;">
var service:IServiceStream = new ServiceStreamImplementation(...);

service.open().addOnce(function(result:Object):void
{
    //do something with your returned &quot;result&quot;
});

service.error.addOnce(function(message:String):void
{
    //handle error
});

service.timeout.addOnce(function():void
{
    //handle timeout
});

service.close().addOnce(function():void
{
    //now closed
});
</pre>
</p>
<p>Whichever way you decide, Signals give you the choice you need to make the best decision for your API.</p>
<p>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/justinjmoses.wordpress.com/302/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/justinjmoses.wordpress.com/302/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/justinjmoses.wordpress.com/302/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/justinjmoses.wordpress.com/302/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/justinjmoses.wordpress.com/302/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/justinjmoses.wordpress.com/302/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/justinjmoses.wordpress.com/302/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/justinjmoses.wordpress.com/302/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/justinjmoses.wordpress.com/302/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/justinjmoses.wordpress.com/302/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/justinjmoses.wordpress.com/302/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/justinjmoses.wordpress.com/302/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/justinjmoses.wordpress.com/302/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/justinjmoses.wordpress.com/302/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=justinjmoses.wordpress.com&amp;blog=2539888&amp;post=302&amp;subd=justinjmoses&amp;ref=&amp;feed=1" width="1" height="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://justinjmoses.wordpress.com/2011/07/07/whats-the-deal-with-signals/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Flex code injection using conditional breakpoints</title>
		<link>http://justinjmoses.wordpress.com/2011/01/20/flex-code-injection-using-conditional-breakpoints/</link>
		<comments>http://justinjmoses.wordpress.com/2011/01/20/flex-code-injection-using-conditional-breakpoints/#comments</comments>
		<pubDate>Thu, 20 Jan 2011 18:09:03 +0000</pubDate>
		<dc:creator>Justin Moses</dc:creator>
				<category><![CDATA[Adobe Flex]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Lab49]]></category>

		<guid isPermaLink="false">http://justinjmoses.wordpress.com/?p=275</guid>
		<description><![CDATA[So it's nothing new to many people, but something I saw in a video from MAX 2009 on Flash Builder 4 last year really stuck with me. And, it's been saving me day after day on this massive project.

It has to do with conditional breakpoints in FB4. On top of the normal, if x == true conditions, you can use a sneaky comma trick to inject code. <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=justinjmoses.wordpress.com&#38;blog=2539888&#38;post=275&#38;subd=justinjmoses&#38;ref=&#38;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>So while it&#8217;s not new news, something I saw in a <a href="http://2009.max.adobe.com/online/session/360" >video from MAX 2009</a> on Flash Builder 4 last year really stuck with me. And, it&#8217;s been saving me day after day on this massive project.</p>
<p>It has to do with <a title="Adobe Documentation on Conditional Breakpoints" href="http://help.adobe.com/en_US/flashbuilder/using/WS6f97d7caa66ef6eb1e63e3d11b6c4d0d21-7f07.html#WS31818EC7-B468-415b-9313-86456501967B" >conditional breakpoints in FB4</a>. On top of the normal, if x == true conditions, you can use a sneaky comma trick to inject code.</p>
<p>It&#8217;s simple, you enter true (1) or false (0) in the box (depending on whether you want the breakpoint to pause execution) and then add any expression(s) you want, separated by commas. The beauty is that these expression(s) is/are evaluated regardless of whether the breakpoint is executed or not. That means you can inject code into a running debug session without stopping to compile and rerun.</p>
<p>There are two main usages I&#8217;ve found for this feature:</p>
<p><strong>Inserting Traces</strong></p>
<p>I regularly find myself tracing through asynchronous operations, trying to figure out the order of events and properties at the time. Sometimes (and this evokes one very painful memory) I&#8217;m tracking multiple timers and I can&#8217;t learn anything from breakpoints, as I need to get an idea of the order of the ticks (and the corresponding events that are firing).</p>
<p>These scenarios make them a perfect candidate for the injected trace. Try this:</p>
<p style="text-align:center;">&nbsp;</p>
<div id="attachment_281" class="wp-caption aligncenter" style="width: 502px"><img class="size-full wp-image-281" title="FB4 Conditional Breakpoint Dialog: Tracing" src="http://justinjmoses.files.wordpress.com/2011/01/screengrab-flexbreakpoints-trace1.jpg?w=510" alt="FB4 Conditional Breakpoint Dialog: Tracing"   />
<p class="wp-caption-text">FB4 Conditional Breakpoint Dialog: Tracing</p>
</div>
<p style="text-align:center;">&nbsp;</p>
<p><strong>Modifying Properties</strong></p>
<p>The other main use-case is the all-too-common scenario when you want to change a property mid-execution. We&#8217;ve all been there &#8211; myself just today.</p>
<p style="text-align:center;">
<div id="attachment_284" class="wp-caption aligncenter" style="width: 503px"><img class="size-full wp-image-284 " title="FB4 Conditional Breakpoint Dialog: Property Setting" src="http://justinjmoses.files.wordpress.com/2011/01/screengrab-flexbreakpoints-propsetter.jpg?w=510" alt="FB4 Conditional Breakpoint Dialog: Property Setting"   />
<p class="wp-caption-text">FB4 Conditional Breakpoint Dialog: Property Setting</p>
</div>
<p>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/justinjmoses.wordpress.com/275/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/justinjmoses.wordpress.com/275/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/justinjmoses.wordpress.com/275/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/justinjmoses.wordpress.com/275/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/justinjmoses.wordpress.com/275/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/justinjmoses.wordpress.com/275/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/justinjmoses.wordpress.com/275/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/justinjmoses.wordpress.com/275/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/justinjmoses.wordpress.com/275/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/justinjmoses.wordpress.com/275/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/justinjmoses.wordpress.com/275/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/justinjmoses.wordpress.com/275/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/justinjmoses.wordpress.com/275/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/justinjmoses.wordpress.com/275/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=justinjmoses.wordpress.com&amp;blog=2539888&amp;post=275&amp;subd=justinjmoses&amp;ref=&amp;feed=1" width="1" height="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://justinjmoses.wordpress.com/2011/01/20/flex-code-injection-using-conditional-breakpoints/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="" length="" type="" />
		</item>
		<item>
		<title>Performance of Google’s Protocol Buffers in Flex (redux)</title>
		<link>http://backgroundthinking.wordpress.com/2010/05/24/performance-of-google%e2%80%99s-protocol-buffers-in-flex-redux/</link>
		<comments>http://backgroundthinking.wordpress.com/2010/05/24/performance-of-google%e2%80%99s-protocol-buffers-in-flex-redux/#comments</comments>
		<pubDate>Mon, 24 May 2010 21:14:54 +0000</pubDate>
		<dc:creator>Mateusz Juszkiewicz</dc:creator>
				<category><![CDATA[Adobe Flex]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://backgroundthinking.wordpress.com/?p=111</guid>
		<description><![CDATA[Atry pointed me to latest release (0.8.7) of his protoc-gen-as3 library. I re-ran my tests to see if it brings any performance improvements &#8211; and it does! Deserialization times are very similar to 0.8.4 which I used previously. I would assume any differences are statistical errors. Deserialization AMF 3 Protocol Buffers Class: Small Medium Large [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=backgroundthinking.wordpress.com&#38;blog=11544784&#38;post=111&#38;subd=backgroundthinking&#38;ref=&#38;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Atry pointed me to latest release (0.8.7) of his protoc-gen-as3 library. I re-ran my tests to see if it brings any performance improvements &#8211; and it does! Deserialization times are very similar to 0.8.4 which I used previously. I would assume any differences are statistical errors. Deserialization AMF 3 Protocol Buffers Class: Small Medium Large [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=backgroundthinking.wordpress.com&amp;blog=11544784&amp;post=111&amp;subd=backgroundthinking&amp;ref=&amp;feed=1" width="1" height="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://backgroundthinking.wordpress.com/2010/05/24/performance-of-google%e2%80%99s-protocol-buffers-in-flex-redux/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FlexUnit4 &amp; Parsley</title>
		<link>http://blog.lab49.com/archives/4450</link>
		<comments>http://blog.lab49.com/archives/4450#comments</comments>
		<pubDate>Mon, 10 May 2010 22:01:47 +0000</pubDate>
		<dc:creator>Anthony McCormick</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Adobe Flex]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Dependency Injection]]></category>
		<category><![CDATA[DI]]></category>
		<category><![CDATA[FlashBuilder]]></category>
		<category><![CDATA[FlexUnit4]]></category>
		<category><![CDATA[Inversion Of Control]]></category>
		<category><![CDATA[IOC]]></category>
		<category><![CDATA[Parsley]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Test Driven Development]]></category>

		<guid isPermaLink="false">http://blog.lab49.com/?p=4450</guid>
		<description><![CDATA[For the last six months I have been working on a rather large enterprise application that uses parsley as it&#8217;s main Dependency Injection Framework. This has led to many complex class&#8217; that contain multiple injected models, VO and other elements. Recreating these items inside test harness can become very cumbersome if you have to create [...]]]></description>
			<content:encoded><![CDATA[<p>For the last six months I have been working on a rather large enterprise application that uses parsley as it&#8217;s main Dependency Injection Framework. This has led to many complex class&#8217; that contain multiple injected models, VO and other elements. Recreating these items inside test harness can become very cumbersome if you have to create a large injection heirarchy. Consider the following example.</p>
<p><a title="FlexUnit4 &amp; Parsley" href="http://www.betadesigns.co.uk/Blog/2010/04/29/flexunit4-parsley/" target="_blank">More</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lab49.com/archives/4450/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Custom FlashBuilder Component Views</title>
		<link>http://blog.lab49.com/archives/4449</link>
		<comments>http://blog.lab49.com/archives/4449#comments</comments>
		<pubDate>Mon, 10 May 2010 21:51:50 +0000</pubDate>
		<dc:creator>Anthony McCormick</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Adobe Flex]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Advanced Component Development]]></category>
		<category><![CDATA[Custom components]]></category>
		<category><![CDATA[design.xml]]></category>
		<category><![CDATA[FlashBuilder]]></category>
		<category><![CDATA[icons]]></category>
		<category><![CDATA[manifest.xml]]></category>
		<category><![CDATA[swc]]></category>

		<guid isPermaLink="false">http://blog.lab49.com/?p=4449</guid>
		<description><![CDATA[I recently discovered that you can create custom components that can appear under your own company/personal folder inside Flash/Flexbuilder design view. Normally any custom component you create will appear under the Custom folder in the Components View and well thats not very good for branding now is it. In addition you also get an actual [...]]]></description>
			<content:encoded><![CDATA[<p>I recently discovered that you can create custom components that can appear under your own company/personal folder inside Flash/Flexbuilder design view. Normally any custom component you create will appear under the Custom folder in the Components View and well thats not very good for branding now is it. In addition you also get an actual size representation of your component in Design view rather than just an empty box outline. For example the first image is the default and the second the custom.</p>
<p><a title="Custom FlashBuilder Component Views" href="http://www.betadesigns.co.uk/Blog/2010/05/06/custom-flashbuilder-component-views/" target="_blank">more</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lab49.com/archives/4449/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Performance of Google’s Protocol Buffers in Flex</title>
		<link>http://backgroundthinking.wordpress.com/2010/04/03/performance-of-googles-protocol-buffers-in-flex/</link>
		<comments>http://backgroundthinking.wordpress.com/2010/04/03/performance-of-googles-protocol-buffers-in-flex/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 21:13:59 +0000</pubDate>
		<dc:creator>Mateusz Juszkiewicz</dc:creator>
				<category><![CDATA[Adobe Flex]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://backgroundthinking.wordpress.com/?p=55</guid>
		<description><![CDATA[Update: I ran tests again using newer version of protoc-gen-as3. They can be found here. For last couple of days I have been investigating Google&#8217;s Protocol Buffers with intention to use it in Flex application. While in Flex world such idea instantly raises at least a couple of questions, let me explain our situation a little [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=backgroundthinking.wordpress.com&#38;blog=11544784&#38;post=55&#38;subd=backgroundthinking&#38;ref=&#38;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Update: I ran tests again using newer version of protoc-gen-as3. They can be found here. For last couple of days I have been investigating Google&#8217;s Protocol Buffers with intention to use it in Flex application. While in Flex world such idea instantly raises at least a couple of questions, let me explain our situation a little [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=backgroundthinking.wordpress.com&amp;blog=11544784&amp;post=55&amp;subd=backgroundthinking&amp;ref=&amp;feed=1" width="1" height="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://backgroundthinking.wordpress.com/2010/04/03/performance-of-googles-protocol-buffers-in-flex/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple solution for parsing dates in AS3/Flex</title>
		<link>http://backgroundthinking.wordpress.com/2010/03/09/simple-solution-for-parsing-dates-in-as3flex/</link>
		<comments>http://backgroundthinking.wordpress.com/2010/03/09/simple-solution-for-parsing-dates-in-as3flex/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 17:09:23 +0000</pubDate>
		<dc:creator>Mateusz Juszkiewicz</dc:creator>
				<category><![CDATA[Adobe Flex]]></category>

		<guid isPermaLink="false">http://backgroundthinking.wordpress.com/?p=32</guid>
		<description><![CDATA[I&#8217;ve recently had to parse dates and it turned out that Flex is not very good at it. According to specs, Date.parse() only handle following formats: MM/DD/YYYY HH:MM:SS TZD HH:MM:SS TZD Day Mon/DD/YYYY Mon DD YYYY HH:MM:SS TZD Day Mon DD HH:MM:SS TZD YYYY Day DD Mon HH:MM:SS TZD YYYY Mon/DD/YYYY HH:MM:SS TZD YYYY/MM/DD HH:MM:SS [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=backgroundthinking.wordpress.com&#38;blog=11544784&#38;post=32&#38;subd=backgroundthinking&#38;ref=&#38;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently had to parse dates and it turned out that Flex is not very good at it. According to specs, Date.parse() only handle following formats: MM/DD/YYYY HH:MM:SS TZD HH:MM:SS TZD Day Mon/DD/YYYY Mon DD YYYY HH:MM:SS TZD Day Mon DD HH:MM:SS TZD YYYY Day DD Mon HH:MM:SS TZD YYYY Mon/DD/YYYY HH:MM:SS TZD YYYY/MM/DD HH:MM:SS [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=backgroundthinking.wordpress.com&amp;blog=11544784&amp;post=32&amp;subd=backgroundthinking&amp;ref=&amp;feed=1" width="1" height="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://backgroundthinking.wordpress.com/2010/03/09/simple-solution-for-parsing-dates-in-as3flex/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Inconsistency in handling width and height for rotated components</title>
		<link>http://backgroundthinking.wordpress.com/2010/03/03/inconsistency-in-handling-width-and-height-for-rotated-components/</link>
		<comments>http://backgroundthinking.wordpress.com/2010/03/03/inconsistency-in-handling-width-and-height-for-rotated-components/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 08:33:51 +0000</pubDate>
		<dc:creator>Mateusz Juszkiewicz</dc:creator>
				<category><![CDATA[Adobe Flex]]></category>

		<guid isPermaLink="false">http://backgroundthinking.wordpress.com/?p=34</guid>
		<description><![CDATA[I&#8217;ve been recently working on a component that contained rotated label in it and I discovered that using width and height attributes (MXML) in such case might result in unexpected behaviour. The problem occurs when you start using absolute values for these properties. If for example you set height to be 100% then actual height [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=backgroundthinking.wordpress.com&#38;blog=11544784&#38;post=34&#38;subd=backgroundthinking&#38;ref=&#38;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been recently working on a component that contained rotated label in it and I discovered that using width and height attributes (MXML) in such case might result in unexpected behaviour. The problem occurs when you start using absolute values for these properties. If for example you set height to be 100% then actual height [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=backgroundthinking.wordpress.com&amp;blog=11544784&amp;post=34&amp;subd=backgroundthinking&amp;ref=&amp;feed=1" width="1" height="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://backgroundthinking.wordpress.com/2010/03/03/inconsistency-in-handling-width-and-height-for-rotated-components/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Autocomplete Parsley tags with SourceMate</title>
		<link>http://backgroundthinking.wordpress.com/2010/01/27/autocomplete-parsley-tags-with-sourcemate/</link>
		<comments>http://backgroundthinking.wordpress.com/2010/01/27/autocomplete-parsley-tags-with-sourcemate/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 09:20:16 +0000</pubDate>
		<dc:creator>Mateusz Juszkiewicz</dc:creator>
				<category><![CDATA[Adobe Flex]]></category>

		<guid isPermaLink="false">http://backgroundthinking.wordpress.com/?p=16</guid>
		<description><![CDATA[I am using SourceMate with latest prerelase build of Adobe Flash Builder. It still has some issues but otherwise it&#8217;s quite cool. It adds features that most Java developers can expect in either IDE they choose. Personally I like refactoring features, implement/override and code assist for metadata the most. Since we extensively use Parsley in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=backgroundthinking.wordpress.com&#38;blog=11544784&#38;post=16&#38;subd=backgroundthinking&#38;ref=&#38;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I am using SourceMate with latest prerelase build of Adobe Flash Builder. It still has some issues but otherwise it&#8217;s quite cool. It adds features that most Java developers can expect in either IDE they choose. Personally I like refactoring features, implement/override and code assist for metadata the most. Since we extensively use Parsley in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=backgroundthinking.wordpress.com&amp;blog=11544784&amp;post=16&amp;subd=backgroundthinking&amp;ref=&amp;feed=1" width="1" height="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://backgroundthinking.wordpress.com/2010/01/27/autocomplete-parsley-tags-with-sourcemate/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Problems with autocompletion and latest Flex 4 SDK</title>
		<link>http://backgroundthinking.wordpress.com/2010/01/21/problems-with-autocompletion-and-latest-flex-4-sdk/</link>
		<comments>http://backgroundthinking.wordpress.com/2010/01/21/problems-with-autocompletion-and-latest-flex-4-sdk/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 20:37:19 +0000</pubDate>
		<dc:creator>Mateusz Juszkiewicz</dc:creator>
				<category><![CDATA[Adobe Flex]]></category>

		<guid isPermaLink="false">http://backgroundthinking.wordpress.com/?p=3</guid>
		<description><![CDATA[You may encounter some problems with code autocompletion when switching to one of the latest builds of Adobe Flex SDK, especially if you are using Flash Builder Beta 2 and not one of the latest prerelease builds. Flash Builder will be unable to complete class names and add imports from flash.* package. This is because [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=backgroundthinking.wordpress.com&#38;blog=11544784&#38;post=3&#38;subd=backgroundthinking&#38;ref=&#38;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>You may encounter some problems with code autocompletion when switching to one of the latest builds of Adobe Flex SDK, especially if you are using Flash Builder Beta 2 and not one of the latest prerelease builds. Flash Builder will be unable to complete class names and add imports from flash.* package. This is because [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=backgroundthinking.wordpress.com&amp;blog=11544784&amp;post=3&amp;subd=backgroundthinking&amp;ref=&amp;feed=1" width="1" height="1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://backgroundthinking.wordpress.com/2010/01/21/problems-with-autocompletion-and-latest-flex-4-sdk/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RIA: LCDS Edge Server – STOP THE PRESS</title>
		<link>http://mdavey.wordpress.com/2009/07/17/adobe-lcds-edge-server-stop-the-press/</link>
		<comments>http://mdavey.wordpress.com/2009/07/17/adobe-lcds-edge-server-stop-the-press/#comments</comments>
		<pubDate>Fri, 17 Jul 2009 22:25:18 +0000</pubDate>
		<dc:creator>Matt Davey</dc:creator>
				<category><![CDATA[Adobe Flex]]></category>
		<category><![CDATA[Advanced Visualization]]></category>
		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://mdavey.wordpress.com/?p=1940</guid>
		<description><![CDATA[I take my hat off to Adobe.  Adobe&#8217;s up and coming release of Adobe LiveCycle Data Services 3 has one impressive feature that I am completely sold on &#8211; because I was on one of the many conference calls 1.5 years ago that forced the feature to get accepted and pushed into the LCDS [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdavey.wordpress.com&#38;blog=18454&#38;post=1940&#38;subd=mdavey&#38;ref=&#38;feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'>
<p>I take my hat off to Adobe.  Adobe&#8217;s up and coming release of <a href="http://labs.adobe.com/technologies/livecycle_dataservices3/">Adobe LiveCycle Data Services 3</a> has one impressive feature that I am completely sold on &#8211; because I was on one of the many conference calls 1.5 years ago that forced the feature to get accepted and pushed into the LCDS stack &#8211; Edge Server functionality.  Although the current LCDS 3 beta download unfortunately doesn&#8217;t have the appropriate documentation (soon to be fixed), LCDS 3 beta does have the killer feature almost every sell-side institution requires &#8211; Edge Server Push.</p>
<p>&#8220;The Edge Server is a LiveCycle Data Services server specially configured and deployed in the DMZ&#8221;</p>
<p>Security teams should love this feature simply because it talk security all the way to the bank:</p>
<p>&#8220;Flex Clients that connect to the Edge Server through open ports in the external firewall have no direct access to a LiveCycle Data Services server in the internal network&#8221;</p>
<p>The Edge Server is also cluster aware: &#8220;The Edge Server sets up a gateway connection on behalf of a client in a balanced manner across available nodes when clustering is used in the application tier.&#8221;</p>
<p>The fact that the sample applications is a sample stock trading application speak volumes for the investment Adobe have made to enable this feature and support the sell-side &#8211; the application supports foreign-exchange currency pair trading.</p>
<p>It&#8217;s nice to see that the sample application has been thought through from the perspective of using two Edge Servers in the DMZ with a load balancer in front of them that handles HTTP sticky sessions.  There are two LiveCycle Data Services application servers in the application tier. For clients connecting through a load balancer that supports HTTP, configure the load balancer to support sticky sessions, pinning all requests from a given client to the same Edge Server.</p>
<p>Questions for Adobe:</p>
<ul>
<li>When can we get security documentation on the LCDS Edge Server?</li>
<li>Can we get some LCDS Load Test tool results of the Edge Server?</li>
</ul>
<p>I wait in anticipation of what Microsoft will counter with.  But as of today, Microsoft&#8217;s only hope is Lightstreamer, Kaazing, Caplin or similar &#8211; none of which are based on a .NET stack.  It&#8217;s taken Microsoft n years to understand CEP, how long will we have to wait until we get <a href="http://en.wikipedia.org/wiki/Comet_(programming)">COMET</a> push ?</p>
<p>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mdavey.wordpress.com/1940/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mdavey.wordpress.com/1940/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mdavey.wordpress.com/1940/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mdavey.wordpress.com/1940/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mdavey.wordpress.com/1940/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mdavey.wordpress.com/1940/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mdavey.wordpress.com/1940/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mdavey.wordpress.com/1940/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mdavey.wordpress.com/1940/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mdavey.wordpress.com/1940/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdavey.wordpress.com&amp;blog=18454&amp;post=1940&amp;subd=mdavey&amp;ref=&amp;feed=1" /></div>
]]></content:encoded>
			<wfw:commentRss>http://mdavey.wordpress.com/2009/07/17/adobe-lcds-edge-server-stop-the-press/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>London Event: Introduction to Flex 4</title>
		<link>http://mdavey.wordpress.com/2009/07/17/london-event-introduction-to-flex-4/</link>
		<comments>http://mdavey.wordpress.com/2009/07/17/london-event-introduction-to-flex-4/#comments</comments>
		<pubDate>Fri, 17 Jul 2009 17:55:37 +0000</pubDate>
		<dc:creator>Matt Davey</dc:creator>
				<category><![CDATA[Adobe Flex]]></category>
		<category><![CDATA[Advanced Visualization]]></category>
		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://mdavey.wordpress.com/?p=1930</guid>
		<description><![CDATA[Introduction to Flex
To kick start what will be a regular meeting for those interested in rich Internet application development using Flex and associated technologies, Andrew Shorten from Adobe will provide an introduction to the Flex 4 SDK and the design and development tools that can be used to build Flex applications.
This practical session will demonstrate [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdavey.wordpress.com&#38;blog=18454&#38;post=1930&#38;subd=mdavey&#38;ref=&#38;feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'>
<p><strong><a href="http://skillsmatter.com/podcast/ajax-ria/introduction-to-flex">Introduction to Flex</a></strong></p>
<p>To kick start what will be a regular meeting for those interested in rich Internet application development using Flex and associated technologies, Andrew Shorten from Adobe will provide an introduction to the Flex 4 SDK and the design and development tools that can be used to build Flex applications.</p>
<p>This practical session will demonstrate the use of MXML, ActionScript, visual components and connecting to HTTP and Web Services to build a simple application and will set the scene for future sessions, which will extend the discussion on Flex into more advanced topics. </p>
<p>There will be plenty of time for Q&amp;A and a discussion on what topics are of interest for future events</p>
<p>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mdavey.wordpress.com/1930/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mdavey.wordpress.com/1930/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mdavey.wordpress.com/1930/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mdavey.wordpress.com/1930/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mdavey.wordpress.com/1930/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mdavey.wordpress.com/1930/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mdavey.wordpress.com/1930/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mdavey.wordpress.com/1930/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mdavey.wordpress.com/1930/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mdavey.wordpress.com/1930/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdavey.wordpress.com&amp;blog=18454&amp;post=1930&amp;subd=mdavey&amp;ref=&amp;feed=1" /></div>
]]></content:encoded>
			<wfw:commentRss>http://mdavey.wordpress.com/2009/07/17/london-event-introduction-to-flex-4/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flexing Your .NET 3.5 Skillset</title>
		<link>http://mdavey.wordpress.com/2009/07/17/flexing-your-net-3-5-skillset/</link>
		<comments>http://mdavey.wordpress.com/2009/07/17/flexing-your-net-3-5-skillset/#comments</comments>
		<pubDate>Fri, 17 Jul 2009 13:52:49 +0000</pubDate>
		<dc:creator>Matt Davey</dc:creator>
				<category><![CDATA[Adobe Flex]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://mdavey.wordpress.com/?p=1925</guid>
		<description><![CDATA[.NET Developer&#8217;s Journal has an article (written Lab49) on Flex.
&#8220;Conclusion:As Silverlight and WPF mature and gain mainstream acceptance, Flex and Flash will undoubtedly be forced to evolve in a direction where they can stay competitive. It&#8217;s likely that there will be further feature swapping and parallels between the two. If you do find yourself in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdavey.wordpress.com&#038;blog=18454&#038;post=1925&#038;subd=mdavey&#038;ref=&#038;feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'>
<p>.NET Developer&#8217;s Journal has an article (written Lab49) on <a href="http://dotnet.sys-con.com/node/1023866">Flex</a>.</p>
<p>&#8220;Conclusion:As Silverlight and WPF mature and gain mainstream acceptance, Flex and Flash will undoubtedly be forced to evolve in a direction where they can stay competitive. It&#8217;s likely that there will be further feature swapping and parallels between the two. If you do find yourself in a position where you or your team will need to work on a Flex application, don&#8217;t feel that you will be throwing away what you know and starting from scratch. Rest assured that you will be in the best possible place to pick up the new framework as well as anyone, and can continue to build on the .NET infrastructure and support that you already have&#8221;.</p>
<p>Flex has the lead over Silverlight in terms of browser plug-in <a href="http://www.adobe.com/products/player_census/flashplayer/version_penetration.html">penetration</a>. In terms of features Silverlight 3 is released but Flex 4 will follow soon, and until the Silverlight 4 release probably have a richer feature set.  Further, Microsoft has somewhat of an interesting battle on the RIA server side when comparing RIA Services vs Adobe LCDS.</p>
<p>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mdavey.wordpress.com/1925/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mdavey.wordpress.com/1925/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mdavey.wordpress.com/1925/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mdavey.wordpress.com/1925/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mdavey.wordpress.com/1925/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mdavey.wordpress.com/1925/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mdavey.wordpress.com/1925/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mdavey.wordpress.com/1925/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mdavey.wordpress.com/1925/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mdavey.wordpress.com/1925/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdavey.wordpress.com&#038;blog=18454&#038;post=1925&#038;subd=mdavey&#038;ref=&#038;feed=1" /></div>
]]></content:encoded>
			<wfw:commentRss>http://mdavey.wordpress.com/2009/07/17/flexing-your-net-3-5-skillset/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adobe Server Coolness – LCDS</title>
		<link>http://mdavey.wordpress.com/2009/07/15/adobe-lcds-coolness/</link>
		<comments>http://mdavey.wordpress.com/2009/07/15/adobe-lcds-coolness/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 20:40:49 +0000</pubDate>
		<dc:creator>Matt Davey</dc:creator>
				<category><![CDATA[Adobe Flex]]></category>
		<category><![CDATA[Advanced Visualization]]></category>
		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://mdavey.wordpress.com/?p=1905</guid>
		<description><![CDATA[A few features of Adobe LC DS that you may want to consider in the world of RIA development:

Spring Integration &#8211; check out Christophe Coenraets blog
Adobe LiveCycle Data Services 3 &#8211; see Anil&#8217;s blog for an overview of what&#8217;s coming in version 3, and why Microsoft has to push hard with RIA Services.
Streaming AMF and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdavey.wordpress.com&#38;blog=18454&#38;post=1905&#38;subd=mdavey&#38;ref=&#38;feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'>
<p>A few features of Adobe LC DS that you may want to consider in the world of RIA development:</p>
<ul>
<li>Spring <a href="http://anilchannappa.org/2009/02/27/another-demo-spring-integration/">Integration</a> &#8211; check out Christophe Coenraets <a href="http://coenraets.org/blog/2009/02/spring-blazeds-integration-on-adobe-tv/">blog</a></li>
<li>Adobe LiveCycle Data Services <a href="http://labs.adobe.com/technologies/livecycle_dataservices3/">3</a> &#8211; see <a href="http://www.adobe.com/devnet/livecycle/articles/lcdses3_whatsnew.html">Anil&#8217;s</a> blog for an overview of what&#8217;s coming in version 3, and why Microsoft has to push hard with RIA Services.</li>
<li>Streaming <a href="http://livedocs.adobe.com/livecycle/8.2/programLC/programmer/lcds/help.html?content=lcconfig_3.html">AMF and HTTP</a> channels &#8211; essentially COMET server technology.  You definitely want NIO enabled for scalability.  Here&#8217;s a recent <a href="http://devgirl.wordpress.com/2009/07/14/livecycle-data-services-channels-and-endpoints-explained/">blog</a> with provide more information on channels and endpoints</li>
</ul>
<p>Obviously with RIA development you need to consider that if the RIA is going to be used externally, the deployment model of the application server must fit into the existing engineering/security models that are in place within an organization &#8211; if not, you should be prepared for some rather long and in-depth meetings to persuade department to &#8220;see the light&#8221;.  Likewise, from an external perspective you should be fully versed on how client have their firewall/proxy setup as this can impact streaming and performance.</p>
<p>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mdavey.wordpress.com/1905/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mdavey.wordpress.com/1905/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mdavey.wordpress.com/1905/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mdavey.wordpress.com/1905/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mdavey.wordpress.com/1905/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mdavey.wordpress.com/1905/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mdavey.wordpress.com/1905/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mdavey.wordpress.com/1905/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mdavey.wordpress.com/1905/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mdavey.wordpress.com/1905/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mdavey.wordpress.com&amp;blog=18454&amp;post=1905&amp;subd=mdavey&amp;ref=&amp;feed=1" /></div>
]]></content:encoded>
			<wfw:commentRss>http://mdavey.wordpress.com/2009/07/15/adobe-lcds-coolness/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

