<?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"
	>

<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>
	<pubDate>Mon, 30 Jun 2008 23:33:00 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<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>
		</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>
		</item>
		<item>
		<title>Columbus Ruby Brigade presentation: Ruby, Flex &#038; 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>
		</item>
		<item>
		<title>Designers &#038; 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; - &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>
		</item>
		<item>
		<title>Application Release: Pandora &#038; 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>
		</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>
		</item>
		<item>
		<title>Porting Pandora to the Desktop</title>
		<link>http://www.practicalflash.com/articles/porting-pandora-to-the-desktop/</link>
		<comments>http://www.practicalflash.com/articles/porting-pandora-to-the-desktop/#comments</comments>
		<pubDate>Sun, 04 May 2008 01:17:57 +0000</pubDate>
		<dc:creator>Michael Krotscheck</dc:creator>
		
		<category><![CDATA[Articles]]></category>

		<category><![CDATA[air]]></category>

		<category><![CDATA[desktop]]></category>

		<category><![CDATA[drunken coding]]></category>

		<category><![CDATA[flash]]></category>

		<category><![CDATA[flex]]></category>

		<category><![CDATA[pandora]]></category>

		<guid isPermaLink="false">http://www.practicalflash.com/articles/porting-pandora-to-the-desktop/</guid>
		<description><![CDATA[<p>So there I was, hacking away at AIR, and my iPod runs out of batteries. I was in that rare coding zen where you really need the audio to lock you out from the rest of the world, so I was fairly annoyed that the random conversation here at Apropos suddenly started to interfere with my productivity. No worries though, I could always resort to Pandora, right?</p>
<p>Now, I'm not a big fan of Pandora. Don't get me wrong, I love what they're doing and have found some phenomenal music there, but the fact that I always have to keep a browser window open to make use of their service has kindof annoyed me, and now was no different. I could deal with it though for the sake of productivity.... until I realized that AIR came with its own embedded WebKit browser.</p>]]></description>
			<content:encoded><![CDATA[<p>So there I was, hacking away at AIR, and my iPod runs out of batteries. I was in that rare coding zen where you really need the audio to lock you out from the rest of the world, so I was fairly annoyed that the random conversation here at Apropos suddenly started to interfere with my productivity. No worries though, I could always resort to <a href="http://www.pandora.com/" >Pandora</a>, right?</p>
<p>Now, I&#8217;m not a big fan of Pandora. Don&#8217;t get me wrong, I love what they&#8217;re doing and have found some phenomenal music there, but the fact that I always have to keep a browser window open to make use of their service has kindof annoyed me, and now was no different. I could deal with it though for the sake of productivity&#8230;. until I realized that AIR came with its own embedded WebKit browser.</p>
<p>Two beers and some experimentation later (apparently Webkit doesn&#8217;t like running on a transparent window), I am now sitting on an application I shall dub &#8220;PandorAIR&#8221;, because it&#8217;s an AIR port of Pandora. There&#8217;s not much to it- there doesn&#8217;t have to be- but for what it&#8217;s worth it&#8217;s a clean little application that I&#8217;m fairly certain others would be interested in adopting. You will need to download and install the AIR runtime environment first, but once you&#8217;re done with that you&#8217;re golden. I&#8217;ll work on putting an Installer Badge here as soon as I have the time.</p><p>Note that during the install it&#8217;s going to complain at you twice: Once because this application isn&#8217;t digitally signed, and once because AIR requests unrestricted access to your desktop. To fix the former&#8230; well, if you have a spare THAWTE certificate lying around I&#8217;d be grateful: that will uniquely identify myself as the distributor. As for the latter, well, I&#8217;m afraid you&#8217;re just going to have to take my word that I&#8217;m not trying to do nefarious things to your desktop (given that my professional credibility hinges on it, that should be easy).</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>
<p>Caveat: It&#8217;s a bit of a memory Hog- 60MB. Trying to figure out how to fix that.</p>]]></content:encoded>
			<wfw:commentRss>http://www.practicalflash.com/articles/porting-pandora-to-the-desktop/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Adobe Announces Open Screen Project</title>
		<link>http://www.practicalflash.com/news/adobe-announces-open-screen-project/</link>
		<comments>http://www.practicalflash.com/news/adobe-announces-open-screen-project/#comments</comments>
		<pubDate>Thu, 01 May 2008 11:04:16 +0000</pubDate>
		<dc:creator>Michael Krotscheck</dc:creator>
		
		<category><![CDATA[News]]></category>

		<category><![CDATA[adobe]]></category>

		<category><![CDATA[flash]]></category>

		<category><![CDATA[flv]]></category>

		<category><![CDATA[open screen project]]></category>

		<category><![CDATA[open source]]></category>

		<category><![CDATA[strategy]]></category>

		<category><![CDATA[swf]]></category>

		<guid isPermaLink="false">http://www.practicalflash.com/news/adobe-announces-open-screen-project/</guid>
		<description><![CDATA[<p>This morning (well, at 12:01 AM) Adobe announced a large cross-industry collaborative effort called the <a href="http://www.adobe.com/openscreenproject/">Open Screen Project</a>. According to the marketing boilerplate, it is dedicated to driving consistent rich Internet experiences across televisions, personal computers, mobile devices, and consumer electronics.</p>
<p>What it really means is described in this article.</p>
]]></description>
			<content:encoded><![CDATA[<p>This morning (well, at 12:01 AM) Adobe announced a large cross-industry collaborative effort called the <a href="http://www.adobe.com/openscreenproject/" >Open Screen Project</a>. According to the marketing boilerplate, it is dedicated to driving consistent rich Internet experiences across televisions, personal computers, mobile devices, and consumer electronics.</p>
<p>What it really means is the following:</p>
<p><strong>Removing restrictions on use of the SWF and FLV/F4V specifications</strong></p>
<p>This was more of a licensing restriction if I&#8217;m not mistaken, meaning any device manufacturer can now make use of these formats. In practice you might see native (or embedded) implementations of .swf or .flv, including, say, your Tivo, Streaming Video on your XBox, PSP, Nokia, etc etc etc.</p>
<p><strong>Publishing the device porting layer APIs for Adobe Flash Player</strong></p>
<p>Flash Player has been annoying to push to other devices, largely because of the ridiculous number of handhelds that are out there. Getting it working for so many devices has been, quite simply, impractical, so instead they&#8217;ve opened up the lower level device calls of the flash player so anyone can port their own.</p>
<p>This particular one I find the most compelling, because of the names that are notably not on the list of partners: Google, Apple and Microsoft. Whether they are still in talks with these companies or not I honestly don&#8217;t know, but given that between the iPhone, Google Android and Windows Mobile they have significant sway in the device industry, not having them on the list seems a little odd. Mind you, <span style="font-style: italic;">everyone else</span> is on that list, so I&#8217;m wondering if Adobe&#8217;s trying to use the community to strongarm those three into adopting their runtime. Consider consumer A, who sees all kind of neat Flash/AIR apps on other devices, but doesn&#8217;t see them on his iPhone or his Windows Mobile device. Is he more likely to move? Would someone else be less likely to leave? I don&#8217;t know, but the strategic play by play will be very interesting to watch.</p>
<p><strong>Publishing the Adobe Flash® Cast™ protocol and the AMF protocol for robust data services</strong></p>
<p>We&#8217;ve heard rumors about this, but having these protocols public and formally supported by Adobe (rather than reverse engineered by the community) is a pretty big deal. Open projects like BlazeDS, AMFPHP and WebOrb can now support the entire protocol layers, and I think we&#8217;ll soon see live video streaming options for all of those platforms.</p>
<p><strong>Removing licensing fees – making next major releases of Adobe Flash Player and Adobe AIR for devices free</strong></p>
<p>Up until recently, Flash for a handheld device cost money. Soon, it won&#8217;t. There&#8217;s not much to this other than removal of the barriers to adoption for the consumer, and many handheld devices may come with the flash player pre-installed.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.practicalflash.com/news/adobe-announces-open-screen-project/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Judo Economics: Bringing Down Microsoft</title>
		<link>http://www.practicalflash.com/articles/judo-economics-bringing-down-microsoft/</link>
		<comments>http://www.practicalflash.com/articles/judo-economics-bringing-down-microsoft/#comments</comments>
		<pubDate>Thu, 24 Apr 2008 22:30:49 +0000</pubDate>
		<dc:creator>Michael Krotscheck</dc:creator>
		
		<category><![CDATA[Articles]]></category>

		<category><![CDATA[apple]]></category>

		<category><![CDATA[corporate strategy]]></category>

		<category><![CDATA[google]]></category>

		<category><![CDATA[judo economics]]></category>

		<category><![CDATA[microsoft]]></category>

		<category><![CDATA[nintendo]]></category>

		<guid isPermaLink="false">http://www.practicalflash.com/articles/judo-economics-bringing-down-microsoft/</guid>
		<description><![CDATA[<p>A few years ago I took what must have been one of the most entertaining courses of my graduate career: Business Game Theory. It was run using the Harvard Case method, but with no supporting textbook and no explanatory lectures before a case was assigned- we simply received a problem and were expected to solve it by the next lecture. The problems themselves were simple: we were given a situation and asked a fairly straightforward question. Should Company B enter a particular market, how will a competition play out, can you predict the next step in a competition given certain parameters, things like that. Most of us got the first problems blatantly wrong- the tacit requirement to do our own research didn't sink in until after the first discussion- yet after that reality check it became one of the most engaging classes ever: The problems were challenging but not beyond rational analysis, and though I spent hours at a time bending my brain around decision making in a risky environment and other situations, I can still name the topics and methodologies for every case.</p>
<p>As a result I was practically giddy when I recognized a real world example of Judo Economics, a situation where a player uses the strength of their opponent against them. Consider a simple case: There exist two markets for a single product and two companies that can produce said product. The first market is large, however serving it comes with a high cost and therefore a low margin. The second market is small, but serving it is cheap and therefore comes with a high margin. The first of the companies must serve both markets, has deep pockets, while the second is considering market entry, but can only serve one of the two. Each company can only set one price against both markets. The question posed is: What will happen?</p>
]]></description>
			<content:encoded><![CDATA[<p>A few years ago I took what must have been one of the most entertaining courses of my graduate career: Business Game Theory. It was run using the Harvard Case method, but with no supporting textbook and no explanatory lectures before a case was assigned- we simply received a problem and were expected to solve it by the next lecture. The problems themselves were simple: we were given a situation and asked a fairly straightforward question. Should Company B enter a particular market, how will a competition play out, can you predict the next step in a competition given certain parameters, things like that. Most of us got the first problems blatantly wrong- the tacit requirement to do our own research didn&#8217;t sink in until after the first discussion- yet after that reality check it became one of the most engaging classes ever: The problems were challenging but not beyond rational analysis, and though I spent hours at a time bending my brain around decision making in a risky environment and other situations, I can still name the topics and methodologies for every case.</p>
<p>As a result I was practically giddy when I recognized a real world example of Judo Economics, a situation where a player uses the strength of their opponent against them. Consider a simple case: There exist two markets for a single product and two companies that can produce said product. The first market is large, however serving it comes with a high cost and therefore a low margin. The second market is small, but serving it is cheap and therefore comes with a high margin. The first of the companies must serve both markets, has deep pockets, while the second is considering market entry, but can only serve one of the two. Each company can only set one price against both markets. The question posed is: What will happen?</p>
<p>The answer is as follows: The entrant will enter the smaller, more profitable market and undercut the larger company to the point where the larger company would suffer a net loss by matching their price. Why? Well, without drawing the decision tree it turns out that net profit for the system will be larger for the big company because the entrant can continue to undercut it until the margin in the smaller market disappears entirely. Quite simply, they cannot match the entrant because they are forced to serve the both markets. Ergo: Their strength is used against them.</p>
<h3>The Real World</h3>
<p>Now lets take this example to the real world: Microsoft is currently serving the vast majority of the desktop market. In fact, it&#8217;s difficult to imagine a desktop computer that doesn&#8217;t run Windows, and even in the laptop market they command a substantial segment. Microsoft has gone to great lengths to solidify their position within that market, releasing their own languages, developer toolkits, IDE&#8217;s and whatnot. Buy Microsoft, by Microsoft, for Microsoft, anything you want to do on a computer you can do with Microsoft.</p>
<p>Unfortunately, by winning the war for the desktop market they&#8217;ve now locked themselves into serving it, and as any marketer knows you can&#8217;t really segment a market that size perfectly, at least not without severely diluting your brand. At most we&#8217;ve seen three versions of Windows, usually targeted at the Office User, the Power User, and the Home User. From both a product management perspective and from a branding perspective they&#8217;re pushing the limit of how many versions of windows they can support, especially if you take into account all the legacy versions still in circulation.</p>
<p>The number of versions actually doesn&#8217;t really matter- what matters is that Microsoft has to charge a price that the majority of said segment is willing to pay while at the same time accommodating for the development cost of meeting the needs of the entire market. Some consumers might be willing to pay more than they&#8217;re charging, others less, and the end result is that the margins average out to something marginally profitable.</p>
<h3>The Competition</h3>
<p>This is where the case for Judo Economics begins to take shape. Microsoft in the late 90&#8217;s and early 00&#8217;s could serve the entire market and did so, winning a dominant position. Since then the competition has identified users&#8217; specialized needs and focused on them, effectively fragmenting the formerly homogenous user base of computer users into smaller segments: gamers, office workers, mobile computing, social networking, online productivity and so forth. They&#8217;ve each chosen their target market segment, have specialized their product offering for that particular segment, and are reaping the benefits of customers who are willing to pay more for a more specialized offering.</p>
<p>In the meantime, Mr. Gates still has to serve everyone else. The long and short is all the geeks who were angry about Microsoft&#8217;s antitrust practices vis-a-vis netscape and IE/browser integration/exclusion should have been cheering them on. A monolithic operating system and environment cannot be truly customized to the individual anymore, and they incur the massive cost of having to develop not only all the functionality they&#8217;ve supported up until now, but any new features that are identified in the market. In the world of the Long Tail their ability to meet all of a users <span style="font-style: italic;">general</span> needs rather than all of a users&#8217; <span style="font-style: italic;">specialized</span> needs puts them at a significant disadvantage which their competition is busily exploiting.</p>
<p>So who are the competition?</p>
<p><strong>Adobe</strong>: You might not think of Adobe as much of a competitor to Microsoft, however the recent introduction of Silverlight shows this is an area that Microsoft has identified as profitable (they&#8217;re good at identifying opportunity, I&#8217;ll give them that). Unfortunately Adobe has a lock on the real driving force behind the online experience: Designers. As long as they continue to focus on supporting them, the decisions of what technology to use will remain firmly in their court. Yes, purely technically designed websites and RIA&#8217;s will likely fall to Microsoft, but quite frankly I don&#8217;t think Adobe cares about serving the online accountant.</p>
<p><strong>Apple</strong>: In 1999, the book on this fight seemed to have been written. Apple soundly lost the battle for the desktop, and was classified even lower than Linux, a computing platform for rabid advocates that would eventually follow the Amiga into obscurity. And now where are they? Apple is sexy. Apple is hip. Apple is targeted at a consumer segment that is affluent and to some extent image conscious, taking those users away from Microsoft. All those fat margins that could have been earned by Bill are now wandering off to the upmarket offerings provided by Apple, who doesn&#8217;t ever want to be in the position of having to serve everyone&#8230; or do they? (more on this in another post).</p>
<p><strong>Nintendo</strong>: The XBox 360 is everywhere, Halo was a huge deal. We know that Microsoft was succesful here, and will continue to be so for the forseeable future. Yet this market shows some of the same signs as Apple&#8217;s position in the Desktop and Laptop market, because the XBox has become a commodity- everybody has one. Everyone does not have a Wii, and the speed at which they fly off the shelves shows a level of demand much like that of the iPod. The Wii is cool, while the XBox has become the console equivalent of a beige box. How this will play out in the long run is hard to say at this time, however given Redmond&#8217;s recent strategic moves into community gaming I feel they won&#8217;t give up their share so readily.</p>
<p><strong>Google</strong>: It&#8217;s hard not to mention Google here, and even though I think they&#8217;ve jumped the shark and will lose their innovative edge in the very near future, their dominance in the search market is too big to ignore (just look at the Yahoo hostile takeover- Microsoft&#8217;s not ignoring them). Here we once again have a company that has to do everything: browser, search, ads, etc, competing with a company that&#8217;s just really, really good at one or two of those. Guess which one is dominant? I thought so.</p>
<p>So that&#8217;s the argument in a nutshell: Microsoft has to serve the entire market, and as a result is too crippled to actually compete for the plumb market shares. Looking forward we can already see them becoming more aware of their situation though: The next version of windows is supposedly modular and thus more customizable to individuals&#8217; needs. They are attempting to acquire Yahoo, and opening up the XBox for community developers is a dangerously <a href="http://theopenbrand.resource.com/" >O.P.E.N.</a> tactic. I&#8217;m calling the score tied, lets see what happens in round three.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.practicalflash.com/articles/judo-economics-bringing-down-microsoft/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Class: StringProxy</title>
		<link>http://www.practicalflash.com/libraries/class-stringproxy/</link>
		<comments>http://www.practicalflash.com/libraries/class-stringproxy/#comments</comments>
		<pubDate>Fri, 18 Apr 2008 11:29:10 +0000</pubDate>
		<dc:creator>Michael Krotscheck</dc:creator>
		
		<category><![CDATA[Libraries]]></category>

		<category><![CDATA[actionscript]]></category>

		<category><![CDATA[flex]]></category>

		<category><![CDATA[localization]]></category>

		<guid isPermaLink="false">http://www.practicalflash.com/libraries/class-stringproxy/</guid>
		<description><![CDATA[<p>One of my many and varied tools from my localization sandbox, the StringsProxy is a generic object proxy container intended to simplify the management of large sets of application strings with little investment from the developer. It's effectively an implementation of the Proxy object that includes propertyChange event dispatching so that Data Binding works properly.</p>
]]></description>
			<content:encoded><![CDATA[<table class="package">
  <tbody>
    <tr>
      <th>Class</th>

      <td>com.practicalflash.utils.StringProxy</td>
    </tr>

    <tr>
      <th>Source</th>

      <td>[<a href="http://code.google.com/p/practicalflash/" >Google Code Repository</a>] [<a href="http://practicalflash.googlecode.com/svn/trunk/com/practicalflash/utils/StringProxy.as" >Direct Link</a>]</td>
    </tr>
  </tbody>
</table>
<p>One of my many and varied tools from my localization sandbox, the StringsProxy is a generic object proxy container intended to simplify the management of large sets of application strings with little investment from the developer. It&#8217;s effectively an implementation of the Proxy object that includes propertyChange event dispatching so that Data Binding works properly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.practicalflash.com/libraries/class-stringproxy/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
