<?xml version="1.0" encoding="utf-8"?>

			<rss version="2.0" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://web.resource.org/cc/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">

			<channel>
			<title>RIAlity Blog</title>
			<link>http://www.rialitycheck.com/blog/index.cfm</link>
			<description>This is the development blog.</description>
			<language>en-us</language>
			<pubDate>Tue, 21 May 2013 15:48:57 -0700</pubDate>
			<lastBuildDate>Tue, 29 Mar 2011 04:22:00 -0700</lastBuildDate>
			<generator>BlogCFC</generator>
			<docs>http://blogs.law.harvard.edu/tech/rss</docs>
			<managingEditor>info@rialitycheck.com</managingEditor>
			<webMaster>info@rialitycheck.com</webMaster>
			<itunes:subtitle></itunes:subtitle>
			<itunes:summary></itunes:summary>
			<itunes:category text="Technology" />
			<itunes:category text="Technology">
				<itunes:category text="Podcasting" />
			</itunes:category>
			<itunes:category text="Technology">
				<itunes:category text="Tech News" />
			</itunes:category>
			<itunes:keywords></itunes:keywords>
			<itunes:author></itunes:author>
			<itunes:owner>
				<itunes:email>info@rialitycheck.com</itunes:email>
				<itunes:name></itunes:name>
			</itunes:owner>
			
			<itunes:explicit>no</itunes:explicit>
			
			
			
			
			
			<item>
				<title>Expandable Text Area</title>
				<link>http://www.rialitycheck.com/blog/index.cfm/2011/3/29/Expandable-Text-Area</link>
				<description>
				
				I had an issue recently where there was a standard form item, with a textInput as the entry component.  The problem was that a single line was not large enough for the client to enter in the details that they required.  Using a text area would be my next logical choice however because of certain real estate restrictions I wanted to keep as many form elements visible on the screen at the one time.

Hence the Expandable Text area, a hybrid of the single lined TextInput and the TextArea.  Where typing and removing text would re-size the input component accordingly, and setting a text value would expand the component to cater to the text size.

It&apos;s a fairly simple component with the overridden &lt;b&gt;measure&lt;/b&gt; method doing most of the work.
&lt;embed src=&quot;http://www.rialitycheck.com/demos/textarea/ExpandableTextItem.swf&quot; quality=&quot;high&quot; bgcolor=&quot;#ffffff&quot;
				width=&quot;400&quot; height=&quot;300&quot; name=&quot;ExpandableTextItem&quot; align=&quot;middle&quot;
				play=&quot;true&quot;
				loop=&quot;false&quot;
				quality=&quot;high&quot;
				allowScriptAccess=&quot;sameDomain&quot;
				type=&quot;application/x-shockwave-flash&quot;
				pluginspage=&quot;http://www.adobe.com/go/getflashplayer&quot;&gt;
			&lt;/embed&gt;
&lt;br&gt;
&lt;h2&gt;measure&lt;/h2&gt;
Below in the &lt;b&gt;measure&lt;/b&gt; command we utilize both the viewMetrics to determine the number or lines and then the measuredHeight of the TextArea
&lt;code&gt;
override protected function measure():void {
			
	super.measure();			
			
	// Calculate the default size of the control based on the 
	// contents of the TextArea.text property.
	var lineMetrics:TextLineMetrics = measureText(text);
			
	// get the edge metrics of the textArea
	var vm:EdgeMetrics = viewMetrics;		
	var w:Number = (explicitWidth - vm.left - vm.right);
		
	// calc the line count. If the textFields width has been 
	// updated to the TextAreas explicit
	// height then we can use it&apos;s line count otherwise we use 
	// the lineMetrics width divided
	// by the explicit width minus the edges
	var lineCount:int = Math.ceil(lineMetrics.width / w);
	
	// use the textFields linecount if it&apos;s the layout has been initialized
	if(useLineCount){
		
		lineCount = textField.numLines;
			
	}
						
	// include the total for the line height and the 
	// padding for top bottom and leading values
	measuredHeight = measuredMinHeight = (lineMetrics.height * lineCount) 
					+ vm.top + vm.bottom + lineMetrics.leading;
			
}
&lt;/code&gt;
&lt;br&gt;
&lt;h2&gt;onTextChange&lt;/h2&gt;
There is also a listener and handler for the &quot;textChanged&quot; event that is dispatched from the extended TextArea.  This handler invalidates the size of the component if the number of lines in the textField has been modified.  I also had to sets the variable called useLineCount to determine whether the textFields.numLines attribute should be used.  As when the component is first initialized with text, the textFields layout is not yet completely set thus returning an incorrect numLines value.  
&lt;code&gt;
private function onTextChange(e:Event):void{
							
	if(_prevLineCount != textField.numLines){
				
		// becuase the lineCount of the textField is not 
		// set as per the actual size during
		// the first phase of instanciation we know that 
		// it&apos;s correct now so we can set a boolean to
		// indicate that.
		useLineCount = true;
				
		// invalidate the size
		this.invalidateSize();
					
		_prevLineCount = textField.numLines;
					
	}
	
}
&lt;/code&gt;
&lt;br&gt;
&lt;h2&gt;updateDisplayList&lt;/h2&gt;
And the last piece is the updateDisplayList which sets the actual size of the textField based on the number of lines and the components unscaledWidth.  It also sets the explicitWidth of the component if it results in a NaN.  This occurs if the component&apos;s width is determined by a percentage or layout constraints.
&lt;code&gt;
override protected function updateDisplayList(unscaledWidth:Number
							, unscaledHeight:Number):void{
			
	// we just need to layout the chrome no need for scrollbars
	super.layoutChrome(unscaledWidth,unscaledHeight);
			
	// if the explicitWidth isn&apos;t set then set it.  
	// This will force the invalidateSize() to be called.
	if(isNaN(explicitWidth)){
				
		explicitWidth = unscaledWidth;
				
	}
			
	var vm:EdgeMetrics = viewMetrics;
			
	textField.move(vm.left, vm.top);
			
	var w:Number = unscaledWidth - vm.left - vm.right;
	var h:Number = unscaledHeight - vm.top - vm.bottom;
			
	// set the actual size of the textField based on the 
	// number of lines and the default measured minimum 
	// height of the component
	textField.setActualSize(w
			,(textField.numLines) * (DEFAULT_MEASURED_MIN_HEIGHT));
			
}
&lt;/code&gt;

