<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Practical Flash</title>
	<atom:link href="http://www.practicalflash.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.practicalflash.com</link>
	<description>Flash from a Developers' Perspective</description>
	<lastBuildDate>Sun, 12 Oct 2008 20:10:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Control: AnimatedTileList</title>
		<link>http://www.practicalflash.com/libraries/control-animatedtilelist/</link>
		<comments>http://www.practicalflash.com/libraries/control-animatedtilelist/#comments</comments>
		<pubDate>Sun, 12 Oct 2008 04:53:55 +0000</pubDate>
		<dc:creator>Michael Krotscheck</dc:creator>
				<category><![CDATA[Libraries]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[Animated Tile List]]></category>
		<category><![CDATA[AnimateTileList]]></category>
		<category><![CDATA[flex]]></category>

		<guid isPermaLink="false">http://www.practicalflash.com/libraries/control-animatedtilelist/</guid>
		<description><![CDATA[<table class="package">
  <tbody>
    <tr>
      <th>Control</th>

      <td>com.practicalflash.controls.AnimatedTileList</td>
    </tr>

    <tr>
      <th>Source</th>

      <td><a href="http://code.google.com/p/practicalflash/">Google Code Repository</a></td>
    </tr>
  </tbody>
</table>
<p>The Animated Tile List attempts to fill the Visual Component gap left by Adobe in their current TileListRenderer structure. While not as sophisticated (it doesn't support drag &#038; drop, mouse commands, or data change transitions for instance), it nevertheless provides an invalidating, caching tile list with smooth selection transitions.</p>
<p>Notable differences: The AnimatedTileList does not poll its children for desired row height or widths, but calculates those directly off of the numRows and numColumns properties, setting them explicitly.</p>]]></description>
			<content:encoded><![CDATA[<table class="package">
  <tbody>
    <tr>
      <th>Control</th>

      <td>com.practicalflash.controls.AnimatedTileList</td>
    </tr>

    <tr>
      <th>Source</th>

      <td><a href="http://code.google.com/p/practicalflash/">Google Code Repository</a></td>
    </tr>
  </tbody>
</table>
<p>The Animated Tile List attempts to fill the Visual Component gap left by Adobe in their current TileListRenderer structure. While not as sophisticated (it doesn&#8217;t support drag &#038; drop, mouse commands, or data change transitions for instance), it nevertheless provides an invalidating, caching tile list with smooth selection transitions.</p>
<p>Notable differences: The AnimatedTileList does not poll its children for desired row height or widths, but calculates those directly off of the numRows and numColumns properties, setting them explicitly.</p>
<div class="image">
  
  <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="424" height="392" title="Animated Tile List Demo">
    
    <param name="movie" value="http://www.practicalflash.com/wp-content/uploads/2008/10/animatedtilelist.swf" />
    
    <param name="quality" value="high" />
    
    <embed src="http://www.practicalflash.com/wp-content/uploads/2008/10/animatedtilelist.swf" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash"  width="424" height="392" />
  </object>
  <p>Animated Tile List: Demo</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.practicalflash.com/libraries/control-animatedtilelist/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Flex Connect Sessions</title>
		<link>http://www.practicalflash.com/news/flex-connect-sessions/</link>
		<comments>http://www.practicalflash.com/news/flex-connect-sessions/#comments</comments>
		<pubDate>Sat, 04 Oct 2008 02:11:06 +0000</pubDate>
		<dc:creator>Michael Krotscheck</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.practicalflash.com/news/flex-connect-sessions/</guid>
		<description><![CDATA[<p>For the next four weeks, I will be conducting a series of four Adobe Connect sessions through Columbus Digital, Columbus' Official Adobe User Group. These sessions will focus not on ActionScript or Flex Development itself, but rather on ancillary skills and tools important to Application Architects and Developers who want to get into serious Flex application development.</p>
<p>The topics will be as follows:</p>
<ul>
  <li>October 5th- Flex and Subversion</li>

  <li>October 12th- MVC Frameworks and Cairngorm</li>

  <li>October 19th- Unit Testing with FlexUnit</li>

  <li>October 26th- Automating Application Compilation and Deployment with Ant</li>
</ul>
]]></description>
			<content:encoded><![CDATA[<p>For the next four weeks, I will be conducting a series of four Adobe Connect sessions through Columbus Digital, Columbus&#8217; Official Adobe User Group. These sessions will focus not on ActionScript or Flex Development itself, but rather on ancillary skills and tools important to Application Architects and Developers who want to get into serious Flex application development.</p>
<p>The topics will be as follows:</p>
<ul>
  <li>October 5th- Flex and Subversion</li>

  <li>October 12th- MVC Frameworks and Cairngorm</li>

  <li>October 19th- Unit Testing with FlexUnit</li>

  <li>October 26th- Automating Application Compilation and Deployment with Ant</li>
</ul>
<p>Each of these sessions will be hosted via Adobe Acrobat Connect, and will begin at 8PM EST. Given the complex nature of some of these topics, there will be no end time set. Furthermore, these sessions will also be recorded, so if you can&#8217;t make it you&#8217;ll be able to review them whenever you feel like, and I will post links here when they are complete.</p>
<p>Links, preparatory sample code and prerequisites will be provided via the meeting room itself. The presentation platform will be Windows XP and Eclipse, with many apologies to my fellow Mac users. The reason is that certain shortcut methods I would use on OSX are simply not available on Windows without some serious wrangling, so I will prepare my system for that environment and make sure to go over the OSX commands while I&#8217;m there.</p>
<p>If you&#8217;re interested in attending, <a href="http://www.practicalflash.com/contact-me">contact me</a> directly and I&#8217;d be happy to send you a link.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.practicalflash.com/news/flex-connect-sessions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A New Approach for Flash Accessibility</title>
		<link>http://www.practicalflash.com/articles/a-new-approach-for-flash-accessibility/</link>
		<comments>http://www.practicalflash.com/articles/a-new-approach-for-flash-accessibility/#comments</comments>
		<pubDate>Sat, 23 Aug 2008 16:22:58 +0000</pubDate>
		<dc:creator>Michael Krotscheck</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Inspiration]]></category>
		<category><![CDATA[accessibility]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[wai-aria]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.practicalflash.com/articles/a-new-approach-for-flash-accessibility/</guid>
		<description><![CDATA[<p>My colleague (aka running buddy, aka friend, aka fashionista) <a href="http://www.afhill.com/blog">Andrea Hill</a> and I had a pow-wow a few months back in anticipation of her Accessibility presentation at <a href="http://www.sbconference.com/2009/">Spring &#60;/br&#62;</a> . Personally, I thought the conversation was a perfect example of how <a href="http://www.krotscheck.net/2007/07/26/the-origin-of-genius.html">genius occurs at the intersections of knowledge</a> domains, as we were able to take her expertise on Accessibility standards and my expertise in Flash and Actionscript and come up a back-of-the-napkin approach to Flash Accessibility that might just fix all the headaches caused by interfacing with Assistive Technology. Note that this solution does NOT absolve you from designing for visual impairments, hearing deficiencies and so forth- this is a way of interfacing with screen readers.</p>]]></description>
			<content:encoded><![CDATA[<p>My colleague (aka running buddy, aka friend, aka fashionista) <a href="http://www.afhill.com/blog">Andrea Hill</a> and I had a pow-wow a few months back in anticipation of her Accessibility presentation at <a href="http://www.sbconference.com/2009/">Spring &lt;/br&gt;</a> . Personally, I thought the conversation was a perfect example of how <a href="http://www.krotscheck.net/2007/07/26/the-origin-of-genius.html">genius occurs at the intersections of knowledge</a> domains, as we were able to take her expertise on Accessibility standards and my expertise in Flash and Actionscript and come up a back-of-the-napkin approach to Flash Accessibility that might just fix all the headaches caused by interfacing with Assistive Technology. Note that this solution does NOT absolve you from designing for visual impairments, hearing deficiencies and so forth- this is a way of interfacing with screen readers.</p>
<h3>State of the Union</h3>
<p>Flash content at this point can only interface with several select screen readers, and only on Windows (EDITED: see comments). This is because the Flash player uses Microsoft Active Accessibility, which is, of course, only supported in and via Microsoft technologies. As a result, Accessibility is one of those &#8220;Holy Grail&#8221; problems you run into over and over again, and everyone slaps a big price on because nobody really knows anything about it.</p>
<h3>Solution Overview</h3>
<p>Now for the solution. If you really think about the problem, making the flash player accessible is completely redundant. Compiled .swf&#8217;s are embedded into the DOM of a web page which, assuming the browser is reasonably up-to-date, already accommodates a broad selection of screen readers. What is really missing is a way for the Flash piece to use the browser as a bridge communicate with them.</p>
<p>Some interesting developments have actually occurred in this arena recently. The first is the release of a &#8220;headless&#8221; flash player by Adobe which Google and Yahoo now use for SEO purposes, yet could very easily be licensed for other purposes. The second is open-sourcing the .swf file format spec, which could allows someone to write their own &#8216;accessible&#8217; flash player. Yet both of these solutions are very resource intensive, and take control away from the developer of the application in question.</p>
<p>Enter WAI-ARIA: This is a W3C standard for Accessible Rich Internet Applications (ARIA) that was designed specifically with Ajax-based RIA&#8217;s in mind. To give you a quick overview, ARIA outlines a series of attributes by which an XHTML tag (such as div, body, or table) can notify a screen reader of its semantic role, as well as any changes that may occur to/within it. Thus a div tag or unordered list can be given the role of &#8216;menu&#8217; and an aggressive &#8216;politeness&#8217; level so that any time the menu changes, the screen reader is notified.</p>
<p>At this point our proposed solution should be pretty clear: Rather than relying on the flash player to connect and manage the relationship with a screen reader, we instead piggyback on the browser&#8217;s capability and let it handle our communication for us. This can be easily accomplished via the ExternalInterface class, which not only allows us to interface with the javascript engine, but also allows us to write that same javascript to the DOM from flash so our Accessibility solution becomes completely internalized.</p>
<div class="image">
<img src="http://www.practicalflash.com/wp-content/uploads/2008/08/accessibility.jpg" alt="accessibility.png" />
<p>Fig 1: A flash RIA overlaying a DOM abstraction.</p>
</div>
<h3>Implementation</h3>
<p>To fully understand the implementation of this concept, it&#8217;s important to realize that the flash portion of our application completely loses its purpose as a visual display platform, and is relegated to the role of Model and Controller, with the HTML DOM acting as the View. In essence the .swf becomes a Meta application whose job it is to accurately project its current DisplayList hierarchy into the HTML, while accepting commands from that same environment.</p>
<p>This requires a one-to-one mapping between DisplayObjects and HTML elements, which thankfully is fairly easy. To illustrate, take a look at the following two simple code examples. The first is an HTML representation of the DOM rendered by a browser, while the second is an MXML representation of DisplayObjects rendered by the Flash AVM.</p>
<div class="image">
<img src="http://www.practicalflash.com/wp-content/uploads/2008/08/xhtml.jpg" width="386" height="233" alt="xhtml.png" /><img src="http://www.practicalflash.com/wp-content/uploads/2008/08/mxml.jpg" width="386" height="233" alt="mxml.png" />
<p>Fig 2: XHTML and MXML representations of a similar page interface.</p>
</div>
<p>Look similar, right? Even though they&#8217;re both abstractions, you can get a good sense of similar object hierarchy and inheritance, and building an bridging framework becomes a question of determination rather than digging into the depths of the Flash Player. The tools are there, the solution is there, all we need to do is build it.</p>
<div class="image">
<img src="http://www.practicalflash.com/wp-content/uploads/2008/08/accessibility-normal.jpg" width="392" height="259" alt="accessibility-normal.png" />
<img src="http://www.practicalflash.com/wp-content/uploads/2008/08/accessibility-disabled.jpg" width="392" height="258" alt="accessibility-disabled.png" />
<p>Fig 3: User Interaction flow for different use cases.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.practicalflash.com/articles/a-new-approach-for-flash-accessibility/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Serializing and Deserializing ValueObjects in Flex and AIR</title>
		<link>http://www.practicalflash.com/tutorials/serializing-and-deserializing-valueobjects-in-flex-and-air/</link>
		<comments>http://www.practicalflash.com/tutorials/serializing-and-deserializing-valueobjects-in-flex-and-air/#comments</comments>
		<pubDate>Fri, 15 Aug 2008 20:37:25 +0000</pubDate>
		<dc:creator>Michael Krotscheck</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[air]]></category>
		<category><![CDATA[ByteArray]]></category>
		<category><![CDATA[File]]></category>
		<category><![CDATA[flex]]></category>

		<guid isPermaLink="false">http://www.practicalflash.com/?p=64</guid>
		<description><![CDATA[One of the holy grails of the &#34;Build Once, Deploy Anywhere&#34; promise of the Adobe AIR isn't simply that your application will cross all major operating systems, but also that the same codebase can be deployed via the web as an RIA. Admittedly, there remain some differences in functionality; For instance, a desktop application has to worry about windows or contextual menus. Another challenge altogether is transferring data between a desktop and a web application, which can be a daunting task if you're trying to share multiple files, yet is perhaps not as difficult as you might think.]]></description>
			<content:encoded><![CDATA[<div class="image">
  <p>This post <a href="http://ritechnology.typepad.com/technology/2008/07/serializing-and.html#more">originally written</a> for Resource Interactive&#8217;s <a href="http://technology.resource.com/">Technology Blog</a>.</p>
</div>
<p>One of the holy grails of the &quot;Build Once, Deploy Anywhere&quot; promise of the Adobe AIR isn&#8217;t simply that your application will cross all major operating systems, but also that the same codebase can be deployed via the web as an RIA. Admittedly, there remain some differences in functionality; For instance, a desktop application has to worry about windows or contextual menus. Another challenge altogether is transferring data between a desktop and a web application, which can be a daunting task if you&#8217;re trying to share multiple files, yet is perhaps not as difficult as you might think.</p>
<p>AIR, via the <code>ByteAray</code> and <code>FileStream</code> classes, allows us to take an arbitrary data object and serialize it to our own custom file type. Since the ByteArray class is available within the standard Flex environment as well, the only trick remaining is to make this file accessible to an application deployed via the web. When running in the browser, Flash&#8217;s security sandbox prevents us from directly accessing it on the desktop (At least until the release of Flash Player 10, which relaxes that restriction), however we can still send a file to the server and then open it from there. In short, files generated from AIR can be easily deserialized and used within the Flash Player runtime.</p>
<p>Potential uses for this are many. Consider, for instance, that your application has a fairly complex customized display object that draws its information from a value object. This value object contains strings, arrays, and perhaps even an image. By serializing this information into a file, a user can easily share all this information without the need for a data transfer process that has to support multiple file objects. Simply write your file from binary and send it.
</p>
		<h3>Step 1: Create your Value Object</h3>

<p>The first step is of course to create your Value Object. The below code should be no surprise to anyone &#8211; the only difference is&nbsp; the <code>[RemoteClass]</code> metadata tag. This tag is a catchall identifier used by Actionscript to map class-to-binary identification, and is used anywhere&nbsp; serialization occurs: The AMF protocol, <code>SharedObject</code>, <code>ByteArray</code> Serialization, etc.</p>
<pre><code>package com.resource.vo
{
	/**
	 * A simple data Value Object to show that it is possible
	 * to deserialize a binary object created in AIR within the
	 * Flex environment.
	 */
	[RemoteClass(alias=&amp;quot;com.resource.vo.SimpleDataVO&amp;quot;)] 
	public class SimpleDataVO
	{
		[Bindable]
		public var firstName : String = &amp;quot;&amp;quot;;
		[Bindable]
		public var lastName : String = &amp;quot;&amp;quot;;
		[Bindable]
		public var email : String = &amp;quot;&amp;quot;;
	}
}</code></pre>

<h3>Step 2: Save your Value Object to a File</h3>
<p>The code shown in the next two steps is almost exactly the same, except that the button handlers are a little different. As you will note, this is an AIR application in which we create a simple form that writes a constructed data object to a specified location on the file system when the Save button is clicked.</p>
<pre><code>&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;mx:WindowedApplication xmlns:mx=&amp;quot;http://www.adobe.com/2006/mxml&amp;quot; layout=&amp;quot;absolute&amp;quot;&amp;gt;
	&amp;lt;mx:Script&amp;gt;
		&amp;lt;![CDATA[
			import com.resource.vo.SimpleDataVO;
			import flash.filesystem.*;

			[Bindable]
			private var dataObject : SimpleDataVO;
			
			override protected function initializationComplete():void
			{
				super.initializationComplete();
				
				dataObject = new SimpleDataVO();
			}
			
			private function saveFileButtonHandler ( event : MouseEvent ) : void
			{
				// First, generate your ByteArray from the VO.
				var byteArray : ByteArray = new ByteArray();


				byteArray.writeObject( dataObject );
				
				// Resolve your file location.
				var file : File = File.applicationStorageDirectory.resolvePath( &amp;quot;testFile.ri&amp;quot; );
				var fileStream:FileStream = new FileStream();
				
				// Save the file to the given location.
				fileStream.open(file, FileMode.WRITE);
				fileStream.writeBytes( byteArray );
				fileStream.close();
			}
			
		]]&amp;gt;
	&amp;lt;/mx:Script&amp;gt;
	&amp;lt;mx:Form x=&amp;quot;10&amp;quot; y=&amp;quot;10&amp;quot; width=&amp;quot;363&amp;quot; height=&amp;quot;196&amp;quot;&amp;gt;
		&amp;lt;mx:FormItem label=&amp;quot;First Name&amp;quot;&amp;gt;
			&amp;lt;mx:TextInput id=&amp;quot;firstNameInput&amp;quot; text=&amp;quot;{dataObject.firstName}&amp;quot; change=&amp;quot;dataObject.firstName = firstNameInput.text&amp;quot;/&amp;gt;
		&amp;lt;/mx:FormItem&amp;gt;
		&amp;lt;mx:FormItem label=&amp;quot;Last Name&amp;quot;&amp;gt;
			&amp;lt;mx:TextInput id=&amp;quot;lastNameInput&amp;quot; text=&amp;quot;{dataObject.lastName}&amp;quot; change=&amp;quot;dataObject.lastName = lastNameInput.text&amp;quot;/&amp;gt;
		&amp;lt;/mx:FormItem&amp;gt;
		&amp;lt;mx:FormItem label=&amp;quot;Email&amp;quot;&amp;gt;
			&amp;lt;mx:TextInput id=&amp;quot;emailInput&amp;quot; text=&amp;quot;{dataObject.email}&amp;quot; change=&amp;quot;dataObject.email = emailInput.text&amp;quot;/&amp;gt;
		&amp;lt;/mx:FormItem&amp;gt;
		&amp;lt;mx:FormItem&amp;gt;
			&amp;lt;mx:Button label=&amp;quot;Save&amp;quot; click=&amp;quot;saveFileButtonHandler(event)&amp;quot; /&amp;gt;
		&amp;lt;/mx:FormItem&amp;gt;
	&amp;lt;/mx:Form&amp;gt;
&amp;lt;/mx:WindowedApplication&amp;gt;</code></pre>

<h3>Step 3: Read your Value Object</h3>
<p>This next application written for web deployment, and matches the above in all but the button handler. Here we use the <code>URLLoader</code> and <code>URLRequest</code> classes to retrieve our file from an upload directory. Once it&#8217;s been received we access the returned data and let the ByteArray class reconstruct our logical object.</p>
<pre><code>&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;mx:Application xmlns:mx=&amp;quot;http://www.adobe.com/2006/mxml&amp;quot; layout=&amp;quot;absolute&amp;quot;&amp;gt;
	&amp;lt;mx:Script&amp;gt;
		&amp;lt;![CDATA[
			import com.resource.vo.SimpleDataVO;
			
			[Bindable]
			private var dataObject : SimpleDataVO;
			
			private function loadFileButtonHandler ( event : MouseEvent ) : void
			{
				// Execute the file load.
				var request : URLRequest = new URLRequest ( &amp;quot;upload/testFile.ri&amp;quot; );
				var receptor : URLLoader = new URLLoader( request );
				
				// Make sure our content is interpreted as a ByteArray.
				receptor.dataFormat = URLLoaderDataFormat.BINARY;
				receptor.addEventListener( Event.COMPLETE, fileLoadedHandler );
			}
			
			private function fileLoadedHandler ( event : Event ) : void
			{
				// Retrieve the event target, cast as the URLLoader we just created
				var loader : URLLoader = event.target as URLLoader;
				
				// Retrieve the loaded data. We know it's a ByteArray, so let's cast it as well.
				var data : ByteArray = loader.data as ByteArray;
				
				// Use the ByteArray.readObject method to reconstruct the object.
				var obj : Object = data.readObject();
				
				// Cast the object and assign it to our data container.
				dataObject = obj as SimpleDataVO;
			}
		]]&amp;gt;
	&amp;lt;/mx:Script&amp;gt;
	&amp;lt;mx:Form x=&amp;quot;10&amp;quot; y=&amp;quot;10&amp;quot; width=&amp;quot;363&amp;quot; height=&amp;quot;196&amp;quot;&amp;gt;
		&amp;lt;mx:FormItem label=&amp;quot;First Name&amp;quot;&amp;gt;
			&amp;lt;mx:TextInput id=&amp;quot;firstNameInput&amp;quot; text=&amp;quot;{dataObject.firstName}&amp;quot; change=&amp;quot;dataObject.firstName = firstNameInput.text&amp;quot;/&amp;gt;
		&amp;lt;/mx:FormItem&amp;gt;
		&amp;lt;mx:FormItem label=&amp;quot;Last Name&amp;quot;&amp;gt;
			&amp;lt;mx:TextInput id=&amp;quot;lastNameInput&amp;quot; text=&amp;quot;{dataObject.lastName}&amp;quot; change=&amp;quot;dataObject.lastName = lastNameInput.text&amp;quot;/&amp;gt;
		&amp;lt;/mx:FormItem&amp;gt;
		&amp;lt;mx:FormItem label=&amp;quot;Email&amp;quot;&amp;gt;
			&amp;lt;mx:TextInput id=&amp;quot;emailInput&amp;quot; text=&amp;quot;{dataObject.email}&amp;quot; change=&amp;quot;dataObject.email = emailInput.text&amp;quot;/&amp;gt;
		&amp;lt;/mx:FormItem&amp;gt;
		&amp;lt;mx:FormItem&amp;gt;
			&amp;lt;mx:Button label=&amp;quot;Load&amp;quot; click=&amp;quot;loadFileButtonHandler(event)&amp;quot; /&amp;gt;
		&amp;lt;/mx:FormItem&amp;gt;
	&amp;lt;/mx:Form&amp;gt;
&amp;lt;/mx:Application&amp;gt;</code></pre>

<h3>A few caveats</h3>
<p>For <code>ByteArray</code> to properly serialize and deserialize your object, two things must be the case. First, you must use the <code>[RemoteClass(alias='')]</code> metadata tag. Secondly, you have to make sure your value object is compiled into your application. This can be done either implicitly (via the type declaration I used above), or explicitly by adding your class to the <code>mxmlc</code> compiler arguments.</p>
<p>Additionally, there are a few things&nbsp; I explicitly omit in this tutorial. Foremost of these is the send/receive architecture that would ensure the proper distribution of a file created from AIR. This will vary by implementation, so I&#8217;m not going to tell you how this should or should not be done. The other is that I don&#8217;t discuss the creation of <code>ByteArray</code>s within Flex and returning them to AIR. Since the Flash Player doesn&#8217;t yet allow you to save to the desktop without bouncing through a server, the implementation of Save-From-Flash can be complex and involved, and will have to wait for a future article.</p>]]></content:encoded>
			<wfw:commentRss>http://www.practicalflash.com/tutorials/serializing-and-deserializing-valueobjects-in-flex-and-air/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Classifying Rich Internet Applications</title>
		<link>http://www.practicalflash.com/articles/classifying-rich-internet-applications/</link>
		<comments>http://www.practicalflash.com/articles/classifying-rich-internet-applications/#comments</comments>
		<pubDate>Mon, 30 Jun 2008 23:31:54 +0000</pubDate>
		<dc:creator>Michael Krotscheck</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[ria]]></category>
		<category><![CDATA[rna]]></category>

		<guid isPermaLink="false">http://www.practicalflash.com/?p=44</guid>
		<description><![CDATA[<p>I had an excellent discussion with my coworker Susan today about refining certain internal processes, and one of the tangents of the conversation went off on what the actual definition of a Rich Internet Application actually was. As we know, anything from a banner ad to a product configurator can be considered an RIA, and the only common element  seemed to be that an RIA retains its functionality within the context of what the user is interacting with. In other words, if you click on button in an RIA, the resulting action does not significantly change the page or window the user is interacting with; Clicking to go to a new page loses context, using an animated accordion to display different content does not.</p>
<p>The similarities, though, end there. Implementation varies, technology varies, scope and location and functionality varies, and all in all it ends up being a pretty difficult convoluted mess to describe. At best you can group them via complexity, and after a brief exercise of that nature we realized that a new breed of networked application was emerging. Well, alright, perhaps not emerging, but instead gaining momentum and acceptance in the mainstream. Here's the scale, see if you agree with our reasoning.</p>]]></description>
			<content:encoded><![CDATA[<p>I had an excellent discussion with my coworker Susan today about refining certain internal processes, and one of the tangents of the conversation went off on what the actual definition of a Rich Internet Application actually was. As we know, anything from a banner ad to a product configurator can be considered an RIA, and the only common element  seemed to be that an RIA retains its functionality within the context of what the user is interacting with. In other words, if you click on button in an RIA, the resulting action does not significantly change the page or window the user is interacting with; Clicking to go to a new page loses context, using an animated accordion to display different content does not.</p>
<p>The similarities, though, end there. Implementation varies, technology varies, scope and location and functionality varies, and all in all it ends up being a pretty difficult convoluted mess to describe. At best you can group them via complexity, and after a brief exercise of that nature we realized that a new breed of networked application was emerging. Well, alright, perhaps not emerging, but instead gaining momentum and acceptance in the mainstream. Here&#8217;s the scale, see if you agree with our reasoning.</p>
<div class="hr"></div>
<h3>Level 1: The Widget</h3>
<p>At this level of RIA you are attempting to display information in context of a particular page, however you don&#8217;t care about anything but the most basic user interaction. These could be things like drop-down menus, product detail pop ups, rotation views, buttons that reveal and/or expand text content (like reviews) and so forth. They are almost always implemented in JavaScript, because to use Flash or another plug in technology would be quite a bit of overkill.</p>
<h3>Level 2: The Functional/Interactive Widget</h3>
<p>This level of RIA&#8217;s describes widgets that allow a user to complete a particular functional task. No longer content with simply displaying information, we&#8217;ve now added functionality or a experience that responds to user input. This could be as simple as a DHTML login form or as complex as a Flash-based page takeover, but it necessarily remains restricted to a specific, easily definable task. &quot;Log In&quot;, &quot;Rate This Product&quot;, &quot;Check Convention Schedule&quot; and so forth are good examples, as they add a richer experience that remains in context with the page itself.</p>
<h3>Level 3: The Rich Internet Application (RIA)</h3>
<p>The next level of complexity takes the task mentioned above and strings them together into a flow, or objective, thus defining an actual application. While previously you would have perhaps a few simple form fields to fill out, an actual RIA causes the context of the page to change dramatically via user input. User interaction is no longer restricted to a single action, but instead is intended to enable an activity, such as &quot;Tracking your time&quot;, &quot;Editing a Photo&quot;, or &quot;Managing a Color Palette&quot;. This is where the bread and butter of RIA&#8217;s exist, as well as the holy grail of Web 2.0: A fully interactive and functional application contained entirely within one browser page.</p>
<h3>Level 4: The Rich Networked Application  (RNA)</h3>
<p>The Rich Networked Application  (RNA, I&#8217;m trying to coin a term here, help me out) ceases to be bound by the browser, and instead has become an experience that bridges and is uniform across all digital touch points. The service is available not only from a browser, but may also be accessed from a desktop, a mobile device, a vehicle dashboard, a kiosk, a gaming console, or any other networked or partially networked device you can imagine. The RNA  reaches out to many delivery channels, and while it may provide a different experience for each it nevertheless remains connected in context across them all. Excellent examples of this are <a href="http://www.twitter.com/" target="_blank">Twitter</a> (and all its clients), <a href="http://maps.google.com/" target="_blank">Google Maps</a> (available on Mobile, Internet, etc), <a href="http://kuler.adobe.com/" target="_blank">Kuler</a> (Integrated to the desktop and the entire Adobe Suite), as well as upcoming games like <a href="http://www.spore.com/" target="_blank">Spore</a> (Share creatures across platforms). Implementation&#8230; well, lets be honest, it&#8217;s a nightmare if you go into it unarmed. You have to support many different platforms, frameworks, systems and limitations, yet even so we&#8217;re starting to see toolsets emerge that address them all (Most notably Adobe&#8217;s <a href="http://www.adobe.com/go/flex" target="_blank">Flex</a> &amp; <a href="http://www.adobe.com/go/air" target="_blank">AIR</a>, Microsoft&#8217;s DLR via WMF &amp; <a href="http://silverlight.net/" target="_blank">Silverlight</a>, and Javascript libraries like <a href="http://www.sproutcore.com/" target="_blank">SproutCore</a>, <a href="http://mootools.net/" target="_blank">MooTools</a> and <a href="http://prototypejs.org/" target="_blank">Prototype</a>). </p>
<div class="hr"></div>
<p>Did that make sense to you? It does to me, and I&#8217;m really excited to see how what we have today is going to start bridging the Device Divide.</p>]]></content:encoded>
			<wfw:commentRss>http://www.practicalflash.com/articles/classifying-rich-internet-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Launching Cruise Control during Startup on OSX</title>
		<link>http://www.practicalflash.com/tutorials/launching-cruise-control-during-startup-on-osx/</link>
		<comments>http://www.practicalflash.com/tutorials/launching-cruise-control-during-startup-on-osx/#comments</comments>
		<pubDate>Mon, 23 Jun 2008 04:25:30 +0000</pubDate>
		<dc:creator>Michael Krotscheck</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[auto launch]]></category>
		<category><![CDATA[cruise control]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[startup]]></category>

		<guid isPermaLink="false">http://www.practicalflash.com/tutorials/launching-cruise-control-during-startup-on-osx/</guid>
		<description><![CDATA[<p>I spent a good amount of time today trying to figure out how to turn my "old" iMac into a development environment, which included installing Cruise Control. Since I didn't want to run the launch script manually, I tried (and failed) to find someone who's successfully gotten cruise to autostart on boot. A bit of investigation later and I came up with a solution, drawn from an excellent blog post on <a href="http://egopoly.com/2008/03/26/add-your-own-command-script-to-mac-os-x/">adding your own osx boot launch scripts</a>, an archive script on <a href="http://confluence.public.thoughtworks.org/display/CC/RunningCruiseControlFromUnixInit">launching cruise on unix init</a>, and the tacit information in the MySQLCOM Bootstrapper contained in the OSX Binary Distribution.</p>]]></description>
			<content:encoded><![CDATA[<p>I spent a good amount of time today trying to figure out how to turn my &#8220;old&#8221; iMac into a development environment, which included installing Cruise Control. Since I didn&#8217;t want to run the launch script manually, I tried (and failed) to find someone who&#8217;s successfully gotten cruise to autostart on boot. A bit of investigation later and I came up with a solution, drawn from an excellent blog post on <a href="http://egopoly.com/2008/03/26/add-your-own-command-script-to-mac-os-x/">adding your own osx boot launch scripts</a>, an archive script on <a href="http://confluence.public.thoughtworks.org/display/CC/RunningCruiseControlFromUnixInit">launching cruise on unix init</a>, and the tacit information in the MySQLCOM Bootstrapper contained in the OSX Binary Distribution.</p>
<h3>Step 1: Download and Install Cruise Control</h3>
<p>You can download Cruise Control from <a href="http://cruisecontrol.sourceforge.net/">Sourceforge</a>. For the purpose of this demo I&#8217;ve used the binary distribution, though you can compile your own. Once you&#8217;ve downloaded your distribution, unzip it into a convenient directory. I&#8217;ve used the base applications directory: /Applications/CruiseControl.</p>
<h3>Step 2: Create a User</h3>
<p>It&#8217;s best practice to not run cruise as root, so open up your user accounts and create a new user called Cruise Control.</p>
<h3>Step 3: Create a folder in the StartupItems directory.</h3>
<pre>
$ sudo mkdir /Libraries/StartupItems/CruiseControl
</pre>
<h3>Step 4: Create the Parameters File</h3>
<p>Create a file called /Libraries/StartupItems/CruiseControl/StartupParameters.plist. This file will contain your startup launch configuration information- in other words it&#8217;s a file describing your startup task.</p>
<pre>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&gt;
&lt;plist version="1.0"&gt;
&lt;dict&gt;
	&lt;key&gt;Description&lt;/key&gt;
	&lt;string&gt;Cruise Control&lt;/string&gt;
	&lt;key&gt;OrderPreference&lt;/key&gt;
	&lt;string&gt;None&lt;/string&gt;
	&lt;key&gt;Provides&lt;/key&gt;
	&lt;array&gt;
		&lt;string&gt;CruiseControl&lt;/string&gt;
	&lt;/array&gt;
	&lt;key&gt;Uses&lt;/key&gt;
	&lt;array&gt;
		&lt;string>Network&lt;/string&gt;
	&lt;/array&gt;
	&lt;/dict&gt;
&lt;/plist&gt;
</pre>
<h3>Step 5: Create/Configure the launch script</h3>
<p>The launch script needs to be command line executable with the following three options: start, stop, reset. I&#8217;ve included my sample here, but I recommend you adjust it to match your own configuration and user name.</p>
<pre>
#!/bin/sh
#
# Error out when no parameter given
if [ -z $1 ] ; then
	echo "Usage: $0 [start|stop|restart] "
	exit 1
fi

# Source the common setup functions for startup scripts
test -r /etc/rc.common || exit 1
. /etc/rc.common

###################################################################################################
# USER CONFIGURATION

# The user under which CruiseControl should run.
CC_USER=cruisecontrol

# Cruise Install Directory
CC_INSTALL_DIR=/Applications/CruiseControl

# Directory for the config.xml file.
CC_WORK_DIR=$CC_INSTALL_DIR

# Logfile Directory
CC_LOGFILE_DIR=$CC_INSTALL_DIR

# Port under which Cruise should run
CC_WEBPORT=8080

# JMX Port. It's suggested you don't change this unless the port is already in use.
CC_JMXPORT=8082

# Port for the RMI gateway, leave blank to disable.
CC_RMIPORT=

###################################################################################################
# DO NOT MODIFY ENTRIES BELOW THIS LINE

NAME=cruisecontrol
DESC="CruiseControl - continuous integration build loop"

PATH=/sbin:/usr/sbin:/usr/bin:/bin
export PATH

CC_DAEMON=$CC_INSTALL_DIR/cruisecontrol.sh
CC_CONFIG_FILE=$CC_WORK_DIR/config.xml
CC_LOG_FILE=$CC_LOGFILE_DIR/cruisecontrol.log
CC_COMMAND="$CC_DAEMON -configfile $CC_CONFIG_FILE -webport $CC_WEBPORT -jmxport $CC_JMXPORT -rmiport $CC_RMIPORT -user youruser -password supersecret"

# overwrite settings from default file
if [ -f /etc/default/cruisecontrol ]; then
  . /etc/default/cruisecontrol
fi

# does the executable exist?
test -f $CC_DAEMON || (echo "The executable $CC_DAEMON does not exist!" &#038;&#038; exit 0)

if [ `id -u` -ne 0 ]; then
        echo "Not starting/stopping $DESC, you are not root."
        exit 4
fi

# Get the PID output from the startup script
if [ -f $CC_INSTALL_DIR/cc.pid ]; then
	CC_PID=`cat $CC_INSTALL_DIR/cc.pid`
else
	echo "No cc.pid file found.  CC process may not be controllable from this script!"
fi

StartService ()
{
	cd $CC_INSTALL_DIR
	su $CC_USER -c "/bin/sh -c "$CC_COMMAND >> $CC_LOG_FILE 2>&#038;1"" &#038; RETVAL=$?
	echo "$NAME started with jmx on port ${CC_JMXPORT}"
}

StopService ()
{
	if [ -n "$CC_PID" ] &#038;&#038; ps -p ${CC_PID} > /dev/null ; then
		kill -9 ${CC_PID}
		RETVAL=$?
	else
		echo "$NAME is not running"
		RETVAL=1
	fi
}

RestartService ()
{
	RunService "stop"
	RunService "start"
}

RunService "$1"
</pre>
<h3>Step 6: Set permissions</h3>
<p>Given that the startup script will ignore anything that isn&#8217;t owned by root, and right now cruise still doesn&#8217;t have write access to the cruise install dir, we have to make a few adjustments to our file structure to make this work.</p>
<pre>
$ sudo chown -R cruisecontrol /Applications/CruiseControl
$ sudo chown -R root /Libraries/StartupItems/CruiseControl
$ sudo chmod 755 /Libraries/StartupItems/CruiseControl/CruiseControl
</pre>
<p>That&#8217;s it. I hope this was helpful</p>
]]></content:encoded>
			<wfw:commentRss>http://www.practicalflash.com/tutorials/launching-cruise-control-during-startup-on-osx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Columbus Ruby Brigade presentation: Ruby, Flex &amp; AIR</title>
		<link>http://www.practicalflash.com/news/columbus-ruby-brigade-presentation-ruby-flex-air/</link>
		<comments>http://www.practicalflash.com/news/columbus-ruby-brigade-presentation-ruby-flex-air/#comments</comments>
		<pubDate>Fri, 13 Jun 2008 11:04:54 +0000</pubDate>
		<dc:creator>Michael Krotscheck</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.practicalflash.com/news/columbus-ruby-brigade-presentation-ruby-flex-air/</guid>
		<description><![CDATA[<p>I've been invited to speak at the <a href="http://columbusrb.com/">Columbus Ruby Brigade</a> on AIR and Ruby integration. Given the expert nature of my audience I'm not going to dwell too much on Ruby and Rails, but will focus instead on how to integrate Flex &#38; Air into a Ruby based service layer. This will be a highly technical presentation- I will be covering the following topics:</p>
<ul>
  <li>The internet ecosystem: Ruby, Rails, AIR, Flex, and where do they all fit</li>

  <li>Cost: What is it going to take?</li>

  <li>Installing and using RubyAMF</li>

  <li>Overview of MXML, Actionscript, Eclipse and the SDK</li>

  <li>Consuming data services with Flex &#38; Air</li>

  <li>Building a simple call/response architecture</li>
</ul>
<p>The presentation was on Monday, June 16th. The files are below:</p>
<table class="package">
  <tbody>
    <tr>
      <th>Presentation Demos</th>

      <td>[<a href="http://www.practicalflash.com/presentations/Ruby Brigade/RubyBrigade.zip">RubyBrigade.zip</a>]</td>
    </tr>
  </tbody>
</table>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been invited to speak at the <a href="http://columbusrb.com/">Columbus Ruby Brigade</a> on AIR and Ruby integration. Given the expert nature of my audience I&#8217;m not going to dwell too much on Ruby and Rails, but will focus instead on how to integrate Flex &amp; Air into a Ruby based service layer. This will be a highly technical presentation- I will be covering the following topics:</p>
<ul>
  <li>The internet ecosystem: Ruby, Rails, AIR, Flex, and where do they all fit</li>

  <li>Cost: What is it going to take?</li>

  <li>Installing and using RubyAMF</li>

  <li>Overview of MXML, Actionscript, Eclipse and the SDK</li>

  <li>Consuming data services with Flex &amp; Air</li>

  <li>Building a simple call/response architecture</li>
</ul>
<p>The presentation was on Monday, June 16th. The files are below:</p>
<table class="package">
  <tbody>
    <tr>
      <th>Presentation Demos</th>

      <td>[<a href="http://www.practicalflash.com/presentations/Ruby Brigade/RubyBrigade.zip">RubyBrigade.zip</a>]</td>
    </tr>
  </tbody>
</table>]]></content:encoded>
			<wfw:commentRss>http://www.practicalflash.com/news/columbus-ruby-brigade-presentation-ruby-flex-air/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Designers &amp; Developers: Obsolete Titles in a Web-Made World</title>
		<link>http://www.practicalflash.com/articles/designers-developers-obsolete-titles-in-a-web-made-world/</link>
		<comments>http://www.practicalflash.com/articles/designers-developers-obsolete-titles-in-a-web-made-world/#comments</comments>
		<pubDate>Fri, 06 Jun 2008 05:49:15 +0000</pubDate>
		<dc:creator>Michael Krotscheck</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.practicalflash.com/articles/designers-developers-obsolete-titles-in-a-web-made-world/</guid>
		<description><![CDATA[<p>An interview question I have been frequently asked in the past is: "On the spectrum of Designer &#60; - &#62; Developer, where would you put yourself?"</p>
<p>I've always been bothered by that question, because not only do I have a strong background in the Fine Arts, but I have 8 years of solid experience as a developer. The reason I don't like it is that those of us who operate on the web apply both our creative and logical skills on a daily basis, and in many cases it is our creative streaks that make us so good at what we do. Problem solving skills and creative expression are absolutely inseparable: We learned this from Einstein, and Galileo, and Leonardo Da Vinci, and Thales, and Newton, and a host of other individuals who nowadays would be called the greatest minds of their time.</p>]]></description>
			<content:encoded><![CDATA[<p>An interview question I have been frequently asked in the past is: &#8220;On the spectrum of Designer &lt; &#8211; &gt; Developer, where would you put yourself?&#8221;</p>
<p>I&#8217;ve always been bothered by that question, because not only do I have a strong background in the Fine Arts, but I have 8 years of solid experience as a developer. The reason I don&#8217;t like it is that those of us who operate on the web apply both our creative and logical skills on a daily basis, and in many cases it is our creative streaks that make us so good at what we do. Problem solving skills and creative expression are absolutely inseparable: We learned this from Einstein, and Galileo, and Leonardo Da Vinci, and Thales, and Newton, and a host of other individuals who nowadays would be called the greatest minds of their time.</p>
<p>And yet, every single time we present ourselves professionally, we are categorized into either a logical or creative bucket: Designer or Developer. Admittedly, there are advantages to this, since one can easily quantify compensation, career advancement and project resources based on defined tracks. Furthermore, most (if not all) web production processes work on the basis of phase signoff to protect both the client and the agent, and design necessarily comes before development. Rigid classification of skill and expertise is a boon to management and customer expectations, though it is a poor representation of reality.</p>
<p>Truly great projects involve all hands from kickoff, and while production can perhaps not truly begin until the ideation and proposal comps have been signed it is only by the virtue of continuous collaborative progress that the possibilities begin to flourish and grow. In this kind of an environment, the terms &#8220;Designer&#8221; and &#8220;Developer&#8221; cease to have any meaning; Contribution becomes equal in value and blended along the lines of common expertise.</p>
<p>An example: My colleague Jeff Breckenridge (Who&#8217;s a fantastic but under-appreciated designer *hack*cough*shameless plug*) has a remarkable understanding of graphic composition, but that does not mean he doesn&#8217;t understand the opportunities of object-oriented design. I myself know how important his expertise is, and with my background in production graphics can bring my own skills to the table and meet him on mutual common ground. The <a href="http://www.practicalflash.com/articles/application-release-pandora-practical-desktop/">end result</a> is well composed, well designed, and is functionally robust.</p>
<div class="image"><a href="http://www.practicalflash.com/wp-content/uploads/2008/06/mikeandjeff.jpg" target="_blank"><img src="http://www.practicalflash.com/wp-content/uploads/2008/06/mikeandjeff-tm.jpg" width="450" height="225" alt="MikeAndJeff.png" /></a>
<p>Skills: Jeff Breckenridge &amp; Michael Krotscheck</p>
</div>
<p>The work we did on <a href="http://www.practicalflash.com/articles/application-release-pandora-practical-desktop/">Practical Desktop</a> was great not because he was the &#8220;Designer&#8221; and I was the &#8220;Developer&#8221;, but because we both mingled our skills across our particular domains of expertise. In some cases, I relied on his understanding of functional implementation, while in return he provided me with comps I could easily derive interface states from. We both brought our skills to the table, and in the middle they blended to produce something great.</p>
<p>I have <a href="http://www.krotscheck.net/2007/07/26/the-origin-of-genius.html">stated before</a>, and will state again, that true genius occurs at intersections of knowledge domains. The only thing we are lacking is a way to describe our skills in a way that accurately describes these domains, and is useful in managing projects, resources and employees to achieve the greatest level of creative impact for each implementation. The following flash piece approaches a method by which the skills may be described, and even assists in managing skills for a particular project, however it may not yet be refined enough to properly define career progression and compensation.</p>
<div class="image">
  <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="450" height="450" title="Designer vs. Developer">
    <param name="movie" value="http://www.practicalflash.com/wp-content/uploads/2008/06/desdev.swf" />
    <param name="quality" value="high" />
    <embed src="http://www.practicalflash.com/wp-content/uploads/2008/06/desdev.swf" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="450" height="450" />
  </object>
  <p>Skills: Do It Yourself!</p>
</div>
<p>In the end, the point I&#8217;m really trying to make is this: The terms &#8220;Designer&#8221; and &#8220;Developer&#8221; have no meaning anymore. What matters from this point forward is the blending of skills, and we need a new way of describing these skills so they may be properly blended. What remains is the management of individuals categorized in this way. How exactly does one form a team of professionals when a particular set of skills is needed? And how in the world do you compensate them?</p>]]></content:encoded>
			<wfw:commentRss>http://www.practicalflash.com/articles/designers-developers-obsolete-titles-in-a-web-made-world/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Application Release: Pandora &amp; Practical Desktop</title>
		<link>http://www.practicalflash.com/articles/application-release-pandora-practical-desktop/</link>
		<comments>http://www.practicalflash.com/articles/application-release-pandora-practical-desktop/#comments</comments>
		<pubDate>Mon, 26 May 2008 15:46:16 +0000</pubDate>
		<dc:creator>Michael Krotscheck</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Inspiration]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[air]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[installer]]></category>
		<category><![CDATA[pandora]]></category>
		<category><![CDATA[practical desktop]]></category>

		<guid isPermaLink="false">http://www.practicalflash.com/articles/application-release-pandora-practical-desktop/</guid>
		<description><![CDATA[<p>I've finally gotten around to fully open source my various applications, factoring and debugging the code, commenting and applying all the necessary licenses and other miscellaneous logistical duties to get my two AIR applications up and out there.</p>
<div class="hr"></div>
<iframe 
src ="http://www.practicalflash.com/AIR/Installers.html"
width="100%"
height="200" style="border: 0px none #000000">
</iframe>
<div class="hr"></div>
<h3>Practical Desktop</h3>
<p>Practical Desktop appears to be a simple timekeeping application, though in reality it's an open source widget framework that allows pretty much anyone to build a deployable block of functionality that can start interacting with other widgets. The wrapper's there for you, go nuts. The source is <a href="http://practicalflash.googlecode.com/svn/trunk">here</a></p>
<p>From a personal perspective, I use it as a beta and explorative sandbox, because there are a lot of interesting things coming out in the near future that I'd like to offer some guidance on development best practice, and to do so I will have to figure it out myself first. Rest assured that the widgets I build will be functionally complete, though perhaps limited in feature support.</p>
<h3>Pandora</h3>
<p>The Pandora Desktop application is really just a customized webkit browser that's hardwired to the Pandora mini player. I've fixed the application so minimization works in Windows, and expanded it to include the player's html wrapper as well. The reason I did this is because Pandora's a free service, and I'd like to make sure that I'm not ripping them off by stripping out the ads. Optimally I'd like to help them convert their existing player to AIR, but until I have free time (or they pay me :D ) that won't happen.</p>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve finally gotten around to fully open source my various applications, factoring and debugging the code, commenting and applying all the necessary licenses and other miscellaneous logistical duties to get my two AIR applications up and out there.</p>
<div class="hr"></div>
<iframe 
src ="http://www.practicalflash.com/AIR/Installers.html"
width="100%"
height="200" style="border: 0px none #000000">
</iframe>
<div class="hr"></div>
<h3>Practical Desktop</h3>
<p>Practical Desktop appears to be a simple timekeeping application, though in reality it&#8217;s an open source widget framework that allows pretty much anyone to build a deployable block of functionality that can start interacting with other widgets. The wrapper&#8217;s there for you, go nuts. The source is <a href="http://practicalflash.googlecode.com/svn/trunk">here</a></p>
<p>From a personal perspective, I use it as a beta and explorative sandbox, because there are a lot of interesting things coming out in the near future that I&#8217;d like to offer some guidance on development best practice, and to do so I will have to figure it out myself first. Rest assured that the widgets I build will be functionally complete, though perhaps limited in feature support.</p>
<h3>Pandora</h3>
<p>The Pandora Desktop application is really just a customized webkit browser that&#8217;s hardwired to the Pandora mini player. I&#8217;ve fixed the application so minimization works in Windows, and expanded it to include the player&#8217;s html wrapper as well. The reason I did this is because Pandora&#8217;s a free service, and I&#8217;d like to make sure that I&#8217;m not ripping them off by stripping out the ads. Optimally I&#8217;d like to help them convert their existing player to AIR, but until I have free time (or they pay me <img src='http://www.practicalflash.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  ) that won&#8217;t happen.</p>]]></content:encoded>
			<wfw:commentRss>http://www.practicalflash.com/articles/application-release-pandora-practical-desktop/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Major Refactoring in Progress</title>
		<link>http://www.practicalflash.com/news/major-refactoring-in-progress/</link>
		<comments>http://www.practicalflash.com/news/major-refactoring-in-progress/#comments</comments>
		<pubDate>Mon, 19 May 2008 12:59:20 +0000</pubDate>
		<dc:creator>Michael Krotscheck</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.practicalflash.com/news/major-refactoring-in-progress/</guid>
		<description><![CDATA[<p>Good morning, everyone. With the release/opensourcing of a few AIR applications I've been working on, I'm refactoring the majority of the Practical Flash libraries. I apologize to you if this breaks your svn:externals, but in order to both stay in line with Adobe's branding guidelines and make sure that I make my SVN repository as flexible as possible, I'm breaking things apart a little. Basically, the new folder structure will be as follows:</p>
<ul>
  <li><strong>Ant</strong><br />
  Ant macros, includes and libs</li>

  <li><strong>Libraries</strong><br />
  The new home of the practicalflash libraries, refactored to match the Flex 3 project layout</li>

  <li><strong>PandoraDesktop</strong><br />
  The Pandora Desktop application</li>

  <li><strong>PracticalDesktop</strong><br />
  The Practical Desktop utility widget framework application and timekeeper</li>

  <li><strong>Tools</strong><br />
  Miscellaneous non-actionscript tools and utilities</li>

  <li><strong>build.xml</strong><br />
  The unified build script</li>
</ul><br />
]]></description>
			<content:encoded><![CDATA[<p>Good morning, everyone. With the release/opensourcing of a few AIR applications I&#8217;ve been working on, I&#8217;m refactoring the majority of the Practical Flash libraries. I apologize to you if this breaks your svn:externals, but in order to both stay in line with Adobe&#8217;s branding guidelines and make sure that I make my SVN repository as flexible as possible, I&#8217;m breaking things apart a little. Basically, the new folder structure will be as follows:</p>
<ul>
  <li><strong>Ant</strong><br />
  Ant macros, includes and libs</li>

  <li><strong>Libraries</strong><br />
  The new home of the practicalflash libraries, refactored to match the Flex 3 project layout</li>

  <li><strong>PandoraDesktop</strong><br />
  The Pandora Desktop application</li>

  <li><strong>PracticalDesktop</strong><br />
  The Practical Desktop utility widget framework application and timekeeper</li>

  <li><strong>Tools</strong><br />
  Miscellaneous non-actionscript tools and utilities</li>

  <li><strong>build.xml</strong><br />
  The unified build script</li>
</ul><br />
]]></content:encoded>
			<wfw:commentRss>http://www.practicalflash.com/news/major-refactoring-in-progress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
