<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-2814003665874097395</id><updated>2009-12-06T03:38:21.538-07:00</updated><title type='text'>Adam Flater - Flex Blog</title><subtitle type='html'>Flex/RIA Software Architect</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://adamflater.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default'/><link rel='alternate' type='text/html' href='http://adamflater.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default?start-index=26&amp;max-results=25'/><author><name>Adam Flater</name><uri>http://www.blogger.com/profile/18224648613573489463</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>73</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2814003665874097395.post-1756626072689552163</id><published>2009-10-25T13:59:00.004-06:00</published><updated>2009-10-25T15:02:00.078-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='merapi'/><category scheme='http://www.blogger.com/atom/ns#' term='excel'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='bflex'/><title type='text'>Merapi Session from BFlex</title><content type='html'>&lt;p&gt;Today was the Flex portion of the &lt;a target="_blank" href="http://bflex.info/"&gt;BFusion/BFlex&lt;/a&gt; here in Bloomington, IN. I presented on integration native code in Flex with Merapi here at Indiana University. The main example we worked through involved automating Excel in Flex using Merapi .NET. The code for the example is checked into our Merapi Example repository. I thought a short screen cast might be helpful as well.&lt;/p&gt;&lt;p&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/vfCIfpZ88qA&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/vfCIfpZ88qA&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;p&gt;This example was developed using Flex 4 and Merapi .NET in C#. You'll need the &lt;a target="_blank" href="http://labs.adobe.com/technologies/flashbuilder4/&lt;br /&gt;"&gt;Flash Builder 4 beta&lt;/a&gt; to build the Flex code and &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/vstudio/aa700831.aspx"&gt;Visual Studio 2008&lt;/a&gt; to play with the C# code. However, if you'd like to skip that part, you can download the binary for the C# portion from &lt;a target="_blank" href="http://merapi-examples.googlecode.com/svn/trunk/excelautomation/excelautomation-cs/Excel-CS/bin/Debug/Excel-CS.exe"&gt;here&lt;/a&gt; and just run it from the command line.&lt;/p&gt;&lt;br /&gt;Additional resources:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" href="http://merapi-examples.googlecode.com/svn/trunk/excelautomation/excelautomation-flex/bin-release/srcview/index.html"&gt;HTML view of the Flex code&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" href="http://merapi-examples.googlecode.com/svn/trunk/excelautomation/excelautomation-cs/srcview/"&gt;HTML view of the C# code&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" href="http://code.google.com/p/merapi-examples/source/browse/#svn/trunk/excelautomation"&gt;The Google Code repo&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Thanks to Bob and everyone involved with &lt;a taget="_blank" href="http://bflex.info/"&gt;BFlex&lt;/a&gt; for having me speak and putting on a great event.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2814003665874097395-1756626072689552163?l=adamflater.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamflater.blogspot.com/feeds/1756626072689552163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2814003665874097395&amp;postID=1756626072689552163' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/1756626072689552163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/1756626072689552163'/><link rel='alternate' type='text/html' href='http://adamflater.blogspot.com/2009/10/merapi-session-from-bflex.html' title='Merapi Session from BFlex'/><author><name>Adam Flater</name><uri>http://www.blogger.com/profile/18224648613573489463</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18368920800186724726'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2814003665874097395.post-1201760083370884780</id><published>2009-09-13T18:20:00.009-06:00</published><updated>2009-09-13T19:00:58.327-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flexlib'/><category scheme='http://www.blogger.com/atom/ns#' term='fxg'/><category scheme='http://www.blogger.com/atom/ns#' term='flex charts'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 3'/><category scheme='http://www.blogger.com/atom/ns#' term='flex 4'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='Degrafa'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>New to flexlib: CSSPropertyInjector</title><content type='html'>&lt;p&gt;As my first contribution to &lt;a target="_blank" href="http://flexlib.googlecode.com/"&gt;flexlib&lt;/a&gt; I've been developing a utility class called "&lt;a target="_blank" href="http://code.google.com/p/flexlib/source/browse/trunk/src/flexlib/css/CSSPropertyInjector.as"&gt;CSSPropertyInjector&lt;/a&gt;". The &lt;a target="_blank" href="http://code.google.com/p/flexlib/source/browse/trunk/src/flexlib/css/CSSPropertyInjector.as"&gt;CSSPropertyInjector&lt;/a&gt; class is used to apply styles from CSS to an Object that has properties that are not stylable or on Objects that are generally not stylable. Another nice feature of &lt;a target="_blank" href="http://code.google.com/p/flexlib/source/browse/trunk/src/flexlib/css/CSSPropertyInjector.as"&gt;CSSPropertyInjector&lt;/a&gt; is the ability to specify multiple styleNames. This util will also allow multiple style selectors. The basic idea is that you bind a target object to the injector and set a styleName value. Given those two properties are set, the injector will automatically set styles or properties on the target object. Granted, it is possible to do a lot of stuff with this util that are questionable in terms of best practices, but it does give the option to apply styles to objects that never had the option in the past. So, without delay, on to examples.&lt;/p&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Flex 3 with multiple selectors:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090913_Flex_3_CSSPropertyInjectory_Examples/bin-release/Flex3MultipleSelectorsExample/Flex3MultipleSelectorsExample.html"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 235px; height: 320px;" src="http://2.bp.blogspot.com/_h4sLtL2cd8A/Sq2M3ywj9mI/AAAAAAAAAHw/4bOCYG5JZXs/s320/multSelect.png" alt="" id="BLOGGER_PHOTO_ID_5381112019923760738" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090913_Flex_3_CSSPropertyInjectory_Examples/bin-release/Flex3MultipleSelectorsExample/Flex3MultipleSelectorsExample.html"&gt;View the Application&lt;/a&gt; | &lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090913_Flex_3_CSSPropertyInjectory_Examples/bin-release/Flex3MultipleSelectorsExample/srcview/index.html"&gt;View the Source&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;This example shows how powerful CSS can be with the ability to apply multiple selectors to each component. Each style is used generically and applied to a component regardless of the component's type. So, we're able to share a "redBorder" selector between button1, innerBox, and button2 without adding unique styles about the button's text colors, padding, etc to the "redBorder" selector.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Degrafa skin with styled elements:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090913_Flex_3_CSSPropertyInjectory_Examples/bin-release/Flex3StyledDegrafaExample/Flex3StyledDegrafaExample.html"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 252px; height: 239px;" src="http://2.bp.blogspot.com/_h4sLtL2cd8A/Sq2NqVHNoII/AAAAAAAAAH4/3IcIlzmMJ2A/s320/degrafa.png" alt="" id="BLOGGER_PHOTO_ID_5381112888139030658" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090913_Flex_3_CSSPropertyInjectory_Examples/bin-release/Flex3StyledDegrafaExample/Flex3StyledDegrafaExample.html"&gt;View the Application&lt;/a&gt; | &lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090913_Flex_3_CSSPropertyInjectory_Examples/bin-release/Flex3StyledDegrafaExample/srcview/index.html"&gt;View the Source&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;This example shows a simple Degrafa circle with it's style properties (color, angle, alpha) abstracted into CSS. From a skinning perspective the lack of styles in Degrafa has always been just a little annoying for me. On large, enterprise applications it is essential to create conventional approaches to tasks performed throughout the app. Skinning is one of these tasks. Without the support of CSS, styling a Degrafa skin is much different than styling a halo skin, but now with the &lt;a target="_blank" href="http://code.google.com/p/flexlib/source/browse/trunk/src/flexlib/css/CSSPropertyInjector.as"&gt;CSSPropertyInjector&lt;/a&gt; util a similar styling approach can be taken with both skins types.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Flex Chart with styled elements:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090913_Flex_3_CSSPropertyInjectory_Examples/bin-release/Flex3StyledChartExample/Flex3StyledChartExample.html"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 297px;" src="http://3.bp.blogspot.com/_h4sLtL2cd8A/Sq2Obb0S5sI/AAAAAAAAAIA/-Bb7LPGZuBE/s320/chart.png" alt="" id="BLOGGER_PHOTO_ID_5381113731752322754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090913_Flex_3_CSSPropertyInjectory_Examples/bin-release/Flex3StyledChartExample/Flex3StyledChartExample.html"&gt;View the Application&lt;/a&gt; | &lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090913_Flex_3_CSSPropertyInjectory_Examples/bin-release/Flex3StyledChartExample/srcview/index.html"&gt;View the Source&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;Another painful set of elements to style is the Flex Charting Framework. In this example you'll see that the color and weight of stroke of the LineSeries is styled using CSS.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Flex 4 FXG with styled elements:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090913_Flex_4_CSSPropertyInjectory_Example/bin-release/Flex4CSSPropertyInjectoryExample.html"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 63px;" src="http://1.bp.blogspot.com/_h4sLtL2cd8A/Sq2O41VavYI/AAAAAAAAAII/YpU_4J2oRpo/s320/flex4.png" alt="" id="BLOGGER_PHOTO_ID_5381114236818341250" border="0" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090913_Flex_4_CSSPropertyInjectory_Example/bin-release/Flex4CSSPropertyInjectoryExample.html"&gt;View the Application&lt;/a&gt; | &lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090913_Flex_4_CSSPropertyInjectory_Example/bin-release/srcview/index.html"&gt;View the Source&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;FXG is similar to Degrafa and easily styled using &lt;a target="_blank" href="http://code.google.com/p/flexlib/source/browse/trunk/src/flexlib/css/CSSPropertyInjector.as"&gt;CSSPropertyInjector&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;So, this is a start for &lt;a target="_blank" href="http://code.google.com/p/flexlib/source/browse/trunk/src/flexlib/css/CSSPropertyInjector.as"&gt;CSSPropertyInjector&lt;/a&gt;. It's checked into &lt;a target="_blank" href="http://flexlib.googlecode.com/"&gt;flexlib&lt;/a&gt; and ready for you to play with. I look forward to your feedback on making this a complete addition to &lt;a target="_blank" href="http://flexlib.googlecode.com/"&gt;flexlib&lt;/a&gt;. Please feel free to leave a comment on this post, e-mail me directly, or comment in the &lt;a target="_blank" href="http://flexlib.googlecode.com/"&gt;flexlib&lt;/a&gt; Google Code project.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2814003665874097395-1201760083370884780?l=adamflater.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamflater.blogspot.com/feeds/1201760083370884780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2814003665874097395&amp;postID=1201760083370884780' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/1201760083370884780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/1201760083370884780'/><link rel='alternate' type='text/html' href='http://adamflater.blogspot.com/2009/09/new-to-flexlib-csspropertyinjector.html' title='New to flexlib: CSSPropertyInjector'/><author><name>Adam Flater</name><uri>http://www.blogger.com/profile/18224648613573489463</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18368920800186724726'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_h4sLtL2cd8A/Sq2M3ywj9mI/AAAAAAAAAHw/4bOCYG5JZXs/s72-c/multSelect.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2814003665874097395.post-2738648532250198014</id><published>2009-05-20T01:54:00.006-06:00</published><updated>2009-05-20T06:48:17.855-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='merapi'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='360 flex'/><title type='text'>Merapi is Open!</title><content type='html'>&lt;p&gt;I was proud to announce with &lt;a href="http://www.infoaccelerator.net" target="_blank"&gt;Andrew Powell&lt;/a&gt; today at &lt;a href="http://www.360flex.com/" target="_blank"&gt;360 Flex | Indy&lt;/a&gt;, that Merapi is now officially open source.&lt;/p&gt;&lt;p&gt;We've released the first public beta on Google Code as well as opened a Google Group. There is also a repo for Merapi examples.&lt;/p&gt;&lt;p&gt;Here are the important links:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://merapi.googlecode.com/" target="_blank"&gt;http://merapi.googlecode.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://merapi-examples.googlecode.com/" target="_blank"&gt;http://merapi-examples.googlecode.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://groups.google.com/group/merapi-project" target="_blank"&gt;http://groups.google.com/group/merapi-project&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;To find out more, keep an eye on our blogs. We'll be releasing more tutorials and answering questions as they appear.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2814003665874097395-2738648532250198014?l=adamflater.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamflater.blogspot.com/feeds/2738648532250198014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2814003665874097395&amp;postID=2738648532250198014' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/2738648532250198014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/2738648532250198014'/><link rel='alternate' type='text/html' href='http://adamflater.blogspot.com/2009/05/merapi-is-open.html' title='Merapi is Open!'/><author><name>Adam Flater</name><uri>http://www.blogger.com/profile/18224648613573489463</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18368920800186724726'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2814003665874097395.post-1457657400340857328</id><published>2009-05-03T21:58:00.019-06:00</published><updated>2009-05-04T21:50:18.086-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='roundarch'/><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='merapi'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Joining Roundarch / Merapi Positioning</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_h4sLtL2cd8A/Sf5p-M0YwFI/AAAAAAAAAHY/_uVqJD9LBj0/s1600-h/ra-logo.png"&gt;&lt;img style="margin: 10pt 10pt 10px 10px; float: left; cursor: pointer; width: 249px; height: 65px;" src="http://1.bp.blogspot.com/_h4sLtL2cd8A/Sf5p-M0YwFI/AAAAAAAAAHY/_uVqJD9LBj0/s320/ra-logo.png" alt="" id="BLOGGER_PHOTO_ID_5331815526167003218" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;On March 9th I began a new position in the role of &lt;a href="http://www.linkedin.com/in/adamflater" target="_blank"&gt;Technical Architect and Evangelist&lt;/a&gt; at &lt;a href="http://roundarch.com/" target="_blank"&gt;Roundarch&lt;/a&gt;. As I stated in my previous post, this was a difficult decision to make.&lt;/p&gt;&lt;p&gt;Now that I've had a couple months of settling in, I'm happy to say I'm enjoying my new role and the team at &lt;a href="http://roundarch.com/" target="_blank"&gt;Roundarch&lt;/a&gt; very much.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://roundarch.com/" target="_blank"&gt;Roundarch&lt;/a&gt; is not just an RIA or technology shop. We are specialized in Information Architecture, Graphic Design, User Experience, Technology and SEO. Our work is in serving clients, and our process provides unique advantages to the fortune 100/500 enterprises we engage with.&lt;/p&gt;&lt;p&gt;Now that I've had some time to get to know many of the 175 people that make up &lt;a href="http://roundarch.com/" target="_blank"&gt;Roundarch&lt;/a&gt;, I've learned to appreciate &lt;a href="http://roundarch.com/" target="_blank"&gt;Roundarch&lt;/a&gt;'s holistic approach towards solving problems. Although we do have experts that work within a discipline, we do not develop solutions in a vacuum. There is a belief at &lt;a href="http://roundarch.com/" target="_blank"&gt;Roundarch&lt;/a&gt; that all disciplines (IA, UX, Design, Business, and Technology) should inform each other. This adds up to a group professionals who's combined background includes graduate and post graduate level training in; HCI, Computer Science, Design/Art, Business Administration, etc... all working together as a team to create solutions for our clients. That process is exciting to be a part of.&lt;/p&gt;&lt;p&gt;There were many incentives that influenced my decision to join &lt;a href="http://roundarch.com/" target="_blank"&gt;Roundarch&lt;/a&gt;. A few highlighted reasons are:&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt; Leadership that believes in the success and direction of the company.&lt;/li&gt;&lt;li&gt; Working with my friend &lt;a href="http://whatanexperience.org/" target="_blank"&gt;Dave Meeker&lt;/a&gt; on &lt;a href="http://merapiproject.net/" target="_blank"&gt;Merapi&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Working with my new friend and mentor Gary Schwartzbard in the &lt;a href="http://roundarch.com/" target="_blank"&gt;Roundarch&lt;/a&gt; RIA practice.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;1. The Leadership&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://roundarch.com/" target="_blank"&gt;Roundarch&lt;/a&gt;'s history comes from years of working under the &lt;a href="http://deloitte.com/" target="_blank"&gt;Deloitte&lt;/a&gt; and &lt;a href="http://wpp.com/" target="_blank"&gt;WPP&lt;/a&gt; flags. Our owners saw a distinct value in the people that became the founding members of &lt;a href="http://roundarch.com/" target="_blank"&gt;Roundarch&lt;/a&gt; and purchased the practice from &lt;a href="http://deloitte.com/" target="_blank"&gt;Deloitte&lt;/a&gt;. It is a testimony to the leadership that many of the founding employees are currently managers, directors, and VPs even today. This is a leadership the has a clear vision of serving it's clients and valuing it's employes.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;2. &lt;a href="http://whatanexperience.org/" target="_blank"&gt;Dave&lt;/a&gt; and &lt;a href="http://merapiproject.net/" target="_blank"&gt;Merapi&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Another part of my on-boarding to &lt;a href="http://roundarch.com/" target="_blank"&gt;Roundarch&lt;/a&gt; was working with my friend &lt;a href="http://whatanexperience.org/" target="_blank"&gt;Dave Meeker&lt;/a&gt; to develop &lt;a href="http://roundarch.com/" target="_blank"&gt;Roundarch&lt;/a&gt;'s capability's to offer unique services leveraging &lt;a href="http://merapiproject.net/" target="_blank"&gt;Merapi&lt;/a&gt;. Most recently we've done this by assisting &lt;a href="http://www.teslamotors.com/" target="_blank"&gt;Tesla Motors&lt;/a&gt; in the release of their new &lt;a href="http://www.teslamotors.com/models/index.php" target="_blank"&gt;Model S&lt;/a&gt; electric car. You can read more about our involvement with &lt;a href="http://www.teslamotors.com/" target="_blank"&gt;Tesla&lt;/a&gt; on the &lt;a href="http://impost.roundarch.com/2009/04/29/the-tesla-model-s-touch-screen-user-experience-is-powered-by-roundarchs-merapi-project/" target="_blank"&gt;Roundarch blog&lt;/a&gt; and in this &lt;a href="http://www.marketwatch.com/news/story/roundarch-technology-amps-up-teslas/story.aspx?guid=%7B639AE116-99E3-4DFB-BB95-9B661C02B81A%7D&amp;amp;dist=msr_3" target="_blank"&gt;press release&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_h4sLtL2cd8A/Sf-tygD30MI/AAAAAAAAAHo/yRN_kZt2XDE/s1600-h/models.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 136px;" src="http://3.bp.blogspot.com/_h4sLtL2cd8A/Sf-tygD30MI/AAAAAAAAAHo/yRN_kZt2XDE/s320/models.png" alt="" id="BLOGGER_PHOTO_ID_5332171566941196482" border="0" /&gt;&lt;/a&gt;Shortly after the release hit the web, there was a bit of a surprise in the &lt;a href="http://merapiproject.net/" target="_blank"&gt;Merapi&lt;/a&gt; community about our positioning around &lt;a href="http://merapiproject.net/" target="_blank"&gt;Merapi&lt;/a&gt;. Pieces of the text were (validly) interpreted by some to read that &lt;a href="http://roundarch.com/" target="_blank"&gt;Roundarch&lt;/a&gt; now owned / had purchased &lt;a href="http://merapiproject.net/" target="_blank"&gt;Merapi&lt;/a&gt;. This is not the message that &lt;a href="http://whatanexperience.org/" target="_blank"&gt;Dave&lt;/a&gt; or I intended to publish. &lt;a href="http://roundarch.com/" target="_blank"&gt;Roundarch&lt;/a&gt; has and will invest time and money in promoting and developing the &lt;a href="http://merapiproject.net/" target="_blank"&gt;Merapi&lt;/a&gt; technology, however, we view the open source effort as a key part in the success of &lt;a href="http://merapiproject.net/" target="_blank"&gt;Merapi&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_h4sLtL2cd8A/Sf5rrBOnbgI/AAAAAAAAAHg/jTVLRy03lZU/s1600-h/merapicup.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 137px; height: 317px;" src="http://4.bp.blogspot.com/_h4sLtL2cd8A/Sf5rrBOnbgI/AAAAAAAAAHg/jTVLRy03lZU/s320/merapicup.jpg" alt="" id="BLOGGER_PHOTO_ID_5331817395661532674" border="0" /&gt;&lt;/a&gt;Last week my friend &lt;a href="http://infoaccelerator.net/" target="_blank"&gt;Andrew Powell&lt;/a&gt; raised some concerns over the future of &lt;a href="http://merapiproject.net/" target="_blank"&gt;Merapi&lt;/a&gt;, and the position of the open source project. For those of you in the RIA community, you've probably seen &lt;a href="http://infoaccelerator.net/" target="_blank"&gt;Andrew&lt;/a&gt; give talks about &lt;a href="http://merapiproject.net/" target="_blank"&gt;Merapi&lt;/a&gt; over the last year. He's been instrumental in helping develop the concepts of &lt;a href="http://merapiproject.net/" target="_blank"&gt;Merapi&lt;/a&gt; and has helped promote the technology in a great way.  Moving forward, &lt;a href="http://infoaccelerator.net/" target="_blank"&gt;Andrew&lt;/a&gt; will sit with me as co-chair of the open source project and help to ensure that a community focused version of Merapi's Flex/Java connectivity thrives.&lt;/p&gt;&lt;p&gt;This week &lt;a href="http://infoaccelerator.net/" target="_blank"&gt;Andy&lt;/a&gt;&lt;a&gt;, &lt;/a&gt;&lt;a href="http://whatanexperience.org/" target="_blank"&gt;Dave&lt;/a&gt; and I spoke about what might be the clearest, mutually beneficial way to position &lt;a href="http://merapiproject.net/" target="_blank"&gt;Merapi&lt;/a&gt; for the community and companies like &lt;a href="http://roundarch.com/" target="_blank"&gt;Roundarch&lt;/a&gt; that want to invest in developing commercial solutions with it. Here's what we came up with...&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;The open source / community effort will be known as:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;   &lt;span style="font-size:130%;"&gt;Merapi or The Merapi Project&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The &lt;a href="http://roundarch.com/" target="_blank"&gt;Roundarch&lt;/a&gt; commercial effort will be known as:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;   &lt;span style="font-size:130%;"&gt;The Roundarch Merapi Platform&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;The open source effort will target developing a solid core for Flex/AIR and Java. &lt;a href="http://infoaccelerator.net/" target="_blank"&gt;Andy&lt;/a&gt; and I will be handling how to approve members of the community who would like to contribute on the project. We'll likely be asking for individuals or corporate entities to contribute first by submitting patches and then elevate their status to full commitor rights. This effort will begin this summer.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;3. Gary and the RIA practice&lt;br /&gt;&lt;br /&gt;&lt;p&gt;At &lt;a href="http://roundarch.com/" target="_blank"&gt;Roundarch&lt;/a&gt; we don't follow the typical manager / employee hierarchy. Instead, each employee has their own career counselor. I consider it a privilege to have Gary as a counselor and mentor. It's been my pleasure to get to know and work with him on a few projects already. Even in the current economy, we're in need of additional resources for this team and others. Contact me at adamflater [at] gmail [dot] com if you're interested in finding out more about &lt;a href="http://roundarch.com/" target="_blank"&gt;Roundarch&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;So.. that's a rather lengthy source-code-less post for me.&lt;br /&gt;&lt;br /&gt;thanks for reading the update.. more to come on RIA development soon&lt;br /&gt;-adam&lt;br /&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2814003665874097395-1457657400340857328?l=adamflater.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamflater.blogspot.com/feeds/1457657400340857328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2814003665874097395&amp;postID=1457657400340857328' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/1457657400340857328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/1457657400340857328'/><link rel='alternate' type='text/html' href='http://adamflater.blogspot.com/2009/05/joining-roundarch-merapi-positioning.html' title='Joining Roundarch / Merapi Positioning'/><author><name>Adam Flater</name><uri>http://www.blogger.com/profile/18224648613573489463</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18368920800186724726'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_h4sLtL2cd8A/Sf5p-M0YwFI/AAAAAAAAAHY/_uVqJD9LBj0/s72-c/ra-logo.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2814003665874097395.post-6029278699009929701</id><published>2009-03-07T15:52:00.007-07:00</published><updated>2009-03-07T16:05:33.422-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='career'/><title type='text'>Farewell to Universal Mind</title><content type='html'>&lt;p&gt;After much deliberation, earlier this week I chose to step down from my position at Universal Mind. This was a difficult decision for me as UM has a unique collection of highly talented individuals that I've thoroughly enjoyed working with. I will truly miss counting all the great people at UM as colleagues. I leave my best wishes to the success of Universal Mind and all of it's employees as individuals. I am certain that we will continue to see amazing work from the UM team in the RIA space in both development and design. &lt;/p&gt;&lt;p&gt;It was great to work with all of you and I hope to cross paths with each of you again soon.&lt;/p&gt;&lt;br /&gt;-adam&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2814003665874097395-6029278699009929701?l=adamflater.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamflater.blogspot.com/feeds/6029278699009929701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2814003665874097395&amp;postID=6029278699009929701' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/6029278699009929701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/6029278699009929701'/><link rel='alternate' type='text/html' href='http://adamflater.blogspot.com/2009/03/farewell-to-universal-mind.html' title='Farewell to Universal Mind'/><author><name>Adam Flater</name><uri>http://www.blogger.com/profile/18224648613573489463</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18368920800186724726'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2814003665874097395.post-2363489955267269335</id><published>2009-02-01T17:38:00.007-07:00</published><updated>2009-02-01T18:28:31.833-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='um cairngorm extentions'/><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='data translator pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='Universal Mind'/><category scheme='http://www.blogger.com/atom/ns#' term='mvc'/><category scheme='http://www.blogger.com/atom/ns#' term='cairngorm'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Cairngorm Top 5 Tips - Number 3 - The Data Translator Pattern</title><content type='html'>&lt;p&gt;Number 3 on my list of Cairngorm tips is the Data Translator pattern. I'd like to preface my explanation of the pattern with a discussion about web application domains.&lt;/p&gt;&lt;p&gt;As Flex developers we're often inclined to use server-side technologies like &lt;a target="_blank" href="http://opensource.adobe.com/wiki/display/blazeds/BlazeDS/"&gt;Blaze DS&lt;/a&gt;, &lt;a target="_blank" href="http://www.adobe.com/products/livecycle/dataservices/"&gt;LiveCycle DS,&lt;/a&gt; &lt;a target="_blank" href="http://www.adobe.com/products/coldfusion/"&gt;ColdFusion&lt;/a&gt;, &lt;a target="_blank" href="http://amfphp.org/"&gt;amfPHP&lt;/a&gt;, &lt;a target="_blank" href="http://code.google.com/p/rubyamf/"&gt;RubyAMF&lt;/a&gt; because of the native object transfer layers that these technologies have available. The magic in these solutions is a binary format called &lt;a target="_blank" href="http://www.jamesward.com/blog/2007/12/12/blazebench-why-you-want-amf-and-blazeds/"&gt;AMF (Action Messaging Format)&lt;/a&gt;. &lt;a target="_blank" href="http://www.jamesward.com/blog/2007/12/12/blazebench-why-you-want-amf-and-blazeds/"&gt;AMF&lt;/a&gt; allows disparate languages to communicate with native objects. For example, in a &lt;a target="_blank" href="http://opensource.adobe.com/wiki/display/blazeds/BlazeDS/"&gt;Blaze DS&lt;/a&gt; Java server project if I define a class that has the same public properties as a class definition in ActionScript, Java and ActionScript can transport data of this type and deal with the data as a native object instance in each layer. The benefits gained from native object data transfer are: compile time type checking, speed, and elegance. However, this post is not about &lt;a target="_blank" href="http://www.jamesward.com/blog/2007/12/12/blazebench-why-you-want-amf-and-blazeds/"&gt;AMF&lt;/a&gt;, but about the pattern of translating other data formats (like &lt;a target="_blank" href="http://en.wikipedia.org/wiki/XML"&gt;XML&lt;/a&gt;, &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Comma-separated_values"&gt;CSV&lt;/a&gt;, &lt;a target="_blank" href="http://en.wikipedia.org/wiki/JSON"&gt;JSON&lt;/a&gt;) into the Flex application domain.&lt;/p&gt;&lt;p&gt;An important distinction when implementing a Flex application is the separation of domains. In a typical web application there are several domains to think about, but for the sake of this example let's look at two: the service layer domain and the UI domain. The distinction between these domains is important to ensure high standards of maintainability and modularity. It is essential to avoid a situation where a change in the service layer has major impacts on the implementation of the UI layer, and vice versa. The Data Translator pattern is a simple pattern, but an important concept for keeping these concerns separated.&lt;/p&gt;&lt;p&gt;In this example I will be using &lt;a target="_blank" href="http://en.wikipedia.org/wiki/XML"&gt;XML&lt;/a&gt; translated to ActionScript &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Data_Transfer_Object"&gt;VOs (value objects)&lt;/a&gt;. &lt;a target="_blank" href="http://en.wikipedia.org/wiki/XML"&gt;XML&lt;/a&gt; is a common format in the world of web services, and especially in Flex development, however this pattern can be used with nearly any data format that a service might expose. That's enough setup, now let's dig in to the Data Translator.&lt;/p&gt;&lt;p&gt;A Data Translator is a class with static methods for parsing data generated by the service domain into a format that is specific to the UI domain. Data Translators are typically invoked by Delegate classes. In my opinion, the Delegate layer is the appropriate place to handle data translation. If your Command class is dealing with data that is part of the service domain, you may need to rethink your architecture. Like nearly everything in any field of engineering, there are exceptions to this rule. If you are implementing an application that's function is to display read-only data, &lt;a target="_blank" href="http://en.wikipedia.org/wiki/XML"&gt;XML&lt;/a&gt; can be a great format for that application. However, if your application involves modifying data that was retrieved from a service, value objects are usually the best solution.&lt;/p&gt;&lt;p&gt;So, let's check out the example application:&lt;/p&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/DataTranslatorExampleLauncher.html"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 200px;" src="http://2.bp.blogspot.com/_h4sLtL2cd8A/SYZCQdu8LKI/AAAAAAAAAHQ/mWUkBqb7W0Q/s320/dataTranslatorExamlpleScreenshot.png" alt="" id="BLOGGER_PHOTO_ID_5297994862274817186" border="0" /&gt;&lt;/a&gt;&lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/DataTranslatorExampleLauncher.html"&gt;View the Application&lt;/a&gt; | &lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/index.html"&gt;View the Source&lt;/a&gt; | &lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/asdoc-output/index.html"&gt;View the Docs&lt;/a&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="text-align: left;"&gt;&lt;p&gt;&lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/DataTranslatorExampleApplication.mxml.html"&gt;DataTranslatorExampleApplication&lt;/a&gt; - Defines a button that dispatches the GetItemsEvent, a console to show Cairngorm actions, and a DataGrid to show the result of the operation.&lt;/p&gt;&lt;iframe src="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/DataTranslatorExampleApplication.mxml.html" style="overflow-x: hidden;" frameborder="0" height="800" width="580"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;p&gt;&lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/controller/commands/ItemsCommand.as.html"&gt;ItemsCommand&lt;/a&gt; - Invokes the getItems operation on the delegate class and by standard Cairngorm convention, updates the global model with the items returned by the delegate.&lt;/p&gt;&lt;iframe src="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/controller/commands/ItemsCommand.as.html" style="overflow-x: hidden;" frameborder="0" height="840" width="580"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;p&gt;&lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/controller/delegates/DataTranslatorExampleDelegate.as.html"&gt;DataTranslatorExampleDelegate&lt;/a&gt; - This delegate is responsible for calling the service that responds with a collection of items. The items are returned in an &lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/mock/items.xml.txt"&gt;XML format&lt;/a&gt; and then parsed by the &lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/controller/delegates/ExampleDataTranslator.as.html"&gt;ExampleDataTranslator&lt;/a&gt; class.&lt;/p&gt;&lt;iframe src="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/controller/delegates/DataTranslatorExampleDelegate.as.html" style="overflow-x: hidden;" frameborder="0" height="1230" width="580"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;p&gt;&lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/controller/delegates/ExampleDataTranslator.as.html"&gt;ExampleDataTranslator&lt;/a&gt; - Translates the XML payload into a set of objects of type &lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/model/vo/Item.as.html"&gt;Item&lt;/a&gt;.&lt;/p&gt;&lt;iframe src="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/controller/delegates/ExampleDataTranslator.as.html" style="overflow-x: hidden;" frameborder="0" height="575" width="580"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;p&gt;&lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/model/vo/Item.as.html"&gt;Item&lt;/a&gt; - A value object that models the data of an "Item"&lt;/p&gt;&lt;iframe src="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/model/vo/Item.as.html" style="overflow-x: hidden;" frameborder="0" height="200" width="580"&gt;&lt;/iframe&gt;&lt;p&gt;This pattern is a favorite of mine for dealing with the translation of data into a format for the UI application domain.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Up next, tip #2 Aggregated Commands.&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2814003665874097395-2363489955267269335?l=adamflater.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamflater.blogspot.com/feeds/2363489955267269335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2814003665874097395&amp;postID=2363489955267269335' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/2363489955267269335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/2363489955267269335'/><link rel='alternate' type='text/html' href='http://adamflater.blogspot.com/2009/02/cairngorm-top-5-tips-number-3-data.html' title='Cairngorm Top 5 Tips - Number 3 - The Data Translator Pattern'/><author><name>Adam Flater</name><uri>http://www.blogger.com/profile/18224648613573489463</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18368920800186724726'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_h4sLtL2cd8A/SYZCQdu8LKI/AAAAAAAAAHQ/mWUkBqb7W0Q/s72-c/dataTranslatorExamlpleScreenshot.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2814003665874097395.post-8341720980098274354</id><published>2009-01-28T10:52:00.005-07:00</published><updated>2009-01-28T13:47:51.563-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='Universal Mind'/><category scheme='http://www.blogger.com/atom/ns#' term='typinator'/><category scheme='http://www.blogger.com/atom/ns#' term='templates'/><category scheme='http://www.blogger.com/atom/ns#' term='code formatting'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Typinator and Flex</title><content type='html'>My colleague &lt;a href="http://www.dougmccune.com/"&gt;Doug McCune&lt;/a&gt; sent out a link last week to a product called &lt;a target="_blank" href="http://www.macility.com/products/typinator/"&gt;Typinator&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.macility.com/products/typinator/"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 292px; height: 370px;" src="http://www.macility.com/images/products/typi/external/typinator-screen292.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a target="_blank" href="http://www.macility.com/products/typinator/"&gt;Typinator&lt;/a&gt; is a tool for Mac OS that auto replaces character strings that are typed anywhere in Mac OS. In the videos below you will see a few ways that &lt;a target="_blank" href="http://www.macility.com/products/typinator/"&gt;Typinator&lt;/a&gt; can be used in a Flex development environment.&lt;/p&gt;&lt;p&gt;Class Templates: If you're tired of formatting your classes to read a certain way, why not setup a template with &lt;a target="_blank" href="http://www.macility.com/products/typinator/"&gt;Typinator&lt;/a&gt;?&lt;/p&gt;&lt;p&gt;In this example you'll see "-pc" expanded to a full class template.&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/hzDY6Y-iT1s&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/hzDY6Y-iT1s&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Infrequently Used Syntax: If you're like me, there are a few syntactical parts of ActionScript that you use infrequently. I generally have to look these things up in past source code or LiveDocs. &lt;a target="_blank" href="http://www.macility.com/products/typinator/"&gt;Typinator&lt;/a&gt; is a great way to create a shortcut for those items.&lt;/p&gt;&lt;p&gt;In this example you'll see "-ra" expanded into the remote alias meta data tag.&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/plbqeaD9-Dg&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/plbqeaD9-Dg&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;In this example you'll see "-emd" expanded to the event meta data syntax.&lt;br /&gt;&lt;/p&gt;&lt;object height="295" width="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/hhmCHdjYLko&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/object&gt;&lt;div style="text-align: center;"&gt;&lt;object height="295" width="480"&gt;&lt;embed src="http://www.youtube.com/v/hhmCHdjYLko&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="295" width="480"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;I've been using &lt;a target="_blank" href="http://www.macility.com/products/typinator/"&gt;Typinator&lt;/a&gt; for a while now and it's become a useful development tool for me, even actions as simple as correcting functino to function (a common misspelling for me).&lt;/p&gt;&lt;p&gt;[UPDATE]&lt;/p&gt;&lt;p&gt;I shared my post with Ergonis Software and their CEO and Frounder Christoph Reichenberger replied with a very helpfult tip. &lt;a target="_blank" href="http://www.macility.com/products/typinator/"&gt; Typinator&lt;/a&gt; allows you to specify an alternative cursor position after it has replaced the phrase you type.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_h4sLtL2cd8A/SYDDnovjtQI/AAAAAAAAAHI/kF1oUU0v2JE/s1600-h/Typinator.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 215px;" src="http://4.bp.blogspot.com/_h4sLtL2cd8A/SYDDnovjtQI/AAAAAAAAAHI/kF1oUU0v2JE/s320/Typinator.jpg" alt="" id="BLOGGER_PHOTO_ID_5296448247506908418" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;If you look up at my remote alias example, you'll notice that I used the left arrow key to backup to the appropriate spot to type the classname. In the revised example below you'll see that after typing "-ra" the cursor is automatically positioned where I'd like to start typing the name of the alias.&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;object height="295" width="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/xC8cV_UMVyw&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/xC8cV_UMVyw&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="295" width="480"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;p style="text-align: center;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: left;"&gt;Thanks for the tip Christoph, much appreciated.&lt;/p&gt;&lt;p style="text-align: left;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2814003665874097395-8341720980098274354?l=adamflater.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamflater.blogspot.com/feeds/8341720980098274354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2814003665874097395&amp;postID=8341720980098274354' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/8341720980098274354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/8341720980098274354'/><link rel='alternate' type='text/html' href='http://adamflater.blogspot.com/2009/01/typinator-and-flex.html' title='Typinator and Flex'/><author><name>Adam Flater</name><uri>http://www.blogger.com/profile/18224648613573489463</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18368920800186724726'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_h4sLtL2cd8A/SYDDnovjtQI/AAAAAAAAAHI/kF1oUU0v2JE/s72-c/Typinator.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2814003665874097395.post-6845300832248356157</id><published>2009-01-27T14:42:00.012-07:00</published><updated>2009-02-01T18:28:13.334-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='um cairngorm extentions'/><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='eventgenerator'/><category scheme='http://www.blogger.com/atom/ns#' term='Universal Mind'/><category scheme='http://www.blogger.com/atom/ns#' term='mvc'/><category scheme='http://www.blogger.com/atom/ns#' term='cairngorm'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Cairngorm Top 5 Tips - Number 4 - The EventGenerator</title><content type='html'>&lt;p&gt;The last tip in this series was #5. The &lt;a target="_blank" href="http://flexcairngorm.googlecode.com/svn/trunk/code/asdocs/com/universalmind/cairngorm/events/AnnounceFaultEvent.html"&gt;AnnounceFaultEvent&lt;/a&gt; (&lt;a target="_blank" href="http://adamflater.blogspot.com/2009/01/cairngorm-top-5-tips-number-5.html"&gt;read more&lt;/a&gt;).&lt;/p&gt;and now for tip #4:&lt;p&gt;&lt;/p&gt;&lt;p&gt;The &lt;a target="_blank" href="http://flexcairngorm.googlecode.com/svn/trunk/code/asdocs/com/universalmind/cairngorm/events/generator/EventGenerator.html"&gt;EventGenerator&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The &lt;a target="_blank" href="http://flexcairngorm.googlecode.com/svn/trunk/code/asdocs/com/universalmind/cairngorm/events/generator/EventGenerator.html"&gt;EventGenerator&lt;/a&gt; class provides a mechanism for defining sets of &lt;a target="_blank" href="http://flexcairngorm.googlecode.com/svn/trunk/code/asdocs/com/universalmind/cairngorm/events/UMEvent.html"&gt;Events&lt;/a&gt; to be dispatched either &lt;a target="_blank" href="http://flexcairngorm.googlecode.com/svn/trunk/code/asdocs/com/universalmind/cairngorm/events/generator/EventGenerator.html#TRIGGER_SEQUENCE"&gt;sequentially&lt;/a&gt; or in &lt;a target="_blank" href="http://flexcairngorm.googlecode.com/svn/trunk/code/asdocs/com/universalmind/cairngorm/events/generator/EventGenerator.html#TRIGGER_PARALLEL"&gt;parallel&lt;/a&gt;. The &lt;a target="_blank" href="http://flexcairngorm.googlecode.com/svn/trunk/code/asdocs/com/universalmind/cairngorm/events/generator/EventGenerator.html"&gt;EventGenerator&lt;/a&gt; is defined declaratively in MXML. The generator provides an aggregated result response when the last &lt;a target="_blank" href="http://flexcairngorm.googlecode.com/svn/trunk/code/asdocs/com/universalmind/cairngorm/events/UMEvent.html"&gt;event&lt;/a&gt; in the set has finished. It is still possible to attach &lt;a target="_blank" href="http://livedocs.adobe.com/flex/3/langref/mx/rpc/IResponder.html"&gt;responders&lt;/a&gt; to your individual &lt;a target="_blank" href="http://flexcairngorm.googlecode.com/svn/trunk/code/asdocs/com/universalmind/cairngorm/events/UMEvent.html"&gt;events&lt;/a&gt;, as per normal in the &lt;a target="_blank" href="http://code.google.com/p/flexcairngorm/"&gt;UM Cairngorm&lt;/a&gt; world. (I'll cover the Event-Responder relationship in more detail in a later post.)&lt;/p&gt;&lt;p&gt;There are couple of dependencies to the &lt;a target="_blank" href="http://flexcairngorm.googlecode.com/svn/trunk/code/asdocs/com/universalmind/cairngorm/events/generator/EventGenerator.html"&gt;EventGenerator&lt;/a&gt; pattern. I consider these requirements good practice anyhow, but you should keep them in mind.&lt;/p&gt;&lt;p&gt;1. Define your event as a subclass of &lt;a target="_blank" href="http://flexcairngorm.googlecode.com/svn/trunk/code/asdocs/com/universalmind/cairngorm/events/UMEvent.html"&gt;UMEvent&lt;/a&gt; not the &lt;a target="_blank" href="http://cairngormdocs.org/docs/cairngorm_2_1/com/adobe/cairngorm/control/CairngormEvent.html"&gt;Cairngorm Event Class&lt;/a&gt;&lt;br /&gt;2. Define your command as a subclass of the &lt;a target="_blank" href="http://flexcairngorm.googlecode.com/svn/trunk/code/asdocs/com/universalmind/cairngorm/commands/Command.html"&gt;UM Command&lt;/a&gt; class instead of implementing the &lt;a target="_blank" href="http://cairngormdocs.org/docs/cairngorm_2_1/com/adobe/cairngorm/commands/ICommand.html"&gt;Cairngorm ICommand interface&lt;/a&gt;.&lt;br /&gt;3. Invoke super.execute() in your command execute method.&lt;br /&gt;4. Invoke notifyCallers() in your command class when the command has finished executing.&lt;/p&gt;And now for the example...&lt;br /&gt;&lt;br /&gt;&lt;p style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/EventGeneratorExampleLauncher.html"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 166px;" src="http://4.bp.blogspot.com/_h4sLtL2cd8A/SX-GRcwBSqI/AAAAAAAAAHA/odkDjBbLMxY/s320/eventGeneratorExampleScreenshot.png" alt="" id="BLOGGER_PHOTO_ID_5296099321144494754" border="0" /&gt;&lt;/a&gt;&lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/EventGeneratorExampleLauncher.html"&gt;View the Application&lt;/a&gt; | &lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/index.html"&gt;View the Source&lt;/a&gt; | &lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/asdoc-output/index.html"&gt;View the Docs&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/EventGeneratorExampleApplication.mxml.html"&gt;EventGeneratorExampleApplication&lt;/a&gt; - Defines the generators and the handlers functions for their results.&lt;br /&gt;&lt;iframe src="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/EventGeneratorExampleApplication.mxml.html" style="overflow-x: hidden;" frameborder="0" height="1330" width="580"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/controller/events/GetConfigurationEvent.as.html"&gt;GetConfigurationEvent&lt;/a&gt; and &lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/controller/events/DownloadSomethingEvent.as.html"&gt;DownloadSomethingEvent&lt;/a&gt; are basic &lt;a target="_blank" href="http://flexcairngorm.googlecode.com/svn/trunk/code/asdocs/com/universalmind/cairngorm/events/UMEvent.html"&gt;Event&lt;/a&gt; classes that map to &lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/controller/commands/ConfigurationCommand.as.html"&gt;ConfigurationCommand&lt;/a&gt; and &lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/controller/commands/DownloadCommand.as.html"&gt;DownloadCommand&lt;/a&gt;, respectively. Both of these commands are implemented using the pattern I described in the dependency list above. Let's take a look at the  &lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/controller/commands/ConfigurationCommand.as.html"&gt;ConfigurationCommand&lt;/a&gt; as an example.&lt;br /&gt;&lt;/p&gt;&lt;iframe src="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/controller/commands/ConfigurationCommand.as.html" style="overflow-x: hidden;" frameborder="0" height="750" width="580"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;p&gt;As you can see, &lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/controller/commands/ConfigurationCommand.as.html"&gt;ConfigurationCommand&lt;/a&gt; overrides the execute method and invokes the super execute method. Finally, when the delegate has returned a response notifyCaller is invoked. This is the signal the EventGenerator needs to know that the command has finished executing. If the generator is triggered as a sequential dispatcher notifyCaller() signals the generator to dispatch the next event in the series. If the generator is running in a parallel mode, notifyCaller() is used to keep a count of the event / command pairs that have finished. When all the events have signaled a finish, then the generator will dispatch the aggregated result signal.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The delegate used (&lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/controller/delegates/EventGeneratorExampleDelegate.as.html"&gt;EventGeneratorExampleDelegate&lt;/a&gt;) is fairly straight forward. It uses a URLLoader to download a couple of files from the same server that the application is deployed on.&lt;/p&gt;&lt;p&gt;Up next, #3 &lt;a href="http://adamflater.blogspot.com/2009/02/cairngorm-top-5-tips-number-3-data.html" target="_blank"&gt;Data Translators&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2814003665874097395-6845300832248356157?l=adamflater.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamflater.blogspot.com/feeds/6845300832248356157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2814003665874097395&amp;postID=6845300832248356157' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/6845300832248356157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/6845300832248356157'/><link rel='alternate' type='text/html' href='http://adamflater.blogspot.com/2009/01/cairngorm-top-5-tips-number-4.html' title='Cairngorm Top 5 Tips - Number 4 - The EventGenerator'/><author><name>Adam Flater</name><uri>http://www.blogger.com/profile/18224648613573489463</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18368920800186724726'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_h4sLtL2cd8A/SX-GRcwBSqI/AAAAAAAAAHA/odkDjBbLMxY/s72-c/eventGeneratorExampleScreenshot.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2814003665874097395.post-3113343825803486820</id><published>2009-01-26T14:33:00.015-07:00</published><updated>2009-01-27T15:41:11.038-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='um cairngorm extentions'/><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='Universal Mind'/><category scheme='http://www.blogger.com/atom/ns#' term='mvc'/><category scheme='http://www.blogger.com/atom/ns#' term='cairngorm'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='fault handling'/><title type='text'>Cairngorm Top 5 Tips - Number 5 - The AnnounceFaultEvent</title><content type='html'>&lt;p&gt;Several months ago we had a Flex Frameworks roundup at our local Adobe User Group (&lt;a target="_blank" href="http://www.rmaug.com/"&gt;RMAUG&lt;/a&gt;). I presented on the &lt;a target="_blank" href="http://code.google.com/p/flexcairngorm/"&gt;Universal Mind Extensions to Cairngorm&lt;/a&gt; and have since had a few requests for more info on the extensions. In this post I will explain my top 5 favorite ways to implement Cairngorm features in a Flash Application built with Flex many including elements from the &lt;a target="_blank" href="http://code.google.com/p/flexcairngorm/"&gt;UM Extensions&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;So, without further delay...&lt;/p&gt;&lt;p&gt;5. The &lt;a target="_blank" href="http://flexcairngorm.googlecode.com/svn/trunk/code/asdocs/com/universalmind/cairngorm/events/AnnounceFaultEvent.html"&gt;AnnounceFaultEvent&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Error handling can often be an overlooked item when building a Flex application. The &lt;a target="_blank" href="http://flexcairngorm.googlecode.com/svn/trunk/code/asdocs/com/universalmind/cairngorm/events/AnnounceFaultEvent.html"&gt;AnnounceFaultEvent&lt;/a&gt; class in the &lt;a target="_blank" href="http://code.google.com/p/flexcairngorm/"&gt;UM Cairngorm Extensions&lt;/a&gt; provides a nice way to generically handle faults. In fact, the UM implementation of &lt;a target="_blank" href="http://flexcairngorm.googlecode.com/svn/trunk/code/asdocs/com/universalmind/cairngorm/commands/Command.html"&gt;Command&lt;/a&gt; has built-in support for the &lt;a target="_blank" href="http://flexcairngorm.googlecode.com/svn/trunk/code/asdocs/com/universalmind/cairngorm/events/AnnounceFaultEvent.html"&gt;AnnounceFaultEvent&lt;/a&gt;. If a &lt;a target="_blank" href="http://livedocs.adobe.com/flex/3/langref/mx/rpc/events/FaultEvent.html"&gt;FaultEvent&lt;/a&gt; is passed to the fault method of the Command (via the &lt;a target="_blank" href="http://livedocs.adobe.com/flex/3/langref/mx/rpc/IResponder.html"&gt;IResponder&lt;/a&gt; interface), an &lt;a target="_blank" href="http://flexcairngorm.googlecode.com/svn/trunk/code/asdocs/com/universalmind/cairngorm/events/AnnounceFaultEvent.html"&gt;AnnounceFaultEvent&lt;/a&gt; is automatically dispatched through the &lt;a target="_blank" href="http://flexcairngorm.googlecode.com/svn/trunk/code/asdocs/com/universalmind/cairngorm/control/FrontController.html"&gt;FrontController&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;In a standard &lt;a target="_blank" href="http://opensource.adobe.com/wiki/display/cairngorm/Cairngorm"&gt;Cairngorm&lt;/a&gt; implementation a &lt;a target="_blank" href="http://cairngormdocs.org/docs/cairngorm_2_1/com/adobe/cairngorm/commands/ICommand.html"&gt;Command&lt;/a&gt; instantiates a &lt;a target="_blank" href="http://flexcairngorm.googlecode.com/svn/trunk/code/asdocs/com/universalmind/cairngorm/business/Delegate.html"&gt;Delegate&lt;/a&gt; and invokes a method on that &lt;a target="_blank" href="http://flexcairngorm.googlecode.com/svn/trunk/code/asdocs/com/universalmind/cairngorm/business/Delegate.html"&gt;Delegate&lt;/a&gt; to perform the action that the &lt;a target="_blank" href="http://cairngormdocs.org/docs/cairngorm_2_1/com/adobe/cairngorm/commands/ICommand.html"&gt;Command&lt;/a&gt; is responsible for. Typically, the &lt;a target="_blank" href="http://flexcairngorm.googlecode.com/svn/trunk/code/asdocs/com/universalmind/cairngorm/business/Delegate.html"&gt;Delegate&lt;/a&gt; will inform the &lt;a target="_blank" href="http://cairngormdocs.org/docs/cairngorm_2_1/com/adobe/cairngorm/commands/ICommand.html"&gt;Command&lt;/a&gt;  that either a result returned form the operation or a fault returned from the operation. Because Flex is based on asynchronous communication the &lt;a target="_blank" href="http://cairngormdocs.org/docs/cairngorm_2_1/com/adobe/cairngorm/commands/ICommand.html"&gt;Command&lt;/a&gt;'s call to the &lt;a target="_blank" href="http://flexcairngorm.googlecode.com/svn/trunk/code/asdocs/com/universalmind/cairngorm/business/Delegate.html"&gt;Delegate&lt;/a&gt; cannot be blocking (ie wait for a response). So, we need a way to signal to the &lt;a target="_blank" href="http://cairngormdocs.org/docs/cairngorm_2_1/com/adobe/cairngorm/commands/ICommand.html"&gt;Command&lt;/a&gt; that the operation has finished and deliver the result (or fault) of the operation. The common way to accomplish this task is using the &lt;a target="_blank" href="http://livedocs.adobe.com/flex/3/langref/mx/rpc/IResponder.html"&gt;Responder&lt;/a&gt; pattern. A &lt;a target="_blank" href="http://livedocs.adobe.com/flex/3/langref/mx/rpc/IResponder.html"&gt;Responder&lt;/a&gt; is a class of object that has both a result and a fault method. The idea is that a caller maintains a reference to the &lt;a target="_blank" href="http://livedocs.adobe.com/flex/3/langref/mx/rpc/IResponder.html"&gt;Responder&lt;/a&gt; instantiation, and the callee notifies the caller via this object. In the &lt;a target="_blank" href="http://code.google.com/p/flexcairngorm/"&gt;UM Extensions&lt;/a&gt;, the &lt;a target="_blank" href="http://cairngormdocs.org/docs/cairngorm_2_1/com/adobe/cairngorm/commands/ICommand.html"&gt;Command&lt;/a&gt; class will automatically fire an &lt;a target="_blank" href="http://flexcairngorm.googlecode.com/svn/trunk/code/asdocs/com/universalmind/cairngorm/events/AnnounceFaultEvent.html"&gt;AnnounceFaultEvent&lt;/a&gt; when a &lt;a target="_blank" href="http://flexcairngorm.googlecode.com/svn/trunk/code/asdocs/com/universalmind/cairngorm/business/Delegate.html"&gt;Delegate&lt;/a&gt; passes back a &lt;a target="_blank" href="http://livedocs.adobe.com/flex/3/langref/mx/rpc/events/FaultEvent.html"&gt;FaultEvent&lt;/a&gt; to the &lt;a target="_blank" href="http://cairngormdocs.org/docs/cairngorm_2_1/com/adobe/cairngorm/commands/ICommand.html"&gt;Command&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Here's the example:&lt;/p&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/AnnounceFaultEventExampleLauncher.html"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 212px;" src="http://3.bp.blogspot.com/_h4sLtL2cd8A/SX4vfzzL8CI/AAAAAAAAAG4/WIEeC0vDEC8/s320/announceFaultExampleScreenshot.png" alt="" id="BLOGGER_PHOTO_ID_5295722435361632290" border="0" /&gt;&lt;/a&gt;&lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/AnnounceFaultEventExampleLauncher.html"&gt;View the Application&lt;/a&gt; | &lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/index.html"&gt;View the Source&lt;/a&gt; | &lt;a target="_blank" href="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/asdoc-output/index.html"&gt;View the Docs&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;AnnounceFaultEventExampleApplication dispatches a AnnounceFaultEventExampleEvent&lt;br /&gt;&lt;iframe src="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/AnnounceFaultEventExampleApplication.as.html" style="overflow-x: hidden;" frameborder="0" height="1230" width="580"&gt;&lt;/iframe&gt;&lt;br /&gt;AnnounceFaultEventExampleEvent is handled by CairngormTipsFrontController&lt;br /&gt;&lt;iframe src="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/controller/events/AnnounceFaultEventExampleEvent.as.html" style="overflow-x: hidden;" frameborder="0" height="450" width="580"&gt;&lt;/iframe&gt;&lt;br /&gt;CairngormTipsFrontController instantiates AnnounceFaultEventExampleCommand&lt;br /&gt;&lt;iframe src="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/controller/CairngormTipsFrontController.as.html" style="overflow-x: hidden;" frameborder="0" height="650" width="580"&gt;&lt;/iframe&gt;&lt;br /&gt;AnnounceFaultEventExampleCommand calls exampleOperation on AnnounceFaultEventExampleDelegate&lt;br /&gt;&lt;iframe src="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/controller/commands/AnnounceFaultEventExampleCommand.as.html" style="overflow-x: hidden;" frameborder="0" height="800" width="580"&gt;&lt;/iframe&gt;&lt;br /&gt;AnnounceFaultEventExampleDelegate responds with a FaultEvent&lt;br /&gt;&lt;iframe src="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/controller/delegates/AnnounceFaultEventExampleDelegate.as.html" style="overflow-x: hidden;" frameborder="0" height="650" width="580"&gt;&lt;/iframe&gt;&lt;br /&gt;The FaultEvent is handled by FaultCommand&lt;br /&gt;&lt;iframe src="http://flatersource.googlecode.com/svn/trunk/BlogSamples/20090126-CairngormTips/bin-release/srcview/source/flater/cairngormtips/controller/commands/FaultCommand.as.html" style="overflow-x: hidden;" frameborder="0" height="610" width="580"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tip #4: The &lt;a target="_blank" href="http://flexcairngorm.googlecode.com/svn/trunk/code/asdocs/com/universalmind/cairngorm/events/generator/EventGenerator.html"&gt;EventGenerator&lt;/a&gt; &lt;strike&gt;is coming soon...&lt;/strike&gt; &lt;a href="http://adamflater.blogspot.com/2009/01/cairngorm-top-5-tips-number-4.html"&gt;It's out now&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2814003665874097395-3113343825803486820?l=adamflater.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamflater.blogspot.com/feeds/3113343825803486820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2814003665874097395&amp;postID=3113343825803486820' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/3113343825803486820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/3113343825803486820'/><link rel='alternate' type='text/html' href='http://adamflater.blogspot.com/2009/01/cairngorm-top-5-tips-number-5.html' title='Cairngorm Top 5 Tips - Number 5 - The AnnounceFaultEvent'/><author><name>Adam Flater</name><uri>http://www.blogger.com/profile/18224648613573489463</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18368920800186724726'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_h4sLtL2cd8A/SX4vfzzL8CI/AAAAAAAAAG4/WIEeC0vDEC8/s72-c/announceFaultExampleScreenshot.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2814003665874097395.post-1024618561868271254</id><published>2009-01-18T23:39:00.015-07:00</published><updated>2009-01-19T01:02:24.227-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='skinning'/><category scheme='http://www.blogger.com/atom/ns#' term='dynamic skinning'/><category scheme='http://www.blogger.com/atom/ns#' term='Universal Mind'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='Degrafa'/><title type='text'>Dynamic, Persistent Skins with Degrafa</title><content type='html'>&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.degrafa.org/"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 82px;" src="http://1.bp.blogspot.com/_h4sLtL2cd8A/SXQgtQoZBoI/AAAAAAAAAGQ/l-UNVuGQkno/s320/degrafa.png" alt="" id="BLOGGER_PHOTO_ID_5292891423997757058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;a target="_blank" href="http://www.degrafa.org/"&gt;Degrafa&lt;/a&gt; is a declarative graphics framework for Flex. This means that programatic graphic instructions like:&lt;/p&gt;&lt;pre&gt;graphics.lineStyle( 1, 0xffffff );&lt;br /&gt;graphics.moveTo( 10, 10 );&lt;br /&gt;graphics.lineTo( 30, 30 );&lt;br /&gt;graphics.lineTo( 10, 30 );&lt;/pre&gt;&lt;p&gt;can be expressed in simplified and elegant MXML source code.&lt;/p&gt;&lt;p&gt;From this post you'll take away an intro to &lt;a target="_blank" href="http://www.degrafa.org/"&gt;Degrafa&lt;/a&gt;, how to dynamically modify your &lt;a target="_blank" href="http://www.degrafa.org/"&gt;Degrafa&lt;/a&gt; skins, and how to persist those dynamically modified skins.&lt;/p&gt;&lt;p&gt;To start with, let's take a look at a simple Flex Button skinned using Degrafa:&lt;br /&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://adamflater.net/blogassets/degrafa-post/ButtonSkinExample.html"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 94px;" src="http://2.bp.blogspot.com/_h4sLtL2cd8A/SXQhV5cwxPI/AAAAAAAAAGg/SX4MNJckrXQ/s320/exampleButton.png" alt="" id="BLOGGER_PHOTO_ID_5292892122149602546" border="0" /&gt;&lt;/a&gt;&lt;a target="_blank" href="http://adamflater.net/blogassets/degrafa-post/ButtonSkinExample.html"&gt;View Application&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;In this example I'm using three Degrafa classes: &lt;a target="_blank" href="http://www.degrafa.org/docs/com/degrafa/skins/GraphicBorderSkin.html"&gt;GraphicBorderSkin&lt;/a&gt;, &lt;a target="_blank" href="http://www.degrafa.org/docs/com/degrafa/paint/SolidFill.html"&gt;SolidFill&lt;/a&gt;, and &lt;a target="_blank" href="http://www.degrafa.org/docs/com/degrafa/geometry/RoundedRectangle.html"&gt;RoundedRectangle&lt;/a&gt; to create the skin:&lt;br /&gt;&lt;/p&gt;ButtonSkin.mxml&lt;br /&gt;&lt;iframe src="http://adamflater.net/blogassets/degrafa-post/srcview/source/flater/blogsamples/degrafabutton/skins/ButtonSkin.mxml.html" frameborder="0" height="425" width="580"&gt;&lt;/iframe&gt;&lt;br /&gt;Then, that skin is applied to a Flex Button in:&lt;br /&gt;&lt;br /&gt;ButtonSkinExample.mxml&lt;br /&gt;&lt;p&gt;&lt;iframe src="http://adamflater.net/blogassets/degrafa-post/srcview/source/ButtonSkinExample.mxml.html" frameborder="0" height="200" width="580"&gt;&lt;/iframe&gt;&lt;a target="_blank" href="http://www.degrafa.org/docs/com/degrafa/skins/GraphicBorderSkin.html"&gt;GraphicBorderSkin&lt;/a&gt; is one of a few classes that implement the &lt;a target="_blank" href="http://www.degrafa.org/docs/com/degrafa/core/IGraphicSkin.html"&gt;IGraphicSkin&lt;/a&gt; interface. These classes are the foundation for a Degrafa skin. Extensions of &lt;a target="_blank" href="http://www.degrafa.org/docs/com/degrafa/core/IGraphicSkin.html"&gt;IGraphicSkin&lt;/a&gt; classes are typically written in MXML. For this example I've extended &lt;a target="_blank" href="http://www.degrafa.org/docs/com/degrafa/skins/GraphicBorderSkin.html"&gt;GraphicBorderSkin&lt;/a&gt; to add a few bindable properties for width and height. If you're interested in that implementation, take a look at the &lt;a target="_blank" href="http://adamflater.net/blogassets/degrafa-post/srcview/source/flater/blogsamples/degrafabutton/skins/BaseGraphicBorderSkin.as.html"&gt;BaseGraphicBorderSkin&lt;/a&gt; in the source code.&lt;/p&gt;&lt;p&gt;&lt;a target="_blank" href="http://www.degrafa.org/docs/com/degrafa/paint/SolidFill.html"&gt;SolidFill&lt;/a&gt; is fairly self descriptive. As you can imagine, it fills an area with a color. &lt;a target="_blank" href="http://www.degrafa.org/docs/com/degrafa/paint/SolidFill.html"&gt;SolidFill&lt;/a&gt; may also have an &lt;a target="_blank" href="http://www.degrafa.org/docs/com/degrafa/paint/SolidFill.html#alpha"&gt;alpha&lt;/a&gt; quality.&lt;/p&gt;&lt;p&gt;Finally, the shape of our skin is implemented using the class &lt;a target="_blank" href="http://www.degrafa.org/docs/com/degrafa/geometry/RoundedRectangle.html"&gt;RoundedRectangle&lt;/a&gt;. &lt;a target="_blank" href="http://www.degrafa.org/docs/com/degrafa/geometry/RoundedRectangle.html"&gt;RoundedRectangle&lt;/a&gt; implements the &lt;a target="_blank" href="http://www.degrafa.org/docs/com/degrafa/IGeometry.html"&gt;IGeometry&lt;/a&gt; interface, the classes used in the &lt;geometry&gt; tag to draw the shapes of the skin. In our example there are 3 &lt;a target="_blank" href="http://www.degrafa.org/docs/com/degrafa/geometry/RoundedRectangle.html"&gt;RoundedRectangles&lt;/a&gt;, each with increasingly more rounded corners. Each of these three shapes map to three states of the Flex Button; upSkin, overSkin, and downSkin. These shapes are filled using their respective &lt;a target="_blank" href="http://www.degrafa.org/docs/com/degrafa/paint/SolidFill.html"&gt;SolidFill&lt;/a&gt; instances upFill, overFill, and downFill.&lt;/geometry&gt;&lt;/p&gt;&lt;p&gt;With just a little extra work we can make this skin dynamically configurable. The first step is to create a model to externalize the data of the skin. Our data model includes 9 properties:&lt;br /&gt;&lt;/p&gt;&lt;iframe src="http://adamflater.net/blogassets/degrafa-post/DataProps.html" frameborder="0" height="180" width="580"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;p&gt;This class is called &lt;a target="_blank" href="http://adamflater.net/blogassets/degrafa-post/srcview/source/flater/blogsamples/degrafabutton/skins/ButtonDynamicSkinData.as.html"&gt;ButtonDynamicSkinData&lt;/a&gt;. The next step is to have our skin bind to the values set in &lt;a target="_blank" href="http://adamflater.net/blogassets/degrafa-post/srcview/source/flater/blogsamples/degrafabutton/skins/ButtonDynamicSkinData.as.html"&gt;ButtonDynamicSkinData&lt;/a&gt;. You can view this in the &lt;a target="_blank" href="http://adamflater.net/blogassets/degrafa-post/srcview/source/flater/blogsamples/degrafabutton/skins/ButtonDynamicSkin.mxml.html"&gt;ButtonDynamicSkin&lt;/a&gt; class:&lt;/p&gt;&lt;p&gt;The final step is to create a few controls to modify the values in the model. I've added these controls to the Application class &lt;a target="_blank" href="http://adamflater.net/blogassets/degrafa-post/srcview/source/ButtonSkinDynamicExample.mxml.html"&gt;ButtonSkinDynamicExample&lt;/a&gt;... and voila:&lt;/p&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://adamflater.net/blogassets/degrafa-post/ButtonSkinDynamicExample.html"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 209px;" src="http://1.bp.blogspot.com/_h4sLtL2cd8A/SXQqIzpfmwI/AAAAAAAAAGo/ClIGX8yevq8/s320/exampleButtonDynamic.png" alt="" id="BLOGGER_PHOTO_ID_5292901792858741506" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a target="_blank" href="http://adamflater.net/blogassets/degrafa-post/ButtonSkinDynamicExample.html"&gt;View Application&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;geometry&gt;&lt;p&gt;The final step is to persist this data and load it at a later instantiation of the skin. There are many ways to persist data in Flex. For this example I've used the simple approach of persisting the data via url encoded variables. In the final example a button labeled "Goto New URL" is added. If you modify the settings of the skin and then click the button, a new instance of the application loads with the persistent skin that was modified.&lt;/p&gt;&lt;p&gt;To facilitate the persistence I've added two methods to the class &lt;a target="_blank" href="http://adamflater.net/blogassets/degrafa-post/srcview/source/flater/blogsamples/degrafabutton/skins/ButtonDynamicPersistentSkinData.as.html"&gt;ButtonDynamicPersistentSkinData&lt;/a&gt;. The method toUrlVariables() expresses the data model as &lt;a target="_blank" href="http://livedocs.adobe.com/flex/3/langref/flash/net/URLVariables.html"&gt;URLVariables&lt;/a&gt; and the setValues() method sets each property of the model based on the values of the &lt;a target="_blank" href="http://livedocs.adobe.com/flex/3/langref/flash/net/URLVariables.html"&gt;URLVariables&lt;/a&gt; method parameter.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://adamflater.net/blogassets/degrafa-post/ButtonSkinDynamicPersistentExample.html"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 231px;" src="http://2.bp.blogspot.com/_h4sLtL2cd8A/SXQq58zgujI/AAAAAAAAAGw/K_L5gfZtiB0/s320/exampleButtonDynamicPersistent.png" alt="" id="BLOGGER_PHOTO_ID_5292902637130267186" border="0" /&gt;&lt;/a&gt;&lt;a target="_blank" href="http://adamflater.net/blogassets/degrafa-post/ButtonSkinDynamicPersistentExample.html"&gt;View Application&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;geometry&gt;&lt;p&gt;This example shows a method for implementing a fully dynamic and persistent skinned Flex application.&lt;/p&gt;The source for the examples in the post can be found &lt;a target="_blank" href="http://adamflater.net/blogassets/degrafa-post/srcview/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;More links:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" href="http://degrafa.org/samples/"&gt;Degrafa Samples&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" href="http://degrafa.org/code/"&gt;Degrafa Downloads&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" href="http://degrafa.org/docs/"&gt;Degrafa Docs&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" href="http://degrafa.org/docs/"&gt;&lt;/a&gt;&lt;p&gt;This post is a result of recently using &lt;a target="_blank" href="http://www.degrafa.org/"&gt;Degrafa&lt;/a&gt; to implement similar features on a project I was working on. I was very pleased with how rapid the development process was, as well as the opportunity it gave for an elegant skinning solution. &lt;a target="_blank" href="http://www.degrafa.org/"&gt;Degrafa&lt;/a&gt; comes highly recommended by me for any Flex project.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/geometry&gt;&lt;/geometry&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2814003665874097395-1024618561868271254?l=adamflater.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamflater.blogspot.com/feeds/1024618561868271254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2814003665874097395&amp;postID=1024618561868271254' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/1024618561868271254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/1024618561868271254'/><link rel='alternate' type='text/html' href='http://adamflater.blogspot.com/2009/01/dynamic-persistent-skins-with-degrafa.html' title='Dynamic, Persistent Skins with Degrafa'/><author><name>Adam Flater</name><uri>http://www.blogger.com/profile/18224648613573489463</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18368920800186724726'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_h4sLtL2cd8A/SXQgtQoZBoI/AAAAAAAAAGQ/l-UNVuGQkno/s72-c/degrafa.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2814003665874097395.post-8793023585955248992</id><published>2009-01-11T22:43:00.012-07:00</published><updated>2009-01-11T23:23:44.690-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='outlook'/><category scheme='http://www.blogger.com/atom/ns#' term='360flex'/><category scheme='http://www.blogger.com/atom/ns#' term='Universal Mind'/><category scheme='http://www.blogger.com/atom/ns#' term='merapi'/><category scheme='http://www.blogger.com/atom/ns#' term='flexcamp'/><category scheme='http://www.blogger.com/atom/ns#' term='excel'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='cocomo'/><title type='text'>Merapi Update</title><content type='html'>&lt;p&gt;It has been far too long since I've blogged about Merapi, so I thought I would share what's up with the project. First off, the next release has been coming soon for far too long. That is my responsibility and I apologize to everyone that's been waiting on the new build. However, there is good news! The new release is now live on the site. Go to &lt;a target="_blank" href="http://www.merapiproject.net/"&gt;www.merapiproject.net&lt;/a&gt; and check it out. You can sign up for an account if you aren't already.&lt;/p&gt;&lt;p&gt;It's really great to see the Flex community cranking out cool examples with a technology that you've created. This is most definitely the case with the recent “Cocomo ready” Air Wiibot. These guys mashed up &lt;a target="_blank" href="http://labs.adobe.com/technologies/cocomo/"&gt;Cocmo&lt;/a&gt;, &lt;a target="_blank" href="http://www.adobe.com/products/flex/"&gt;Flex&lt;/a&gt;, and &lt;a target="_blank" href="http://www.merapiproject.net/"&gt;Merapi&lt;/a&gt; to control a &lt;a target="_blank" href="http://mindstorms.lego.com/eng/LW_dest/Default.aspx"&gt;Lego Mindstorm&lt;/a&gt; robot with a &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Wii_Remote"&gt;Wiimote&lt;/a&gt;. So what's &lt;a target="_blank" href="http://labs.adobe.com/technologies/cocomo/"&gt;Cocmo&lt;/a&gt; for? They've used &lt;a target="_blank" href="http://labs.adobe.com/technologies/cocomo/"&gt;Cocomo&lt;/a&gt; for live video conferencing as well as the ability to control the robot remotely. So, if my friend &lt;a target="_blank" href="http://jordansnyder.com/blog/"&gt;Jordan&lt;/a&gt; happened to have &lt;a target="_blank" href="http://www.youtube.com/watch?v=vji4rPkfnr8"&gt;Nathan (our Lego Mindstorm robot)&lt;/a&gt; at her house, I could fire up this app at my house and control Nathan remotely using a &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Wii_Remote"&gt;Wiimote&lt;/a&gt;... really cool stuff. Here's the YouTube video:&lt;/p&gt;&lt;p&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/wJuNVgshSDI&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=fr&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/wJuNVgshSDI&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=fr&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;MAX Recap&lt;/p&gt;&lt;p&gt;For those of you that missed &lt;a target="_blank" href="http://max.adobe.com/"&gt;MAX&lt;/a&gt; there was a lot of Merapi action, here's a quick recap.&lt;/p&gt;&lt;p&gt;First off, &lt;a target="_blank" href="http://flex.org/tour"&gt;Tour De Flex&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://flex.org/files/Screenshot_0.png" alt="" border="0" /&gt;&lt;/p&gt;&lt;p&gt;&lt;a target="_blank" href="http://flex.org/tour"&gt;Tour De Flex&lt;/a&gt; is an application created by Adobe used to explore components in the Flex community. Adobe used Merapi to connect the Eclipse plugin portion of the application to the Tour De Flex AIR application. You can get Tour De Flex at: &lt;a target="_blank" href="http://flex.org/tour"&gt;http://flex.org/tour&lt;/a&gt; and read more about the Merapi integration on Holly Schinsky's blog here: &lt;a target="_blank" href="http://devgirl.wordpress.com/2008/11/13/flexair-to-java-communication-using-merapi/"&gt;Flex/AIR to Java Communication Using Merapi&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Moving right along... There were a few new demos and a couple of Merapi announcements at the sessions we gave at &lt;a target="_blank" href="http://www.360conferences.com/max/"&gt;360 | MAX&lt;/a&gt;. One of the first demos I showed was Outlook integration. Here's the YouTube video:&lt;/p&gt;&lt;p&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/qNObVQodOBM&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/qNObVQodOBM&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;p&gt;The next new demo was Excel integration. If you pay attention to the video on this one you will notice one of the announcements we made at MAX, Merapi is now in the browser! In this demo you will see a Flex browser application interact with Excel:&lt;/p&gt;&lt;p&gt;&lt;object height="295" width="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/RyIRSbwNIGc&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/RyIRSbwNIGc&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="295" width="480"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;p&gt;Thanks again to &lt;a target="_blank" href="http://www.universalmind.com/"&gt;Universal Mind&lt;/a&gt; and &lt;a target="_blank" href="http://www.adobe.com/"&gt;Adobe&lt;/a&gt; for supporting me at MAX.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Coming up...&lt;/p&gt;&lt;p&gt;&lt;a target="_blank" href="http://www.flexcampchicago.com/"&gt;FlexCamp Chicago&lt;/a&gt; 1/23, &lt;a target="_blank" href="http://www.flexcampoc.com/"&gt;FlexCamp OC&lt;/a&gt; 1/31, and &lt;a target="_blank" href="http://www.360conferences.com/360flex/"&gt;360 Flex | Indy&lt;/a&gt; 5/18-20 (probably)&lt;/p&gt;&lt;p&gt;I'll be presenting at each of these conferences (assuming &lt;a target="_blank" href="http://lordbron.wordpress.com/"&gt;Tom&lt;/a&gt; and &lt;a target="_blank" href="http://johnwilker.com/"&gt;John&lt;/a&gt; let me in again.. they have yet to announce speakers) ;)&lt;/p&gt;&lt;p&gt;There will be some especially interesting announcements at &lt;a target="_blank" href="http://www.flexcampchicago.com/"&gt;FlexCamp Chicago&lt;/a&gt;. Make sure you turn out if possible, otherwise, watch the blogosphere for the recap.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Thanks to everyone who has been using Merapi and giving us feedback on the framework. The creativity, ingenuity, support, and patience from the community has been excellent.&lt;/p&gt;&lt;p&gt;Enjoy the new release!&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2814003665874097395-8793023585955248992?l=adamflater.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamflater.blogspot.com/feeds/8793023585955248992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2814003665874097395&amp;postID=8793023585955248992' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/8793023585955248992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/8793023585955248992'/><link rel='alternate' type='text/html' href='http://adamflater.blogspot.com/2009/01/merapi-update.html' title='Merapi Update'/><author><name>Adam Flater</name><uri>http://www.blogger.com/profile/18224648613573489463</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18368920800186724726'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2814003665874097395.post-537444113837080758</id><published>2009-01-05T13:47:00.011-07:00</published><updated>2009-01-05T14:20:51.717-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='brightkite'/><category scheme='http://www.blogger.com/atom/ns#' term='Universal Mind'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='rich internet application'/><title type='text'>The Brightkite Wall</title><content type='html'>&lt;p&gt;In late 2008 &lt;a href='http://www.brightkite.com' target='_blank'&gt;Brightkite&lt;/a&gt; engaged &lt;a href='http://www.UniversalMind.com' target='_blank'&gt;Universal Mind&lt;/a&gt; to develop an application called &lt;a href="http://brightkite.com/wall" target="_blank"&gt;The Brightkite Wall&lt;/a&gt;. The Wall is a &lt;a href='http://tryit.adobe.com/us/cs4/flash/index.html?sdid=DOPXU' target='_blank'&gt;Flash&lt;/a&gt; Application built using &lt;a href='http://www.adobe.com/products/flex/' target='_blank'&gt;Flex&lt;/a&gt;. &lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_h4sLtL2cd8A/SWJyYciIrUI/AAAAAAAAAGI/eDtBEefY_K4/s1600-h/TheWall.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 261px;" src="http://2.bp.blogspot.com/_h4sLtL2cd8A/SWJyYciIrUI/AAAAAAAAAGI/eDtBEefY_K4/s320/TheWall.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5287914676788178242" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;For those of you unfamiliar with &lt;a href='http://www.brightkite.com' target='_blank'&gt;Brightkite&lt;/a&gt;, here's a quick overview:&lt;/p&gt;&lt;p&gt;&lt;a href='http://www.brightkite.com' target='_blank'&gt;Brightkite&lt;/a&gt; is a location based, micro-blogging, social networking platform. Unless you've been living in a cave for the last five years, you're probably familiar with sites like &lt;a href='http://www.myspace.com' target='_blank'&gt;MySpace&lt;/a&gt; and &lt;a href='http://www.Facebook.com' target='_blank'&gt;Facebook&lt;/a&gt;. One of the features of these sites is something called a status. The status you set is meant to reflect something about your mood, or what you're up to, i.e.. "Adam is writing a blog post". This concept is similar to an away message on an instant messenger account. The first site to gain traction as a platform that specializes in status updates was &lt;a href='http://www.Twitter.com' target='_blank'&gt;Twitter&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;&lt;a href='http://www.brightkite.com' target='_blank'&gt;Brightkite&lt;/a&gt; retains the idea of status updates and friending other &lt;a href='http://www.brightkite.com' target='_blank'&gt;Brightkite&lt;/a&gt; users, but adds the concept of a "check in". When you "check in" in &lt;a href='http://www.brightkite.com' target='_blank'&gt;Brightkite&lt;/a&gt; you're saying where you are, geographically speaking. So, status updates (called notes in &lt;a href='http://www.brightkite.com' target='_blank'&gt;Brightkite&lt;/a&gt;) are posted from a place. This means these notes often have an annotative quality about the place where the user is checked in. &lt;a href='http://www.brightkite.com' target='_blank'&gt;Brightkite&lt;/a&gt; users also have the option of posting photos at a &lt;a href='http://www.brightkite.com' target='_blank'&gt;Brightkite&lt;/a&gt; location. There are a lot more features in the &lt;a href='http://www.brightkite.com' target='_blank'&gt;Brightkite&lt;/a&gt; platform including: an iPhone application, a mobile site, and integration with other social networking platforms: &lt;a href='http://www.Facebook.com' target='_blank'&gt;Facebook&lt;/a&gt;, &lt;a href='http://www.Twitter.com' target='_blank'&gt;Twitter&lt;/a&gt;, &lt;a href="http://www.flickr.com/"&gt;Flickr&lt;/a&gt;, and &lt;a href="http://fireeagle.yahoo.net/"&gt;Fire Eagle&lt;/a&gt;. To find out more about &lt;a href='http://www.brightkite.com' target='_blank'&gt;Brightkite&lt;/a&gt; sign up for your free account at: &lt;a href='http://www.brightkite.com' target='_blank'&gt;www.Brightkite.com&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href="http://brightkite.com/wall" target="_blank"&gt;The Brightkite Wall&lt;/a&gt; is a kiosk-style application that provides a feed form a place, a person, or for search terms in the &lt;a href='http://www.brightkite.com' target='_blank'&gt;Brightkite&lt;/a&gt; ecosystem. The application was built using Adobe's &lt;a href='http://www.adobe.com/products/flex/' target='_blank'&gt;Flex&lt;/a&gt; 3 Framework for building &lt;a href='http://tryit.adobe.com/us/cs4/flash/index.html?sdid=DOPXU' target='_blank'&gt;Flash&lt;/a&gt; Rich Internet Applications. &lt;/p&gt;&lt;p&gt;One development challenge we faced was to implement a user interface that scaled in size regardless of the resolution of the display it was running on. Because the Wall can be launched on any machine, those machines might have a display like a small laptop screen or up to a large projection display. The Wall user interface needed to scale appropriately for each use case. This means fonts, images, and skins all need to look, relatively, the same one any given display size. Although this feature isn't extremely difficult technically, it is a bit tricky. However, &lt;a href='http://www.adobe.com/products/flex/' target='_blank'&gt;Flex&lt;/a&gt; does offer some advantages when it comes to implementing a UI like the Wall.&lt;/p&gt;&lt;p&gt;Another challenge was implementing an application that would execute in a full screen mode and reliably for a long period of time. To achieve this requirement we implemented a "BoundedList" UI class that automatically disposes of unused list items, but also allows for various transition effects to be applied as new items appear in the lists. &lt;/p&gt;&lt;p&gt;The data source for the wall is the &lt;a href='http://www.brightkite.com' target='_blank'&gt;Brightkite&lt;/a&gt; RSS feed. The application is parameterized to allow for dynamic configuration (on launch), of the RSS feed, polling rate, &lt;a href='http://www.brightkite.com' target='_blank'&gt;Brightkite&lt;/a&gt; place, and the size of the bounded lists. The parameters are passed using &lt;a href='http://tryit.adobe.com/us/cs4/flash/index.html?sdid=DOPXU' target='_blank'&gt;Flash&lt;/a&gt; variables and accessed on the initialization of the application.&lt;/p&gt;&lt;p&gt;Although &lt;a href="http://brightkite.com/wall" target="_blank"&gt;The Brightkite Wall&lt;/a&gt; is a fairly simple &lt;a href='http://www.adobe.com/products/flex/' target='_blank'&gt;Flex&lt;/a&gt; application, built in just a few weeks, it is a great example of how &lt;a href='http://www.adobe.com/products/flex/' target='_blank'&gt;Flex&lt;/a&gt; can fit into a platform. Many companies rely on &lt;a href='http://www.adobe.com/products/flex/' target='_blank'&gt;Flex&lt;/a&gt; for their entire product line, and it is often a great choice for many products. In the case of &lt;a href='http://www.brightkite.com' target='_blank'&gt;Brightkite&lt;/a&gt;, they had a specific problem to solve and &lt;a href='http://www.adobe.com/products/flex/' target='_blank'&gt;Flex&lt;/a&gt; happened to provide an excellent solution for the problem. &lt;/p&gt;&lt;p&gt;The Wall is still in beta and &lt;a href='http://www.brightkite.com' target='_blank'&gt;Brightkite&lt;/a&gt; needs your feedback on the kinds of features you'd like to see in the next version.&lt;/p&gt;&lt;p&gt;The &lt;a href='http://www.brightkite.com' target='_blank'&gt;Brightkite&lt;/a&gt; blog: &lt;a href='http://blog.brightkite.com'&gt;http://blog.brightkite.com&lt;/a&gt;&lt;br /&gt;&lt;a href='http://www.brightkite.com' target='_blank'&gt;Brightkite&lt;/a&gt; on &lt;a href='http://www.Twitter.com' target='_blank'&gt;Twitter&lt;/a&gt;: &lt;a href='http://www.twitter.com/brightkite' target='_blank'&gt;http://www.twitter.com/brightkite&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2814003665874097395-537444113837080758?l=adamflater.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamflater.blogspot.com/feeds/537444113837080758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2814003665874097395&amp;postID=537444113837080758' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/537444113837080758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/537444113837080758'/><link rel='alternate' type='text/html' href='http://adamflater.blogspot.com/2009/01/brightkite-wall.html' title='The Brightkite Wall'/><author><name>Adam Flater</name><uri>http://www.blogger.com/profile/18224648613573489463</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18368920800186724726'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_h4sLtL2cd8A/SWJyYciIrUI/AAAAAAAAAGI/eDtBEefY_K4/s72-c/TheWall.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2814003665874097395.post-3778731638813465899</id><published>2008-11-12T11:29:00.014-07:00</published><updated>2008-11-14T08:22:02.152-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='Universal Mind'/><category scheme='http://www.blogger.com/atom/ns#' term='merapi'/><category scheme='http://www.blogger.com/atom/ns#' term='adobe max'/><category scheme='http://www.blogger.com/atom/ns#' term='nasdaq market replay'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='360 flex'/><title type='text'>Adobe MAX 2008</title><content type='html'>&lt;p&gt;Monday, November 17th marks the official start to this year's &lt;a href="http://max.adobe.com/" target="_blank"&gt;Adobe MAX&lt;/a&gt; conference. I wanted to give a quick update on where I'll be and what I'll be up to at &lt;a href="http://max.adobe.com/" target="_blank"&gt;MAX&lt;/a&gt;. So, here it is.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;First of all, at &lt;a href="http://max.adobe.com/" target="_blank"&gt;MAX&lt;/a&gt; you can follow me on &lt;a href="http://twitter.com/adamflater" target="_blank"&gt;Twitter&lt;/a&gt; or &lt;a href="http://www.brightkite.com/people/adamflater" target="_blank"&gt;BrightKite&lt;/a&gt; my handle is "adamflater" on both. By the way, the &lt;a href="http://www.brightkite.com/" target="_blank"&gt;BrightKite&lt;/a&gt; guys were cool enough to setup a placemark for &lt;a href="http://max.adobe.com/" target="_blank"&gt;MAX&lt;/a&gt;. The placemark is "&lt;a href="http://brightkite.com/places/ccf7307c901011dd84c3003048c0801e" target="_blank"&gt;max2008&lt;/a&gt;". That's a valid placemark for checking in and posting your notes and photos while at &lt;a href="http://max.adobe.com/" target="_blank"&gt;MAX&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Aside from my scheduled events you'll also find me at the &lt;a href="http://www.universalmind.com/" target="_blank"&gt;Universal Mind&lt;/a&gt; booth throughout the conference. We'll be demoing all of the apps we've been hard at work on in the past year, including our GIS / Data Visualization product: &lt;a href="http://www.spatialkey.com/" target="_blank"&gt;SpatialKey&lt;/a&gt;, and the &lt;a href="http://adobemax08.com/na/experience/#?s=5&amp;amp;p=3" target="_blank"&gt;MAX Award Finalist&lt;/a&gt; &lt;a href="https://data.nasdaq.com/MR.aspx" target="_blank"&gt;NASDAQ Market Replay&lt;/a&gt;. &lt;a href="https://data.nasdaq.com/MR.aspx" target="_blank"&gt;Market Replay&lt;/a&gt; is an application that I had the pleasure of working on with the &lt;a href="http://www.nasdaq.com/" target="_blank"&gt;NASDAQ&lt;/a&gt; team. Please vote:&lt;br /&gt;&lt;a href="http://tinyurl.com/3fk6ng" target="_blank"&gt;&lt;img src="http://adamflater.net/blogassets/nasdaq/MarketReplayBanner.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The partner booths will be located at: Moscone West, Level 1.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;My Schedule:&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;Speaker Dinner&lt;br /&gt;When: Sunday, November 16th&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I'll be participating in several sessions at &lt;a href="http://max.adobe.com/" target="_blank"&gt;MAX&lt;/a&gt; and also attending the annual speaker dinner. I hope to see all the familiar faces as well as meet many of the other great folks in the Adobe community I have yet to become acquainted with.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;hr /&gt;&lt;a href="http://max.adobe.com/na/sessions/browser/#853" target="_blank"&gt;Adobe AIR++&lt;/a&gt;&lt;br /&gt;When: Monday, November 17th, 11:30 am - 12:30 pm&lt;br /&gt;Where: Moscone West 2000&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This is a session I'll just be attending. &lt;a href="http://www.cynergysystems.com/blogs/page/andrewtrice?entry=want_to_see_some_cool" target="_blank"&gt;Andrew Trice&lt;/a&gt; has been doing some cool stuff with &lt;a href="http://www.merapiproject.net" target="_blank"&gt;Merapi&lt;/a&gt; and I definitely want to check it out. I'll only be able to attend part of the session due to the &lt;a href="http://www.merapiproject.net" target="_blank"&gt;Merapi&lt;/a&gt; session directly following this one. Andrew, we'll save you the last demo spot at &lt;a href="http://www.360flex.com/max/" target="_blank"&gt;360 | MAX&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr /&gt;&lt;a href="http://360max.wikispaces.com/Schedule" target="_blank"&gt;Merapi at 360 | MAX&lt;/a&gt;&lt;br /&gt;When: Monday, November 17th, 12:30 pm - 2:00 pm&lt;br /&gt;Where: Moscone West, Level 2&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://johnwilker.com/" target="_blank"&gt;John&lt;/a&gt; and &lt;a href="http://lordbron.wordpress.com/" target="_blank"&gt;Tom&lt;/a&gt;, the men behind &lt;a href="http://360conferences.com/" target="_blank"&gt;360 | Conferences&lt;/a&gt;, have always been extremely gracious about letting me speak at their events. This year they are hosting an unconference at &lt;a href="http://max.adobe.com/" target="_blank"&gt;MAX&lt;/a&gt;. The unconference will feature advanced Flex and AIR topics.&lt;br /&gt;&lt;br /&gt;At the last &lt;a href="http://www.360flex.com" target="_blank"&gt;360 Flex&lt;/a&gt; conference in &lt;a href="http://www.360conferences.com/360flex/2008/04/360flex-san-jose-schedule.html" target="_blank"&gt;San Jose&lt;/a&gt; my friend &lt;a href="http://jordansnyder.com/" target="_blank"&gt;Jordan&lt;/a&gt; and I presented on &lt;a href="http://www.merapiproject.net" target="_blank"&gt;Merapi&lt;/a&gt;. We showed an &lt;a href="http://www.youtube.com/watch?v=vji4rPkfnr8" target="_blank"&gt;AIR application&lt;/a&gt; controlling a &lt;a href="http://www.youtube.com/watch?v=vji4rPkfnr8" target="_blank"&gt;Lego Mindstorm Robot&lt;/a&gt; in real time. At both of our &lt;a href="http://www.360flex.com/max/" target="_blank"&gt;360 | MAX&lt;/a&gt; sessions we're going to have a lot of people from the community present the &lt;a href="http://www.merapiproject.net" target="_blank"&gt;Merapi&lt;/a&gt; applications they've been working on. You can count on seeing some pretty cool stuff from: &lt;a href="http://www.whatanexperience.org/" target="_blank"&gt;Dave Meeker&lt;/a&gt;, &lt;a href="http://www.infoaccelerator.net/" target="_blank"&gt;Andrew Powell&lt;/a&gt;, &lt;a href="http://www.cynergysystems.com/blogs/page/andrewtrice?entry=want_to_see_some_cool" target="_blank"&gt;Andrew Trice&lt;/a&gt;, &lt;a href="http://devgirl.wordpress.com/" target="_blank"&gt;Holly Schinsky&lt;/a&gt;, &lt;a href="http://www.merhl.com/" target="_blank"&gt;Joe Johnston&lt;/a&gt;, and me. We'll be demoing AIR apps that integrate with GPS, RFID, Eclipse, Oracle, Outlook, Growl, MacBook sensors, and of course Legos.&lt;br /&gt;&lt;br /&gt;You won't want to miss these &lt;a href="http://www.merapiproject.net" target="_blank"&gt;Merapi&lt;/a&gt; events and that's why we have three of them.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;hr /&gt;&lt;a href="http://max.adobe.com/na/experience/#?s=1&amp;amp;p=2" target="_blank"&gt;MAX Birds-of-a-Feather (BOFs)&lt;/a&gt;&lt;br /&gt;When: Monday, November 17th, 8:30 pm -10:20 pm&lt;br /&gt;Where: Moscone West, Level 2&lt;p&gt;&lt;/p&gt;&lt;p&gt;I'll be participating in two BOFs on Monday night: &lt;a href="http://www.insideria.com/2008/11/air-gone-wild---check-out-next.html" target="_blank"&gt;AIR Gone Wild&lt;/a&gt; and the &lt;a href="http://quickbase.intuit.com/" target="_blank"&gt;Intuit Quickbase Platform&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.insideria.com/2008/11/air-gone-wild---check-out-next.html" target="_blank"&gt;AIR Gone Wild&lt;/a&gt; is a BOF hosted by &lt;a href="http://gregsramblings.com/" target="_blank"&gt;Greg Wilson&lt;/a&gt; from Adobe. We'll be showing more of our &lt;a href="http://www.merapiproject.net" target="_blank"&gt;Merapi&lt;/a&gt; goodness at this BOF. If there's a question you don't have the chance to ask in a session this BOF is a great place to come and ask it.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.intuit.com/"&gt;Intuit&lt;/a&gt; has a new platform geared towards Flex. It's called &lt;a href="http://quickbase.intuit.com/" target="_blank"&gt;Quickbase&lt;/a&gt; and it's an interesting take on cloud computing. I had the opportunity to work with the platform on one project and I highly recommend checking these guys out.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;a href="http://360max.wikispaces.com/Schedule" target="_blank"&gt;Merapi at 360 | MAX&lt;/a&gt;&lt;br /&gt;When: Tuesday, November 18th, 12:00 pm - 2:00 pm&lt;br /&gt;Where: Moscone West, Level 2&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In our second &lt;a href="http://www.merapiproject.net" target="_blank"&gt;Merapi&lt;/a&gt; session at &lt;a href="http://www.360flex.com/max/" target="_blank"&gt;360 | MAX&lt;/a&gt; we'll cover anything we didn't have time for in the previous day as well as demo all the cool stuff from the previous sessions. Conferences tend to be a place where a lot of people crank on cool ideas they have. So, you never know, a new app might pop up between Monday and Tuesday they we'll demo during this session.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr /&gt;&lt;a href="http://max.adobe.com/na/sessions/browser/#840" target="_blank"&gt;InsideRIA Outlook, 2009: What Every Developer Needs to Be Thinking About&lt;/a&gt;&lt;br /&gt;When: Wednesday, November 19th, 11:00 am - 12:00 pm&lt;br /&gt;Where: Moscone West, Room 2009&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://www.oreillynet.com/pub/au/3426" target="_blank"&gt;Rich Tretola&lt;/a&gt;, community manager of &lt;a href="http://www.InsideRIA.com" target="_blank"&gt;InsideRIA.com&lt;/a&gt; is hosting this session. This will be a panel format where each of the presenters brings their ideas on the future of RIAs. I'm pretty excited for this one, panel discussion are some of the most valuable aspects of any great conference.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr /&gt;&lt;a href="http://max.adobe.com/na/sessions/browser/#638" target="_blank"&gt;Introduction to Flex Builder 3&lt;/a&gt;&lt;br /&gt;When: Wednesday, November 19th, 2:00pm - 3:00 pm&lt;br /&gt;Where: Moscone West, Room 2005&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This will be a great session for those of you just getting starting or thinking about jumping into &lt;a href="http://www.adobe.com/products/flex/" target="_blank"&gt;Flex&lt;/a&gt; development. I'll be covering all the basics of the &lt;a href="http://www.adobe.com/products/flex/features/flex_builder/" target="_blank"&gt;Flex IDE&lt;/a&gt; as well as an overview of what &lt;a href="http://www.adobe.com/products/flex/" target="_blank"&gt;Flex&lt;/a&gt; is as a whole. In my source code demos I'll be integrating a &lt;a href="http://www.adobe.com/products/flex/" target="_blank"&gt;Flex&lt;/a&gt; app with &lt;a href="http://www.brightkite.com" target="_blank"&gt;BrightKite&lt;/a&gt;, the site I mentioned earlier in the post, to show you how easy it is to consume data in &lt;a href="http://www.adobe.com/products/flex/" target="_blank"&gt;Flex&lt;/a&gt;. I'm looking forward to great questions at this session. It's always interesting to find out what people need to know about &lt;a href="http://www.adobe.com/products/flex/" target="_blank"&gt;Flex&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;All right, well I think that's enough. Looking forward to seeing everyone at &lt;a href="http://max.adobe.com/" target="_blank"&gt;MAX&lt;/a&gt;!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;-adam&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2814003665874097395-3778731638813465899?l=adamflater.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamflater.blogspot.com/feeds/3778731638813465899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2814003665874097395&amp;postID=3778731638813465899' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/3778731638813465899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/3778731638813465899'/><link rel='alternate' type='text/html' href='http://adamflater.blogspot.com/2008/11/adobe-max-2008.html' title='Adobe MAX 2008'/><author><name>Adam Flater</name><uri>http://www.blogger.com/profile/18224648613573489463</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18368920800186724726'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2814003665874097395.post-5841715661279097678</id><published>2008-10-29T09:13:00.004-06:00</published><updated>2008-10-29T09:38:20.080-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipseworld'/><category scheme='http://www.blogger.com/atom/ns#' term='Universal Mind'/><category scheme='http://www.blogger.com/atom/ns#' term='merapi'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>EclipseWorld Session Recap</title><content type='html'>As promised in my session at &lt;a href="http://eclipseworld.net/"&gt;EclipseWorld&lt;/a&gt; today, I'm posting a recap of the session. My session was titled "Building Flex/AIR UIs for Java Using Merapi". The session gave an overview of &lt;a href="http://www.adobe.com/products/flex/"&gt;Flex&lt;/a&gt;, &lt;a href="http://www.adobe.com/products/flex/features/flex_builder/"&gt;Flex Builder&lt;/a&gt;, and &lt;a href="http://merapiproject.net/"&gt;Merapi&lt;/a&gt;. I also provided some sample application demos using the &lt;a href="http://merapiproject.net/"&gt;Merapi&lt;/a&gt; framework. You'll find a link to download the slides from the session at the end of this post. My session was slated as a 100 level talk so I covered a lot of basic, high level concepts regarding &lt;a href="http://www.adobe.com/products/flex/"&gt;Flex&lt;/a&gt; and &lt;a href="http://www.adobe.com/products/flex/features/flex_builder/"&gt;Flex Builder&lt;/a&gt;. I'm interested to hear feedback on the talk as I'm typically presenting at &lt;a href="http://www.360conferences.com/360flex/"&gt;Flex centric events&lt;/a&gt; and &lt;a href="http://eclipseworld.net"&gt;EclipseWorld&lt;/a&gt; focuses more on Java development. My hope is that the session was valuable to those seeking an introductory look at &lt;a href="http://www.adobe.com/products/flex/"&gt;Flex&lt;/a&gt; and &lt;a href="http://www.adobe.com/products/air/"&gt;AIR&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Thanks to everyone that attended and for all of the great questions throughout the session.&lt;br /&gt;&lt;br /&gt;Download links:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://adamflater.net/blogassets/eclipseworld/2008/Adam_Flater-Building_Flex-AIR_UIs_for_Java_Using_Merapi.pdf"&gt;Session Slides&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Merapi Examples:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://adamflater.blogspot.com/2008/05/merapi-physics.html"&gt;Mac Book Pro Accelerometer&lt;/a&gt;&lt;br /&gt;&lt;a href="http://adamflater.blogspot.com/2008/08/recap-from-360-flex-san-jose_19.html"&gt;Lego Mindstorm Robotics&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.infoaccelerator.net/blog/post.cfm/live-gps-visualizations-with-air-merapi"&gt;Live GPS Visualization&lt;/a&gt;*&lt;br /&gt;&lt;a href="http://www.infoaccelerator.net/blog/post.cfm/sending-growl-notifications-with-flex-via-air-merapi"&gt;Sending Growl Notifications&lt;/a&gt;*&lt;br /&gt;&lt;a href="http://www.infoaccelerator.net/blog/post.cfm/rfid-enabled-air-applications-with-merapi"&gt;RFID Enable AIR Applications&lt;/a&gt;*&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;* - Part of &lt;a href="http://www.infoaccelerator.net/"&gt;Andrew Powell's Blog infoaccelerator.net&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2814003665874097395-5841715661279097678?l=adamflater.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamflater.blogspot.com/feeds/5841715661279097678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2814003665874097395&amp;postID=5841715661279097678' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/5841715661279097678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/5841715661279097678'/><link rel='alternate' type='text/html' href='http://adamflater.blogspot.com/2008/10/eclipseworld-session-recap.html' title='EclipseWorld Session Recap'/><author><name>Adam Flater</name><uri>http://www.blogger.com/profile/18224648613573489463</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18368920800186724726'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2814003665874097395.post-2888054388592098769</id><published>2008-09-19T11:11:00.007-06:00</published><updated>2008-09-19T12:12:33.234-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='360flex'/><category scheme='http://www.blogger.com/atom/ns#' term='Universal Mind'/><category scheme='http://www.blogger.com/atom/ns#' term='merapi'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='360 flex'/><title type='text'>360 Flex | San Jose - Merapi Session Survery Feedback</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.360conferences.com/360flex/images/360Flex_SanJose_Logo_002.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://www.360conferences.com/360flex/images/360Flex_SanJose_Logo_002.jpg" alt="" border="0" /&gt;&lt;/a&gt;To keep in the open tradition of 360 | Flex I'm posting my survey feedback once again. The Merapi session at 360 Flex | San Jose was really fun and was happy to share the stage with my friend &lt;a href="http://jordansnyder.com/"&gt;Jordan Synder&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;There was one very constructive comment about our examples. The examples that I showed were pretty basic and Jordan's example was somewhat complex. Showing some deeper examples with medium complexity is a great suggestion for improving this talk and a great take away for me in preparing for my next Merapi session.&lt;br /&gt;&lt;br /&gt;Thanks to everyone that came to the session and provided feedback.&lt;br /&gt;&lt;br /&gt;Without further delay...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;How to make your AIR app blow up with Merapi&lt;br /&gt;&lt;br /&gt;Merapi is a framework that enables a bridge between Flex on AIR and Java at the desktop layer. If you need to access a Java api in Flex or a Flex API in Java, this is the right tool for you. This session will cover the basics of using Merapi to build a Java enabled AIR application. Please bring your questions and comments about the framework as well as any applications you want to show off. This will be an interactive session, you'll be able to code along with the session and try out some Merapi samples.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;br /&gt;Respondants:   33  &lt;br /&gt;&lt;br /&gt;What the user Expected?    90.91 %  &lt;br /&gt;Slides Useful:    84.85 %&lt;br /&gt;Average Rating:  4.3030&lt;br /&gt;Session Informative?  100.00 %    &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Was the speaker authoritive?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Answered questions very well and had in-depth knowledge of the subject material&lt;br /&gt;&lt;br /&gt;Both speakers spoke well.&lt;br /&gt;&lt;br /&gt;Oh man, they knew like everything about this stuff. EVERYTHING.&lt;br /&gt;&lt;br /&gt;Seemed very knowledgable, and was confident in what they were presenting.&lt;br /&gt;&lt;br /&gt;Adam was very knowledgable about the topic, seeing as he wrote the framework. He was confident in his presentation, and had very interesting content.&lt;br /&gt;&lt;br /&gt;he is involved with the beta framework and created working apps&lt;br /&gt;&lt;br /&gt;Both Adam and Jordan did a great job with their presentation. Jordan's usage of Bluetooth via AIR to control the LEGO MindStorm was way cool.&lt;br /&gt;&lt;br /&gt;adam and jordan are badass&lt;br /&gt;&lt;br /&gt;Both speakers were extremely knowledgable. Jordan; however was somewhat soft spoken and monotone, as if she was not really interested in presenting.&lt;br /&gt;&lt;br /&gt;Adam and Jordan really know their framework, and they didn't have trouble fielding question from the audience. Unfortunately, Merapi is still in its infancey, so a lot of their answers were, "That's something we're planning on doing."&lt;br /&gt;&lt;br /&gt;Adam and Jordan really know their framework, and they didn't have trouble fielding question from the audience. Unfortunately, Merapi is still in its infancey, so a lot of their answers were, "That's something we're planning on doing."&lt;br /&gt;&lt;br /&gt;I did not previously know anything about Merapi&lt;br /&gt;&lt;br /&gt;Yes&lt;br /&gt;&lt;br /&gt;I love how you have the authors of the various projects presenting on their stuff.&lt;br /&gt;&lt;br /&gt;he was one of the leads on the project and seemed to have a good grasp of what he wanted to present and the way to do it&lt;br /&gt;&lt;br /&gt;He knew what he was doing, explained it well&lt;br /&gt;&lt;br /&gt;Both speakers seemed very authoritive with the toolsets.&lt;br /&gt;&lt;br /&gt;Was a fun preso. Jordan's robot rocks!&lt;br /&gt;&lt;br /&gt;Loved Ms. Snyder's application!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Was the Session Informative?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I had never heard of Merapi before&lt;br /&gt;&lt;br /&gt;Good demos&lt;br /&gt;&lt;br /&gt;It was interesting to see what Merapi was capable of and how it worked.&lt;br /&gt;&lt;br /&gt;I learned a whole whole lot of things.&lt;br /&gt;&lt;br /&gt;Good examples of what can be done with the project, and a good quick intro on how to get started.&lt;br /&gt;&lt;br /&gt;I have a sense of what merapi is and is not&lt;br /&gt;&lt;br /&gt;The session was example-heavy, which really helps when showing off a framework.&lt;br /&gt;&lt;br /&gt;The session was example-heavy, which really helps when showing off a framework.&lt;br /&gt;&lt;br /&gt;very much so&lt;br /&gt;&lt;br /&gt;Basic introduction to Merapi, though it is in private beta.&lt;br /&gt;&lt;br /&gt;he started with just 4 slides and then jumped into code&lt;br /&gt;&lt;br /&gt;yes, but I basically knew all that Adam said, but the lady was all new, that was great&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Were the Slides Useful?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There were a few slides to give background info then many examples which really helped&lt;br /&gt;&lt;br /&gt;Primarily code.&lt;br /&gt;&lt;br /&gt;They were pretty good, but it was really all about teh codez.&lt;br /&gt;&lt;br /&gt;There weren't any slides, just sample code. Which is much better than slides.&lt;br /&gt;&lt;br /&gt;There were only a few of them before he jumped in to code examples, which was great. The examples were simple enough to easily understand everything that was happening, but still interesting enough that they kept the audience's attention.&lt;br /&gt;&lt;br /&gt;Not that they weren't useful, just pretty much non-existant. Not a bad thing, hands on demos rock.&lt;br /&gt;&lt;br /&gt;There weren't many slides, but lots of talk about what the code did, so that was great.&lt;br /&gt;&lt;br /&gt;simple and sweet&lt;br /&gt;&lt;br /&gt;Yes code snippets were concise and easy to understand&lt;br /&gt;&lt;br /&gt;There weren't many slides because the session was driven by examples, but for what they were, the slides did provide the necessary information: what Merapi is, where to get it, and contact info for the speakers&lt;br /&gt;&lt;br /&gt;There weren't many slides because the session was driven by examples, but for what they were, the slides did provide the necessary information: what Merapi is, where to get it, and contact info for the speakers&lt;br /&gt;&lt;br /&gt;good overall&lt;br /&gt;&lt;br /&gt;Yes&lt;br /&gt;&lt;br /&gt;but it didn't matter. the code was the best way to describe merapi&lt;br /&gt;&lt;br /&gt;cant remember the slides - i do remember the robot&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Additional Comments:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The focus on hardware integration was interesting although unexpected. A demo of complex data manipulation using Java would have been a nice addition. There was some delay switching presenters' computers.&lt;br /&gt;&lt;br /&gt;Adam is such a badass that now I'm following him on Twitter. Also, I really liked the guest appearance by Jordan. She has a neat robot and I want to be like her (knowledgeable about robots; not female).&lt;br /&gt;&lt;br /&gt;I had never heard of merapi. I walked in thinking it yet another cairngorm clone but walked away with an appreciation of it's real domain. nice presentation. concise. And thank you for finishing when you were done rather than pull out a load of filler.&lt;br /&gt;&lt;br /&gt;Good speakers. Great demos. Bring them back.&lt;br /&gt;&lt;br /&gt;Very good. Would like to see solutions to deplyoyment and runtime intigration with java and air&lt;br /&gt;&lt;br /&gt;There were no Air Apps that blew up.&lt;br /&gt;&lt;br /&gt;Great demo from both presenters on using Merapi to bridge AIR/Java&lt;br /&gt;&lt;br /&gt;Adam had several examples that were somewhat low-level, getting no more complicated then pushing random numbers generated in Java to Flex, and Jordan's examples were much heavier. I would like to have seen something in the middle: perhaps how to leverage Merapi to do something on the OS that you cannot do in AIR. The LEGO Mindstorm demo was fantastic. It really drove the power of the framework home.&lt;br /&gt;&lt;br /&gt;Adam had several examples that were somewhat low-level, getting no more complicated then pushing random numbers generated in Java to Flex, and Jordan's examples were much heavier. I would like to have seen something in the middle: perhaps how to leverage Merapi to do something on the OS that you cannot do in AIR. The LEGO Mindstorm demo was fantastic. It really drove the power of the framework home.&lt;br /&gt;&lt;br /&gt;speakers were very knowledgable&lt;br /&gt;&lt;br /&gt;The Lego Mindstorm NXT demo was very clever.&lt;br /&gt;&lt;br /&gt;Great example of hardware / air integration.&lt;br /&gt;&lt;br /&gt;AIR controlled cars woot!&lt;br /&gt;&lt;br /&gt;Dude, the Mindstorm stuff was HOT, HOT, HOT!&lt;br /&gt;&lt;br /&gt;it would have been nice if the developers of merapi had more of the projects future planned and deployment issues decided upon but overall it was a good introduction to what merapi is and where it fits in a developer's toolkit&lt;br /&gt;&lt;br /&gt;exciting stuff&lt;br /&gt;&lt;br /&gt;Great examples!&lt;br /&gt;&lt;br /&gt;as a java developer this is a solid tool to work with AIR&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2814003665874097395-2888054388592098769?l=adamflater.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamflater.blogspot.com/feeds/2888054388592098769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2814003665874097395&amp;postID=2888054388592098769' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/2888054388592098769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/2888054388592098769'/><link rel='alternate' type='text/html' href='http://adamflater.blogspot.com/2008/09/360-flex-san-jose-merapi-session.html' title='360 Flex | San Jose - Merapi Session Survery Feedback'/><author><name>Adam Flater</name><uri>http://www.blogger.com/profile/18224648613573489463</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18368920800186724726'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2814003665874097395.post-6894878773433108661</id><published>2008-08-31T13:07:00.009-06:00</published><updated>2008-09-02T12:06:17.435-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ria'/><category scheme='http://www.blogger.com/atom/ns#' term='Universal Mind'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>New Universal Mind Web Site is Live!</title><content type='html'>&lt;img style="width: 590px;" src="http://adamflater.net/blogassets/umsite.png" alt="" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;We launched our new Universal Mind web site today. You can find the site at: &lt;a href="http://www.universalmind.com/"&gt;www.universalmind.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As far as I know, we are the first major Flex centric services company to release a site using Flex technology.&lt;br /&gt;&lt;br /&gt;This site was built to be search engine optimized even before the &lt;a href="http://blog.digitalbackcountry.com/?p=1478"&gt;Flex search bots&lt;/a&gt; that Adobe developed for Google and Microsoft. This is achieved in two ways: one, by using a dynamic back-end that expands the same content in an HTML view for browsers that do not support the Flash Player... and.. two, the site &lt;a href="http://www.asual.com/swfaddress/"&gt;SWFAddress&lt;/a&gt; for deep linking into content areas. Case in point, load the site on your iPhone or Blackberry and you'll see the same content and look-and-feel.&lt;br /&gt;&lt;br /&gt;The site also features extensive use of &lt;a href="http://livedocs.adobe.com/flex/3/html/help.html?content=modular_2.html"&gt;Flex Modules&lt;/a&gt;. The use of modules allows deferred loading of many areas of the site that users would not want to otherwise wait to load.&lt;br /&gt;&lt;br /&gt;[Update : Thanks to &lt;a href="http://www.infoaccelerator.net/"&gt;Andy Powell&lt;/a&gt; our UM Blog &lt;a href="http://blog.universalmind.com/"&gt;blog.universalmind.com&lt;/a&gt; has a new look-and-feel to match the new site.]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2814003665874097395-6894878773433108661?l=adamflater.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamflater.blogspot.com/feeds/6894878773433108661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2814003665874097395&amp;postID=6894878773433108661' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/6894878773433108661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/6894878773433108661'/><link rel='alternate' type='text/html' href='http://adamflater.blogspot.com/2008/08/new-universal-mind-web-site-is-live.html' title='New Universal Mind Web Site is Live!'/><author><name>Adam Flater</name><uri>http://www.blogger.com/profile/18224648613573489463</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18368920800186724726'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2814003665874097395.post-3091308079682526489</id><published>2008-08-24T20:47:00.004-06:00</published><updated>2008-08-24T20:55:44.083-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='merapi flex air java universal mind'/><title type='text'>Flex Authority is Live</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://adamflater.net/blogassets/flexauth/flexauth-1.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px;" src="http://adamflater.net/blogassets/flexauth/flexauth-1.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The first issue of Flex Authority is out! I was lucky enough to attend &lt;a href="http://www.360conferences.com/360flex/"&gt;360 Flex&lt;/a&gt; in San Jose last week and grabbed a pre-release copy there. In addition, &lt;a href="http://whatanexperience.org/"&gt;Dave Meeker&lt;/a&gt; and I were lucky enough to be interviewed by &lt;a href="http://www.leifwells.com/"&gt;Leif Wells&lt;/a&gt;. &lt;a href="http://www.leifwells.com/"&gt;Leif&lt;/a&gt; was really great about coordinating this interview on &lt;a href="http://merapiproject.com/"&gt;Merapi&lt;/a&gt;. Thanks for your patience &lt;a href="http://www.leifwells.com/"&gt;Leif&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So, pick up your copy or subscription at &lt;a href="http://www.flex-authority.com/"&gt;Flex-Authority.com&lt;/a&gt; and find out more about the &lt;a href="http://merapiproject.com/"&gt;Merapi Project&lt;/a&gt; direct from &lt;a href="http://whatanexperience.org/"&gt;Dave&lt;/a&gt; and me via &lt;a href="http://www.leifwells.com/"&gt;Leif&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2814003665874097395-3091308079682526489?l=adamflater.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamflater.blogspot.com/feeds/3091308079682526489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2814003665874097395&amp;postID=3091308079682526489' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/3091308079682526489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/3091308079682526489'/><link rel='alternate' type='text/html' href='http://adamflater.blogspot.com/2008/08/flex-authority-is-live.html' title='Flex Authority is Live'/><author><name>Adam Flater</name><uri>http://www.blogger.com/profile/18224648613573489463</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18368920800186724726'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2814003665874097395.post-2691742164228898293</id><published>2008-08-19T17:21:00.005-06:00</published><updated>2008-08-20T12:20:29.806-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Universal Mind'/><category scheme='http://www.blogger.com/atom/ns#' term='robot'/><category scheme='http://www.blogger.com/atom/ns#' term='merapi'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='360 flex'/><category scheme='http://www.blogger.com/atom/ns#' term='legos'/><title type='text'>Recap from 360 Flex | San Jose</title><content type='html'>Coming at you from sunny San Jose, California at the eBay campus...&lt;br /&gt;&lt;br /&gt;Yesterday at 360 Flex I presented a session on Merapi and moderated a panel discussion on open source technology. At the Merapi session we discussed the focus of the project and show a lot of sample applications. Including a few demos that showed the ease of use when developing with Merapi.&lt;br /&gt;&lt;br /&gt;Here's some sample code that shows how to do a simple echo of a string from a Flex UI to Java and back again:&lt;br /&gt;&lt;br /&gt;Flex Source:&lt;br /&gt;&lt;iframe src="http://adamflater.net/blogassets/merapi/source/echo/source/Echo.mxml.html" height="325" width="588"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Java Source:&lt;br /&gt;&lt;iframe src="http://adamflater.net/blogassets/merapi/source/echo/Echo.java.html" height="435" width="588"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;This simple application is an example of how easy it is to communicate from AIR to Java (and vice-versa) at the desktop.&lt;br /&gt;&lt;br /&gt;I also walked through a bit of the source involved with creating the &lt;a href="http://adamflater.blogspot.com/2008/05/merapi-physics.html"&gt;gyroscope demo&lt;/a&gt; shown in the video below:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;object height="355" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/-rfIy1mRMJ8&amp;amp;hl=en"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/-rfIy1mRMJ8&amp;amp;hl=en" type="application/x-shockwave-flash" wmode="transparent" height="355" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Enter one &lt;a href="http://jordansnyder.com/"&gt;Jordan Snyder&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Jordan is a friend of mine that has a keen interest in messing with hardware, amoung other things. So, we were hanging out one night at my place and she saw that I had a Lego Mindstorm robotics kit. I proceeded to tell her bout my plans to integrate Merapi with some of the Legos APIs... long story short, she took the Mindstorm home with her and did all the work. Here's a video of the robot that Jordan presented in the same talk:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;object height="350" width="425"&gt; &lt;param name="movie" value="http://www.youtube.com/v/toNEENRmYMs"&gt;  &lt;embed src="http://www.youtube.com/v/toNEENRmYMs" type="application/x-shockwave-flash" height="350" width="425"&gt;&lt;/embed&gt;  &lt;/object&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;So, what's up here? The AIR application is controlling the Robot in real time using Merapi via Bluetooth. Why is that cool? This a proof of concept, but it's not smoke and mirrors by any means. This means that Merapi has a huge potential to soon be a a cross platform solution for building device enabled Flex/AIR applications.&lt;br /&gt;&lt;br /&gt;I submitted this talk for the Adobe MAX conference when they were asking for proposals, but unfortunately it was not selected. I will be at MAX though and would be happy to talk with anyone who is interested in Merapi at the &lt;a href="http://universalmind.com/"&gt;Universal Mind&lt;/a&gt; booth.  If there's enough interested in having a birds-of-a-feather-session on Merapi, I'd be happy to accommodate that as well.&lt;br /&gt;&lt;br /&gt;The feedback from the folks here at 360 Flex and those of you digging into Merapi has been great. Keep the comments coming and we'll keep on adding features and stability to the framework.&lt;br /&gt;&lt;br /&gt;[ Update: More view of "Nathan" the 360 Flex Robot ]&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;object width="425" height="350"&gt; &lt;param name="movie" value="http://www.youtube.com/v/vji4rPkfnr8"&gt; &lt;/param&gt; &lt;embed src="http://www.youtube.com/v/vji4rPkfnr8" type="application/x-shockwave-flash" width="425" height="350"&gt; &lt;/embed&gt; &lt;/object&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2814003665874097395-2691742164228898293?l=adamflater.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamflater.blogspot.com/feeds/2691742164228898293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2814003665874097395&amp;postID=2691742164228898293' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/2691742164228898293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/2691742164228898293'/><link rel='alternate' type='text/html' href='http://adamflater.blogspot.com/2008/08/recap-from-360-flex-san-jose_19.html' title='Recap from 360 Flex | San Jose'/><author><name>Adam Flater</name><uri>http://www.blogger.com/profile/18224648613573489463</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18368920800186724726'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2814003665874097395.post-5148476339524212043</id><published>2008-06-24T14:23:00.005-06:00</published><updated>2008-06-24T14:31:50.447-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lffs'/><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='Universal Mind'/><category scheme='http://www.blogger.com/atom/ns#' term='mxml'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='inside ria'/><title type='text'>LFFS - 12: Flex Builder Part 2 - Getting Acquainted With The Workbench</title><content type='html'>The second post in our sub-series on Flex Builder is out!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.adobe.com/images/store/product_boxshots/150x150/box_flexbuilderstandard3_150x150.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px;" src="http://www.adobe.com/images/store/product_boxshots/150x150/box_flexbuilderstandard3_150x150.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Read here: &lt;a href="http://www.insideria.com/2008/06/lffs-12.html"&gt;LFFS - 12: Flex Builder Part 2 - Getting Acquainted With The Workbench&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Also, we've registered &lt;a href="http://www.learningflexfromscratch.com/"&gt;www.learningflexfromscratch.com&lt;/a&gt; as a shortcut to our content on &lt;a href="http://www.insideria.com/"&gt;Inside RIA&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;thanks for reading&lt;br /&gt;-adam&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2814003665874097395-5148476339524212043?l=adamflater.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamflater.blogspot.com/feeds/5148476339524212043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2814003665874097395&amp;postID=5148476339524212043' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/5148476339524212043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/5148476339524212043'/><link rel='alternate' type='text/html' href='http://adamflater.blogspot.com/2008/06/lffs-12-flex-builder-part-2-getting.html' title='LFFS - 12: Flex Builder Part 2 - Getting Acquainted With The Workbench'/><author><name>Adam Flater</name><uri>http://www.blogger.com/profile/18224648613573489463</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18368920800186724726'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2814003665874097395.post-1008597357521797107</id><published>2008-05-27T07:02:00.023-06:00</published><updated>2008-12-09T19:35:15.971-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tornado parkersburg ia'/><title type='text'>&lt;offFlex&gt;Tornado Hits my Hometown&lt;/offFlex&gt;</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_h4sLtL2cd8A/SDwONaNtibI/AAAAAAAAACI/W4kr6W56ibE/s1600-h/000_157cc161ec249f6a_1-0.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_h4sLtL2cd8A/SDwONaNtibI/AAAAAAAAACI/W4kr6W56ibE/s320/000_157cc161ec249f6a_1-0.jpg" alt="" id="BLOGGER_PHOTO_ID_5205050892871371186" border="0" /&gt;&lt;/a&gt;I've been in touch with a lot of you about the recent storm that swept through my home town, but I wanted to take a moment to give a full update now that I finally have a minute to pause.&lt;br /&gt;&lt;br /&gt;At about 5pm on Sunday, May 25th a devastating tornado hit my hometown of &lt;a href="http://maps.google.com/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=parkersburg,+ia&amp;amp;ie=UTF8&amp;amp;t=h&amp;amp;z=14&amp;amp;iwloc=addr"&gt;Parkersburg, IA&lt;/a&gt;. I was visiting some friends nearby in &lt;a href="http://maps.google.com/maps?saddr=La+Crosse,+WI&amp;amp;geocode=&amp;amp;dirflg=&amp;amp;daddr=Parkersburg,+IA&amp;amp;f=d&amp;amp;sll=43.81262,-91.25192&amp;amp;sspn=0.30522,0.664673&amp;amp;ie=UTF8&amp;amp;t=h&amp;amp;z=8"&gt;La Crosse, WI&lt;/a&gt; where I received a call from my parents that no one had heard from my 91 year old grandmother. We also heard news that a woman that lived 4 houses down from her had been a victim of the storm. After an hour or so, some of our good friends that help care for her gave us word that she was pulled from the the wreckage of her house completely unharmed and that she was safely resting in a &lt;a href="http://www.hawkeyechapter.org/"&gt;Red Cross&lt;/a&gt; triage facility. She had the good sense and guidance to take shelter in the shower stall of her basement bathroom during the storm. This room ended up being the most undamaged room in the house and was the safest place she could have possibly been.&lt;br /&gt;&lt;br /&gt;A lot of friends have been asking me if there's anything they can do to help. If you have the means, I'd suggest donating to one or both of these organizations:&lt;br /&gt;&lt;br /&gt;1. &lt;a href="http://www.hawkeyechapter.org/"&gt;The Red Cross&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_h4sLtL2cd8A/SDwOZaNticI/AAAAAAAAACQ/VJj9JUqlWBA/s1600-h/ogco_redcross_1006.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 106px; height: 79px;" src="http://1.bp.blogspot.com/_h4sLtL2cd8A/SDwOZaNticI/AAAAAAAAACQ/VJj9JUqlWBA/s320/ogco_redcross_1006.jpg" alt="" id="BLOGGER_PHOTO_ID_5205051099029801410" border="0" /&gt;&lt;/a&gt;This organization is awesome. I had always heard about the great stuff they do, in the last few days I was able to see it first hand. They cared for my grandma until we could get to her, tracked down a print out of her medications, contacted a local pharmacist to get her a 3 day supply of medication on the night of the storm, and when we rolled into town the next day they were on the scene handing out water and assisting with the cleanup efforts.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. &lt;a href="http://www.ldr.org/"&gt;Lutheran Disaster Response&lt;/a&gt; (LDR)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_h4sLtL2cd8A/SDwOnqNtidI/AAAAAAAAACY/bbXgiWFmGq0/s1600-h/images.jpeg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_h4sLtL2cd8A/SDwOnqNtidI/AAAAAAAAACY/bbXgiWFmGq0/s320/images.jpeg" alt="" id="BLOGGER_PHOTO_ID_5205051343842937298" border="0" /&gt;&lt;/a&gt;This may not be a well known organization to you, but if you check out their site you'll quickly find out that when disaster strikes LDR is quickly there. We're told they'll be setting up in town tomorrow to aid in the restoration process. I volunteered to help with Katrina relief work in February this year and the LDR presence is felt strongly by the people displaced by that storm. One person I met there said, "if it wasn't for the volunteers like y'all that keep coming down here, this area would never have been rebuilt."&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_h4sLtL2cd8A/SDwalaNtinI/AAAAAAAAADo/XLPHIO2tEtc/s1600-h/damage.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_h4sLtL2cd8A/SDwalaNtinI/AAAAAAAAADo/XLPHIO2tEtc/s320/damage.png" alt="" id="BLOGGER_PHOTO_ID_5205064499327765106" border="0" /&gt;&lt;/a&gt;Both my grandma's and uncle's houses were destroyed by the Tornado. Also, my uncles vehicles and place of work were taken. Driving through town yesterday felt like witnessing the aftermath of a bomb. They are saying that 1/3 of the town has been completely destroyed, including the town's; grocery store, gas station, lumber yard, high school, and several hundred residences.&lt;br /&gt;&lt;br /&gt;The response from friends in the town who's houses weren't damaged has been really amazing. They dug in immediately to help us sift through the rubble and recover precious items like photographs and family heirlooms. The governor was in town surveying the damage yesterday and asked the president for federal assistance. Anything you can do to encourage your representatives to support the federal efforts to help the town rebuild would also be appreciated. One phone call might not do much, but (especially in an election year) a few hundred or thousand calls might see some action.&lt;br /&gt;&lt;br /&gt;Thanks to everyone who has been supportive to my family and me in the last few days. I'll be heading back to help cleanup as soon as I pick up my sister from the airport.&lt;br /&gt;&lt;br /&gt;-adam&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_h4sLtL2cd8A/SDwQRKNtieI/AAAAAAAAACg/VWftwDTFvbw/s1600-h/001_061a0517ec1e76c8_1-0-feed.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_h4sLtL2cd8A/SDwQRKNtieI/AAAAAAAAACg/VWftwDTFvbw/s320/001_061a0517ec1e76c8_1-0-feed.jpg" alt="" id="BLOGGER_PHOTO_ID_5205053156319136226" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_h4sLtL2cd8A/SDwQl6NtiiI/AAAAAAAAADA/dhwglgEBalc/s1600-h/000_27224f5bec208e0e_1-0-feed.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_h4sLtL2cd8A/SDwQl6NtiiI/AAAAAAAAADA/dhwglgEBalc/s320/000_27224f5bec208e0e_1-0-feed.jpg" alt="" id="BLOGGER_PHOTO_ID_5205053512801421858" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_h4sLtL2cd8A/SDwQdKNtigI/AAAAAAAAACw/lSpI_ZsbKKQ/s1600-h/000_235b4a4bec204031_1-0-feed.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_h4sLtL2cd8A/SDwQdKNtigI/AAAAAAAAACw/lSpI_ZsbKKQ/s320/000_235b4a4bec204031_1-0-feed.jpg" alt="" id="BLOGGER_PHOTO_ID_5205053362477566466" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_h4sLtL2cd8A/SDwQZ6NtifI/AAAAAAAAACo/5KGNrsRWpU8/s1600-h/001_143db7b9ec205b85_1-0-feed.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_h4sLtL2cd8A/SDwQZ6NtifI/AAAAAAAAACo/5KGNrsRWpU8/s320/001_143db7b9ec205b85_1-0-feed.jpg" alt="" id="BLOGGER_PHOTO_ID_5205053306642991602" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_h4sLtL2cd8A/SDwQ-qNtikI/AAAAAAAAADQ/b45Ux3i9EDU/s1600-h/001_2041e812ec24af15_1-0-feed.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_h4sLtL2cd8A/SDwQ-qNtikI/AAAAAAAAADQ/b45Ux3i9EDU/s320/001_2041e812ec24af15_1-0-feed.jpg" alt="" id="BLOGGER_PHOTO_ID_5205053938003184194" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_h4sLtL2cd8A/SDwQ2KNtijI/AAAAAAAAADI/hV2SYLmd-hg/s1600-h/000_207233c4ec24a99b_1-0-feed.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_h4sLtL2cd8A/SDwQ2KNtijI/AAAAAAAAADI/hV2SYLmd-hg/s320/000_207233c4ec24a99b_1-0-feed.jpg" alt="" id="BLOGGER_PHOTO_ID_5205053791974296114" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_h4sLtL2cd8A/SDwRQKNtilI/AAAAAAAAADY/sMf3cbcdduo/s1600-h/000_19110f9fec293768_1-0-feed.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_h4sLtL2cd8A/SDwRQKNtilI/AAAAAAAAADY/sMf3cbcdduo/s320/000_19110f9fec293768_1-0-feed.jpg" alt="" id="BLOGGER_PHOTO_ID_5205054238650894930" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2814003665874097395-1008597357521797107?l=adamflater.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamflater.blogspot.com/feeds/1008597357521797107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2814003665874097395&amp;postID=1008597357521797107' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/1008597357521797107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/1008597357521797107'/><link rel='alternate' type='text/html' href='http://adamflater.blogspot.com/2008/05/tornado-hits-my-hometown.html' title='&amp;lt;offFlex&gt;Tornado Hits my Hometown&amp;lt;/offFlex&gt;'/><author><name>Adam Flater</name><uri>http://www.blogger.com/profile/18224648613573489463</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18368920800186724726'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_h4sLtL2cd8A/SDwONaNtibI/AAAAAAAAACI/W4kr6W56ibE/s72-c/000_157cc161ec249f6a_1-0.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2814003665874097395.post-2909955587284727050</id><published>2008-05-24T10:18:00.004-06:00</published><updated>2008-12-09T19:35:16.110-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='Universal Mind'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='user group'/><title type='text'>New Rocky Mountain Adobe Users Group Site</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_h4sLtL2cd8A/SDhBr6NtiaI/AAAAAAAAACA/A9kq7Vk1lJk/s1600-h/rmaug_ss.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://3.bp.blogspot.com/_h4sLtL2cd8A/SDhBr6NtiaI/AAAAAAAAACA/A9kq7Vk1lJk/s320/rmaug_ss.jpg" alt="" id="BLOGGER_PHOTO_ID_5203981592043555234" border="0" /&gt;&lt;/a&gt;The Adobe Users Group in the Denver area has a pretty sweet new site &lt;a href="http://www.rmaug.com/"&gt;www.rmaug.com&lt;/a&gt;. The site and user group are maintained by the crew at &lt;a href="http://realeyes.com/"&gt;RealEyes&lt;/a&gt;. My favorite feature so far is the &lt;a href="http://rmaug.com/rmaug/index.cfm?page=blogs"&gt;blog aggregator&lt;/a&gt; for the local Adobe / RIA bloggers. It's cool to see how much is going on in the Denver/Boulder area in terms of new technology. Stop by and give the site a look, and if you're an RIA coder looking for a new home, I'd consider checking out Denver. Also, if you're a local technology blogger submit your feed url to rmaug and get it aggregated. (They may want you to be a user group participant though.. which would seem fair to me.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2814003665874097395-2909955587284727050?l=adamflater.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamflater.blogspot.com/feeds/2909955587284727050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2814003665874097395&amp;postID=2909955587284727050' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/2909955587284727050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/2909955587284727050'/><link rel='alternate' type='text/html' href='http://adamflater.blogspot.com/2008/05/new-rocky-mountain-adobe-users-group.html' title='New Rocky Mountain Adobe Users Group Site'/><author><name>Adam Flater</name><uri>http://www.blogger.com/profile/18224648613573489463</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18368920800186724726'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_h4sLtL2cd8A/SDhBr6NtiaI/AAAAAAAAACA/A9kq7Vk1lJk/s72-c/rmaug_ss.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2814003665874097395.post-9212935349089647919</id><published>2008-05-21T19:28:00.006-06:00</published><updated>2008-12-09T19:35:16.165-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='Universal Mind'/><category scheme='http://www.blogger.com/atom/ns#' term='merapi'/><category scheme='http://www.blogger.com/atom/ns#' term='gyroscope'/><category scheme='http://www.blogger.com/atom/ns#' term='unimotion'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='accelerometer'/><category scheme='http://www.blogger.com/atom/ns#' term='web maniacs'/><category scheme='http://www.blogger.com/atom/ns#' term='sms'/><category scheme='http://www.blogger.com/atom/ns#' term='physics'/><title type='text'>Merapi + Physics</title><content type='html'>Today at &lt;a href="http://webmaniacsconference.com/"&gt;Web Maniacs&lt;/a&gt; I gave a fairly brief, short notice talk on &lt;a href="http://www.merapiproject.net/"&gt;Merapi&lt;/a&gt;. I had a few slides and presented a couple examples. The coolest example by far is something that &lt;a href="http://dougmccune.com/"&gt;Doug McCune&lt;/a&gt; helped me throw together. This example involves using a physics engine for Flex called &lt;a href="http://drawlogic.com/2007/11/07/as3-foam-2d-physics-engine/"&gt;Foam&lt;/a&gt; and &lt;a href="http://merapiproject.net/"&gt;Merapi&lt;/a&gt; to invoke the Java/C  call &lt;a href="http://www.shiffman.net/p5/sms/"&gt;SMS/Unimotion&lt;/a&gt; to read the Mac Book Pro's accelerometer. &lt;a href="http://www.robrusher.com/"&gt;Rob Rusher&lt;/a&gt; (also a speaker at &lt;a href="http://webmaniacsconference.com/"&gt;Web Manics&lt;/a&gt;) was nice enough to shoot a video of this example:&lt;br /&gt;&lt;center&gt;&lt;object height="355" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/-rfIy1mRMJ8&amp;amp;hl=en"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/-rfIy1mRMJ8&amp;amp;hl=en" type="application/x-shockwave-flash" wmode="transparent" height="355" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;and here's a screen shot:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_h4sLtL2cd8A/SDTOg6NtiYI/AAAAAAAAABw/Tb3R4ciBuog/s1600-h/Picture+3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_h4sLtL2cd8A/SDTOg6NtiYI/AAAAAAAAABw/Tb3R4ciBuog/s320/Picture+3.png" alt="" id="BLOGGER_PHOTO_ID_5203010534297667970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The source code needed in the Flex app is this tag:&lt;br /&gt;&lt;pre&gt;  &amp;lt;gyroscope:merapigyroscope id="gyro"&gt;&lt;br /&gt;&lt;/pre&gt;The MerapiGyroscope class has a few properties (smsX, smsY, smsZ) that are bindable and automatically updated by the Java side of Merapi.&lt;br /&gt;&lt;br /&gt;This is sneak peak of much more cool stuff to come from the framework and I can guarantee that these libraries will be available for you to play with soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2814003665874097395-9212935349089647919?l=adamflater.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamflater.blogspot.com/feeds/9212935349089647919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2814003665874097395&amp;postID=9212935349089647919' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/9212935349089647919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/9212935349089647919'/><link rel='alternate' type='text/html' href='http://adamflater.blogspot.com/2008/05/merapi-physics.html' title='Merapi + Physics'/><author><name>Adam Flater</name><uri>http://www.blogger.com/profile/18224648613573489463</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18368920800186724726'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_h4sLtL2cd8A/SDTOg6NtiYI/AAAAAAAAABw/Tb3R4ciBuog/s72-c/Picture+3.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2814003665874097395.post-4147038267711707748</id><published>2008-05-21T08:31:00.003-06:00</published><updated>2008-05-21T08:35:11.877-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='Universal Mind'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Sean The Flex Guy and UM</title><content type='html'>Another great developer started working with &lt;a href="http://www.universalmind.com"&gt;Universal Mind&lt;/a&gt; recently. I met Sean Moore via twitter and blogs and have been really impressed with his skills and background. You can check out Sean's post about it on his &lt;a href="http://seantheflashguy.com/blog/2008/05/20/sean-the-flex-guy-universal-mind-watch-out-now/"&gt;blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Glad your on a &lt;a href="http://www.universalmind.com"&gt;UM&lt;/a&gt; project Sean.. Hopefully we'll work together directly soon, then it'll really "watch out now" time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2814003665874097395-4147038267711707748?l=adamflater.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamflater.blogspot.com/feeds/4147038267711707748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2814003665874097395&amp;postID=4147038267711707748' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/4147038267711707748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/4147038267711707748'/><link rel='alternate' type='text/html' href='http://adamflater.blogspot.com/2008/05/sean-flex-guy-and-um.html' title='Sean The Flex Guy and UM'/><author><name>Adam Flater</name><uri>http://www.blogger.com/profile/18224648613573489463</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18368920800186724726'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2814003665874097395.post-3876287519773134095</id><published>2008-05-16T09:57:00.004-06:00</published><updated>2008-05-16T10:00:09.343-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='Universal Mind'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='static code'/><category scheme='http://www.blogger.com/atom/ns#' term='inside ria'/><title type='text'>InsideRIA Post - More on Static Code</title><content type='html'>I have a new post up on InsideRIA called : &lt;a href="http://www.insideria.com/2008/05/more-on-static-code.html"&gt;More on Static Code&lt;/a&gt;. This is in response to the high demand that I saw in my blog analytics for a post I did sometime back on this blog called &lt;a href="http://adamflater.blogspot.com/2007/03/static-code-blocks.html"&gt;Static Code Blocks!&lt;/a&gt;. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I hope you find it helpful.&lt;/div&gt;&lt;div&gt;-adam&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2814003665874097395-3876287519773134095?l=adamflater.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamflater.blogspot.com/feeds/3876287519773134095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2814003665874097395&amp;postID=3876287519773134095' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/3876287519773134095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/3876287519773134095'/><link rel='alternate' type='text/html' href='http://adamflater.blogspot.com/2008/05/insideria-post-more-on-static-code.html' title='InsideRIA Post - More on Static Code'/><author><name>Adam Flater</name><uri>http://www.blogger.com/profile/18224648613573489463</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18368920800186724726'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2814003665874097395.post-3930776537734082617</id><published>2008-05-15T23:25:00.014-06:00</published><updated>2008-12-09T19:35:17.307-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='Universal Mind'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='web maniacs'/><title type='text'>Web Maniacs 2008</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_h4sLtL2cd8A/SC0jvg-pUnI/AAAAAAAAABo/MdwmXQPAdBk/s1600-h/wm.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_h4sLtL2cd8A/SC0jvg-pUnI/AAAAAAAAABo/MdwmXQPAdBk/s320/wm.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5200852443896304242" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;When I originally submitted two topics for &lt;a href="http://webmaniacsconference.com/"&gt;Web Maniacs&lt;/a&gt; a few months ago I figured I might end up presenting one of them. Now I’m doing four. &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In order of appearance:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;9a, Wed: Advanced Skinning and Component Development&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://3.bp.blogspot.com/_h4sLtL2cd8A/SC0bPg-pUjI/AAAAAAAAABI/PvbA32_3CR8/s320/icons.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5200843098047468082" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; " /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_h4sLtL2cd8A/SC0bhA-pUkI/AAAAAAAAABQ/2w14tRVlTb4/s1600-h/degrafa.png"&gt;&lt;img src="http://1.bp.blogspot.com/_h4sLtL2cd8A/SC0bhA-pUkI/AAAAAAAAABQ/2w14tRVlTb4/s320/degrafa.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5200843398695178818" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 0px; margin-left: auto; text-align: center; cursor: pointer; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;This session will actually be more about skinning and less about component development. After presenting this topic at &lt;a href="http://www.360conferences.com/360flex/"&gt;360 Flex | Atlanta&lt;/a&gt; I learned that the CS3 design extensions and general Flex skinning techniques are more than enough info to fill a session. I’ll be happy to answer any questions on component development, but the focus of the talk will be all the different ways to create skins. There are various pros and cons associated with each skinning method and we’ll talk a bit about those as well.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;2p, Wed: The &lt;a href="http://merapiproject.net/"&gt;Merapi&lt;/a&gt; Project - A Framework for Bridging Java and AIR&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://dev.merapiproject.net/images/stories/merapicup.jpg" border="0" alt="" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer;width: 50px" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I’ll be presenting some samples applications in this session and answering questions regarding the project. We’ll be entering a private alpha cycle during Web Maniacs, so this is an exciting time for &lt;a href="http://merapiproject.net/"&gt;Merapi&lt;/a&gt;. If you have an interest in how to push the boundaries of AIR to extend into Java at the desktop, come check out this session.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;9a, Thu: Design Patterns and Architecture Frameworks&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://2.bp.blogspot.com/_h4sLtL2cd8A/SC0czQ-pUlI/AAAAAAAAABY/AWHu7EpF2XU/s320/Book_designpatterns.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5200844811739419218" style="float: right; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 10px; cursor: pointer; width: 75px " /&gt;&lt;/div&gt;&lt;div&gt;In this session I’ll be presenting several of the design patterns found in the classic Gamma, Helm, Johnson, and Vlissides text “Design Patterns: Elements of Reusable Object-Oriented Software,” with a Flex twist. Some of these patterns appear the the Flex framework, some appear in Flex application frameworks, and some are just common patterns used in the everyday life of an OO developer. This talk is focused towards the intermediate to expert level object oriented programmer.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;11a, Thu: Flex Open Source Panel Discussion&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://4.bp.blogspot.com/_h4sLtL2cd8A/SC0dnw-pUmI/AAAAAAAAABg/BnAh1_suils/s320/os.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5200845713682551394" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; width:150px " /&gt;&lt;div&gt;This panel discussion will include founders and contributors from various open source projects in the Flex community. I’ll introduce the panel and each project that’s represented. Then, we’ll pose some general questions about open source technology and the implications on using OS projects in your Flex applications. As we wrap up, we’ll take general questions on OS as well as specific questions for the panel regarding the projects they work on. If you're interested in being on the panel, please contact me at adamflater at gmail dot com.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Whew... I think that’s about it. See you all in D.C. and watch my blog for assets from these talks.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;thanks for reading&lt;/div&gt;&lt;div&gt;-adam&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2814003665874097395-3930776537734082617?l=adamflater.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adamflater.blogspot.com/feeds/3930776537734082617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2814003665874097395&amp;postID=3930776537734082617' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/3930776537734082617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2814003665874097395/posts/default/3930776537734082617'/><link rel='alternate' type='text/html' href='http://adamflater.blogspot.com/2008/05/web-maniacs-2008.html' title='Web Maniacs 2008'/><author><name>Adam Flater</name><uri>http://www.blogger.com/profile/18224648613573489463</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18368920800186724726'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_h4sLtL2cd8A/SC0jvg-pUnI/AAAAAAAAABo/MdwmXQPAdBk/s72-c/wm.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry></feed>