There it is, unfortunately it&apos;s written with the Flex 3 SDK although I&apos;ll eventually port it to 4.  It&apos;s a hybrid between the two text inputs which will enable the user to concentrate on data entry without having to worry about scroll bars and what they&apos;d typed 50 characters ago.
				
				</description>
				
				
				<category>Flex</category>
				
				<category>UI Design</category>
				
				<category>Actionscript</category>
				
				<pubDate>Tue, 29 Mar 2011 04:22:00 -0700</pubDate>
				<guid>http://www.rialitycheck.com/blog/index.cfm/2011/3/29/Expandable-Text-Area</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Animating Spark List Items.</title>
				<link>http://www.rialitycheck.com/blog/index.cfm/2011/3/3/Animating-Spark-List-Items</link>
				<description>
				
				Previously in Flex 3 List Components came with a style property called the itemsChangeEffect.  This allowed you to specify a sequence of effects to apply to the item renderers when a change to the dataProvider occurred.

eg.

&lt;code&gt;
 &lt;mx:Sequence id=&quot;dataChangeEffect1&quot;&gt;
		&lt;mx:Blur 
			blurYTo=&quot;12&quot; blurXTo=&quot;12&quot; 
			duration=&quot;300&quot; 
			perElementOffset=&quot;150&quot;
			filter=&quot;removeItem&quot;/&gt; 
		&lt;mx:SetPropertyAction 
			name=&quot;visible&quot; value=&quot;false&quot; 
			filter=&quot;removeItem&quot;/&gt;    
		&lt;mx:UnconstrainItemAction/&gt;
		&lt;mx:Parallel&gt;
			&lt;mx:Move 
				duration=&quot;750&quot; 
				easingFunction=&quot;{Elastic.easeOut}&quot; 
				perElementOffset=&quot;20&quot;/&gt;
			&lt;mx:RemoveItemAction 
				startDelay=&quot;400&quot; 
				filter=&quot;removeItem&quot;/&gt;
			&lt;mx:AddItemAction  
				startDelay=&quot;400&quot; 
				filter=&quot;addItem&quot;/&gt;
			&lt;mx:Blur 
				startDelay=&quot;410&quot; 
				blurXFrom=&quot;18&quot; blurYFrom=&quot;18&quot; blurXTo=&quot;0&quot; blurYTo=&quot;0&quot; 
				duration=&quot;300&quot; 
				filter=&quot;addItem&quot;/&gt;
		&lt;/mx:Parallel&gt;
	&lt;/mx:Sequence&gt;        

	&lt;!-- This TileList uses a custom data change effect. --&gt;
	&lt;mx:TileList id=&quot;tlist0&quot; 
		height=&quot;400&quot; width=&quot;400&quot; 
		fontSize=&quot;30&quot; fontStyle=&quot;bold&quot;
		columnCount=&quot;4&quot; rowCount=&quot;4&quot; 
		direction=&quot;horizontal&quot; 
		dataProvider=&quot;{myDP}&quot; 
		allowMultipleSelection=&quot;true&quot; 
		offscreenExtraRowsOrColumns=&quot;4&quot; 
		itemsChangeEffect=&quot;{dataChangeEffect1}&quot;/&gt;
&lt;/code&gt;

Because I was writing a Flex 4 Application I couldn&apos;t find anything similar to this property in the Spark List components, so I decided to roll my own utilising a Custom layout for the List Component.

With the Flex 3 itemsChangeEffect you had to wait for your data to change before the effect would take place.  With my effect I wanted the user to be able to drag an item around the list with the other elements moving away to allow for placement of the dragged item.  Kind of like moses parting the waves with a draggable item.

&lt;a href=&apos;http://rialitycheck.com/demos/spark/layoutdemo.html&apos; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.rialitycheck.com/blog/images//ListLayout.jpg&quot; width=&quot;650&quot;&gt;&lt;/a&gt;

&lt;b&gt;&lt;h2&gt;Writing the custom layout:&lt;/h2&gt;&lt;/b&gt;

&lt;b&gt;Positioning the Elements.&lt;/b&gt;&lt;br&gt;

Inside the custom layout it&apos;s the override of the updateDisplayList that does the hard yakka positioning and sizing the List items.  It makes sure that the items x and y positions do not overlap or exceed the width of the component.  In this instance the first item is in the first row and any subsequent elements are beneath this in pairs.
&lt;br&gt;

&lt;b&gt;Drag and Drop&lt;/b&gt;&lt;br&gt;

For this layout I still needed the the drag and drop functionality so I extended the TileLayout.  
If you still need the drag and drop functionality you may need to override a handful of the methods needed to calculate the dropLocations,indices and the location of the dropIndicator.

