<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Alistair McLeod</title>
    <link rel="alternate" type="text/html" href="http://blogs.adobe.com/amcleod/" />
    <link rel="self" type="application/atom+xml" href="http://blogs.adobe.com/amcleod/atom.xml" />
    <id>tag:blogs.adobe.com,2009-12-28:/amcleod/356</id>
    <updated>2009-07-19T05:56:41Z</updated>
    
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 4.261</generator>

<entry>
    <title>Max Presentation - Flex Development with Cairngorm</title>
    <link rel="alternate" type="text/html" href="http://blogs.adobe.com/amcleod/archives/2008/12/max_milan_-_fle.html" />
    <id>tag:blogs.adobe.com,2008:/amcleod//356.17455</id>

    <published>2008-12-08T14:31:36Z</published>
    <updated>2009-07-19T05:56:41Z</updated>

    <summary>At Max Milan last week, I gave a presentation on Flex Development with Cairngorm. The presentation was based largely on the &quot;Cairngorm: Tips and Tricks from the Experts&quot; presentation my colleagues Peter Martin and Eric Garza gave at Max in...</summary>
    <author>
        <name>Alistair McLeod</name>
        
    </author>
    
        <category term="Cairngorm" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Flex" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.adobe.com/amcleod/">
        <![CDATA[<p>At Max Milan last week, I gave a <a href="https://share.acrobat.com/adc/document.do?docid=bc5b2ad3-e2c4-4891-a6df-74ce010e9821" target="external">presentation</a> on Flex Development with Cairngorm. The presentation was based largely on the "Cairngorm: Tips and Tricks from the Experts" presentation my colleagues Peter Martin and Eric Garza gave at Max in San Francisco, but after seeing the number of hands raised when Peter asked who was using Cairngorm, I thought I'd change the emphasis (and the content) a bit for the Milan audience.</p>

<p>I wanted to answer a number of common questions surrounding Cairngorm:</p>

<p>* How do I get data from my Commands to my Model?<br />
* How do I get data to my view?<br />
* How can I be notified that new data has arrived on the view?<br />
* How should Responders be implemented?<br />
* How should I use the Model Locator?</p>

<p>So, the presentation is split into three main sections: </p>

<p><strong>1) Cairngorm Overview</strong></p>

<p>The first section is a back-to-basics introduction to Cairngorm, but with a twist. If you've been following some of the Adobe Consulting blogs recently, you'll have seen us talk about the Presentation Model pattern. Another of our consultants, Paul Williams, covered this in his well received <a href="http://weblogs.macromedia.com/paulw/archives/2007/10/presentation_pa_3.html" target="external">series of Presentation Patterns</a> and I show how the Presentation Model fits in with the standard Cairngorm Data Flow.</p>

<p align="center">
<img src="http://weblogs.macromedia.com/amcleod/archives/images/Cairngorm_Data_Flow.gif" width="600" alt="Cairngorm Data Flow" />
</p>

<p><strong>2) Cairngorm Best Practices</strong></p>

<p>In the second section of the presentation, I provide some Adobe Consulting best practices for the use of Flex and Cairngorm, based on our many and varied engagements on mid to large scale enterprise applications.</p>

<p>The main topics covered are:</p>

<p>* Using the Presentation Model<br />
* Using the Model Locator<br />
* Events, Commands, Responders <br />
* Updating Views with Data</p>

<p>During the talk, I went into detail on the Presentation Model in particular, and how it addresses many of the common questions we hear on handling data in Flex applications.</p>

<p align="center">
<img src="http://weblogs.macromedia.com/amcleod/archives/images/PresentationModel.gif" alt="Presentation Model" width="600" />
</p>

<p>I also touched on unit testing with Cairngorm, Cairngorm and Modules, and Cairngorm and Data Management Services (part of LiveCycle Data Services).</p>

<p><strong>3) Cairngorm Myths and Anti-Patterns</strong></p>

<p>The presentation also gave me the opportunity to challenge a number of the misconceptions and misunderstandings I have seen on blog posts and architecture face-off discussions at conferences. I also spoke about some of the recurring mistakes we see people make when using Flex and Cairngorm. I covered the following:</p>

<p>* Do I Always Need to use a Framework?<br />
* Do I Need to use every Cairngorm Pattern?<br />
* Business Logic in Cairngorm Classes<br />
* Use of the ModelLocator<br />
* Use of Commands and Responders<br />
* Use of the Controller</p>

<p>I hope to find time to provide more details on these best practices and myths in future blog posts.</p>

<p>At Max San Francisco, Peter Martin also announced the launch of the <a href="http://opensource.adobe.com/wiki/display/cairngorm/plugin" target="external">Cairngorm Plugin for FlexBuilder</a> to allow the quick creation of FrontControllers, Events and Commands. The presentation ends with some details of that, and some road-map details.</p>

<p align="center">
<img src="http://weblogs.macromedia.com/amcleod/archives/images/CairngormPlugin.gif" alt="Cairngorm Plugin" />
</p>

<p>My Max Milan presentation can be found on Adobe acrobat.com, <a href="https://share.acrobat.com/adc/document.do?docid=bc5b2ad3-e2c4-4891-a6df-74ce010e9821">here</a>. You can download it via the Download link near the top-right of that page.</p>]]>
        
    </content>
</entry>

