<?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' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9853228</id><updated>2012-02-16T08:50:07.292+01:00</updated><category term='Visual Studio'/><category term='Adobe Flex'/><category term='Microsoft'/><category term='Commerciel'/><category term='Morphable Interfaces'/><category term='Windows Workflow Foundation'/><category term='Code Design'/><category term='MAC vs. PC'/><category term='Stockholm'/><category term='London'/><category term='RIA'/><category term='Test'/><category term='Ajax'/><category term='PureMVC'/><category term='XAML'/><category term='HelloGroup'/><category term='Performance Optimization'/><category term='Admin'/><category term='WebORB'/><category term='DFUG'/><category term='Graphics'/><category term='Flash Player'/><category term='Data Visualization'/><category term='SoftwareEngineering'/><category term='Adobe Thermo'/><category term='Estimation'/><category term='ACE'/><category term='Documentation'/><category term='Events'/><category term='Adobe Flex Builder'/><category term='Workaholics United'/><category term='Google Gears'/><category term='Outsourcing'/><category term='Facebook'/><category term='Adobe Flex SDK'/><category term='Independent Thinking'/><category term='IEEE'/><category term='Undocumentation'/><category term='HCI'/><category term='Adobe AIR'/><category term='Adobe Flex Adobe Flex Builder'/><category term='Arbitrary Thoughts'/><category term='Best Practices'/><category term='PV3D'/><category term='Google'/><category term='Adobe Max'/><category term='Cairngorm'/><category term='ActionScript 3.0'/><category term='Firefox'/><category term='Adobe Flash Player'/><category term='SEO'/><category term='Flash Platform'/><category term='Tools'/><category term='Hardware'/><category term='Process'/><category term='AUG'/><category term='Methodology'/><category term='SVN'/><category term='Training'/><category term='Bug Report'/><category term='.NET'/><category term='State Machines'/><category term='Silverlight'/><title type='text'>The Combined Corner</title><subtitle type='html'>Idealism is what precedes experience; cynicism is what follows...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default?start-index=101&amp;max-results=100'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>190</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9853228.post-1048285278675545129</id><published>2008-08-29T01:07:00.012+02:00</published><updated>2008-08-29T15:25:38.316+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Admin'/><title type='text'>This blog have been moved...</title><content type='html'>&lt;embed src="http://petermolgaard.com/blogs/thecomcor.blogspot.com/URLNavigator.swf" bgcolor="#ffffff" name="URLNavigator" play="true" loop="false" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" width="550" align="middle" height="200"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;Here... &lt;a href="http://blog.petermolgaard.com/"&gt;http://blog.petermolgaard.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-1048285278675545129?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/1048285278675545129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=1048285278675545129' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/1048285278675545129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/1048285278675545129'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/08/this-blog-have-been-moved-to-wordpress.html' title='This blog have been moved...'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-3127713676369775020</id><published>2008-08-27T14:57:00.004+02:00</published><updated>2008-08-27T20:48:29.602+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>IDEFactory... currently in Beta… soon in production…</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;When using Adobe Flex to build enterprise scale systems, the limitations of Flex Builder becomes not only very apparent, but also a limitation for productivity and flexibility (note the irony :-) )&lt;br /&gt;&lt;/p&gt;&lt;p&gt;However, a group of talented developers have started on the quest to deliver architectural features to us inside Flex Builder… fortunately they have decided NOT to change the base, but build it as a plug-in to Eclipse / Flex Builder.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt='' src='http://petermolgaard.com/resources/graphics/082708_1257_IDEFactoryc1.png'/&gt;&lt;br /&gt;   &lt;/p&gt;&lt;p&gt;IDEFactory… looking really good sofar (however not in this picture :-) )…&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href='http://www.idefactory.com/'&gt;http://www.idefactory.com/&lt;/a&gt;&lt;br /&gt;   &lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-3127713676369775020?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/3127713676369775020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=3127713676369775020' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/3127713676369775020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/3127713676369775020'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/08/idefactory-currently-in-beta-soon-in.html' title='IDEFactory... currently in Beta… soon in production…'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-7220066081619915537</id><published>2008-08-27T13:47:00.003+02:00</published><updated>2008-08-27T13:48:12.505+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>RSL and the lack of a build-in map over class-definitions</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;In response to the lack of Reflection in ActionScript and the emergence of techniques such as RSL and Modules and the combination of these two, several initiatives have been launched to facilitate a map of class definitions within a SWF.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;One is the &lt;a href='http://code.google.com/p/swfexplorer/'&gt;SWFExplorer by ByteArray&lt;/a&gt; which is still in a very early stage of development, but it appears to become a simple and easy way to get the definitionNames from a SWF at Runtime.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Another is the &lt;a href='http://etcs.ru/pre/getDefinitionNamesSource/'&gt;getDefinitionNames by Dennis Kolyako&lt;/a&gt; which is a bit more complex in its implementation than SWFExplorer, but yields the same gross results.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;SWFExplorer overall seems to fit the OO design model of Flex more than the latter implementation by Dennis which seems to match a more traditional Flash Authoring design model.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-7220066081619915537?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/7220066081619915537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=7220066081619915537' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7220066081619915537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7220066081619915537'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/08/rsl-and-lack-of-buildin-map-over-class.html' title='RSL and the lack of a build-in map over class-definitions'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-640625427356955549</id><published>2008-08-27T12:52:00.003+02:00</published><updated>2008-08-27T12:52:36.914+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Training'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>Adobe Flex training in a nutshell: Flex in a Week</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Adobe has started an initiative they call "Flex in a Week".&lt;br /&gt;&lt;/p&gt;&lt;p&gt;It consists of a predefined set of tasks which put in sequence presumably should take the average intro-level developer about a week to complete…&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Days 4 and 5 are still to be defined, but sofar it looks like a nice way to get new developers started… :-)&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Check it out…&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href='http://www.adobe.com/devnet/flex/videotraining/'&gt;http://www.adobe.com/devnet/flex/videotraining/&lt;/a&gt;&lt;br /&gt;   &lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-640625427356955549?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/640625427356955549/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=640625427356955549' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/640625427356955549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/640625427356955549'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/08/adobe-flex-training-in-nutshell-flex-in.html' title='Adobe Flex training in a nutshell: Flex in a Week'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-5813504037629119325</id><published>2008-08-27T11:52:00.003+02:00</published><updated>2008-08-27T11:56:38.982+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Code Design'/><title type='text'>Guice (pronounced 'Juice')</title><content type='html'>Guice (pronounced 'juice') is a lightweight dependency injection framework for Java 5 and above, brought to you by Google, however the principles are sound and could be used for other frameworks too.&lt;br /&gt;&lt;br /&gt;Writing factories and dependency injection logic by hand for every service and client can become tedious. Some other dependency injection frameworks even require you to explicitly map services to the places where you want them injected.&lt;br /&gt;&lt;br /&gt;Check it out... exciting stuff&lt;br /&gt;&lt;a href="http://code.google.com/p/google-guice/"&gt;http://code.google.com/p/google-guice/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-5813504037629119325?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/5813504037629119325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=5813504037629119325' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/5813504037629119325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/5813504037629119325'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/08/guice-pronounced-juice.html' title='Guice (pronounced &apos;Juice&apos;)'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-1170788743665829041</id><published>2008-08-27T11:09:00.003+02:00</published><updated>2008-08-27T11:13:28.443+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XAML'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Curved Scrollbar</title><content type='html'>Charles Petzold did a simple implementation of a curved scrollbar in XAML.&lt;br /&gt;Nevertheless its probably more cool than useful, I have decided to do an implementation in Flash to match...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_GJH4IvKJKGM/SLUaWProCDI/AAAAAAAAAGg/jIiKhfHbP4M/s1600-h/CurvedScrollBar1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_GJH4IvKJKGM/SLUaWProCDI/AAAAAAAAAGg/jIiKhfHbP4M/s400/CurvedScrollBar1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5239122710984394802" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;However... check the original posting by Charles...&lt;br /&gt;&lt;a href="http://www.charlespetzold.com/blog/2008/08/Curved-ScrollBars.html"&gt;http://www.charlespetzold.com/blog/2008/08/Curved-ScrollBars.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-1170788743665829041?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/1170788743665829041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=1170788743665829041' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/1170788743665829041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/1170788743665829041'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/08/curved-scrollbar.html' title='Curved Scrollbar'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_GJH4IvKJKGM/SLUaWProCDI/AAAAAAAAAGg/jIiKhfHbP4M/s72-c/CurvedScrollBar1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-84032865614641215</id><published>2008-08-26T23:19:00.004+02:00</published><updated>2008-08-26T23:22:51.591+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>.NET Reflector... no more Lutz Roeder</title><content type='html'>It appears that Luts Roeder have decided to leave development and maintenance of .NET reflector...&lt;br /&gt;&lt;br /&gt;If you have ever used Reflector, you probably already know how cool a tool it is...&lt;br /&gt;Creator and Inventor has left it to Red Gate to continue the further development...&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://www.simple-talk.com/opinion/opinion-pieces/the-future-of-reflector-/"&gt;http://www.simple-talk.com/opinion/opinion-pieces/the-future-of-reflector-/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-84032865614641215?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/84032865614641215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=84032865614641215' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/84032865614641215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/84032865614641215'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/08/net-reflector-no-more-lutz-roeder.html' title='.NET Reflector... no more Lutz Roeder'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-2037067438529942637</id><published>2008-08-22T16:00:00.005+02:00</published><updated>2008-08-26T01:19:34.774+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebORB'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>ClassMappings between WebORB and Adobe Flex</title><content type='html'>Basically there are three methods to obtain a classmapping between WebORB and Adobe Flex.&lt;br /&gt; &lt;br /&gt;1. ClassAlias in WebORB configuration.&lt;br /&gt;2. ClassAlias in your ActionScript code through the "registerClassAlias" class.&lt;br /&gt;3. ClassAlias in your ActionScript classes through the RemoteClass metatag.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. ClassAlias in WebORB configuration&lt;/span&gt;&lt;br /&gt;Add the following to your WebORB configuration file (This can also be done through the WebORB management console):&lt;br /&gt;&lt;br /&gt;&lt;classMapping&gt;&lt;br /&gt;&lt;clientClass&gt;Name of ClientClass&lt;/clientClass&gt;&lt;br /&gt;&lt;serverClass&gt;Name of ServerClass&lt;/serverClass&gt;&lt;br /&gt;&lt;source&gt;Name of assembly&lt;/source&gt;&lt;br /&gt;&lt;/classMapping&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. ClassAlias in your ActionScript code through the "registerClassAlias" class.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;var clientClass:Class = getDefinitionByName( clientClassName ) as Class;&lt;br /&gt;registerClassAlias( serverClassName, clientClass );&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;3. ClassAlias in your ActionScript classes through the RemoteClass metatag.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;[RemoteClass(alias="com.companyname.namespace.ClassName")]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The result is almost identical (some differences in behavior exists, but outside the scope of this short note) and will eventually mean that serverclasses returned and send to the server will be serialized and deserialized between the two class-definitions automatically by the WebORB server and the Flas Player respecitively.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-2037067438529942637?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/2037067438529942637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=2037067438529942637' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/2037067438529942637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/2037067438529942637'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/08/classmappings-between-weborb-and-adobe.html' title='ClassMappings between WebORB and Adobe Flex'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-5915108177855436783</id><published>2008-08-22T12:28:00.013+02:00</published><updated>2008-08-26T15:13:46.911+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ACE'/><title type='text'>The other Adobe Flex ACE's in Europe</title><content type='html'>Among ACE's in Europe within Flex, there are currently 3 others...&lt;br /&gt;&lt;br /&gt;They are as follows...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Xavi Beumala from Barcelona&lt;/span&gt;... he had just been hired by Adobe Consulting when I last saw him to Flex 360 in Milan. A very sympathetic guy with great talent with the will to bring it far.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Dirk Eismann from Hannover&lt;/span&gt;... last i saw him it was at MAX in Barcelona where he was working for Herrlich and Ramuschkat. Extremely skilled and versatile developer which I have the outmost respect for.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Giorgio Natili from Rome&lt;/span&gt;... a real trailblazer and a true community leader from central Italy with a community of more than 3000 active users and 100.000 visits every month. I met him last time I was in Italy, a real fire-spirit...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Peter Elst from Belgium&lt;/span&gt;... one of the nicest guys in the community and on top of that an innovative and tech-savvy cool guy who contributes more to the community than averages... &lt;br /&gt;&lt;br /&gt;...so obviously I am in very good company and I only hope that I some day can grow to match these true icons in the community and contribute as much as the have...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-5915108177855436783?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/5915108177855436783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=5915108177855436783' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/5915108177855436783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/5915108177855436783'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/08/other-adobe-flex-aces-in-europe.html' title='The other Adobe Flex ACE&apos;s in Europe'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-6794556083443462152</id><published>2008-08-22T10:31:00.003+02:00</published><updated>2008-08-22T10:46:11.989+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ACE'/><title type='text'>I got my Adobe Community Expert (ACE) designation today</title><content type='html'>I was delighted to learn today that I have been designated an Adobe Community Expert (ACE). Many know the program as the segue from Team Macromedia.&lt;br /&gt;&lt;br /&gt;It may take a few days to get the listing on the site, however I look forward to continuing to contribute to the Flex/RIA and broader Adobe community.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_GJH4IvKJKGM/SK57GfB6WNI/AAAAAAAAAGY/0S944WGnKL4/s1600-h/ace_logo.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_GJH4IvKJKGM/SK57GfB6WNI/AAAAAAAAAGY/0S944WGnKL4/s400/ace_logo.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5237258768017414354" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Check out the existing ACE's on the listing...&lt;br /&gt;&lt;a href="http://www.adobe.com/communities/experts/all.html"&gt;http://www.adobe.com/communities/experts/all.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-6794556083443462152?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/6794556083443462152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=6794556083443462152' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6794556083443462152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6794556083443462152'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/08/i-got-my-adobe-community-expert-ace.html' title='I got my Adobe Community Expert (ACE) designation today'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_GJH4IvKJKGM/SK57GfB6WNI/AAAAAAAAAGY/0S944WGnKL4/s72-c/ace_logo.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-6204806811798029498</id><published>2008-08-02T10:53:00.003+02:00</published><updated>2008-08-06T20:22:21.691+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Arbitrary Thoughts'/><title type='text'>The MyLifeBits Project</title><content type='html'>I try to keep the clutter on this blog to an absolute minimum, I try to attain this by carefully considering what to blog about and by having a personal blog which tries to cover all the non-technical stuff I find relevant to share.&lt;br /&gt;&lt;br /&gt;However, sometimes very interesting comes along which does not exactly reside in my knowledge domains but is technical enough to belong here, and hence "forces" me to blog about it in "The Combined Corner".&lt;br /&gt;&lt;br /&gt;One such things is &lt;a href="http://research.microsoft.com/barc/MediaPresence/MyLifeBits.aspx"&gt;The MyLifeBits Project&lt;/a&gt; by &lt;a href="http://research.microsoft.com/users/gbell/"&gt;Mr. Gordon Bell&lt;/a&gt; at Microsoft.&lt;br /&gt;&lt;br /&gt;Ever try to remember who you bumped into at the store a few days back? Or exactly what the company president said at the morning meeting?&lt;br /&gt;&lt;br /&gt;Well, you're not alone. And IBM researchers are working on software that just may help you better recollect all the forgotten pieces of your life.&lt;br /&gt;&lt;br /&gt;This week, the company unveiled software that uses images, sounds and text recorded on everyday mobile devices to help people recall names, faces, conversations and events. Dubbed Pensieve, the software organizes bits of collected information, stores them and then helps the user extract them later on.&lt;br /&gt;&lt;br /&gt;"Today, we're flooded with information. It's an information overload and we're not capable of handling it," said Eran Belinsky, an IBM project leader. "This would relieve us from the anxiousness or need to try to remember everything. And there's the issue of trouble with recollection. [It's like] your index is broken. You know you know something, but you can't get there. This could help people having trouble with their memory reconstruct their memories."&lt;br /&gt;&lt;br /&gt;IBM's project is akin to one that of Mr. Gordon Bell and a couple of other scientists at Microsoft Research have been working on for the past nine years. Bell, a longtime veteran of the IT industry and now principal researcher at Microsoft's research arm, is developing a way for people to remember different aspects of their lives.&lt;br /&gt;&lt;br /&gt;MyLifeBits has Bell supplementing his own memory by collecting as much information as he can about his life. He's trying to store a lifetime on his Dell laptop. Collecting telephone conversations, music, lectures, books he's written and read and photographs he's incessantly taken, Bell is amassing a great database of his life.&lt;br /&gt;&lt;br /&gt;Interesting stuff... :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-6204806811798029498?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/6204806811798029498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=6204806811798029498' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6204806811798029498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6204806811798029498'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/08/mylifebits-project.html' title='The MyLifeBits Project'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-6149713751555266147</id><published>2008-07-27T23:25:00.003+02:00</published><updated>2008-07-27T23:27:32.938+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flash Player'/><title type='text'>Adobe Flash Player : MultiThreading</title><content type='html'>These days I am recontemplating on my vision for a multithreaded AVM instance.&lt;br /&gt;&lt;br /&gt;Jim Corbett said multithreading wasn’t being built into the ActionScript Virtual Machine, however, looking ahead into the inner workings of Flash Player 10, processing for the new bitmap filters using the programming language Hydra would be using multithreading! What’s more is that you don’t need to focus on manipulating DisplayObject items with Hydra, but are able to send it plain math equations as well, which it will be able to crunch blazingly fast, thanks to multithreading! So any math heavy Flash applications will get a HUGE performance boost, not to mention the various 3D engines and physics engines.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-6149713751555266147?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/6149713751555266147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=6149713751555266147' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6149713751555266147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6149713751555266147'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/adobe-flash-player-multithreading.html' title='Adobe Flash Player : MultiThreading'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-4725918026801579681</id><published>2008-07-27T23:23:00.003+02:00</published><updated>2008-07-27T23:27:49.969+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flash Player'/><title type='text'>Adobe Flash Player : Codenames</title><content type='html'>On a funny sidenote... :)&lt;br /&gt;&lt;br /&gt;While the Adobe code-name for Flash Player 10 is “Astro”, the Flash Player team has their own code-name for it… Bacon! That’s the name that the team voted for, they didn’t get that name, but still refer to it internally as Bacon. Flash Player 9 Update 3 was code-named Moviestar, but once again the internal Flash Player team referred to as Frogstar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-4725918026801579681?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/4725918026801579681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=4725918026801579681' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4725918026801579681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4725918026801579681'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/adobe-flash-codenames.html' title='Adobe Flash Player : Codenames'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-2811537459624452032</id><published>2008-07-27T23:02:00.002+02:00</published><updated>2008-07-27T23:20:26.606+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google Gears'/><title type='text'>Google Gears : WorkerPool</title><content type='html'>The WorkerPool behaves like a collection of processes, rather than threads. Workers do not share any execution state. Changing a variable in one worker has no effect in any other worker. And created workers do not automatically inherit script code from their parents.&lt;br /&gt;&lt;br /&gt;Members of a WorkerPool interact with each other only by sending message objects. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/apis/gears/api_workerpool.html#workerpool_class"&gt;http://code.google.com/apis/gears/api_workerpool.html#workerpool_class&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-2811537459624452032?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/2811537459624452032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=2811537459624452032' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/2811537459624452032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/2811537459624452032'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/google-gears-workerpool.html' title='Google Gears : WorkerPool'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-3043852582151911237</id><published>2008-07-27T22:40:00.005+02:00</published><updated>2008-12-11T01:18:35.813+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RIA'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Gears'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Google Gears</title><content type='html'>The latest entry among the candidate RIA technologies is &lt;a href="http://gears.google.com/"&gt;Google Gears&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_GJH4IvKJKGM/SIzgMJPfsTI/AAAAAAAAAGI/7qHbqWMhxR0/s1600-h/logo_153x43.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_GJH4IvKJKGM/SIzgMJPfsTI/AAAAAAAAAGI/7qHbqWMhxR0/s400/logo_153x43.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5227799766714265906" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Still in version 0.3 at the time of this writing, its obvious that a lot of work needs to be done.&lt;br /&gt;&lt;br /&gt;However, Google Gears (GG) has a couple of neat features...&lt;br /&gt;&lt;br /&gt;* Database based on SQLLite.&lt;br /&gt;* WorkerPool (JavaScript MultiThreading).&lt;br /&gt;* Desktop Module to interact with the OS.&lt;br /&gt;&lt;br /&gt;The Database module provides browser-local relational data storage to your JavaScript web application. Gears uses the open source SQLite database system. Ergo exactly as we have grown accustomed with Adobe AIR.&lt;br /&gt;&lt;br /&gt;The WorkerPool module allows web applications to run JavaScript code in the background, without blocking the main page's script execution.&lt;br /&gt;In web browsers a single time-intensive operation, such as I/O or heavy computation, can make the UI unresponsive. The WorkerPool module runs operations in the background, without blocking the UI. Scripts executing in the WorkerPool will not trigger the browser's "unresponsive script" dialog.&lt;br /&gt;Nevertheless, since the browser's XmlHttpRequest object is not available in the context of a worker, Gears provides its own HttpRequest object to fill that need. Gears HttpRequest provides most of the features of XmlHttpRequest except for the ability to access the response as an XML DOM object and the ability to send a request synchronously.&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://gears.google.com/"&gt;http://gears.google.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A couple of more cool features are scheduled, but lets see which ideas actually make it out of the labs alive.&lt;br /&gt;&lt;br /&gt;Some reasons to consider GG are that it does not require an explicit installation, just that you allow a specific site to run Gears enabled and that its open source in contrast to e.g. Adobe AIR and there a couple of more pretty interesting features of GG, but I will not get into that now.&lt;br /&gt;&lt;br /&gt;When this is said, in my very humble graphical understanding - I think there exist a striking resemblance between Adobe AIR logo and the Google Gears logo and to be totally honest, the feature set if we disregard the very promising multi-threaded Javacsript... do you see what I mean ?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_GJH4IvKJKGM/SIzgjQerMfI/AAAAAAAAAGQ/aleZyLS-mc0/s1600-h/2034394938_9e36bcefe2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_GJH4IvKJKGM/SIzgjQerMfI/AAAAAAAAAGQ/aleZyLS-mc0/s400/2034394938_9e36bcefe2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5227800163793973746" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-3043852582151911237?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/3043852582151911237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=3043852582151911237' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/3043852582151911237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/3043852582151911237'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/google-gears.html' title='Google Gears'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_GJH4IvKJKGM/SIzgMJPfsTI/AAAAAAAAAGI/7qHbqWMhxR0/s72-c/logo_153x43.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-7040578590904271211</id><published>2008-07-27T03:19:00.003+02:00</published><updated>2008-07-27T03:29:46.141+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex Builder'/><title type='text'>Adobe Flex : Change between Debug and Production Builds</title><content type='html'>Sometimes FlexAnt is just too troublesome to get working correctly (extisting projects tends to be difficulty to FlexAntify) so you need an easy way to toggle between Debug and Production builds...&lt;br /&gt;&lt;br /&gt;Instead of going through your projects and setting the variables to Debug=false (even if you have a script / application that does it for you) it makes more sense to use the optimizer application from the Adobe SDK.&lt;br /&gt;&lt;br /&gt;Then all you have to do is to call the following command on your binaries...&lt;br /&gt;optimizer bin-debug/[binary].swf –output bin/[binary].swf –keep-as3-metadata=Bindable,Managed,ChangeEvent,NonCommittingChangeEvent,Transient&lt;br /&gt;&lt;br /&gt;You can read more about the Optimizer here...&lt;br /&gt;&lt;a href="http://livedocs.adobe.com/flex/3/html/help.html?content=rsl_07.html"&gt;&lt;br /&gt;http://livedocs.adobe.com/flex/3/html/help.html?content=rsl_07.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-7040578590904271211?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/7040578590904271211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=7040578590904271211' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7040578590904271211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7040578590904271211'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/adobe-flex-change-between-debug-and.html' title='Adobe Flex : Change between Debug and Production Builds'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-335852901737044825</id><published>2008-07-27T00:39:00.007+02:00</published><updated>2008-12-11T01:18:36.205+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>Adobe Flex : Code Quality of Flex 4</title><content type='html'>To be honest, I have great expectations to Flex 4... and as always, when I feel my expectations starting to rise - I begin to worry about the lurking disappointment which is one of the most frequent outcomes of high expectations...&lt;br /&gt;&lt;br /&gt;Am I the only that think the note to the Scrollbar implementation sounds like an API problem (read: behavioral inconsistency) in the making ?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_GJH4IvKJKGM/SIuocF5LtWI/AAAAAAAAAGA/-0SvsDOwH_0/s1600-h/Untitled-1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_GJH4IvKJKGM/SIuocF5LtWI/AAAAAAAAAGA/-0SvsDOwH_0/s400/Untitled-1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5227456993065416034" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/Gumbo+Component+Architecture#GumboComponentArchitecture-ExistingGumboComponents"&gt;&lt;br /&gt;http://opensource.adobe.com/wiki/display/flexsdk/Gumbo+Component+Architecture#GumboComponentArchitecture-ExistingGumboComponents&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-335852901737044825?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/335852901737044825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=335852901737044825' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/335852901737044825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/335852901737044825'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/adobe-flex-code-quality-of-flex-4.html' title='Adobe Flex : Code Quality of Flex 4'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_GJH4IvKJKGM/SIuocF5LtWI/AAAAAAAAAGA/-0SvsDOwH_0/s72-c/Untitled-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-2808227465931165560</id><published>2008-07-27T00:19:00.004+02:00</published><updated>2008-12-11T01:18:36.387+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flash Player'/><title type='text'>Archived Adobe Flash Player Installers</title><content type='html'>When I was testing my theory regarding the AXIS cameras and the lack of a crossdomain file being the only obstacle to using the SWF stream, I needed the Flash Player 7 installer and I found this list in the Adobe KnowledgeBase:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_14266"&gt;http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_14266&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It contains a download link to all players since Flash Player 2... for some reason they don't have an installer for Flash Player 1... please feel free to comment if you know of an explicit reason for this :-)&lt;br /&gt;&lt;br /&gt;On a side-note, its interesting to see the peculiar growth in file-size.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_GJH4IvKJKGM/SIukajZ2jyI/AAAAAAAAAF4/RGVTmCOGS18/s1600-h/Untitled-1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_GJH4IvKJKGM/SIukajZ2jyI/AAAAAAAAAF4/RGVTmCOGS18/s400/Untitled-1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5227452568580820770" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-2808227465931165560?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/2808227465931165560/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=2808227465931165560' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/2808227465931165560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/2808227465931165560'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/archived-adobe-flash-player-installers.html' title='Archived Adobe Flash Player Installers'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_GJH4IvKJKGM/SIukajZ2jyI/AAAAAAAAAF4/RGVTmCOGS18/s72-c/Untitled-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-1113412532154512914</id><published>2008-07-26T22:42:00.013+02:00</published><updated>2008-12-11T01:18:36.759+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebORB'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Debugging WebORB from Visual Studio</title><content type='html'>Its quite easy to debug applications running within the WebORB for .NET container with Visual Studio, however there are a few precautions to observe before its possible.&lt;br /&gt;&lt;br /&gt;Some of the things I mention may seem obvious to you, but based on my experience - some of these very obvious details can be some of the pitfalls that prevent many developers from debugging their applications once deployed to WebORB, so now I include them here in my list for the seasoned developers to ignore and the novices to use.&lt;br /&gt;&lt;br /&gt;First make sure that your assemblies are compiled with DEBUG information, you don't have to deploy the PDB files to the WebORB BIN directory. PDB files are the program database files which holds debugging and project state information for your program, but Visual Studio and the .NET runtime can map the debug assembly to the code in Visual Studio if just the PDB files are available in the output directory of the Visual Studio project.&lt;br /&gt;&lt;br /&gt;From Visual Studio (I am using 2008, but its the same for 2005) with the code open used to generate the assemblies, you open the "Attach to Process" window found from the "Debug" menu.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_GJH4IvKJKGM/SIuavxLbOWI/AAAAAAAAAFo/_ajHqdhE5Nc/s1600-h/ScreenDumb1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_GJH4IvKJKGM/SIuavxLbOWI/AAAAAAAAAFo/_ajHqdhE5Nc/s400/ScreenDumb1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5227441937939380578" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Make sure that the checkbox "Show processes in all sessions" is selected.&lt;br /&gt;&lt;br /&gt;Find the w3wp.exe (The IIS Worker Process) and attach the debugger to it.&lt;br /&gt;&lt;br /&gt;I have for the sake of convenience mapped the following keyboard shortcut for opening this window: CTRL+SHIFT+ALT+F5. That has enabled me to start the debugging process with the following key sequence:&lt;br /&gt;&lt;br /&gt;* CTRL+SHIFT+ALT+F5&lt;br /&gt;* "w" or "W"&lt;br /&gt;* RETURN&lt;br /&gt;&lt;br /&gt;Now Visual Studio will start the debugging session and map the debugging assembly to the code in Visual Studio.&lt;br /&gt;As the debugging information are loaded you will see your breakpoint indicators be filled out, effectively indicating that debugging information mapping to the current code have been loaded. If your breakpoint indicators remain unfilled circles, it is not working, a likely cause for this is that the deployed assemblies have been compiled without DEBUG information.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_GJH4IvKJKGM/SIubXYAOWdI/AAAAAAAAAFw/FWKIw1t-VsM/s1600-h/ScreenDumb.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_GJH4IvKJKGM/SIubXYAOWdI/AAAAAAAAAFw/FWKIw1t-VsM/s400/ScreenDumb.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5227442618376280530" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Once your assemblies are loaded correctly and your breakpoint indicators are correctly filled, you turn your attention to either your application or the WebORB management console (I recommend the latter as its always a good idea to test each tier isolated).&lt;br /&gt;&lt;br /&gt;Once you execute the code which eventually will hit the breakpoints, control will be transferred to Visual Studio and your debugging session should be fully active.&lt;br /&gt;&lt;br /&gt;PS. Yes, the code in the second screendumb is a joke :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-1113412532154512914?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/1113412532154512914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=1113412532154512914' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/1113412532154512914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/1113412532154512914'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/debugging-weborb-from-visual-studio.html' title='Debugging WebORB from Visual Studio'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_GJH4IvKJKGM/SIuavxLbOWI/AAAAAAAAAFo/_ajHqdhE5Nc/s72-c/ScreenDumb1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-3511577707584510091</id><published>2008-07-25T23:48:00.009+02:00</published><updated>2008-08-06T20:25:44.937+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Undocumentation'/><category scheme='http://www.blogger.com/atom/ns#' term='Hardware'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash Platform'/><title type='text'>AXIS IP Cameras SWF Streams are not loadable with recent Flash Players</title><content type='html'>Due to changes in the security settings of the Flash Player Platform its not possible to view SWF streams from AXIS IP cameras with Flash players later than Flash Player 7 effectively preventing anyone from using the build-in SWF streams of the AXIS IP cameras as is.&lt;br /&gt;&lt;br /&gt;I therefore uninstalled my Flash Player 9, installed Flash Player 7 and then, voila... no problem loading the SWF's directly from the cameras :-)&lt;br /&gt;&lt;br /&gt;Nevertheless, since the cameras are NOT shipped with a crossdomain file, and therefore does not allow the SWF to be loaded from other domains than the camera itself, there is no other option than to get a crossdomain file into the camera's webserver's root.&lt;br /&gt;Unfortunately did a quick examination of AXIS's Management Software for their cameras not indicate that it would be possible to access the filesystem on the camera. However, after registering that the there was a FTP server on the camera, i quickly connected through FTP and could easily browse, however I could still not write a file - so only read-access.&lt;br /&gt;&lt;br /&gt;However, the AXIS Custom Firmware Tool allows for this, but unfortunately "AXIS Custom Firmware Tool is exclusively available for members of the Axis ADP Program".&lt;br /&gt;&lt;span style="font-style:italic;"&gt;(&lt;a href="http://www.axis.com/files/tech_notes/development_guidelines_1_00.pdf"&gt;http://www.axis.com/files/tech_notes/development_guidelines_1_00.pdf&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Therefore, I'm gonna do five things now.&lt;br /&gt;&lt;br /&gt;1. Examine the Management Tool to see if there is an undocumented way to get access to the filesystem of the Cameras.&lt;br /&gt;2. Examine if there is alternative way to access the filesystem.&lt;br /&gt;3. Apply for membership of the &lt;a href="http://www.axis.com/partner/adp_program/"&gt;AXIS Application Development Partner (ADP) Program&lt;/a&gt;.&lt;br /&gt;4. Ask the vendor providing the cameras here in Denmark to add a crossdomain file to the image.&lt;br /&gt;5. Ask AXIS customer support if they are planning Firmware updates addressing this issue.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-3511577707584510091?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/3511577707584510091/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=3511577707584510091' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/3511577707584510091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/3511577707584510091'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/axis-ip-cameras-swf-streams-are-not.html' title='AXIS IP Cameras SWF Streams are not loadable with recent Flash Players'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-8034084146772559548</id><published>2008-07-25T12:59:00.000+02:00</published><updated>2008-07-25T13:00:48.805+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebORB'/><title type='text'>WebORB : Installing on Vista</title><content type='html'>A few precautions have to be observed when installing WebORB on a Windows Vista machine.&lt;br /&gt;Fortunately Mark Piller from MidnightCoders have published an easy-to-follow guide to installing it successfully.&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://www.themidnightcoders.com/weborb/dotnet/vistainstall.shtm"&gt;http://www.themidnightcoders.com/weborb/dotnet/vistainstall.shtm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-8034084146772559548?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/8034084146772559548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=8034084146772559548' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/8034084146772559548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/8034084146772559548'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/weborb-installing-on-vista.html' title='WebORB : Installing on Vista'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-5309244318844393993</id><published>2008-07-24T18:12:00.001+02:00</published><updated>2008-07-24T18:14:31.957+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Max'/><title type='text'>Adobe MAX 2008 in Milan is now open for registration</title><content type='html'>Today Adobe has opened for registration for this year's Adobe MAX Conference in Milan.&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://max.adobe.com/eu/register/"&gt;http://max.adobe.com/eu/register/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-5309244318844393993?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/5309244318844393993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=5309244318844393993' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/5309244318844393993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/5309244318844393993'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/adobe-max-2008-in-milan-is-now-open-for.html' title='Adobe MAX 2008 in Milan is now open for registration'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-3996211216837723375</id><published>2008-07-23T22:44:00.001+02:00</published><updated>2008-07-23T22:44:52.589+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='Documentation'/><title type='text'>Adobe Flex : MXML 2009 Specification</title><content type='html'>The MXML 2009 (Adobe Flex 4, Gumbo) specification is made available in an "as is" version...&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/MXML+2009"&gt;http://opensource.adobe.com/wiki/display/flexsdk/MXML+2009&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-3996211216837723375?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/3996211216837723375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=3996211216837723375' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/3996211216837723375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/3996211216837723375'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/adobe-flex-mxml-2009-specification.html' title='Adobe Flex : MXML 2009 Specification'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-1906318653986348027</id><published>2008-07-23T22:41:00.002+02:00</published><updated>2008-07-23T22:45:02.458+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='Documentation'/><title type='text'>Adobe Flex : Documentation for Gumbo (Flex 4)</title><content type='html'>The Adobe Flex 4 (Gumbo) documentation is made available in an "as is" state...&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://livedocs.adobe.com/flex/gumbo/langref/"&gt;http://livedocs.adobe.com/flex/gumbo/langref/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-1906318653986348027?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/1906318653986348027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=1906318653986348027' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/1906318653986348027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/1906318653986348027'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/adobe-flex-documentation-for-gumbo-flex.html' title='Adobe Flex : Documentation for Gumbo (Flex 4)'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-3651383389208252842</id><published>2008-07-23T20:05:00.004+02:00</published><updated>2008-07-23T20:09:19.316+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SEO'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>Adobe Flex : 3 methods for Deeplinking</title><content type='html'>Adding support for deep-linking is simple in Flex.&lt;br /&gt;The three most popular methods these three in no particular order:&lt;br /&gt;* &lt;a href="http://code.google.com/p/urlkit/"&gt;http://code.google.com/p/urlkit/&lt;/a&gt;&lt;br /&gt;* &lt;a href="http://code.google.com/p/swfobject/"&gt;http://code.google.com/p/swfobject/&lt;/a&gt;&lt;br /&gt;* &lt;a href="http://labs.adobe.com/wiki/index.php/Flex_3:Feature_Introductions:_Deep_Linking"&gt;http://labs.adobe.com/wiki/index.php/Flex_3:Feature_Introductions:_Deep_Linking&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-3651383389208252842?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/3651383389208252842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=3651383389208252842' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/3651383389208252842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/3651383389208252842'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/adobe-flex-deeplinking.html' title='Adobe Flex : 3 methods for Deeplinking'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-6022659172846999288</id><published>2008-07-22T19:17:00.003+02:00</published><updated>2008-07-22T19:24:23.690+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Workaholics United'/><title type='text'>Workaholics United : Push, Pull &amp; Standardization</title><content type='html'>Waste is a constraint. Reducing waste in your organization is one the easiest ways of reducing constraints.&lt;br /&gt;&lt;br /&gt;And here’s a surprise—waste in offices is usually greater than in factories, especially because it’s easy to hide waste in cumbersome or non-existent processes. Creating unnecessary information inventory is another common waste in offices. Doing too many tasks “in anticipation” of a possible client, for example…&lt;br /&gt;&lt;br /&gt;One way to think about waste is in terms of push and pull systems. A push system, like much of traditional manufacturing, produces as much product as the company can and/or wants to produce and then gets it out to the customer. The result is usually large inventories.&lt;br /&gt;&lt;br /&gt;A pull system only produces what a customer needs and has asked for. You want to have as much “pull” in your systems as you can. Toyota has very little excess inventory. That’s why when the Prius was so unexpectedly popular, people found themselves on waiting lists for the car. Seems like a problem, but Toyota is much more profitable as a result of being so lean. You might also hear this concept referred to as “just-in-time production” or JIT (remember? — it came from the supermarkets).&lt;br /&gt;&lt;br /&gt;I think of it this way — there’s a place for everything and everything in its place. No more. No less.&lt;br /&gt;&lt;br /&gt;Here’s a story on how to reduce waste (figuratively and literally), by integrating people and process in a pull system.&lt;br /&gt;&lt;br /&gt;Many places all over South East Asia (And many other places for that matter), you don’t have a conventional toilet. However, some places in Japan you don't only have a hole in the ground, instead there is an incinerator toilet as many Japanese are shy to have their bodily disposables exposed to even sewer rats. You first press a button to start the heating system and then put a special purpose coated paper bowl liner (like a coffee filter, but don’t try using one for this purpose it won’t work) down between two sloping pieces of steel (sort of like a toilet bowl liner). You do “your business” into the paper filter, step onto a lever, and wave goodbye to your waste and any toilet paper. The toilet incinerates the filter and extra donations from you at a very high temperature, somewhere around 6,000 degrees Celcius or the surface temperature of the sun, whichever is hotter. It’s a great way to eliminate waste. However, you can’t use the toilet without these special purpose coated paper bowl liners—they’re needed to keep the steel clean while also aiding in the incineration process. Many have tried and got a good scolding for it.&lt;br /&gt;&lt;br /&gt;A friend of mine and his wife have implemented a very simple “pull system” so that we always have just the right number of liners. Not too many, which ties up money and takes up extra space with excess inventory. Not too little which can shut down the incinerator if it’s overburdened by non-regulation uses.&lt;br /&gt;&lt;br /&gt;Over time my friend and his wife have determined just how many boxes of this paper to keep on hand, based on the frequency of use. It happens to be four boxes. These boxes are then stacked on a specific shelf (the one closest to the toilet, not down the hall, which would create a different kind of production problem, but right where you need them—and can reach them).&lt;br /&gt;&lt;br /&gt;On the bottom box is written—when you open this box tell Daniel or Yuko. You do tell them because it’s built into the culture of the dojo and you are part of the smooth functioning of the system. They then order 4 more boxes—and have determined, through learning by doing, just how long it takes to receive a shipment of 4 new boxes. It’s a very simple pull system that, in this case, only produces the right kind of waste.&lt;br /&gt;&lt;br /&gt;As you can tell, there are a number of keys to success in this process.&lt;br /&gt;&lt;br /&gt;Everything about this process is clearly visible and apparent to everybody involved in the process. If the box marked when you open this box tell Daniel or Yuko was inside a dark, hard to reach, cabinet, or it was written on the bottom of the box instead of on the flap that you have to open to get at the liners, it might not get noticed. The process relies on this visual indicator. Visual indicators or management charts, or checklists, etc. allow for communication and sharing. You can create standardized work sheets, but if you don’t have a way of seeing them, and the process, as if it were in a glass box, it’s likely that the standard practice won’t be followed and breakdown and waste will occur.&lt;br /&gt;&lt;br /&gt;Problems have a way of bubbling up to the surface. The longer you let them simmer the bigger the problem will be when it surfaces. Our goal is to create standardized work processes that bring issues and problems to the surface, using visual indicators so no problems are hidden, at the earliest possible moment. People are stimulated by the visual, tactile and audible. People are part of the process.&lt;br /&gt;&lt;br /&gt;Remember, we’re integrating. So it stands to reason that being able to see everything you manage is a balanced and harmonious way of creating flow in your work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-6022659172846999288?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/6022659172846999288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=6022659172846999288' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6022659172846999288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6022659172846999288'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/push-pull-standardization.html' title='Workaholics United : Push, Pull &amp; Standardization'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-37568311932119175</id><published>2008-07-21T01:44:00.004+02:00</published><updated>2008-07-21T01:49:14.199+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='Workaholics United'/><category scheme='http://www.blogger.com/atom/ns#' term='Estimation'/><title type='text'>Workaholics United : Consider All Factors (CAF)</title><content type='html'>In any situation, certain givens define the range of how we perceive it. By expanding the scope of considerations with a conscious effort, we can increase the span of our attention to aspects that might have otherwise been missed.&lt;br /&gt;&lt;br /&gt;Consider All Factors (CAF) is an attention directing tool designed to do this. During a defined interval of time, you mentally list every consideration about a topic you can think of, as opposed to just the first few that come to mind.&lt;br /&gt;An example&lt;br /&gt;&lt;br /&gt;A shy person is invited to a party. His default reaction is to think, “I’m just not an extrovert.” For this exercise he decides to enrich his perspective by considering other factors in that social situation:&lt;br /&gt;&lt;br /&gt;    * Body language&lt;br /&gt;    * Greetings&lt;br /&gt;    * Response to questions&lt;br /&gt;    * Questions to ask others&lt;br /&gt;    * Dressing for impact&lt;br /&gt;    * First impressions&lt;br /&gt;    * Smiling&lt;br /&gt;    * Who’s there that I already know?&lt;br /&gt;    * Purpose of attending&lt;br /&gt;    * Anxiety created by unfamiliarity&lt;br /&gt;&lt;br /&gt;Some considerations arguably overlap: first impressions, dressing for impact, smiling. It doesn’t matter, and would be counterproductive to censor new angles on what might be thought of as the same theme, since the only way to really know is in hindsight. In this case, the person might not have previously paid any attention to the role of personal appearance in creating good first impression, despite that factor being obvious to others.&lt;br /&gt;&lt;br /&gt;By consciously distributing cognition around a topic, he gives himself new things to think about. The consideration “purpose of attending” might contrast with going to the party simply because he was asked, instead of having a deliberate focus to guide to his behavior. The consideration, “anxiety created by unfamiliarity” is interesting. One strategy for overcoming his social apprehension is to familiarize himself with everyone in the room, making as many introductions as possible to avoid being confronted with a crowd of strangers.&lt;br /&gt;Other examples&lt;br /&gt;&lt;br /&gt;We can “do a CAF” for a couple of minutes on just about any topic, either for better planning or simply for its own sake as a mental exercise. Doing a CAF on apartment hunting might yield:&lt;br /&gt;&lt;br /&gt;    * Commute to and from work&lt;br /&gt;    * Length of lease&lt;br /&gt;    * Rent&lt;br /&gt;    * Total move-in cost&lt;br /&gt;    * Impression of landlord&lt;br /&gt;    * Square footage&lt;br /&gt;    * Aesthetics&lt;br /&gt;    * Noise level of surrounding area&lt;br /&gt;    * Walking distance to amenities (e.g. stores, parks)&lt;br /&gt;    * Parking&lt;br /&gt;    * Consensus with other decision makers&lt;br /&gt;    * Furniture&lt;br /&gt;    * Pets&lt;br /&gt;    * Terms of rental agreement&lt;br /&gt;&lt;br /&gt;Again, some overlap. Pets and lease length would be covered in the rental agreement, but isolating “terms of rental agreement” as a separate item might prompt the apartment hunter to look more carefully for unreasonable clauses instead of taking the contract for granted. Notice that the apartment hunter has also factored in “impression of landlord” as a conscious consideration rather than leaving it as an afterthought or subliminal intuition.&lt;br /&gt;&lt;br /&gt;Starting a exercise program:&lt;br /&gt;&lt;br /&gt;    * Type of exercise&lt;br /&gt;    * Clothing&lt;br /&gt;    * Equipment&lt;br /&gt;    * Schedule&lt;br /&gt;    * Home, gym, personal trainer?&lt;br /&gt;    * Fitness goals (e.g. weight, running distance)&lt;br /&gt;    * Handling eventual decline in discipline or enthusiasm&lt;br /&gt;    * Nutrition&lt;br /&gt;    * Documenting progress&lt;br /&gt;&lt;br /&gt;This person has identified a decline in discipline and enthusiasm as something to deal with before its onset. It’s much easier to plan for setbacks in advance than trying to address them while they’re happening.&lt;br /&gt;&lt;br /&gt;And now to the essence of my point... If you apply CAF to a software programming task, and the benefits become much more apparent. Make it a habit to perform a CAF at the inception of a programming assignment, and you will experience that your estimates will be closer to actual outcome and that your solution quality will increase because you become able to handle many issues pro actively, which may in other cases have become problems and forced you to do hacks-tweaks in order to get the code to conform to functional requirements within your estimated time frame.&lt;br /&gt;&lt;br /&gt;The more you practice the CAF operation, the easier it gets, and less inclined you are to be satisfied with accepting the first considerations that immediately come to mind. When you think about a new topic, you’ll begin to instinctively ask yourself, “What am I missing?”&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-37568311932119175?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/37568311932119175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=37568311932119175' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/37568311932119175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/37568311932119175'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/workaholics-united-consider-all-factors.html' title='Workaholics United : Consider All Factors (CAF)'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-7037581554452882126</id><published>2008-07-20T17:35:00.009+02:00</published><updated>2008-07-21T01:56:59.948+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='SoftwareEngineering'/><category scheme='http://www.blogger.com/atom/ns#' term='Estimation'/><title type='text'>Estimation : Off-The-Cuff Estimates</title><content type='html'>Project teams are sometimes trapped by off-the-cuff estimates.&lt;br /&gt;&lt;br /&gt;A projectmanager on a team asks, for example, "How long would it take to implement this component", while showing the developer a wireframe. The immediate response is typically, "I don't know. I think it might take a week. I'll check into it", and of the developer is to his/her desk to investigate the functional requirements further. Back at the desk the developer looks at the design and code for the component, back at the desk the developer notices a few things forgotten when the PM asked the question, adds up the changes and decides that it would take about 3 weeks. The developer hurry over to the PM's desk to update the first estimate, but the PM is in a meeting and therefore not to be found. Later that day the PM suddenly appear at the developer's desk and happily notifies the developer (before this can get a word out): "Since it seemed like a small project, I went ahead and talked to the customer about it. He was very excited about it and can't wait to see the component next week. Can your start working on it today?".&lt;br /&gt;&lt;br /&gt;I have found that the safest policy is NOT to give off-the-cuff estimates. Using intuition and guessing as basis of software estimates are almost always related with cost and schedule overruns.&lt;br /&gt;&lt;br /&gt;One of the errors people commit when estimating solely from personal memory is that they compare the new project to their memory of how long a past project took, or how much effort is required. Unfortunately peoples sometimes remember their estimate for the past project rather than the actual outcome of the past project. If they use their past estimate as the basis for a new estimate, and the past project's actual outcome was that it overran its estimate, guess what? The estimator has just calibrated a project overrun into the estimate for the new project.&lt;br /&gt;&lt;br /&gt;While guessing and intuition most definitely are positively correlated with project overruns, another less recognized fact is that the use of documented facts are negatively correlated with project overruns. In other words, there is a world of difference between giving the PM an off-the-cuff estimate versus saying, "I can't give you an answer of the top of my head, but let me go back to my desk, check a few notes, and get back to you in 15 minutes. Would that be OK?".&lt;br /&gt;&lt;br /&gt;While this is a simple point, off-the-cuff estimates is one of the most common errors that project teams make. So in order to become a better software engineer, we need to stop delivering off-the-cuff estimates !&lt;br /&gt;&lt;br /&gt;This blog post is the first in a long series about estimation I will be doing. Estimation is probably the single most important skill next to actual programmatic skills for a programmer, and even for non-programmers estimation is one of the most frequently performed activities, however also one of the skills that we pay the least attention to.&lt;br /&gt;&lt;br /&gt;First step in becoming a better estimator is to realize that off-the-cuff estimates are invalid and errorprone, and should be replaced by a structured analysis of the entity being estimated based on documented facts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-7037581554452882126?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/7037581554452882126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=7037581554452882126' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7037581554452882126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7037581554452882126'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/off-cuff-estimates.html' title='Estimation : Off-The-Cuff Estimates'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-2790824982113931758</id><published>2008-07-20T16:48:00.002+02:00</published><updated>2008-07-20T16:52:07.931+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash Player'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash Platform'/><title type='text'>Flash Player is the most ubiquitous Platform available</title><content type='html'>In the past, I’ve voiced that the non-pervasiveness of Flash (rather an average user’s ability to install plug-ins) is one reason website designers should consider before going for Flash. I officially scrap that as a point no longer valid.&lt;br /&gt;&lt;br /&gt;Millward Brown, one of the world’s leading market research agencies, recently closed a survey commissioned by Adobe Systems, Inc. with a goal “to track and compare Plug-In technology used to view content on the web.” This study, conducted quarterly, placed Adobe Flash Player at a comfortable 99% as the most pervasive software platform. Java (85%), Microsoft Windows Media Player (79.3%), Apple QuickTime Player (65.5%) and Adobe Shockwave Player (59.2%) round up the top five. The maximum margin of error was reportedly +/-6%.&lt;br /&gt;&lt;br /&gt;Pervasiveness, or penetration, is defined based on the presence of a platform on Internet-enabled desktops in mature markets (US, UK, Canada, France, Germany and Japan). The study has results from countries like mainland China, South Korea, Russia, India, and Taiwan as well. However, nothing explicit was mentioned about Philippines, Brazil and Romania which according to my latest &lt;a href="http://thecomcor.blogspot.com/2008/07/google-trends-of-xaml-and-mxml.html"&gt;trend check&lt;/a&gt; are among the top 9 regions searching for RIA technologies.&lt;br /&gt;&lt;br /&gt;To me, the biggest surprise is the high position of QuickTime. Can anybody explain it?&lt;br /&gt;&lt;br /&gt;Visit the &lt;a href="http://www.adobe.com/products/player_census/methodology/"&gt;methodology page&lt;/a&gt; for in-depth details about the study, and the &lt;a href="http://www.adobe.com/products/player_census/flashplayer/version_penetration.html"&gt;version penetration page&lt;/a&gt; for statistics by version.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-2790824982113931758?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/2790824982113931758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=2790824982113931758' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/2790824982113931758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/2790824982113931758'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/flash-player-is-most-ubiquitous.html' title='Flash Player is the most ubiquitous Platform available'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-6280950205645169192</id><published>2008-07-20T16:37:00.007+02:00</published><updated>2008-07-20T18:05:11.187+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SoftwareEngineering'/><title type='text'>Writing Final Classes and Methods</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Final Classes&lt;/span&gt;&lt;br /&gt;You can declare that your class is final; that is, that your class cannot be subclassed. There are (at least) two reasons why you might want to do this: security reasons and design reasons.&lt;br /&gt;&lt;br /&gt;Security&lt;br /&gt;One mechanism that hackers use to subvert systems is to create subclasses of a class and then substitute their class for the original. The subclass looks and feels like the original class but does vastly different things possibly causing damage or getting into private information. To prevent this kind of subversion, you can declare your class to be final and prevent any subclasses from being created. The String class is a final class for just this reason. The String class is so vital to the operation of the compiler and the interpreter that the system must guarantee that whenever a method or object uses a String they get exactly a String and not some other string. This ensures that all strings have no strange, inconsistent, undesirable, or unpredictable properties.&lt;br /&gt;&lt;br /&gt;If you try to compile a subclass of a final class, the compiler will print an error message and refuse to compile your program. In addition, the bytecode verifier ensures that the subversion is not taking place at the bytecode level by checking to make sure that a class is not a subclass of a final class.&lt;br /&gt;&lt;br /&gt;Design&lt;br /&gt;Another reason you may wish to declare a class as final are for object-oriented design reasons. You may think that your class is "perfect" or that, conceptually, your class should have no subclasses.&lt;br /&gt;&lt;br /&gt;To specify that your class is a final class, use the keyword final before the class keyword in your class declaration. For example, if you wanted to declare your (perfect) EncryptionAlogrithm class as final, its declaration would look like this:&lt;br /&gt;&lt;br /&gt;final class EncryptionAlogrithm&lt;br /&gt;{&lt;br /&gt;   . . .&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Any subsequent attempts to subclass EncryptionAlogrithm will result in a compiler error.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Final Methods&lt;/span&gt;&lt;br /&gt;If creating a final class seems heavy handed for your needs, and you really just want to protect some of your class's methods from being overridden, you can use the final keyword in a method declaration to indicate to the compiler that the method cannot be overridden by subclasses.&lt;br /&gt;&lt;br /&gt;You might wish to make a method final if the method has an implementation that should not be changed and is critical to the consistent state of the object. For example, instead of making your EncryptionAlogrithm class final, you might just want to make the decrypt method final:&lt;br /&gt;&lt;br /&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span style="color: #008000; font-weight: bold"&gt;class&lt;/span&gt; EncryptionAlogrithm&lt;br /&gt;{&lt;br /&gt;          . . .&lt;br /&gt;          final void encrypt( message&lt;span style="color: #666666"&gt;:&lt;/span&gt;IMessage )&lt;br /&gt;          {&lt;br /&gt;            . . .&lt;br /&gt;          }&lt;br /&gt;          . . .&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-6280950205645169192?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/6280950205645169192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=6280950205645169192' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6280950205645169192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6280950205645169192'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/writing-final-classes-and-methods.html' title='Writing Final Classes and Methods'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-8279451598416258980</id><published>2008-07-20T05:15:00.001+02:00</published><updated>2008-07-20T05:19:27.663+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='Arbitrary Thoughts'/><category scheme='http://www.blogger.com/atom/ns#' term='Workaholics United'/><title type='text'>Workaholics United : Playing the Percentages</title><content type='html'>Whenever management lays down some new policies for customers or employees, there will inevitably be some degree of blowback. Any change, from moving to a outsourcing to India to moving furniture from one department to another, disrupts our sphere of comfort.&lt;br /&gt;&lt;br /&gt;Since I can’t get away with simply saying, “Well, that’s different from what I’m used to,” I would be inclined to gather some negative results designed to invalidate the new policy. One time I was asked to implement an email autoresponder with text I disagreed with. After a few days, I got a couple of complaints from customers, so I argued to the boss that we should scrap the autoresponder. Referring to the complaints, he asked the question I’d come to expect from him:&lt;br /&gt;&lt;br /&gt;“What percentage of the time does this happen?”&lt;br /&gt;&lt;br /&gt;I sighed, knowing that not only had I been shot down, but that he was right in principle. I felt foolish telling him that I had received three complaints out of hundreds of email exchanges.&lt;br /&gt;&lt;br /&gt;With any new project, some things are bound to go wrong. A zero-defect mentality is a zero-action policy. For practical goal realization, the operative principle should be to contain risk, not eliminate it. A certain amount of risk analysis is healthy. The trick is to identify the point of diminishing returns where further steps to reduce risk are actually attempts to eliminate risk, which is unrealistic.&lt;br /&gt;&lt;br /&gt;There’s no formula for determining that point, only an intuition or an arbitrary definition that involves asking an answer certain questions:&lt;br /&gt;&lt;br /&gt;    * How seriously would the problem impact this?&lt;br /&gt;    * What percentage of the time does the problem happen?&lt;br /&gt;    * What percentage is acceptable?&lt;br /&gt;    * Is the problem irreversible?&lt;br /&gt;    * What other problems could happen?&lt;br /&gt;    * What steps could be taken to fix the problem?&lt;br /&gt;    * What steps could be taken to prevent the problem without abandoning the project?&lt;br /&gt;    * What problems would result from abandoning the project?&lt;br /&gt;    * Does the positive impact of success outweigh the negative impact of failure?&lt;br /&gt;&lt;br /&gt;Psychologically, risk is “contained” when it’s given precisely the amount of attention appropriate to it, not more. The focus is predominantly on the likelihood of a negative outcome rather than the details of it. Problems are converted into projects, defined in terms of successful outcomes and next actions.&lt;br /&gt;&lt;br /&gt;Recognize the difference between creating slack and being a slacker. Define your margin for error and embrace the art of strategic failure as a practical price to pay for accomplishing bigger goals.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-8279451598416258980?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/8279451598416258980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=8279451598416258980' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/8279451598416258980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/8279451598416258980'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/workaholics-united-playing-percentages.html' title='Workaholics United : Playing the Percentages'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-396898788568345982</id><published>2008-07-19T23:55:00.002+02:00</published><updated>2008-07-20T05:20:11.920+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='Arbitrary Thoughts'/><title type='text'>21 laws of Programming</title><content type='html'>1. Any given program, once deployed, is already obsolete.&lt;br /&gt;   2. It is easier to change the specification to fit the program than vice versa.&lt;br /&gt;   3. If a program is useful, it will have to be changed.&lt;br /&gt;   4. If a program is useless, it will have to be documented.&lt;br /&gt;   5. Only ten percent of the code in any given program will ever execute.&lt;br /&gt;   6. Software expands to consume all available resources.&lt;br /&gt;   7. Any non-trivial program contains at least one error.&lt;br /&gt;   8. The probability of a flawless demo is inversely proportional to the number of people watching, raised to the power of the amount of money involved.&lt;br /&gt;   9. Not until a program has been in production for at least six months will its most harmful error be discovered.&lt;br /&gt;  10. Undetectable errors are infinite in variety, in contrast to detectable errors, which by definition are limited.&lt;br /&gt;  11. The effort required to correct an error increases exponentially with time.&lt;br /&gt;  12. Program complexity grows until it exceeds the capabilities of the programmer who must maintain it.&lt;br /&gt;  13. Any code of your own that you haven’t looked at in months might as well have been written by someone else.&lt;br /&gt;  14. Inside every small program is a large program struggling to get out.&lt;br /&gt;  15. The sooner you start coding a program, the longer it will take.&lt;br /&gt;  16. A carelessly planned project takes three times longer to complete than expected; a carefully planned project takes only twice as long.&lt;br /&gt;  17. Adding programmers to a late project makes it later.&lt;br /&gt;  18. A program is never less than 90% complete, and never more than 95% complete.&lt;br /&gt;  19. If you automate a mess, you get an automated mess.&lt;br /&gt;  20. Build a program that even a fool can use, and only a fool will want to use it.&lt;br /&gt;  21. Users truly don’t know what they want in a program until they use it&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-396898788568345982?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/396898788568345982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=396898788568345982' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/396898788568345982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/396898788568345982'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/21-laws-of-programming.html' title='21 laws of Programming'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-8592324451130475457</id><published>2008-07-19T20:31:00.002+02:00</published><updated>2008-07-19T20:36:51.116+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Workaholics United'/><title type='text'>Workaholics United : Upgrade an Unproductive Day by Mentally Rehearsing a Better One</title><content type='html'>There’s no going back in time, but there are ways to learn from the past rather than live in it.&lt;br /&gt;&lt;br /&gt;Every day we walk through a minefield of potential distractions, sometimes arriving on the other side unscathed, sometimes not. One digression leads to another, the cycle repeats, and hours later we wonder where the time went. It’s tempting to criticize ourselves for getting nothing none that day, and even if the criticism is somewhat accurate (it’s unlikely that nothing got done), the diagnosis itself is idle — which is to say, “So what?”&lt;br /&gt;&lt;br /&gt;Figuring out the obvious moves nothing forward. On the other hand, recognizing the problem implies recognizing the solution. When I run into this situation, I ask myself to process questions:&lt;br /&gt;&lt;br /&gt;    * How did I get nothing done today?&lt;br /&gt;    * What will I do differently tomorrow?&lt;br /&gt;&lt;br /&gt;Since a day’s accomplishments, or lack thereof, is the sum of many behaviors, neither of these questions can be addressed by a single answer — at least to have the level of precision necessary to make a substantial change.&lt;br /&gt;Mental modeling&lt;br /&gt;&lt;br /&gt;It’s not enough to know our worst practices in general. To make tomorrow a more accomplished day than today, we need to rewind the film strip to the precise moment where we got derailed.&lt;br /&gt;&lt;br /&gt;For instance, I noticed that whenever I boot a computer and don’t seem to get straight to business, the problem usually starts at boot time. Since I can’t do anything on the laptop for two or three minutes, I start to zone out. What I would be doing if boot time wasn’t a factor is doing a daily review on the IPhone Desktop, looking at each of my action lists.&lt;br /&gt;&lt;br /&gt;Asking myself, “What would I do differently?”, it took about 10 seconds to realize that I needed to have my lists — especially my @Computer list — available before the computer was. So I started scanning my todo's on my cell-phone, so that by the time the hourglass on my computer’s screen disappears, I can hit the ground running.&lt;br /&gt;&lt;br /&gt;I have introduced daily standup meetings on my team at 9:30 where we one by one describe the tasks that we have planned for the day and thereby get a chance to both think the day through at its beginning, but also to use the team to share problems or ideas.&lt;br /&gt;The basic idea is to mentally step through the day, looking for the forks in the road that compelled you to do X when you know in hindsight that you should have been doing Y. When was the precise moment what your attention shifted to the path of less resistance? What precisely was the distraction?&lt;br /&gt;&lt;br /&gt;I believe the sequence of behaviors is critical, and that the earlier ones have the most leverage. If you can maintain a chain of focused activity in the first few hours, you create the momentum necessary to minimize the effects of distractions later on.&lt;br /&gt;&lt;br /&gt;Sometimes the problems aren’t necessarily distractions, but behavioral patterns that yield predictably regrettable results. Having too many sugared foods or beverages in the morning leads to an energy crash in the afternoon. Driving past a great bookstore on the way home from work leads to the unbearable lightness of wallet. A change of environment or route may be in order.&lt;br /&gt;&lt;br /&gt;After reviewing the dysfunctional day, mentally step through what a focused tomorrow would look like, moment to moment, from morning to evening. What better practices will you be implementing? Which behaviors will you avoid doing?&lt;br /&gt;&lt;br /&gt;Always make tomorrow a better day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-8592324451130475457?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/8592324451130475457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=8592324451130475457' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/8592324451130475457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/8592324451130475457'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/workaholics-united-upgrade-unproductive.html' title='Workaholics United : Upgrade an Unproductive Day by Mentally Rehearsing a Better One'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-2387182581936864179</id><published>2008-07-19T20:24:00.007+02:00</published><updated>2008-07-20T18:19:58.570+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>Flex : URI Class implementation</title><content type='html'>Browsing through the my company's code repository (what else to do Saturday night ?) I found a number of different URI class implementations... whereas they did differ a little bit in implementation, the overall implementations were very similar and mostly differed in quality.&lt;br /&gt;&lt;br /&gt;None of them however were as good as Mike Chambers' implementation which can be found in the AS3CoreLib.&lt;br /&gt;&lt;br /&gt;If you have not yet checked it out yet and you sometimes find yourself in need of a good URI class implementation, consider using this one...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/as3corelib/source/browse/trunk/src/com/adobe/net/URI.as"&gt;http://code.google.com/p/as3corelib/source/browse/trunk/src/com/adobe/net/URI.as&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-2387182581936864179?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/2387182581936864179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=2387182581936864179' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/2387182581936864179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/2387182581936864179'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/adobe-flex-uri-class-implementation.html' title='Flex : URI Class implementation'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-6074764009393861304</id><published>2008-07-19T18:56:00.017+02:00</published><updated>2008-08-27T20:46:26.393+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>Flex : Pageable ArrayCollection with support for active paging</title><content type='html'>Yesterday one of the developers in my company had the need for a PagedArrayCollection. A quick search on Google revealed only &lt;a href="http://pagableac.riaforge.org/"&gt;this implementation&lt;/a&gt;, which turned out to be buggy so I decided to implement one myself.&lt;br /&gt;&lt;br /&gt;I designed an interface called IPagedCollection which in combination with an extension of the existing mx.collections.ArrayCollection implementation would do the job.&lt;br /&gt;&lt;br /&gt;Only hurdle was the need to override addItemAt and removeItemAt as the autoUpdate doesn't seem to work when a filterFunction is employed. I will look in to this phenomena, but as for now a call to refresh after inserting or removing does the job nicely.&lt;br /&gt;&lt;br /&gt;The code itself is quite simple, I have also created a small demo-application which illustrates the use of the collection.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://petermolgaard.com/projects/pagedarraycollection/"&gt;Live Demo&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://petermolgaard.com/projects/pagedarraycollection.zip"&gt;Download of Sources&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span style="color: #408080; font-style: italic"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #408080; font-style: italic"&gt; * Copyright(c) 2008 HelloGroup A/S, some rights reserved.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #408080; font-style: italic"&gt; * Your reuse is governed by the Creative Commons Attribution 3.0 Denmark License&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #408080; font-style: italic"&gt;**/&lt;/span&gt;&lt;br /&gt;package com.hello.collections&lt;br /&gt;{&lt;br /&gt; &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;interface&lt;/span&gt; IPagedArrayCollection&lt;br /&gt; {&lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; get currentPage() &lt;span style="color: #666666"&gt;:&lt;/span&gt; &lt;span style="color: #008000"&gt;Number&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; set currentPage( value&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #008000"&gt;Number&lt;/span&gt; ) &lt;span style="color: #666666"&gt;:&lt;/span&gt; void&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; get numberOfPages() &lt;span style="color: #666666"&gt;:&lt;/span&gt; &lt;span style="color: #008000"&gt;Number&lt;/span&gt;&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; get pageSize() &lt;span style="color: #666666"&gt;:&lt;/span&gt; &lt;span style="color: #008000"&gt;Number&lt;/span&gt;&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; set pageSize( value&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #008000"&gt;Number&lt;/span&gt; ) &lt;span style="color: #666666"&gt;:&lt;/span&gt; void&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; get lengthTotal() &lt;span style="color: #666666"&gt;:&lt;/span&gt; &lt;span style="color: #008000"&gt;Number&lt;/span&gt;&lt;span style="color: #666666"&gt;;&lt;/span&gt;  &lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span style="color: #408080; font-style: italic"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #408080; font-style: italic"&gt; * Copyright(c) 2008 HelloGroup A/S, some rights reserved.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #408080; font-style: italic"&gt; * Your reuse is governed by the Creative Commons Attribution 3.0 Denmark License&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #408080; font-style: italic"&gt; * &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #408080; font-style: italic"&gt; * Known Issues:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #408080; font-style: italic"&gt; * - When the collection changes in size or pagesize, the currentPage is not updated. This is a problem if currentPage is set to a higher value than in the new collection.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #408080; font-style: italic"&gt;**/&lt;/span&gt;&lt;br /&gt;package com.hello.collections&lt;br /&gt;{&lt;br /&gt; &lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; mx.collections.ArrayCollection&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; mx.events.CollectionEvent&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;class&lt;/span&gt; PagedArrayCollection &lt;span style="color: #008000; font-weight: bold"&gt;extends&lt;/span&gt; ArrayCollection &lt;span style="color: #008000; font-weight: bold"&gt;implements&lt;/span&gt; IPagedArrayCollection&lt;br /&gt; {&lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;private&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;var&lt;/span&gt; _currentPage&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #008000"&gt;Number&lt;/span&gt; &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #666666"&gt;1;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;private&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;var&lt;/span&gt; _numberOfPages&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #008000"&gt;Number&lt;/span&gt; &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #666666"&gt;1;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;private&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;var&lt;/span&gt; _pageSize&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #008000"&gt;Number&lt;/span&gt; &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #666666"&gt;10;&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; PagedArrayCollection(source&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #008000"&gt;Array&lt;/span&gt;&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;null&lt;/span&gt;)&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;super&lt;/span&gt;( source );&lt;br /&gt;   filterFunction &lt;span style="color: #666666"&gt;=&lt;/span&gt; filterData&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;   addEventListener( CollectionEvent.COLLECTION_CHANGE&lt;span style="color: #666666"&gt;,&lt;/span&gt; onChange );&lt;br /&gt;  }  &lt;br /&gt;  &lt;br /&gt;  &lt;span style="color: #408080; font-style: italic"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #408080; font-style: italic"&gt;   * Adds an item to the collection at the specified index.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #408080; font-style: italic"&gt;   * &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #408080; font-style: italic"&gt;   * @param item Item to be added&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #408080; font-style: italic"&gt;   * @param index Index of the item to be added&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #408080; font-style: italic"&gt;   * &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #408080; font-style: italic"&gt;   * Note: Needs to be overridden in order to trigger refresh. AddItem eventually calls this function so its not needed to override addItem &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #408080; font-style: italic"&gt;   */&lt;/span&gt;  &lt;br /&gt;  override &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; addItemAt( item&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #008000"&gt;Object&lt;/span&gt;&lt;span style="color: #666666"&gt;,&lt;/span&gt; index&lt;span style="color: #666666"&gt;:&lt;/span&gt;int ) &lt;span style="color: #666666"&gt;:&lt;/span&gt; void&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;super&lt;/span&gt;.addItemAt( item&lt;span style="color: #666666"&gt;,&lt;/span&gt; index );&lt;br /&gt;   refresh();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span style="color: #408080; font-style: italic"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #408080; font-style: italic"&gt;   * Removes the item from the collection at the specified index&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #408080; font-style: italic"&gt;   * &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #408080; font-style: italic"&gt;   * @param index Index of the item to be removed&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #408080; font-style: italic"&gt;   * @return The item removed&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #408080; font-style: italic"&gt;   * &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #408080; font-style: italic"&gt;   * Note: Needs to be overridden in order to trigger refresh &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #408080; font-style: italic"&gt;   */&lt;/span&gt;      &lt;br /&gt;  override &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; removeItemAt( index&lt;span style="color: #666666"&gt;:&lt;/span&gt;int ) &lt;span style="color: #666666"&gt;:&lt;/span&gt; &lt;span style="color: #008000"&gt;Object&lt;/span&gt;&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;var&lt;/span&gt; removedItem&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #008000"&gt;Object&lt;/span&gt; &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;super&lt;/span&gt;.removeItemAt( index );&lt;br /&gt;   refresh();&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;return&lt;/span&gt; removedItem&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;  }&lt;br /&gt;    &lt;br /&gt;  protected &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; onChange( event&lt;span style="color: #666666"&gt;:&lt;/span&gt;CollectionEvent ) &lt;span style="color: #666666"&gt;:&lt;/span&gt; void&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;if&lt;/span&gt;( _numberOfPages &lt;span style="color: #666666"&gt;!=&lt;/span&gt; numberOfPages )&lt;br /&gt;   {&lt;br /&gt;    _numberOfPages &lt;span style="color: #666666"&gt;=&lt;/span&gt; numberOfPages&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;    onPagingChange( PagedCollectionEventKind.NUMBEROFPAGES_CHANGE );&lt;br /&gt;   }  &lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  protected &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; onPagingChange( kind&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #008000"&gt;String&lt;/span&gt; ) &lt;span style="color: #666666"&gt;:&lt;/span&gt; void&lt;br /&gt;  {&lt;br /&gt;   dispatchEvent( &lt;span style="color: #008000; font-weight: bold"&gt;new&lt;/span&gt; CollectionEvent( CollectionEvent.COLLECTION_CHANGE&lt;span style="color: #666666"&gt;,&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;false&lt;/span&gt;&lt;span style="color: #666666"&gt;,&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;false&lt;/span&gt;&lt;span style="color: #666666"&gt;,&lt;/span&gt; kind ) );&lt;br /&gt;  }  &lt;br /&gt;  &lt;br /&gt;  [ChangeEvent(&lt;span style="color: #BA2121"&gt;&amp;quot;collectionChange&amp;quot;&lt;/span&gt;)]&lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; get currentPage() &lt;span style="color: #666666"&gt;:&lt;/span&gt; &lt;span style="color: #008000"&gt;Number&lt;/span&gt;&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;return&lt;/span&gt; _currentPage&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;  }&lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; set currentPage( value&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #008000"&gt;Number&lt;/span&gt; ) &lt;span style="color: #666666"&gt;:&lt;/span&gt; void&lt;br /&gt;  {&lt;br /&gt;   _currentPage &lt;span style="color: #666666"&gt;=&lt;/span&gt; value&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;   refresh();&lt;br /&gt;   onPagingChange( PagedCollectionEventKind.CURRENTPAGE_CHANGE );&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  [ChangeEvent(&lt;span style="color: #BA2121"&gt;&amp;quot;collectionChange&amp;quot;&lt;/span&gt;)]&lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; get numberOfPages() &lt;span style="color: #666666"&gt;:&lt;/span&gt; &lt;span style="color: #008000"&gt;Number&lt;/span&gt;&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;var&lt;/span&gt; result&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #008000"&gt;Number&lt;/span&gt; &lt;span style="color: #666666"&gt;=&lt;/span&gt; source.length &lt;span style="color: #666666"&gt;/&lt;/span&gt; pageSize&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;   result &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #008000"&gt;Math&lt;/span&gt;.ceil( result );&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;return&lt;/span&gt; result&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;  }  &lt;br /&gt;  &lt;br /&gt;  [ChangeEvent(&lt;span style="color: #BA2121"&gt;&amp;quot;collectionChange&amp;quot;&lt;/span&gt;)]&lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; get pageSize() &lt;span style="color: #666666"&gt;:&lt;/span&gt; &lt;span style="color: #008000"&gt;Number&lt;/span&gt;&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;return&lt;/span&gt; _pageSize&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;  }&lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; set pageSize( value&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #008000"&gt;Number&lt;/span&gt; ) &lt;span style="color: #666666"&gt;:&lt;/span&gt; void&lt;br /&gt;  {&lt;br /&gt;   _pageSize &lt;span style="color: #666666"&gt;=&lt;/span&gt; value&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;   refresh();&lt;br /&gt;   onPagingChange( PagedCollectionEventKind.PAGESIZE_CHANGE );&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  [ChangeEvent(&lt;span style="color: #BA2121"&gt;&amp;quot;collectionChange&amp;quot;&lt;/span&gt;)]&lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; get lengthTotal() &lt;span style="color: #666666"&gt;:&lt;/span&gt; &lt;span style="color: #008000"&gt;Number&lt;/span&gt;&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;return&lt;/span&gt; source.length&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;  }&lt;br /&gt;    &lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;private&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; filterData( item&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #008000"&gt;Object&lt;/span&gt; ) &lt;span style="color: #666666"&gt;:&lt;/span&gt; &lt;span style="color: #008000"&gt;Boolean&lt;/span&gt;&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;var&lt;/span&gt; dataWindowCeiling&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #008000"&gt;Number&lt;/span&gt; &lt;span style="color: #666666"&gt;=&lt;/span&gt; pageSize &lt;span style="color: #666666"&gt;*&lt;/span&gt; currentPage&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;var&lt;/span&gt; dataWindowFloor&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #008000"&gt;Number&lt;/span&gt; &lt;span style="color: #666666"&gt;=&lt;/span&gt; dataWindowCeiling &lt;span style="color: #666666"&gt;-&lt;/span&gt; pageSize&lt;span style="color: #666666"&gt;;&lt;/span&gt;   &lt;br /&gt;   &lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;var&lt;/span&gt; itemIndex&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #008000"&gt;Number&lt;/span&gt; &lt;span style="color: #666666"&gt;=&lt;/span&gt; getItemIndex( item );&lt;br /&gt;   &lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;var&lt;/span&gt; result&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #008000"&gt;Boolean&lt;/span&gt; &lt;span style="color: #666666"&gt;=&lt;/span&gt; dataWindowFloor &lt;span style="color: #666666"&gt;&amp;lt;=&lt;/span&gt; itemIndex &lt;span style="color: #666666"&gt;&amp;amp;&amp;amp;&lt;/span&gt; itemIndex &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt; dataWindowCeiling&lt;span style="color: #666666"&gt;;&lt;/span&gt;   &lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;return&lt;/span&gt; result&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span style="color: #408080; font-style: italic"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #408080; font-style: italic"&gt; * Copyright(c) 2008 HelloGroup A/S, some rights reserved.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #408080; font-style: italic"&gt; * Your reuse is governed by the Creative Commons Attribution 3.0 Denmark License&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #408080; font-style: italic"&gt;**/&lt;/span&gt;&lt;br /&gt;package com.hello.collections&lt;br /&gt;{&lt;br /&gt; &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;class&lt;/span&gt; PagedCollectionEventKind&lt;br /&gt; {&lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;static&lt;/span&gt; const CURRENTPAGE_CHANGE&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #008000"&gt;String&lt;/span&gt; &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #BA2121"&gt;&amp;quot;currentPageChange&amp;quot;&lt;/span&gt;&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;static&lt;/span&gt; const PAGESIZE_CHANGE&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #008000"&gt;String&lt;/span&gt; &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #BA2121"&gt;&amp;quot;pageSizeChange&amp;quot;&lt;/span&gt;&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;static&lt;/span&gt; const NUMBEROFPAGES_CHANGE&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #008000"&gt;String&lt;/span&gt; &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #BA2121"&gt;&amp;quot;numberOfPagesChange&amp;quot;&lt;/span&gt;&lt;span style="color: #666666"&gt;;&lt;/span&gt; &lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This is the small demo-application which illustrates and validates that the collection works.&lt;br /&gt;&lt;br /&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span style="color: #666666"&gt;&amp;lt;?&lt;/span&gt;xml version&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt; encoding&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;utf-8&amp;quot;&lt;/span&gt;&lt;span style="color: #666666"&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;Application&lt;br /&gt; xmlns&lt;span style="color: #666666"&gt;:&lt;/span&gt;mx&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;http://www.adobe.com/2006/mxml&amp;quot;&lt;/span&gt;&lt;br /&gt; layout&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;vertical&amp;quot;&lt;/span&gt;&lt;br /&gt; initialize&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;onInitialize(event)&amp;quot;&lt;/span&gt;&lt;br /&gt; creationComplete&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;onCreationComplete(event)&amp;quot;&lt;/span&gt;&lt;span style="color: #666666"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;HBox width&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;100%&amp;quot;&lt;/span&gt;&lt;span style="color: #666666"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;Label text&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;Key:&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;TextInput id&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;keyInput&amp;quot;&lt;/span&gt; text&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;NEW KEY&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;Label text&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;Value:&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;TextInput id&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;valueInput&amp;quot;&lt;/span&gt; text&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;NEW VALUE&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;/&amp;gt;&lt;/span&gt; &lt;br /&gt;  &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;Button id&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;addButton&amp;quot;&lt;/span&gt; label&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;Add Item&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;Button id&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;removeButton&amp;quot;&lt;/span&gt; label&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;Remove Item&amp;quot;&lt;/span&gt; enabled&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;{ grid.selectedItem != null }&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;Label text&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;Set PageSize:&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;ComboBox id&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;pageSizeSelector&amp;quot;&lt;/span&gt; dataProvider&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;{ [ 5, 10, 25] }&amp;quot;&lt;/span&gt; selectedIndex&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;1&amp;quot;&lt;/span&gt; change&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;{ collection.pageSize = Number( pageSizeSelector.value ) }&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;/&amp;gt;&lt;/span&gt;   &lt;br /&gt; &lt;span style="color: #666666"&gt;&amp;lt;/&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;HBox&lt;span style="color: #666666"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;DataGrid id&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;grid&amp;quot;&lt;/span&gt; dataProvider&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;{ collection }&amp;quot;&lt;/span&gt; width&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;100%&amp;quot;&lt;/span&gt; height&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;100%&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;HBox&lt;span style="color: #666666"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;Label text&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;Count: { collection.length } ({ collection.lengthTotal })&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;Label text&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;( { collection.currentPage }/{ collection.numberOfPages } )&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;Label text&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;PageSize: { collection.pageSize }&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;Button label&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;Previous&amp;quot;&lt;/span&gt; enabled&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;{ collection.currentPage &amp;gt; 1 }&amp;quot;&lt;/span&gt; click&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;{ collection.currentPage-- }&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;Button label&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;Next&amp;quot;&lt;/span&gt; enabled&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;{ collection.numberOfPages &amp;gt; collection.currentPage }&amp;quot;&lt;/span&gt; click&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;{ collection.currentPage++ }&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #666666"&gt;&amp;lt;/&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;HBox&lt;span style="color: #666666"&gt;&amp;gt;&lt;/span&gt;  &lt;br /&gt; &lt;br /&gt; &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;Script&lt;span style="color: #666666"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #666666"&gt;&amp;lt;!&lt;/span&gt;[CDATA[&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; mx.events.CollectionEvent&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; mx.events.FlexEvent&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; com.hello.collections.PagedArrayCollection&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;br /&gt;   [Bindable]&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;private&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;var&lt;/span&gt; collection&lt;span style="color: #666666"&gt;:&lt;/span&gt;PagedArrayCollection&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;private&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; onInitialize( event&lt;span style="color: #666666"&gt;:&lt;/span&gt;FlexEvent ) &lt;span style="color: #666666"&gt;:&lt;/span&gt; void&lt;br /&gt;   {    &lt;br /&gt;    &lt;span style="color: #008000; font-weight: bold"&gt;var&lt;/span&gt; collection&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #008000"&gt;Array&lt;/span&gt; &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;new&lt;/span&gt; &lt;span style="color: #008000"&gt;Array&lt;/span&gt;();&lt;br /&gt;    &lt;br /&gt;    &lt;span style="color: #008000; font-weight: bold"&gt;for&lt;/span&gt;( &lt;span style="color: #008000; font-weight: bold"&gt;var&lt;/span&gt; i&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #008000"&gt;Number&lt;/span&gt; &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #666666"&gt;1;&lt;/span&gt; i &lt;span style="color: #666666"&gt;&amp;lt;=&lt;/span&gt; &lt;span style="color: #666666"&gt;20;&lt;/span&gt; i&lt;span style="color: #666666"&gt;++&lt;/span&gt; )&lt;br /&gt;    {&lt;br /&gt;     collection.push( { key&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;Item_Key_&amp;quot;&lt;/span&gt;&lt;span style="color: #666666"&gt;+&lt;/span&gt; i&lt;span style="color: #666666"&gt;,&lt;/span&gt; value&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;Item_Value_&amp;quot;&lt;/span&gt;&lt;span style="color: #666666"&gt;+&lt;/span&gt; i } ); &lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    &lt;span style="color: #008000; font-weight: bold"&gt;this&lt;/span&gt;.collection &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;new&lt;/span&gt; PagedArrayCollection( collection );&lt;br /&gt;    &lt;span style="color: #008000; font-weight: bold"&gt;this&lt;/span&gt;.collection.addEventListener( CollectionEvent.COLLECTION_CHANGE&lt;span style="color: #666666"&gt;,&lt;/span&gt; onItemsChange );    &lt;br /&gt;    &lt;span style="color: #008000; font-weight: bold"&gt;this&lt;/span&gt;.collection.refresh();&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;private&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; onCreationComplete( event&lt;span style="color: #666666"&gt;:&lt;/span&gt;FlexEvent ) &lt;span style="color: #666666"&gt;:&lt;/span&gt; void&lt;br /&gt;   {&lt;br /&gt;    addButton.addEventListener( MouseEvent.CLICK&lt;span style="color: #666666"&gt;,&lt;/span&gt; addButton_Click );&lt;br /&gt;    removeButton.addEventListener( MouseEvent.CLICK&lt;span style="color: #666666"&gt;,&lt;/span&gt; removeButton_Click );&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;private&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; addButton_Click( event&lt;span style="color: #666666"&gt;:&lt;/span&gt;MouseEvent ) &lt;span style="color: #666666"&gt;:&lt;/span&gt; void&lt;br /&gt;   {&lt;br /&gt;    collection.addItem( { key&lt;span style="color: #666666"&gt;:&lt;/span&gt;keyInput.text&lt;span style="color: #666666"&gt;,&lt;/span&gt; value&lt;span style="color: #666666"&gt;:&lt;/span&gt;valueInput.text } );&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;private&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; removeButton_Click( event&lt;span style="color: #666666"&gt;:&lt;/span&gt;MouseEvent ) &lt;span style="color: #666666"&gt;:&lt;/span&gt; void&lt;br /&gt;   {&lt;br /&gt;    collection.removeItemAt( collection.getItemIndex( grid.selectedItem ) );&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;private&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; onItemsChange( event&lt;span style="color: #666666"&gt;:&lt;/span&gt;CollectionEvent ) &lt;span style="color: #666666"&gt;:&lt;/span&gt; void&lt;br /&gt;   {&lt;br /&gt;    &lt;span style="color: #0000FF"&gt;trace&lt;/span&gt;( event.kind &lt;span style="color: #666666"&gt;+&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot; collectionchanged&amp;quot;&lt;/span&gt; );&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;  ]]&lt;span style="color: #666666"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #666666"&gt;&amp;lt;/&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;Script&lt;span style="color: #666666"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="color: #666666"&gt;&amp;lt;/&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;Application&lt;span style="color: #666666"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-6074764009393861304?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/6074764009393861304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=6074764009393861304' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6074764009393861304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6074764009393861304'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/adobe-flex-pageable-arraycollection.html' title='Flex : Pageable ArrayCollection with support for active paging'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-2270550981821471713</id><published>2008-07-16T17:01:00.003+02:00</published><updated>2008-07-20T18:07:52.095+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>PV3D : Training in Cologne</title><content type='html'>The Rich Media Institute are having one of their renown PV3D training courses in Cologne at the end of this month.&lt;br /&gt;&lt;br /&gt;I am still hoping to to have the time to go there, perhaps not as much for the sake of learning new stuff as I have already attended some courses and have some experience already, but also to hang out with a lot of cool people and get a peek at all the amazingly cool stuff that is going on out there in the community.&lt;br /&gt;&lt;br /&gt;Check it out... &lt;br /&gt;&lt;a href="http://www.richmediainstitute.com/papervision_cologne"&gt;http://www.richmediainstitute.com/papervision_cologne&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-2270550981821471713?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/2270550981821471713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=2270550981821471713' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/2270550981821471713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/2270550981821471713'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/pv3d-training-in-cologne.html' title='PV3D : Training in Cologne'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-7509185636142224096</id><published>2008-07-15T09:22:00.004+02:00</published><updated>2008-07-20T18:10:57.818+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex SDK'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>Flex SDK : Skinning in Flex 4 (Codename: Gumbo)</title><content type='html'>The Flash Player is the delivery mechanism for some of the most creative work to be found on the web today. Flex applications however have gained a reputation for looking too similar to each other, as many developers choose to use the Flex default look and feel (known as Halo) as opposed to applying extensive styling or skinning. Research performed by Adobe shows that only 46% of our frequent Flex users do extensive skinning while only 22% even do major style adjustments. This is not to say that customization never happens, but Adobe found that it remains too challenging to create a truly custom experience. It is therefore a priority for Gumbo (The new version of the Flex SDK) to make easy customization of Flex application experiences the norm instead of the exception.&lt;br /&gt;&lt;br /&gt;Exciting stuff... Check it out...&lt;br /&gt;&lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/Gumbo+Themes"&gt;http://opensource.adobe.com/wiki/display/flexsdk/Gumbo+Themes&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-7509185636142224096?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/7509185636142224096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=7509185636142224096' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7509185636142224096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7509185636142224096'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/flex-sdk-skinning-in-gumbo.html' title='Flex SDK : Skinning in Flex 4 (Codename: Gumbo)'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-4709384672428082407</id><published>2008-07-10T23:45:00.003+02:00</published><updated>2008-07-20T18:11:14.529+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Data Visualization'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>ILog Elixir 2.0 Beta Program Started</title><content type='html'>The ILog Elixir Team have created a cool Beta program which allow developers a early preview of things to come.&lt;br /&gt;&lt;br /&gt;Just sign up and check it out...&lt;br /&gt;&lt;a href="http://blogs.ilog.com/elixir/2008/07/03/ilog-elixir-20-preview-program-starts/"&gt;http://blogs.ilog.com/elixir/2008/07/03/ilog-elixir-20-preview-program-starts/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-4709384672428082407?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/4709384672428082407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=4709384672428082407' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4709384672428082407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4709384672428082407'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/ilog-elixir-20-beta-program-started.html' title='ILog Elixir 2.0 Beta Program Started'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-84983290779388803</id><published>2008-07-09T13:32:00.010+02:00</published><updated>2008-12-11T01:18:37.935+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RIA'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>Google Trends of XAML and MXML</title><content type='html'>Despite the huge momentum Adobe Flex have gained the last year or so, its clear that XAML still have more momentum overall, according to &lt;a href="http://www.google.com/trends"&gt;Google Trends&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;XAML is the markup language from Microsoft to create RIA's and one of the cornerstones in Silverlight, MS's "new" primary RIA platform. MXML is the markup language used in Adobe Flex, Adobe's primary RIA platform and has been around for quite a shorter time than XAML.&lt;br /&gt;&lt;br /&gt;Here is a direct link to the comparison I did:&lt;br /&gt;&lt;a href="http://www.google.com/trends?q=xaml%2Cmxml"&gt;http://www.google.com/trends?q=xaml%2Cmxml&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_GJH4IvKJKGM/SHSiRB4US_I/AAAAAAAAAFQ/rIIwjT1370E/s1600-h/GoogleTrends.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_GJH4IvKJKGM/SHSiRB4US_I/AAAAAAAAAFQ/rIIwjT1370E/s400/GoogleTrends.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5220976281475369970" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_GJH4IvKJKGM/SHSiY_ypmDI/AAAAAAAAAFY/brIYa_3VBWs/s1600-h/GoogleTrends2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_GJH4IvKJKGM/SHSiY_ypmDI/AAAAAAAAAFY/brIYa_3VBWs/s400/GoogleTrends2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5220976418353682482" /&gt;&lt;/a&gt;&lt;br /&gt;An interesting observation is related to the geographical distribution of the searches, seeing that India is top-ranking in regards to Country, however in regards to City its Redmond, VA (The home of Microsoft).&lt;br /&gt;&lt;br /&gt;Another interesting point is that Denmark and Danish is at the time of this comparison (it's off course subject to change, partly due to the dynamics of the Google indexing system based on statistically enhanced numbers and off course due to the fact that the numbers eventually do change over the course of time) ranked 10 and 6 respectively, positioning the Danish RIA community high on the international rank.&lt;br /&gt;Combine this with the positions of our brothering countries, Sweden and Norway, Scandinavia is definitely in the super-liga of RIA regions.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_GJH4IvKJKGM/SHSi_ZvyIgI/AAAAAAAAAFg/UiieqajH584/s1600-h/GoogleTrends3.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_GJH4IvKJKGM/SHSi_ZvyIgI/AAAAAAAAAFg/UiieqajH584/s400/GoogleTrends3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5220977078156009986" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-84983290779388803?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/84983290779388803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=84983290779388803' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/84983290779388803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/84983290779388803'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/google-trends-of-xaml-and-mxml.html' title='Google Trends of XAML and MXML'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_GJH4IvKJKGM/SHSiRB4US_I/AAAAAAAAAFQ/rIIwjT1370E/s72-c/GoogleTrends.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-4144420857577568269</id><published>2008-07-09T00:31:00.003+02:00</published><updated>2008-07-20T18:11:23.832+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SEO'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>A Flex SEO contest (by Ryan Stewart)</title><content type='html'>Mr. Ryan Stewart has announced a Flex SEO contest to get people involved in helping the Flex SEO possibilities evolve into a set of techniques and likely some practices as well.&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://blog.digitalbackcountry.com/?p=1478"&gt;http://blog.digitalbackcountry.com/?p=1478&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-4144420857577568269?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/4144420857577568269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=4144420857577568269' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4144420857577568269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4144420857577568269'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/flex-seo-contest-by-ryan-stewart.html' title='A Flex SEO contest (by Ryan Stewart)'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-5542735574158938231</id><published>2008-07-08T21:28:00.011+02:00</published><updated>2008-07-20T18:11:36.890+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Undocumentation'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>Adobe Flex : The Undocumented StaticEventDispatcher</title><content type='html'>There is an undocumented feature of the Flex Compiler which can come in quite handy.&lt;br /&gt;&lt;br /&gt;If you have wanted to listen for changes to static variables, there is an undocumented static variable called "staticEventDispatcher" on classes that have one or more static variables prior to compilation.&lt;br /&gt;The way it works is that as part of compiler pre-processing, the Flex compiler adds a static EventDispatcher object to the class, which eventually can be used to listen for PropertyChangeEvents on the class-reference itself.&lt;br /&gt;&lt;br /&gt;If the class does not have a static variable at compiler preprocessing time, the staticEventDispatcher is not added. Despite the i-logic of the fact that a public static property (getter/setter functions) does NOT result in the pre-processor adding the staticEventDispatcher reference it can off course be worked around by adding a variable which references the function in which you have not broken the "contract" of the class, but still have "triggered" the Flex compiler to add your staticEventDispatcher.&lt;br /&gt;&lt;br /&gt;The code below is just exploratory-code, and should off course NOT be used anywhere, it just proves the point about the discrepancy about static properties and variables.&lt;br /&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;static&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;var&lt;/span&gt; getSomethingFunction &lt;span style="color: #666666"&gt;:&lt;/span&gt; &lt;span style="color: #008000"&gt;Function&lt;/span&gt; &lt;span style="color: #666666"&gt;=&lt;/span&gt; something as &lt;span style="color: #008000"&gt;Function&lt;/span&gt;&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;static&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; get something() &lt;span style="color: #666666"&gt;:&lt;/span&gt; &lt;span style="color: #008000"&gt;String&lt;/span&gt; { &lt;span style="color: #008000; font-weight: bold"&gt;return&lt;/span&gt; &lt;span style="color: #BA2121"&gt;&amp;quot;Hello World&amp;quot;&lt;/span&gt;&lt;span style="color: #666666"&gt;;&lt;/span&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;This feature of the Flex compiler is very closely related to an undocumented class in the Flex framework, its the StaticPropertyWatcher which extends its more wellknown cousin, the Watcher class in the same mx.binding.* namespace.&lt;br /&gt;Seeing that the StaticPropertyWatcher actually uses the staticEventDispatcher mechanism of the Flex compiler, and seeing that the ordinary Watcher class uses the StaticPropertyWatcher there is no reason not to use this feature.&lt;br /&gt;&lt;br /&gt;However, an important point is that in order to ensure forward-compatibility I recommend that you use the staticEventDispatcher in a more type-strict fashion then the StaticPropertyWatcher implementation.&lt;br /&gt;&lt;br /&gt;The following excerpt is taken from the StaticPropertyWatcher, and as you can see - they reference it through the class-index and not directly. By doing this you don't allow the compiler to capture classes attempting to use the static EventDispatcher reference without having a static variable resulting in runtime errors in situations where you don't check for it's existance prior to use.&lt;br /&gt;&lt;div class="highlight"&gt;&lt;pre&gt;        parentObj &lt;span style="color: #666666"&gt;=&lt;/span&gt; Class(parent);&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #008000; font-weight: bold"&gt;if&lt;/span&gt; (parentObj[&lt;span style="color: #BA2121"&gt;&amp;quot;staticEventDispatcher&amp;quot;&lt;/span&gt;] &lt;span style="color: #666666"&gt;!=&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;null&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #008000; font-weight: bold"&gt;for&lt;/span&gt; (&lt;span style="color: #008000; font-weight: bold"&gt;var&lt;/span&gt; eventType&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #008000"&gt;String&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;in&lt;/span&gt; events)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #008000; font-weight: bold"&gt;if&lt;/span&gt; (eventType &lt;span style="color: #666666"&gt;!=&lt;/span&gt; &lt;span style="color: #BA2121"&gt;&amp;quot;__NoChangeEvent__&amp;quot;&lt;/span&gt;)&lt;br /&gt;                {&lt;br /&gt;                    &lt;span style="color: #008000; font-weight: bold"&gt;var&lt;/span&gt; eventDispatcher&lt;span style="color: #666666"&gt;:&lt;/span&gt;IEventDispatcher &lt;span style="color: #666666"&gt;=&lt;/span&gt; parentObj[&lt;span style="color: #BA2121"&gt;&amp;quot;staticEventDispatcher&amp;quot;&lt;/span&gt;];&lt;br /&gt;&lt;br /&gt;                    eventDispatcher.addEventListener(eventType&lt;span style="color: #666666"&gt;,&lt;/span&gt; eventHandler&lt;span style="color: #666666"&gt;,&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;false&lt;/span&gt;&lt;span style="color: #666666"&gt;,&lt;/span&gt;&lt;br /&gt;                                                     EventPriority.BINDING&lt;span style="color: #666666"&gt;,&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;true&lt;/span&gt;);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In the above case its not possible to do a more type-strict notation seeing that its generic framework code, however in cases where the code is more business-logic-oriented the following notation would make a bit more sense for the compiler&lt;br /&gt;&lt;div class="highlight"&gt;&lt;pre&gt;parentObj.staticEventDispatcher.addEventListener( PropertyChangeEvent.PROPERTY_CHANGE&lt;span style="color: #666666"&gt;,&lt;/span&gt; onSomeobjectChange );&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;This is the preferred way and also a pretty cool way to listen for changes to static variables, despite the fact that its not documented.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-5542735574158938231?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/5542735574158938231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=5542735574158938231' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/5542735574158938231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/5542735574158938231'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/adobe-flex-undocumented-buildin.html' title='Adobe Flex : The Undocumented StaticEventDispatcher'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-820479182869494820</id><published>2008-07-01T15:50:00.001+02:00</published><updated>2008-07-01T15:53:53.825+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash Player'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash Platform'/><category scheme='http://www.blogger.com/atom/ns#' term='SEO'/><title type='text'>SWF now supports SEO !</title><content type='html'>Adobe has provided Flash Player technology to Google and Yahoo! that allows their search spiders to navigate through a live SWF application as if they were virtual users.&lt;br /&gt;&lt;br /&gt;Adobe is working with Google and Yahoo! to enable one of the largest fundamental improvements in web search results by making the Flash file format (SWF) a first-class citizen in searchable web content. This will increase the accuracy of web search results by enabling top search engines to understand what's inside of RIAs and other rich web content created with Adobe Flash technology and add that relevance back to the HTML page.&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://www.adobe.com/devnet/flashplayer/articles/swf_searchability.html"&gt;http://www.adobe.com/devnet/flashplayer/articles/swf_searchability.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-820479182869494820?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/820479182869494820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=820479182869494820' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/820479182869494820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/820479182869494820'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/07/swf-now-supports-seo.html' title='SWF now supports SEO !'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-7299627611511496745</id><published>2008-06-28T15:47:00.007+02:00</published><updated>2008-06-28T16:24:09.318+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>"Is it Flex ?" Online Service (by James Ward)</title><content type='html'>James Ward created an online service some time ago to test if a SWF is created with the Flex compiler.&lt;br /&gt;It can come on quite handy :-)&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://www.jamesward.com/is_it_flex/"&gt;http://www.jamesward.com/is_it_flex/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-7299627611511496745?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/7299627611511496745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=7299627611511496745' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7299627611511496745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7299627611511496745'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/is-it-flex.html' title='&quot;Is it Flex ?&quot; Online Service (by James Ward)'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-8094168196815926161</id><published>2008-06-27T14:09:00.003+02:00</published><updated>2008-06-27T14:15:05.868+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DFUG'/><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><title type='text'>DFUG meeting in Aarhus - Indian Summer Knowledge</title><content type='html'>On the 23rd of July DFUG has a summer meeting...&lt;br /&gt;&lt;br /&gt;Be there or be a { someComponent.graphics.drawRect( 0, 0, 50, 50 ) }...&lt;br /&gt;&lt;a href="http://flashforum.dk/events/dfug-mode-i-arhus-indian-summer-knowledge"&gt;http://flashforum.dk/events/dfug-mode-i-arhus-indian-summer-knowledge&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-8094168196815926161?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/8094168196815926161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=8094168196815926161' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/8094168196815926161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/8094168196815926161'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/indian-summer-dfug.html' title='DFUG meeting in Aarhus - Indian Summer Knowledge'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-7352856747365273682</id><published>2008-06-25T21:02:00.005+02:00</published><updated>2008-07-20T18:00:12.614+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Remembering the pre-AJAX days ?</title><content type='html'>Back in the early days of AJAX development, before the name was even cornered around 2004... there were many ways to obtain the AJAX-like effects of todays omnipresent XMLHTTP implementations.&lt;br /&gt;&lt;br /&gt;One I found particularly nice was the "Webservice.htc" HTML-component which mimicked todays Webservice-proxies.&lt;br /&gt;&lt;br /&gt;One of the guys on my team asked me a question leading me to look it up, and to me great amusement it was still available for download right there on Microsoft's website.&lt;br /&gt;&lt;br /&gt;Check it out in case you never had the chance to work with it, and if you have worked with it... pay it a visit and remember the "fun" times we had doing AJAX-like effects before it even had a name.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms531034(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms531034(VS.85).aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-7352856747365273682?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/7352856747365273682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=7352856747365273682' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7352856747365273682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7352856747365273682'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/remembering-pre-ajax-days.html' title='Remembering the pre-AJAX days ?'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-5857046071391905597</id><published>2008-06-23T18:26:00.002+02:00</published><updated>2008-12-11T01:18:38.134+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Data Visualization'/><category scheme='http://www.blogger.com/atom/ns#' term='PV3D'/><title type='text'>3D Charts Using PaperVision3D (by Andrew Trice)</title><content type='html'>Andrew Trice has created a simple yet very expressive example of how to use Papervision 3D to display data i multiple dimensions...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_GJH4IvKJKGM/SF_Q7wZM_gI/AAAAAAAAAE0/CNLrLxeHdzk/s1600-h/Clipboard01.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_GJH4IvKJKGM/SF_Q7wZM_gI/AAAAAAAAAE0/CNLrLxeHdzk/s400/Clipboard01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5215116618539793922" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://www.insideria.com/2008/06/3d-charts-using-papervision3d.html"&gt;http://www.insideria.com/2008/06/3d-charts-using-papervision3d.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-5857046071391905597?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/5857046071391905597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=5857046071391905597' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/5857046071391905597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/5857046071391905597'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/3d-charts-using-papervision3d-by-andrew.html' title='3D Charts Using PaperVision3D (by Andrew Trice)'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_GJH4IvKJKGM/SF_Q7wZM_gI/AAAAAAAAAE0/CNLrLxeHdzk/s72-c/Clipboard01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-253978957983059275</id><published>2008-06-21T17:34:00.001+02:00</published><updated>2008-07-20T18:23:05.799+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Workaholics United'/><title type='text'>Workaholics United : The Two Minute Rule</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;According to the Two Minute Rule, if an action takes less than two minutes, you should do it right then, even if it’s a low-priority item. Otherwise it would take more time to write it on a list and review it later. The converse of the rule is that if an action takes longer than two minutes, you should write it down to avoid getting lured into an activity whose priority hasn’t been evaluated against other tasks on your list.&lt;br /&gt;&lt;br /&gt;That’s good advice if understood in context. When you’re batch processing an in-basket, the best way to avoid getting derailed is by adhering to the guideline that each item should take no longer than two minutes. So if you have 40 items in your intray, it should theoretically take a maximum of 80 minutes to process it to zero. In practice, it should take far less, since many items will be filed or discarded more or less instantly.&lt;br /&gt;&lt;br /&gt;But there are times when the two-minute interval should be lenthened, shortened or dispensed with altogether. When I’m doing a weekly review, even doing two-minute actions can pull my attention away from a more appropriate project-level focus. So I write them down with checkmarks denoting them as action items to do immediately after the review.&lt;br /&gt;&lt;br /&gt;If the action takes longer than two minutes, and you’re not in processing mode, then it might be more efficient to handle the item in the moment, especially you’re reasonably sure that it will only take a few minutes. If you’re not sure that something else might take precedence, don’t hesitate to review your calendar and action lists.&lt;br /&gt;&lt;br /&gt;But the main point is that if there’s something that you need to get done, challenge yourself to see if there’s anything you can do this very moment to carry it forward. What can you do right now?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-253978957983059275?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/253978957983059275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=253978957983059275' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/253978957983059275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/253978957983059275'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/workaholics-united-two-minute-rule.html' title='Workaholics United : The Two Minute Rule'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-6200640426703385184</id><published>2008-06-21T15:49:00.003+02:00</published><updated>2008-06-21T15:55:25.922+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><title type='text'>Synergy working with Microsoft Windows Vista</title><content type='html'>There has been a lot of discussion about getting the 2 year old release of Synergy, which at the moment is the latest release, to work on Vista OS. The very old release could be indicating that there would likely be problems getting the darn thing to work with Windows "Trouplemaker" Vista. &lt;br /&gt;However, due to the low-tech techniques used by Synergy (TCP over IP) there are no problems if you run the Synergy process with local administrator privileges.&lt;br /&gt;&lt;br /&gt;This is good news, because at current Synergy is still the only one to support all platforms (Some setup issues with Leopard which are solvable).&lt;br /&gt;&lt;br /&gt;However, despite the latest release being from 2006, it appears that the lead-dev behind the application is planning a new release during 2008.&lt;br /&gt;&lt;br /&gt;Check it out if you are interested in a Software based KVM switch which works with any machine supporting TCP over IP.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://synergy2.sourceforge.net/"&gt;http://synergy2.sourceforge.net/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-6200640426703385184?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/6200640426703385184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=6200640426703385184' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6200640426703385184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6200640426703385184'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/synergy-working-with-microsoft-windows.html' title='Synergy working with Microsoft Windows Vista'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-462235791142659245</id><published>2008-06-21T12:25:00.003+02:00</published><updated>2008-06-21T12:34:21.120+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PureMVC'/><title type='text'>PureMVC : Lazily Instantiated Components</title><content type='html'>One small caveat when working with PureMVC  - If your View object is defined at design time, but not created at application startup you’ll need to defer the&lt;br /&gt;&lt;br /&gt;facade.registerMediator( )&lt;br /&gt;&lt;br /&gt;Joshua Ostrom wrote a nice little piece about this.&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://www.joshuaostrom.com/2008/06/06/puremvc-lazily-late-instantiated-components/"&gt;http://www.joshuaostrom.com/2008/06/06/puremvc-lazily-late-instantiated-components/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-462235791142659245?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/462235791142659245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=462235791142659245' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/462235791142659245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/462235791142659245'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/puremvc-lazily-instantiated-components.html' title='PureMVC : Lazily Instantiated Components'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-5796173017105222739</id><published>2008-06-20T16:50:00.003+02:00</published><updated>2008-07-20T18:12:24.886+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex SDK'/><title type='text'>Adobe Flex : Flex 3 Compiler Design Document</title><content type='html'>Now there is a design document available at the Adobe site... nice move :)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/Flex+3+Compiler+Design"&gt;http://opensource.adobe.com/wiki/display/flexsdk/Flex+3+Compiler+Design&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-5796173017105222739?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/5796173017105222739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=5796173017105222739' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/5796173017105222739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/5796173017105222739'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/adobe-flex-flex-3-compiler-design.html' title='Adobe Flex : Flex 3 Compiler Design Document'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-1154121581224089738</id><published>2008-06-20T13:03:00.006+02:00</published><updated>2008-07-20T18:05:39.604+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>Adobe Flex : Custom ToolTip Implementation Sample</title><content type='html'>Every sample out there illustrating ho to use custom ToolTips involve calling a method upon registering a ToolTip event... however, that requires you to add toolTip code to every item you want to have showing a custom tooltip.&lt;br /&gt;&lt;br /&gt;The preferred way to do it would be to set the ToolTipManager.toolTipClass property to point to your custom tooltip class.&lt;br /&gt;This way an instance of your own class is created in place of the default instance of the ToolTip class.&lt;br /&gt;&lt;br /&gt;Doing this requires you to Implement IToolTip and in order to get most of the logic done for you, its preferred that you inherit from UIComponent or one of its inheritants.&lt;br /&gt;&lt;br /&gt;In my previous post I have pointed out that there is a bug in the Adobe Flex ToolTipManager implementation, so doing it my way requires you to override commitProperties and set the text property yourself... however, its a small price to pay for getting the power of the ToolTipManager at your disposal instead of having to implement it all by yourself.&lt;br /&gt;&lt;br /&gt;I here illustrate a small mock implementation of an application using custom tooltips&lt;br /&gt;&lt;br /&gt;First we create a couple of custom toolTip classes, I call the CustomToolTip1 and CustomToolTip2&lt;br /&gt;&lt;br /&gt;&lt;div class="highlight"&gt;&lt;pre&gt;package&lt;br /&gt;{&lt;br /&gt; &lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; mx.containers.Panel&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; mx.controls.Label&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; mx.core.IToolTip&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; mx.managers.ToolTipManager&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;class&lt;/span&gt; CustomToolTip1 &lt;span style="color: #008000; font-weight: bold"&gt;extends&lt;/span&gt; Panel &lt;span style="color: #008000; font-weight: bold"&gt;implements&lt;/span&gt; IToolTip&lt;br /&gt; {&lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;private&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;var&lt;/span&gt; _label&lt;span style="color: #666666"&gt;:&lt;/span&gt;Label&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; CustomToolTip1()&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;super&lt;/span&gt;();&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  override protected &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; createChildren()&lt;span style="color: #666666"&gt;:&lt;/span&gt;void&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;super&lt;/span&gt;.createChildren();&lt;br /&gt;   &lt;br /&gt;   _label &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;new&lt;/span&gt; Label();&lt;br /&gt;   addChild( _label );    &lt;br /&gt;  }  &lt;br /&gt;&lt;br /&gt;  override protected &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; commitProperties()&lt;span style="color: #666666"&gt;:&lt;/span&gt;void&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;super&lt;/span&gt;.commitProperties();   &lt;br /&gt;   text &lt;span style="color: #666666"&gt;=&lt;/span&gt; ToolTipManager.currentTarget[ &lt;span style="color: #BA2121"&gt;&amp;quot;toolTip&amp;quot;&lt;/span&gt; ];&lt;br /&gt;  }  &lt;br /&gt;    &lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; get text() &lt;span style="color: #666666"&gt;:&lt;/span&gt; &lt;span style="color: #008000"&gt;String&lt;/span&gt;&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;return&lt;/span&gt; _label.text&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;  }&lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; set text( value&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #008000"&gt;String&lt;/span&gt; ) &lt;span style="color: #666666"&gt;:&lt;/span&gt; void&lt;br /&gt;  {&lt;br /&gt;   _label.text &lt;span style="color: #666666"&gt;=&lt;/span&gt; value&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="highlight"&gt;&lt;pre&gt;package&lt;br /&gt;{&lt;br /&gt; &lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; mx.containers.Canvas&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; mx.controls.Button&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; mx.core.IToolTip&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; mx.managers.ToolTipManager&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;class&lt;/span&gt; CustomToolTip2 &lt;span style="color: #008000; font-weight: bold"&gt;extends&lt;/span&gt; Canvas &lt;span style="color: #008000; font-weight: bold"&gt;implements&lt;/span&gt; IToolTip&lt;br /&gt; {&lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;private&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;var&lt;/span&gt; _button&lt;span style="color: #666666"&gt;:&lt;/span&gt;Button&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; CustomToolTip2()&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;super&lt;/span&gt;();&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  override protected &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; createChildren()&lt;span style="color: #666666"&gt;:&lt;/span&gt;void&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;super&lt;/span&gt;.createChildren();&lt;br /&gt;   &lt;br /&gt;   _button &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;new&lt;/span&gt; Button();&lt;br /&gt;   addChild( _button );    &lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  override protected &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; commitProperties()&lt;span style="color: #666666"&gt;:&lt;/span&gt;void&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;super&lt;/span&gt;.commitProperties();   &lt;br /&gt;   text &lt;span style="color: #666666"&gt;=&lt;/span&gt; ToolTipManager.currentTarget[ &lt;span style="color: #BA2121"&gt;&amp;quot;toolTip&amp;quot;&lt;/span&gt; ];&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; get text() &lt;span style="color: #666666"&gt;:&lt;/span&gt; &lt;span style="color: #008000"&gt;String&lt;/span&gt;&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;return&lt;/span&gt; _button.label&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;  }&lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; set text( value&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #008000"&gt;String&lt;/span&gt; ) &lt;span style="color: #666666"&gt;:&lt;/span&gt; void&lt;br /&gt;  {&lt;br /&gt;   _button.label &lt;span style="color: #666666"&gt;=&lt;/span&gt; value&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;  }    &lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Then finally we create an application which facilitates setting the toolTipClass of the ToolTipManager&lt;br /&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span style="color: #666666"&gt;&amp;lt;?&lt;/span&gt;xml version&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt; encoding&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;utf-8&amp;quot;&lt;/span&gt;&lt;span style="color: #666666"&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;Application&lt;br /&gt; xmlns&lt;span style="color: #666666"&gt;:&lt;/span&gt;mx&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;http://www.adobe.com/2006/mxml&amp;quot;&lt;/span&gt;&lt;br /&gt; layout&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;horizontal&amp;quot;&lt;/span&gt;&lt;span style="color: #666666"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;Button id&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;button&amp;quot;&lt;/span&gt; label&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;Hello World&amp;quot;&lt;/span&gt; toolTip&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;{button.label}&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;ComboBox id&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;stateChanger&amp;quot;&lt;/span&gt; dataProvider&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;{states}&amp;quot;&lt;/span&gt; labelField&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;name&amp;quot;&lt;/span&gt; change&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;stateChanger_Change(event)&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;Script&lt;span style="color: #666666"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #666666"&gt;&amp;lt;!&lt;/span&gt;[CDATA[&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; mx.controls.ToolTip&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; mx.managers.ToolTipManager&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; mx.events.FlexEvent&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;private&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; stateChanger_Change( event&lt;span style="color: #666666"&gt;:&lt;/span&gt;Event ) &lt;span style="color: #666666"&gt;:&lt;/span&gt; void&lt;br /&gt;   {&lt;br /&gt;    currentState &lt;span style="color: #666666"&gt;=&lt;/span&gt; stateChanger.selectedItem[ &lt;span style="color: #BA2121"&gt;&amp;quot;name&amp;quot;&lt;/span&gt; ];&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;  ]]&lt;span style="color: #666666"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #666666"&gt;&amp;lt;/&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;Script&lt;span style="color: #666666"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;states&lt;span style="color: #666666"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;State name&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;NORMAL&amp;quot;&lt;/span&gt;&lt;span style="color: #666666"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;SetProperty target&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;{ToolTipManager}&amp;quot;&lt;/span&gt; name&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;toolTipClass&amp;quot;&lt;/span&gt; value&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;{ToolTip}&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #666666"&gt;&amp;lt;/&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;State&lt;span style="color: #666666"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;State name&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;CUSTOM_1&amp;quot;&lt;/span&gt;&lt;span style="color: #666666"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;SetProperty target&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;{ToolTipManager}&amp;quot;&lt;/span&gt; name&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;toolTipClass&amp;quot;&lt;/span&gt; value&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;{CustomToolTip1}&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #666666"&gt;&amp;lt;/&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;State&lt;span style="color: #666666"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;State name&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;CUSTOM_2&amp;quot;&lt;/span&gt;&lt;span style="color: #666666"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;SetProperty target&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;{ToolTipManager}&amp;quot;&lt;/span&gt; name&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;toolTipClass&amp;quot;&lt;/span&gt; value&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;{CustomToolTip2}&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: #666666"&gt;&amp;lt;/&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;State&lt;span style="color: #666666"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #666666"&gt;&amp;lt;/&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;states&lt;span style="color: #666666"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="color: #666666"&gt;&amp;lt;/&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;Application&lt;span style="color: #666666"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-1154121581224089738?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/1154121581224089738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=1154121581224089738' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/1154121581224089738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/1154121581224089738'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/adobe-flex-custom-tooltip.html' title='Adobe Flex : Custom ToolTip Implementation Sample'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-6923645201361975191</id><published>2008-06-20T11:45:00.018+02:00</published><updated>2008-07-20T18:11:48.437+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Bug Report'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>Adobe Flex : There is a bug in the Adobe Flex Framework ToolTipManager Implementation</title><content type='html'>I have registered it with the Adobe Flex Team.&lt;br /&gt;&lt;a href="https://bugs.adobe.com/jira/browse/SDK-15863"&gt;https://bugs.adobe.com/jira/browse/SDK-15863&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;When using a CustomToolTip set via the ToolTipmanager.toolTipClass property, "text" is never invoked.&lt;br /&gt;Its easily solved however, it just requires you to override commitProperties and set the text yourself.&lt;br /&gt;&lt;br /&gt;&lt;div class="highlight"&gt;&lt;pre&gt;  override protected &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; commitProperties()&lt;span style="color: #666666"&gt;:&lt;/span&gt;void&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;super&lt;/span&gt;.commitProperties();   &lt;br /&gt;   text &lt;span style="color: #666666"&gt;=&lt;/span&gt; ToolTipManager.currentTarget[ &lt;span style="color: #BA2121"&gt;&amp;quot;toolTip&amp;quot;&lt;/span&gt; ];&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;And here is a complete implementation of a custom tooltip.&lt;br /&gt;&lt;br /&gt;&lt;div class="highlight"&gt;&lt;pre&gt;package&lt;br /&gt;{&lt;br /&gt; &lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; mx.containers.Canvas&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; mx.controls.Button&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; mx.core.IToolTip&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; mx.managers.ToolTipManager&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;class&lt;/span&gt; CustomToolTip &lt;span style="color: #008000; font-weight: bold"&gt;extends&lt;/span&gt; Canvas &lt;span style="color: #008000; font-weight: bold"&gt;implements&lt;/span&gt; IToolTip&lt;br /&gt; {&lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;private&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;var&lt;/span&gt; _button&lt;span style="color: #666666"&gt;:&lt;/span&gt;Button&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; CustomToolTip()&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;super&lt;/span&gt;();&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  override protected &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; createChildren()&lt;span style="color: #666666"&gt;:&lt;/span&gt;void&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;super&lt;/span&gt;.createChildren();   &lt;br /&gt;   _button &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;new&lt;/span&gt; Button();&lt;br /&gt;   addChild( _button );    &lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  override protected &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; commitProperties()&lt;span style="color: #666666"&gt;:&lt;/span&gt;void&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;super&lt;/span&gt;.commitProperties();&lt;br /&gt;   text &lt;span style="color: #666666"&gt;=&lt;/span&gt; ToolTipManager.currentTarget[ &lt;span style="color: #BA2121"&gt;&amp;quot;toolTip&amp;quot;&lt;/span&gt; ];&lt;br /&gt;  }  &lt;br /&gt;&lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; get text() &lt;span style="color: #666666"&gt;:&lt;/span&gt; &lt;span style="color: #008000"&gt;String&lt;/span&gt;&lt;br /&gt;  {&lt;br /&gt;   &lt;span style="color: #008000; font-weight: bold"&gt;return&lt;/span&gt; _button.label&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;  }&lt;br /&gt;  &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;function&lt;/span&gt; set text( value&lt;span style="color: #666666"&gt;:&lt;/span&gt;&lt;span style="color: #008000"&gt;String&lt;/span&gt; ) &lt;span style="color: #666666"&gt;:&lt;/span&gt; void&lt;br /&gt;  {&lt;br /&gt;   _button.label &lt;span style="color: #666666"&gt;=&lt;/span&gt; value&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt;  }    &lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I suppose you can also workaround it by changing the ToolTipManagerImpl class, but I prefer not to change the framework sourcecode for so many reasons that its beyond the scope of this post.&lt;br /&gt;&lt;br /&gt;Also, I really dislike every sample out there illustrating how to implement custom tooltips, as they all involve calling a method on a toolTip event and hence requires you to use your custom ToolTip logic everywhere in your system instead of using the framework.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-6923645201361975191?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/6923645201361975191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=6923645201361975191' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6923645201361975191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6923645201361975191'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/flex-there-is-bug-in-tooltipmanager.html' title='Adobe Flex : There is a bug in the Adobe Flex Framework ToolTipManager Implementation'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-2689554878256849565</id><published>2008-06-18T21:21:00.009+02:00</published><updated>2008-07-20T18:12:09.428+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex SDK'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>Adobe Flex Resources Tool Suite</title><content type='html'>I plan to implement a small set of tools to facilitate handling of resource files in Adobe Flex.&lt;br /&gt;&lt;br /&gt;I will address the following objectives:&lt;br /&gt;&lt;br /&gt;1. objective&lt;br /&gt;It must allow editorial staff to update and manage resources.&lt;br /&gt;* Client should be implemented in AIR / Flex.&lt;br /&gt;* Server should be implemented in .NET&lt;br /&gt;&lt;br /&gt;2. objective&lt;br /&gt;It must allow editorial staff to compile resources to their final output.&lt;br /&gt;* Should use the Flex SDK compilers based on Java.&lt;br /&gt;&lt;br /&gt;3. objective&lt;br /&gt;It must allow editorial staff to deploy updated resources.&lt;br /&gt;* Should be possible to do 24/7 without causing downtime.&lt;br /&gt;&lt;br /&gt;4. objective&lt;br /&gt;It could facilitate that editorial and technical staff can work in parallel, respectively translating and updating resources to their initial values by the editorial staff and creating the points in the application where each resource will be used by the technical staff.&lt;br /&gt;* Points still needs to be determined.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-2689554878256849565?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/2689554878256849565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=2689554878256849565' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/2689554878256849565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/2689554878256849565'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/adobe-flex-resources-tool-suite.html' title='Adobe Flex Resources Tool Suite'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-235531529240216350</id><published>2008-06-18T21:11:00.011+02:00</published><updated>2008-07-20T18:00:29.481+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HelloGroup'/><title type='text'>HelloGroup is proud to announce their new website !?</title><content type='html'>HelloGroup has today launched their new long awaited new website !&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.hellogroup.com"&gt;http://www.hellogroup.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The site proves to show that we are so busy servicing our esteemed clients and building some of the best and innovative websites for them, that we don't have time to create our own website.&lt;br /&gt;&lt;br /&gt;Anyways, there is really not that much more I can say about that.&lt;br /&gt;...except that the videos are fun to watch for us the employees seeing that we are in them.&lt;br /&gt;&lt;br /&gt;However, I'm not sure who to compare us with based on the web-experience we give our customers, potential customers and the occasional spurious visitor... not to mention potential employees who, if they are any good, would want to work for the best of breed among media-houses in Scandinavia.&lt;br /&gt;&lt;br /&gt;Why based on Wordpress, why that boring graphical design, why all the strange colors and quite poor lighting on the videos, why videos hosted at youtube, why the outdated functionality, why the many violations of every gestalt rule in the book... why ohhh why...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-235531529240216350?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/235531529240216350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=235531529240216350' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/235531529240216350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/235531529240216350'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/hellogroup-is-proud-to-announce-their.html' title='HelloGroup is proud to announce their new website !?'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-4049748383981842362</id><published>2008-06-18T20:07:00.004+02:00</published><updated>2008-12-11T01:18:38.391+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Xoopit turns your Gmail into a multimedia heaven</title><content type='html'>Firefox extension Xoopit turns Gmail into a robust, searchable media management tool for every piece of media that comes through your inbox. By indexing every attachment as well as every link to photos and videos from sites like Flickr, Picasa and YouTube, Xoopit allows you to easily search for and find any picture or video and view it from directly inside Gmail.&lt;br /&gt;&lt;br /&gt;Imagine this: You're looking for a YouTube video that you were sent a link to recently, but you really don't know where to begin your search. With Xoopit installed, you can just click the Videos tab and you'll see this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_GJH4IvKJKGM/SFldY8GV09I/AAAAAAAAAEs/ja1LcHyinXY/s1600-h/xoopit-videos.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_GJH4IvKJKGM/SFldY8GV09I/AAAAAAAAAEs/ja1LcHyinXY/s400/xoopit-videos.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5213300726689027026" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://www.xoopit.com/"&gt;http://www.xoopit.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-4049748383981842362?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/4049748383981842362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=4049748383981842362' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4049748383981842362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4049748383981842362'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/xoopit-turns-your-gmail-multimedia.html' title='Xoopit turns your Gmail into a multimedia heaven'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_GJH4IvKJKGM/SFldY8GV09I/AAAAAAAAAEs/ja1LcHyinXY/s72-c/xoopit-videos.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-5376250997793716466</id><published>2008-06-18T18:02:00.005+02:00</published><updated>2008-12-11T01:18:38.862+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Google Social Graph API</title><content type='html'>The public web is made up of linked pages that represent both documents and people.&lt;br /&gt;&lt;br /&gt;Google Search helps make this information more accessible and useful. If you take away the documents, you're left with the connections between people.&lt;br /&gt;&lt;br /&gt;Information about the public connections between people is really useful -- as a user, you might want to see who else you're connected to, and as a developer of social applications, you can provide better features for your users if you know who their public friends are.&lt;br /&gt;&lt;br /&gt;For long there hasn't been a good way to access this information, however now &lt;a href="http://code.google.com/apis/socialgraph/"&gt;The Social Graph API&lt;/a&gt; makes information about the public connections between people on the Web, expressed by XFN and FOAF markup and other publicly declared connections, easily available and useful for developers.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_GJH4IvKJKGM/SFkyDsYOIAI/AAAAAAAAAD0/t0hr7e3PlvE/s1600-h/the-web.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_GJH4IvKJKGM/SFkyDsYOIAI/AAAAAAAAAD0/t0hr7e3PlvE/s400/the-web.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5213253082691805186" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;How does the Social Graph API find these connections ?&lt;br /&gt;The Social Graph API looks for two types of publicly declared connections:&lt;br /&gt;&lt;br /&gt;   1. It looks for all public URLs that belong to you and are interconnected. This could be your blog (a1), your LiveJournal page (a2), and your Twitter account (a3).&lt;br /&gt;   2. It looks for publicly declared connections between people. For example, a1 may link to b's blog while a1 and c link to each other.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_GJH4IvKJKGM/SFkyPRySNcI/AAAAAAAAAD8/uuRZgDRPlwA/s1600-h/connections.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_GJH4IvKJKGM/SFkyPRySNcI/AAAAAAAAAD8/uuRZgDRPlwA/s400/connections.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5213253281711797698" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-5376250997793716466?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/5376250997793716466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=5376250997793716466' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/5376250997793716466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/5376250997793716466'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/google-social-graph-api.html' title='Google Social Graph API'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_GJH4IvKJKGM/SFkyDsYOIAI/AAAAAAAAAD0/t0hr7e3PlvE/s72-c/the-web.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-4149278693288029235</id><published>2008-06-18T17:51:00.003+02:00</published><updated>2008-07-20T17:58:58.913+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>dotNet : Other New Technologies</title><content type='html'>There were two CTP releases recently of technology that don't directly focus on web services but you might find that they make developing services easier.&lt;br /&gt;&lt;br /&gt;The first technology is called Velocity. Velocity is a platform for building distributed caches to make it easier to develop highly-scalable applications. There are some included samples for using Velocity with ASP.NET applications but you can reuse the platform in a variety of ways.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=B24C3708-EEFF-4055-A867-19B5851E7CD2&amp;displaylang=en"&gt;Microsoft Project Code Named "Velocity" Community Technology Preview 1 (CTP1)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The second technology is called Task Parallel Library and PLINQ. There are a set of parallel extensions for writing query and iteration expressions that automatically take advantage of the data and task parallelism present in high-level programming constructs.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=348F73FD-593D-4B3C-B055-694C50D2B0F3&amp;displaylang=en"&gt;Microsoft Parallel Extensions to .NET Framework 3.5, June 2008 Community Technology Preview&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can get several videos about these parallel extensions on Channel 9 as well.&lt;br /&gt;* &lt;a href="http://channel9.msdn.com/shows/Going+Deep/Joe-Duffy-and-Igor-Ostrovsky-Parallel-LINQ-under-the-hood/"&gt;Joe Duffy and Igor Ostrovsky: Parallel LINQ under the hood&lt;/a&gt;&lt;br /&gt;* &lt;a href="http://channel9.msdn.com/shows/Going+Deep/Joe-Duffy-Huseyin-Yildiz-Daan-Leijen-Stephen-Toub-Parallel-Extensions-Inside-the-Task-Parallel/"&gt;Joe Duffy, Huseyin Yildiz, Daan Leijen, Stephen Toub - Parallel Extensions: Inside the Task Parallel&lt;/a&gt;&lt;br /&gt;* &lt;a href="http://channel9.msdn.com/shows/Going+Deep/Inside-Parallel-Extensions-for-NET-2008-CTP-Part-1/"&gt;Inside Parallel Extensions for .NET 2008 CTP Part 1&lt;/a&gt;&lt;br /&gt;* &lt;a href="http://channel9.msdn.com/shows/Going+Deep/Inside-Parallel-Extensions-for-NET-2008-CTP-Part-2/"&gt;Inside Parallel Extensions for .NET 2008 CTP Part 2&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-4149278693288029235?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/4149278693288029235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=4149278693288029235' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4149278693288029235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4149278693288029235'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/dotnet-other-new-technologies.html' title='dotNet : Other New Technologies'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-6326449451952719612</id><published>2008-06-17T19:45:00.007+02:00</published><updated>2008-06-17T19:51:54.563+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='State Machines'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Workflow Foundation'/><title type='text'>StateMachines : Implementation of WF in AS3</title><content type='html'>I have now successfully ported a minimal subset of the Windows Workflow Foundation to AS3. Initially I have created Sequential and StateMachine Workflows with just a set of non-nestable Activities.&lt;br /&gt;&lt;br /&gt;Next point of focus is on implementing a set of sample applications which will illustrate the power of having an event-driven application based on StateMachines as well as a number of Applications illustrating how easy keeping a complex set of activities in strictly sequence using the SequentialWorkflow.&lt;br /&gt;&lt;br /&gt;Another important aspect right now is to get the WorkflowRuntime just right as it right now pretty much only works as a Workflow factory.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-6326449451952719612?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/6326449451952719612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=6326449451952719612' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6326449451952719612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6326449451952719612'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/statemachines-implementation-in-as3.html' title='StateMachines : Implementation of WF in AS3'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-8937074552258653116</id><published>2008-06-17T19:36:00.003+02:00</published><updated>2008-12-11T01:18:39.042+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Performance Optimization'/><title type='text'>MyHome Benchmarks with YSlow</title><content type='html'>YSlow analyzes web pages and tells you why they're slow based on the rules for high performance web sites. YSlow is a Firefox add-on integrated with the Firebug web development tool and as such is very easy to handle.&lt;br /&gt;&lt;br /&gt;I have created a small benchmark test with MyHome against HelloGroup's and Elsparefonden's public websites.&lt;br /&gt;&lt;br /&gt;Obviously we still have some optimization to do, but its also obvious that we are not that far from reaching an acceptable minimum for the initial load sequence.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_GJH4IvKJKGM/SFf2_G66yVI/AAAAAAAAADs/6ZE740ZZBLE/s1600-h/MinBolig+Benchmarks+YSlow.PNG"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_GJH4IvKJKGM/SFf2_G66yVI/AAAAAAAAADs/6ZE740ZZBLE/s400/MinBolig+Benchmarks+YSlow.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5212906657754564946" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Checkout YSlow here...&lt;br /&gt;&lt;a href="http://developer.yahoo.com/yslow/"&gt;http://developer.yahoo.com/yslow/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-8937074552258653116?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/8937074552258653116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=8937074552258653116' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/8937074552258653116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/8937074552258653116'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/myhome-benchmarks-with-yslow.html' title='MyHome Benchmarks with YSlow'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_GJH4IvKJKGM/SFf2_G66yVI/AAAAAAAAADs/6ZE740ZZBLE/s72-c/MinBolig+Benchmarks+YSlow.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-4569558429755207925</id><published>2008-06-17T19:29:00.004+02:00</published><updated>2008-07-20T18:12:34.491+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex SDK'/><title type='text'>Configuring Flex Builder to use the HellFire compiler</title><content type='html'>Clement Wong has created an excellent post on how to do RPC compilation of Flex Applications, Modules and Libraries.&lt;br /&gt;&lt;br /&gt;The results he has been able to obtain are very thought-invoking and definitely something I will give a shot the first time I get 5 minutes to spare...&lt;br /&gt;&lt;br /&gt;Check it out for yourself...&lt;br /&gt;&lt;a href="http://stopcoding.wordpress.com/2008/06/17/hellfire_compiler/"&gt;http://stopcoding.wordpress.com/2008/06/17/hellfire_compiler/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-4569558429755207925?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/4569558429755207925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=4569558429755207925' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4569558429755207925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4569558429755207925'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/configuring-flex-builder-to-use.html' title='Configuring Flex Builder to use the HellFire compiler'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-2842660461852715772</id><published>2008-06-17T19:02:00.004+02:00</published><updated>2008-07-20T18:01:07.505+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adobe AIR'/><title type='text'>AIR 1.1 : Now with Localization !</title><content type='html'>For us Danish developers, localization is always a major concern... so the fact that Adobe AIR 1.1 is out now with support for localization just made the platform more interesting...&lt;br /&gt;&lt;br /&gt;Adobe AIR 1.1 is a small release that adds international support to AIR applications. In the future, the Flex team will release official updates to both the Flex SDK and Flex Builder that include the latest version of AIR. However, this particular release is happening off of the Flex release cycle so there some inconveniences involved when installing it.&lt;br /&gt;&lt;br /&gt;You can read more about it here in Matt Chotin's short article clearing this up...&lt;br /&gt;&lt;a href="http://www.adobe.com/devnet/flex/articles/flex_air1.1.html"&gt;http://www.adobe.com/devnet/flex/articles/flex_air1.1.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And you can download it here...&lt;br /&gt;&lt;a href="http://get.adobe.com/air/"&gt;http://get.adobe.com/air/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-2842660461852715772?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/2842660461852715772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=2842660461852715772' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/2842660461852715772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/2842660461852715772'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/air-11-now-with-localization.html' title='AIR 1.1 : Now with Localization !'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-8884770346113310123</id><published>2008-06-17T13:24:00.002+02:00</published><updated>2008-06-17T13:28:02.721+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><category scheme='http://www.blogger.com/atom/ns#' term='Arbitrary Thoughts'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Google Browser Sync Discontinued in FF 3</title><content type='html'>If you are as sad as I am that Google have decided to discontinue further development of the Google Browser Sync, please dont hesitate to sign the petition...&lt;br /&gt;&lt;br /&gt;You can read about Google's decision here... &lt;br /&gt;&lt;a href="http://googlesystem.blogspot.com/2008/06/google-browser-sync-to-be-discontinued.html"&gt;http://googlesystem.blogspot.com/2008/06/google-browser-sync-to-be-discontinued.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And sign here...&lt;br /&gt;&lt;a href="http://www.ipetitions.com/petition/googlebrowsersyncff3/"&gt;http://www.ipetitions.com/petition/googlebrowsersyncff3/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-8884770346113310123?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/8884770346113310123/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=8884770346113310123' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/8884770346113310123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/8884770346113310123'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/google-browser-sync-discontinued-in-ff.html' title='Google Browser Sync Discontinued in FF 3'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-4458675357687833961</id><published>2008-06-16T22:04:00.002+02:00</published><updated>2008-06-16T22:06:23.650+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Arbitrary Thoughts'/><title type='text'>Introducing acrobat.com</title><content type='html'>Adobe has recently launched acrobat.com !&lt;br /&gt;Uncertain what the fucture may bring, its quite interesting to see whats gonna happen with this initiative...&lt;br /&gt;&lt;br /&gt;Check it out... &lt;br /&gt;&lt;a href="http://www.adobe.com/acom/"&gt;http://www.adobe.com/acom/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-4458675357687833961?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/4458675357687833961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=4458675357687833961' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4458675357687833961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4458675357687833961'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/introducing-acrobatcom.html' title='Introducing acrobat.com'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-7574923756954680998</id><published>2008-06-15T18:46:00.006+02:00</published><updated>2008-07-20T18:12:40.710+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex SDK'/><title type='text'>Adobe Flex : Cross-versioning</title><content type='html'>The "Marshall Plan" is the nickname for the SDK feature to support cross-versioning. &lt;br /&gt;&lt;br /&gt;The nickname comes from the aspect of the feature that uses shared events and/or the SandboxBridge to marshal objects across ApplicationDomains. Marshalling was popularized in Windows as a way of transcoding objects so they can be shared between applications in different address spaces.&lt;br /&gt;&lt;br /&gt;If the vision comes true, the "Marshall Plan" will define a post-3.1 Flex that liberate developers from having to have all of their code compiled by the same version of Flex.&lt;br /&gt;&lt;br /&gt;Read more about this initiative which are planned to be part of the Flex 4 release.&lt;br /&gt;&lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/Marshall+Plan"&gt;http://opensource.adobe.com/wiki/display/flexsdk/Marshall+Plan&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-7574923756954680998?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/7574923756954680998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=7574923756954680998' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7574923756954680998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7574923756954680998'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/flex-cross-versioning.html' title='Adobe Flex : Cross-versioning'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-5277683619022667201</id><published>2008-06-15T17:19:00.005+02:00</published><updated>2008-06-15T17:33:40.193+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><title type='text'>The benefits of Functional Design</title><content type='html'>In continuation of my latest post regarding easily maintainable systems, I will start by writing about the benefits of Functional Design.&lt;br /&gt;&lt;br /&gt;A functional design assures that each modular part of a computer program has only one responsibility and performs that responsibility with the minimum of side effects on other parts. Functionally-designed modules tend to have low coupling as concrete side-effect and more importantly, they scale much better than other types of designs.&lt;br /&gt;&lt;br /&gt;The advantage for implementation is that if a software module has a single purpose, it will be simpler, and therefore easier and less expensive, to design and implement.&lt;br /&gt;Systems with functionally-designed parts are easier to modify because each part does only what it claims to do.&lt;br /&gt;&lt;br /&gt;Since maintenance is more than 3/4 of a successful system's life, this feature is a crucial advantage. It also makes the system easier to understand and document, which simplifies training. The result is that the practical lifetime of a functional system is longer.&lt;br /&gt;&lt;br /&gt;In a system of programs, a functional module will be easier to reuse because it is less likely to have side effects that appear in other parts of the system.&lt;br /&gt;&lt;br /&gt;The Standard way to assure functional design is to review the description of a module. If the description includes conjunctions such as "and" or "or", then the design has more than one responsibility, and is therefore likely to have side effects. The responsibilities need to be divided into several modules in order to achieve a functional design.&lt;br /&gt;&lt;br /&gt;To perform Functional Design is quite easy, you can start by defining packages/namespaces based on Use Cases as can be illustrated by the following package definition:&lt;br /&gt;&lt;br /&gt;com.hello.usermanagement.createUser&lt;br /&gt;&lt;br /&gt;The package above would then contain all the classes which makes up the concrete use case implementation. In the case of a Flex application it would contain at least the Command and Event, but depending of the lines drawn in architecture - possibly the forms and UI objects as well.&lt;br /&gt;&lt;br /&gt;This should be seen in contrast to having the Command in a namespace called Commands and the Event in a namespace called Events.&lt;br /&gt;&lt;br /&gt;Functional Design has one limitation, and that is that you need an underlying set of baseclasses which implement all your &lt;a href="http://en.wikipedia.org/wiki/Boilerplate_(text)#Boilerplate_code"&gt;Boilerplate&lt;/a&gt; code and thus faciliate that your concrete namespaces dont need to be to highly coupled to other parts of the system on the same level.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-5277683619022667201?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/5277683619022667201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=5277683619022667201' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/5277683619022667201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/5277683619022667201'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/functional-design.html' title='The benefits of Functional Design'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-4426153957609640560</id><published>2008-06-15T17:14:00.002+02:00</published><updated>2008-06-15T17:19:32.084+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><title type='text'>Maintenance is more than 3/4 of a successful system's life</title><content type='html'>A frequent question is why we as developers prefer to make quality code and why we hate to hack together a system in order to meet a business objective, typically a unreasonable deadline or an unreasonable amount of time allocated to a project.&lt;br /&gt;&lt;br /&gt;The answers is pretty simple, us developers spend apr. 3/4 of our working life maintaining systems - not defining them.&lt;br /&gt;This is the reason why quality in application design becomes desirable at the cost of immediate productivity.&lt;br /&gt;&lt;br /&gt;I will address this issue in a series of blogposts where I try to define what I consider to be the constitution of a well implemented system design and what defines an easily mantainable system...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-4426153957609640560?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/4426153957609640560/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=4426153957609640560' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4426153957609640560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4426153957609640560'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/maintenance-is-more-than-34-of.html' title='Maintenance is more than 3/4 of a successful system&apos;s life'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-7582538209442277113</id><published>2008-06-15T17:04:00.004+02:00</published><updated>2008-07-20T18:13:20.495+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>Low Coupling</title><content type='html'>If I should choose only one thing from the knowledge I gained from my software engineering classes at university, I would have to go with "Low Coupling / High Cohesion"...&lt;br /&gt;&lt;br /&gt;However, it appears that not all have been introduced to universal truth of the objective regarding implementing this in system design and architecture.&lt;br /&gt;&lt;br /&gt;Coupling can be "low" (also "loose" and "weak") or "high" (also "tight" and "strong"). Low coupling refers to a relationship in which one module interacts with another module through a stable interface and does not need to be concerned with the other module's internal implementation. With low coupling, a change in one module will not require a change in the implementation of another module. Low coupling is often a sign of a well-structured computer system, and when combined with high cohesion, supports the general goals of high readability and maintainability.&lt;br /&gt;&lt;br /&gt;Systems that do not exhibit low coupling might experience the following developmental difficulties:&lt;br /&gt;&lt;br /&gt;* Change in one module forces a ripple of changes in other modules.&lt;br /&gt;* Modules are difficult to understand in isolation.&lt;br /&gt;* Modules are difficult to reuse or test because dependent modules must be included.&lt;br /&gt;&lt;br /&gt;The concept of coupling is usually related to the concept of cohesion: low coupling facilitates high cohesion, and vice versa. For example, one approach to increasing cohesion is functional design, which seeks to limit the responsibilities of modules along functionally-related boundaries. Modules with single responsibilities tend to communicate less with other modules, which typically causes the side-effect of reduced coupling.&lt;br /&gt;&lt;br /&gt;Low coupling may also reduce performance, and a highly-coupled system is sometimes desirable to achieve maximum efficiency. Regardless, in many modern computing systems, the cost of reduced performance is often seen as a worthy trade for the benefits to the software development process that result from low coupling.&lt;br /&gt;&lt;br /&gt;If you have no idea what I am talking about or would like to read more about how to obtain this in Flex, there is a pretty good article @ adobe.com that describes it pretty well and in great detail...&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://www.adobe.com/devnet/flex/articles/loose_coupling.html"&gt;http://www.adobe.com/devnet/flex/articles/loose_coupling.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-7582538209442277113?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/7582538209442277113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=7582538209442277113' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7582538209442277113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7582538209442277113'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/low-coupling.html' title='Low Coupling'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-1704688625971757259</id><published>2008-06-15T16:57:00.002+02:00</published><updated>2008-06-15T17:03:09.328+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><title type='text'>Mock Frameworks, not for everyone and everytime</title><content type='html'>A frequent question is when should I use a mock object framework ?&lt;br /&gt;However, if you have to ask "when", the answer is probably "not now". I feel that mock object frameworks are something you have to evolve into.&lt;br /&gt;&lt;br /&gt;First, we can talk about mocks in general. Some people have a misconception that mock objects are only useful if you need to simulate interaction with a resource that is difficult to use in unit tests - like an object that communicates with an SMTP server. This isn't true.&lt;br /&gt;&lt;br /&gt;    * The real object has nondeterministic behavior&lt;br /&gt;    * The real object is difficult to setup&lt;br /&gt;    * The real object has behavior that is hard to trigger&lt;br /&gt;    * The real object is slow&lt;br /&gt;    * The real object is a user interface&lt;br /&gt;    * The real object uses a call back&lt;br /&gt;    * The real object does not yet exist &lt;br /&gt;&lt;br /&gt;If we were to step back and generalize this list, we'd say test doubles are useful when you want to isolate code under test. Isolation is good. Let's say we are writing tests for a business component. We wouldn't want the tests to fail when someone checked in bad code for an auditing service the business component uses. We only want the test to fail when something is wrong with the business component itself. Providing a mock auditing service allows us to isolate the business component and control any stimuli the component may pick up from its auditing service. When you start feeling the pain of writing numerous test doubles by hand, you'll know you need a mock object framework.&lt;br /&gt;&lt;br /&gt;Mocks aren't just about isolation, however. Mocks can play an important role at any time if employed correctly. Mocks can be powerful technique for identifying types in a system based on the roles that objects play … In particular, we now understand that the most important benefit of Mock Objects is what we originally called interface discovery.&lt;br /&gt;&lt;br /&gt;Using a mock object framework allows a continuous, top-down design of software. But Aren't Mock Object Frameworks Complex?&lt;br /&gt;&lt;br /&gt;This is another question I've been asked recently. Mock object frameworks are actually rather simple and expose a small API. There is complexity, though, just not in the framework itself. As I said earlier, I think there is a path you can follow where you evolve into using mock object frameworks. The typical project team using a mock object framework is experienced with inversion of control containers. Trying to get up to speed on all these topics at once can be overwhelming.&lt;br /&gt;&lt;br /&gt;There is also some complexity in using mocks effectively. In Mocks and the Dangers of Overspecified Software, Ian Cooper says:&lt;br /&gt;&lt;br /&gt;"When you change the implementation of a method late in the implementation process, mocks can break because you now make additional or different calls to the dependent component that is being mocked. … The mocks began to make our software more resistant to change, more sluggish, and this increased the cost to refactoring. As change becomes more expensive, we risked becoming resistant to making it, and we risk starting to build technical debt. A couple of times the tests broke, as developers changed the domain, or changed how we were doing persistence, without changing the test first, because they were frustrated at how it slowed their development. The mocks became an impedance to progress."&lt;br /&gt;&lt;br /&gt;Mock object frameworks make interaction based testing easy, but can also lead to the problems Ian outlines. Here a couple more reads on this topic:&lt;br /&gt;&lt;br /&gt;    * &lt;a href="http://www.ayende.com/Blog/archive/2007/04/05/Guidelines-to-using-Interaction-Based-Testing.aspx"&gt;Guidelines to Using Interaction Based Testing&lt;/a&gt;&lt;br /&gt;    * &lt;a href="http://serialseb.blogspot.com/2007/12/why-mock-frameworks-suck-and-how-to.html"&gt;Why Mock Frameworks Suck&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In summary – mock object frameworks aren't for everyone. You'll know when you need one!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-1704688625971757259?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/1704688625971757259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=1704688625971757259' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/1704688625971757259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/1704688625971757259'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/mock-frameworks-not-for-everyone-and.html' title='Mock Frameworks, not for everyone and everytime'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-1684429678605258196</id><published>2008-06-15T16:44:00.004+02:00</published><updated>2008-07-20T18:12:47.284+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex SDK'/><title type='text'>Adobe Flex : Linkreports</title><content type='html'>An important tool when trying to examine an application with the objective to divide it into modules and libraries or generally if you want to understand your application better, is the linkreport compiler option.&lt;br /&gt;&lt;br /&gt;Adding the following to your compiler options will print a linkreport upon a successful compile. A linkreport is an XML file which lists all type definitions included in the output as well as the classes it depends on, but has not included.&lt;br /&gt;&lt;br /&gt;-linkreport=[FileLocation][Filename].xml&lt;br /&gt;eg. -linkreport=../reports/Linkreport.xml&lt;br /&gt;&lt;br /&gt;It will generate the file on disk relative to the BIN directory, so if you want to place the linkreport in a separate directory on level with the BIN directory you have to append ../ to the beginning of the value.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-1684429678605258196?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/1684429678605258196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=1684429678605258196' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/1684429678605258196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/1684429678605258196'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/adobe-flex-linkreports.html' title='Adobe Flex : Linkreports'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-6764429982731072237</id><published>2008-06-15T16:34:00.004+02:00</published><updated>2008-06-15T16:40:41.098+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Silverlight Tour Workshop</title><content type='html'>If you are keen on getting up to speed with Silverlight 2, there is a chance with the Silverlight Tour Workshop orchestrated by Wildermuth Consulting Services.&lt;br /&gt;&lt;br /&gt;The Silverlight Tour Workshop is a three-day course on Silverlight 2. It divides the content into three distinct areas: Design, Development and the Server-Side. Students should be able to develop Silverlight 2 applications once attending the workshop. The Workshop is structured with a mix of didactic lessons, demonstrations and hands-on labs. Each student will leave the workshop having created several small Silverlight 2 applications. This variety of learning techniques will ensure that all students become proficient in the technology quickly and in an exciting way.&lt;br /&gt;&lt;br /&gt;Silverlight is about building Internet applications so experience building web applications is encouraged. In addition, since Silverlight utilizes .NET to build online experiences, familiarity with .NET is suggested. No specific experience with WPF or XAML is necessary.&lt;br /&gt;&lt;br /&gt;The schedule is as follows...&lt;br /&gt;&lt;br /&gt;* June 16-18, 2008  Washington, DC&lt;br /&gt;* June 23-25, 2008  Toronto, ON&lt;br /&gt;* July 14-16, 2008  Chicago, IL&lt;br /&gt;* August 6-8, 2008  Melbourne, Australia&lt;br /&gt;* August 11-13, 2008  Boston, MA&lt;br /&gt;* August 27-29, 2008  Toronto, ON&lt;br /&gt;* September 1-3, 2008  Denver, CO&lt;br /&gt;* September 22-24, 2008  New York, NY&lt;br /&gt;* September 24-26, 2008  Toronto, ON&lt;br /&gt;* October 22-24, 2008  Atlanta, GA&lt;br /&gt;* October 29-31, 2008  Sydney, Australia&lt;br /&gt;* November 3-5, 2008  San Diego, CA&lt;br /&gt;* November 19-21, 2008  Seattle, WA&lt;br /&gt;* December 1-3, 2008  Dallas, TX&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://www.silverlight-tour.com/"&gt;http://www.silverlight-tour.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-6764429982731072237?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/6764429982731072237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=6764429982731072237' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6764429982731072237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6764429982731072237'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/silverlight-tour.html' title='Silverlight Tour Workshop'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-4134078143506380498</id><published>2008-06-14T18:21:00.004+02:00</published><updated>2008-06-14T18:25:07.051+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>Flex AIR and ActionScript Posters</title><content type='html'>If you have a registered edition of Flex Builder and a valid license key, you can order your Adobe Flex / AIR posters.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.adobe.com/flex/archives/2008/04/flex_actionscript_and_air_post.html"&gt;Read more here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-4134078143506380498?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/4134078143506380498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=4134078143506380498' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4134078143506380498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4134078143506380498'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/flex-air-and-actionscript-posters.html' title='Flex AIR and ActionScript Posters'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-8212593184011355972</id><published>2008-06-14T18:06:00.002+02:00</published><updated>2008-06-14T18:10:03.710+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>Adobe Flex : Flex community-powered Search</title><content type='html'>The community powered search is designed to help people find the best answer to their question within the Adobe Flex eco-system, no matter where the answer may reside. If the best answer is on someone’s blog in the community, that’s the answer we want to help people find. Itøs not intended to replace the existing search on adobe.com, but will be available as a new beta search. There will be a team of Flex advisors who are adding URLs/domains to this search on an ongoing basis.&lt;br /&gt;&lt;br /&gt;To find this feature:&lt;br /&gt;Navigate to &lt;a href="http://www.adobe.com/devnet/flex/"&gt;http://www.adobe.com/devnet/flex/&lt;/a&gt; and look in the right-nav in the Flex DC, there you should be able to see the “Search Community-Powered Help” form field.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-8212593184011355972?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/8212593184011355972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=8212593184011355972' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/8212593184011355972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/8212593184011355972'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/adobe-flex-flex-community-powered.html' title='Adobe Flex : Flex community-powered Search'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-7350227542633757774</id><published>2008-06-14T17:46:00.004+02:00</published><updated>2008-06-14T17:55:47.171+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><title type='text'>Be your own toolsmith and instrument your applications</title><content type='html'>Any craftsman is only as good as his or hers tools allow him to be. I am not saying that a poor craftsman will become great with good tools, but a great craftsman will become poor if the tools does not match the skillset of the craftsman.&lt;br /&gt;Historically I have always been a relentless early adopter in regards to programming languages and platforms, I have therefore often lacked proper toolsupport in order for me to accomplish working with the new technology and still remaining highly productive. It has thus become as a second nature for me to instrument the systems I work on with build-in highlevel tools to aid development.&lt;br /&gt;&lt;br /&gt;I never thought about this consciously until I read &lt;a href="http://www.colettas.org"&gt;Dave Colletas&lt;/a&gt; article about some tools they have build into Buzzword in order to debug the application.&lt;br /&gt;His article made me think that its perhaps not as widely an adopted technique than I was walking around thinking.&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://www.colettas.org/?p=234"&gt;http://www.colettas.org/?p=234&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-7350227542633757774?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/7350227542633757774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=7350227542633757774' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7350227542633757774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7350227542633757774'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/be-your-own-toolsmith-and-instrument.html' title='Be your own toolsmith and instrument your applications'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-6564366295153276621</id><published>2008-06-14T17:30:00.002+02:00</published><updated>2008-06-14T17:34:29.454+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><title type='text'>HTML Code Formatter</title><content type='html'>Mike Chambers have created a simple, yet extremely cool app.&lt;br /&gt;It's a service which formats code into HTML on Google Add Engine.&lt;br /&gt;&lt;br /&gt;Excellent... :)&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://xzfv.appspot.com/s/format.html"&gt;http://xzfv.appspot.com/s/format.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-6564366295153276621?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/6564366295153276621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=6564366295153276621' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6564366295153276621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6564366295153276621'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/html-code-formatter.html' title='HTML Code Formatter'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-6616048952684840511</id><published>2008-06-14T17:19:00.003+02:00</published><updated>2008-12-11T01:18:39.405+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>MSDN : TechEd 2008 in Barcelona</title><content type='html'>Now registration is opened for this years Microsoft TechEd in Europe.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_GJH4IvKJKGM/SFPjWbQMxtI/AAAAAAAAADk/NOfx-7oHtlM/s1600-h/ITPro_Connect_650.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_GJH4IvKJKGM/SFPjWbQMxtI/AAAAAAAAADk/NOfx-7oHtlM/s400/ITPro_Connect_650.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5211759168210126546" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you sign up prior to the 31st of July, its possible to get a discount on the fee.&lt;br /&gt;This year there is gonna be a lot about Silverlight, so be sure to sign up if you are working on RIA's.&lt;br /&gt;&lt;br /&gt;There is a discount code which will make it possible to get some discount:&lt;br /&gt;DLCTTN37&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://www.microsoft.com/emea/teched2008/itpro/"&gt;http://www.microsoft.com/emea/teched2008/itpro/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-6616048952684840511?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/6616048952684840511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=6616048952684840511' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6616048952684840511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6616048952684840511'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/msdn-teched-2008-in-barcelona.html' title='MSDN : TechEd 2008 in Barcelona'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_GJH4IvKJKGM/SFPjWbQMxtI/AAAAAAAAADk/NOfx-7oHtlM/s72-c/ITPro_Connect_650.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-4046956139972879839</id><published>2008-06-14T17:13:00.003+02:00</published><updated>2008-07-20T18:13:32.680+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>Adobe Flex : Coding Standards</title><content type='html'>In this months edition of the Adobe Edge newsletter, there is a an excellent article about coding standards in the Adobe eco-system.&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://www.adobe.com/newsletters/edge/june2008/articles/article6/index.html"&gt;http://www.adobe.com/newsletters/edge/june2008/articles/article6/index.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-4046956139972879839?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/4046956139972879839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=4046956139972879839' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4046956139972879839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4046956139972879839'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/ado.html' title='Adobe Flex : Coding Standards'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-3113847551490591126</id><published>2008-06-14T17:10:00.001+02:00</published><updated>2008-07-20T18:13:43.710+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>Adobe Flex : Remember that the MXML inherits from the base logic class.</title><content type='html'>What this means is that as you add children components to the MXML and you want the ActionScript Logic to manipulate them you have to make sure the ActionScript has them declared. To declare them you have to define properties in the ActionScript class whose name matches the component id you use in the MXML. For example, look at the Button id in the MXML above and notice that I have a public property in the ActionScript with the same name. The property must be public in the ActionScript class and you should mark them as &lt;span style="font-style:italic;"&gt;[Bindable]&lt;/span&gt; so that if you have other components binding to them the change watcher system still operates as expected.&lt;br /&gt;&lt;br /&gt;This works because the MXML file is an extension of the base logic class and the components with the matching id is equivalent to overriding the properties in the ActionScript. You may wonder why the properties have to be public and not protected if this is an override. The issue is that the MXML components are not part of the MXML class, they are children of the MXML class. Since they are children they do not have access to the ActionScript class’ protected methods and the compiler will see their id as a duplicate name for the MXML class, which is invalid. If the method is public, the compiler interprets this MXML component id as an override and it works. So, long story short… always make the properties &lt;span style="font-style:italic;"&gt;[Bindable] public&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-3113847551490591126?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/3113847551490591126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=3113847551490591126' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/3113847551490591126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/3113847551490591126'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/adobe-flex-remember-that-mxml-inherits.html' title='Adobe Flex : Remember that the MXML inherits from the base logic class.'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-1263336672503752174</id><published>2008-06-14T17:05:00.002+02:00</published><updated>2008-07-20T18:13:54.804+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>Adobe Flex : Never try to manipulate the children components from the ActionScript constructor</title><content type='html'>This is a common mistake made by developers using this pattern. For example, you try to set the button label in the constructor. If you tried this you would get a null value error for the button since it has not been created yet. MXML creates the children components in the initialize() phase so the best way to work around this is to override initialize(), call super.initialize() first and then you can start accessing children components.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-1263336672503752174?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/1263336672503752174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=1263336672503752174' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/1263336672503752174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/1263336672503752174'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/adobe-flex-never-try-to-manipulate.html' title='Adobe Flex : Never try to manipulate the children components from the ActionScript constructor'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-4163317926646084306</id><published>2008-06-14T17:01:00.004+02:00</published><updated>2008-07-20T18:14:05.464+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>Adobe Flex : Coding Conventions</title><content type='html'>The Adobe Flex Team has taken the initiative to create a Coding Convention for Flex solutions.&lt;br /&gt;Its not yet complete, and some places they still have some TBD's... however, the stuff thats already available should be read and understood by every Flex developer.&lt;br /&gt;&lt;br /&gt;We are not following all of them rigidly on my team, however.. we will use the Coding Convention from Adobe to assess the places where we defer and check their validity in contrast to the Adobe Coding Convention.&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/Coding+Conventions"&gt;http://opensource.adobe.com/wiki/display/flexsdk/Coding+Conventions&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-4163317926646084306?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/4163317926646084306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=4163317926646084306' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4163317926646084306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4163317926646084306'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/adobe-flex-coding-conventions.html' title='Adobe Flex : Coding Conventions'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-2790646544152981363</id><published>2008-06-14T16:58:00.002+02:00</published><updated>2008-07-20T18:14:13.984+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>Adobe Flex : Never try to removeChildren() that are defined in MXML</title><content type='html'>This is a mistake that sometimes works when you try it but in most cases this just causes a lot of heartache. Usually the heartache occurs after you have been doing this for a while and you then have to go back and fix a lot of code that was dependent on the first removeChild(). Unfortunately I have seen this first hand and its not a pretty sight. If you are doing a lot of children manipulation then you will want to move away from MXML declaration and handle the children creation/removal all in ActionScript.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-2790646544152981363?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/2790646544152981363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=2790646544152981363' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/2790646544152981363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/2790646544152981363'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/adobe-flex-never-try-to-removechildren.html' title='Adobe Flex : Never try to removeChildren() that are defined in MXML'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-3643412183790169038</id><published>2008-06-14T16:57:00.002+02:00</published><updated>2008-07-20T18:14:22.300+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>Adobe Flex : Event/Action binding in MXML and AS</title><content type='html'>Try to avoid mixing and matching MXML and ActionScript event/action binding. This is also more of a recommendation then a requirement. If you start binding the creationComplete or click events in MXML try to bind them all in MXML. If you bind your events in ActionScript try to bind all of them in ActionScript. Once you start mixing and matching it can be hard to track down code flow later on. You may find yourself wondering why an event keeps triggering because you left it in MXML and forgot about it. In my above example I bind the click event. You can easily do this in the initilize() method using addEventListener(). Use what works best for you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-3643412183790169038?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/3643412183790169038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=3643412183790169038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/3643412183790169038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/3643412183790169038'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/adobe-flex-eventaction-binding-in-mxml.html' title='Adobe Flex : Event/Action binding in MXML and AS'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-7394375310373366472</id><published>2008-06-14T16:46:00.011+02:00</published><updated>2008-07-20T18:14:36.205+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>Adobe Flex : The Code-Behind Pattern</title><content type='html'>The Flex code-behind pattern is a design pattern that is not known or used by a lot of developers. The initial concept of the pattern was based on the ASP.NET development pattern where the layout is handled in a main file and a secondary “backing” file handles all the logic. The goal of the pattern is to create a clear separation of logic and layout.&lt;br /&gt;&lt;br /&gt;When you first learn Flex there is often confusion between what MXML is and how it relates to ActionScript. We tend to think of it as different entities, but the reality is MXML is just an abstracted form of ActionScript. MXML is a declarative XML syntax that is converted by the compiler into an ActionScript class. This is an important concept to understand because this is the root of why the compiler throws an error when trying to have a MXML file and an ActionScript File with the same name in the same package. The MXML file is really just an ActionScript class and therefore we have a conflicting namespace error.&lt;br /&gt;&lt;br /&gt;To help visualize this, imagine the root node of the MXML file is the same as an extends statement.&lt;br /&gt;&lt;br /&gt;When we use something like this in MyApp.mxml:&lt;br /&gt;&lt;br /&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;Application xmlns&lt;span style="color: #666666"&gt;:&lt;/span&gt;mx&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;http://www.adobe.com/2006/mxml&amp;quot;&lt;/span&gt;&lt;span style="color: #666666"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; ...&lt;br /&gt;&lt;span style="color: #666666"&gt;&amp;lt;/&lt;/span&gt;mx&lt;span style="color: #666666"&gt;:&lt;/span&gt;Application&lt;span style="color: #666666"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;We are really saying:&lt;br /&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;class&lt;/span&gt; MyApp &lt;span style="color: #008000; font-weight: bold"&gt;extends&lt;/span&gt; Application&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;So why do we need an MXML syntax if it just becomes ActionScript. As you are probably well aware, doing complex layout in ActionScript takes a ton of code, especially when you get into the world of nested layout. It can be done in code but why would you want to? XML is all about parent/child hierarchies and by using this as a layout language you can quickly define complex organizational structures that would have taken hundreds of lines of code if you did it all in ActionScript. Now that we have a better understanding of the MXML/ActionScript relationship we can start talking about how the pattern is implemented.&lt;br /&gt;&lt;br /&gt;When looking at Adobe’s MXML examples we often see them using the &lt;mx:Script&gt; tag to define any ActionScript that is required to make the MXML example work. This approach is fine for simple examples but once we begin development of a larger application using Flex, having all the MXML logic in a single &lt;mx:Script&gt; tag becomes unwieldy. Even if the code is written by the most organized developer, once you hit 300+ lines of ActionScript with 100 lines of MXML it becomes hard to see the forest from the trees.&lt;br /&gt;&lt;br /&gt;One way to solve this is to use the source attribute in the &lt;mx:Script&gt; tag and set it to an external AS file. This helps because you now have separated all your ActionScript out of the MXML but now you have externalized AS files that aren’t really classes, that sit in the file structure and you can’t extend from them.&lt;br /&gt;&lt;br /&gt;The Code-Behind pattern is a solution to this issue. The first step is to create an ActionScript class that extends the base type that you want your MXML file to be. For example, a Canvas:&lt;br /&gt;&lt;div class="highlight"&gt;&lt;pre&gt;package com.hello.demo&lt;br /&gt;{&lt;br /&gt; &lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; mx.containers.Canvas&lt;span style="color: #666666"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;class&lt;/span&gt; MyComponentLogic &lt;span style="color: #008000; font-weight: bold"&gt;extends&lt;/span&gt; Canvas&lt;br /&gt; {&lt;br /&gt; &lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;I have now created a Class in the com.hello.demo package that extends from Canvas. This is my backing logic class that my MXML extends from. Note that I have used the postfix “Logic” to create a unique name. If you recall, our MXML and AS have to be different names. I prefer the “Logic” postfix but you can use “Base” or “Backing” or any other postfix/prefix you like. Now, you can create the MXML file. In this example let’s assume the MXML component is in the same package as the ActionScript:&lt;br /&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span style="color: #666666"&gt;&amp;lt;&lt;/span&gt;MyComponentLogic&lt;br /&gt;  xmlns&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;com.hello.demo.*&amp;quot;&lt;/span&gt;&lt;br /&gt; xmlns&lt;span style="color: #666666"&gt;:&lt;/span&gt;mx&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;http://www.adobe.com/2006/mxml&amp;quot;&lt;/span&gt;&lt;span style="color: #666666"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; ...&lt;br /&gt;&lt;span style="color: #666666"&gt;&amp;lt;/&lt;/span&gt;MyComponentLogic&lt;span style="color: #666666"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;This code would be in an MXML file called MyComponent.mxml. The MXML now extends from the ActionScript and we can begin to start laying out content and adding logic as needed.&lt;br /&gt;&lt;br /&gt;Some alternatives to the technique I describe here, is to use the Supervising Controller pattern or the ViewHelper. However, a sidenote to the Supervising Controller  is that you should probably choose to call the classes for ...Presenter instead if ...Controller as the use of Controller seems to put some people of if they are not familiar with this pattern and leading them to think they are FlowControllers or ApplicationControllers. Read more about the Supervising Controller pattern at Martin Fowler's excellent website... &lt;a href="http://martinfowler.com/eaaDev/SupervisingPresenter.html"&gt;http://martinfowler.com/eaaDev/SupervisingPresenter.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-7394375310373366472?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/7394375310373366472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=7394375310373366472' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7394375310373366472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7394375310373366472'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/flex-code-behind-pattern.html' title='Adobe Flex : The Code-Behind Pattern'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-7154211030908764453</id><published>2008-06-14T16:22:00.003+02:00</published><updated>2008-06-14T16:30:08.540+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Max'/><title type='text'>Adobe MAX 2008</title><content type='html'>Milano is one of the most beautyful cities in the world, and this December its gonna be the venue for this years Adobe MAX conference.&lt;br /&gt;&lt;br /&gt;If you have not already checked it out, be sure to visit the website to see the latest updates about it...&lt;br /&gt;&lt;a href="http://max.adobe.com/eu/"&gt;http://max.adobe.com/eu/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-7154211030908764453?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/7154211030908764453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=7154211030908764453' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7154211030908764453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7154211030908764453'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/adobe-max-2008.html' title='Adobe MAX 2008'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-1277979701890886858</id><published>2008-06-14T15:27:00.007+02:00</published><updated>2008-12-11T01:18:39.696+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>ItDepends : A tool for visually exploring the dependencies between classes and packages in an Adobe Flex application</title><content type='html'>Currently I am converting an existing application with about 3.500+ classes to use RSL's. It's proven to be rather difficult because we are using a lot of different libraries and modules with quite a number of dependencies between libraries. Despite no libraries having direct circular dependency, there are some indirect dependency-circles in the system.&lt;br /&gt;&lt;br /&gt;When moving to a RSL-based architecture it becomes extremely important to understand the class-definitions included in each library and modules.. and more importantly to know exactly when they are both loaded, needed and used.&lt;br /&gt;&lt;br /&gt;ItDepends is a tool for visually exploring the dependencies between classes and packages in an Adobe Flex application.&lt;br /&gt;It's a great aid when undertaking my task, but even during the normal development of modular applications it can be valuable to use it when considering how to break up the application to increase performance as well as general system quality.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_GJH4IvKJKGM/SFPR0kW9aiI/AAAAAAAAADc/3KBuNDk0Lpo/s1600-h/ItDependsLinkageBrowser.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_GJH4IvKJKGM/SFPR0kW9aiI/AAAAAAAAADc/3KBuNDk0Lpo/s400/ItDependsLinkageBrowser.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5211739894841174562" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://code.google.com/p/it-depends/"&gt;http://code.google.com/p/it-depends/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-1277979701890886858?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/1277979701890886858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=1277979701890886858' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/1277979701890886858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/1277979701890886858'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/adobe-flex-itdepends.html' title='ItDepends : A tool for visually exploring the dependencies between classes and packages in an Adobe Flex application'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_GJH4IvKJKGM/SFPR0kW9aiI/AAAAAAAAADc/3KBuNDk0Lpo/s72-c/ItDependsLinkageBrowser.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-3576525444237227982</id><published>2008-06-14T15:23:00.003+02:00</published><updated>2008-12-11T01:18:39.892+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>FlexCover : A code coverage tool for Flex, AIR and AS3</title><content type='html'>Flexcover is a code coverage tool for Flex, AIR and AS3. It incorporates a modified version of the AS3 compiler which inserts extra function calls in the code within the SWF or SWC output file. At runtime, these function calls send information on the application's code coverage to a separate tool; The modified compiler also emits a separate "coverage metadata" file that describes all the possible packages, classes, functions, code blocks and lines in the code, as well as the names of the associated source code files.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_GJH4IvKJKGM/SFPGb9SjPsI/AAAAAAAAADU/yHYK6uW7SdE/s1600-h/screenshot.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_GJH4IvKJKGM/SFPGb9SjPsI/AAAAAAAAADU/yHYK6uW7SdE/s400/screenshot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5211727377408933570" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://code.google.com/p/flexcover/"&gt;http://code.google.com/p/flexcover/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-3576525444237227982?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/3576525444237227982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=3576525444237227982' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/3576525444237227982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/3576525444237227982'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/flex-cover.html' title='FlexCover : A code coverage tool for Flex, AIR and AS3'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_GJH4IvKJKGM/SFPGb9SjPsI/AAAAAAAAADU/yHYK6uW7SdE/s72-c/screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-7727196767173383969</id><published>2008-06-14T15:12:00.003+02:00</published><updated>2008-06-14T15:20:01.239+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>Adobe Flex 4</title><content type='html'>Flex 4, codenamed Gumbo, is now beginning development.&lt;br /&gt;Some themes are being considered, such as...&lt;br /&gt;&lt;br /&gt;    * Design in Mind: provide a framework meant for continuous collaboration between designer and developer. Probably involves an additional component model that integrates with the existing Halo components.&lt;br /&gt;    * Accelerated Development: take application development from concept to reality quickly. Features could include application templates, architectural framework integration, binding improvements.&lt;br /&gt;    * Horizontal Platform Improvements: features that benefit all application and user types. Features could include compiler performance, language enhancements, BiDi components, enhanced text.&lt;br /&gt;    * Broadening Horizons: expand the range of applications and use-cases that can leverage Flex. Features could include finding a way to make the framework lighter, supporting more deployment runtimes, runtime MXML.&lt;br /&gt;&lt;br /&gt;When the first Beta 1 of the Adobe Flex 4 is going to be rolled out later this year, I plan to do some some workshops on my team where we take all the new features and address them methodically one by one. It has proven to be a very effective method to acquire knowledge about a framework to use a top-down approach resembling brute-force attacking from A to Z.&lt;br /&gt;&lt;br /&gt;If you are interested in learning more about the Adobe Flex 4 project, check it out here...&lt;br /&gt;&lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/Flex+4"&gt;http://opensource.adobe.com/wiki/display/flexsdk/Flex+4&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-7727196767173383969?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/7727196767173383969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=7727196767173383969' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7727196767173383969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7727196767173383969'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/adobe-flex-4.html' title='Adobe Flex 4'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-2563666926530225230</id><published>2008-06-14T14:36:00.006+02:00</published><updated>2008-12-11T01:18:40.418+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Thunderbolt : A logger extension for ActionScript 2 and 3</title><content type='html'>ThunderBolt is a logger extension for ActionScript 2 and 3 as well as Flex 2 and 3 applications based on the Firebug add-on for Firefox.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_GJH4IvKJKGM/SFO8I4PEGXI/AAAAAAAAADE/PzeEgBqTkTY/s1600-h/ThunderBoltAS3_console_screen.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_GJH4IvKJKGM/SFO8I4PEGXI/AAAAAAAAADE/PzeEgBqTkTY/s400/ThunderBoltAS3_console_screen.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5211716054518339954" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_GJH4IvKJKGM/SFO8P58PlqI/AAAAAAAAADM/mejgfWqT3HA/s1600-h/console_sample.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_GJH4IvKJKGM/SFO8P58PlqI/AAAAAAAAADM/mejgfWqT3HA/s400/console_sample.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5211716175235356322" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It looks very promising, and knowing Jens Krause's ordinary high level of ingenuity and as well as quality, I am willing to give it a shot.&lt;br /&gt;&lt;br /&gt;Features:&lt;br /&gt;&lt;br /&gt;    * Detailed information (class, file, line number, time, frame)&lt;br /&gt;    * Log levels (info, warning, error, fatal)&lt;br /&gt;    * Interactive tree view for complex object structures&lt;br /&gt;    * Profiling (time spend during code execution)&lt;br /&gt;    * Collapsible grouped output&lt;br /&gt;    * Filter log by classes and packages&lt;br /&gt;    * Interactive console (inspect and modify object on runtime) &lt;br /&gt;    * Log levels: INFO, WARN, ERROR, DEBUG (FATAL, ALL)&lt;br /&gt;    * Tree view for complex object structures such as class identifier and its properties&lt;br /&gt;    * Custom LogTarget based on Flex Logging API including filters&lt;br /&gt;    * memory snapshot&lt;br /&gt;    * stop logging flag&lt;br /&gt;    * SWC components for logging using Flex 2/3 or Flash CS3&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-2563666926530225230?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/2563666926530225230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=2563666926530225230' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/2563666926530225230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/2563666926530225230'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/tools-thunderbolt.html' title='Thunderbolt : A logger extension for ActionScript 2 and 3'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_GJH4IvKJKGM/SFO8I4PEGXI/AAAAAAAAADE/PzeEgBqTkTY/s72-c/ThunderBoltAS3_console_screen.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-6435980804599737699</id><published>2008-06-13T11:39:00.002+02:00</published><updated>2008-06-13T12:06:55.391+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><title type='text'>SVN : Frequency of Update&amp;Commit cycles</title><content type='html'>Its very disputed indeed, however I have experienced that some practices in using SVN results in less conflicts than others.&lt;br /&gt;The practices which yield the best results depend highly on the method in the organization and the general practices of the team.&lt;br /&gt;Every opinion I share in this post is therefore based on the notion that it works in the company I work for and the current team I am working in as well as the codebase we are working on.&lt;br /&gt;&lt;br /&gt;During a development cycle I will probably end up updating every hour or so. This is not a conscious activity, but more of a habit as it has proven to allow me to experience long periods of no conflicts or merges.&lt;br /&gt;I should perhaps point out that I work as an architect on a system with about 10 developers and a codebase of apr. 3500 classes divided into vast amounts of modules and libraries. Our SVN is configured with positive assertiveness so we let the SVN assume that conflicts will not appear and that if they do, merges will be possible. This works well for us.&lt;br /&gt;&lt;br /&gt;The single most important rule of SVN engagement on my slate is the "Update Prior Commit" dictating that I always run an update before I execute a commit. SVN will warn you anyways, but it gives me a second to think about what I am committing which I have think gives me some percentages in regards to preventing SVN errors.&lt;br /&gt;&lt;br /&gt;I would say that anyone in our organization should commit at least every day and should update at least a couple of times per day. This is due to the very lively nature of our current codebase which kinda means that we don't have any very stable areas in the codebase except for our core classes.&lt;br /&gt;&lt;br /&gt;If the task at hand is too big to be committed every day, it should be branched and hence committed every day. This practice has a couple of times proven to work as an invaluable backup when disks have malfunctioned or users have caused Error-40's (In case you don't know I what I am referring to with "Error-40", ask a computer-saavy Dane - (s)he will tell you :-) )&lt;br /&gt;&lt;br /&gt;(to be continued)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-6435980804599737699?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/6435980804599737699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=6435980804599737699' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6435980804599737699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6435980804599737699'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/svn-frequency-of-update-cycles.html' title='SVN : Frequency of Update&amp;Commit cycles'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-4709228795141276687</id><published>2008-06-11T13:26:00.004+02:00</published><updated>2008-06-11T13:32:56.835+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Morphable Interfaces'/><category scheme='http://www.blogger.com/atom/ns#' term='HCI'/><title type='text'>HCI : Morphable Interfaces - The Initial Inspiration</title><content type='html'>The initial idea of addressing many of the presentation issues concerning RIA user interfaces by the term "Morphable Interfaces" came in relation to the by now quite old video on YouTube illustrating some of Nokia's visions for the future nano-technology based concept for cell-phones.&lt;br /&gt;&lt;br /&gt;In case you have been living under a rock in regards to web-hypes the last year, I bring you the link for the video... Its still a cool video, even though I have already seen it a couple of times by now...&lt;br /&gt; &lt;br /&gt;Nokia's Morphable Concept&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=IX-gTobCJHs"&gt;http://www.youtube.com/watch?v=IX-gTobCJHs&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-4709228795141276687?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/4709228795141276687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=4709228795141276687' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4709228795141276687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4709228795141276687'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/hci-morphable-interfaces-initial.html' title='HCI : Morphable Interfaces - The Initial Inspiration'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-1807616738729395642</id><published>2008-06-11T01:46:00.004+02:00</published><updated>2008-07-20T18:21:01.528+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cairngorm'/><category scheme='http://www.blogger.com/atom/ns#' term='PureMVC'/><title type='text'>PureMVC &amp; Cairngorm : Introducing Tech Per</title><content type='html'>Tech Per had visited my blog yesterday, just to find a spurious blog entry of unknown origin on which he diligently commented and asked if "I was serious", however using different wording.&lt;br /&gt;Nevertheless, I promptly deleted the post and went to Mr. Per Tech's website to find a way to offer an explanation as he was absolutely right, I was not serious and I still have no idea how the entry had arrived on my blog (I stand to blame an empty bottle of cognac, but I still don't have concrete evidence - only circumstantial).&lt;br /&gt;&lt;br /&gt;Nevertheless, and all other things being equal...&lt;br /&gt;Per Tech has an interesting blog and I suggest all to pay it a visit.&lt;br /&gt;One post on his blog, to which I have dedicated this entry, is about PureMVC and Cairngorm. The post is just some arbitrary thoughts from Per Tech on the topic, and its quite liberating to read some simple thoughts... and not read something which the author had probably envisioned as being the final breakdown of differences offering complete closure to all disputes and provide objective and unbiased precedence for years to come... These are just ideas, and as such needs no more introduction...&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://www.techper.net/2008/06/09/patterns-of-gui-architecture-in-cairngorm-and-puremvc/"&gt;http://www.techper.net/2008/06/09/patterns-of-gui-architecture-in-cairngorm-and-puremvc/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-1807616738729395642?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/1807616738729395642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=1807616738729395642' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/1807616738729395642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/1807616738729395642'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/puremvc-cairngorm-introducing-tech-per.html' title='PureMVC &amp; Cairngorm : Introducing Tech Per'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-4330637492390896145</id><published>2008-06-08T23:57:00.005+02:00</published><updated>2008-06-09T00:16:09.701+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='State Machines'/><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='PureMVC'/><title type='text'>State Machines :  The C in PureMVC</title><content type='html'>I have some difficulty figurering out how to combine the notion of a statemachine workflow with the PureMVC notion of commands as the primary work-units. Using states seems to defy the need for commands and if not in direct conflict only because one could imagine using the statechange events to trigger commands. However, the ladder seems to create additional complexity in return of no other benefit than being able to use a statemachine workflow as the primary driver in a strict PureMVC system without removing logic from the commands.&lt;br /&gt;&lt;br /&gt;Cliff Hall started a working group with this focus, but it appears that they too have had some difficulty cornering the right way to combine this.&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://forums.puremvc.org/index.php?board=25.0"&gt;http://forums.puremvc.org/index.php?board=25.0&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-4330637492390896145?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/4330637492390896145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=4330637492390896145' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4330637492390896145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4330637492390896145'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/state-machines-c-in-puremvc.html' title='State Machines :  The C in PureMVC'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-7531963628938811962</id><published>2008-06-08T20:39:00.003+02:00</published><updated>2008-06-09T00:15:42.971+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='State Machines'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Workflow Foundation'/><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='PureMVC'/><title type='text'>State Machines : Windows Workflow Foundation</title><content type='html'>Windows Workflow Foundation has buildin support for building state-machine workflows to  be used from any dotNet based host.&lt;br /&gt;&lt;br /&gt;I will explore this in the upcoming weeks in relation to my effort to contribute to the further development of State Machine support in the PureMVC framework.&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/netframework/aa663328.aspx"&gt;http://msdn.microsoft.com/en-us/netframework/aa663328.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-7531963628938811962?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/7531963628938811962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=7531963628938811962' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7531963628938811962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7531963628938811962'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/state-machines-windows-workflow.html' title='State Machines : Windows Workflow Foundation'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-3417243370578136490</id><published>2008-06-08T20:24:00.003+02:00</published><updated>2008-06-08T20:42:43.021+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='State Machines'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Workflow Foundation'/><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><title type='text'>State Machines : Basic Thoughts</title><content type='html'>There is one important decision to make when creating a new workflow. Will the workflow be a sequential workflow, or a state machine workflow? Windows Workflow provides these two types out of the box. To answer the question, we have to decide whois in control.&lt;br /&gt;&lt;br /&gt;A sequential workflow is a predictable workflow. The execution path might branch, or loop, or wait for an outside event to occur, but in the end, the sequential workflow will use the activities, conditions, and rules we've provided to march inevitably forward. The workflow is in control of the process.&lt;br /&gt;&lt;br /&gt;A state-machine workflow is an event driven workflow. That is, the state machine workflow relies on external events to drive the workflow to completion. We define the legal states of the workflow, and the legal transitions between those states. The workflow is always in one of the states, and has to wait for an event to arrive before transitioning to a new state. Generally, the important decisions happen outside of the workflow. The state machine defines a structure to follow, but control belongs to the outside world.&lt;br /&gt;&lt;br /&gt;We use a sequential workflow when we can encode most of the decision-making inside the workflow itself. We use a state machine workflow when the decision-making happens outside the workflow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-3417243370578136490?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/3417243370578136490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=3417243370578136490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/3417243370578136490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/3417243370578136490'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/state-machines-basic-thoughts.html' title='State Machines : Basic Thoughts'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-7264904764277218437</id><published>2008-06-08T15:32:00.004+02:00</published><updated>2008-06-08T20:38:43.548+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='State Machines'/><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><title type='text'>State Machines : A Powerfull Programming Tool</title><content type='html'>State machines have always fascinated me. There is a clockwork precision to their inner workings that appeals to me on an aesthetic level. They are also an invaluable programming tool. In building libraries and applications, I have returned to them again and again.&lt;br /&gt;&lt;br /&gt;A state machine is a model of how something behaves in response to events. It models behavior by making its responses appropriate to the state that it is currently in. How a state machine responds to an event is called a transition. A transition describes what happens when a state machine receives an event based on its current state. Usually, but not always, the way a state machine responds to an event is to take some sort of action and change its state. A state machine will sometimes test a condition to make sure it is true before performing a transition. This is called a guard.&lt;br /&gt;&lt;br /&gt;    * A state machine is a model of behavior composed of states, events, guards, actions, and transitions.&lt;br /&gt;    * A state is a unique condition in which a state machine can exist during its lifetime.&lt;br /&gt;    * An event is something that happens to a state machine.&lt;br /&gt;    * A transition describes how a state machine behaves in response to an event based on its current state.&lt;br /&gt;    * A guard is a condition that must be true before a state machine will perform a transition.&lt;br /&gt;    * An action is what a state machine performs during a transition.&lt;br /&gt;&lt;br /&gt;This description of state machines introduces several abstract concepts quickly, and is not meant to be formal or complete. It is just a starting point. I will explore what state machines are in a series of posts.&lt;br /&gt;&lt;br /&gt;Next post will be about the implementation of State Machines in Adobe Flex with a running code example.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-7264904764277218437?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/7264904764277218437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=7264904764277218437' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7264904764277218437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/7264904764277218437'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/state-machines-powerfull-programming.html' title='State Machines : A Powerfull Programming Tool'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-3669559732065249610</id><published>2008-06-03T21:46:00.002+02:00</published><updated>2008-06-08T20:48:47.608+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='Stockholm'/><title type='text'>Adobe OnAIR Tour Stockholm (2)</title><content type='html'>Jens Brynildsen have been so nice to share his photos from the Adobe OnAIR Tour's stop in the swedish capital, Stockholm.&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://www.flashmagazine.com/News/detail/onair_stockholm_2008_pictures/"&gt;http://www.flashmagazine.com/News/detail/onair_stockholm_2008_pictures/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-3669559732065249610?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/3669559732065249610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=3669559732065249610' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/3669559732065249610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/3669559732065249610'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/adobe-onair-tour-stockholm-2.html' title='Adobe OnAIR Tour Stockholm (2)'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-8096604998406348666</id><published>2008-06-03T13:17:00.006+02:00</published><updated>2008-06-08T20:48:23.138+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='Stockholm'/><title type='text'>Adobe OnAIR Tour Stockholm (1)</title><content type='html'>A day inside the "Munchen-bryggeriet" masshall when the weather was so good and Stocktown was at its finest, caused everyone to assume that the sessions would be as abandoned as the beach in Jaws succeeding the second attack of the killer-shark... however, it was not !&lt;br /&gt;It was packed with designers, flash programmers and flex developers (and perhaps even an existing AIR developer) and off course reps. from Adobe.&lt;br /&gt;&lt;br /&gt;The food was great, the "swag" was OK and enough so that everyone seemed to feel appreciated.&lt;br /&gt;Lots of cool people with lots of great knowledge and ideas...&lt;br /&gt;&lt;br /&gt;Stay posted for more on this topic...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-8096604998406348666?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/8096604998406348666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=8096604998406348666' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/8096604998406348666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/8096604998406348666'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/adobe-onair-tour-stockholm.html' title='Adobe OnAIR Tour Stockholm (1)'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-5292341895549213673</id><published>2008-06-03T09:45:00.003+02:00</published><updated>2008-06-03T09:48:38.730+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PureMVC'/><title type='text'>PureMVC : Pipes : Demo</title><content type='html'>Mr. Cliff Hall has been dug down for about a week to produce a long anticipated demo for the Pipes part of the framework.&lt;br /&gt;Pipes are so cool, I can not imagine larger systems not using them...&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://trac.puremvc.org/Demo_AS3_MultiCore_Flex_PipeWorks"&gt;http://trac.puremvc.org/Demo_AS3_MultiCore_Flex_PipeWorks&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-5292341895549213673?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/5292341895549213673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=5292341895549213673' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/5292341895549213673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/5292341895549213673'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/06/puremvc-pipes-demo.html' title='PureMVC : Pipes : Demo'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-5615417015890355225</id><published>2008-05-28T10:26:00.006+02:00</published><updated>2008-06-08T20:48:35.745+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='Stockholm'/><title type='text'>Adobe Air : OnAIR Tour Stockholm (0)</title><content type='html'>The Adobe AIR team visits Stockholm in Sweden next month. Unfortunately the registrees have already reached capacity.&lt;br /&gt;&lt;br /&gt;Several of the other stops on the tour is still open for signup, so dont hesitate to consider going to either Berlin or London if your in the area.&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://onair.adobe.com/schedule/cities/stockholm.php"&gt;http://onair.adobe.com/schedule/cities/stockholm.php&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-5615417015890355225?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/5615417015890355225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=5615417015890355225' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/5615417015890355225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/5615417015890355225'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/05/adobe-air-onair-tour-stockholm.html' title='Adobe Air : OnAIR Tour Stockholm (0)'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-4824652757196927957</id><published>2008-05-23T06:17:00.003+02:00</published><updated>2008-05-23T06:22:24.828+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PureMVC'/><title type='text'>PureMVC : Pipes and intermodular communications</title><content type='html'>The PureMVC team (Read 'Cliff Hall') has been working this week on a new utility called Pipes. Its being unit tested right now and they expect to put up a demo soon.&lt;br /&gt;Pipes will henceforth be the main way that modules communicate without having references to each other or sharing a Facade... very cool stuff.&lt;br /&gt;&lt;br /&gt;Check it out...&lt;br /&gt;&lt;a href="http://trac.puremvc.org/Utility_AS3_MultiCore_Pipes"&gt;http://trac.puremvc.org/Utility_AS3_MultiCore_Pipes&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Docs...&lt;br /&gt;&lt;a href="http://puremvc.org/pages/docs/AS3/multicore/pipes_asdoc"&gt;http://puremvc.org/pages/docs/AS3/multicore/pipes_asdoc&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pretty printed source&lt;br /&gt;&lt;a href="http://puremvc.org/pages/docs/AS3/multicore/pipes_source"&gt;http://puremvc.org/pages/docs/AS3/multicore/pipes_source&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-4824652757196927957?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/4824652757196927957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=4824652757196927957' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4824652757196927957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/4824652757196927957'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/05/puremvc-pipes-and-intermodular.html' title='PureMVC : Pipes and intermodular communications'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9853228.post-6133490932204327955</id><published>2008-05-20T06:09:00.005+02:00</published><updated>2008-07-20T18:16:55.373+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cairngorm'/><category scheme='http://www.blogger.com/atom/ns#' term='Best Practices'/><category scheme='http://www.blogger.com/atom/ns#' term='PureMVC'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Flex'/><title type='text'>PureMVC &amp; Cairngorm (1)</title><content type='html'>We have recently been blessed with a couple of very skilled PureMVC oriented developers. Seeing that we have traditionally been a distinctive Cairngorm company, this was naturally an issue we needed to address... however, upon considering the options we came to the conclusion that there were no apparent reasons why our specific implementation of the Cairngorm framework could not coexist happily side-by-side with PureMVC. A number of apparent conflicts based on the various singleton's would have to be solved, but seeing that we have abandoned the singleton FrontController's and ModelLocator's in both frameworks all we had to do was to hook the PureMVC Facade and our custom Cairngorm EventBroadcaster together so our events being dispatched in one place will be delegated to the other place.&lt;br /&gt;What we eventually end up with is a Hybrid which is based on Cairngorm but 100% faciliates PureMVC-based code and it seems to work without any major issues.&lt;br /&gt;&lt;br /&gt;This is the first of what will become a number of posts I will be making about our experiences in taking a 1300+ Class large system based on Cairngorm and adding PureMVC to it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9853228-6133490932204327955?l=thecomcor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thecomcor.blogspot.com/feeds/6133490932204327955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9853228&amp;postID=6133490932204327955' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6133490932204327955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9853228/posts/default/6133490932204327955'/><link rel='alternate' type='text/html' href='http://thecomcor.blogspot.com/2008/05/puremvc-cairngorm-1.html' title='PureMVC &amp; Cairngorm (1)'/><author><name>Peter Andreas Molgaard</name><uri>http://www.blogger.com/profile/05117681707852251339</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