&lt;i&gt;calculateDropLocation&lt;/i&gt;&lt;br&gt;
&lt;i&gt;calculateDropIndex&lt;/i&gt;&lt;br&gt;
&lt;i&gt;calculateDropCellIndex&lt;/i&gt;&lt;br&gt;
&lt;i&gt;calculateDropIndicatorBounds&lt;/i&gt;&lt;br&gt;

&lt;b&gt;Animating the elements - things to remember&lt;/b&gt;&lt;br&gt;

With animating a Flex container you need to set the autoLayout flag to false before the animation to prevent flex from updating the containers layout after a child element is resized or repositioned.  Once the animation has finished the autoLayout flag can be set back to it&apos;s default value of true.

&lt;code&gt;
override public function updateDisplayList(width:Number, height:Number):void{
	
	...
		
	if(animate){
		
		target.autoLayout = false;
		target.validateNow();
		
		var  trans:Parallel = new Parallel(target);	

		trans.addEventListener(EffectEvent.EFFECT_END,onTransitionEnd);			     
		trans.play();
		
	}
	
}

private function onTransitionEnd(e:EffectEvent):void{		
	
	e.target.removeEventListener(EffectEvent.EFFECT_END,onTransitionEnd);
	target.autoLayout = true;
	
}
&lt;/code&gt;

Only animate the elements that need animating.  This is fairly obvious but can become a real bottleneck especially when dealing with large datasets.  Test an elements previous position to determine whether it needs to be included in the sequence.

Depending on your interactivity you may need to set useVirtualLayout to false.  Because virtualisation uses an estimate of elements displayed on screen for positioning and sizing, I found that with scrolling and dragging elements beyond the containers current scroll index, these elements were not being resolved.  By setting it to false all elements are created and positioned allowing any calculations needed by those not currently displayed on the UI to still be allowed.

You can view and example of the layout &lt;a href=&apos;http://rialitycheck.com/demos/spark/layoutdemo.html&apos; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.

You can read more about the Spark SkinnableDataContainers &lt;a href=&apos;http://help.adobe.com/en_US/flex/using/WS64909091-7042-4fb8-A243-8FD4E2990264.html&apos; target=&quot;_blank&quot;&gt;here&lt;/a&gt;

Here is a nice article on creating custom layouts with Spark &lt;a href=&apos;http://coldfusion.se/devnet/flex/articles/spark_layouts.html&apos;&gt;here&lt;/a&gt;
				
				</description>
				
				
				<category>Flex</category>
				
				<category>UI Design</category>
				
				<category>Actionscript</category>
				
				<pubDate>Thu, 03 Mar 2011 01:03:00 -0700</pubDate>
				<guid>http://www.rialitycheck.com/blog/index.cfm/2011/3/3/Animating-Spark-List-Items</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Mashing up Flex in Australia</title>
				<link>http://www.rialitycheck.com/blog/index.cfm/2009/11/13/Flexing-in-Mashup-Australia</link>
				<description>
				
				I recently found out about a competition being held in Australia, by the
&lt;a href=&quot;http://gov2.net.au/&quot; target=&quot;_blank&quot;&gt;Government 2.0 Taskforce&lt;/a&gt; called &lt;b&gt;Mashup Australia&lt;/b&gt;.  This taskforce, as taken from their Terms of reference.

&lt;i&gt;will advise and assist the Government to:

&lt;ul&gt;
   &lt;li&gt;make government information more accessible and usable -- to establish a pro-disclosure culture around non-sensitive public sector information;&lt;/li&gt;&lt;br&gt;
    &lt;li&gt;make government more consultative, participatory and transparent -- to maximise the extent to which government utilises the views, knowledge and resources of the general community;&lt;/li&gt;&lt;br&gt;
    &lt;li&gt;build a culture of online innovation within Government -- to ensure that government is receptive to the possibilities created by new collaborative technologies and uses them to advance its ambition to continually improve the way it operates;&lt;/li&gt;&lt;br&gt;
    &lt;li&gt;promote collaboration across agencies with respect to online and information initiatives -- to ensure that efficiencies, innovations, knowledge and enthusiasm are shared on a platform of open standards;&lt;/li&gt;&lt;br&gt;
    &lt;li&gt;identify and/or trial initiatives that may achieve or demonstrate how to accomplish the above objectives.&lt;/li&gt;
&lt;/ul&gt;
&lt;/i&gt;

The Mashup Australia competition was created to emphasis this and provide a practical demonstration of the benefits of opening up sets of their data.

There was quite a large amount of data sets available albeit some not exactly in the most usable format. It was a great way to make the public aware that this data exists, and for us as developers to have fun with how this data could be presented.

I spent a few days on a couple of entries, using flex and flash for the UI.  It would have been nice to have a bit more time to test them and to add a few more bells and whistles.

&lt;font size=&quot;20&quot;&gt;1.&lt;/font&gt;  &lt;img src=&quot;http://www.rialitycheck.com/blog/images//photohublogo.png&quot;&gt;
&lt;br&gt;

The first idea I had was called the GCI PhotoHUB. Because a number of Government Cultural Institutions publish their photographs onto flickr I thought it would be nice to have a central application to be able to search/view these common image sets.

&lt;img src=&quot;http://www.rialitycheck.com/blog/images//hubscreenshot.jpg&quot;&gt;

I used the neat &lt;a href=&quot;http://code.google.com/p/as3flickrlib/&quot;&gt;as2flickrlib&lt;/a&gt; API however I did realise that the commons API was not included in the lib so I had to write one myself for getting that particular piece of information.

I wanted to create something that was intuitive for the end user and something a little playful for them to interact with.

