<?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>blog.joa-ebert.com - Blog of Joa Ebert &#187; projects</title>
	<atom:link href="http://blog.joa-ebert.com/category/personal/projects/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.joa-ebert.com</link>
	<description>Actionscript3, Flash, Scala, Java, C#, C++, Algorithms &#38; Imageprocessing</description>
	<lastBuildDate>Wed, 28 Jul 2010 16:47:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>New Apparat Example</title>
		<link>http://blog.joa-ebert.com/2010/05/26/new-apparat-example/</link>
		<comments>http://blog.joa-ebert.com/2010/05/26/new-apparat-example/#comments</comments>
		<pubDate>Wed, 26 May 2010 11:50:54 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[experiments]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[apparat]]></category>
		<category><![CDATA[example]]></category>
		<category><![CDATA[inline]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=595</guid>
		<description><![CDATA[Good news everyone. The Apparat inline expansion works  [...]]]></description>
			<content:encoded><![CDATA[<p>Good news everyone. The Apparat inline expansion works now to full extent after fixing some minor bugs. A complete example is also available. Just change the paths in the <code>build.properties</code> file and compile everything using Ant.</p>
<div align="center"><img src="http://blog.joa-ebert.com/wp-content/images/apparat-shot.png" width="399" height="183" alt="Apparat Example"/></div>
<p>Use the inline feature with care. Apparat does not try to optimize your code and performs nothing but dead simple inlining. This can lead to <b>slower</b> code due to the creation of lots of local registers. Your code gets also much bigger and will require more space in memory. I am actually not a fan of manual inlining at all. I think it makes only sense to inline code if you have a powerful optimizer available that will cleanup the whole mess.</p>
<p>The fun story about this example is that the inlined version is slower using the lastes Flash Player release candidate if you have only 40.000 particles. That is why I increased the number of particles to 80.000 ;). I developed the example using an old standalone player and the inlined version was nearly twice as fast. However when I watched the example in the browser with the latest release candidate the game was completely different. Kudos to Adobe for significantly improving the Flash Player performance!</p>
<ul>
<li><a href="http://www.joa-ebert.com/swfs/apparat-example/as3" target="_blank" title="Pure AS3 version">AS3-only Version</a></li>
<li><a href="http://www.joa-ebert.com/swfs/apparat-example/apparat" target="_blank" title="Inline version">Inline Version</a></li>
<li><a href="http://code.google.com/p/apparat/downloads/detail?name=apparat-ant-example.zip" target="_blank" title="Source">Source</a></li>
</ul>
<div class="tweetmeme_button" style="float: right; margin-right: 10px; margin-top: 38px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.joa-ebert.com%2F2010%2F05%2F26%2Fnew-apparat-example%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.joa-ebert.com%2F2010%2F05%2F26%2Fnew-apparat-example%2F&amp;source=joa&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<div style="float:right;margin:0px 16px 0px 4px;"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="normal-count" data-url="http://blog.joa-ebert.com/2010/05/26/new-apparat-example/"></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2010/05/26/new-apparat-example/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Inline Expansion</title>
		<link>http://blog.joa-ebert.com/2010/05/24/inline-expansion/</link>
		<comments>http://blog.joa-ebert.com/2010/05/24/inline-expansion/#comments</comments>
		<pubDate>Mon, 24 May 2010 18:12:57 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[apparat]]></category>
		<category><![CDATA[inline expansion]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=593</guid>
		<description><![CDATA[In addition to macro expansion Apparat has now inline e [...]]]></description>
			<content:encoded><![CDATA[<p>In addition to macro expansion Apparat has now inline expansion as well. It works nearly the same way as macro expansion but without most of its limitations. To define a class for inline usage it must extend <code>apparat.inline.Inlined</code> and all its methods must be static. However the cool thing is that you can also return values in contrast to macro expansion. You can also pass normal parameters. For instance <code>FastMath.sin(FastMath.sqrt(2.0))</code> is valid code using inline expansion. It is enabled by default in TDSI.
<div class="tweetmeme_button" style="float: right; margin-right: 10px; margin-top: 38px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.joa-ebert.com%2F2010%2F05%2F24%2Finline-expansion%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.joa-ebert.com%2F2010%2F05%2F24%2Finline-expansion%2F&amp;source=joa&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<div style="float:right;margin:0px 16px 0px 4px;"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="normal-count" data-url="http://blog.joa-ebert.com/2010/05/24/inline-expansion/"></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2010/05/24/inline-expansion/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Apparat For Scala 2.8 RC2</title>
		<link>http://blog.joa-ebert.com/2010/05/24/apparat-for-scala-2-8-rc2/</link>
		<comments>http://blog.joa-ebert.com/2010/05/24/apparat-for-scala-2-8-rc2/#comments</comments>
		<pubDate>Mon, 24 May 2010 13:44:37 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[7z]]></category>
		<category><![CDATA[apparat]]></category>
		<category><![CDATA[scala 2.8-rc2]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=591</guid>
		<description><![CDATA[Apparat is now available using the Scala 2.8-RC2 build. [...]]]></description>
			<content:encoded><![CDATA[<p>Apparat is now available using the Scala 2.8-RC2 build. You can <a href="http://code.google.com/p/apparat/downloads/list?q=label:scala-2.8.0.RC2" target="_blank" title="Apparat on Google Code">find appropriate downloads</a> now on Google Code by searching for the Scala version of your choice. 7z compression on OS X should work now as well.
<div class="tweetmeme_button" style="float: right; margin-right: 10px; margin-top: 38px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.joa-ebert.com%2F2010%2F05%2F24%2Fapparat-for-scala-2-8-rc2%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.joa-ebert.com%2F2010%2F05%2F24%2Fapparat-for-scala-2-8-rc2%2F&amp;source=joa&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<div style="float:right;margin:0px 16px 0px 4px;"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="normal-count" data-url="http://blog.joa-ebert.com/2010/05/24/apparat-for-scala-2-8-rc2/"></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2010/05/24/apparat-for-scala-2-8-rc2/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Macro Expansion</title>
		<link>http://blog.joa-ebert.com/2010/05/10/macro-expansion/</link>
		<comments>http://blog.joa-ebert.com/2010/05/10/macro-expansion/#comments</comments>
		<pubDate>Mon, 10 May 2010 17:31:34 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[apparat]]></category>
		<category><![CDATA[inline]]></category>
		<category><![CDATA[macro expansion]]></category>
		<category><![CDATA[taas]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=588</guid>
		<description><![CDATA[Apparat has another new feature called Macro Expansion. [...]]]></description>
			<content:encoded><![CDATA[<p>Apparat has another new feature called <a href="http://code.google.com/p/apparat/wiki/MacroExpansion" title="Macro Expansion" target="_blank">Macro Expansion</a>. I talked about this with Nico Zimmermann at FFK in Cologne. Nico was using TDSI for a project but he was not very satisfied with it because you have to inline all inverse-square root tricks manually.<br />
This is why Apparat has now macro expansion. I am actually not a big fan of it. I think a good compiler would do this for you without you having to go through all the steps. Unfortunately writing this compiler will take longer than the couple of hours I have spent on the macro expansion today.</p>
<p>So if you want to have quick and dirty inlining capabilities: <a href="http://code.google.com/p/apparat/wiki/MacroExpansion" target="_blank" title="Macro Expansion">this is for you</a>. It is an easy fix for a feature a lot of people have asked for. I will continue working on TAAS to implement this much better in the future.
<div class="tweetmeme_button" style="float: right; margin-right: 10px; margin-top: 38px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.joa-ebert.com%2F2010%2F05%2F10%2Fmacro-expansion%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.joa-ebert.com%2F2010%2F05%2F10%2Fmacro-expansion%2F&amp;source=joa&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<div style="float:right;margin:0px 16px 0px 4px;"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="normal-count" data-url="http://blog.joa-ebert.com/2010/05/10/macro-expansion/"></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2010/05/10/macro-expansion/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Apparat: Crunching SWF Files Since 2009</title>
		<link>http://blog.joa-ebert.com/2010/05/07/apparat-crunching-swf-files-since-2009/</link>
		<comments>http://blog.joa-ebert.com/2010/05/07/apparat-crunching-swf-files-since-2009/#comments</comments>
		<pubDate>Fri, 07 May 2010 15:37:04 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=578</guid>
		<description><![CDATA[Apparat has a great new feature that allows you to crea [...]]]></description>
			<content:encoded><![CDATA[<p>Apparat has a great new feature that allows you to create even smaller files. Basic SWF files are compressed using Java&#8217;s standard <code>java.util.zip.Deflater</code> class. This is perfectly fine. And I would even go with no compression at all during development.</p>
<p>However when deploying you can spend some extra time compressing your SWF files with the best tools available. <a href="http://www.7-zip.org/" target="_blank" title="7-Zip">7-Zip</a> is for instance such a tool and achieves a great compression ratio.</p>
<p>If you have the 7z executable on your <code>PATH</code> Apparat will make use of it to achieve the best compression for your SWF files. More configuration options are available <a href="http://code.google.com/p/apparat/wiki/HiddenGems" target="_blank" title="HiddenGems">here</a>.</p>
<p>This feature is currently only implemented for SWF files and not SWCs. However every tool will make use of it by default. So if you are running Reducer and have no graphics in your SWF files you can still get a better compression.</p>
<p>An example is straight from the sources:</p>
<blockquote><p><code>
<pre>reducer -i as3\Apparat.Tests.AS3\bin\Test07.swf
[i] Apparat -- http://apparat.googlecode.com/
[i] Launching tool: Reducer
[i] Waiting for 7z ...
[i] Compression ratio: <b>18.224573%</b>
[i] Total bytes: 310
[i] Completed in 547ms.</pre>
<p></code></p></blockquote>
<p>Note please that this SWF file does not contain any graphical assets and we got still a ratio of 18%. Our main <code>audiotool.swf</code> file is compressed by about 10% &#8212; about 200kb &#8212; and contains no graphical assets either.</p>
<p>You can download the latest Apparat on <a href="http://code.google.com/p/apparat/downloads/detail?name=apparat.zip"  target="_blank" title="Download Apparat">Google Code</a>. Please note that you will need <a href="http://www.scala-lang.org/downloads" target="_blank" title="Scala Downloads">Scala 2.8 RC1</a> as well.
<div class="tweetmeme_button" style="float: right; margin-right: 10px; margin-top: 38px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.joa-ebert.com%2F2010%2F05%2F07%2Fapparat-crunching-swf-files-since-2009%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.joa-ebert.com%2F2010%2F05%2F07%2Fapparat-crunching-swf-files-since-2009%2F&amp;source=joa&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<div style="float:right;margin:0px 16px 0px 4px;"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="normal-count" data-url="http://blog.joa-ebert.com/2010/05/07/apparat-crunching-swf-files-since-2009/"></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2010/05/07/apparat-crunching-swf-files-since-2009/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>Audiotool 1.0</title>
		<link>http://blog.joa-ebert.com/2010/03/25/audiotool-1-0/</link>
		<comments>http://blog.joa-ebert.com/2010/03/25/audiotool-1-0/#comments</comments>
		<pubDate>Thu, 25 Mar 2010 17:34:19 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[audiotool]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=541</guid>
		<description><![CDATA[We have finally released the first version of the Audio [...]]]></description>
			<content:encoded><![CDATA[<p>We have finally released the first version of the <a href="http://www.audiotool.com/" target="_blank" title="Audiotool">Audiotool</a>. I am very thankful for all the kind tweets and happy that our work is now available to the public.</p>
<p>However the current version is named Fire<b>starter</b> for a reason. What you see online is just the tip of the iceberg. I can not wait to start implementing all the cool features that will separate us from traditional software ;)
<div class="tweetmeme_button" style="float: right; margin-right: 10px; margin-top: 38px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.joa-ebert.com%2F2010%2F03%2F25%2Faudiotool-1-0%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.joa-ebert.com%2F2010%2F03%2F25%2Faudiotool-1-0%2F&amp;source=joa&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<div style="float:right;margin:0px 16px 0px 4px;"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="normal-count" data-url="http://blog.joa-ebert.com/2010/03/25/audiotool-1-0/"></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2010/03/25/audiotool-1-0/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>The Scalable Apparat</title>
		<link>http://blog.joa-ebert.com/2009/12/03/the-scalable-apparat/</link>
		<comments>http://blog.joa-ebert.com/2009/12/03/the-scalable-apparat/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 10:38:09 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[apparat scala java]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=507</guid>
		<description><![CDATA[I am a big fan of Scala and used it for a couple of int [...]]]></description>
			<content:encoded><![CDATA[<p>I am a big fan of <a href="http://www.scala-lang.org/" title="Scala">Scala</a> and used it for a couple of internal tools here at <a href="http://www.hobnox.com/audiotool" title="Hobnox AudioTool">Hobnox</a>. What I really like about Scala is the fun factor and the programming speed. That is the reason why I decided to port the whole Apparat framework from Java to Scala. </p>
<p>This was not an easy decision since Apparat is a big project. However I have decided to rewrite Apparat because of the following reasons.</p>
<ol>
<li>Some parts of the framework are not well thought.</li>
<li>TAAS would have been hard to optimize.</li>
<li>This is my (n+1)-th iteration of implementing the ABC format. I think a lot of things can be simplified again.</li>
<li>Scala is an ideal language for Apparat&#8217;s tasks.</li>
</ol>
<p>The Scala <a href="http://code.google.com/p/apparat/source/browse/trunk/scala/apparat/src/apparat/" target="_blank" title="Apparat Source Code">source code</a> is already available on <a href="http://apparat.googlecode.com" title="Apparat on Google Code">Google Code</a>.</p>
<p>Commits will happen early and often. The <a href="http://code.google.com/p/apparat/source/browse/trunk/scala/apparat/src/apparat/?r=176" target="_blank">current revision</a> is able to parse Swf and Swc files. I have also implemented most of the SWF tags which have been part of the Java framework.</p>
<p>I could compare the <a href="http://code.google.com/p/apparat/source/browse/trunk/scala/apparat/src/apparat/swf/SwfInputStream.scala" target="_blank" title="SwfInputStream.scala">Scala</a> and <a href="http://code.google.com/p/apparat/source/browse/trunk/java/Apparat.Core/src/com/joa_ebert/apparat/swf/io/SwfInputStream.java" target="_blank" title="SwfInputStream.java">Java</a> source every day.  Everything is so concise now.
<div class="tweetmeme_button" style="float: right; margin-right: 10px; margin-top: 38px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.joa-ebert.com%2F2009%2F12%2F03%2Fthe-scalable-apparat%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.joa-ebert.com%2F2009%2F12%2F03%2Fthe-scalable-apparat%2F&amp;source=joa&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<div style="float:right;margin:0px 16px 0px 4px;"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="normal-count" data-url="http://blog.joa-ebert.com/2009/12/03/the-scalable-apparat/"></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2009/12/03/the-scalable-apparat/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Polyglott Programming On The AVM2</title>
		<link>http://blog.joa-ebert.com/2009/11/16/polyglott-programming-on-the-avm2/</link>
		<comments>http://blog.joa-ebert.com/2009/11/16/polyglott-programming-on-the-avm2/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 10:49:19 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[experiments]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[apparat]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jvm]]></category>
		<category><![CDATA[polyglott]]></category>
		<category><![CDATA[taas]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=502</guid>
		<description><![CDATA[Take some time and think about this tweet for a moment. [...]]]></description>
			<content:encoded><![CDATA[<p>Take some time and think about <a href="http://twitter.com/jhooks/status/5688660297" target="_blank" title="@jhooks on twitter">this tweet</a> for a moment. It took me a while to realize that Joel Hooks is right. I was embaressed of myself. How could I forget about that? But I had also a big smile on my face at the same same time. Let me explain why.</p>
<p>The Java to SWF compiler does not compile Java sourcecode but JVM bytecode to ActionScript bytecode. This means I do not have to teach my program the Java language. It only understands JVM bytecode. This seems like an akward decision on the one hand since working on the bytecode level implies lots of problems. But it turns out that this was a really cool decision on the other hand. &#8220;<i>Java</i> to SWF compiler&#8221; is maybe the wrong description. &#8220;<i>any language that compiles to JVM bytecode</i> to SWF compiler&#8221; is maybe better.</p>
<p>So what does any language mean? Here is a <a href="http://en.wikipedia.org/wiki/List_of_JVM_languages" target="_blank" title="List of JVM languages">list of JVM languages</a>. Now you feel maybe like I did after reading that tweet. And I am really looking forward to get <a href="http://www.scala-lang.org/" target="_blank" title="Scala Language">Scala</a> up and running.</p>
<p>Some problems still exist. Threading is one issue and I will basically have to do what Scott Peterson did for Alchemy. But reflections, annotations and method overloading have to be solved as well. Some glitches may exist even after figuring everything out. Stacktraces will look pretty weird. However I think this is a really cool project.</p>
<p><b>Update:</b> I forgot to mention something important. Java supports native code. This means you can build a library that works with OpenGL for instance. Those native methods can not be converted. There are also some other things that do not work. File access is just one of them.
<div class="tweetmeme_button" style="float: right; margin-right: 10px; margin-top: 38px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.joa-ebert.com%2F2009%2F11%2F16%2Fpolyglott-programming-on-the-avm2%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.joa-ebert.com%2F2009%2F11%2F16%2Fpolyglott-programming-on-the-avm2%2F&amp;source=joa&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<div style="float:right;margin:0px 16px 0px 4px;"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="normal-count" data-url="http://blog.joa-ebert.com/2009/11/16/polyglott-programming-on-the-avm2/"></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2009/11/16/polyglott-programming-on-the-avm2/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>TAAS progress</title>
		<link>http://blog.joa-ebert.com/2009/09/07/taas-progress/</link>
		<comments>http://blog.joa-ebert.com/2009/09/07/taas-progress/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 14:50:07 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[experiments]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[apparat]]></category>
		<category><![CDATA[taas]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=472</guid>
		<description><![CDATA[I have developed some other optimizations during the pa [...]]]></description>
			<content:encoded><![CDATA[<p>I have developed some other optimizations during the past couple of days. Including <a href="http://en.wikipedia.org/wiki/Strength_reduction" target="_blank" title="Strength Reduction">strength reduction</a> and optimizing <a href="http://en.wikipedia.org/wiki/Tail_recursion" target="_blank" title="Tail Recursion">tail recursive</a> calls.</p>
<p>Strength reduction can already handle about 55 different cases at the moment. For instance it will convert code like <code>if( x - 1 == 0 )</code> into <code>if( x == 1 )</code>. But it will also remove expressions that other optimizations could introduce. <code>x + 0</code> is something that might occur during inline expansion. Or <code>x + Number.NaN</code> for example. </p>
<p>But I really like the tail recursive optimizations. TAAS can detect if a method needs to call itself or not. Take this code for example:<br />
<code>
<pre>private function sum( i: int, value: int ): int
{
	if( i == 0 )
	{
		return value;
	}

	return sum( i - 1, value + i );
}
</pre>
<p></code></p>
<p>You see that the last statement <code>sum( i - 1, value + i )</code> is tail recursive. This means we can replace the recursive call to <code>sum()</code> with a jump to the beginning of the method after changing the method parameters. The <code>sum()</code> method becomes converted to something like a simple while loop. This means also that one could have written code like this in the first place since this optimization applies only to methods that do not have to be recursive after all.</p>
<p>Knock yourself out with some examples:</p>
<ul>
<li><a href="http://www.joa-ebert.com/swfs/taas/b00" target="_blank">Before</a> / <a href="http://www.joa-ebert.com/swfs/taas/a00" target="_blank">After</a> (Inline)</li>
<li><a href="http://www.joa-ebert.com/swfs/taas/b01" target="_blank">Before</a> / <a href="http://www.joa-ebert.com/swfs/taas/a01" target="_blank">After</a> (Inline)</li>
<li><a href="http://www.joa-ebert.com/swfs/taas/b02" target="_blank">Before</a> / <a href="http://www.joa-ebert.com/swfs/taas/a02" target="_blank">After</a> (Tail recursion)</li>
</ul>
<div class="tweetmeme_button" style="float: right; margin-right: 10px; margin-top: 38px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.joa-ebert.com%2F2009%2F09%2F07%2Ftaas-progress%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.joa-ebert.com%2F2009%2F09%2F07%2Ftaas-progress%2F&amp;source=joa&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<div style="float:right;margin:0px 16px 0px 4px;"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="normal-count" data-url="http://blog.joa-ebert.com/2009/09/07/taas-progress/"></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2009/09/07/taas-progress/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>First results of TAAS</title>
		<link>http://blog.joa-ebert.com/2009/09/01/first-results-of-taas/</link>
		<comments>http://blog.joa-ebert.com/2009/09/01/first-results-of-taas/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 17:42:00 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[experiments]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[apparat]]></category>
		<category><![CDATA[taas]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=463</guid>
		<description><![CDATA[

Finally I am able to present the first results of T [...]]]></description>
			<content:encoded><![CDATA[<div align="center"><a href="http://blog.joa-ebert.com/wp-content/images/taas_test.gif" target="_self" title="TAAS in action" rel="lightbox[463]"><img src="http://blog.joa-ebert.com/wp-content/images/taas_test_s.gif" width="420" height="187" alt="TAAS in action" border="0"/></a></div>
<p>Finally I am able to present the first results of <a href="http://apparat.googlecode.com/" target="_blank" title="apparat: TAAS">TAAS</a>. It was a long way to get here. I was actually not sure at all if I will manage to show something at <a href="http://www.flashonthebeach.com/" target="_blank" title="FOTB 09">FOTB 09</a>. Let me explain what happens here.</p>
<p>In the image is the original ActionScript code on the left. The ActionScript bytecode produced by the ASC is in the middle and the compiled TAAS version is on the right. You see that I am running a loop and call a method inside that loop. It would be nice to have small helper methods like this one inlined automatically. TAAS can do this for you now.</p>
<p>So how does this work? First of all an SWF file is parsed and the bytecode is extracted. This bytecode is transformed into a <a href="http://en.wikipedia.org/wiki/Control_flow_graph" target="_blank" title="Control flow graph">control flow graph</a>. This control flow graph is converted into a graph of TAAS expressions which a lot of benifits. The conversion step works like the Flash Player and kind of executes your code. The result is that all methods and local variables are typed if that is possible.</p>
<p>It is much easier to perform a lot of optimizations now. Like <a href="http://en.wikipedia.org/wiki/Inline_expansion" target="_blank" title="Inline Expansion">inline expansion</a>. In order to do that I can simply compile the method that is called to TAAS and connect the vertices together in the graph after some adjustments have been made. The inline expansion step will automatically inline methods when it thinks it is useful and possible. You can only inline methods that are private or final and make no use of reflections.</p>
<p>Inlined methods create a lot of overhead. Usually they contribute additional local variables and the code gets bigger. So one step after the inline expansion is to clean everything up again. In this example I can remove those registers thanks to <a href="http://en.wikipedia.org/wiki/Copy_propagation" title="Copy propagation" target="_blank">copy propagation</a> and <a href="http://en.wikipedia.org/wiki/Dead_code_elimination" target="_blank" title="Dead code elimination">dead code elimination</a>.<br />
And it gets even better. If you take a closer look at the example, the <code>calc</code> method expects two paramters that are of type <code>Number</code>. Therefore the original method uses an <code>Add</code> instruction. TAAS knows about the types and sees that it will pass two integers into this method. Since it makes no sense to convert from <code>int</code> to <code>Number</code> to <code>int</code> it stays with integer in this case.</p>
<p>So after inlining the method ends up with even less local variables. The original local variable <code>t1</code> is considered useless since it is only used one time. TAAS will put the code <code>getTimer()</code> at the position where <code>t1</code> has been used and we end up with a heavily optimized method. What I like the most is that I do not have to change the way I write my ActionScript code. All happens behind the scenes automatically.<br />
Some other optimizations are implicit. TAAS will use <code>AddInt</code> instead of <code>Add</code> if both operands are typed <code>int</code>. A <a href="http://code.google.com/p/apparat/wiki/TaasProposals" target="_blank" title="TAAS Proposals">FlowOptimizer</a> is also involved and will invert the if expression for the loop. This can reduce the number of required jumps in a method by 50%.</p>
<p>I know that the output is not perfect. But this is all a work in progress and really the first result that I can share. The SWFs speak for them self.</p>
<ul>
<li><a href="http://www.joa-ebert.com/swfs/taas/before" target="_blank" title="Before TAAS">Before</a></li>
<li><a href="http://www.joa-ebert.com/swfs/taas/after" target="_blank" title="After TAAS">After</a></li>
</ul>
<div class="tweetmeme_button" style="float: right; margin-right: 10px; margin-top: 38px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.joa-ebert.com%2F2009%2F09%2F01%2Ffirst-results-of-taas%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.joa-ebert.com%2F2009%2F09%2F01%2Ffirst-results-of-taas%2F&amp;source=joa&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<div style="float:right;margin:0px 16px 0px 4px;"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="normal-count" data-url="http://blog.joa-ebert.com/2009/09/01/first-results-of-taas/"></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2009/09/01/first-results-of-taas/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>UML generation using Dump</title>
		<link>http://blog.joa-ebert.com/2009/08/20/uml-generation-using-dump/</link>
		<comments>http://blog.joa-ebert.com/2009/08/20/uml-generation-using-dump/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 18:11:39 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[dump uml apparat]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=458</guid>
		<description><![CDATA[
Dump has now another cool feature: UML diagram genera [...]]]></description>
			<content:encoded><![CDATA[<div align="center"><img src="http://blog.joa-ebert.com/wp-content/images/uml_playerglobal.gif" alt="playerglobal.abc UML" border="0"/></div>
<p>Dump has now another cool feature: UML diagram generation. The UML diagram is exported in DOT format. I think this is a really cool feature because the graph is built by analyzing a SWF file and you get it for free. I will probably create a different tool to make full use of the UML generation since you could link multiple files together for a complete coverage. Since Graphviz is not able to underline text I have choosen to use a dollar sign for static methods. You will also get proper parameter names if you compile your SWF file in debug mode.</p>
<p>This is an example UML diagram for the <code>playerglobal.swc</code>. In order to create it I took the <code>playerglobal.abc</code> from the Tamarin sources and the command was <code>java -jar dump.jar -input playerglobal.abc -uml</code>.</p>
<p>Here are two example representations but be careful. The PNG size is 30831&#215;6232 and might crash your browser. Chrome can display the PNG for me but is not able to show the SVG correct. Firefox displays the SVG very well. You can download the PNG and open it in IrfanView or Photoshop to be safe.</p>
<ul>
<li><a rel="none" href="http://blog.joa-ebert.com/wp-content/images/uml_playerglobal.png" target="_blank" rel="lightbox[458]">PNG</a></li>
<li><a rel="non" href="http://blog.joa-ebert.com/wp-content/images/uml_playerglobal.svg" target="_blank">SVG</a></li>
</ul>
<div class="tweetmeme_button" style="float: right; margin-right: 10px; margin-top: 38px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.joa-ebert.com%2F2009%2F08%2F20%2Fuml-generation-using-dump%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.joa-ebert.com%2F2009%2F08%2F20%2Fuml-generation-using-dump%2F&amp;source=joa&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<div style="float:right;margin:0px 16px 0px 4px;"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="normal-count" data-url="http://blog.joa-ebert.com/2009/08/20/uml-generation-using-dump/"></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2009/08/20/uml-generation-using-dump/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Inheritance Graphs</title>
		<link>http://blog.joa-ebert.com/2009/08/18/inheritance-graphs/</link>
		<comments>http://blog.joa-ebert.com/2009/08/18/inheritance-graphs/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 13:30:13 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[apparat]]></category>
		<category><![CDATA[dot]]></category>
		<category><![CDATA[dump]]></category>
		<category><![CDATA[graphviz]]></category>
		<category><![CDATA[inheritance graph]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=445</guid>
		<description><![CDATA[The Dump tool is now able to export an inheritance grap [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.joa-ebert.com/wp-content/images/inheritanceGraph.jpg" alt="Inheritance Graph" border="0" style="float: right; padding-left: 3px"/>The <a href="http://blog.joa-ebert.com/2009/08/17/dump-disassembler/" target="_self" title="Dump">Dump</a> tool is now able to export an inheritance graph for a given ABC/SWC/SWF file. This is a very easy and nice way to look at the classes and their relationships. The small image shows the graph for one ABC file of the AudioTool. I think this it is pretty neat.</p>
<p>You will need a program like <a href="http://www.graphviz.org/" target="_blank" title="Graphviz">Graphviz</a> to visualize the exported <a href="http://en.wikipedia.org/wiki/DOT_language" target="_blank" title="DOT Language">DOT file</a>. If you want to export the inheritance graph you basically write<code>java -jar dump.jar -input file.swf -ig</code>. I think this shows a really cool feature of Apparat. It is also very easy to reverse engineer a UML diagram. I am not interested in such a feature but maybe someone else.</p>
<p><b>Update:</b> Here is a full-size example for the inheritance graph of the unfinished ImageProcessing library I am currently working on.</p>
<div align="center"><a rel="none" href="http://blog.joa-ebert.com/wp-content/images/ip_ig_b.gif" target="_blank" title="ImageProcessing Library Inheritance Graph" rel="lightbox[445]"><img src="http://blog.joa-ebert.com/wp-content/images/ip_ig_s.jpg" width="420" height="69" alt="ImageProcessing Library Inheritance Graph" border="0"/></a></div>
<div class="tweetmeme_button" style="float: right; margin-right: 10px; margin-top: 38px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.joa-ebert.com%2F2009%2F08%2F18%2Finheritance-graphs%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.joa-ebert.com%2F2009%2F08%2F18%2Finheritance-graphs%2F&amp;source=joa&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<div style="float:right;margin:0px 16px 0px 4px;"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="normal-count" data-url="http://blog.joa-ebert.com/2009/08/18/inheritance-graphs/"></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2009/08/18/inheritance-graphs/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Dump Disassembler</title>
		<link>http://blog.joa-ebert.com/2009/08/17/dump-disassembler/</link>
		<comments>http://blog.joa-ebert.com/2009/08/17/dump-disassembler/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 14:44:08 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[apparat dump]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=439</guid>
		<description><![CDATA[A very important tool for SWF manipulation is a way to  [...]]]></description>
			<content:encoded><![CDATA[<p>A very important tool for SWF manipulation is a way to debug them and to have a look at the bytecode. Dump is a tool that does nothing else but listing all SWF Tags and ABC files the way Apparat represents them internally.</p>
<p>I know that there are a lot of other tools out there. <a href="http://opensource.adobe.com/svn/opensource/flex/sdk/trunk/modules/swfutils/src/java/flash/swf/tools/AbcPrinter.java" target="_blank" title="swfdump">swfdump</a> and <a href="http://hg.mozilla.org/tamarin-redux/file/b7e3811ee1ae/utils/abcdump.as" target="_blank" title="abcdump">abcdump</a> are great already. I have used swfdump from the Flex SDK before. But I dislike how they represent namespaces and the fact that not all properties are always shown. Dump is simple. It lists everything and uses the naming form the <a href="http://www.adobe.com/devnet/actionscript/articles/avm2overview.pdf" target="_blank">avm2overview.pdf</a>. </p>
<ul>
<li><a href="http://www.joa-ebert.com/files/zip/dump.zip" target="_blank" title="Dump">Download</a></li>
</ul>
<div class="tweetmeme_button" style="float: right; margin-right: 10px; margin-top: 38px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.joa-ebert.com%2F2009%2F08%2F17%2Fdump-disassembler%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.joa-ebert.com%2F2009%2F08%2F17%2Fdump-disassembler%2F&amp;source=joa&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<div style="float:right;margin:0px 16px 0px 4px;"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="normal-count" data-url="http://blog.joa-ebert.com/2009/08/17/dump-disassembler/"></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2009/08/17/dump-disassembler/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Apparat is now Open Source</title>
		<link>http://blog.joa-ebert.com/2009/08/11/apparat-is-now-open-source/</link>
		<comments>http://blog.joa-ebert.com/2009/08/11/apparat-is-now-open-source/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 21:45:07 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[apparat]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[reducer]]></category>
		<category><![CDATA[taas]]></category>
		<category><![CDATA[tdsi]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=433</guid>
		<description><![CDATA[The full source code of Apparat is now available at Goo [...]]]></description>
			<content:encoded><![CDATA[<p>The full source code of <a href="http://apparat.googlecode.com/" target="_blank" title="Apparat">Apparat</a> is now available at GoogleCode. It is the whole framework behind <a href="http://blog.joa-ebert.com/2009/08/05/turbodieselsportinjection/" target="_self" title="TurboDieselSportInjection">TDSI</a> and <a href="http://blog.joa-ebert.com/2009/08/08/reducer/" target="_self" title="Reducer">Reducer</a>.</p>
<p>Apparat is released under the <a href="http://www.gnu.org/licenses/lgpl.html" target="_blank">GNU Lesser General Public License</a>. Please contact me if you want to contribute to this project. Maybe someone is interested in writing an Ant task for Reducer? I am also happy to receive feedback if you have used the framework to build something cool with it.</p>
<ul>
<li><a href="http://apparat.googlecode.com/" target="_blank" title="Apparat">Apparat at GoogleCode</a></li>
</ul>
<p>Please join the <a href="http://groups.google.com/group/apparat-framework" title="Apparat Discussion Group" target="_blank">Apparat Discussion Group</a> if you are interested in collaboration.
<div class="tweetmeme_button" style="float: right; margin-right: 10px; margin-top: 38px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.joa-ebert.com%2F2009%2F08%2F11%2Fapparat-is-now-open-source%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.joa-ebert.com%2F2009%2F08%2F11%2Fapparat-is-now-open-source%2F&amp;source=joa&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<div style="float:right;margin:0px 16px 0px 4px;"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="normal-count" data-url="http://blog.joa-ebert.com/2009/08/11/apparat-is-now-open-source/"></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2009/08/11/apparat-is-now-open-source/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Reducer</title>
		<link>http://blog.joa-ebert.com/2009/08/08/reducer/</link>
		<comments>http://blog.joa-ebert.com/2009/08/08/reducer/#comments</comments>
		<pubDate>Sat, 08 Aug 2009 19:20:07 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[reducer]]></category>
		<category><![CDATA[swf]]></category>
		<category><![CDATA[tass]]></category>
		<category><![CDATA[tdsi]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=417</guid>
		<description><![CDATA[Another spinoff from my current library to optimize SWF [...]]]></description>
			<content:encoded><![CDATA[<p>Another spinoff from my current library to optimize SWF/SWC files. Reducer is a tool that will make SWF and SWC files significantly smaller. There is currently a huge problem with filesizes. If you use the <code>[Embed]</code> tag with PNG images they are not compressed at all. For the Hobnox AudioTool we have been using the Flash IDE to export all graphics so that they are smaller which was a pain.</p>
<p>Now with Reducer you are safe to use <code>[Embed]</code> and then run the tool afterwards. It will compress all lossless images and make them lossy. But usually a PNG can be compressed at 100% JPEG quality and you will still safe a lot of data.</p>
<p>Note: You will not loose alpha transparency when using Reducer. The SWF file format allows us to use a special compression where a PNG gets split up into its color and alpha channels. The color channels are encoded using the traditional JPEG algorithm with adjustable quality while the alpha channel is handled seperately. Transparency is always stored in a lossless fashion which means even with a low JPEG quality you will not get any compression artifacts for the alpha channel.</p>
<ul>
<li><a href="http://www.joa-ebert.com/files/zip/reducer.zip" title="Reducer" target="_self">Download</a></li>
</ul>
<p><b>Update:</b> Reducer is now <a href="http://blog.joa-ebert.com/2009/08/11/apparat-is-now-open-source/" target="_self" title="Apparat is now Open Source">open source</a>!
<div class="tweetmeme_button" style="float: right; margin-right: 10px; margin-top: 38px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.joa-ebert.com%2F2009%2F08%2F08%2Freducer%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.joa-ebert.com%2F2009%2F08%2F08%2Freducer%2F&amp;source=joa&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<div style="float:right;margin:0px 16px 0px 4px;"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="normal-count" data-url="http://blog.joa-ebert.com/2009/08/08/reducer/"></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2009/08/08/reducer/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
		<item>
		<title>TurboDieselSportInjection</title>
		<link>http://blog.joa-ebert.com/2009/08/05/turbodieselsportinjection/</link>
		<comments>http://blog.joa-ebert.com/2009/08/05/turbodieselsportinjection/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 11:03:51 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[experiments]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[abc]]></category>
		<category><![CDATA[alchemy]]></category>
		<category><![CDATA[bytecode]]></category>
		<category><![CDATA[inline]]></category>
		<category><![CDATA[taas]]></category>
		<category><![CDATA[tdsi]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=401</guid>
		<description><![CDATA[I am definitly not good at choosing names for software  [...]]]></description>
			<content:encoded><![CDATA[<p>I am definitly not good at choosing names for software projects. However TurboDieselSportInjection is a release of my experiments from yesterday. It is a spinoff from the whole framework and allows you to inline <code>__bytecode</code> and of course to use the new Memory API.</p>
<p>Hopefully you are kind enough to provide me with some feedback. I am especially interested in Exceptions that occur when reading or writing ABC files. Have fun!</p>
<ul>
<li><a href="http://www.joa-ebert.com/files/zip/tdsi.zip" target="_blank" title="TDSI Download">Download</a></li>
</ul>
<p><b>Update:</b> TDSI is now <a href="http://blog.joa-ebert.com/2009/08/11/apparat-is-now-open-source/" target="_self" title="Apparat is now Open Source">open source</a>!
<div class="tweetmeme_button" style="float: right; margin-right: 10px; margin-top: 38px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.joa-ebert.com%2F2009%2F08%2F05%2Fturbodieselsportinjection%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.joa-ebert.com%2F2009%2F08%2F05%2Fturbodieselsportinjection%2F&amp;source=joa&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<div style="float:right;margin:0px 16px 0px 4px;"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="normal-count" data-url="http://blog.joa-ebert.com/2009/08/05/turbodieselsportinjection/"></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2009/08/05/turbodieselsportinjection/feed/</wfw:commentRss>
		<slash:comments>50</slash:comments>
		</item>
	</channel>
</rss>
