<?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>misprintt blog</title>
	<atom:link href="http://blog.misprintt.net/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.misprintt.net</link>
	<description>[insert tagline here]</description>
	<lastBuildDate>Mon, 12 Jul 2010 14:00:27 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>making mx.rpc.xml.XMLDecoder play nice with xsi:type</title>
		<link>http://blog.misprintt.net/?p=216</link>
		<comments>http://blog.misprintt.net/?p=216#comments</comments>
		<pubDate>Mon, 24 Aug 2009 06:59:41 +0000</pubDate>
		<dc:creator>dom</dc:creator>
				<category><![CDATA[actionscript]]></category>
		<category><![CDATA[flex]]></category>

		<guid isPermaLink="false">http://blog.misprintt.net/?p=216</guid>
		<description><![CDATA[Utilising SchemaManager and SchemaTypeRegistry one can quickly register specific ActionScript classes with specific types defined within an xml schema (XSD). Once set up it is simply a matter of using XMLDecoder and XMLEncoder to automatically serialise between XML and ActionScript and voila! the work is done...
...That is unless you happen to have elements with your xml file that use an xsi:type attribute to indicate that their contents is actually that of a derivative element (such as an extension, restriction, etc). In these cases Flex just ignores the xsi:type and decodes against the original element type - which aint much help. What's suprisising is that the Flex classes have been built with xsi:type in mind (storing the type in custom classes implementing IXMLSchemaInstance), but just seems to have been missed when implementing XMLDecoder - always saves the element type in the xsitype property of IXMLSchemaInstance]]></description>
			<content:encoded><![CDATA[<p>In previous posts I have outlined how to use the inbuilt (and well hidden) XML Schema classes that are available in the mx.rpc.xml package in Flex.  Utilising SchemaManager and SchemaTypeRegistry one can quickly register specific ActionScript classes with specific types defined within an xml schema (XSD). Once set up it is simply a matter of using XMLDecoder and XMLEncoder to automatically serialise between XML and ActionScript and voila! the work is done.</p>
<p>That is unless you happen to have elements with your xml file that use an xsi:type attribute to indicate that their contents is actually that of a derivative element (such as an extension, restriction, etc). In these cases Flex just ignores the xsi:type and decodes against the original element type &#8211; which aint much help. What&#8217;s suprisising is that the Flex classes have been built with xsi:type in mind (storing the type in custom classes implementing IXMLSchemaInstance), but just seems to have been missed when implementing XMLDecoder &#8211; always saves the element type in the xsitype property of IXMLSchemaInstance</p>
<p>Whether you love it, <a href="http://norman.walsh.name/2004/01/29/trainwreck" target="_blank">hate it</a> or are just indifferent,  xsi:type is part of the XSD standard and all it takes is a few tweaks for Flex to handle it correctly.</p>
<p>I&#8217;ve included a CustomXMLDecoder class below, but firstly:</p>
<p><strong>A quick primer on xsi:type</strong></p>
<p>If you are unfamiliar with xsi:type here is  a quick example of it in action:</p>
<p>In an XSD file we have a complex type called user:</p>
<pre><span style="color: #0000ff;">&lt;xs:complexType name="User"&gt;
 &lt;xs:sequence&gt;
 &lt;xs:element name="username" type="xs:string" /&gt;
 &lt;xs:element name="password" type="xs:string" /&gt;
 &lt;/xs:sequence&gt;
 &lt;/xs:complexType&gt; </span></pre>
<p>And we have another complex type that is an extension of User called InternalUser :</p>
<pre><span style="color: #0000ff;">&lt;xs:complexType name="InternalUser"&gt;
 &lt;xs:complexContent&gt;
 &lt;xs:extension base="User" &gt;
 &lt;xs:sequence&gt;
 &lt;xs:element name="staffId" type="xs:string" /&gt;
 &lt;/xs:sequence&gt;
 &lt;/xs:extension&gt;
 &lt;/xs:complexContent&gt;
 &lt;/xs:complexType&gt;</span></pre>
<p>In an XML file implementing this schema we have a set of User elements. As you can see below one of which includes contains an xsi:type attribute that indicates that the contents is actually that of an InternalUser.</p>
<pre><span style="color: #0000ff;">&lt;user &gt;
 &lt;username&gt;joeCitizen&lt;/username&gt;
 &lt;password&gt;1234&lt;/password&gt;
 &lt;/user&gt;
 &lt;user xsi:type="InternalUser" &gt;
 &lt;username&gt;jamesBond&lt;/username&gt;
 &lt;password&gt;5678&lt;/password&gt;
 &lt;staffId&gt;007&lt;/staffId&gt;
 &lt;/user&gt;

</span></pre>
<p><span style="color: #000000;"><strong>CustomXMLDecoder</strong></span></p>
<p><span style="color: #0000ff;"> </span></p>
<p>After hours of trawling through  mx.rpc.xml.XMLDecoder, it was surprisingly straight forward to fix the shortcoming by overriding a couple of methods within XMLDecoder.</p>
<p>As an added tweak i&#8217;ve included a property to the class that determines the behaviour when attemptying to decode an xsi:type that hasn&#8217;t been registered with the SchemaTypeRegistry.</p>
<p><span style="color: #0000ff;"> ignoreXSITypeIfNotRegistered:Boolean = false;</span></p>
<p>If this property is set to true then the decoder will ignore an xsi:type that is not registered against an ActionScript class, and try to decode it against the original element type instead (esentially replicating the functionality of XMLDecoder). This ensures that unexpected xsi:type extensions to a element  are decoded as the element type rather than generic object proxies.</p>
<p>If the xsi:type is registered then it will always use it.</p>
<p>Here is the class:</p>
<p><span style="color: #0000ff;"> </span></p>
<pre><span style="color: #0000ff;">package
{
import mx.rpc.xml.*;</span></pre>
<pre><span style="color: #0000ff;">public class CustomXMLDecoder extends XMLDecoder
 {

 public function CustomXMLDecoder()
 {
 super();
 }

 /**
 * Set this flag if you want unregistered xsi types to be ignored (and objects to be decoded against the
 * base element type instread).
 * If the xsi type is registered then it will always be used over the base element type
 */
 public var ignoreXSITypeIfNotRegistered:Boolean = false;

 /**
 * Decodes a element based on the xsi:type. If the type isn't registered then it
 * checks the ignoreXSITypeIfNotRegistered property of the class.
 *
 * If true - decodes against the element type (and ignores the xsi:type)
 * If false - uses object proxy.
 */
 public override function decodeElementTopLevel(definition:XML, elementQName:QName, value:*):*
 {
 var content:*;

 if(value is XML)
 {
 var xsiType:QName = getXSIType(value);
 var isXSITypeRegistered:Boolean = typeRegistry.getClass(xsiType) != null

 if(xsiType != null &amp;&amp; (isXSITypeRegistered || ignoreXSITypeIfNotRegistered == false))
 {
 content = createContent(xsiType);
 decodeType(xsiType, content, elementQName, value);
 return content;
 }
 }
 return super.decodeElementTopLevel(definition, elementQName, value);
 }

 /**
 * Decodes agains the xsi:type (if available) rather than the defined element type
 */
 public override function decode(xml:*, name:QName=null, type:QName=null, definition:XML=null):*
 {
 if(xml is XML)
 {
 var xsiType:QName = getXSIType(xml);

 if(xsiType != null)
 type = xsiType;
 }
 return super.decode(xml, name, type, definition);
 }
}
</span></pre>
<p>Hope that helps other people out there  &#8211; as this was previously the only real show stopper for using the Schema classes in some of our projects.</p>
<p>&#8212;&#8212;&#8212;</p>
<p>One last thing,</p>
<p>Can anyone point out to how override the decoding of nested arrays of elements?</p>
<p>Ususally XML will be structured so that an array of items is wrapped within a parent element</p>
<p>e.g the child &#8216;item&#8217; elements are located within an &lt;items/&gt; element</p>
<pre><span style="color: #0000ff;">&lt;item&gt;
 &lt;name&gt;Parent&lt;/name&gt;
 &lt;items&gt;
   &lt;item &gt;
     &lt;name&gt;Child A&lt;/name&gt;
   &lt;/item&gt;
   &lt;item &gt;
     &lt;name&gt;Child B&lt;/name&gt;
   &lt;/item&gt;
 &lt;/items&gt;</span><span style="color: #0000ff;">
&lt;/item&gt;</span>
<span style="color: #0000ff;">
</span></pre>
<p>In Flex this data may be registered to a  class such as this one:</p>
<pre><span style="color: #0000ff;">package
{
 [Bindable]
 public class ItemVO
{
 public var name:String;
 public var items:ArrayCollection;

 public function ItemVO():void
 {
 }
}
}</span></pre>
<p>Unfortunately the decoder always includes the extra level when decoding &#8211; resulting in an ArrayCollection containing a single item (an ArrayCollection) that contains the array of items.</p>
<p>Does anyone know of a way to map this relationship better so that the items.item in the xml maps directly to the items ArrayCollection in the Class?</p>
<p>Ta,</p>
<p>Dom</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.misprintt.net/?feed=rss2&amp;p=216</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Adobe reopens discussion around the Flex 4 namespaces and the &#8216;Fx&#8217; prefix on components</title>
		<link>http://blog.misprintt.net/?p=203</link>
		<comments>http://blog.misprintt.net/?p=203#comments</comments>
		<pubDate>Wed, 11 Feb 2009 02:00:29 +0000</pubDate>
		<dc:creator>dom</dc:creator>
				<category><![CDATA[actionscript]]></category>
		<category><![CDATA[flex]]></category>

		<guid isPermaLink="false">http://blog.misprintt.net/?p=203</guid>
		<description><![CDATA[I don’t like reposting Flex related news; however I’m please to see that Adobe have decided to revisit their original naming strategy for the new Flex 4 components.

There is a good discussion happening on their forums on Flex 3/4 component compatibility – the distinction between flex 3 and flex 4 components, namespace/naming conventions, and IDE/documentation/CSS implications.
]]></description>
			<content:encoded><![CDATA[<p>[UPDATE] A decision has been made and the Fx prefix is no more &#8211; <a href="http://www.adobeforums.com/webx/.59b7e849" target="_blank">http://www.adobeforums.com/webx/.59b7e849</a></p>
<p>&#8212;&#8212;-</p>
<p>I don’t like reposting Flex related news; however I’m please to see that Adobe have decided to revisit their original naming strategy for the new Flex 4 components.</p>
<p>There is a good discussion happening on their forums on Flex 3/4 component compatibility – the distinction between flex 3 and flex 4 components, namespace/naming conventions, and IDE/documentation/CSS implications.</p>
<p>It is a response to the community’s criticism of the whole “Fx” thing – naming the new Flex 4 components with a class prefix to distinguish them – such as “FxButton, “FxList”, etc.</p>
<p>Most developers seem to agree that separate namespaces for the halo and spark (gumbo) components would be most consistent and future proof and doesn’t further complicate usage considering that most developers already utilise additional namespaces for custom components and 3rd party libraries.</p>
<p>The general consensus seems to support three namespaces – the default for language specific elements – e.g. &lt;Style&gt;, &lt;Script&gt;), and two separate namespaces for the Flex 3 and Flex 4 components ( e.g. &#8211; &lt;mx:Button&gt; and &lt;fx:Button&gt;)</p>
<p>I have to agree that this solution is preferable over the original “Fx” class name prefix strategy. A key concern/priority for Adobe seems to be minimizing the complexity of the initial learning curve for new Flex developers (part of their reasoning behind choosing class prefixes over additional namespaces).</p>
<p>I agree with this concern, but believe that due to the overlapping functionality within the two component sets, any proposed solution is going to increase this complexity but at least the latter provides a consistent usage of xml namespace that existing flex developers will understand immediately, and new developers will appreciate in time.<br />
Adobe is due to finalise their decision soon, and the discussion is ongoing.</p>
<p>Forum discussion here:<br />
<a href="http://www.adobeforums.com/webx?128@@.59b7cdf0">http://www.adobeforums.com/webx?128@@.59b7cdf0</a></p>
<p>Original Post here:<br />
<a href="http://davidzuckerman.com/adobe/2009/02/10/help-us-decide-where-to-go-with-flex-4/">http://davidzuckerman.com/adobe/2009/02/10/help-us-decide-where-to-go-with-flex-4/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.misprintt.net/?feed=rss2&amp;p=203</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flex 3, XML Schemas &amp; automatic mapping of AS classes to XSD element definitions (Part 2)</title>
		<link>http://blog.misprintt.net/?p=192</link>
		<comments>http://blog.misprintt.net/?p=192#comments</comments>
		<pubDate>Mon, 01 Dec 2008 07:28:39 +0000</pubDate>
		<dc:creator>dom</dc:creator>
				<category><![CDATA[actionscript]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[massive]]></category>

		<guid isPermaLink="false">http://blog.misprintt.net/?p=192</guid>
		<description><![CDATA[This is a set of posts documenting my experiences with utilising functionality within the Flex SDK that provides the automatic mapping of custom ActionScript classes to element definitions within an XML Schema (XSD).
1.  Part 1 &#8211; Introduction and background
2.  Part 2 &#8211; Overview of Flex&#8217;s XML Schema classes (inc example code)
Part 2 &#8211; Overview of [...]]]></description>
			<content:encoded><![CDATA[<p>This is a set of posts documenting my experiences with utilising functionality within the Flex SDK that provides the automatic mapping of custom ActionScript classes to element definitions within an XML Schema (XSD).</p>
<p>1.  <a title="Part 1 - Introduction and background" href="http://blog.misprintt.net/wp-trackback.php?p=181" target="_self">Part 1 &#8211; Introduction and background</a><br />
2.  Part 2 &#8211; Overview of Flex&#8217;s XML Schema classes (inc example code)</p>
<p><strong>Part 2 &#8211; Overview of Flex&#8217;s XML Schema classes (including example code)<br />
</strong></p>
<p><strong></strong>This post covers how to take advantage of these classes (including example code) &#8211; as at the time of writing there doesn&#8217;t seem to be any discussion of these features by Adobe or the community at large. I&#8217;ll also list a few caveats we have come across in using these classes.</p>
<p><span id="more-192"></span></p>
<p>First things first. The set of classes I will be referring to are found in the mx.rpc.xml package. If you look at the official <a title="mx.rpc.xml package" href="http://livedocs.adobe.com/flex/3/langref/mx/rpc/xml/package-detail.html" target="_blank">documentation</a> you will only find a handful of classes that support simple XML encoding and decoding. This is because the majority of the classes relating to XML Schema contain [ExcludeClass] metadata that excludes them from documentation and code hinting.</p>
<p>The easiest way to get visibility of these classes in your code is to place a copy of this package in your project and comment out all the [ExcludeClass] tags above the class definitions.</p>
<p>The key classes are:</p>
<ul>
<li>SchemaManager (manages multiple schema definitions)</li>
<li>Schema (manages a single XML Schema Definition)</li>
<li>SchemaLoader (manages the loading of an XML schema (including any imports/includes) at runtime)</li>
<li>SchemaTypeRegistry (maps an XML schema type to an ActionScript Class)</li>
<li>XMLDecoder (decodes an XML document into ActionScript objects based on a XML Schema definition</li>
<li>XMLEncoder (encodes an ActionScript object into XML based of an XML Schema)</li>
</ul>
<p><strong>Example and explanation:</strong></p>
<p>A really basic example Flex app that covers the core functionality of these classes can be viewed <a title="Example application" href="http://misprintt.net/examples/xmlSchema/" target="_blank">here</a> (right click for <a title="Source for example app" href="http://misprintt.net/examples/xmlSchema/srcview/index.html" target="_blank">source</a>).</p>
<p>The primary steps are outlined below:</p>
<p>1. Create an instance of SchemaLoader and asynchronously load an XML schema from a given URL</p>
<p>This automatically loads any other schemas that are defined in XSD import or include elements.</p>
<pre style="padding-left: 30px;">schemaLoader = new SchemaLoader();
schemaLoader.addEventListener(SchemaLoadEvent.LOAD, schemaLoader_loadHandler);
schemaLoader.load("example.xsd");</pre>
<p>2. Once the schema is loaded, add it to the SchemaManager and register any ActionScript classes to their corresponding schema type:</p>
<pre style="padding-left: 30px;">private function schemaXMLLoader_loadHandler(event:SchemaLoadEvent):void
{
    schema = event.schema;
    schemaManager.addSchema(schema);
    schemaTypeRegistry.registerClass(new QName(schema.targetNamespace.uri, "example"), ExampleVO);
}</pre>
<p>3. Load an XML file based off that schema.</p>
<p>4. Once the XML is loaded, decode the contents using XMLDecoder. Any classes registered in the schemaTypeRegistry will be used when decoding the xml</p>
<pre style="padding-left: 30px;">var xmlDecoder:XMLDecoder;
var qName:QName;
var result:*;

xmlDecoder = new XMLDecoder();
xmlDecoder.schemaManager = schemaManager;

qName = new QName(schema.targetNamespace.uri, "results");
result = xmlDecoder.decode(xml, qName)</pre>
<p>5. Encode a custom ActionScript class back into XML using XMLEncoder. XMLEncoder.encode() supports various ways to define the corresponding element in the schema  (top level element, a specific type or even a custom XSD definition) that will be used to encode the Actionscript object.</p>
<pre>var qName:QName;
var xmlEncoder:XMLEncoder;
var xmlList:XMLList;

qName = new QName(schema.targetNamespace.uri, "Example");
xmlEncoder = new XMLEncoder();
xmlEncoder.schemaManager = schemaManager;
xmlList = xmlEncoder.encode(exampleVO, qName);</pre>
<p>For futher explaination check out the <a title="Souce for example app" href="http://misprintt.net/examples/xmlSchema/srcview/index.html" target="_blank">source</a> inside the example applicatio.</p>
<p><strong>Issues and Notes<br />
</strong></p>
<p>There are a few things to be aware of when using these classes.</p>
<p>1. It requires a XML Schema to already be in memory when decoding a loaded XML file. As this is an asynchronous task it is best to load the schemas required before loading any XML files based off them. The alternative is to check each XML file for schema information when they load, and delay the decoding of the data until that schema has then loaded. This would require additional checks and steps each time xml data is loaded.</p>
<p>2. Any additional schemas included or imported within the top level schema loaded by SchemaLoader must be referenced using an absolute path. This is because SchemaLoader assumes that relative paths are relative to the main application swf URL (and not relative to the original XSD url).  As these two locations are unlikely to be the same in a real world project, changing these URLs to be relative to the swf will make it work with Flex, but will prevent any other XSD editor from being able to find the corresponding includes or imports.</p>
<p>As this will be an issue when relying on any XML API using relative paths that is outside the direct control of the Flex developer, I would say this is a bug and have submitted it to Adobe as such (<a href="http://bugs.adobe.com/jira/browse/SDK-16119" target="_blank">link</a>). Feel free to add your support to it.</p>
<p><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</strong></p>
<p><strong>UPDATE July 2010</strong></p>
<p>I&#8217;ve  created an updated version of this example project that demonstrates some of the more advanced scenarios that people have posted questions about. This version targets flex 4.0 &#8211; but the code base is essentially identical to the old 3.x versions. I&#8217;d always recommend targeting the most recent 3.x or 4.x version of the flex rpc library as the flex team seem to make improvements in every release. Having said that, these mx.rpc libraries aren&#8217;t something i&#8217;m using on a regular basis &#8211; so i&#8217;m not actively checking what&#8217;s new or changed in each release.</p>
<p>This example includes the following additional scenarios/use cases:</p>
<ul>
<li>encoding to multiple ActionScript classes</li>
<li>encoding/decoding from multiple actionscript classes</li>
<li>encoding/decoding attributes as well as elements</li>
<li>nested child elements decoding to an ArrayCollection</li>
<li>basic validation of an XML file against the XSD</li>
</ul>
<p>view it <a href="http://misprintt.net/examples/xmlSchema_flex4/Flex4_XML_Schema_Test.html  ">here</a> (right click to view source)</p>
<p><img src="file:///C:/DOCUME%7E1/dominic/LOCALS%7E1/Temp/moz-screenshot.jpg" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.misprintt.net/?feed=rss2&amp;p=192</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Flex 3, XML Schemas &amp; automatic mapping of AS classes to XSD element definitions (Part 1)</title>
		<link>http://blog.misprintt.net/?p=181</link>
		<comments>http://blog.misprintt.net/?p=181#comments</comments>
		<pubDate>Mon, 01 Dec 2008 03:03:43 +0000</pubDate>
		<dc:creator>dom</dc:creator>
				<category><![CDATA[actionscript]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[massive]]></category>

		<guid isPermaLink="false">http://blog.misprintt.net/?p=181</guid>
		<description><![CDATA[This is a set of posts documenting my experiences with utilising functionality within the Flex SDK that provides the automatic mapping of custom ActionScript classes to element definitions within an XML Schema (XSD).
1.  Part 1 &#8211; Introduction and background
2.  Part 2 &#8211; Overview of Flex’s XML Schema classes (inc example code) 
Part 1 &#8211; Introduction [...]]]></description>
			<content:encoded><![CDATA[<p>This is a set of posts documenting my experiences with utilising functionality within the Flex SDK that provides the automatic mapping of custom ActionScript classes to element definitions within an XML Schema (XSD).</p>
<p>1.  Part 1 &#8211; Introduction and background<br />
2.  <a title="Part 2 - Overview of Flex’s XML Schema classes (inc example code)" href="http://blog.misprintt.net/wp-trackback.php?p=192" target="_self">Part 2 &#8211; Overview of Flex’s XML Schema classes (inc example code) </a></p>
<p><strong>Part 1 &#8211; Introduction and background</strong></p>
<p>This post explains some reasons on why the automated mapping of ActionScript classes to XML Schema definitions can be a better alternative to other data integration options available to Flex (in certain circumstances).</p>
<p><span id="more-181"></span></p>
<p><strong>Preface</strong></p>
<p>Earlier in the year we were re-evaluating the various data formats available, in order to determine which options required the least amount of hand crafted serialisation for both the front end (Flex) and the backend (at <a title="Massive Interactive" href="http://massive.com.au" target="_blank">Massive</a> this is almost always .NET, however a significant proportion of our applications rely on 3rd party back ends utilising all manor of technologies).</p>
<p>We have utilised pretty much all data formats at some point or another (remoting with WebORB and Fluorine, JSON, SOAP and XML), they all have their pros and cons depending on the nature of project. Also, our .NET team generally prefer XML based <a title="REST (Representational State Transfer)" href="http://en.wikipedia.org/wiki/REST" target="_blank">REST</a> API&#8217;s over SOAP/Remoting, as (among other things) these can be easily debugged in a browser, and are more easily cached (a factor that becomes significant when determining the scalability of large projects with high levels of data transfer). They also don&#8217;t tie the output from the server to a specific frontend solution (ie Flex/Flash) as is the case with remoting.</p>
<p>Flex provides functionality to automatically convert pretty much all the raw data types into primitive ActionScript objects, however apart from explicitly mapping ActionScript classes to server objects using remoting and [RemoteClass] none of the others support automated serialisation to and from custom ActionScript classes. So pretty much every data format requires some sort of manual serialisation (i.e custom code) to convert the data from the server into instances of specific classes (such as value objects &#8211; VOs) within the application.</p>
<p>Our aim was to determine if there was an existing solution that required minimal effort (code) on both the front end and back end that would facilitate automatic mapping of data between the server objects and ActionScript classes, and not limit the ability to cache common requests on the server.</p>
<p><strong>Introduction</strong></p>
<p>It was about then that I stumbled across the suite of XML Schema classes available in Flex 3 in the mx.rpc.xml package.  It allows you to encode/decode an XML document at run time using it&#8217;s referenced XML Schema (XSD). Not only does this automatically convert to and from primitive XSD elements (something the Flex SOAP classes also support &#8211; a good example being xsd:DateTime into a Date object), but <strong>more importantly</strong>, it allows you to register specific ActionScript class definitions against element definitions defined within the XSD using the following syntax:</p>
<pre>SchemaTypeRegistry.getInstance().registerClass("ns::example", ExampleVO);</pre>
<p>This means that the content of any XML document that references a valid XSD schema can be automattically serialised into strongly typed ActionScript objects without any manual parsing/populating of the data.</p>
<p>If you look at the documentation for the <a title="mx.rpc.xml package" href="http://livedocs.adobe.com/flex/3/langref/mx/rpc/xml/package-detail.html" target="_blank">mx.rpc.xml package</a> you will only see a handful of classes that support simple XML encoding and decoding. This is because the majority of the classes relating to XML Schema contain [ExcludeClass] metadata that excludes them from documentation and code hinting.</p>
<p>At the time I did a few google searches on this topic that turned up nothing, which is surprising as this approach provides some of the key befits of remoting just by including XSD schema definitions along side an XML document/API.</p>
<p>In my next post I will run through the various classes in use, provide a simple example showing how they work and explain some of the cavets I have found.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.misprintt.net/?feed=rss2&amp;p=181</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Flex: ObjectUtil.copy() throws errors for classes with custom namespace properties.</title>
		<link>http://blog.misprintt.net/?p=179</link>
		<comments>http://blog.misprintt.net/?p=179#comments</comments>
		<pubDate>Tue, 26 Feb 2008 10:27:53 +0000</pubDate>
		<dc:creator>dom</dc:creator>
				<category><![CDATA[actionscript]]></category>
		<category><![CDATA[flex]]></category>

		<guid isPermaLink="false">http://blog.misprintt.net/?p=179</guid>
		<description><![CDATA[The easiest way to clone an instance of a class in Flex is to use the inbuilt ObjectUtil.copy() . This function serialises the entire object into an array of bytes and then deserialises it back into a completely new instance of that class. All that needs to be added to a class to ensure that [...]]]></description>
			<content:encoded><![CDATA[<p>The easiest way to clone an instance of a class in Flex is to use the inbuilt ObjectUtil.copy() . This function serialises the entire object into an array of bytes and then deserialises it back into a completely new instance of that class. All that needs to be added to a class to ensure that it is correctly deserialised is to include the [RemoteClass] metadata tag above the class definition.</p>
<p>Rather than explaining it all here, I suggest you have a read of <a href="http://www.darronschall.com/weblog/" target="_blank">Darron Schall</a>&#8217;s explanation of it <a href="http://www.darronschall.com/weblog/archives/000271.cfm" target="_blank">here</a>.</p>
<p>I&#8217;ve used this method for cloning custom objects in several projects without issue, but when I implemented this functionality in a current project, everytime I called ObjectUtil.copy() I received the following error:</p>
<pre><font color="#ff0000">ArgumentError: Error #2004: One of the parameters is invalid.
    at flash.utils::ByteArray/writeObject()</font></pre>
<p>There is only one parameter for ObjectUtil.copy() &#8211; the object to be copied, so obviously there was something in one of my classes that didn&#8217;t like being deserialised. Unfortunately by this time there was already a reasonable inheritance chain going in my classes, and eventually I had to start stripping bits out of my classes (and superclasses) until the error went away.</p>
<p>It turns out that the culprit was a custom namespace property in my superclass. Whenever the namespace was defined, ByteArray.writeObject() fails to deserialise the byte array, and the copy fails.</p>
<pre><font color="#0000ff">package
{
    [RemoteClass]
    public class Example
    {
        public var ns:Namespace = new Namespace("http://www.misprintt.net");

        public function Example()
        {

        }
    }
}</font></pre>
<p>Cloning an instance of this class will always throw an error:</p>
<pre><font color="#0000ff">var example:</font><font color="#0000ff">Example</font><font color="#0000ff">();</font><font color="#0000ff">= new </font><font color="#0000ff">Example</font><font color="#0000ff">();
var o:Object = ObjectUtil.copy(</font><font color="#0000ff">example</font><font color="#0000ff">);
</font></pre>
<p>Luckily the solution is also describe in Darron&#8217;s <a href="http://www.darronschall.com/weblog/archives/000271.cfm" target="_blank">post</a>. While he doesn&#8217;t indentify what problems he was having, he explains how he used the [Transient] metadata tag to avoid issues with ObjectUtil.copy().</p>
<p>So now that the culprit has been identified, it is just a matter of adding the [Transient] metadata tag to avoid the namespace being serialised in the first place.</p>
<pre><font color="#0000ff">package
{
    [RemoteClass]
    public class Example
    {</font></pre>
<pre><font color="#0000ff">	[Transient]
        public var ns:Namespace = new Namespace("http://www.misprintt.net");

        public function Example()
        {

        }
    }
}</font></pre>
<pre></pre>
<p>Anyway, hopefully this saves some time for those trying to decipher yet another one of those vague flash player errors :)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.misprintt.net/?feed=rss2&amp;p=179</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Limitations of Drag And Drop animations in Flex</title>
		<link>http://blog.misprintt.net/?p=177</link>
		<comments>http://blog.misprintt.net/?p=177#comments</comments>
		<pubDate>Mon, 12 Nov 2007 05:23:20 +0000</pubDate>
		<dc:creator>dom</dc:creator>
				<category><![CDATA[flash]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[massive]]></category>
		<category><![CDATA[user interface]]></category>

		<guid isPermaLink="false">http://blog.misprintt.net/?p=177</guid>
		<description><![CDATA[One of the key benefits of using Flex for the end user is a consistent experience when interacting with on screen elements. While the look/skin can vary greatly, the underlying behaviours remain consistent, making the site or application more usable. While Flex provides a default implementation to each step in an interaction, it generally allows [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial">One of the key benefits of using Flex for the end user is a consistent experience when interacting with on screen elements. While the look/skin can vary greatly, the underlying behaviours remain consistent, making the site or application more usable. While Flex provides a default implementation to each step in an interaction, it generally allows customization of the visual state through the various events associated with each component type. Hence we have custom animations and transitions between states to implement the most appropriate behaviour in an individual project.<o></o></span></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial">A good example of this is Flex’s inbuilt Drag and Drop. Generally on the web, drag and drop functionality varies greatly from implementation to implementation. Many cases don’t provide enough visual feedback to the user to fully utilise the benefits of a drag and drop system – easy, direct manipulation of information on screen.<o></o></span></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial">Drag and Drop functionality within Flex is pretty solid. It works out of the box with inbuilt components, and adding it to custom components is relatively straight forward (once you understand the order of all the events in a drag-drop interaction by reading this PDF- <a href="http://blogs.adobe.com/flexdoc/pdf/dragdrop.pdf">http://blogs.adobe.com/flexdoc/pdf/dragdrop.pdf</a>). It also allows for a reasonable amount of customization to the visual states during a drag-drop process, with the exception below.<o></o></span></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial">Flex provides two possible behaviours when an object is dropped:<o></o></span></p>
<ol style="margin-top: 0cm" start="1" type="a">
<li class="MsoNormal"><span style="font-size: 10pt; font-family: Arial">The drop is rejected and the      dragged item animates back to it’s original position<o></o></span></li>
<li class="MsoNormal"><span style="font-size: 10pt; font-family: Arial">The drop is accepted and the      dragged item animates into the new position.<o></o></span></li>
</ol>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial">These behaviours are correct, however there is no means to override the actual animations that occur as a result of these behaviours, so we are stuck with the following “zoom to mouse position” transition when a drop is accepted (from mx.managers.dragClasses.DragProxy) :<o></o></span></p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal"><em><span style="font-size: 10pt">// Zoom into mouse location to show drag was accepted.</span></em><span style="font-size: 10pt"><o></o></span><br />
<strong><span style="font-size: 10pt">var</span></strong><span style="font-size: 10pt"> e:Zoom = </span><strong><span style="font-size: 10pt">new</span></strong><span style="font-size: 10pt"> Zoom(</span><strong><span style="font-size: 10pt">this</span></strong><span style="font-size: 10pt">);</span><span style="font-size: 10pt"><o></o><br />
e.zoomWidthFrom = e.zoomHeightFrom = 1.0;</span><span style="font-size: 10pt"><o></o><br />
e.zoomWidthTo = e.zoomHeightTo = 0;</span><span style="font-size: 10pt"><o></o><br />
e.duration = 200;</span><span style="font-size: 10pt"><o></o><br />
e.play();</span><span style="font-size: 10pt"><o></o></span><strong><span style="font-size: 10pt"></span></strong></p>
<p class="MsoNormal"><strong><span style="font-size: 10pt">var</span></strong><span style="font-size: 10pt"> m:Move = </span><strong><span style="font-size: 10pt">new</span></strong><span style="font-size: 10pt"> Move(</span><strong><span style="font-size: 10pt">this</span></strong><span style="font-size: 10pt">);</span><span style="font-size: 10pt"><o></o><br />
m.addEventListener(EffectEvent.EFFECT_END, effectEndHandler);</span><span style="font-size: 10pt"><o></o><br />
m.xFrom = x;</span><span style="font-size: 10pt"><o></o><br />
m.yFrom = </span><strong><span style="font-size: 10pt">this</span></strong><span style="font-size: 10pt">.y;</span><span style="font-size: 10pt"><o></o><br />
m.xTo = parent.mouseX;</span><span style="font-size: 10pt"><o></o><br />
m.yTo = parent.mouseY;</span><span style="font-size: 10pt"><o></o><br />
m.duration = 200;</span><span style="font-size: 10pt"><o></o><br />
m.play();</span><span style="font-size: 10pt; font-family: Arial"><o></o></span>
</p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial">This transition may work well when dragging data from one list to another (which is the most common use case when using the inbuilt components), but can look a bit much when dragging a large container around the screen.<o></o></span></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial">You drag an object from one area of the screen to another, and when you release the mouse it scales down into obscurity before appearing in its new position. There should be a means to override this default effect.<o></o></span></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial">In this <a href="http://www.misprintt.net/examples/dragDrop/index.html" target="_blank">example</a> try dropping the item in the bottom right corner of one of the (white) drop areas. This transition looks wrong as the mouse coordinates are not always the intended final destination of the dropped object.<o></o></span></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial">Basically there should be some way to define or override the animation that occurs on a successful drop event. It seems surprising that this animation is hardcoded within the framework, while every other visual state during the drag/drop operation is customisable.</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial">I know it is hardly a show stopper, but I&#8217;ve submitted an enhancement request to the Flex Bug and Issue Management System (<a href="https://bugs.adobe.com/jira/browse/SDK-13472">https://bugs.adobe.com/jira/browse/SDK-13472</a>) as it is an UI issue that has already arisen in one of our commercial projects. </span></p>
<p class="MsoNormal"> &#8211; D</p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial"></span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.misprintt.net/?feed=rss2&amp;p=177</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>As predicted &#8211; Banner ads take over the internet</title>
		<link>http://blog.misprintt.net/?p=174</link>
		<comments>http://blog.misprintt.net/?p=174#comments</comments>
		<pubDate>Wed, 31 Oct 2007 03:26:14 +0000</pubDate>
		<dc:creator>dom</dc:creator>
				<category><![CDATA[flash]]></category>
		<category><![CDATA[general]]></category>
		<category><![CDATA[massive]]></category>

		<guid isPermaLink="false">http://blog.misprintt.net/?p=174</guid>
		<description><![CDATA[
Click on the image for the full sized version.
And if you don&#8217;t believe me &#8211; here&#8217;s the evidence: http://coldfusion.sys-con.com/read/450703.htm
The International War Crimes tribunal is probably not the right place to report atrocities such as this, but I&#8217;m sure it breaks some part of the Geneva Convention.
And why  do so many people blame Flash when [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.misprintt.net/wp-content/uploads/2007/10/banner_ads.jpg" title="banner ads take over the internet"><img src="http://blog.misprintt.net/wp-content/uploads/2007/10/banner_ads_small.jpg" alt="Banner ads take over the internet (small)" /></a></p>
<p>Click on the image for the full sized version.</p>
<p>And if you don&#8217;t believe me &#8211; here&#8217;s the evidence: <a href="http://coldfusion.sys-con.com/read/450703.htm" target="_blank">http://coldfusion.sys-con.com/read/450703.htm</a></p>
<p>The International War Crimes tribunal is probably not the right place to report atrocities such as this, but I&#8217;m sure it breaks some part of the <a href="http://en.wikipedia.org/wiki/Geneva_Conventions" target="_blank">Geneva Convention</a>.</p>
<p>And why  do so many people blame Flash when they see a page like this? Flash is just the <a href="http://en.wikipedia.org/wiki/Tool" target="_blank">tool</a>, not the actual <a href="http://en.wikipedia.org/wiki/Tool_%28insult%29" target="_blank">tool</a> who thought it was a good idea to combine a floating ad, an expanding ad, two video ads, and three banner ads on the top of a single page (and there is more if you scroll down).</p>
<p>There are so many guilty parties involved &#8211; including the webmaster, the online advertisers, and <em>especially </em>the person who invented the eyeblaster.</p>
<p>Rant over and out,</p>
<p>Dom</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.misprintt.net/?feed=rss2&amp;p=174</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Nasty FDT bug &#8211; renaming a project with &#8220;refactoring&#8221; selected</title>
		<link>http://blog.misprintt.net/?p=172</link>
		<comments>http://blog.misprintt.net/?p=172#comments</comments>
		<pubDate>Mon, 30 Apr 2007 00:41:40 +0000</pubDate>
		<dc:creator>dom</dc:creator>
				<category><![CDATA[actionscript]]></category>
		<category><![CDATA[massive]]></category>

		<guid isPermaLink="false">http://blog.misprintt.net/?p=172</guid>
		<description><![CDATA[The FDT plugin for Eclipse is a great piece of software (way way better than other flash plugins for Eclipse such as ASDT and FlexBuilder).  I use it for all my AS2 flash development. However it has always had some issues with the location of the intrinsic core ActionScript classes in Flash 8 because [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.powerflasher.com/fdt/" title="FDT" target="_blank">FDT</a> plugin for Eclipse is a great piece of software (way way better than other flash plugins for Eclipse such as ASDT and FlexBuilder).  I use it for all my AS2 flash development. However it has always had some issues with the location of the intrinsic core ActionScript classes in Flash 8 because they reside in a FP7 or FP8 directory (see forum post <a href="http://fdt.powerflasher.com/forum/viewtopic.php?t=360" target="_blank">here</a> and solution <a href="http://fdt.powerflasher.com/forum/viewtopic.php?t=360" target="_blank">here</a>).</p>
<p>While this solution solves the problem of FDT not recognising intrinsic classes such as Object and String, It doesn&#8217;t resolve a very nasty potential bug.</p>
<p><strong>DON&#8217;T</strong> rename a project if you have selected &#8220;Refactoring&#8221; &#8211; &#8220;Flash Explorer File Operations&#8221; in the FDT preferences.</p>
<p><img src="http://blog.misprintt.net/wp-content/uploads/2007/04/fdt.gif" alt="FDT preferences" /></p>
<p>What happens is it refactors all the intrinsic classes in the core library and renames all the classes in the FP7 and FP8 folders as if the folders were package names. E.g. Object becomes FP8.Object, String becomes FP8.String.</p>
<p>This causes FDT all kinds of problems, and Eclipse hangs while trying to refresh the workspace (while consuming 100% CPU).</p>
<p>This has happened to me on several occasions and it took me hours to work out the issue &#8211; i tried cleaning out all the cache and project metadata from eclipse, I tried reinstalling the FDT plugin, all with no success. I eventually set up a new workspace and imported a single project and eventually discovered what had happened.</p>
<p>The only solution is to copy over the core classes (C:\Program Files\Macromedia\Flash 8\en\First Run\Classes) with a fresh copy, or go through and re-edit each intrinsic class.</p>
<p>I&#8217;ve posted the bug <a href="http://www.powerflasher.com/fdt/forum/viewtopic.php?p=2455#2455" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.misprintt.net/?feed=rss2&amp;p=172</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>to Boolean &#124;&#124; not to Boolean</title>
		<link>http://blog.misprintt.net/?p=171</link>
		<comments>http://blog.misprintt.net/?p=171#comments</comments>
		<pubDate>Tue, 24 Apr 2007 02:12:28 +0000</pubDate>
		<dc:creator>dom</dc:creator>
				<category><![CDATA[actionscript]]></category>
		<category><![CDATA[massive]]></category>

		<guid isPermaLink="false">http://blog.misprintt.net/?p=171</guid>
		<description><![CDATA[I was looking for an simpler way of setting default values for function parameters in ActionScript2. The way I usually do this is something along the lines of:
function set value(s:String):Void
{
if(s == undefined) _value = s;
else _value = "default";
}
One option is using a logical OR operator to set default values. For example:
function set value(s:String):Void
{
_value = s [...]]]></description>
			<content:encoded><![CDATA[<p>I was looking for an simpler way of setting default values for function parameters in ActionScript2. The way I usually do this is something along the lines of:</p>
<p><code>function set value(s:String):Void<br />
{<br />
if(s == undefined) _value = s;<br />
else _value = "default";<br />
}</code></p>
<p>One option is using a logical OR operator to set default values. For example:</p>
<p><code>function set value(s:String):Void<br />
{<br />
_value = s || "default";<br />
}</code></p>
<p>According to the flash <a href="http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00001841.html" title="Logical OR operator" target="_blank">LiveDocs</a> a non-Boolean logical OR operation first converts the first operand (i.e. the expression on the left of the ||) to Boolean and if true returns the resolved value of the first operand. Otherwise it will return the resolved value of the second operand (expression on the right of the ||)</p>
<p>In the use case above it works fine, but after exploring the non-boolean implementation of the OR operator we found the following behaviour.  In both the string literal (&#8220;hey&#8221;) and the string variable (s), the Boolean value equals true, but when placed in a logical OR operation they return different results. See below:</p>
<p><code>var s:String;<br />
s = "hey";<br />
trace(Boolean(s));//true<br />
trace(Boolean("hey") //true<br />
trace("hey" || "dude");//"dude"<br />
trace(s || "dude");//"hey"</code></p>
<p>Can anyone explain why the String literal is treated differently than a variable containing a String literal?</p>
<p>Oh and word up to <a href="http://http://flashmonkey.servehttp.com/wordpress" title="flash monkey" target="_blank">Ian</a> on this one for his input :)</p>
<p>[UPDATE] I know I could have gone with &#8220;toBoolean() || !toBoolean()&#8221; for the title but I think that is taking it a little too far.</p>
<p>[UPDATE 2] The only gotcha with this approach is with numbers as a value of zero converts to false.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.misprintt.net/?feed=rss2&amp;p=171</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Taming the code library</title>
		<link>http://blog.misprintt.net/?p=168</link>
		<comments>http://blog.misprintt.net/?p=168#comments</comments>
		<pubDate>Fri, 30 Mar 2007 06:53:17 +0000</pubDate>
		<dc:creator>dom</dc:creator>
				<category><![CDATA[actionscript]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[general]]></category>
		<category><![CDATA[massive]]></category>

		<guid isPermaLink="false">http://blog.misprintt.net/?p=168</guid>
		<description><![CDATA[I attended WEBDU the other week and had some thoughts after listening to one of the sessions &#8211; Geoff Bowers&#8217; &#8220;taming the code&#8221;.
Amazingly over half the people in the audience weren&#8217;t using any form of version control. While we&#8217;ve been using version control for a few years now on our flash projects, It made me [...]]]></description>
			<content:encoded><![CDATA[<p>I attended <a href="http://www.webdu.com.au/" target="_blank" title="webdu">WEBDU</a> the other week and had some thoughts after listening to one of the sessions &#8211; Geoff Bowers&#8217; &#8220;taming the code&#8221;.</p>
<p>Amazingly over half the people in the audience weren&#8217;t using any form of version control. While we&#8217;ve been using version control for a few years now on our flash projects, It made me think about the development methodologies and processes that we have developed in the flash team at <a href="http://www.massive.com.au" target="_blank">Massive</a> over the last few years, specifically in relation to maintaining a common centralised code base.</p>
<p>The way i see it, there are two types of common code libraries &#8211; constant and evolving.</p>
<p><strong>Constant code base</strong><br />
This comprises of functionality that rarely changes. Good examples of this are utility classes (e.g. trimming white space on a String or a generic XML parser). These classes are added to over time (in the case of utility classes as new conversions/formats are required), but the usage of existing methods remains the same across all projects &#8211; the returned format of a NumberUtil.toDollarsAndCents() method is always going to need to return a string with 2 decimal places.</p>
<p><strong>Evolving code base</strong><br />
This is the common code base that evolves over time. At massive this is primarily the frameworks we use for our applications. While there is little change individually from project to project, over time our processes evolve and all the subtle improvements add up to a distinctly different framework. A project that is only 6-12 months old looks and behaves quite differently to a project started today.</p>
<p>Despite this, it is still necessary to version control the code base for our frameworks &#8211; because the alternative is to copy and paste core classes by hand every time we start a new project &#8211; <span style="font-weight: bold">yuck</span>! At the same time we don&#8217;t want to have to maintain backwards compatibility in our common code base just in order to be able to recompile old projects.</p>
<p><strong>Solution</strong></p>
<p>Our solution to this problem has been to not version control the actual classes for our frameworks, but instead version control scripts that can automatically generate them. This way each project has its own version of the core classes that are fixed within that project, and every new project contains the most recent set of classes and structure.</p>
<p>There are heaps of benefits to this approach &#8211; not only do we not have to worry about breaking old projects &#8211; but we gain an extra level of standardisation across our projects no matter who initially creates them.  Setting up a new project by hand can take hours and is often the most tedious part of the process. Automating this process saves time and heaps of monkey work.</p>
<p>Because we primarily use <a href="http://www.eclipse.org" target="_blank">Eclipse </a>for our actionscript development, we&#8217;ve been using <a href="http://ant.apache.org/" target="_blank">Ant</a> for all our build scripts (Eclipse has inbuilt support for it). Initially our scripts were responsible for creating a few folders, and some stub core classes. Over time we have extended this further to auto-generate project specific build scripts for both compiling a project and also creating specific class types on demand.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.misprintt.net/?feed=rss2&amp;p=168</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jacksonpollock.org</title>
		<link>http://blog.misprintt.net/?p=166</link>
		<comments>http://blog.misprintt.net/?p=166#comments</comments>
		<pubDate>Tue, 04 Jul 2006 12:47:30 +0000</pubDate>
		<dc:creator>dom</dc:creator>
				<category><![CDATA[experimental]]></category>
		<category><![CDATA[flash]]></category>

		<guid isPermaLink="false">http://blog.misprintt.net/?p=166</guid>
		<description><![CDATA[Create your own jackson pollock masterpiece (click the mouse to change colour).
It&#8217;s an interesting variation on the various flash drawing tools that are out there.
http://jacksonpollock.org/

]]></description>
			<content:encoded><![CDATA[<p>Create your own jackson pollock masterpiece (click the mouse to change colour).</p>
<p>It&#8217;s an interesting variation on the various flash drawing tools that are out there.<br />
<a target="_blank" href="http://jacksonpollock.org/">http://jacksonpollock.org/</a></p>
<p><img alt="jackson.jpg" id="image167" src="http://blog.misprintt.net/wp-content/uploads/2006/07/jackson.jpg" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.misprintt.net/?feed=rss2&amp;p=166</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>html web page visualiser</title>
		<link>http://blog.misprintt.net/?p=163</link>
		<comments>http://blog.misprintt.net/?p=163#comments</comments>
		<pubDate>Sun, 28 May 2006 23:34:18 +0000</pubDate>
		<dc:creator>dom</dc:creator>
				<category><![CDATA[experimental]]></category>
		<category><![CDATA[visualisation]]></category>

		<guid isPermaLink="false">http://blog.misprintt.net/?p=163</guid>
		<description><![CDATA[Interesting little applet that visualises an html page as an organic tree. Each colour represents some type of element in the html (purple is an image, blue is a hyperlink, red is a table, yellow is a form, etc)
http://www.aharef.info/2006/05/websites_as_graphs.htm 
The complex the web page the more complex the image that is created. Check out the [...]]]></description>
			<content:encoded><![CDATA[<p>Interesting little applet that visualises an html page as an organic tree. Each colour represents some type of element in the html (purple is an image, blue is a hyperlink, red is a table, yellow is a form, etc)</p>
<p><a target="_blank" href="http://www.aharef.info/2006/05/websites_as_graphs.htm">http://www.aharef.info/2006/05/websites_as_graphs.htm </a></p>
<p>The complex the web page the more complex the image that is created. Check out the difference between google and ninemsn. The ninemsn site nearly crashed my browser!</p>
<p><img alt="visualiser_google.jpg" id="image165" src="http://blog.misprintt.net/wp-content/uploads/2006/05/visualiser_google.jpg" /></p>
<p><img alt="visualiser_ninemsn.jpg" id="image164" src="http://blog.misprintt.net/wp-content/uploads/2006/05/visualiser_ninemsn.jpg" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.misprintt.net/?feed=rss2&amp;p=163</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>interact 10 ways &#8211; space</title>
		<link>http://blog.misprintt.net/?p=158</link>
		<comments>http://blog.misprintt.net/?p=158#comments</comments>
		<pubDate>Wed, 24 May 2006 02:29:23 +0000</pubDate>
		<dc:creator>dom</dc:creator>
				<category><![CDATA[design]]></category>
		<category><![CDATA[experimental]]></category>

		<guid isPermaLink="false">http://blog.misprintt.net/?p=158</guid>
		<description><![CDATA[Space is one of the projects for getty images&#8217; interact10ways.com.
It threads various images in a three dimensional canvas where the user chooses which &#8220;path&#8221; to travel. While it is actually pretty linear, the animation and style works nicely.
It is created by thebarbariangroup.
Screenshots [1][2][3]

]]></description>
			<content:encoded><![CDATA[<p><a target="_self" href="http://interact10ways.com/usa/the_barbarian_group.asp">Space</a> is one of the projects for getty images&#8217; <a target="_blank" href="http://interact10ways.com">interact10ways.com</a>.</p>
<p>It threads various images in a three dimensional canvas where the user chooses which &#8220;path&#8221; to travel. While it is actually pretty linear, the animation and style works nicely.<br />
It is created by <a target="_blank" href="http://blog.misprintt.net/www.thebarbariangroup.com"><span class="highlighted">thebarbariangroup</span></a><span class="highlighted">.</span></p>
<p>Screenshots [<a target="_blank" href="http://blog.misprintt.net/wp-content/uploads/2006/05/space1.jpg">1</a>][<a target="_blank" href="http://blog.misprintt.net/wp-content/uploads/2006/05/space2.jpg">2</a>][<a target="_blank" href="http://blog.misprintt.net/wp-content/uploads/2006/05/space3.jpg">3</a>]</p>
<p><img id="image159" alt="space.jpg" src="http://blog.misprintt.net/wp-content/uploads/2006/05/space.jpg" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.misprintt.net/?feed=rss2&amp;p=158</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Still The One</title>
		<link>http://blog.misprintt.net/?p=151</link>
		<comments>http://blog.misprintt.net/?p=151#comments</comments>
		<pubDate>Tue, 23 May 2006 00:23:50 +0000</pubDate>
		<dc:creator>dom</dc:creator>
				<category><![CDATA[user interface]]></category>

		<guid isPermaLink="false">http://blog.misprintt.net/?p=151</guid>
		<description><![CDATA[It may be an Australian first, but the new channel 9 &#8220;catch-up tv&#8221; download service definately lives up to it&#8217;s name &#8211; it REALLY needs to &#8220;catch up&#8221;.
It looks terrible, almost as if Eddie knocked it up himself in his spare time&#8230;
Take a look at a couple of choice shots [1[2][3]
Follow the &#8220;download now&#8221; link [...]]]></description>
			<content:encoded><![CDATA[<p>It may be an Australian first, but the new channel 9 &#8220;catch-up tv&#8221; download service definately lives up to it&#8217;s name &#8211; it REALLY needs to &#8220;catch up&#8221;.</p>
<p>It looks terrible, almost as if Eddie knocked it up himself in his spare time&#8230;</p>
<p>Take a look at a couple of choice shots [<a target="_blank" href="http://blog.misprintt.net/wp-content/uploads/2006/05/channel9_catchup_tv_1.jpg">1</a>[<a target="_blank" href="http://blog.misprintt.net/wp-content/uploads/2006/05/channel9_catchup_tv_2.jpg">2</a>][<a target="_blank" href="http://blog.misprintt.net/wp-content/uploads/2006/05/channel9_catchup_tv_4.jpg">3</a>]<br />
Follow the &#8220;download now&#8221; link <a target="_blank" href="http://mcleodsdaughters.ninemsn.com.au/article.aspx?id=101365">here</a>.</p>
<p><img id="image150" alt="channel9_catchup_tv.jpg" src="http://blog.misprintt.net/wp-content/uploads/2006/05/channel9_catchup_tv.jpg" /></p>
<p><img alt="an_australian_first1.jpg" id="image157" src="http://blog.misprintt.net/wp-content/uploads/2006/05/an_australian_first1.jpg" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.misprintt.net/?feed=rss2&amp;p=151</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Etsy &#8211; buy and sell all things handmade</title>
		<link>http://blog.misprintt.net/?p=137</link>
		<comments>http://blog.misprintt.net/?p=137#comments</comments>
		<pubDate>Fri, 21 Apr 2006 00:04:17 +0000</pubDate>
		<dc:creator>dom</dc:creator>
				<category><![CDATA[design]]></category>
		<category><![CDATA[user interface]]></category>

		<guid isPermaLink="false">http://blog.misprintt.net/?p=137</guid>
		<description><![CDATA[Traditional product/company listing site that incudes several flash interfaces for exploring the collection based on various categories &#8211; location, time, color, etc.
http://etsy.com/
This post gets three thumbnails!
Timeline browse:
Screenshots: [1] [2] [3]

Color browse:
Screenshots: [1] [2]

Location browse:
Screenshots: [1] [2]

I particularly liked the knitted sushi:

]]></description>
			<content:encoded><![CDATA[<p>Traditional product/company listing site that incudes several flash interfaces for exploring the collection based on various categories &#8211; location, time, color, etc.</p>
<p><a target="_blank" href="http://etsy.com/">http://etsy.com/</a></p>
<p>This post gets three thumbnails!</p>
<p><strong>Timeline browse:</strong><br />
Screenshots: [<a target="_blank" href="http://blog.misprintt.net/wp-content/uploads/2006/04/etsy_timeline1.jpg">1</a>] [<a target="_blank" href="http://blog.misprintt.net/wp-content/uploads/2006/04/etsy_timeline2.jpg">2</a>] [<a target="_blank" href="http://blog.misprintt.net/wp-content/uploads/2006/04/etsy_timeline3.jpg">3</a>]</p>
<p><img id="image138" alt="etsy1.jpg" src="http://blog.misprintt.net/wp-content/uploads/2006/04/etsy1.jpg" /></p>
<p><strong>Color browse:</strong><br />
Screenshots: [<a target="_blank" href="http://blog.misprintt.net/wp-content/uploads/2006/04/etsy_color1.jpg">1</a>] [<a target="_blank" href="http://blog.misprintt.net/wp-content/uploads/2006/04/etsy_color2.jpg">2</a>]</p>
<p><img id="image139" alt="etsy2.jpg" src="http://blog.misprintt.net/wp-content/uploads/2006/04/etsy2.jpg" /></p>
<p><strong>Location browse:</strong><br />
Screenshots: [<a target="_blank" href="http://blog.misprintt.net/wp-content/uploads/2006/04/etsy_geo1.jpg">1</a>] [<a target="_blank" href="http://blog.misprintt.net/wp-content/uploads/2006/04/etsy_geo2.jpg">2</a>]</p>
<p><img id="image140" alt="etsy3.jpg" src="http://blog.misprintt.net/wp-content/uploads/2006/04/etsy3.jpg" /></p>
<p>I particularly liked the <a target="_blank" href="http://www.etsy.com/view_item.php?listing_id=172629">knitted sushi</a>:</p>
<p><img id="image149" alt="get_jpg_detail_image.jpg.jpg" src="http://blog.misprintt.net/wp-content/uploads/2006/04/get_jpg_detail_image.jpg.jpg" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.misprintt.net/?feed=rss2&amp;p=137</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