This is the entry &lt;a href=&apos;http://mashupaustralia.org/mashups/gci-photohub/&apos;  target=&quot;_blank&quot;&gt;here&lt;/a&gt;

&lt;br&gt;
&lt;font size=&quot;20&quot;&gt;2.&lt;/font&gt; &lt;img src=&quot;http://www.rialitycheck.com/blog/images//crimewave.jpg&quot;&gt;&lt;br&gt;
The second idea was to create more visually digestible way to display crime statistics in Australia. I chose a number of methods for this which included primarily a map overlay, secondary - charting components, thirdly - a raw data set.  I felt that this would give the end user 3 options depending on what they felt comfortable with.

The initial UI was changed slightly after working through some UX concepts from a good friend of mine who works as a UX consultant.

There were a number of design cues including the map indicators taking reference from police lights as well as the font chosen for the map overlay to help with the overall theme.

The data set provided was in the form of an xls document. Because .xls documents aren&apos;t exactly the best format for web applications. I created a webservice to read the xls file and serve up the data as both a ColdFusion query set as well as a call to return XML.  Making the data much more useful for both Flex and potentially other developers eventually. 

&lt;img src=&quot;http://www.rialitycheck.com/blog/images//crimwave.jpg&quot;&gt;

This is the entry for crimewave &lt;a href=&apos;http://mashupaustralia.org/mashups/crimewave/&apos; target=&quot;_blank&quot;&gt;here&lt;/a&gt;

Both these apps were built in quick time so I&apos;m sure there will be a couple of bugs crawling around :) so if you find one feel free to let me know.  Overall it was a fun way to utilise this newly exposed data from the Government and even a better way to expose it using Flex as the tool.
				
				</description>
				
				
				<category>Actionscript</category>
				
				<category>Flex</category>
				
				<category>UI Design</category>
				
				<category>RIA</category>
				
				<pubDate>Fri, 13 Nov 2009 00:22:00 -0700</pubDate>
				<guid>http://www.rialitycheck.com/blog/index.cfm/2009/11/13/Flexing-in-Mashup-Australia</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Who should know about RIAs</title>
				<link>http://www.rialitycheck.com/blog/index.cfm/2009/9/17/Who-should-know-about-RIAs</link>
				<description>
				
				During the times when I&apos;m attending an event that is non-IT related people ask me what I do for a living. Most often then not when I tell them that I build RIAs for companies they tend to get a glazed look over their face. It&apos;s similar to the look of an original flavoured Krispy Kreme glazed donut, and where the eyes loose focus and start filtering out to the background.  Worst case scenario is when I need to snap my fingers three time and tell them to return back to the conversation.

Most of the time I can prevent the &quot;Krispy Kreme Look&quot; by explaining to them the concept behind the RIA or Rich Internet Application. Once I do that the penny normally drops and they can name a couple of examples, most commonly TweetDeck and Twirl. These are two of the most downloaded Flex and AIR applications, and have done well in exposing the RIA to the broader community.

I think it&apos;s important for us in the RIA space to be pushing the concept and benefits of RIA to the general public.  From acceptance breeds growth, and in the digital realm RIA acceptance still has a little way to go.

In Australia recent studies have shown the amount of money spent in the digital arena is ever increasing. When compared to annual profit, the amount of money spent in digital is still rather small, even though online customer growth is increasing.  It&apos;s this statistic which had me thinking about the acceptance of RIAs in companies and them willing to invest in technology to help with their revenue stream.  As the more a company spends in the digital environment the higher the margin of profit, it makes sense to invest in RIAs.

As customers migrate towards and expect more from companies in terms of digital services and experience. A companies customer service is no longer not only judged by the smile of the shop assistant or the friendliness of the wait staff but also by it&apos;s online service. This is where well planned and executed RIAs excel, engaging the user, holding their hand through a complex task, giving them the information when they want it without hassle. The RIA doesn&apos;t call in sick, steal money from the till or wake up on the wrong side of the bed, things that we have to deal with day to day with traditional customer service.

The technology is not important but the idea behind it is and it&apos;s something that us working in the RIA world need to push, not only towards business managers but to the general public, the end user or customer.  

As they say the customer is always right and by raising their awareness to RIAs it can not only benefit everyone involved but also the overall growth of the digital space.
				
				</description>
				
				
				<category>Flex</category>
				
				<category>Business</category>
				
				<category>RIA</category>
				
				<pubDate>Thu, 17 Sep 2009 17:23:00 -0700</pubDate>
				<guid>http://www.rialitycheck.com/blog/index.cfm/2009/9/17/Who-should-know-about-RIAs</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Catalyst could save you time</title>
				<link>http://www.rialitycheck.com/blog/index.cfm/2009/6/17/Catalyst-could-save-you-time</link>
				<description>
				
				I&apos;ve just come back from attending the Brisbane leg of the Australian Adobe User Group. It showcased the new features and overall direction for the development suite of products which included the new Flash Catalyst, Flash Builder, Flex 4, Cold Fusion 9 and Bolt.

I was really interested in Catalyst as it&apos;s something that I could see a lot of benefit in using personally.

Adobe has made a conscious effort to further improve the work flow between designer and developer which the introduction of Catalyst.

A tool to help create interactive user interfaces transitions and all, without having to worry about a single line of code.  It also enables the user to port this directly into flex for the developer to turn this into an application.

By having something like Catalyst can remove the steps involved going back and forth between Interactive Designer and Developer as the explanation of transitions and state changes are nutted out in the design stage for the developer to see.  Of course this is the ideal scenario and we all know it never exactly works out as smoothly as that.

