<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-1573105149868806087</id><updated>2009-09-24T08:32:17.839-07:00</updated><title type='text'>Killian's Blog System</title><subtitle type='html'>Tech , Life , Working</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ehdnw.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1573105149868806087/posts/default'/><link rel='alternate' type='text/html' href='http://ehdnw.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>blog</name><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1573105149868806087.post-130830966521942885</id><published>2009-07-02T22:09:00.000-07:00</published><updated>2009-07-02T22:10:08.482-07:00</updated><title type='text'>FlashAntTasks – Compiling Flash Movies With Ant</title><content type='html'>&lt;p&gt;&lt;br /&gt;If you’ve seen &lt;a href="http://www.mikechambers.com/blog/2008/05/02/flashcommand-for-os-x-updated-to-work-with-flash-cs3/"&gt;Mike Chambers flashcommand implementation&lt;/a&gt; you’ll notice that it only works on the mac.  We have a lot of people at my office on Windows and I wanted to provide them something that could also work on a Windows computer.  Plus I wanted something a little cleaner, easier to learn and a bit more elegant than most of the solutions out there.  So I created FlashAntTasks.  Its a jar file that you reference in your class file that creates flash tasks that compile separate movies.  I’m posting it up on Google code so everyone can enjoy.  So enough with the fluff, here’s the details&lt;br /&gt;WINDOWS USERS – you need to pass in flashcommand the flashapp attribute with the uri to your flash.exe like&lt;br /&gt;You can download the code at &lt;a href="http://code.google.com/p/flashanttasks/"&gt;http://code.google.com/p/flashanttasks/&lt;/a&gt;.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;br /&gt;&lt;project name="FlashAntTasks" basedir="." default="Open in Browser"&gt;&lt;br /&gt;&lt;br /&gt;&lt;description&gt;&lt;br /&gt;simple example build file&lt;br /&gt;&lt;/description&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- os specific properties --&gt;&lt;br /&gt;&lt;property name="os" value="${os.name}"&gt;&lt;br /&gt;&lt;echo message="Using ${os.name}.properties"&gt;&lt;br /&gt;&lt;property file="${os.name}.properties"&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- Include the Flash Ant Tasks Jar here, also make sure you&lt;br /&gt;reference the FlashAntTasks.properties file which is&lt;br /&gt;bundled in the jar file --&gt;&lt;br /&gt;&lt;taskdef resource="FlashAntTasks.properties" classpath="lib/FlashAntTasks.jar"&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- Project Specific Properties --&gt;&lt;br /&gt;&lt;property name="html.filename" value="index_full.html"&gt;&lt;br /&gt;&lt;property name="local.path" value="${basedir}/wwwroot//${html.filename}"&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- make sure to reference the fla dir and your output dir --&gt;&lt;br /&gt;&lt;property name="fla.dir" value="${basedir}/flash"&gt;&lt;br /&gt;&lt;property name="swf.output.dir" value="${basedir}/wwwroot/assets/swfs"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- TARGETS --&gt;&lt;br /&gt;&lt;target name="Compile Additional Swfs"&gt;&lt;br /&gt;&lt;flashcommand&gt;&lt;br /&gt;&lt;movie export="true" source="${fla.dir}/site.fla" output="${swf.output.dir}/site.swf"&gt;&lt;br /&gt;&lt;movie export="true" source="${fla.dir}/shared.fla" output="${swf.output.dir}/shared.swf"&gt;&lt;br /&gt;&lt;/flashcommand&gt;&lt;br /&gt;&lt;/target&gt;&lt;br /&gt;&lt;br /&gt;&lt;target name="Compile Shell" depends="Compile Additional Swfs"&gt;&lt;br /&gt;&lt;flashcommand&gt;&lt;br /&gt;&lt;movie export="true" source="${fla.dir}/shell.fla" output="${swf.output.dir}/shell.swf"&gt;&lt;br /&gt;&lt;/flashcommand&gt;&lt;br /&gt;&lt;/target&gt;&lt;br /&gt;&lt;br /&gt;&lt;target name="Windows Example" depends="Compile Additional Swfs"&gt;&lt;br /&gt;&lt;!-- WINDOWS USERS: flashapp attribute is required --&gt;&lt;br /&gt;&lt;flashcommand flashapp="c:\\Program files\\Adobe\\Flash.exe"&gt;&lt;br /&gt;&lt;movie test="true" source="${fla.dir}/shell.fla" output="${swf.output.dir}/shell.swf"&gt;&lt;br /&gt;&lt;/flashcommand&gt;&lt;br /&gt;&lt;/target&gt;&lt;br /&gt;&lt;br /&gt;&lt;target name="Compile Shell" depends="Compile Additional Swfs"&gt;&lt;br /&gt;&lt;flashcommand&gt;&lt;br /&gt;&lt;movie export="true" source="${fla.dir}/shell.fla" output="${swf.output.dir}/shell.swf"&gt;&lt;br /&gt;&lt;/flashcommand&gt;&lt;br /&gt;&lt;/target&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- Open in local browser --&gt;&lt;br /&gt;&lt;target name="Open in Browser" depends="Compile Shell"&gt;&lt;br /&gt;&lt;exec executable="open"&gt;&lt;br /&gt;&lt;arg line="-a ${browser} ${local.path}"&gt;&lt;br /&gt;&lt;/exec&gt;&lt;br /&gt;&lt;/target&gt;&lt;br /&gt;&lt;br /&gt;&lt;/project&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;Killian's Blog&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1573105149868806087-130830966521942885?l=ehdnw.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ehdnw.blogspot.com/feeds/130830966521942885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1573105149868806087&amp;postID=130830966521942885' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1573105149868806087/posts/default/130830966521942885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1573105149868806087/posts/default/130830966521942885'/><link rel='alternate' type='text/html' href='http://ehdnw.blogspot.com/2009/07/flashanttasks-compiling-flash-movies.html' title='FlashAntTasks – Compiling Flash Movies With Ant'/><author><name>blog</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02561573200867230412'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1573105149868806087.post-4195257215164047261</id><published>2009-07-02T22:06:00.001-07:00</published><updated>2009-07-02T22:06:48.585-07:00</updated><title type='text'>Web Tier Compiler For Flex</title><content type='html'>&lt;a href="http://labs.adobe.com/wiki/index.php/Flex_Module_for_Apache_and_IIS"&gt;Adobe is releasing a new web tier compiler for Flex on Adobe labs.&lt;/a&gt; This allows you to simply copy the Flex files into a directory visible to your server and your app will be compiled automatically when you request the main application file using your web browser. The resulting model feels very similar to working with ASP, JSP, PHP, or CF.&lt;br /&gt;It is available for both Apache and IIS, and runs on Windows, Mac, and Linux.&lt;br /&gt;All that’s needed is a Java Runtime Environmnet (JRE). This has NOTHING to do with Flex Data Services and FDS applications will not run with it. It does NOT require J2EE. It’s just a simple piece of software you can deploy to make Flex development more like standard web development. Enjoy!&lt;div class="blogger-post-footer"&gt;Killian's Blog&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1573105149868806087-4195257215164047261?l=ehdnw.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ehdnw.blogspot.com/feeds/4195257215164047261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1573105149868806087&amp;postID=4195257215164047261' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1573105149868806087/posts/default/4195257215164047261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1573105149868806087/posts/default/4195257215164047261'/><link rel='alternate' type='text/html' href='http://ehdnw.blogspot.com/2009/07/web-tier-compiler-for-flex.html' title='Web Tier Compiler For Flex'/><author><name>blog</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02561573200867230412'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1573105149868806087.post-1574806954135395084</id><published>2009-07-02T22:04:00.001-07:00</published><updated>2009-07-02T22:04:35.430-07:00</updated><title type='text'>Installing Ant in Flex Builder 3</title><content type='html'>Until Flex Builder 3 Stand Alone includes Ant built in you will have to install it separately. For those that are not familiar with Eclipse, this can be tricky to install.The following is the revised steps for Flex Builder 3 Stand Alone.&lt;br /&gt;Launch Flex Builder 3&lt;br /&gt;Go to Help &gt; Software Updates &gt; Find and Install&lt;br /&gt;Search for new features to install, click next&lt;br /&gt;Select “The Eclipse Project Updates”, click finish   &lt;br /&gt;Note: If you do not have the option above click New Remote Site and enter “The Eclipse Project Updates” as the name and “http://update.eclipse.org/updates/3.3″ as the url.&lt;br /&gt;In Eclipse Project Updates &gt; Eclipse SDK Eclipse 3.3.2 (3.3.3, 3.3.4, etc) Select “Eclipse Java Development Tools…”, or otherwise known as JDT click next&lt;br /&gt;Accept the license agreement, click next&lt;br /&gt;Click finish to start download&lt;br /&gt;Eclipse downloads Java Development Tools&lt;br /&gt;Click “Install all” to install Java Development Tools&lt;br /&gt;Restart the Eclipse workbench&lt;br /&gt;That’s it! You now have Apache Ant support in your standalone Flex Builder 3 install.Go to Window &gt; Other View &gt; Ant and Click OK. You now have the Ant view&lt;div class="blogger-post-footer"&gt;Killian's Blog&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1573105149868806087-1574806954135395084?l=ehdnw.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ehdnw.blogspot.com/feeds/1574806954135395084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1573105149868806087&amp;postID=1574806954135395084' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1573105149868806087/posts/default/1574806954135395084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1573105149868806087/posts/default/1574806954135395084'/><link rel='alternate' type='text/html' href='http://ehdnw.blogspot.com/2009/07/installing-ant-in-flex-builder-3.html' title='Installing Ant in Flex Builder 3'/><author><name>blog</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02561573200867230412'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1573105149868806087.post-7803969257486888990</id><published>2009-07-01T02:44:00.001-07:00</published><updated>2009-07-01T02:44:48.618-07:00</updated><title type='text'>How to embed a text file in Flash</title><content type='html'>package {&lt;br /&gt;import flash.utils.ByteArray;&lt;br /&gt;[Embed(source="words.txt",mimeType="application/octet-stream")]&lt;br /&gt;public class embedded_text extends ByteArray {&lt;br /&gt;public function embedded_text() {&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;package {&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.text.TextField;&lt;br /&gt;public class wordz extends Sprite {&lt;br /&gt;var text_field:TextField = new TextField();&lt;br /&gt;var words:embedded_text = new embedded_text();&lt;br /&gt;public function wordz() {&lt;br /&gt;addChild(text_field);&lt;br /&gt;text_field.height=400;&lt;br /&gt;text_field.width=500;&lt;br /&gt;text_field.text=words.toString();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;Killian's Blog&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1573105149868806087-7803969257486888990?l=ehdnw.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ehdnw.blogspot.com/feeds/7803969257486888990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1573105149868806087&amp;postID=7803969257486888990' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1573105149868806087/posts/default/7803969257486888990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1573105149868806087/posts/default/7803969257486888990'/><link rel='alternate' type='text/html' href='http://ehdnw.blogspot.com/2009/07/how-to-embed-text-file-in-flash.html' title='How to embed a text file in Flash'/><author><name>blog</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02561573200867230412'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1573105149868806087.post-31652749532925062</id><published>2009-06-18T02:19:00.000-07:00</published><updated>2009-06-18T02:27:41.264-07:00</updated><title type='text'>QueueLoader In As3.0</title><content type='html'>&lt;p&gt;Description &lt;a href="http://code.google.com/p/queueloader-as3/wiki/QueueLoader"&gt;QueueLoader&lt;/a&gt; is an actionscript library for sequential asset loading and monitoring. &lt;a href="http://code.google.com/p/queueloader-as3/wiki/QueueLoader"&gt;QueueLoader&lt;/a&gt; is designed to be used with Actionscript 3.0 and has become an open source project. If you are interested in contributing please contact the project leader.&lt;br /&gt;MAJOR UPDATE!&lt;br /&gt;&lt;a href="http://code.google.com/p/queueloader-as3/wiki/QueueLoader"&gt;QueueLoader&lt;/a&gt; 3.1.0 now has a number of dependancies. Only the &lt;a href="http://code.google.com/p/queueloader-as3/wiki/QueueLoader"&gt;QueueLoader&lt;/a&gt; specific source can be found on the SVN as well as the Download Section. Click the link below to download the complete source with example files and assets to get up and running. Also a comprehensive list of example source code can be found as well.&lt;br /&gt;&lt;a href="http://blog.hydrotik.com/2008/10/29/queueloader-rev-31-major-update-usage/" rel="nofollow"&gt;QueueLoader 3.1.0 Source and Example Files&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blog.hydrotik.com/wp-content/qldocumentation/html/index.html" rel="nofollow"&gt;Class Documentation&lt;/a&gt;&lt;br /&gt;Wiki Info&lt;br /&gt;&lt;a href="http://code.google.com/p/queueloader-as3/wiki/QueueLoaderGuide"&gt;Guide&lt;/a&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/queueloader-as3/wiki/ChangeLog"&gt;Change Log&lt;/a&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/queueloader-as3/source" rel="nofollow"&gt;Source Downloads&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blog.hydrotik.com/" rel="nofollow"&gt;QueueLoader @ hydrotik&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Current Features:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;Individual monitoring&lt;br /&gt;Overall queue monitoring&lt;br /&gt;Image loading&lt;br /&gt;SWF loading&lt;br /&gt;MP3 loading&lt;br /&gt;XML loading&lt;br /&gt;CSS loading&lt;br /&gt;FLV loading&lt;br /&gt;WAV Audio loading&lt;br /&gt;ZIP Archive loading&lt;br /&gt;URL Variable support&lt;br /&gt;Direct access to loaded items by name&lt;br /&gt;Global QLManager for multiple QueueLoaders&lt;br /&gt;Addition of items to the queue on the fly&lt;br /&gt;Access of loaded SWF class references using application domain/loader context&lt;br /&gt;Disposing of loaded references for Garbage Collection&lt;br /&gt;Removal of items in the queue&lt;br /&gt;Queue sorting using shuffle() functions&lt;br /&gt;Stopping and resuming of a queue in progress&lt;br /&gt;Drawing of external SWF frames to a Bitmap Array &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Example: &lt;/p&gt;&lt;p&gt;// Most Basic Example&lt;/p&gt;&lt;p&gt;import com.hydrotik.queueloader.QueueLoader;&lt;br /&gt;import com.hydrotik.queueloader.QueueLoaderEvent;&lt;br /&gt;var _oLoader:QueueLoader = new QueueLoader();&lt;br /&gt;var img:Sprite = new Sprite();&lt;br /&gt;img.name = "image_1";&lt;br /&gt;img.x = 20;&lt;br /&gt;img.y = 20;&lt;br /&gt;img.scaleX = img.scaleY = .075;addChild(img);&lt;br /&gt;_oLoader.addItem("../flashassets/images/slideshow/1.jpg", img);&lt;br /&gt;_oLoader.addEventListener(QueueLoaderEvent.QUEUE_PROGRESS, onQueueProgress, false, 0, true);&lt;br /&gt;_oLoader.addEventListener(QueueLoaderEvent.QUEUE_COMPLETE, onQueueComplete,false, 0, true);&lt;br /&gt;_oLoader.execute();function onQueueProgress(event:QueueLoaderEvent):void&lt;br /&gt;{      &lt;br /&gt;        trace("\t&gt;&gt;onQueueProgress: "+event.queuepercentage);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function onQueueComplete(event:QueueLoaderEvent):void&lt;br /&gt;{       &lt;br /&gt;       trace("** "+event.type);&lt;br /&gt;}&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;Killian's Blog&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1573105149868806087-31652749532925062?l=ehdnw.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ehdnw.blogspot.com/feeds/31652749532925062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1573105149868806087&amp;postID=31652749532925062' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1573105149868806087/posts/default/31652749532925062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1573105149868806087/posts/default/31652749532925062'/><link rel='alternate' type='text/html' href='http://ehdnw.blogspot.com/2009/06/queueloader-in-as30.html' title='QueueLoader In As3.0'/><author><name>blog</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02561573200867230412'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1573105149868806087.post-5987300189127604569</id><published>2009-06-02T22:40:00.001-07:00</published><updated>2009-06-02T22:40:42.088-07:00</updated><title type='text'>Reviewing Flash Decompiler Trillix</title><content type='html'>Eltima recently released a new decompiler aptly named &lt;a href="http://www.flash-decompiler.com/" target="_blank"&gt;Flash Decompiler Trillix&lt;/a&gt;. According to &lt;a href="http://www.flash-decompiler.com/" target="_blank"&gt;flash-decompiler.com&lt;/a&gt; “Flash Decompiler Trillix is the only application capable of converting SWF to FLA with high speed, high quality and hundreds of additional features.” A pretty loaded statement, so I thought I would take a look at it and see if they live up to their marketing departments self praise.&lt;br /&gt;I am reviewing the mac version of this software, I haven’t looked at the PC version as I swore off PCs years ago. I assume both versions and their GUI are identical.&lt;a title="Flash Decompiler Trillix default interface" href="http://www.scottgmorgan.com/blog/wp-content/uploads/2008/11/trillix01.jpg"&gt;&lt;/a&gt;&lt;br /&gt;Upon launching the app you are presented with a non-traditional application. It has no OS chrome, sort of looks like something created in AIR, but dated - sort of like a classic mProjector app (for those who remember mProjector). The applications footprint is small but it is packed with options. Almost overwhelming at first. The app does have some nice features, but the GUI design just doesn’t do them justice.&lt;br /&gt;For this review I decompiled three swfs, a compiled ActionScript 3 project with no timeline, a timeline based project that has some Actionscript code spread out on the timeline, and a Flex project (essentially a complex ActionScript 3 project with no timeline so I won’t write my review of this, I do make a few comments and suggestions about decompiling the Flex framework below).&lt;br /&gt;ActionScript 3 project with no timeline&lt;br /&gt;The ActionScript 3 project I chose to decompile is very complex. 110 classes, thousands of lines of code, and not a single timeline in site (just how I like it).&lt;br /&gt;The first step is to select the source swf as the instructional text states, easy enough, I select the “…” button next to the SWF file name field. Not sure if “…” is the best labeling, I know what it means, not sure if everyone will. Next I select the path of where I want the decompiled FLA to be saved. Again, I select the “…” button next to the FLA file name field. By default it chooses the same directory as the SWF and appends _conv to the file name. The problem I have with the GUI is it doesn’t show you the full SWF or FLA path. If you don’t click on the “…” browse button you have no idea where the FLA will be saved.&lt;br /&gt;Next I have to select my decompilation settings from a massive list of about 70 options. I wasn’t kidding when I stated the interface was a little overwhelming. Luckily they have a settings filter so you can drill down to the exact settings you are looking for. It still doesn’t hide the fact that there are 70 or so options. All of these options have a default selection which I assume are the most common selections.&lt;br /&gt;Some of the options are fairly straight forward such as File Format and SWF Version. However, some of the options are very confusing. The one that confused me the most was the ActionScript 2.0 toggle? The website told me that this app can decompile ActionScript 3.0 swfs, but the toggle label says Actionscript 2.0 and is checked by default? If I uncheck this does it mean it will decompile to Actionscript 3.0 or will it think it is ActionScript 1? The contextual help for this toggle doesn’t mention anything about ActionScript 3. “Toggle ActionScript 2.0 decompilation on/off. If not enabled ActionScript 1.0 will be generated”. This option should use a combo box and the combo box should populate itself based on the SWF Version option selected above. Obviously if the user selects Flash Player 6 SWF Version the ActionScript toggle shouldn’t offer the opportunity to select ActionScript 3. After playing around with this toggle I came to the conclusion that it doesn’t really do anything, AS3 is retained no mater what.&lt;br /&gt;Another confusing option is in the SWF version combo box. One of the options is “same as FLA”, I know what they are attempting to do here but not everyone is going to know that Flash MX 2004 is Flash Player 7.&lt;br /&gt;Personally the Page options section I feel is not needed. It’s been a while since I have actually used the Flash IDE but I am pretty sure it remembers settings from the last time it was used. Do I really need to select if I want rulers visible when the file opens? There are way too many options in here for the average user, just trying to scale this massive list of 70 options down. Or maybe move these options to an optional options section that doesn’t show by default. KISS - Keep it Simple Stupid.&lt;br /&gt;Lastly, the contextual help on a lot of the options are completely useless. For example, one option label is “Decode all classes as dynamic”. The contextual help for this option is “Decode all classes as dynamic”. I know what this means, does the average user?&lt;br /&gt;I think a few very important options have been left out. One would be an option to not decompile Flex Framework classes, as you will see below in my Flex project decompilation there are a lot of excess classes decompiled for no reason. I guess there is a reason if you don’t have the Flex framework already on your machine. How about an option to create a swc of the Flex framework so the user doesn’ t have to wade through excess classes?&lt;br /&gt;Another nice option would be export ActionScript only. Some of us don’t care about FLAs. Edit, I just figured out that you can extract only the AS, you have to select the Extract button and uncheck everything but scripts.&lt;br /&gt;OK, enough of that, lets take a look at the decompilation results, after all that is what is important here.&lt;br /&gt;First off, the decompilation was fast, less then a second which is very impressive. Once the compilation is complete it automatically opens the decopiled FLA in the Flash IDE (this is one of the 70 options you select). The decompiler created a project file and the project panel is opened automatically. I do not have a copy of Flash CS4 yet, I wonder if the gProject panel would still work. I would assume the gProject panel is backward compatable, if not there would be a lot of complaints by now I’m sure.&lt;br /&gt;All 110 classes in my ActionScript project were decompiled and all of the class paths (directories) are correct. All the code is representative of what it was pre-compile with a few notable differences.&lt;br /&gt;1. All local variables do not retain their names. For example, if I had&lt;br /&gt;var foo:String = ”bar”;&lt;br /&gt;in my code, after it is decompiled the var looks like&lt;br /&gt;var loc1:*;loc1 = ”bar”;&lt;br /&gt;I understand the renaming, the compiler changes the name of  local vars to something representative to their position in memory allocation and Trillix is masking those unreadable names to something that is somewhat readable. What I do not agree with is the formatting, variable defined on the first line, value assigned to it on the second line. Pre-compilation it was all in one line.&lt;br /&gt;Also vars which aretyped as String pre compilation are typed as a wildcard (*) when decompiled unless you implicitly cast the value to whatever you typed it as. For example:&lt;br /&gt;var foo:String = String(bar);&lt;br /&gt;will decompile to this:&lt;br /&gt;var foo:String;foo = String(bar);&lt;br /&gt;Does anyone know if the compiler does this after it validates the type upon compilation, or is the decompiler being a little lazy? Interestingly if you type your var using as:&lt;br /&gt;var foo:String = bar as String;&lt;br /&gt;it will decompile to:&lt;br /&gt;var foo:*;foo = bar as String;&lt;br /&gt;not cool.&lt;br /&gt;Lastly, all of the local vars are moved to the top of the method. If your code look like this before compilation.&lt;br /&gt;private function foo(bar:String):String {     if (bar != ‘local’) {          var thing:String = String(LoaderInfo(OS.instance.root.loaderInfo).parameters.thing);          return thing;     }     return bar;}&lt;br /&gt;It will look like this after decompilation&lt;br /&gt;private function foo(arg1:String):String {     var thing:String;     thing = null;     if (arg1 != ‘local’) {          thing = String(LoaderInfo(OS.instance.root.loaderInfo).parameters.thing);          return thing;     }     return arg1;}&lt;br /&gt;2. Along the same lines as above, all method arguments names are changed to arg1, arg2, etc. The good thing is method arguments keep their proper typing and are not wildcarded like the local variables.&lt;br /&gt;3. Oddly enough all class level variables are moved to the bottom of the class, again a personal opinion, I prefer them at the top. Good news is, class level variables retain their original name and typing.&lt;br /&gt;4. All import statements are wildcarded, again, not sure if this is something the compiler does. In AS2 this would have been a larger issue as all classes in the wildcarded package would be compiled into the swf. In AS3 classes are only compiled into the swf if they are instantiated. So even if you import flash.display.* doesn’t mean that Loader is available at runtime anywhere in your compiled movie, you actively have to instantiate Loader by calling new Loader() somewhere in your code. From a personal standpoint I have seeing wildcarded imports, just seems lazy and sloppy. I’m sure others will disagree.&lt;br /&gt;5. And of course, comments are not decompiled. This is because comments are stripped out during the compilation process.&lt;br /&gt;6. Lastly, all for loops are converted to while loops (for each loops remain for each loops). This is the same as AS2, the compiler converts all for loops to while loops at compile time, not sure why, but I am sure there is good reason.&lt;br /&gt;All and all I am very impressed with the decompilation of my Actionscript project. I was able to recompile my project again based on what was decompiled. The only issue I ran into was when a swc was compiled against, obviously the decompiled version would have no reference to the swc used at compile time. Most of my code issues mentioned above are minor and of a personal nature. The UI issues I mentioned are more severe and I hope are updated in a future release.&lt;br /&gt; Timeline Based Project with Actionscript 3 On Multiple Keyframes&lt;br /&gt;Since I don’t spend a lot of time on the timeline this part of the review will be quick. Again, the decompilation of the swf was very quick. Less than a second. Once the decompilation was complete the Flash IDE opened and there was my FLA. The timeline, including my tween were completely restored, however my layer names were dropped (expected, the layer names are not compiled into the swf).&lt;br /&gt;The big problem is all my timeline actionscript code was gone. Or was it?&lt;br /&gt;The decompiler, actually the compiler does this behind the scenes, a class file is created for every display object and the class is linked to the display object in the library. This could be very confusing for a flash animator who doesn’t use a lot of code, and has never used external class files. I couldn’t find an option that dropped the actionscript back onto the timeline. That would be ideal.&lt;br /&gt;Conclusion&lt;br /&gt;I am very impressed with the output of the decompiled code. It is clean and readable. I have a few issues with how variables are declared (see above). With all the options in the GUI I wish there were more code preference options. I really have an issue with the GUI. It looks like they tried to jam too many features into a widget type design. Personally I think the design is a little dated and should have more of an applicationesque look to it.&lt;br /&gt;All in all I am impressed. I will most likely use this application on a reglular basis.&lt;div class="blogger-post-footer"&gt;Killian's Blog&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1573105149868806087-5987300189127604569?l=ehdnw.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ehdnw.blogspot.com/feeds/5987300189127604569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1573105149868806087&amp;postID=5987300189127604569' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1573105149868806087/posts/default/5987300189127604569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1573105149868806087/posts/default/5987300189127604569'/><link rel='alternate' type='text/html' href='http://ehdnw.blogspot.com/2009/06/reviewing-flash-decompiler-trillix.html' title='Reviewing Flash Decompiler Trillix'/><author><name>blog</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02561573200867230412'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1573105149868806087.post-2739736709421906743</id><published>2009-06-02T22:37:00.000-07:00</published><updated>2009-06-02T22:39:07.128-07:00</updated><title type='text'>Runtime Font Embedding in AS3. There is no need to embed the entire fontset anymore.</title><content type='html'>Well, pulled a few more hairs out today. Hard to believe I have any left. I am working on a multi-lingual application that needs embeded fonts. As most of you know, loading every character in a given fontset equates to one big ass swf. For example, if you want to embed a regular and bold Japanese font you’re looking at approx. 13 megs, and depending on the quality of the font you could be close to 20 megs. That’s a lot of font. In an ideal world the Flash Player would allow for dynamic runtime shared font libraries that allow for only a subset of characters to be embeded.&lt;br /&gt;In AS2 there were a few ways (hacks) to load font libraries at runtime. Unfortunately none of the AS2 hacks work in Flash CS3 using AS3. However, there is an answer. In Flex you can embed fonts at compile time using the [Embed] metadata tag in your Actionscript. And the best part is you can use the unicodeRange attribute to define a subset of characters you want to embed. Below is a class I created that compiles a swf that contains all Latin I characters in the Arial font.package {&lt;br /&gt;import flash.display.Sprite; public class _Arial extends Sprite {&lt;br /&gt;[Embed(source='C:/WINDOWS/Fonts/ARIAL.TTF', fontName='_Arial', unicodeRange='U+0020-U+002F,U+0030-U+0039,U+003A-U+0040,U+0041-U+005A,U+005B-U+0060,U+0061-U+007A,U+007B-U+007E')]&lt;br /&gt;public static var _Arial:Class;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;A couple things to point out here. The fontName attribute value can not be the same name as a device font. If I were to change my code to use fontName=’Arial’ the compiler throws the following warning “the embedded font ‘Arial’ may shadow a device font of the same name. Use fontName to alias the font to a different name”. To get around this I simply added an underscore before the name. From this point on you must reference the _Arial in your TextFormats or CSS. Now if you compile that it will create a swf named _Arial.swf.&lt;br /&gt;Ok, great, now what? Well, now you have to load the font into the application. Here is a sample class that loads in the font and displays some rotated text just to prove that it is embeded.package { import flash.display.Loader;&lt;br /&gt;import flash.display.Sprite;&lt;br /&gt;import flash.events.Event;&lt;br /&gt;import flash.net.URLRequest;&lt;br /&gt;import flash.text.*;&lt;br /&gt;public class FontLoader extends Sprite {&lt;br /&gt;public function FontLoader() {&lt;br /&gt;loadFont("_Arial.swf");&lt;br /&gt;}&lt;br /&gt;private function loadFont(url:String):void {&lt;br /&gt;var loader:Loader = new Loader();&lt;br /&gt;loader.contentLoaderInfo.addEventListener(Event.COMPLETE, fontLoaded);&lt;br /&gt;loader.load(new URLRequest(url));&lt;br /&gt;}&lt;br /&gt;private function fontLoaded(event:Event):void {&lt;br /&gt;var FontLibrary:Class = event.target.applicationDomain.getDefinition("_Arial") as Class;&lt;br /&gt;Font.registerFont(FontLibrary._Arial);&lt;br /&gt;drawText();&lt;br /&gt;}&lt;br /&gt;public function drawText():void {&lt;br /&gt;var tf:TextField = new TextField();&lt;br /&gt;tf.defaultTextFormat = new TextFormat("_Arial", 16, 0);&lt;br /&gt;tf.embedFonts = true;&lt;br /&gt;tf.antiAliasType = AntiAliasType.ADVANCED;&lt;br /&gt;tf.autoSize = TextFieldAutoSize.LEFT;&lt;br /&gt;tf.border = true;&lt;br /&gt;tf.text = "Scott was here\nScott was here too\nblah scott...:;*&amp;amp;^% ";&lt;br /&gt;tf.rotation = 15;&lt;br /&gt;addChild(tf);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;And there you have it. Run time embeded fonts. The key lines to look at here arevar FontLibrary:Class = event.target.applicationDomain.getDefinition("_Arial") as Class;&lt;br /&gt;The getDefinition method returns a reference to the _Arial class loaded in through the swf (event.target). The next line:Font.registerFont(FontLibrary._Arial);&lt;br /&gt;registers the loaded in _Arial font in the global font list. If you were to trace out the results of Font.enumerateFonts() you will now see _Arial at the top of the list.&lt;br /&gt;Now lets say your site was in a few different languages you may add the following line to the FontLoader constructor to load language specific fonts at runtime.public function FontLoader() {&lt;br /&gt;var langManager:LanguageManager = LanguageManager.getInstance();&lt;br /&gt;var langID:String = langManager.getLanguageCode(); //returns jp&lt;br /&gt;loadFont(langID + "_Arial.swf");&lt;br /&gt;}&lt;br /&gt;Instead of loading in _Arial.swf the application will load in jp_Arial.swf. jp_Arial.swf would be another generated font swf like the _Arial example above but this time the unicodeRange would only include the Japanese fonts you need. All you have to do now is create a CSS file and fonts for each language, store the proper language code somewhere within the application and use that language code when loading your CSS files and fonts.&lt;br /&gt;You may not know this but Adobe has supplied us with sample unicodeRanges in the following file “\Applications\Adobe\Flex Builder 2\Flex SDK 2\frameworks\flash-unicode-table.xml”. You can either use one of the supplied ranges or create your own. You may only need to embed a few characters, if so just list the unicode values of the characters you want each seperated by a comma.&lt;br /&gt;Sounds pretty straight forward eh? Or is it????&lt;br /&gt;In doing this I ran into a huge bug using Flex Builder to generate the font swfs. When I was experimenting with the unicodeRanges my compiled versions did not contain the proper character ranges that I specified. For example I would define a range that only contained Uppercase characters. In my test font loading app I would only see numbers. Only if I removed the unicodeRange attribute would I see all my characters. This led me to believe that Adobe had documented something that really wasn’t part of the compiler. I tried deleting files, I was checking timestamps, nothing. Then I tried to clean my project before compiling (In FlexBuilder select Project &gt; Clean). It worked! The subset of characters I defined in my unicodeRange only loaded into my test app. YAY! Then I tried switching the unicodeRange again. DOH! nothing. Cleaned project again and BINGO!&lt;br /&gt;Lesson learned: Whenever you change your unicodeRange clean your project before you compile or else your change may not be compiled properly.&lt;br /&gt;I haven’t tried this in Flex 3 yet to see if the bug has been addressed. I did look at the Flex 3 bug system and didn’t see it listed. Either it has been fixed or no one has run into this issue yet. It is pretty obscure I guess.&lt;div class="blogger-post-footer"&gt;Killian's Blog&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1573105149868806087-2739736709421906743?l=ehdnw.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ehdnw.blogspot.com/feeds/2739736709421906743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1573105149868806087&amp;postID=2739736709421906743' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1573105149868806087/posts/default/2739736709421906743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1573105149868806087/posts/default/2739736709421906743'/><link rel='alternate' type='text/html' href='http://ehdnw.blogspot.com/2009/06/runtime-font-embedding-in-as3-there-is.html' title='Runtime Font Embedding in AS3. There is no need to embed the entire fontset anymore.'/><author><name>blog</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='02561573200867230412'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>