<?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>Zeh Fernando</title>
	<atom:link href="http://zehfernando.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://zehfernando.com</link>
	<description></description>
	<lastBuildDate>Thu, 02 Sep 2010 13:28:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Benchmarking video playback performance in Flash</title>
		<link>http://zehfernando.com/2010/benchmarking-video-playback-performance-in-flash/</link>
		<comments>http://zehfernando.com/2010/benchmarking-video-playback-performance-in-flash/#comments</comments>
		<pubDate>Wed, 01 Sep 2010 21:46:33 +0000</pubDate>
		<dc:creator>Zeh</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://zehfernando.com/?p=763</guid>
		<description><![CDATA[In my day-to-day doing development at Firstborn, it&#8217;s pretty common that we run into questions that don&#8217;t have a very clear answer &#8211; for example, what would be the best technique to do something (in terms of performance). When something like that happens, depending on the time constraints, we may either do some quick test, [...]]]></description>
			<content:encoded><![CDATA[<p>In my day-to-day doing development at <a href="http://www.firstbornmultimedia.com/">Firstborn</a>, it&#8217;s pretty common that we run into questions that don&#8217;t have a very clear answer &#8211; for example, what would be the best technique to do something (in terms of performance).</p>
<p>When something like that happens, depending on the time constraints, we may either do some quick test, or just go with what we assume is best &#8211; creating a <em>theory</em> and sticking with it. At times, however, a certain issue becomes so important it requires a more extensive research &#8211; having the <em>scientific method</em> applied to it, so to speak.</p>
<p>I&#8217;ve ran into one of those recently with a website we&#8217;ve just created &#8211; <a href="http://www.expeditiontitanic.com/">Expedition Titanic</a>. In that website, we have a few videos running in <em>quasi-fullscreen</em> (taking the whole website space, that is) and we were having trouble with performance in some computers &#8211; dropping frames, not playing smoothly, etc.</p>
<p>In previous projects, we had some <em>assumptions</em> of how full-site videos should be encoded &#8211; resolution, bitrate, <a href="http://en.wikipedia.org/wiki/Flash_Video#Media_type_support">codec</a>, etc. Most of those were based on actual experience, but it was scattered information without any real data to back it up.</p>
<p>Video playback performance was becoming more of an issue in every website I&#8217;ve been working on &#8211; this is also true of the previous website I&#8217;ve developed here, for the <a href="http://www.5react.com/">5 REACT</a> campaign &#8211; and I decided to stop relying on myths, personal theories or word-of-mouth and do some real tests &#8211; rather, <em>benchmarks</em> &#8211; to actually come up with the best solutions for video playback in Flash in terms of performance.</p>
<p>My question was not about the video <em>quality</em> itself, but rather its <em>playback</em> quality &#8211; how smooth the video frames were being played, how many frames were being dropped; in sum, what was the impact of different encoding methods on playback performance. We generally assume F4V (H.264) videos have better quality, but which one requires more from the CPU to decode? What&#8217;s the impact of actual resolution and bitrate?</p>
<p>I have to confess I had some personal beliefs I wanted to put to the test with these benchmarks. My theories were as such:</p>
<ul>
<li>On2 VP6, (FLV) videos are faster to decode than H.264 (F4V) videos.</li>
<li>H.264 decoding is faster on multi-core machines; On2 VP6, not as much.</li>
<li>Overall, OS X has even worse decoding performance for H.264 videos.</li>
<li>Videos with higher bitrates are slower to decode and this impacts the rendering speed of high-quality videos.</li>
<li>Video playback performance in Linux is horrible.</li>
</ul>
<p>Still, I approached the problem with a neutral stance and would be as happy proving as I would be with disproving any of those theories. The main reason why I wanted to do the test in the first place is because I wasn&#8217;t really sure any of them were really true, but I still used them as guidelines when creating content.</p>
<h2>Measuring video playback quality</h2>
<p>My initial plan to measure the playback quality was using the (Flash 10 only) <a href="http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/net/NetStreamInfo.html#droppedFrames">droppedFrames</a> property of the <a href="http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/net/NetStreamInfo.html">NetStreamInfo</a> object and the (undocumented) <em>decodedFrames</em> property of the <a href="http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/net/NetStream.html">NetStream</a> object. That way, I hopped to be able to measure the number of skipped frames and measure the time spent decoding in a more rendering-agnostic fashion.</p>
<p>After some initial tests, however, I decided against it because the values I hot were just not reliable enough: while the behavior of both properties was predictable for FLVs (the sum of decodedFrames and droppedFrames would be the number of total frames in the video), their values while playing an F4V video were quite undecipherable; there seemed to be a correlation between playback quality and the value of both properties, but their actual relationship is a mistery &#8211; for example, does droppedFrames contain the number of frames dropped during <em>decoding</em>, or during decodoing <em>and playback</em>? Does decodedFrames contain the number of frames decoded, or <em>decoded and rendered</em>? The numbers state different things at different times, giving that either property can have a higher value than the other, and the fact that they seem to behave differently depending on the choice of video format.</p>
<p>Due to this, I&#8217;ve decided to try and have a 30fps video running inside a 60fps SWF, and use the final SWF speed (measured by <em>onEnterFrame</em> events) indicating how much time was being spent with video decoding and rendering. Nevertheless, the number of frames decoded and dropped are still included in the final results.</p>
<h2>Test rationale</h2>
<p>The idea of the test was finding out the best combination of encoding variables for proper video playback, so I decided to use these parameters:</p>
<ul>
<li>Format: FLV (On2 VP6) and F4V (H.264)</li>
<li>Bitrate: 500Kbps, 1000Kbps, 1500Kbps, 2000Kbps</li>
<li>Resolution: 1920&#215;1080, 960&#215;540, 480&#215;270</li>
</ul>
<p>This gives a total of 24 different encoded files for the same video. They would all be rendered at the same size (taking the whole browser space); the idea is that it&#8217;d allow me to have a better understanding of how resolution, bitrate and format changes impacted the playback quality, with the same area being drawn.</p>
<p>The file used was a rendering of the intro to the Expedition Titanic&#8217;s &#8220;Explore&#8221; area, originally rendered at 1920&#215;1080 and set at 30FPS.</p>
<p>The testing project was a small SWF file that would load a file, play it, unload it, and skip to the next file. The SWF was set at 60fps, using maximum quality; nothing else was present on the staging area (the idea was to test video decode speed without compositing tradeoffs), and the video was scaled to fit inside the full browser area (similar to the Stage <a href="http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/display/Stage.html#scaleMode">scaleMode</a> of StageScaleMode.NO_BORDER). The executing SWF was kept focused during the whole test.</p>
<p>I used On2 VP6 as the sole codec for the FLV videos. Sorenson Spark, while <a href="http://blog.kaourantin.net/?p=18">considered to have better decoding performance</a>, is usually not a parameter on the video encoding decision equation anymore due to its sub-standard encoding quality.</p>
<p>For the FLV encoding, I used Adobe Flash Video Encoder (CS3) using a normal encoding (1-pass). For the F4V encoding, I used Adobe Media ENcoder (CS4) with a &#8220;High&#8221; profile, Level 4.1, and encoded with 2-pass VBR where both target and maximum bitrates where the bitrate being tested. And since the idea was testing raw playback quality, as opposed to accurate seeking ability or any other parameter, keyframe placement distance was kept as automatic on both.</p>
<p>The videos were encoded without an audio track.</p>
<h2>Results</h2>
<p>Here are the test results, plotted in line charts. The question these numbers try to answer is: when playing a 30FPS video on a 60FPS SWF, what&#8217;s the actual rendering framerate?</p>
<p><img src="http://zehfernando.com/wp-content/uploads/2010/09/all.png" alt="" title="Average SWF framerate - All machines" width="645" height="409" class="aligncenter size-full wp-image-774" style="border:1px solid #BBBBBB;" /></p>
<p>The test was ran on a number of different computers, from low-end to high-end, Windows PCs and Macs, multi-core and single-core machines. The idea was not measuring performance of each setup against each other &#8211; they had different specs, and were ran at different resolutions &#8211; but rather to see the differences between different videos being played on the same machine.</p>
<p>&#8220;Slow Windows&#8221; was an old Dell laptop running Windows XP SP2 at 2GHz (Intel single core) with 1gb memory. Tests used Firefox 3.6.8 and Flash Player 10.1.82.76.</p>
<p><img src="http://zehfernando.com/wp-content/uploads/2010/09/win_slow.png" alt="" title="Average SWF framerate - Slow Windows" width="645" height="409" class="aligncenter size-full wp-image-779" style="border:1px solid #BBBBBB;" /></p>
<p>&#8220;Medium Windows&#8221; was a desktop running Windows XP SP3 at 3GHz (Intel single core) with 4gb memory. Tests used Firefox 3.6.8 and Flash Player 10.1.82.0.</p>
<p><img src="http://zehfernando.com/wp-content/uploads/2010/09/win_med.png" alt="" title="Average SWF framerate - Medium Windows" width="645" height="409" class="aligncenter size-full wp-image-778" style="border:1px solid #BBBBBB;" /></p>
<p>&#8220;Fast Windows&#8221; was a desktop machine running Windows 7 64bits at 3.33GHz  (Intel Core 2 Duo, 2 cores) with 4gb memory. Tests used Chrome 6.0.472.51 (beta) and Flash Player 10.1.53.0.</p>
<p><img src="http://zehfernando.com/wp-content/uploads/2010/09/win_fast.png" alt="" title="Average SWF framerate - Fast windows" width="645" height="409" class="aligncenter size-full wp-image-777" style="border:1px solid #BBBBBB;" /></p>
<p>&#8220;Fast Mac&#8221; was a 27&#8243; iMac running OS X 10.6.4 at 3GHz (Intel Core 2 Duo, 2 cores) with 4gb memory. Tests used Safari 5.0.1 and Flash Player 10.1.53.64.</p>
<p><img src="http://zehfernando.com/wp-content/uploads/2010/09/mac_fast.png" alt="" title="Average SWF framerate - Fast Mac" width="645" height="409" class="aligncenter size-full wp-image-776" style="border:1px solid #BBBBBB;" /></p>
<p>&#8220;Slow Linux&#8221; was a laptop running Ubuntu 10.04 64bits at 2GHz (AMD 3500+ single core) with 461MB memory. Tests used Firefox 3.6.8 and Flash Player 10.1.82.76.</p>
<p><img src="http://zehfernando.com/wp-content/uploads/2010/09/linux_slow.png" alt="" title="Average SWF framerate - Slow Linux" width="645" height="409" class="aligncenter size-full wp-image-775" style="border:1px solid #BBBBBB;" /></p>
<h2>Result analysis</h2>
<p>Some points can be drawn from the results:</p>
<h3>F4Vs have better playback quality</h3>
<p>Simply put, H.264 decoding is faster than On2 VP6 decoding, so F4V videos easily give best results in terms of overall playback performance of a video on a Flash website . This holds true for both single-core and multi-core machines, and for every platform tested (Windows, Macintosh, Linux). <a href="http://blog.kaourantin.net/?p=64">On2 VP6 actually uses a new thread on multi-core systems</a> for better performance, but apparently this is not enough to be faster than the (usually) hardware-accelerated H.264 decoding.</p>
<p>Adding to the best performance the (visibly) better quality of H.264 encoding, F4V becomes an obvious choice for video encoding in Flash. My recommendation is that F4V videos should always be used instead of FLV videos, except when a feature supported by FLVs is needed (transparency channel; legacy Flash versions support; cuepoints; odd video dimensions).</p>
<h3>H.264 doesn&#8217;t have any special impact on OS X machines</h3>
<p>F4V video performs just as well on a Macintosh, not being particularly taxed in relation to comparisons with any other system. Specially with the <a href="http://blog.kaourantin.net/?p=89">newly added hardware acceleration</a>, there&#8217;s doesn&#8217;t seem to exist any valid concern with how the decoder performs in this platform.</p>
<h3>Actual bitrate doesn&#8217;t have that much of an impact on performance</h3>
<p>While <em>technically</em> not true &#8211; a higher bitrate/quality <em>does</em> mean a lot more data to process &#8211; the actual impact of video bitrate in overall performance was near negligible in my tests. In the case where one needs better performance for a video, it makes more sense to lower the resolution than to lower the bitrate.</p>
<h3>Linux performance is not <em>that</em> bad</h3>
<p>Simply put, my tests on a <em>very</em> low-end machine produced results that were easily watchable. They would drop considerably below the target framerate of 30fps, but considering the target machine, and a comparison to my low-end Windows machine, it does feel pretty good overall. Not <em>fast</em>, but not too terrible either.</p>
<h2>Conclusion, or TL;DR</h2>
<p>H.264 (F4V) videos are better performance-wise. Use them when possible.</p>
<h2>Additional notes</h2>
<p>You&#8217;ll find the full results (with data for every video tested) <a href="https://spreadsheets.google.com/pub?key=0AkkprH0hOE5cdDhMV2ZWZUo4UUMzZlBkMVhKTFNnckE&#038;hl=en&#038;output=html">here</a>. The actual benchmark is <a href="http://hosted.zeh.com.br/clients/fb/benchmark/">here</a> if you want to test if yourself (not recommended at all, as it takes <em>at least</em> 31 minutes to complete, and downloads 240mb of videos &#8211; and you can only see the results once it&#8217;s done).</p>
]]></content:encoded>
			<wfw:commentRss>http://zehfernando.com/2010/benchmarking-video-playback-performance-in-flash/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Scaleform GFx now bringing Flash to the Unreal engine</title>
		<link>http://zehfernando.com/2010/scaleform-gfx-now-bringing-flash-to-the-unreal-engine/</link>
		<comments>http://zehfernando.com/2010/scaleform-gfx-now-bringing-flash-to-the-unreal-engine/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 22:44:41 +0000</pubDate>
		<dc:creator>Zeh</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://zehfernando.com/?p=754</guid>
		<description><![CDATA[Scaleform has announced that Scaleform GFx, their Flash-based solution for graphical user interfaces for games, is set to be included free of charge with the Unreal engine. They&#8217;ve made a nice video of the thing in action, going all the way from the Flash IDE to a new menu and interface for Unreal Tournament III. [...]]]></description>
			<content:encoded><![CDATA[<p>Scaleform has announced that <a href="http://www.scaleform.com/products/gfx">Scaleform GFx</a>, their Flash-based solution for graphical user interfaces for games, <a href="http://www.develop-online.net/news/34521/Unreal-Engine-in-major-Scaleform-UI-deal">is set to be included free of charge with the Unreal engine</a>.</p>
<p>They&#8217;ve made a nice video of the thing in action, going all the way from the Flash IDE to a new menu and interface for Unreal Tournament III. The video brought a smile to my face &#8212; try to find out why:</p>
<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/zKDuzVbi50Q&#038;hl=en_US&#038;fs=1&#038;rel=0&#038;hd=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/zKDuzVbi50Q&#038;hl=en_US&#038;fs=1&#038;rel=0&#038;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></p>
<p>The funny thing? I don&#8217;t remember whether I&#8217;ve said this publicly before, but Tweener was initially planned as an UnrealScript extension &#8211; I needed some tweening extension for a project I was working at the time (the UI for the <a href="http://www.moddb.com/mods/defence-alliance-2">Defence Alliance 2</a> mod for Unreal Tournament 2004), and a MC Tween-like syntax wouldn&#8217;t work. In the end I dropped the idea since I would have not enough time to complete it for the mod, and instead took it over for AS2/AS3 a little bit later. It&#8217;s super nice seeing it going all the way around and finally being used in the game by way of Scaleform GFx &#8211; I don&#8217;t think game UI systems have anything nearly as practical as the tweening concepts Actionscript has had for a few years.</p>
<p>Of course, any other tweening extension will probably work within Scaleform GFx, so it&#8217;s not like Tweener is any kind of bundle; it was merely what they were using in their example.</p>
]]></content:encoded>
			<wfw:commentRss>http://zehfernando.com/2010/scaleform-gfx-now-bringing-flash-to-the-unreal-engine/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>The best drawPlane/distortImage method, ever</title>
		<link>http://zehfernando.com/2010/the-best-drawplane-distortimage-method-ever/</link>
		<comments>http://zehfernando.com/2010/the-best-drawplane-distortimage-method-ever/#comments</comments>
		<pubDate>Sat, 13 Feb 2010 03:24:08 +0000</pubDate>
		<dc:creator>Zeh</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://zehfernando.com/?p=721</guid>
		<description><![CDATA[Pretty bold title, uh? Before I even begin, let me say two things. First, this is a pretty obvious use for the new Flash 10 drawing API, so I&#8217;m quite sure somebody has created something similar already, specially because it&#8217;s something I can see a lot of people in need of. Second, please read the [...]]]></description>
			<content:encoded><![CDATA[<p>Pretty bold title, uh?</p>
<p>Before I even begin, let me say two things. First, this is a pretty obvious use for the <a href="http://www.senocular.com/flash/tutorials/flash10drawingapi/">new Flash 10 drawing API</a>, so I&#8217;m quite sure somebody has created something similar already, specially because it&#8217;s something I can see a lot of people in need of. Second, please read the entire post before commenting, because it may not be exactly what you think it is.</p>
<p>So getting straight to the point, I&#8217;ve created a drawPlane function that uses the new drawTriangle() method in Flash 10&#8242;s ActionScript 3 native APIs to draw a correctly distorted plane in 3d, based in four bidimensional points. Other people would call it distortImage or something similar. Click below to check an example:</p>
<p><a href="http://zehfernando.com/f/TriangleTest.swf"><img src="http://zehfernando.com/wp-content/uploads/2010/02/cat.jpg" alt="" title="Cat" width="428" height="471" class="aligncenter size-full wp-image-723" /></a></p>
<p>By now, you&#8217;re probably thinking, &#8220;hey, I&#8217;ve seen this before&#8221;. There&#8217;s <a href="http://www.rubenswieringa.com/blog/distortimage">this</a>, <a href="http://www.flashsandy.org/blog/distortimage-20-the-fastest-way-to-freely-distort-image-with-flash-in-actionscript.html">this</a>, <a href="http://theflashblog.com/?p=218">this</a>, <a href="http://www.kirupa.com/forum/showthread.php?t=325592">this</a>, and probably many others. So why another one?</p>
<p>Well, there&#8217;s one special (and blunt) reason why: because they&#8217;re all wrong.</p>
<p>Here&#8217;s a shitty image I created a few years ago to illustrate my point:</p>
<p><img src="http://zehfernando.com/wp-content/uploads/2010/02/perspective.png" alt="Perspective is not distortion" title="Perspective is not distortion" width="484" height="888" class="aligncenter size-full wp-image-724" /></p>
<p>Subdividing a plane into a bunch of triangles using their bi-dimensional distances doesn&#8217;t give you a projected plane. It gives you a good approximation, and I guess the calculation is easier, but try distorting a plane like that by any amount and you&#8217;ll see what kind of <em>deformity</em> it generates.</p>
<p>Secondary to that, I wanted to use the new Flash 10 capabilities to project planes without a lot of hassle (meaning, without having to rely on other libraries or actual 3d position) and, most importantly, <em>by using two triangles only for the entire plane</em> &#8211; with no subdivisions of any kind.</p>
<p>Now, don&#8217;t get me wrong. There were reasons for (correct) triangulation before Flash 10: Bitmap fills had to rely on a non-distorted fill, so adding more triangles created more accurate results. However, Flash 10 allows AS3 developers to set the distortion factor of a Bitmap fill by using the new drawTriangle() method and its UVT parameters, achieving just that &#8211; a perfectly projected plane using two triangles only.</p>
<p>But here lies another problem. While finding the projection is <a href="http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS509D19BB-239B-4489-B965-844DDA611AE7.html">pretty trivial</a> if you&#8217;re working with three dimensions (the T portion of the of UVT combination is just a function of the Z of each point), things get a bit more confusing when you&#8217;re dealing with points set in two dimensions &#8211; points defined by their X and Y only. And that&#8217;s exactly what I was going to need, since this is all supposed to be used in a project I&#8217;m creating at <a href="http://firstbornmultimedia.com/">Firstborn</a> where we&#8217;ll be combining video renders with Flash-drawn content over the video at specific positions, and I don&#8217;t have any kind of 3d information about the points, just anchor points matched to the video. To put it another way, I wanted to have the same ability to move corners as you have in <a href="http://designreviver.com/tutorials/photoshop-101-how-to-use-the-free-transform-tool/">Photoshop&#8217;s Free Transform tool</a>.</p>
<p>I honestly could not find an answer to the problem online. I&#8217;m pretty sure there&#8217;s some complex way that makes a lot of sense to project 2d points into a 3d field, and therefore find the T of each point, but instead, I was lucky enough to get what I wanted working after a good amount of crazy trial and error (and beer). It actually made the solution very small and much simpler than I expected.</p>
<p>So without further ado, here&#8217;s the actual implementation. It&#8217;s a pretty simple method that draws a BitmapData to a Graphics instance and sets the perspective accordingly. The semi-secret is the weird diagonals-based ratio that&#8217;s calculated for each corner, giving the final plane render <em>uncanny</em> precision.</p>
<pre>package com.zehfernando.display {
	import flash.display.BitmapData;
	import flash.display.Graphics;
	import flash.geom.Point;
	/**
	 * @author zeh
	 */
	public function drawPlane(graphics:Graphics, bitmap:BitmapData, p1:Point, p2:Point, p3:Point, p4:Point) : void {
		var pc:Point = getIntersection(p1, p4, p2, p3); // Central point

		// If no intersection between two diagonals, doesn't draw anything
		if (!Boolean(pc)) return;

		// Lengths of first diagonal
		var ll1:Number = Point.distance(p1, pc);
		var ll2:Number = Point.distance(pc, p4);

		// Lengths of second diagonal
		var lr1:Number = Point.distance(p2, pc);
		var lr2:Number = Point.distance(pc, p3);

		// Ratio between diagonals
		var f:Number = (ll1 + ll2) / (lr1 + lr2);

		// Draws the triangle
		graphics.clear();
		graphics.beginBitmapFill(bitmap, null, false, true);

		graphics.drawTriangles(
			Vector.&lt;Number&gt;([p1.x, p1.y, p2.x, p2.y, p3.x, p3.y, p4.x, p4.y]),
			Vector.&lt;int&gt;([0,1,2, 1,3,2]),
			Vector.&lt;Number&gt;([0,0,(1/ll2)*f, 1,0,(1/lr2), 0,1,(1/lr1), 1,1,(1/ll1)*f]) // Magic
		);
	}
}

import flash.geom.Point;
function getIntersection(p1:Point, p2:Point, p3:Point, p4:Point): Point {
	// Returns a point containing the intersection between two lines
	// http://keith-hair.net/blog/2008/08/04/find-intersection-point-of-two-lines-in-as3/
	// http://www.gamedev.pastebin.com/f49a054c1

	var a1:Number = p2.y - p1.y;
	var b1:Number = p1.x - p2.x;
	var a2:Number = p4.y - p3.y;
	var b2:Number = p3.x - p4.x;

	var denom:Number = a1 * b2 - a2 * b1;
	if (denom == 0) return null;

	var c1:Number = p2.x * p1.y - p1.x * p2.y;
	var c2:Number = p4.x * p3.y - p3.x * p4.y;

	var p:Point = new Point((b1 * c2 - b2 * c1)/denom, (a2 * c1 - a1 * c2)/denom);

	if (Point.distance(p, p2) > Point.distance(p1, p2)) return null;
	if (Point.distance(p, p1) > Point.distance(p1, p2)) return null;
	if (Point.distance(p, p4) > Point.distance(p3, p4)) return null;
	if (Point.distance(p, p3) > Point.distance(p3, p4)) return null;

	return p;
}</pre>
<p>Inside a DisplayObject, use it like so to redraw a BitmapData instance using 4 given 2d points:</p>
<pre>
drawPlane(this.graphics, myBitmapData, topLeft, topRight, bottomLeft, bottomRight);
</pre>
<p>You can download the source for the example editor above from here: <a href="http://zehfernando.com/f/TriangleTest.zip">TriangleTest.zip</a>. Warning: it&#8217;s a Flash 10, AS3 classes-only example. There&#8217;s no FLA file and no project settings file. The structure should be fairly simple to understand, however; the class roots are at /src/src (actual source) and /src/libs (a few additional files used). Just compile /src/src/documents/TriangleTest.as as your document class and you should be good to go.</p>
<p>Anyway, I like it. It can probably be a bit optimized (specially the getIntersection function, or the many Point.distance() calls) but it works well so far &#8211; don&#8217;t forget it&#8217;s only dealing with 4 points per plane, so there&#8217;s no excruciating loop that begs for optimization.</p>
<p>If you still think this was done before &#8211; Flash 10 drawTriangles() based image drawing, with two triangles, and correct perspective distortion &#8211; please post a link on the comments and I&#8217;ll correct the article. I still think the title and the premise of the post is bold, but so far, I&#8217;m sticking to it.</p>
<p>Finally, do notice that this is not a 3d engine. It&#8217;s just a quick way to draw a plane when you only know the 2d points of the corners. There are no 3d points, vertices, or angles of any kind involved here. If you want to rotate a plane you already have, it makes a lot more sense to just rotate it using the native rotation properties, or use any 3d engine of your preference.</p>
<p>PS. No, the cat is not mine. It&#8217;s <a href="http://don.citarella.net/">Don Citarella</a>&#8216;s <em>Floyd</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://zehfernando.com/2010/the-best-drawplane-distortimage-method-ever/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Something I just remembered</title>
		<link>http://zehfernando.com/2010/something-i-just-remembered/</link>
		<comments>http://zehfernando.com/2010/something-i-just-remembered/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 21:30:00 +0000</pubDate>
		<dc:creator>Zeh</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://zehfernando.com/?p=698</guid>
		<description><![CDATA[Roughly 17 years ago, I was in love with QuickBasic. After a while using GWBasic (not to mention years of using BASIC on other systems, such as the Brazilian Sinclair ZX81 clone TK-85, the MSX 1.0, and the Apple II), QuickBasic was a real milestone in my life. It was when I changed from using [...]]]></description>
			<content:encoded><![CDATA[<p>Roughly 17 years ago, I was in love with <a href="http://en.wikipedia.org/wiki/QuickBASIC">QuickBasic</a>. After a while using GWBasic (not to mention years of using BASIC on other systems, such as the Brazilian Sinclair ZX81 clone TK-85, the MSX 1.0, and the Apple II), QuickBasic was a real milestone in my life. It was when I changed from using line numbers and a pretty mangled structure in my programs (using subroutines with GOSUBs and GOTOs) to a more organized one with functions and procedures. I also loved how easy it was to debug inside the Quickbasic 4.5 IDE – you could stop your program at any time, do changes to your code, and then continue running. Programs were interpreted, and while speed wasn&#8217;t the best compared to other platforms available for similar DOS machines, immediate execution, easy debugging and the ability to compile executables later made it the platform of choice for all the small programs I liked to create – database merging systems, small graphical or text-based games, and general tools I used on my daily work.</p>
<div id="attachment_705" class="wp-caption aligncenter" style="width: 652px"><a href="http://gtsamis.wordpress.com/%CE%99%CF%83%CF%84%CE%BF%CF%81%CE%B9%CE%BA%CE%AC/%CE%95%CE%BE%CE%AD%CE%BB%CE%B9%CE%BE%CE%B7-%CF%84%CE%B7%CF%82-basic/"><img class="size-full wp-image-705" title="Quickbasic 4.5" src="http://zehfernando.com/wp-content/uploads/2010/01/quickbasic-45.png" alt="Quickbasic 4.5" width="642" height="302" /></a><p class="wp-caption-text">QuickBasic 4.5 (click for source)</p></div>
<p>But even though I used QuickBasic for most of my stuff, I also used other languages like C and Pascal at high school. For the latter, my IDE of choice was <a href="http://en.wikipedia.org/wiki/Turbo_Pascal">Turbo Pascal</a>. And it&#8217;s within that development environment that I had my first run-in with <a href="http://en.wikipedia.org/wiki/Turbo_Vision">Turbo Vision</a>.</p>
<p>Turbo Vision was, in a nutshell, a framework to create user interface elements for Turbo Pascal programs. It allowed you to easily create menus, buttons, dialog windows and the alike – something that was still pretty rare at the time (considering DOS programs were never really about the user interface). Being able to quickly construct a program with such a high-level interface without doing everything from scratch was quite a shock to me.</p>
<div id="attachment_703" class="wp-caption aligncenter" style="width: 650px"><a href="http://thomasjensen.com/museum.shtml"><img class="size-full wp-image-703" title="Turbo Vision example" src="http://zehfernando.com/wp-content/uploads/2010/01/quadra.gif" alt="Turbo Vision example" width="640" height="400" /></a><p class="wp-caption-text">Screenshot of &quot;Quadra&quot;, showing what a Turbo Vision interface looked like (Click for source)</p></div>
<p>An even bigger shock was understanding that you could actually create common <em>libraries</em> or <em>frameworks</em> and reuse them on different projects. As obvious as it is today, my self-taught understanding of program structures at the time hadn&#8217;t grasped this concept yet. Turbo Vision itself was beautiful, but the <em>idea</em> of Turbo Vision was, for my little coder mind, revolutionary.</p>
<p>So after having my first experience with Turbo Vision, I set out to create a similar framework in QuickBasic that I could use for my own programs (while I enjoyed the speed and correctness of languages like C and Pascal, not to mention the speed, I enjoyed the agility I had with QuickBasic even more).</p>
<p>The result was a bunch of subroutines that could be called to draw and control everything. You could create screen elements like buttons, editable text fields, windows, check boxes, radio buttons, menus and the like, with full tabbing/focusing/clipboard support, and control them using a higher-level API. That allowed me to add great interface elements to my simple programs quite easily, without having to worry about rewriting it every time I needed to create something new. The implementation was somewhat ugly, since QuickBasic would run in a single thread and I had to move execution from one element to another and deal with the return result to know what to do, but it was clear enough in a way that allowed me to reuse elements with certain ease. I still have that code somewhere around my computer.</p>
<p>Fast forward to 2003, around a decade later – after I had abandoned QuickBasic, used a few other platforms and languages, until finally settling with development for the web. While I&#8217;m working with ActionScript and developing some visual components for a website, I had an epiphany: I was doing the same thing I had done 10 years before.</p>
<p>The operating system was different: Windows, instead of DOS; the language was not QuickBasic anymore, but ActionScript; I wasn&#8217;t building a text-based application, but rather one that used graphical user interface elements and the mouse; I wasn&#8217;t reading data from the disk, but from some asynchronous network resource. But still, I was doing the same thing: creating graphical elements that were meant to be reused.</p>
<p>A decade before, I had no idea I was going to be working with Flash (since that didn&#8217;t exist), or even be building those kinds of interfaces. Of course I had no idea I would be building something meant to be used over the Internet either. And I had even take some pretty odd routes along the way of my earlier career, focusing in graphic design and animation instead of programming, but still, there I was, full circle, back doing what could be said to be basically the same thing I had been doing at high school, only in an <em>updated</em> environment.</p>
<p>And while I&#8217;m not really that old, I like to see this as a great example that no technology lasts forever, and that programmers can&#8217;t have any idea of what they&#8217;ll be working 10 years later. And, perhaps more strongly now, that while the environment they&#8217;re using might be completely different, the <em>concepts</em> they&#8217;ve learned before will carry on. In a nutshell, your experience is not the language you use, but what you do with that language.</p>
<p>I guess it doesn&#8217;t take much to see how that applies to the issue I&#8217;m seeing people debating today &#8211; &#8220;Rich Internet&#8221; platforms like Flash, SilverLight, HTML 5, and a few others. I&#8217;ll be the douchebag who quotes himself and just paste what I had to say a short while ago in <a href="http://www.thefwa.com/interviews/int360.html">my FWA interview</a>:</p>
<blockquote><p><strong>Q. Do you think Flash is here to stay?</strong></p>
<p>A. In a way, most definitely. Flash was the first software platform to allow developers to easily create rich interactive animations for the everyday user, so whatever Flash has brought and is still bringing is something other platforms are playing catch up to adopt.</p>
<p>But on the other hand, you can never predict what the future will be like. When I started working with interface development, Flash didn&#8217;t exist and I couldn&#8217;t even predict I&#8217;d be working with something like it 15 years later.</p>
<p>I love Flash, but after having worked with it for more than a decade and seeing it radically transformed so many times, it&#8217;s as if the name doesn&#8217;t matter that much anymore. I think what we call RIA development is the thing that&#8217;s here to stay and that&#8217;ll just become bigger with time, but the name under the hood becomes almost irrelevant. Even if it&#8217;s Flash and ActionScript, it&#8217;s going to be a different Flash and a different language in a few years. With similarities, but then again there are similarities between ActionScript, Java, and C#. Being attached to that kind of brand isn&#8217;t very healthy I guess</p></blockquote>
<p>Here&#8217;s something a lot of people forget &#8211; we&#8217;re not in this business because we&#8217;re using language XYZ. While a lot of people like to draw that kind of conclusion – because, after all, their experience is usually focused on a single language, not to mention the need to identify with a certain group – the market itself changes over time and it&#8217;s natural for one language to replace another as the language of choice for a specific task. Remember when Perl was the de-facto server-side language for the web? If you considered yourself a &#8220;Perl specialist&#8221;, instead of a server-side programmer, you&#8217;d be stuck when people started to migrate their systems to PHP and others.</p>
<p>I see the current state of <em>rich interfaces</em> development the same way. We&#8217;re doing Flash today – because it&#8217;s widespread, the tools available (official or not) are stable enough, it has an awesome community, and it&#8217;s generally easy to develop for. What are we going to use tomorrow? I don&#8217;t know, but the knowledge I&#8217;ve gathered over the years – developing the interface elements I&#8217;ve been using, learning about asynchronous data loading and user interface issues – will carry over, regardless of the new platform I&#8217;m using.</p>
<p>Now, there&#8217;s a lot that could be said against HTML5. Performance issues, compatibility, much slower user penetration, lack of features, how it&#8217;s only adding the same features and problems people criticized in Flash before. All has been said and, I&#8217;m sure, will be said as soon as HTML5 start to become a real contender and its flaws become more obvious in a <em>real world</em> scenario.</p>
<p>But you know what? It doesn&#8217;t matter. Because HTML5 will either work out or it won&#8217;t. And, as a developer, it&#8217;s not my job to root for one specific side. It&#8217;s my job to absorb whatever there&#8217;s to be absorbed and move on. Be it HTML and JavaScript, be it ActionScript, be it Silverlight, I&#8217;m pretty sure the higher-level knowledge I&#8217;ve gathered through the years that are outside the syntax realm will carry on.</p>
<p>I can&#8217;t be sure of what I&#8217;ll be working with in 10 years. And neither can you.</p>
]]></content:encoded>
			<wfw:commentRss>http://zehfernando.com/2010/something-i-just-remembered/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Firstborn is hiring yet again</title>
		<link>http://zehfernando.com/2010/firstborn-is-hiring-yet-again/</link>
		<comments>http://zehfernando.com/2010/firstborn-is-hiring-yet-again/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 18:42:51 +0000</pubDate>
		<dc:creator>Zeh</dc:creator>
				<category><![CDATA[Job posts]]></category>

		<guid isPermaLink="false">http://zehfernando.com/?p=692</guid>
		<description><![CDATA[Firstborn &#8211; the company in NYC I work for &#8211; is hiring new interns and other talents for 2010! To quote, Whether you’re a student blazing your path to digital superstardom or you’re well-versed in the interactive world and hoping to expand your experience, we’re looking for the best of the best to take it [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://firstbornmultimedia.com/">Firstborn</a> &#8211; the company in NYC I work for &#8211; is hiring new interns and other talents for 2010! To quote,</p>
<blockquote><p>Whether you’re a student blazing your path to digital superstardom or you’re well-versed in the interactive world and hoping to expand your experience, we’re looking for the best of the best to take it to the next level as a Firstborn intern.</p>
<p>Our interns aren’t treated like nobodies &#8211; they’re here to gain knowledge and improve their skills by working on high level, award winning work. You’ll have the chance to work closely with the Firstborn team on a number of projects and campaigns that include strategy and planning, concept development and design, </p>
<p>Flash programming and animation, 3D modeling and motion graphics, video production and editing, iPhone and mobile application development&#8230; and anything else that comes to life in the digital world.</p>
<p>All of our intern positions are paid and you will also receive a monthly Metrocard, a roundtrip flight to NYC if necessary and other fun extras. Our internships usually last 3 &#8211; 8 months and could open the doors to join the Firstborn crew or be the jumpstart you need to launch an exciting career.</p>
<p>For consideration, email us a little information about yourself, your resume and a list of URLs or your portfolio to <a href="mailto:jobs.intern@firstbornmultimedia.com">jobs.intern@firstbornmultimedia.com</a></p></blockquote>
<p>You can find a full listing of the positions available <a href="http://firstbornmultimedia.com/#/contact-us/jobs/">here</a>. And you can also watch our new intern video below &#8211; our homage to <a href="http://www.youtube.com/watch?v=anwlpTgbQTE">Nike&#8217;s iconic &#8220;Take it to the next level&#8221;</a> spot.</p>
<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/Eg9XWQexSoQ&#038;hl=en_US&#038;fs=1&#038;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Eg9XWQexSoQ&#038;hl=en_US&#038;fs=1&#038;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></p>
<p>No, I don&#8217;t appear in the video. I&#8217;m not photogenic enough. Or, to use my favorite excuse, <em>I was too busy doing actual work</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://zehfernando.com/2010/firstborn-is-hiring-yet-again/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Flash Camp Brasil is drawing closer</title>
		<link>http://zehfernando.com/2009/flash-camp-brasil-is-drawing-closer/</link>
		<comments>http://zehfernando.com/2009/flash-camp-brasil-is-drawing-closer/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 01:10:01 +0000</pubDate>
		<dc:creator>Zeh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://zehfernando.com/?p=688</guid>
		<description><![CDATA[In January 2010, Brazilians will finally see a Flash-related Adobe-supported event in Brazil with Flash Camp Brasil. To avoid repeating what has been said, here&#8217;s what Lee Brimelow had to say about it: In about a month and a half I will be traveling to beautiful Maceió for Flash Camp Brasil. This is shaping up [...]]]></description>
			<content:encoded><![CDATA[<p>In January 2010, Brazilians will finally see a Flash-related Adobe-supported event in Brazil with <a href="http://flashcampbrasil.com.br/">Flash Camp Brasil</a>. To avoid repeating what has been said, here&#8217;s what Lee Brimelow <a href="http://theflashblog.com/?p=1523">had to say about it</a>:</p>
<blockquote><p>In about a month and a half I will be traveling to beautiful <a href="http://en.wikipedia.org/wiki/Macei%C3%B3">Maceió</a> for <a href="http://flashcampbrasil.com.br/">Flash Camp Brasil</a>. This is shaping up to be a great event with an impressive group of speakers. In addition to many local speakers there are several international speakers coming including myself, Joshua Hirsch from <a href="http://www.bigspaceship.com/">Big Spaceship</a>, and fellow evangelist <a href="http://flashcampbrasil.com.br/">Danny Dura</a>. Oh and did I mention that Maceió is a tropical paradise with crystal clear water and beaches?</p></blockquote>
<p>The event is set in a beautiful city, in the peak of the summer, and will see a bunch of great presentations (not to mention, it&#8217;s really cheap!), so be sure not to miss it!</p>
<p>Due to personal logistic shenanigans I won&#8217;t be able to be there, but I&#8217;m certain it&#8217;ll be awesome to have an event of this magnitude finally landing in Brazilian soil &#8211; in a sense, we&#8217;ve been too far apart from the rest of the development community.</p>
<p>Here&#8217;s the intro video, by the way.</p>
<p><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/PQ7FLeep0ZU&#038;hl=en_US&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/PQ7FLeep0ZU&#038;hl=en_US&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></p>
<p>Awesome.</p>
]]></content:encoded>
			<wfw:commentRss>http://zehfernando.com/2009/flash-camp-brasil-is-drawing-closer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Presentation: Lessons learned maintaining Open Source ActionScript projects</title>
		<link>http://zehfernando.com/2009/presentation-lessons-learned-maintaining-open-source-actionscript-projects/</link>
		<comments>http://zehfernando.com/2009/presentation-lessons-learned-maintaining-open-source-actionscript-projects/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 15:18:37 +0000</pubDate>
		<dc:creator>Zeh</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://zehfernando.com/?p=677</guid>
		<description><![CDATA[One of the interesting things about working at Firstborn is that from time to time employees will host &#8220;Group Therapy&#8221; sessions, which are nothing other than presentations on diverse topics (read more about the idea behind this in this great article by former Firstborn employee Jens Fischer). A week or so ago I had the [...]]]></description>
			<content:encoded><![CDATA[<p>One of the interesting things about working at <a href="http://www.firstbornmultimedia.com">Firstborn</a> is that from time to time employees will host &#8220;Group Therapy&#8221; sessions, which are nothing other than presentations on diverse topics (read more about the idea behind this in <a href="http://firstbornmultimedia.com/#/our-news/articles/289/">this great article</a> by former Firstborn employee <a href="http://www.artofrawr.com/">Jens Fischer</a>).</p>
<p>A week or so ago I had the nerve to host a presentation of my own. It was called &#8220;Lessons learned maintaining Open Source ActionScript projects&#8221; and it was, quite obviously, all about things I learned while publishing Open Source projects &#8211; namely, <a href="http://hosted.zeh.com.br/mctween/">MC Tween</a> and <a href="http://code.google.com/p/tweener/">Tweener</a>.</p>
<p>Now, I&#8217;m not really an OS guru and much less a proper OS project manager, but I think there were some interesting experience points gained in those quests that I wanted to share so I decided to make it publicly available. Check it out &#8211; I promise it has some interesting links mentioned:</p>
<div id="__ss_2055846" style="width: 425px; text-align: left;"><object style="margin:0px" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=20090924lessonslearned-090923220106-phpapp01&amp;rel=0&amp;stripped_title=lessons-learned-maintaining-open-source-actionscript-projects" /><param name="allowfullscreen" value="true" /><embed style="margin:0px" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=20090924lessonslearned-090923220106-phpapp01&amp;rel=0&amp;stripped_title=lessons-learned-maintaining-open-source-actionscript-projects" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<p>The presentation is <a href="http://www.slideshare.net/zehfernando/lessons-learned-maintaining-open-source-actionscript-projects">available on Slideshare</a>, or as <a href="http://zehfernando.com/d/20090924_lessonslearned.pdf">a direct PDF download</a>.</p>
<p>This was also presented at the (awesome) <a href="http://www.flashcodersny.org/">FlashCodersNY</a> weekly meeting of October 14th.</p>
]]></content:encoded>
			<wfw:commentRss>http://zehfernando.com/2009/presentation-lessons-learned-maintaining-open-source-actionscript-projects/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Flash Player penetration statistics for september 2009</title>
		<link>http://zehfernando.com/2009/flash-player-penetration-statistics-for-september-2009/</link>
		<comments>http://zehfernando.com/2009/flash-player-penetration-statistics-for-september-2009/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 14:53:52 +0000</pubDate>
		<dc:creator>Zeh</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://zehfernando.com/?p=666</guid>
		<description><![CDATA[One year ago, in October 2008, Flash Player 10 was publicly released. At the time, due to some major early adoption, I predicted it&#8217;d reach a 90% browser penetration after 6 months. It turns out I was a bit too optimistic, but in a way, the prediction now doesn&#8217;t seem to be as crazy as [...]]]></description>
			<content:encoded><![CDATA[<p>One year ago, in October 2008, Flash Player 10 was publicly released. At the time, due to some major early adoption, <a href="http://zehfernando.com/2008/picnik-now-supporting-pixel-bender/">I predicted it&#8217;d reach a 90% browser penetration after 6 months</a>.</p>
<p>It turns out I was a bit too optimistic, but in a way, the prediction now doesn&#8217;t seem to be as crazy as it was when I first wrote about it. The reason? <a href="http://www.adobe.com/products/player_census/flashplayer/version_penetration.html">The new statistics are out</a>, and it still managed to beat the adoption rate of all other major versions of the player quite handily.</p>
<div class="mceTemp mceIEcenter">
<dl id="attachment_667" class="wp-caption aligncenter" style="width: 560px;">
<dt class="wp-caption-dt"><a href="http://spreadsheets.google.com/pub?key=pjaKnZUqwo-1XaUCJLlBQeA&amp;gid=1"><img class="size-full wp-image-667" title="Flash adoption rate, October 2009" src="http://zehfernando.com/wp-content/uploads/2009/10/fpoct9.png" border="0" alt="Flash adoption rate, October 2009" width="550" height="279" /></a></dt>
</dl>
</div>
<p>At 11 months after release, it has a 93.5% penetration for mature markets, having reached the oh-so-important 90% penetration rate in about 9 or 10 months. Not bad; can we start developing for Flash 10 only now? <img src='http://zehfernando.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>All historical data is collected <a href="http://spreadsheets.google.com/pub?key=pjaKnZUqwo-1XaUCJLlBQeA&amp;gid=1">on my shared spreadsheet</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://zehfernando.com/2009/flash-player-penetration-statistics-for-september-2009/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Adobe Max 2009 will preview the future of the Flash platform</title>
		<link>http://zehfernando.com/2009/adobe-max-2009-will-preview-the-future-of-the-flash-platform/</link>
		<comments>http://zehfernando.com/2009/adobe-max-2009-will-preview-the-future-of-the-flash-platform/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 18:07:56 +0000</pubDate>
		<dc:creator>Zeh</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://zehfernando.com/?p=649</guid>
		<description><![CDATA[Adobe Max 2009 will finally start in a few weeks. For the past few months, I&#8217;ve heard small bits of information about the future of the Flash platform, often complemented by someone from Adobe saying we&#8217;d have more information at MAX – making the event sound more and more important each time around. Ted Patrick&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://max.adobe.com/">Adobe Max 2009</a> will finally start in a few weeks. For the past few months, I&#8217;ve heard small bits of information about the future of the Flash platform, often complemented by someone from Adobe saying we&#8217;d have more information at MAX – making the event sound more and more important each time around.</p>
<p><a href="http://twitter.com/__ted__/statuses/4083652624">Ted Patrick&#8217;s recent tweet</a> corroborates with this:</p>
<blockquote><p><span><span>I am suprized more folks haven&#8217;t dug into the MAX session scheduler. The future of Flash Platform is there. <a rel="nofollow" href="http://bit.ly/pFz34" target="_blank">http://bit.ly/pFz34</a></span></span></p></blockquote>
<p><span><span>So what is <em>the future of the Flash Platform</em>? Well, apart from the usual stablished/educational content, this is what caught my attention from the list:<br />
</span></span></p>
<ul>
<li>GPU acceleration for the next Flash Player: known, but may only apply to mobile devices.
<ul>
<li><strong>GPU Acceleration in the next Flash Player</strong>: Learn what&#8217;s possible with GPU acceleration in the next version of Flash Player. NVIDIA and Adobe collaborated to develop GPU acceleration that enables Flash Player to run fluidly on battery-powered mobile devices that are changing the face of computing. See how GPUs will change your perceptions of what is possible on mobile and how you can create content that taps into this significant opportunity.</li>
</ul>
</li>
</ul>
<ul>
<li>The next version of AIR (AIR 2) will have different distribution methods
<ul>
<li><strong>Explore Deployment and Distribution Options for Adobe AIR Applications</strong>: Learn how to get your AIR applications to your users and how to keep them up to date. We will discuss important considerations for distribution on the Internet or an intranet, including impacts on your auto-update mechanism. We will cover existing deployment options such as badge installation and IBM Tivoli support. Finally, we will explore the new deployment options that will be available in Adobe AIR 2, including the native installer support required to use some of the advanced new AIR 2 APIs.</li>
</ul>
</li>
</ul>
<ul>
<li>Flash 10 and AIR are coming to mobile platforms
<ul>
<li><strong>Preview: Flex for Mobile Devices</strong>: Hear directly from the team involved in enabling Flex on mobile devices regarding the challenges faced and progress made in optimization, components, and tooling. In this session, you&#8217;ll see Flex running on smartphones and learn how to create your first mobile Flex application.</li>
<li><strong>Building Mobile Applications with Adobe AIR</strong>: Learn how Adobe is working to bring Adobe AIR development out of the desktop and onto a mobile phone near you. We will cover how the AIR SDK and platform will evolve to add capabilities to help developers mobile enable, test, and publish their content. Mobile computing and mobile applications provide publishers and developers with exciting opportunities to get their products into the pockets of millions of people.</li>
<li><strong>Designing Applications for Desktops and Mobile Devices with Adobe AIR</strong>: See how Adobe AIR has made it possible for web developers to build cross-platform desktop applications. Learn how the platform is expanding to enable the delivery of applications not just for desktop operating systems, but also for mobile devices.</li>
</ul>
</li>
</ul>
<ul>
<li>More information on Flash Player for TVs and other embedded devices
<ul>
<li><strong>Flash for the Digital Home: Flash on TV!</strong>: Discover Adobe&#8217;s optimized implementation of the Flash runtime that enables the delivery of HD video and rich applications to Internet-connected TVs, set-top boxes, Blu-ray players, and other devices that are connected to the television. Learn about the platform and supported features, and view some sample TV applications that highlight these features. This session should inspire content providers, developers, and designers who want to take advantage of Flash in the TV space.</li>
</ul>
</li>
</ul>
<ul>
<li>Multi-touch: this <em>sounds</em> like it means using third-party multi-touch devices, something that&#8217;s already possible (instead of a native API, which would be real news), but should still be interesting
<ul>
<li><strong>Multi-touch and the Flash Platform</strong>: Discover what you can do with multi-touch and the Flash Platform. Learn how you can build your own multi-touch table for a fraction of the cost of commercial products. We&#8217;ll also discuss an approach to building multi-touch applications for the Flash Platform on these tables that will open up an entire new world of possibilities not only for experimentation, but for your customers and clients as well.</li>
<li><strong>Multitouch Development with Flex</strong>: Explore new techniques for interacting with software and devices with the latest capabilities of the Flash Platform.  Multitouch experiences are taking the software world by storm, from the 2008 election night coverage to the latest bars and clubs. This session will explore the multitouch capabilities of Flash Player and demonstrate how you can take advantage of them within your own applications.</li>
</ul>
</li>
</ul>
<p>And other presentations that should be of note and will <em>hopefully</em> be released into the wild post-MAX:</p>
<ul>
<li><strong>Roadmap: Flash Platform Runtimes</strong>: Come see the roadmap for the Flash Platform runtimes: Flash Player and Adobe AIR. Learn about what the runtime teams are working on today for delivery soon, and hear how Adobe envisions the future direction of the runtimes.</li>
<li><strong>Top Secret Flash Player Session</strong>: Sorry, we can&#8217;t tell you what this one is about. If we told you we&#8217;d have to&#8230; But we will say that this is one session you won&#8217;t want to miss. More information will be available on-site at MAX. And now that you have read the description, the session will self-destruct.</li>
<li><strong>What&#8217;s Coming in Adobe AIR 2</strong>: Adobe AIR allows developers to build rich Internet applications (RIAs) that run outside the browser on multiple operating systems. In this session, you will learn about the planned capabilities of the upcoming release of Adobe AIR 2.</li>
</ul>
<p>More on the <a href="http://max.adobe.com/scheduler/#view=1">Adobe Max Session Catalog</a>. Should be <em>really</em> interesting.</p>
<p><strong>Update</strong>: Ted Patrick himself has posted <a href="http://onflash.org/ted/2009/09/adobe-max-2009-sessions-not-to-miss.php">his pick of the most interesting sessions</a> at his blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://zehfernando.com/2009/adobe-max-2009-will-preview-the-future-of-the-flash-platform/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Eric Decker on creating a 3d engine</title>
		<link>http://zehfernando.com/2009/eric-decker-on-creating-a-3d-engine/</link>
		<comments>http://zehfernando.com/2009/eric-decker-on-creating-a-3d-engine/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 22:36:20 +0000</pubDate>
		<dc:creator>Zeh</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://zehfernando.com/?p=640</guid>
		<description><![CDATA[Nowadays it&#8217;s often that I find somebody talking about something or doing something that I wish I was doing myself &#8211; but that I can&#8217;t for a number of reasons (one of them being the fact that I&#8217;ve just moved and I don&#8217;t have a real computer and Internet connection at home). The latest installment [...]]]></description>
			<content:encoded><![CDATA[<p>Nowadays it&#8217;s often that I find somebody talking about something or doing something that I wish I was doing myself &#8211; but that I can&#8217;t for a number of reasons (one of them being the fact that I&#8217;ve just moved and I don&#8217;t have a real computer and Internet connection at home). The latest installment in this pattern is Eric Decker&#8217;s great posts about <a href="http://labs.eric-decker.com/?cat=19">creating a 3d engine of his own</a> for educational purposes, where he goes through the steps he&#8217;s taking to create such an engine in Flash. A nice read and some interesting demos.</p>
<p>As a side note, working with such talented people &#8211; Eric is also at <a href="http://www.firstbornmultimedia.com">Firstborn</a> &#8211; makes me feel like such a fraud.</p>
]]></content:encoded>
			<wfw:commentRss>http://zehfernando.com/2009/eric-decker-on-creating-a-3d-engine/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