For a designer it can eliminate the need to provide multiple screen shots of piece of interaction and the need further explain your concepts through emails, phone calls, power point presentations, smoke signals or interpretive dance.

It&apos;s still in Beta so I&apos;m sure there will be many more tantalizing features to come but so far it&apos;s looking great.
 
Overall I can come away from the user group meeting knowing that Adobe is indeed heading in the right direction. They have identified the need to streamline the design/development work flow, as well as further enhancing an existing suite of core products.

Having said that I still think a developer that can touch type could save you more time :)

You can download the beta version of Catalyst from the Adobe Labs &lt;a href=&apos;http://labs.adobe.com/technologies/flashcatalyst/&apos;&gt;here&lt;/a&gt;

&lt;img src=&quot;http://www.rialitycheck.com/blog/images/flash_catalyst.png&quot; width=150 &gt;
				
				</description>
				
				
				<category>Flex</category>
				
				<category>UI Design</category>
				
				<category>Catalyst</category>
				
				<category>RIA</category>
				
				<category>tools</category>
				
				<pubDate>Wed, 17 Jun 2009 18:46:00 -0700</pubDate>
				<guid>http://www.rialitycheck.com/blog/index.cfm/2009/6/17/Catalyst-could-save-you-time</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>I think I might try a Swiz</title>
				<link>http://www.rialitycheck.com/blog/index.cfm/2009/3/22/I-think-I-might-try-a-Swiz</link>
				<description>
				
				After talking to a friend about frameworks and so forth.  He mentioned
the Swiz framework after incorporating it in a project he was currently working on.  Being a dedicated Cairngorm guy I couldn&apos;t say
that I had looked at Swiz before but from what I had heard it sounded like something that may be useful in the future.  I had also thought it would make a great name for a cocktail &quot;Excuse me bartender fetch me another Swiz&quot;...
				 [More]
				</description>
				
				
				<category>Architecture</category>
				
				<category>Actionscript</category>
				
				<category>Flex</category>
				
				<category>Cairngorm</category>
				
				<category>Swiz</category>
				
				<pubDate>Sun, 22 Mar 2009 17:30:00 -0700</pubDate>
				<guid>http://www.rialitycheck.com/blog/index.cfm/2009/3/22/I-think-I-might-try-a-Swiz</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>What&apos;s your pot of gold at the end RIANBOW</title>
				<link>http://www.rialitycheck.com/blog/index.cfm/2009/2/4/Whats-your-pot-of-gold-at-the-end-RIANBOW</link>
				<description>
				
				This is my first post for 09 and coming of the back of the new year which goes hand in hand with resolutions and all that jazz.

What is your motivation in being a RIA developer?

For me it&apos;s seeing a project evolve from it&apos;s conceptual stages through to it being released to the end user.  I get my thrills out of knowing that people are actually using this application that had started out as a twinkle in a project team members eye.  It&apos;s even better when they are absolutely over the moon with the end result.

I know many others who find utter enjoyment in coming up with the perfect class, function, or design pattern.

So what&apos;s your motivation, what&apos;s your pot of gold?
				
				</description>
				
				
				<category>RIA</category>
				
				<pubDate>Wed, 04 Feb 2009 03:38:00 -0700</pubDate>
				<guid>http://www.rialitycheck.com/blog/index.cfm/2009/2/4/Whats-your-pot-of-gold-at-the-end-RIANBOW</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Finding UI inspiration in the everyday.</title>
				<link>http://www.rialitycheck.com/blog/index.cfm/2008/12/14/Finding-UI-inspiration-in-the-everyday</link>
				<description>
				
				Finding inspiration in the everyday.

Often when I&apos;m working on a certain aspect of the UI design phase for while I sometimes find analogies in everyday occurrences that I can relate back to the current UI I&apos;m working on.  It doesn&apos;t matter if it&apos;s a good or bad experience it&apos;s all part of drawing information and ideas outside the context that you&apos;re working in. I may look at it and work out how could this be improved or what makes this a good experience.

It&apos;s true with everything though, the more interest you take in something the more you notice it, and the greater the detail you notice it with.
				 [More]
				</description>
				
				
				<category>UI Design</category>
				
				<pubDate>Sun, 14 Dec 2008 23:48:00 -0700</pubDate>
				<guid>http://www.rialitycheck.com/blog/index.cfm/2008/12/14/Finding-UI-inspiration-in-the-everyday</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Issue with AIR after installing Flex 3.0.2 Updater</title>
				<link>http://www.rialitycheck.com/blog/index.cfm/2008/11/23/Issue-with-AIR-after-installing-Flex-302-Updater</link>
				<description>
				
				After just installing the Flex 3.0.2 Updater the AIR project that I was working on didn&apos;t quite agree with my proactive decision.

Upon debug it was throwing the error.

Process terminated without establishing connection to debugger.

Command:

&quot;/Applications/Adobe Flex Builder 3/sdks/3.2.0/bin/adl&quot; -runtime &quot;/Applications/Adobe Flex Builder 3/sdks/3.2.0/runtimes/air/mac&quot; /workspace/theAirApp/bin-debug/theAirApp-app.xml /workspace/theAirApp/bin-debug 

Output from command:

error while loading initial content

This issue has been logged with Adobe with the work around being to modfiy the namespace in your AIR applications-xml file to use 1.5 like so