<entry>
    <title>FlexUnit on Adobe Open Source</title>
    <link rel="alternate" type="text/html" href="http://blogs.adobe.com/amcleod/archives/2008/08/flexunit_on_ado.html" />
    <id>tag:blogs.adobe.com,2008:/amcleod//356.17454</id>

    <published>2008-08-21T09:00:01Z</published>
    <updated>2009-07-19T05:56:40Z</updated>

    <summary> Following on from the news that Cairngorm has been moved to Adobe Open Source, it is my pleasure to announce that FlexUnit, the unit testing framework for Flex applications, now has a new home on Adobe Open Source. FlexUnit...</summary>
    <author>
        <name>Alistair McLeod</name>
        
    </author>
    
        <category term="Flex" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="FlexUnit" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.adobe.com/amcleod/">
        <![CDATA[<p><img alt="flexunit.jpg" src="http://weblogs.macromedia.com/amcleod/archives/images/flexunit.jpg" width="600" height="372" /></p>

<p>Following on from the news that <a href="http://weblogs.macromedia.com/amcleod/archives/2008/08/cairngorm_moved.html">Cairngorm has been moved to Adobe Open Source</a>, it is my pleasure to announce that FlexUnit, the unit testing framework for Flex applications, now has a new home on <a href="http://opensource.adobe.com/wiki/display/flexunit/">Adobe Open Source</a>.</p>

<p>FlexUnit started its life almost 5 years ago, when I first wrote <a href="http://www.flashmagazine.com/news/detail/as2unit" target="external">AS2Unit</a>; at that time, it home was the iteration::two website. FlexUnit was borne from that project, and was released shortly after Flex 1.0 in March 2004. </p>

<p>With the release of Flex 2, a team from Adobe Developer Relations migrated the framework to ActionScript 3 and gave it a new home on Adobe Labs. However, it was soon on its move again, and ended up on Google Code as a 0.85 release of as3flexunit.</p>

<p>Since that time, a number of bugs have been identified, and a number fixed, but there has been no real visibility of ownership; no-one has the responsibility to build and test and release new versions to the community and the 0.85 version is fast approaching 2 years old.</p>

<p>We see this move as bringing FlexUnit back to its Adobe home, where it can get the attention and care it deserves. </p>

<p>Adobe Open Source brings a number of benefits:</p>

<p>* Source available via a Source Control System (Subversion)<br />
* Availability of a bugbase for bugs and enhancement requests (JIRA)<br />
* Developer forums for the discussion of features and roadmap<br />
* Ability to submit code patches</p>

<p>Alongside this move, we've also taken the opportunity to do some bug fixes and have also add some new features to FlexUnit. The codebase for this release is based on revision 20 from Google Code. We realize that there have been a few subsequent changes made to that codebase since we had to branch to make our own bug fixes and enhancements, and we look to the community to reintegrate any of these changes, as necessary. We have chosen to go down this route rather than delay the release further.</p>

<p>The most visible set of changes to FlexUnit, and something you've probably already noticed from the screenshot above, is in the graphical test runner, designed by the User Experience team at Adobe Consulting.</p>

<p>Within the runner, we've added more information about the tests being run. We've provided the average number of asserts per test case, and also the number of asserts in each individual test case.</p>

<p><img alt="flexunit-summary.jpg" src="http://weblogs.macromedia.com/amcleod/archives/images/flexunit-summary.jpg" width="377" height="275" /></p>

<p>When tests do fail, we've extracted the failure information to make it clearer to the user, and, so long as you have compiled your tests with debug set to true, and are running with the debug flash player, you will also see the stack trace, to give that extra level of information not necessarily previously available.</p>

<p><img alt="flexunit-results.jpg" src="http://weblogs.macromedia.com/amcleod/archives/images/flexunit-results.jpg" width="428" height="409" /></p>

<p>Finally, you can now also filter your test results, for those larger projects where you have hundreds of test cases.</p>

<p>You can filter on individual test case names, test names, expected results or actual results, and also choose to see results based on all test cases, only those with errors or failures, or just empty test cases.</p>

<p><img alt="flexunit-filter.jpg" src="http://weblogs.macromedia.com/amcleod/archives/images/flexunit-filter.jpg" width="592" height="250" /></p>

<p>We are incredibly excited about this move, and look forward to the community getting involved through the submission of enhancement requests, code patches, documentation and taking part in the discussions around FlexUnit.</p>

<p>I was hoping to contact the project members of the existing as3flexunit project; unfortunately, Google Code does not let me easily identify the current members. So, if you wish to <a href="http://opensource.adobe.com/wiki/display/flexunit/Governance">contribute to the project</a>, please contact me.</p>

<p>The FlexUnit home page on Adobe Open Source can be found <a href="http://opensource.adobe.com/wiki/display/flexunit/">here</a>.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Cairngorm on Adobe Open Source - One Week On</title>
    <link rel="alternate" type="text/html" href="http://blogs.adobe.com/amcleod/archives/2008/08/open_source_cai.html" />
    <id>tag:blogs.adobe.com,2008:/amcleod//356.17453</id>

    <published>2008-08-14T09:20:46Z</published>
    <updated>2009-07-19T05:56:40Z</updated>

    <summary>So, Cairngorm has been on Adobe Open Source for over one week now, and I thought I&apos;d summarize what&apos;s happened since. It has been interesting to watch the community response to my announcement. To Adobe Consulting, this was a move...</summary>
    <author>
        <name>Alistair McLeod</name>
        
    </author>
    
        <category term="Cairngorm" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Flex" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.adobe.com/amcleod/">
        <![CDATA[<p>So, Cairngorm has been on <a href="http://opensource.adobe.com/wiki/display/cairngorm">Adobe Open Source</a> for over one week now, and I thought I'd summarize what's happened since.</p>

<p>It has been interesting to watch the community response to my <a href="http://weblogs.macromedia.com/amcleod/archives/2008/08/cairngorm_moved.html">announcement</a>. To Adobe Consulting, this was a move of an already open source project from Adobe Labs to Adobe Open Source, but while the response has been extremely positive, many of the reports read as if Cairngorm becoming open source was something new. </p>

<p>I guess this says something about our previous messaging, and the fact that the setup on Adobe Labs wasn't the same as Adobe Open Source, where we now a full <a href="http://opensource.adobe.com/wiki/display/cairngorm/Governance>governance</a> and have the <a href="http://opensource.adobe.com/wiki/display/cairngorm/Governance">source code</a> hosted on Subversion and available to all, rather than a single ZIP download of the source.</p>

<p>As i explained in my <a href="http://weblogs.macromedia.com/amcleod/archives/2008/08/cairngorm_moved.html">announcement</a>, we made a conscious decision not to add any new features in the process of the move. We did, however, provide the facility for community feedback, and already, we've had a good amount of involvement.</p>

<p>Over on the <a href="http://www.adobeforums.com/webx/.59b5b4de/">Cairngorm Forums</a>, we've had various discussions, including those on creating a test suite for Cairngorm, tooling support for Cairngorm within Flex Builder and how we should approach extending Cairngorm.</p>

<p>The <a href="http://bugs.adobe.com/jira/browse/CGM">Cairngorm Bugbase</a> has sprung into life too, and Christophe Herreman has already submitted patches containing some initial unit tests, alongside two other bug reports with patches. We've also had an enhancement request, for better support for Cairngorm with Flex Modules.</p>

<p>JIRA, on which the Cairngorm bugbase runs, has a voting facility, so please get invovled, and vote on the bugs and enhancement requests you think should be part of a future release.</p>

<p><b>What next?</b></p>

<p>A team from Adobe Consulting met on Monday of this week to discuss the Cairngorm roadmap, both in the short-term, to apply the patches provided and ensure Cairngorm is fully up to date with the latest releases of the Flex SDK, BlazeDS and LiveCycle Data Services, and also looking to the future, and Cairngorm 3.</p>

<p>We'll be socializing our thinking over the coming weeks</p>

<p>In the meantime, we encourage you to get involved in the discussions taking place on the <a href="http://www.adobeforums.com/webx/.59b5b4de/">forums</a> or to submit enhancement requests to the <a href="http://bugs.adobe.com/jira/browse/CGM">bugbase</a>.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Cairngorm Moved to Adobe Open Source</title>
    <link rel="alternate" type="text/html" href="http://blogs.adobe.com/amcleod/archives/2008/08/cairngorm_moved.html" />
    <id>tag:blogs.adobe.com,2008:/amcleod//356.17452</id>

    <published>2008-08-06T11:50:58Z</published>
    <updated>2009-07-19T05:56:40Z</updated>

    <summary>Adobe Consulting is pleased to announce that the Cairngorm Micro-architecture has moved onto Adobe Open Source. Its hard to believe that Cairngorm is approaching 4 years old - Steven and I announced it at the Max conference in New Orleans...</summary>
    <author>
        <name>Alistair McLeod</name>
        
    </author>
    
        <category term="Cairngorm" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Flex" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.adobe.com/amcleod/">
        <![CDATA[<p>Adobe Consulting is pleased to announce that the Cairngorm Micro-architecture has moved onto <a href="http://opensource.adobe.com/wiki/display/cairngorm" target="external">Adobe Open Source</a>. </p>

<p>Its hard to believe that Cairngorm is approaching 4 years old - <a href="http://weblogs.macromedia.com/swebster" target="external">Steven</a> and I announced it at the Max conference in New Orleans in October 2004 and the first version was released soon thereafter.</p>

<p>We've gone through a number of <a href="http://opensource.adobe.com/wiki/display/cairngorm/Downloads" target="external">different versions</a> since then, but each one has always held true our vision: <strong>Provide a lightweight MVC architectural framework around which to build Rich Internet Applications with Adobe Flex or Adobe AIR</strong>.</p>

<p>The latest version, <a href="http://opensource.adobe.com/wiki/display/cairngorm/Cairngorm+2.2.1+Release+Notes" target="external">Cairngorm 2.2.1</a>, was released back in October 2007 and, although we at Adobe Consulting consider that being a good reflection as to the maturity of the framework, there have been some questions on when the next release would be made available and what new features it would have, alongside some specific feature requests.</p>

<p>At Adobe Consulting, we've always had a minimalist approach to Cairngorm; we don't want to add feature for feature sake, add functionality that doesn't belong within an architectural framework, or introduce another design pattern into the mix because it's the latest fad in the software industry. The framework is there to allow us to build well-architected software solutions, and we've only ever added features we truly believe helps us do that. </p>

<p>There are no new features in this release - at this time we are simply moving Cairngorm 2.2.1 from Adobe Labs to Adobe Open Source.</p>

<p>However, we do listen to the community and to our customers, and this announcement is in response to this invaluable feedback. We hope that this launch will emphasize the commitment that Adobe has to the framework, and reinforce the message that the framework is the one that Adobe Consulting visibly advocates.</p>

<p>There are many benefits to having Cairngorm on Adobe Open Source. Alongside having a well defined home for downloading the framework, its documentation and samples, Adobe Open Source also provides additional resources one would expect of an open source project:</p>

<p>* Source available via a Source Control System (Subversion)<br />
* Availability of a bugbase for bugs and enhancement requests (JIRA)<br />
* Developer forums for the discussion of features and roadmap<br />
* Ability to submit code patches</p>

<p>Alongside this move, we are also introducing a level of <a href="http://opensource.adobe.com/wiki/display/cairngorm/Governance" target="external">governance</a>, a charter that explains how the Cairngorm project will be managed, and how leaders in the Flex community can <a href="http://opensource.adobe.com/wiki/display/cairngorm/Roles" target="external">get involved</a> in the project.</p>

<p>We are also extending an open invitation to the community to <a href="https://bugs.adobe.com/jira/browse/cgm" target="external">submit bugs or feature requests</a> and take part in the <a href="http://www.adobeforums.com/webx/.59b5b4de/" target="external">Cairngorm discussion forums</a>. </p>

<p>The community has read-only access to the <a href="http://opensource.adobe.com/wiki/display/cairngorm/Get+Source+Code" target="external">Cairngorm source code</a> by default, and contributors will also be able to <a href="http://opensource.adobe.com/wiki/display/cairngorm/Submitting+a+Patch" target="external">submit code patches</a>.</p>

<p>We are incredibly excited about this move, and look forward to the community getting involved in the framework, through the submission of enhancement requests, sample applications, code patches, documentation and taking part in the discussions on the future direction of Cairngorm.</p>

<p>The Cairngorm home page on Adobe Open Source can be found <a href="http://opensource.adobe.com/wiki/display/cairngorm" target="external">here</a>.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Cairngorm - Commands and Responders</title>
    <link rel="alternate" type="text/html" href="http://blogs.adobe.com/amcleod/archives/2007/11/cairngorm_comma.html" />
    <id>tag:blogs.adobe.com,2007:/amcleod//356.17451</id>

    <published>2007-11-14T10:14:09Z</published>
    <updated>2009-07-19T05:56:40Z</updated>

    <summary>Recently, I&apos;ve seen a few questions around Cairngorm and how commands and responders fit together when using asynchronous services with Flex. I&apos;d like to clarify a couple of points. A Command need only implement the Flex IResponder interface if it...</summary>
    <author>
        <name>Alistair McLeod</name>
        
    </author>
    
        <category term="Cairngorm" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Flex" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.adobe.com/amcleod/">
        <![CDATA[<p>Recently, I've seen a few questions around Cairngorm and how commands and responders fit together when using asynchronous services with Flex. I'd like to clarify a couple of points.</p>

<p><b>A Command need only implement the Flex IResponder interface if it is to be the responder for an asynchronous service call.</b></p>

<p>This is probably obvious to many, but I've seen Command classes which implement IResponder, but don't do any ansychrnous service calls and have empty result() and fault() methods. In this cases, the Command should implement the ICommand interface only and not the IResponder interface.<p>

<p><b>The Command class does not have to be the responder for asychronous service calls.</b></p>

<p>I've not seen many implementations like this, but the Cairngorm command pattern is designed in such a way that your responder can be an instance of another class, as in this example:</p>

<pre>
public class AddTaskCommand implements Command
{   
  public function execute( event : CairngormEvent ):void 
  {
    var addTaskEvent : AddTaskEvent = event as AddTasksEvent;
    var task : Task = addTaskEvent.task;

    var addTaskResponder : AddTaskResponder = new AddTaskResponder( task );
    var delegate : TaskDelegate = new TaskDelegate( addTaskResponder );
         
    delegate.addTask( task );                  
  }
}
</pre>
<br>
<pre>
public class AddTaskResponder implements IResponder
{
  private var task : Task;
   
  public function AddTaskResponder( task : Task )
  {
    this.task = task;
  }

  public function result( event : Object ):void 
  {
    //handle the result here
  }

  public function fault( event : Object ):void 
  {
    //handle the fault here
  }
}
</pre>
<p>This implementation allows better separation of logic and potential reuse of responders, and also makes things easier to test.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Cairngorm 2.2.1 Released</title>
    <link rel="alternate" type="text/html" href="http://blogs.adobe.com/amcleod/archives/2007/10/cairngorm_221_r.html" />
    <id>tag:blogs.adobe.com,2007:/amcleod//356.17450</id>

    <published>2007-10-08T16:23:33Z</published>
    <updated>2009-07-19T05:56:40Z</updated>

    <summary>After a few months of being in beta, Cairngorm 2.2.1 for Flex has been released on Adobe Labs. There is nothing new in this release over previous releases; it&apos;s only purpose is to align Cairngorm with the moving of SWC...</summary>
    <author>
        <name>Alistair McLeod</name>
        
    </author>
    
        <category term="Cairngorm" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Flex" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.adobe.com/amcleod/">
        <![CDATA[<p>After a few months of being <a href="http://weblogs.macromedia.com/amcleod/archives/2007/05/new_release_-_c.cfm">in beta</a>, Cairngorm 2.2.1 for Flex has been <a href="http://labs.adobe.com/wiki/index.php/Cairngorm:Cairngorm2.2.1:Release_Notes">released on Adobe Labs</a>.</p>

<p>There is nothing new in this release over previous releases; it's only purpose is to align Cairngorm with the moving of SWC libraries in Flex 2.0.1 with Hotfix 2 and LiveCycle Data Services 2.5.x.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Flex Scheduling Framework - Now on FlexLib</title>
    <link rel="alternate" type="text/html" href="http://blogs.adobe.com/amcleod/archives/2007/06/flex_scheduling_2.html" />
    <id>tag:blogs.adobe.com,2007:/amcleod//356.17449</id>

    <published>2007-06-29T14:35:07Z</published>
    <updated>2009-07-19T05:56:40Z</updated>

    <summary>The Flex Scheduling Framework, previously on Adobe Labs, now has a new home, as part of the FlexLib project on Google Code. The Flex Scheduling Framework was borne out of Adobe Consulting engagements, as is not part of the Flex...</summary>
    <author>
        <name>Alistair McLeod</name>
        
    </author>
    
        <category term="Flex" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.adobe.com/amcleod/">
        <![CDATA[<p>The Flex Scheduling Framework, previously on Adobe Labs, now has a new home, as part of the <a href="http://code.google.com/p/flexlib/">FlexLib</a> project on Google Code.</p>

<p>The Flex Scheduling Framework was borne out of Adobe Consulting engagements, as is not part of the Flex SDK. As such, maintenance and bug fixes were mainly community led, with Adobe Consulting staff members spending their own time to apply any fixes.</p>

<p>The latest release on FlexLib includes a number of bug fixes when compared to the original version that appeared on Adobe Labs. I'd like to give a thanks to those people who identified bugs and submitted fixes, and to <a href="http://weblogs.macromedia.com/auhlmann">Alex Uhlmann</a> who applied those fixes, and some of his own, to the framework before we handed it over to FlexLib.</p>

<p>FlexLib contains a full source code repository, so if you want to see any new features as part of the Flex Scheduling Framework, download the source and submit your proposed changes back, for inclusion in the code repository and subsequent framework builds.</p>

<p>The full set of ASDocs for the Flex Scheduling Framework can be found on FlexLib, but other content is quite light on Flex Lib at present - we will migrate the <a href="http://labs.adobe.com/wiki/index.php/Flex_Scheduling_Framework">Adobe Labs</a> content to FlexLib over time.</p>

<p>As always, your feedback is welcome.</p>]]>
        
    </content>
</entry>

<entry>
    <title>New Release - Cairngorm 2.2.1 for Flex 2.0.1 with Hotfix 2</title>
    <link rel="alternate" type="text/html" href="http://blogs.adobe.com/amcleod/archives/2007/05/new_release_-_c.html" />
    <id>tag:blogs.adobe.com,2007:/amcleod//356.17447</id>

    <published>2007-05-30T12:13:20Z</published>
    <updated>2009-07-19T05:56:40Z</updated>

    <summary>I posted last Friday about the release of Hotfix 2 for Flex 2.0.1, and how the moving of classes between the core Flex SDK and LiveCycle Data Services was causing a compiler error unless you had fds.swc on your library...</summary>
    <author>
        <name>Alistair McLeod</name>
        
    </author>
    
        <category term="Cairngorm" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Flex" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.adobe.com/amcleod/">
        <![CDATA[<p>I <a href="http://weblogs.macromedia.com/amcleod/archives/2007/05/flex_201_hotfix.cfm">posted last Friday</a> about the release of Hotfix 2 for Flex 2.0.1, and how the moving of classes between the core Flex SDK and LiveCycle Data Services was causing a compiler error unless you had fds.swc on your library path.</p>

<p>The fix at that time was to include fds.swc on your library path, even if you did not use or need LiveCycle Data Services 2.5.</p>

<p>I've now created a new build of Cairngorm and Cairngorm Enterprise that is aligned with the new packaging of Flex 2.0.1 with Hotfix 2 applied and with LiveCycle Data Services 2.5. This packaging should also work for standard Flex 2.0.1 installations.</p>

<p>I've had to put this package together quite quickly and full testing hasn't taken place, so this release is a Beta for now.</p>

<p>The only change in this release is the moving of the Consumer and Producer service locator methods from the base Cairngorm <code>ServiceLocator</code> into the Cairngorm Enterprise <code>EnterpriseServiceLocator</code> class.</p>

<p>You can download the packages here:</p>
<ul>

<li><a href="http://weblogs.macromedia.com/amcleod/archives/downloads/cairngorm/Cairngorm2_2_1Beta-bin.zip">Cairngorm 2.2.1 Beta Binary (SWC)</a>
<li><a href="http://weblogs.macromedia.com/amcleod/archives/downloads/cairngorm/Cairngorm2_2_1Beta-src.zip">Cairngorm 2.2.1 Beta Source</a>
<li><a href="http://weblogs.macromedia.com/amcleod/archives/downloads/cairngorm/Cairngorm2_2_1Beta-doc.zip">Cairngorm 2.2.1 Beta Documentation</a>

<li><a href="http://weblogs.macromedia.com/amcleod/archives/downloads/cairngorm/CairngormEnterprise2_2_1Beta-bin.zip">Cairngorm Enterprise 2.2.1 Beta Binary (SWC)</a>
<li><a href="http://weblogs.macromedia.com/amcleod/archives/downloads/cairngorm/CairngormEnterprise2_2_1Beta-src.zip">Cairngorm Enterprise 2.2.1 Beta Source</a>
<li><a href="http://weblogs.macromedia.com/amcleod/archives/downloads/cairngorm/CairngormEnterprise2_2_1Beta-doc.zip">Cairngorm Enterprise 2.2.1 Beta Documentation</a>
</ul>
<p>I've leave these package on this blog for now, until feedback has been received, and then I'll get them moved over onto the <a href="http://www.adobe.com/go/cairngorm">Cairngorm page on Adobe Labs</a>.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Flex 2.0.1 Hotfix 2 and Cairngorm</title>
    <link rel="alternate" type="text/html" href="http://blogs.adobe.com/amcleod/archives/2007/05/flex_201_hotfix.html" />
    <id>tag:blogs.adobe.com,2007:/amcleod//356.17446</id>

    <published>2007-05-25T16:06:30Z</published>
    <updated>2009-07-19T05:56:40Z</updated>

    <summary>Flex 2.0.1 Hotfix 2 has been released today, containing a collection of Flex 2.0.1 bug fixes. As part of this release, some classes, which are not required as part of the core SDK, have been moved into Flex Data Services...</summary>
    <author>
        <name>Alistair McLeod</name>
        
    </author>
    
        <category term="Cairngorm" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Flex" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.adobe.com/amcleod/">
        <![CDATA[<p>Flex 2.0.1 Hotfix 2 has been <a href="http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=kb401825">released today</a>, containing a collection of Flex 2.0.1 bug fixes.</p>

<p>As part of this release, some classes, which are not required as part of the core SDK, have been moved into Flex Data Services (FDS), now rebranded LiveCycle Data Services 2.5 (LCDS 2.5) and newly released.</p>

<p>However, because the ServiceLocator class of <a href="http://www.adobe.com/go/cairngorm">Cairngorm</a> has a soft reference onto the Flex framework's Consumer class, applying Hotfix 2 will cause the following compiler error in your Cairngorm application, unless you have fds.swc on your classpath.</p>
<pre>1046: Type was not found or was not a compile-time constant: Consumer.</pre>

<p>We will be releasing another version of Cairngorm and Cairngorm Enterprise, which will align themselves with the new class locations in Hotfix 2, and also be compatible with the standard Flex 2.0.1 release. In the meantime, if you update to Hotfix 2 or switch to LiveCycle Data Services 2.5, ensure you have fds.swc on your classpath. You can get this from the new LiveCycle Data Services 2.5 release.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Cairngorm 2.2 - Cairngorm Enterprise</title>
    <link rel="alternate" type="text/html" href="http://blogs.adobe.com/amcleod/archives/2007/05/cairngorm_22_-_2.html" />
    <id>tag:blogs.adobe.com,2007:/amcleod//356.17444</id>

    <published>2007-05-17T13:40:28Z</published>
    <updated>2009-07-19T05:56:40Z</updated>

    <summary>In today&apos;s post about the recent release of Cairngorm 2.2, I&apos;ll give the reasoning behind the most obvious change made to the distrubution of the framework - the splitting of it into two parts, Cairngorm and Cairngorm Enterprise. The main...</summary>
    <author>
        <name>Alistair McLeod</name>
        
    </author>
    
        <category term="Cairngorm" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Flex" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.adobe.com/amcleod/">
        <![CDATA[<p>In today's post about the recent release of <a href="http://weblogs.macromedia.com/amcleod/archives/2007/04/cairngorm_22_re.cfm">Cairngorm 2.2</a>, I'll give the reasoning behind the most obvious change made to the distrubution of the framework - the splitting of it into two parts, Cairngorm and Cairngorm Enterprise.</p>

<p>The main reason for the change at this time was to remove Cairngorm's dependancy, introduced in Cairngorm 2.1, on the Flex Data Management Services library, fds.swc. This dependency forced developers to download Flex Data Services, even if they were using Cairngorm with a relatively simple applications that used RemoteObject, HTTPService or WebService only.</p>

<p><a href="http://en.wikipedia.org/wiki/Mea_culpa">Mea culpa</a>, as they once said.</p> 

<p>However, this change also hints at the longer term roadmap view of where Cairngorm is heading.</p>

<p>Our vision is that Cairngorm will have a core framework, which mid-sized applications will use. Alongside that, we foresee the need for a set of additional modules, for use in enterprise-scale applications.</p>

<p>These modules will contain repeatable, best-practice solutions to common application problems and will address areas such as:</p>
<ul>
<li>Extended support for Flex Data Management Services
<li>Extended support for Flex Messaging Services
<li>Platform specific module for Apollo
<li>Product specific module for LiveCycle Enterprise Suite
<li>Security and authentication modules
<li>Others we haven't thought about yet
</ul>

<p>The modules could vary in architecture, from a simple set of command, delegate and service definitions, or even some server side Java code (eg, for LiveCycle ES), through to new sets of classes that implement the common patterns we see emerging in our solutions.</p>

<p>We expect the modules to surface as best practices out of our day-to-day consulting work, rather than by us attempting to determine the solutions upfront. As such, we cannot commit to any specific date for any new features, but we can say that they will remain free and open-source.</p>

<p>As always, we welcome your feedback on our thoughts.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Cairngorm 2.2 - Front Controller Weak References</title>
    <link rel="alternate" type="text/html" href="http://blogs.adobe.com/amcleod/archives/2007/05/cairngorm_22_-_1.html" />
    <id>tag:blogs.adobe.com,2007:/amcleod//356.17441</id>

    <published>2007-05-03T10:16:14Z</published>
    <updated>2009-07-19T05:56:40Z</updated>

    <summary>In a continuation on my series of posts covering the recent Cairngorm 2.2 release, today I&apos;ll give the motivation behind another one of the changes that we made in the MVC micro-architecture for Flex: weak references in the front controller....</summary>
    <author>
        <name>Alistair McLeod</name>
        
    </author>
    
        <category term="Cairngorm" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Flex" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.adobe.com/amcleod/">
        <![CDATA[<p>In a continuation on my series of posts covering the recent <a href="http://weblogs.macromedia.com/amcleod/archives/2007/04/cairngorm_22_re.cfm">Cairngorm 2.2 release</a>,  today I'll give the motivation behind another one of the changes that we made in the MVC micro-architecture for Flex: weak references in the front controller. </p>

<p>In <a href="http://labs.adobe.com/wiki/index.php/Cairngorm%3ACairngorm2.1%3ARelease_Notes">Cairngorm 2.1</a>, the base FrontController class added itself as a listener onto the CairngormEventDispatcher as follows:</p>
<p>
<pre>
CairngormEventDispatcher.getInstance().addEventListener( commandName, executeCommand );


</pre>
</p>
<p>meaning that, when Cairngorm events are dispatched at various places throughout the Flex application, the controller would be notified, and the executeCommand() method called. However, the line of code above added the controller to the CairngormEventDispatcher as a hard reference, meaning that the controller would never be eligible for garbage collection while the CairngormEventDispatcher was still in memory. </p>

<p>Fast forward to the release of Flex 2.0.1 and the addition of Module support to the Flex framework. This feature gives us the ability to load and unload parts of our application, dynamically, at runtime. With Cairngorm 2.1, if someone wanted to create a Cairngorm application as a module, even if that module is unloaded, the controller would never be eligible for garbage collection because the CairngormEventDispatcher (which is a singleton, and therefore global) still has a hard reference onto it.</p>
  <p>So, in Cairngorm 2.2, we have made, by default, the addition of the controller to the CairngormEventDispatcher as a weak reference. Holding objects as weak references means that the object will be eligible for garbage collection if the only references to it are weak. </p>
  <p>Now, when the FrontController is unloaded, and assuming that all other hard references to it have also been removed, the controller will be eligible for garbage collection, because the CairngormEventDispatcher only has a weak reference onto it.</p>
  <p>You can still decided to add the controller as a hard reference to the CairngormEventDispatcher, via a parameter of the addCommand() method of FrontController, but I see little need for that. </p>
  <p>There is one final point to add here. The ASDoc for the addCommand() method of FrontController states that the command is added as a weak reference to the controller. That is just plain wrong and I hold my hand up to that - the comments were added in a rush just before I did the final build, instead of when I did the code change. The docs will be fixed in the next release.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Cairngorm 2.2 - Self Dispatching Events</title>
    <link rel="alternate" type="text/html" href="http://blogs.adobe.com/amcleod/archives/2007/05/cairngorm_22_-.html" />
    <id>tag:blogs.adobe.com,2007:/amcleod//356.17440</id>

    <published>2007-05-01T11:09:30Z</published>
    <updated>2009-07-19T05:56:40Z</updated>

    <summary>Cairngorm 2.2, the latest version of the Flex micro-architecture, released on Friday, was a fairly minor release with just a few new features and minor fixes. However, I thought it would be worthwhile for me to document the motivation behind...</summary>
    <author>
        <name>Alistair McLeod</name>
        
    </author>
    
        <category term="Cairngorm" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Flex" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.adobe.com/amcleod/">
        <![CDATA[<p>Cairngorm 2.2, the latest version of the Flex micro-architecture, <a href="http://weblogs.macromedia.com/amcleod/archives/2007/04/cairngorm_22_re.cfm">released on Friday</a>, was a fairly minor release with just a few new features and minor fixes.</p>

<p>However, I thought it would be worthwhile for me to document the motivation behind some of the <a href="http://labs.adobe.com/wiki/index.php/Cairngorm:Cairngorm2.1:Release_Notes#Changes_between_Cairngorm_2.1_and_Cairngorm_2">changes</a>.</p>

<p>Today, I'll give a quick overview of self-dispatching events, which were added to the 2.2 release.</p>

<p>With Cairngorm versions up to and including 2.1, to dispatch an event that would be handled by your controller, you had to do the something like this:</p>

<pre>var loginEvent : LoginEvent = new LoginEvent( username, password );
CairngormEventDispatcher.getInstance().dispatchEvent( loginEvent );</pre>

<p>If you had many events in your application, this became a pretty long-winded way of doing something as simple as dispatching an event.</p>

<p>With Cairngorm 2.2, we've added a helper method to CairngormEvent, which all your controller events should extend. Now, you can do the following:</p>

<pre>var loginEvent : LoginEvent = new LoginEvent( username, password );
loginEvent.dispatch();</pre> <p>Or even:</p> 
<pre>new LoginEvent( username, password ).dispatch();</pre>

<p>Its a matter of personal style on which of these two you prefer, but they both give much more clarity to your code and (more importantly for some) need less typing.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Cairngorm 2.2 Released</title>
    <link rel="alternate" type="text/html" href="http://blogs.adobe.com/amcleod/archives/2007/04/cairngorm_22_re.html" />
    <id>tag:blogs.adobe.com,2007:/amcleod//356.17439</id>

    <published>2007-04-30T15:31:55Z</published>
    <updated>2009-07-19T05:56:39Z</updated>

    <summary>The beta version of Cairngorm 2.2 for Flex has been kicking around for some time now, and, on Friday, I eventually got around to getting the release version up on Adobe Labs. You can read the release notes here. The...</summary>
    <author>
        <name>Alistair McLeod</name>
        
    </author>
    
        <category term="Cairngorm" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Flex" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.adobe.com/amcleod/">
        <![CDATA[<p>The beta version of Cairngorm 2.2 for Flex has been kicking around for some time now, and, on Friday, I eventually got around to getting the release version up on Adobe Labs. You can read the release notes <a href="http://labs.adobe.com/wiki/index.php/Cairngorm:Cairngorm2.2:Release_Notes">here</a>.</p>

<p>The main change in this release is the externalisation of dependencies on the Flex Data Services library (fds.swc) to a separate set of downloads called <a href="http://labs.adobe.com/wiki/index.php/Cairngorm:Cairngorm2.2:Release_Notes#What_is_Cairngorm_Enterprise">Cairngorm Enterprise</a>.</p>

<p>The full list of changes in this release are as follows:
<ul>
<li>Removed dependency on Flex Data Services (fds.swc) - externalised to Cairngorm Enterprise 
<li>Flex SDK SWCs are no longer linked into Cairngorm.swc (produces a smaller Cairngorm.swc) 
<li>Added support for setting remote credentials 
<li>Fixed bug with Web services not loading the WSDL (no need to call loadWSDL() explicitly) 
<li>ModelLocator interface has been deprecated. Added com.adobe.cairngorm.model.IModelLocator 
<li>Added deprecation metadata for compiler support 
<li>Added dispatch() helper method to CairngormEvent class 
<li>Commands are now added to base Controller with weak references 
<li>Added removeCommand to FrontController 
<li>Made commands instance variable protected in FrontController (was private) 
</ul>

<p>If you want a more general overview on what Cairngorm is, and what it can do for you, visit the <a href="http://www.adobe.com/go/cairngorm">Cairngorm page on Adobe Labs</a>.</p>

<p>I'll give the motivation behind many of these changes in future blog posts.</p>]]>
        
    </content>
</entry>

<entry>
    <title>FlexCoders Posting Volumes - Latest Figures</title>
    <link rel="alternate" type="text/html" href="http://blogs.adobe.com/amcleod/archives/2007/02/flexcoders_post_1.html" />
    <id>tag:blogs.adobe.com,2007:/amcleod//356.17438</id>

    <published>2007-02-01T13:46:31Z</published>
    <updated>2009-07-19T05:56:39Z</updated>

    <summary>Back in September 2006, I posted a graph which showed the meteoric rise in the number of posts to the Flex maling list, FlexCoders. A few months on, I thought it was time to post an updated graph. Here it...</summary>
    <author>
        <name>Alistair McLeod</name>
        
    </author>
    
        <category term="Flex" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.adobe.com/amcleod/">
        <![CDATA[<p>Back in September 2006, I posted <a href="http://weblogs.macromedia.com/amcleod/archives/2006/09/flexcoders_post.cfm">a graph</a> which showed the meteoric rise in the number of posts to the Flex maling list, <a href="http://www.flexcoders.org">FlexCoders</a>.
<p>A few months on, I thought it was time to post an updated graph. Here it is:</p>
<p>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
id="swf" width="490" height="500" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">
<param name="movie" value="http://weblogs.macromedia.com/amcleod/archives/swfs/FlexCodersPostsJan07.swf" />
<param name="quality" value="high" />
<param name="allowScriptAccess" value="sameDomain" />
<embed src="http://weblogs.macromedia.com/amcleod/archives/swfs/FlexCodersPostsJan07.swf" quality="high" width="490" height="500" name="swf" align="middle"	play="true" loop="false" quality="high" allowScriptAccess="sameDomain"	type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">
</embed>
</object>
</p>

<p>You can see that July 2006 was a particularly strong month for growth, and that although there are expected variances (eg, over the festive period), there is still a feverish amount of activity surrounding Flex.</p>

<p>I'll post another update in a few months time.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Flex Automation (My Max Talk)</title>
    <link rel="alternate" type="text/html" href="http://blogs.adobe.com/amcleod/archives/2007/01/flex_automation.html" />
    <id>tag:blogs.adobe.com,2007:/amcleod//356.17437</id>

    <published>2007-01-19T10:23:15Z</published>
    <updated>2009-07-19T05:56:39Z</updated>

    <summary>Its been brought to my attention that I never got around to posting the presentation slides from my Max talk in Las Vegas last year. The talk was on Flex Automation, and covered, amongst other things, Automatic Build Systems, the...</summary>
    <author>
        <name>Alistair McLeod</name>
        
    </author>
    
        <category term="Flex" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.adobe.com/amcleod/">
        <![CDATA[<p>Its been brought to my attention that I never got around to posting the presentation slides from my Max talk in Las Vegas last year. The talk was on Flex Automation, and covered, amongst other things, Automatic Build Systems, the Automation of Flex Unit Testing and Flex Functional Testing with Mercury Quick Test Pro and the Flex QTP Plugin (which was then in beta, but has since been released as part of Flex 2.0.1).</p>
  <p>The presentation can be downloaded from <a href="http://weblogs.macromedia.com/amcleod/archives/downloads/FlexAutomation.pdf" target="_blank">here</a>. I hope someone finds it useful. </p>
  <p>Some of what is covered in the presentation has been augmented by the work Peter Martin from the EMEA Consulting group has done on his blog. In particular, if you want to keep up to date with the work we're doing on testing and continuous integration, keep an eye on <a href="http://weblogs.macromedia.com/pmartin">his blog</a>. <br/>
    </p>]]>
        
    </content>
</entry>

</feed>
