<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>blog.joa-ebert.com - Blog of Joa Ebert</title>
	
	<link>http://blog.joa-ebert.com</link>
	<description>Actionscript3, Flash, Java, C#, C++, Algorithms &amp; Imageprocessing</description>
	<pubDate>Mon, 01 Dec 2008 12:57:12 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/je2050" type="application/rss+xml" /><item>
		<title>Alchemy, ActionScript and the ASC</title>
		<link>http://feeds.feedburner.com/~r/je2050/~3/471268998/</link>
		<comments>http://blog.joa-ebert.com/2008/12/01/alchemy-actionscript-asc/#comments</comments>
		<pubDate>Mon, 01 Dec 2008 12:57:12 +0000</pubDate>
		<dc:creator>joa</dc:creator>
		
		<category><![CDATA[Flash]]></category>

		<category><![CDATA[as3]]></category>

		<category><![CDATA[actionscript]]></category>

		<category><![CDATA[adobe]]></category>

		<category><![CDATA[alchemy]]></category>

		<category><![CDATA[asc]]></category>

		<category><![CDATA[haxe]]></category>

		<category><![CDATA[nicolas cannasse]]></category>

		<category><![CDATA[pixelbender]]></category>

		<category><![CDATA[ralph hauwert]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=265</guid>
		<description><![CDATA[Ralph Hauwert put a very interesting blog post up no his blog about Adobe Alchemy. Basically he was reading my mind with this post.
I want to a step further now. But please keep in mind that I am definitly not a compiler expert or have deep knowledge of the Flash Player. Everything I write about [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.unitzeroone.com/" target="_blank">Ralph Hauwert</a> put a very interesting <a href="http://www.unitzeroone.com/blog/2008/11/28/adobe-alchemy-is-it-actionscript-heresy/" target="_blank">blog post</a> up no his blog about <a href="http://labs.adobe.com/technologies/alchemy/" target="_blank">Adobe Alchemy</a>. Basically he was reading my mind with this post.</p>
<p>I want to a step further now. But please keep in mind that I am definitly not a compiler expert or have deep knowledge of the Flash Player. Everything I write about is in my opinion common sense and comes from a long time of reverse engineering and autodidactic learning.</p>
<p><span id="more-265"></span></p>
<h3>Alchemy</h3>
<p>First of all I have to say that Alchemy is a great research project and I have full respect for Scott Peterson and his work. He did an awesome job and I am more than happy that Alchemy has now been released on labs because people begin to question now the Flash Player, ActionScript and the ASC (ActionScript Compiler).<br />
So why is Alchemy faster than using plain ActionScript &#8212; or is that true at all? I do not want to disappoint anyone here but writing C/C++ code instead of ActionScript is not the right way. Alchemy will never be faster than your plain handoptimized ActionScript and it still has to prove for me that it is actually faster. All my comparisons between Alchemy and ActionScript showed that using ActionScript is in most cases faster.<br />
But it makes sense to use Alchemy. An audio encoder for instance runs for a long time on its own without having to exchange data. Currently it is very slow to transfer data between Alchemy and ActionScript on every frame. This does not mean Alchemy is bad, but it will not work for your <a href="http://www.assembla.com/spaces/floorplanner-alchemy/documents/dZ88ruUByr3Anoab7jnrAJ/download/invsqrt.c" target="_blank">fast inverse square root</a> algorithm.<br />
So why can Alchemy be faster at all? There are a couple of reasons for that.</p>
<ol>
<li>C/C++ can be compiled and optimized much better than ActionScript</li>
<li>The language offers you features you would dream about as an ActionScript programmer (operator overloading, method inlining, templates, etc.)</li>
<li>The <a href="http://www.llvm.org/" target="_blank">LLVM</a> does a really good job on optimizing its intermediate language</li>
<li>Alchemy comes with some <a href="http://ncannasse.fr/blog/virtual_memory_api" target="_blank">new opcodes</a> for the Flash Player that allow very fast ByteArray operations</li>
<li>Alchemy uses a modified ASC that supports inlining of Flash Player bytecodes.</li>
</ol>
<p>So just to make one thing cristal clear: If the new opcodes would not exist, Alchemy would produce very poor results in terms of execution speed. But albeit that I have to disappoint you about the execution speed of Alchemy in general. Nicolas Cannasse wrote an <a href="http://www.ncannasse.fr/blog/adobe_alchemy" target="_blank">interesting blog post</a> about this issue and I completly agree. ActionScript does not support a lot of features which C/C++ offers &#8212; pointers for instance. All those features have to be wrapped and this means a significant speed loss.<br />
But I do not want to start an Alchemy bashing here. I still think it is a really great technology and the main use case is not fast code execution. But it brings me to my next points: The ActionScript language and the ASC.</p>
<h3>ActionScript</h3>
<p>ActionScript has been designed several years ago and Adobe had always the incentive to be ECMA compilant. Being standards compilant reduces a certain level of innovation and recuded the power of the Flash Player in the last years. Right now, ActionScript 3 is <a href="http://whydoeseverythingsuck.com/2008/08/ru-roh-adobe-screwed-by-ecmascript.html" target="_blank">not an ECMA compilant language</a>. And I am not saying this because ECMA Script 4 has been dropped. ActionScript 3 added additional &#8220;features&#8221; even before that happened.<br />
For a long time ActionScript 3 has been very close in terms of its ECMA compilance but I think it is now time for innovation. The ActionScript 3 language does not fulfill most of the professional needs.<br />
Have you ever looked at <a href="http://www.haxe.org/" target="_blank">haXe</a>? I hope you did. haXe is definitly not perfect but I want give you a small excerpt of haXe language features which will make your mouth water:</p>
<ul>
<li>You are abel to use <a href="http://www.haxe.org/ref/type_params" target="_blank">type parameters</a></li>
<li>You are able to use <a href="http://www.haxe.org/ref/type_advanced" target="_blank">function types</a> like <code>Event -> Void</code> for an event listener instead of <code>Function</code></li>
<li>Enums instead of the <code>public static const</code> convulsion</li>
</ul>
<p>Why am I talking about haXe at all? Java has most of those features implemented as well and several other languages too. But haXe can output a SWF so we can compare it to ActionScript. haXe is in a lot of ways superior to ActionScript and I did not talk about the compiler yet.<br />
The quintessence is that ActionScript is not a feature rich language compared to mature ones. And even a single French genius can develop something better than a multi-million dollar company. What the hell is going on here?<br />
The main problem of ActionScript is that you lose most of your types along the way and therefore the compiler can not produce a good output. E.g. everytime you put some object into an Array in ActionScript its type is lost unless you cast of course when reading again &#8212; and I hope you do that. This is a really big problem. This is the reason why Alchemy can produce &#8220;better ActionScript&#8221; than you. Not because you are stupid but because you do not have the tools in ActionScript to do that. And this is a shame for Adobe. So many great developers could produce such a great output but they are not allowed to.</p>
<h3>ActionScript Compiler</h3>
<p>One of the main problem in the whole Flash universe is the ActionScript compiler. This is a little bit harder to explain because it is a little bit more abstract. Some problems exist because of the ActionScript language nature. But some problems exist because of the compiler itself. Let me explain this with an example:<br />
<code><br />
package {<br />
	public final class Example extends flash.display.Sprite {<br />
		public function Example() {<br />
			var a: int = 1+2;<br />
			var b: int = a;<br />
			var c: int = b+1;<br />
		}<br />
	}<br />
}<br />
</code><br />
This code will produce exactly this output for the constructor:<br />
<code><br />
get_local0<br />
pushscope<br />
get_local0<br />
constructsuper 0<br />
<b>pushbyte 1<br />
pushbyte 2<br />
add<br />
convert_i<br />
set_local1<br />
get_local1<br />
convert_i<br />
set_local2<br />
get_local2<br />
pushbyte 1<br />
add<br />
convert_i<br />
set_local3</b><br />
returnvoid<br />
</code><br />
The interesting part has been marked bold. Let me explain what is going on here:</p>
<ol>
<li>Put value 1 on the stack</li>
<li>Put value 2 on the stack</li>
<li>Add the two values which are on the stack together using floating point calculus</li>
<li>Convert this floating point value to an integer</li>
<li>Set this value to local register one which is <code>a</code></li>
<li>Put the value of local register one on the stack</li>
<li>Convert this floating point value to an integer</li>
<li>Set the value to local register two which is <code>b</code></li>
<li>Put the value of local register two on the stack</li>
<li>Put value 1 on the stack</li>
<li>Add the two values which are on the stack together using floating point calculus</li>
<li>Convert this floating point value to an integer</li>
<li>Set this value to local register three which is <code>c</code></li>
</ol>
<p>Basically this is an example for the worst output a compiler could produce. First of all <code>b</code> is not needed at all in our code. We hold just the value <code>a</code> in <code>b</code>. <code>a</code> holds a constant value <code>3</code>. Why do we have to add this stuff together at runtime everytime if it is constant? For <code>c</code> we add the constant value <code>1</code> to the constant value <code>3</code> which has been stored in <code>a</code>. The compiler should know at this point three things: a is constant, b is not needed, c is constant. The compiler could just set <code>c</code> to the integer value of <code>4</code>. This is also what I would expect for a <b>S</b>mall<b>W</b>eb<b>F</b>ormat.<br />
But to make it even more interesting: <code>c</code> is not used at all. So why does the constructor contain any bytecode at all besides calling the super constructor? And to make it a little bit more absurd: Try doing the same in <a href="http://labs.adobe.com/technologies/pixelbender/" target="_blank">PixelBender</a> and use <a href="http://www.kaourantin.net/2008/09/pixel-bender-pbj-files.html" target="_blank">Tinic&#8217;s disassembler</a>. You will see that you will not find any of your local variables in the PixelBender bytecode &#8212; which is correct. And the answer why the PixelBender compiler is smarter than the ASC is quite easy: Adobe uses the LLVM for PixelBender as well. Remember the LLVM is what Alchemy is using. This means basically that PixelBender has a better compiler than we have for ActionScript. This is sad and insane but true.<br />
With the haXe compiler you will get nearly the same output as the ASC with certain differences. All the variables are integer values and therefore haXe uses integer calculus. And the last addition does not involve <code>b</code> at all. haXe will not ignore that <code>a</code>, <code>b</code> and <code>c</code> are not used at all. But as I said: haXe is definitly not perfect &#8212; but it is by far better.</p>
<p>I have asked for certain features a lot in the past and implemented them for myself. I asked Adobe to support the __asm keyword even before Alchemy and they refused it. Of course I am a little bit disappointed about that because now they use it for Alchemy and they see it makes sense. Basically having a __asm keyword allows you to get around the nonsense which the ASC produces at least for performance critical loops. This is why I started writing AS3C but it is basically a stupid idea to try optimizing on a byte code level but it integrated very well into my daily workflow.<br />
The Flash Player could work much faster if we could access certain things with ActionScript. The lookup of a class can be stored in a local variable for instance which gives a significat speed boost. haXe already allows you to do that via <code>var m = Math</code>. Why do we have to wait for such things so long?</p>
<h3>Thoughts</h3>
<p>Now after writing about Alchemy, ActionScript and the ASC I think that you get the idea. What we need is a compiler that works. And once the new Alchemy opcodes are supported in the ASC it will be much more fun to write your lightning fast ActionScript code instead of converting C libraries. We need a mature language which allows us to work in professional large-scale environments and which allows the compiler to produce a good output.<br />
Libraries which are a community-darling could become even better, easier to use and faster in execution speed which would result in better user experiences.<br />
I would like to see a faster and more innovative development of ActionScript and the ASC. But then there are the politics and all the bussiness stuff so we will have to wait probably for ages until we get what we need. Right now we can use alternatives such as haXe. And the good thing is that other companies do not sleep as well. I would love to write C# instead of ActionScript but Silverlight just sucks. Maybe someone could write a C#-&gt;LLVM-&gt;ActionScript-&gt;SWF compiler toolkit?</p>
<p class="akst_link"><a href="http://blog.joa-ebert.com/?p=265&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_265" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2008/12/01/alchemy-actionscript-asc/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.joa-ebert.com/2008/12/01/alchemy-actionscript-asc/</feedburner:origLink></item>
		<item>
		<title>Tones</title>
		<link>http://feeds.feedburner.com/~r/je2050/~3/459483658/</link>
		<comments>http://blog.joa-ebert.com/2008/11/20/tones/#comments</comments>
		<pubDate>Thu, 20 Nov 2008 11:50:30 +0000</pubDate>
		<dc:creator>joa</dc:creator>
		
		<category><![CDATA[news]]></category>

		<category><![CDATA[personal]]></category>

		<category><![CDATA[audio]]></category>

		<category><![CDATA[audiotool]]></category>

		<category><![CDATA[hobnox]]></category>

		<category><![CDATA[soundcloud]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=263</guid>
		<description><![CDATA[I just put up a site with all the AudioTool recordings that I think are quite interesting. It is way easier to share them like that instead of posting about every single track.
I will also put some more sets and other tracks there if I find the time. The site will update randomly.

Tones

Share This
]]></description>
			<content:encoded><![CDATA[<p>I just put up a site with all the AudioTool recordings that I think are quite interesting. It is way easier to share them like that instead of posting about every single track.</p>
<p>I will also put some more sets and other tracks there if I find the time. The site will update randomly.</p>
<ul>
<li><a href="/tones">Tones</a></li>
</ul>
<p class="akst_link"><a href="http://blog.joa-ebert.com/?p=263&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_263" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2008/11/20/tones/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.joa-ebert.com/2008/11/20/tones/</feedburner:origLink></item>
		<item>
		<title>FOTB Miami</title>
		<link>http://feeds.feedburner.com/~r/je2050/~3/433556974/</link>
		<comments>http://blog.joa-ebert.com/2008/10/27/fotb-miami/#comments</comments>
		<pubDate>Mon, 27 Oct 2008 13:17:28 +0000</pubDate>
		<dc:creator>joa</dc:creator>
		
		<category><![CDATA[Flash]]></category>

		<category><![CDATA[news]]></category>

		<category><![CDATA[fotb miami]]></category>

		<category><![CDATA[john davey]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=258</guid>
		<description><![CDATA[ The FOTB Miami website is now up and running. Yes, that&#8217;s right! John Davey will bring the FOTB spirit to Miami.
I think John has choosen a perfect location. I am excited to meet new people and to be a part of a fantastic speaker line-up. More information available at http://www.flashonthebeach.com/.
Share This
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flashonthebeach.com/" target="_blank"><img border="0" alt="Flash On The Beach Miami" src="http://www.flashonthebeach.com/images/content/fotb_badge_2.gif"/ style="float: left; padding-right: 3px"></a> The FOTB Miami website is now up and running. Yes, that&#8217;s right! John Davey will bring the FOTB spirit to Miami.</p>
<p>I think John has choosen a perfect location. I am excited to meet new people and to be a part of a fantastic speaker line-up. More information available at <a href="http://www.flashonthebeach.com/" target="_blank" title="FOTB Miami">http://www.flashonthebeach.com/</a>.</p>
<p class="akst_link"><a href="http://blog.joa-ebert.com/?p=258&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_258" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2008/10/27/fotb-miami/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.joa-ebert.com/2008/10/27/fotb-miami/</feedburner:origLink></item>
		<item>
		<title>Hobnox Java MIDI SPI for OS X</title>
		<link>http://feeds.feedburner.com/~r/je2050/~3/428845761/</link>
		<comments>http://blog.joa-ebert.com/2008/10/22/hobnox-java-midi-spi-for-os-x/#comments</comments>
		<pubDate>Wed, 22 Oct 2008 18:57:50 +0000</pubDate>
		<dc:creator>joa</dc:creator>
		
		<category><![CDATA[Flash]]></category>

		<category><![CDATA[personal]]></category>

		<category><![CDATA[projects]]></category>

		<category><![CDATA[coremidi]]></category>

		<category><![CDATA[java]]></category>

		<category><![CDATA[jni]]></category>

		<category><![CDATA[midi]]></category>

		<category><![CDATA[spi]]></category>

		<category><![CDATA[synergy]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=254</guid>
		<description><![CDATA[Everyone who worked with Java and MIDI was having problems when it comes to MIDI support on Mac OS X. It is simply not supported. So we were running into the same issue. Luckily Java has two nice features. The first is called Service Provider Interface (SPI) which allows you to create your own provider [...]]]></description>
			<content:encoded><![CDATA[<p>Everyone who worked with <a href="http://www.java.com/" target="_blank">Java</a> and <a href="http://www.midi.org/" target="_blank">MIDI</a> was having problems when it comes to MIDI support on <a href="http://www.apple.com/" target="_blank">Mac OS X</a>. It is simply not supported. So we were running into the same issue. Luckily Java has two nice features. The first is called <a href="http://en.wikipedia.org/wiki/Service_provider_interface" target="_blank">Service Provider Interface</a> (SPI) which allows you to create your own provider of MIDI devices for instance. The second feature is called <a href="http://en.wikipedia.org/wiki/Java_Native_Interface" target="_blank">Java Native Interface</a> (JNI) which allows you to execute platform specific code.</p>
<p>Now I do not really know why there is no MIDI support on the Mac because the implementation is fairly simple. OS X comes with a lot of easy-to-use system libraries. One of those libraries is <a href="http://developer.apple.com/audio/overview.html" target="_blank">CoreMIDI</a>. Now the only thing you have to do is wire everything together. Use SPI to talk over JNI with CoreMIDI and you are set.</p>
<p>I am not a Java programmer and not a Mac user at all. But I think I learned some common things during the last days.</p>
<ul>
<li><a href="http://synergy2.sourceforge.net/" target="_blank">Synergy</a> is awesome. A good friend told me about it half a year ago and now I  finally tried it. One mouse and keyboard to control four screens which are connected to my Laptop and Macbook is pure luxury &#8212; but for free! Synergy is open-source and absolutely superior to a VNC solution.</li>
<li>JNI is not hard to handle. It was not my first time using it but when it comes to threading you have to keep in mind that references to Java objects have to be marked global and everything from the call to your JNI method becomes invalid. Keeping a reference to the JVM and attaching the thread to it works very well.</li>
<li>The Ant Jar task has a bug. Defining a service using the &lt;service/&gt; tag does not work because the folder in the jar will be named &#8220;service&#8221; and not &#8220;service<b>s</b>&#8220;.</li>
</ul>
<p>I am definitly not an expert when it comes to this kind of stuff but I had my problems especially with the Ant bug and calling a Java method from a different thread. The result is very nice on the one hand because it works for all kinds of MIDI messages now but on the other hand I still have to ask myself why nobody included this feature for the OS X Java VM in the first place.</p>
<p>The good news is that we will have a very robust MIDI implementation which will work crossplatform without the need to install any additional libraries.</p>
<p class="akst_link"><a href="http://blog.joa-ebert.com/?p=254&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_254" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2008/10/22/hobnox-java-midi-spi-for-os-x/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.joa-ebert.com/2008/10/22/hobnox-java-midi-spi-for-os-x/</feedburner:origLink></item>
		<item>
		<title>David vs. Goliath</title>
		<link>http://feeds.feedburner.com/~r/je2050/~3/422749710/</link>
		<comments>http://blog.joa-ebert.com/2008/10/16/david-vs-goliath/#comments</comments>
		<pubDate>Thu, 16 Oct 2008 15:16:16 +0000</pubDate>
		<dc:creator>joa</dc:creator>
		
		<category><![CDATA[Flash]]></category>

		<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=251</guid>
		<description><![CDATA[At one point André Michelle, Kai-Philipp Schöllmann and I really thought that we had success after a long time of struggle. We had the audio hack back in the popforge days. It became more and more unstable. Then we used a Java server to have a stable output. We got rid of that one because [...]]]></description>
			<content:encoded><![CDATA[<p>At one point <a href="http://blog.andre-michelle.com" target="_blank">André Michelle</a>, <a href="http://opencode.forabettertoday.org/" target="_blank">Kai-Philipp Schöllmann</a> and I really thought that we had success after a long time of struggle. We had the audio hack back in the <a href="http://popforge.googlecode.com/">popforge</a> days. It became more and more unstable. Then we used a Java server to have a stable output. We got rid of that one because we had the ultimate solution in our hands: Flash Player 10 with dynamic audio support.</p>
<p>Last week I was on holidays &#8212; no laptop, no internet, no mobile. Just wanted to get fresh eyes, relax a little bit &#8212; you name it. Yes, that&#8217;s right: I missed the launch of the Flash Player 10.</p>
<p><span id="more-251"></span></p>
<p>Today I went into the office and I heard about the news. The released version Flash Player 10 has a completly different behaviour when it comes to dynamic audio. We have been developing with Flash Player 10 for a while and it has been working like a charm.<br />
But without telling anyone Adobe has changed the behaviour of the sound API. I can partially understand the changes which means I do not understand why it worked in the first place but the main point is that it worked. I have also another solution in my mind to keep it the same way as it was before.</p>
<p>We implemented several techniques to ensure a stable audio output. There are still parts in the Flash Player implemented native which we could not circumvent or would take a ridicolous amount of time to get around. Imagine if you set the scale on a big <code>DisplayObjectContainer</code>. The Flash Player itself will take a lot of time to perform this task. Enough time to block the audio stream. Therefore we were pre-calculating the needed audio information. Since the Flash Player or ActionScript is not multi-threaded it was the only option to send the data before performing such an expensive task. This is now impossible. The whole work we did was worthless and the application feels less stable.</p>
<p>Now there is no way for us to fix this issue with the latest changes. The reason why I am so disappointed is because nobody told us. It was probably a small change for the Adobe engineers but it has such a big impact nobody thought about that I ask myself how they deal with responsibility.</p>
<p>What can we do? We can wait. Get some feedback from the engineers and try to get the old version back. Of course we can arm up the <a target="_blank" href="http://www.make-some-noise.info/">MAKE SOME NOISE</a> campaing but then what? Wait another year for Flash Player 11 and see how the API changes with the release? Without being notified?</p>
<p>Adobe, this was a real disappointment. I am not amused.</p>
<p>I am really happy that my work in the next couple of months will be focused on low-level API programming and server communication. I will not write that much ActionScript code &#8212; MIDI is about to make it into our tool and I have to write some nice stuff for you Mac folks without a proper Java VM ;)</p>
<p class="akst_link"><a href="http://blog.joa-ebert.com/?p=251&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_251" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2008/10/16/david-vs-goliath/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.joa-ebert.com/2008/10/16/david-vs-goliath/</feedburner:origLink></item>
		<item>
		<title>PixelBender Outline View</title>
		<link>http://feeds.feedburner.com/~r/je2050/~3/414959088/</link>
		<comments>http://blog.joa-ebert.com/2008/10/08/pixelbender-outline-view/#comments</comments>
		<pubDate>Wed, 08 Oct 2008 16:36:42 +0000</pubDate>
		<dc:creator>joa</dc:creator>
		
		<category><![CDATA[Flash]]></category>

		<category><![CDATA[as3]]></category>

		<category><![CDATA[hydra]]></category>

		<category><![CDATA[personal]]></category>

		<category><![CDATA[projects]]></category>

		<category><![CDATA[eclipse]]></category>

		<category><![CDATA[fdt]]></category>

		<category><![CDATA[pixelbender]]></category>

		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=245</guid>
		<description><![CDATA[PixelBender Outline is a simple view for Eclipse. It allows you to browse through compiled PixelBender kernel files (pbj). Usually it is quite annoying when working with PixelBender. You always have to debug the shader if you did not write it yourself to know about parameters and stuff. The PixelBender Outline view allows you to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.joa-ebert.com/wp-content/images/pixelBenderOutline.jpg" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/images/pixelBenderOutline.gif" alt="PixelBender Outline" border="0" style="float: right; padding-left: 6px"/></a>PixelBender Outline is a simple view for Eclipse. It allows you to browse through compiled PixelBender kernel files (pbj). Usually it is quite annoying when working with PixelBender. You always have to debug the shader if you did not write it yourself to know about parameters and stuff. The PixelBender Outline view allows you to navigate through that information in a comfortable way.</p>
<p><b>PixelBender Outline is working with FDT only</b>. Just grab the JAR file and place it into your Eclipse plugins folder (&#8230;/Eclipse/plugins/) to install it. After restarting Eclipse you can open the view using Window-&gt;Show View-&gt;Other-&gt;PixelBender-&gt;PixelBender Outline.</p>
<p>The outline is updated everytime you select a *.pbj file in the Flash Explorer.</p>
<ul>
<li><a href="http://www.joa-ebert.com/files/jar/com.joa_ebert.eclipse.pbjexplorer_1.0.0.jar" target="_blank">Download</a></li>
</ul>
<p class="akst_link"><a href="http://blog.joa-ebert.com/?p=245&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_245" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2008/10/08/pixelbender-outline-view/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.joa-ebert.com/2008/10/08/pixelbender-outline-view/</feedburner:origLink></item>
		<item>
		<title>AS3V</title>
		<link>http://feeds.feedburner.com/~r/je2050/~3/412717624/</link>
		<comments>http://blog.joa-ebert.com/2008/10/06/as3v/#comments</comments>
		<pubDate>Mon, 06 Oct 2008 11:33:12 +0000</pubDate>
		<dc:creator>joa</dc:creator>
		
		<category><![CDATA[Flash]]></category>

		<category><![CDATA[as3]]></category>

		<category><![CDATA[personal]]></category>

		<category><![CDATA[projects]]></category>

		<category><![CDATA[as3v]]></category>

		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=243</guid>
		<description><![CDATA[At the end of my FOTB session I wanted to show you my latest tool called AS3V. Time was short and there was a small glitch so I could not show it. But now I can explain what AS3V really is without having to rush.
AS3V is basically a tool that can check for syntactical correctness. [...]]]></description>
			<content:encoded><![CDATA[<p>At the end of my FOTB session I wanted to show you my latest tool called <a href="http://as3v.googlecode.com" target="_blank" title="AS3V">AS3V</a>. Time was short and there was a small glitch so I could not show it. But now I can explain what AS3V really is without having to rush.</p>
<p>AS3V is basically a tool that can check for syntactical correctness. It will do with your code what a compiler does but it keeps formatting metadata. That way it can generate an XML skeleton of your code and apply rules on the XML.</p>
<p>You can have a look at the first output AS3V produces <a href="view-source:http://www.joa-ebert.com/files/xml/as3v_00.xml" target="_blank" title="AS3V output">here</a>. The original source code is included in the comment at the top.</p>
<p>As you can see it will be possible to force coding standards for instance and to warn if code could be optimized. I hope that it will be possible to have a first version of a stable parser soon. ANTLR is still giving me a lot of trouble but it is the first time for me working with such a tool as well.</p>
<p class="akst_link"><a href="http://blog.joa-ebert.com/?p=243&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_243" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2008/10/06/as3v/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.joa-ebert.com/2008/10/06/as3v/</feedburner:origLink></item>
		<item>
		<title>AudioTool’s Private Parts Slides</title>
		<link>http://feeds.feedburner.com/~r/je2050/~3/408117715/</link>
		<comments>http://blog.joa-ebert.com/2008/10/01/audiotools-private-parts-slides/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 10:10:00 +0000</pubDate>
		<dc:creator>joa</dc:creator>
		
		<category><![CDATA[Flash]]></category>

		<category><![CDATA[as3]]></category>

		<category><![CDATA[knowledge]]></category>

		<category><![CDATA[audiotool]]></category>

		<category><![CDATA[fotb]]></category>

		<category><![CDATA[hobnox]]></category>

		<category><![CDATA[session]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=235</guid>
		<description><![CDATA[Here are the slides from my Flash On The Beach 2008 session &#8220;AudioTool&#8217;s Private Parts&#8221;. 2mb without a prelaoder. You will need Flash Player 10 to pass through to version detection or you can save the SWF directly to disk and watch it with Flash Player 9.

http://www.joa-ebert.com/swfs/lectures/fotb08
http://www.joa-ebert.com/files/swf/lectures/fotb08.swf

Share This
]]></description>
			<content:encoded><![CDATA[<p>Here are the slides from my <i>Flash On The Beach 2008</i> session &#8220;AudioTool&#8217;s Private Parts&#8221;. 2mb without a prelaoder. You will need Flash Player 10 to pass through to version detection or you can save the SWF directly to disk and watch it with Flash Player 9.</p>
<ul>
<li><a href="http://www.joa-ebert.com/swfs/lectures/fotb08" target="_blank">http://www.joa-ebert.com/swfs/lectures/fotb08</a></li>
<li><a href="http://www.joa-ebert.com/files/swf/lectures/fotb08.swf" target="_blank">http://www.joa-ebert.com/files/swf/lectures/fotb08.swf</a></li>
</ul>
<p class="akst_link"><a href="http://blog.joa-ebert.com/?p=235&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_235" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2008/10/01/audiotools-private-parts-slides/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.joa-ebert.com/2008/10/01/audiotools-private-parts-slides/</feedburner:origLink></item>
		<item>
		<title>Tween engine comparison</title>
		<link>http://feeds.feedburner.com/~r/je2050/~3/386906249/</link>
		<comments>http://blog.joa-ebert.com/2008/09/08/tween-engine-comparison/#comments</comments>
		<pubDate>Mon, 08 Sep 2008 18:33:04 +0000</pubDate>
		<dc:creator>joa</dc:creator>
		
		<category><![CDATA[Flash]]></category>

		<category><![CDATA[as3]]></category>

		<category><![CDATA[experiments]]></category>

		<category><![CDATA[fot]]></category>

		<category><![CDATA[fotb]]></category>

		<category><![CDATA[gtween]]></category>

		<category><![CDATA[hobnox]]></category>

		<category><![CDATA[tweenlite]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=230</guid>
		<description><![CDATA[I wrote a while ago about our tween engine at Hobnox but I did not post any performance demos.
Here are the results for 1000 DisplayObjects with manipulation on their scaleX, scaleY, alpha, x, y and rotation properties.  It is also very important that you take a look at the memory behaviour. A click starts [...]]]></description>
			<content:encoded><![CDATA[<p>I wrote a while ago about <a href="http://blog.joa-ebert.com/2008/05/07/tweening-and-object-pools/" target="_blank">our tween engine</a> at <a href="http://www.hobnox.com/" target="_blank">Hobnox</a> but I did not post any performance demos.</p>
<p>Here are the results for 1000 DisplayObjects with manipulation on their scaleX, scaleY, alpha, x, y and rotation properties.  It is also very important that you take a look at the memory behaviour. A click starts the tweening.</p>
<ul>
<li><a href="http://www.joa-ebert.com/swfs/tween/Hobnox" target="_blank">Hobnox</a></li>
<li><a href="http://www.joa-ebert.com/swfs/tween/GTween" target="_blank">GTween</a></li>
<li><a href="http://www.joa-ebert.com/swfs/tween/TweenLite" target="_blank">TweenLite</a></li>
</ul>
<p>As you can see it makes a lot of sense to stay type-safe and to manage the memory you are using on your own.<br />
I will talk about those concepts in my next session <i>AudioTool&#8217;s Private Parts</i> in <a href="http://www.flashonthebeach.com/" target="_blank">Brighton</a> and <a href="http://www.flashontap.com/" target="_blank">Boston</a>. Since optimization on a code level is trivial the main performance boost is achieved by re-thinking algorithms, structures and concepts. I guess one of the most interesting topics will be the optimization of our cable solver which was running <code>O(n^2)</code> (really!), then <code>O(n(n+1)/2)</code> and could be minimized to a rare <code>O(n(n-4)/2)</code> worst-case.</p>
<p class="akst_link"><a href="http://blog.joa-ebert.com/?p=230&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_230" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2008/09/08/tween-engine-comparison/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.joa-ebert.com/2008/09/08/tween-engine-comparison/</feedburner:origLink></item>
		<item>
		<title>PixelBender Runtime Compilation</title>
		<link>http://feeds.feedburner.com/~r/je2050/~3/386491564/</link>
		<comments>http://blog.joa-ebert.com/2008/09/08/pixelbender-runtime-compilation/#comments</comments>
		<pubDate>Mon, 08 Sep 2008 08:34:28 +0000</pubDate>
		<dc:creator>joa</dc:creator>
		
		<category><![CDATA[Flash]]></category>

		<category><![CDATA[as3]]></category>

		<category><![CDATA[experiments]]></category>

		<category><![CDATA[dynamic loop unrolling]]></category>

		<category><![CDATA[opensource]]></category>

		<category><![CDATA[pixelbender]]></category>

		<category><![CDATA[runtime compilation]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=227</guid>
		<description><![CDATA[Tinic posted today his PixelBender assembler and disassembler. This makes me happy, because now I can post an experiment I could not show for a while.
If you know PixelBender, than you know that you can not create loops. What you could do is unroll all constant loops with a fixed length. If you know simple [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.kaourantin.net/2008/09/pixel-bender-pbj-files.html" target="_blank">Tinic</a> posted today his PixelBender assembler and disassembler. This makes me happy, because now I can post an experiment I could not show for a while.</p>
<p>If you know PixelBender, than you know that you can not create loops. What you could do is unroll all constant loops with a fixed length. If you know simple convolution filters like a blur, you know that you need an xy-loop and you know it should not be possible with PixelBender at all. Let me prove you wrong and have a look at <a href="http://je2050.joa-ebert.com/pb/" target="_blank">dynamic loop unrolling with PixelBender</a> (be careful with high values!). </p>
<p>I built a library to assemble and disassemble PixelBender kernels at runtime. I wrapped it also in a high level API so basically you can create a new Kernel by doing <code>var kernel: Kernel = new Kernel();</code>. Then when you need your shader as a ByteArray you simple call <code>kernel.compile()</code>. There are still some glitches here and there but I hope that I can release the source code pretty soon.</p>
<p class="akst_link"><a href="http://blog.joa-ebert.com/?p=227&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_227" class="akst_share_link" rel="nofollow">Share This</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2008/09/08/pixelbender-runtime-compilation/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.joa-ebert.com/2008/09/08/pixelbender-runtime-compilation/</feedburner:origLink></item>
	</channel>
</rss>