&lt;code&gt;
&lt;application xmlns=&quot;http://ns.adobe.com/air/application/1.5&quot;&gt;
&lt;/code&gt;
				
				</description>
				
				
				<category>Flex</category>
				
				<category>AIR</category>
				
				<pubDate>Sun, 23 Nov 2008 18:39:00 -0700</pubDate>
				<guid>http://www.rialitycheck.com/blog/index.cfm/2008/11/23/Issue-with-AIR-after-installing-Flex-302-Updater</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Flash Player 10 Released</title>
				<link>http://www.rialitycheck.com/blog/index.cfm/2008/10/14/Flash-Player-10-Released</link>
				<description>
				
				It has just been announced that Flash Player 10 has been officially released.

Adobe has posted a list of it&apos;s top new features &lt;a href=&quot;http://www.adobe.com/products/flashplayer/features/&quot;&gt;here&lt;/&gt;

Exciting stuff.  The flash player keeps getting better and better.
				
				</description>
				
				
				<category>Flash</category>
				
				<pubDate>Tue, 14 Oct 2008 23:50:00 -0700</pubDate>
				<guid>http://www.rialitycheck.com/blog/index.cfm/2008/10/14/Flash-Player-10-Released</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Be generous... share your assets</title>
				<link>http://www.rialitycheck.com/blog/index.cfm/2008/10/8/Be-generous-share-your-assets</link>
				<description>
				
				&lt;p&gt;Within your team at least..&lt;/p&gt;
&lt;p&gt;I know for some people sharing doesn&apos;t come easy, for some it&apos;s in their nature while others battle to give anything away.  These people are also generally high in the tight arse scale.&lt;/p&gt;
&lt;p&gt;However when it comes to developing projects in teams it&apos;s essential to provide ways of sharing our knowledge and code base.&lt;/p&gt;
&lt;p&gt;Flex makes it fairly easy for us to share our components and assets across projects, allowing us to reuse the existing code base and yet maintain a single source.&lt;/p&gt;
&lt;p&gt;There are a few ways of sharing your code base however I&apos;ve found the easiest way for my is to create a Flex Library and share the compiled .swc across multiple projects using a custom namespace.&lt;/p&gt;
&lt;p&gt;Of course you have the standard issues of sharing libraries such as versioning and assessing the impact that certain fixes may have in the applications that use it, but this is less of an issue if the components are developed correctly and that the components that reside in your library warrant being there.&lt;/p&gt;
&lt;p&gt;Steps to start sharing and to stop being so selfish.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1.  Create a new Flex Library Project&lt;/strong&gt;&lt;/p&gt;

&lt;img src=&quot;http://www.rialitycheck.com/blog/images//screen2.jpg&quot;&gt;

&lt;p&gt;Move your custom components into the source of the library project.  If you&apos;re moving components from an existing flex application you&apos;ll need to ensure that your package structures are correct.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2.  Create your manifest.xml&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;From the adobe website &amp;quot;Manifest files map a component namespace to class names. They define the package names that the components used before being compiled into a SWC file. They are not required when compiling SWC files, but they can help keep your source files organized.&amp;quot; &lt;/p&gt;
&lt;p&gt;It identifies which files are contained in the specified namespace which we will setup next&lt;/p&gt;
&lt;p&gt;The best way to create one is to base it on the existing manifest.xml from the Flex 3 SKD.  Modify your new manifest.xml to include all of your new components.&lt;/p&gt;
&lt;p&gt;eg.&lt;/p&gt;
&lt;code&gt;
&lt;?xml version=&quot;1.0&quot;?&gt;

&lt;componentPackage&gt;
&lt;component id=&quot;CustomImageDisplay&quot; class=&quot;com.rialitycheck.controls.CustomImageDisplay&quot;/&gt;
&lt;component id=&quot;Downloader&quot; class=&quot;com.rialitycheck.controls.Downloader&quot;/&gt;
&lt;component id=&quot;CirclePreloader&quot; class=&quot;com.rialitycheck.controls.CirclePreloader&quot;/&gt;
&lt;component id=&quot;Crumbline&quot; class=&quot;com.rialitycheck.navigators.Crumbline&quot;/&gt;
&lt;/componentPackage&gt;
&lt;/code&gt;
&lt;p&gt;Save this file in your /src/ folder.  I like to prefix the file with the name of the project eg rialitylib-manifest.xml&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3.  Create your config.xml&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We now need to create our config file for the library project.  This lets the compiler know which manifest file the namespace relates to.  Again you can base this config on the existing flex-config.xml, however since we&apos;re really only care for the namespace so it&apos;s best strip everything else out to look something like this.&lt;/p&gt;
&lt;code&gt;
&lt;flex-config&gt;
&lt;compiler&gt;
&lt;namespaces&gt;
&lt;!-- Specify a URI to associate with a manifest of components for use as MXML --&gt;
&lt;!-- elements. --&gt;
&lt;namespace&gt;
&lt;uri&gt;http://www.rialitycheck.com/2008/mxml&lt;/uri&gt;
&lt;manifest&gt;rialitylib-manifest.xml&lt;/manifest&gt;
&lt;/namespace&gt;
&lt;/namespaces&gt;
&lt;/compiler&gt;
&lt;/flex-config&gt;
&lt;/code&gt;
&lt;p&gt;Save this file in your /src/ folder.  Again I like to prefix the file with the name of the project eg rialitylib-config.xml&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4.  Load your config&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Now that we&apos;ve got everything we need to compile the new component library our final step is to tell the compiler to load up the newly created config file.&lt;/p&gt;
&lt;p&gt;To do so we just add the following into the Additional compiler arguments on the Flex Library Compiler Panel&lt;br /&gt;
  -load-config+=rialitylib-config.xml&lt;/p&gt;
&lt;p&gt;That&apos;s it for you project, everything should compile and a .swc should end up in your output folder.&lt;/p&gt;
&lt;img src=&quot;http://www.rialitycheck.com/blog/images//screen1.jpg&quot;&gt;

&lt;p&gt;&lt;strong&gt;5.  Open your flex existing project and Import your swc&lt;/strong&gt;&lt;br /&gt;
  So your team mates have decided to share their code! After giving them high fives open your existing/new flex project.  You can either drop the compiled swc into your project or create a swc folder and point to the bin directory of your library project you just created.  The latter method allows you to recompile your library and not have to worry about dropping the swc back into your project.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6.  Use them&lt;/strong&gt;&lt;br /&gt;
  To use your teams custom components simply define your namespace in the top of your .mxml file and then reference your components accordingly.  Otherwise flex will create one for you when using autocomplete.&lt;br /&gt;
  eg.&lt;/p&gt;
&lt;code&gt;
&lt;mx:Canvas xmlns:components=&quot;au.com.somedomain.documents.components.*&quot; 
xmlns:rc=&quot;http://www.rialitycheck.com/2008/mxml&quot;&gt;

&lt;rc:CustomImageDisplay source=&quot;{data.thumbURL}&quot; toolTip=&quot;{data.descr}&quot; /&gt;
&lt;/code&gt;
&lt;p&gt;That&apos;s all there is to it.&lt;/p&gt;
&lt;p&gt;As long as you keep track of your library component versions and have a suitable tracking procedure you&apos;ll enjoy having a single code base for all your reusable code. The place where you really save lots of time is in maintenance across your applications.  You can also break up the development team by allocating library tasks and application specific tasks separately.&lt;/p&gt;
&lt;p&gt;Plus your good karma rating goes up when you share.&lt;/p&gt;
&lt;p&gt;On a side note, after watching Charlie Boorman&apos;s and Ewan McGregor&apos;s Series the Long way down giving a little to Unicef definitely goes a long way. If you&apos;re feeling extra generous you can make a donation &lt;a href=&quot;http://www.unicef.org.uk/donate/specific_appeals.asp?nodeid=appeals&amp;section=4&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;
				
				</description>
				
				
				<category>Flex</category>
				
				<pubDate>Wed, 08 Oct 2008 17:19:00 -0700</pubDate>
				<guid>http://www.rialitycheck.com/blog/index.cfm/2008/10/8/Be-generous-share-your-assets</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>What&apos;s behind the preloader?</title>
				<link>http://www.rialitycheck.com/blog/index.cfm/2008/9/18/Whats-behind-the-preloader</link>
				<description>
				
				What&apos;s behind the pre-loader?

CursorManager.setBusyCursor();

When designing a new UI it&apos;s important to delve inside the end user&apos;s cerebral hemispheres to understand what drives users to perform the tasks they do.

The pre-loader as a concept has been around for a long time in various forms not necessarily related to web applications.  It can be seen in the form of a support act when going to see a band, or the lighting before a thunder storm, or the clowns before the lion tamer.  In one way or another the pre-loader has provided a way to distract the user from the time taken to get to their main goal at that given point in time.

Adobe has obviously has understood the necessity for the pre-loader concept and have included pre-loading functionality inside the flash component library, and more recently Flex.  Flex also has the capability of setting the busy cursor on service request thus emphasising the importance of notifying the user and keeping them aware that that data will appear to a screen near them.  Of course this type of distraction is minimal, however providing something that is too distracting may result in a slight loss in the ability for the user to focus back on the task of interest.

I remember reading about a case study about a property owner of a large corporate building.  Not a day would go past without a complaint about the building&apos;s lift and how long it took to arrive in the lobby.  It came to the stage where something needed to be done about this.  For the owner there were two obvious solutions, one would be to spend thousands on getting the lift replaced or let the issue go and continue being at the end of the complaint stream.  An associate suggested that the owner get a psychologist in, they agreed to bring him in after much speculation.  His suggestion was not to worry about replacing the lift but to fit full length mirrors in the lobby.  The mirrors were installed and as a result not a single complaint was received from that point on.

In this case the mirrors were the pre-loader and the data was the lift.  People were distracted by the fact that they could look at themselves while waiting for the lift (there was probably some sort of Flexing involved too).  It was a very simple yet elegant solution.

Inside the flex applications that I build I like to pre-load all requests to the server whether it be as a busy cursor / text notification / progress bar or even sound (elevator music anyone?).  The simplest way way I&apos;ve found to do this is to have a public String property on my Model of course you may want to create a more detailed class but I&apos;ll use the string in this example.  By setting this property from my commands it allows the application to listen/test to the changes to this and display the required feedback/preloader to the user.

an example would be something like this

&lt;b&gt;ModelLocator.as&lt;/b&gt;
&lt;code&gt;
	public var statusMessage:String = &quot;&quot;;
&lt;/code&gt;

&lt;b&gt;GetLiftCommand.as&lt;/b&gt;
&lt;code&gt;
public function execute( event:CairngormEvent ):void {
	var levelChangeEvent : LevelChangeEvent = LevelChangeEvent(event);
	var liftID : int = levelChangeEvent.liftID;
			
	var delegate:LiftDelegate = new LiftDelegate(this);
	delegate.getLift(liftID);
	
	/* set the service status */	
	model.serviceStatus = &quot;I&apos;m getting the lift so I&apos;ll put some mirrors up&quot;;
}

public function result( event : Object ):void {

	model.lift = event.result.lift;

	/*clear the service status now that we&apos;ve got the result*/
	model.serviceStatus = &quot;&quot;; 
}
&lt;/code&gt;

&lt;b&gt;MainBuilding.mxml&lt;/b&gt;
&lt;code&gt;

&lt;!-- Hide or show the mirrors based on the service status message --&gt;
&lt;components:mirrors visible=&quot;{model.serviceStatus.length?true:false}&quot; /&gt;

&lt;/code&gt;

In todays development world where the amount of information that is being pushed back to the client is getting larger and larger, pre-loading is important to not only give feedback to the user but to give them a slight distraction prior to the data arriving. 

CursorManager.removeBusyCursor();
				
				</description>
				
				
				<category>Flex</category>
				
				<category>UI Design</category>
				
				<category>Architecture</category>
				
				<pubDate>Thu, 18 Sep 2008 19:27:00 -0700</pubDate>
				<guid>http://www.rialitycheck.com/blog/index.cfm/2008/9/18/Whats-behind-the-preloader</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Flex SDK 3.1 and Flex Builder 3.0.1 Released</title>
				<link>http://www.rialitycheck.com/blog/index.cfm/2008/8/20/Flex-SDK-31-and-Flex-Builder-301-Released</link>
				<description>
				
				Matt Chotin has posted an &lt;a href=&apos;http://www.adobe.com/devnet/flex/articles/sdk3_fb301.html&apos;&gt;article&lt;/a&gt; about the release of the latest version of the Flex Builder version 3.0.1.  This Flex Builder update includes the Flex 3.1 SDK along with a number of bug fixes and certified versions of the professional data visualization and testing components.

To manually initiate an update to Flex Builder using the Adobe Updater, open Flex Builder and go to Help &gt; Search for Flex Builder Updates...
				
				</description>
				
				
				<category>Flex</category>
				
				<pubDate>Wed, 20 Aug 2008 18:40:00 -0700</pubDate>
				<guid>http://www.rialitycheck.com/blog/index.cfm/2008/8/20/Flex-SDK-31-and-Flex-Builder-301-Released</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Crumbline Navigation</title>
				<link>http://www.rialitycheck.com/blog/index.cfm/2008/8/19/Crumbline-Navigation</link>
				<description>
				
				Crumbline navigation has been around for a long time.  The first instance I can recall was when Hansel and Gretel used a Crumbline of pebbles to navigate their way out of the forest.  It was only when they used bread crumbs instead of pebbles did they become lost.

Crumblines are a great way for uses to navigate through the UI especially if the UI contains wizards and or drill downs.  It provides instant feedback to the user in relation to the depth and direction of their navigational choices.

Uses can then step back to the exact position they want by selecting the specific crumb at any given time.

This is an example I created in Flex 3 to illustrate the Crumbline Navigation in it&apos;s most simplistic form. 

&lt;img src=&quot;http://www.rialitycheck.com/blog/images/crumb.jpg&quot;&gt;&lt;br&gt;&lt;br&gt;
This component takes in a collection of Crumb Objects.
The Crumbline then dispatches &quot;crumbEvents&quot; when a crumb item is selected, letting the view dictate how it handles the navigational change.

eg.
&lt;code&gt;
&lt;components:Crumbline styleName=&quot;crumblineStyle&quot; id=&quot;crumbLine&quot; dataProvider=&quot;{acCrumbs}&quot; crumbClick=&quot;onCrumbClick(event)&quot; /&gt;
&lt;/code&gt;

In this example I used a simple viewstack and bound this to the Crumbline using it&apos;s selectedIndex property.

&lt;code&gt;
&lt;mx:Binding source=&quot;crumbLine.selectedIndex&quot; destination=&quot;vsChoice.selectedIndex&quot; /&gt;
&lt;/code&gt;

A demo of this can be seen &lt;a href=&quot;http://www.rialitycheck.com/examples/crumbexample/crumbexample.html&quot;&gt;here&lt;/a&gt;

Special thanks to the Brothers Grimm for the Crumbline model.
				
				</description>
				
				
				<category>Flex</category>
				
				<category>UI Design</category>
				
				<pubDate>Tue, 19 Aug 2008 22:18:00 -0700</pubDate>
				<guid>http://www.rialitycheck.com/blog/index.cfm/2008/8/19/Crumbline-Navigation</guid>
				
				
			</item>
			
		 	
			
			
			<item>
				<title>Mac and PC working together with Synergy</title>
				<link>http://www.rialitycheck.com/blog/index.cfm/2008/8/13/Mac-and-PC-working-together-with-Synergy</link>
				<description>
				
				I&apos;m running both a Mac and PC in my current development environment.  I&apos;ve got some software on both platforms that I use that gotten around to port accross to either the mac or pc.  Another benefit is browser testing for any type of css/HTML work.

This nifty piece of software called Synergy allows you to share your mouse across multiple machines. It also allows copy and paste although with a PC/MAC combination bitmap data is not yet supported so only text can be stored on the clipboard at the moment.

You can download the software &lt;a href=&apos;http://synergy2.sourceforge.net/&apos;&gt;here&lt;/a&gt; and you&apos;ll need to allocate a server and the clients that connect to it.

For those fence sitters out there that can&apos;t decide which platform to use this may be a solution :)
				
				</description>
				
				
				<category>tools</category>
				
				<pubDate>Wed, 13 Aug 2008 23:52:00 -0700</pubDate>
				<guid>http://www.rialitycheck.com/blog/index.cfm/2008/8/13/Mac-and-PC-working-together-with-Synergy</guid>
				
				
			</item>
			
		 	
			</channel></rss>