<?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>Artman&#039;s blog &#38; life stream</title>
	<atom:link href="http://artman.fi/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://artman.fi/blog</link>
	<description>Flash, Flex, Web and other random thoughts.</description>
	<lastBuildDate>Fri, 12 Mar 2010 17:15:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>HTML 5 killing Flash blah blah</title>
		<link>http://artman.fi/blog/2010/03/html-5-killing-flash-blah-blah/</link>
		<comments>http://artman.fi/blog/2010/03/html-5-killing-flash-blah-blah/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 16:00:59 +0000</pubDate>
		<dc:creator>artman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[silverlight]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://artman.fi/blog/?p=437</guid>
		<description><![CDATA[
Enough already. I&#8217;ve been asked a number of times what I think about Flash beeing killed by HTML 5 and I&#8217;m really getting tired of the whole discussion (which to begin with is not very interesting). That&#8217;s why I&#8217;m writing this down in a post so as to spare me from answering the same dull [...]]]></description>
			<content:encoded><![CDATA[<p><a title="html5 youtube" href="http://www.flickr.com/photos/40342663@N02/4426186649/"><img class="alignleft" style="float: left;" src="http://farm5.static.flickr.com/4016/4426186649_350c3ca01b_m.jpg" alt="html5 youtube" /></a></p>
<p>Enough already. I&#8217;ve been asked a number of times what I think about Flash beeing killed by HTML 5 and I&#8217;m really getting tired of the whole discussion (which to begin with is not very interesting). That&#8217;s why I&#8217;m writing this down in a post so as to spare me from answering the same dull question once and for all.</p>
<p>Those seeking a quick answer to whether HTML 5 is going to kill Flash, the answer is: &#8220;No&#8221;. A slightly longer answer would go: &#8220;No, but I hope it did&#8221;.</p>
<h3>iPhones, iPads</h3>
<p>So the iPhone and the iPad does not support Flash, and quite likely never will. So what? At the time of writing there is no single mobile phone to be bought by consumers that support a full Flash experience (to me that is Flash 10 within the browser). So, if there&#8217;s no single mobile phone today that supports the Flash experience, how come Flash is still alive? The mobile web is still different from the desktop web, and it&#8217;s going to stay that way for a while still. People use the mobile web for different purposes and I really don&#8217;t think that to this day many have missed Flash on their mobile devices. The iPad is a different story, as the experience and use scenarios come close to the desktop web. But I think that the absence of Flash on the iPad is Apple&#8217;s loss, not Adobe&#8217;s.</p>
<p><img class="alignleft" style="float: left;" src="http://farm3.static.flickr.com/2731/4426181455_948c636477_m.jpg" alt="Matrimonio albanese #1" /></p>
<h3>Video</h3>
<p>Whenever a major newspaper with inexperienced tech journalists write about how Flash is being killed by HTML they always refer to the video embedding capabilities of the spec. And nothing else really. Somehow someone has been able to seed the perception that Flash <strong>=</strong> web video. Within that false perception, HTML5 might actually kill Flash (in the distant future). Somebody will create a fantastic plug-in for jQuery UI that puts lovely controls around all video tags on a page, and that will become the norm. For that to happen, however, most users on the web will need to surf on a HTML5 enabled browser. Usually &#8220;most users&#8221; refers to more than 90% of all users (after which developers can start to remove any gracious fallbacks that involve Flash). If you look at the market share of IE6, which was released <strong>ages</strong> ago, you know it&#8217;ll take a while to reach that 90%.</p>
<h3>Silverlight</h3>
<p>The fact that Microsoft has created Silverlight and still keeps on pushing it hard is actually a case for Flash surviving the &#8220;onslaught of HTML5&#8243;. If MS felt that they could not compete with HTML5 using a plug-in technology that is far less spread than the Flash Player, they would not pour millions of dollars into it&#8217;s R&amp;D. Nuff&#8217; said.</p>
<h3>But I wouldn&#8217;t mind if it did kill Flash</h3>
<p>On the other side of this argument are Flash developers, screaming out loud things like &#8220;To arms! Flash is under attack&#8221;. WTF? Let&#8217;s imagine that HTML5 (or whatever else) would actually kill Flash.</p>
<p>For this to happen, there would need to be a technology or language that would be widespread amongst internet users, embraced by developers and thus superior to whatever it is that Flash is doing now. Metathesiophics (people who fear change, yes I had to look that up) aside, wouldn&#8217;t that be great? Whatever comes along, it&#8217;s bound to be programmable by something which reminds us (or is) of ECMA-Script or Java, so there&#8217;s really no steep learning curve for any Flash developer, especially as change does not come overnight, but over many years (sad but true).</p>
<p>So yeah, I hope something kills of Flash really quickly.</p>]]></content:encoded>
			<wfw:commentRss>http://artman.fi/blog/2010/03/html-5-killing-flash-blah-blah/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>FP 10.1 Finally delivers speed improvements for OS X</title>
		<link>http://artman.fi/blog/2010/02/10-1-finally-delivers-speed-improvements-to-mac/</link>
		<comments>http://artman.fi/blog/2010/02/10-1-finally-delivers-speed-improvements-to-mac/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 07:24:44 +0000</pubDate>
		<dc:creator>artman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[flashplayer]]></category>

		<guid isPermaLink="false">http://artman.fi/blog/?p=434</guid>
		<description><![CDATA[
I thought of writing a post on how the Flash Player absolutely sucks on OS X. Jeah, people have been writing a number of related posts, but I didn&#8217;t think anyone actually grasped the severity of the issue. Flash 10.0 in Safari 4 on Snow Leopard (64 bit, FP running in it&#8217;s own process) actually [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Saturn v rockets@NASA" href="http://www.flickr.com/photos/27202985@N03/4384470303/"><img class="alignleft" style="float: left;" src="http://farm5.static.flickr.com/4056/4384470303_00ba2c3d64_m.jpg" alt="Saturn v rockets@NASA" /></a></p>
<p>I thought of writing a post on how the Flash Player absolutely sucks on OS X. Jeah, people have been writing a number of related posts, but I didn&#8217;t think anyone actually grasped the severity of the issue. Flash 10.0 in Safari 4 on Snow Leopard (64 bit, FP running in it&#8217;s own process) actually becomes what I would say unusable. Even if you don&#8217;t do much processing, frame-rates plummet by at least a factor of four compared to a Window XP setup with the same hardware. And sure, while Firefox on OS X has run Flash sort of okeyish, it has never been able to compare against a Windows counterpart.</p>
<p>That is, up to now.</p>
<p>Tinic had a <a href="http://www.kaourantin.net/2010/02/core-animation.html">great post</a> on changes they&#8217;ve made to how they composite Flash Player 10.1 renderings in the browser. The changes truly have made a <strong>big</strong> difference. Compared to 10.0, 10.1 screams on Safari, and is also a bit faster on Firefox.</p>]]></content:encoded>
			<wfw:commentRss>http://artman.fi/blog/2010/02/10-1-finally-delivers-speed-improvements-to-mac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iSlate/iPad/iTablet</title>
		<link>http://artman.fi/blog/2010/01/islateipaditablet/</link>
		<comments>http://artman.fi/blog/2010/01/islateipaditablet/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 17:24:20 +0000</pubDate>
		<dc:creator>artman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://artman.fi/blog/?p=426</guid>
		<description><![CDATA[
I&#8217;ve never seen a product being talked about this much before actually beeing introduced as the iSlate/iPad/iTablet. Compared to this, the iPhone rumors were just mere whispers in the wind.
Now, can anyone really expect for the tablet to actually live up to the expectations, unless the &#8220;one more thing&#8221; is that it actually self-levitates.
We&#8217;ll have [...]]]></description>
			<content:encoded><![CDATA[<p><a title="02-itablet-islate-iphone-apple3-480x326.jpg" href="http://www.flickr.com/photos/30174047@N08/4289735050/"><img class="alignleft" style="float: left;" src="http://farm5.static.flickr.com/4025/4289735050_b3ea403a41_t.jpg" alt="02-itablet-islate-iphone-apple3-480x326.jpg" /></a></p>
<p>I&#8217;ve never seen a product being talked about this much before actually beeing introduced as the iSlate/iPad/iTablet. Compared to this, the iPhone rumors were just mere whispers in the wind.</p>
<p>Now, can anyone really expect for the tablet to actually live up to the expectations, unless the &#8220;one more thing&#8221; is that it actually self-levitates.</p>
<p>We&#8217;ll have to see next wednesday.</p>
<p><strong>Update</strong>: Well, it didn&#8217;t self-levitate. What a bummer.</p>]]></content:encoded>
			<wfw:commentRss>http://artman.fi/blog/2010/01/islateipaditablet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sleep Phase wakeup clock now available on the App Store</title>
		<link>http://artman.fi/blog/2010/01/good-night-sleep-monitor-now-available-on-the-app-store/</link>
		<comments>http://artman.fi/blog/2010/01/good-night-sleep-monitor-now-available-on-the-app-store/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 17:24:16 +0000</pubDate>
		<dc:creator>artman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[appstore]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[objective-c]]></category>

		<guid isPermaLink="false">http://artman.fi/blog/?p=414</guid>
		<description><![CDATA[Sleep Phase wakeup clock, my second iPhone app is now available on the App Store. It&#8217;s a alarm clock, which monitors your sleep rythm through the iPhone&#8217;s microphone or accelerometer and wakes you up in a light sleep phase, which means you&#8217;ll feel energized and refreshed every morning.
Originally I had this idea more than a [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-415" title="Good Night" src="http://artman.fi/blog/wp-content/uploads/2010/01/ss2.png" alt="Good Night" width="320" height="480" /><a href="http://itunes.apple.com/fi/app/sleep-phase-wakeup-clock/id351438999?mt=8">Sleep Phase wakeup clock</a>, my second iPhone app is now available on the App Store. It&#8217;s a alarm clock, which monitors your sleep rythm through the iPhone&#8217;s microphone or accelerometer and wakes you up in a light sleep phase, which means you&#8217;ll feel energized and refreshed every morning.</p>
<p>Originally I had this idea more than a year ago, but did not start to experiment with some code untill last summer. I was about to wrap everything up this christmas, when I stumbled upon <a href="http://itunes.apple.com/fi/app/sleep-cycle-alarm-clock/id320606217?mt=8">Sleep cycle alarm clock</a>, which was released about a month ago. They&#8217;ve sold over 100.000 copies in the first month. Lazy me, could have beat them to the store had I tried a bit harder. Well, life sucks.</p>
<p>Anyways, I do appreciate what I learned from this &#8220;project&#8221;. It all came together much easier than Web Feeds, the first iPhone app I created one and a half years ago. Go ahead, give it a go, it&#8217;s not that expensive <img src='http://artman.fi/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>Update</strong>: I pulled the app from the store. I realized that I need to figure out a better, more descriptive name than &#8220;Good Night&#8221;. Unfortunately the app name cannot be changed once it&#8217;s submitted.</p>
<p><strong>Update 2</strong>: It&#8217;s available once more under the Sleep Phase wakeup clock name.</p>]]></content:encoded>
			<wfw:commentRss>http://artman.fi/blog/2010/01/good-night-sleep-monitor-now-available-on-the-app-store/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Had a small hickup, due to our server me&#8230;</title>
		<link>http://artman.fi/blog/2009/12/had-a-small-hickup-due-to-our-server-me/</link>
		<comments>http://artman.fi/blog/2009/12/had-a-small-hickup-due-to-our-server-me/#comments</comments>
		<pubDate>Wed, 30 Dec 2009 20:11:26 +0000</pubDate>
		<dc:creator>artman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[problems]]></category>

		<guid isPermaLink="false">http://artman.fi/blog/2009/12/had-a-small-hickup-due-to-our-server-me/</guid>
		<description><![CDATA[Had a small hickup, due to our server melting. Everything should be back up now&#8230;]]></description>
			<content:encoded><![CDATA[<p>Had a small hickup, due to our server melting. Everything should be back up now&#8230;</p>]]></content:encoded>
			<wfw:commentRss>http://artman.fi/blog/2009/12/had-a-small-hickup-due-to-our-server-me/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building MMOG&#8217;s for the Flash Platform &#8211; AS3 to Java Byte-code Compiler</title>
		<link>http://artman.fi/blog/2009/11/building-mmogs-in-flash-as3-to-java-bytecode-compiler/</link>
		<comments>http://artman.fi/blog/2009/11/building-mmogs-in-flash-as3-to-java-bytecode-compiler/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 18:20:13 +0000</pubDate>
		<dc:creator>artman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[mmog]]></category>

		<guid isPermaLink="false">http://artman.fi/blog/?p=397</guid>
		<description><![CDATA[
Whoa, long time no post about this subject. My apologies. This one won&#8217;t be long either, but I just had to share this freakin&#8217; cool thing.
You might have read before that one big part of our MMOG Platform is the ability to write all code in AS3. Client-side as well as Server side. As there [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Hot Java" href="http://www.flickr.com/photos/87134616@N00/3950791244/"><img class="alignleft" style="float: left; " src="http://farm3.static.flickr.com/2519/3950791244_6970ef9aef_t.jpg" alt="Hot Java" /></a></p>
<p>Whoa, long time no post about this subject. My apologies. This one won&#8217;t be long either, but I just had to share this freakin&#8217; cool thing.</p>
<p>You might have read before that one big part of our MMOG Platform is the ability to write all code in AS3. Client-side as well as Server side. As there is no real AS3 server-side technology available we had to write our own. Our first version was up and running almost a year ago. Performance back then was OK, our tests showed us that our compiler could generate Java Byte-code from AS3 that ran as quickly as AS3 in the Flash Player, and included almost all core functionality of the AS3 scripting language.</p>
<p>Jump forward a year and now we have our second version of our compiler up and running (well, compiling). And boy is it fast. When you write decent code with type annotations and all, the compiler will churn out almost perfect Java Byte-code without pushing anything on the stack.</p>
<p>Performance?</p>
<p>Our simple (and yeah, a bit biased I must say) test suite with heavy calculations performed wonderfully. We ran the same test suite in the Flash Player and in it&#8217;s compiled form from the command line (compiling from the same source code of course).</p>
<p>All I can say is wow. Optimally, our AS3 to Java compiler produces byte code that runs <strong>900 times</strong> faster than ActionScript in the Flash Player. <strong>900 times</strong>.</p>
<p>This of course won&#8217;t hold true in the real world where we pass around closures, dynamic objects and other resource hogs. But from what we can gather it should be around 100 times faster even then. Stay tuned for some real world tests once we get to those.</p>]]></content:encoded>
			<wfw:commentRss>http://artman.fi/blog/2009/11/building-mmogs-in-flash-as3-to-java-bytecode-compiler/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Vattenfall, please explain yourself</title>
		<link>http://artman.fi/blog/2009/11/vattenfall-please-explain-yourself/</link>
		<comments>http://artman.fi/blog/2009/11/vattenfall-please-explain-yourself/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 18:14:06 +0000</pubDate>
		<dc:creator>artman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[carbon]]></category>
		<category><![CDATA[electricity]]></category>
		<category><![CDATA[green]]></category>
		<category><![CDATA[oil]]></category>
		<category><![CDATA[power]]></category>

		<guid isPermaLink="false">http://artman.fi/blog/?p=394</guid>
		<description><![CDATA[
I just moved, and started to compare prices for electricity. Vattenfall has a great number of options to choose from. You can choose with what method the electricity you&#8217;re buying has been produced. Nuclear, wind, water or &#8220;basic&#8221; (=nuclear, fossil, wind &#38; water). Now, the pricing for wind generated power is a bit higher than [...]]]></description>
			<content:encoded><![CDATA[<p><a title="wind-power" href="http://www.flickr.com/photos/43008179@N00/4067328989/"><img class="alignleft" style="float: left; " src="http://farm4.static.flickr.com/3511/4067328989_34b05a6750_t.jpg" alt="wind-power" /></a></p>
<p>I just moved, and started to compare prices for electricity. Vattenfall has a great number of options to choose from. You can choose with what method the electricity you&#8217;re buying has been produced. Nuclear, wind, water or &#8220;basic&#8221; (=nuclear, fossil, wind &amp; water). Now, the pricing for wind generated power is a bit higher than for the other options, but what was really surprising was that the &#8220;basic&#8221; option, which is powered by fossil fuels in addition to clean energy is priced the same as electricity that has been generated 100% from water power.</p>
<p>My question is, why the hell does Vattenfall have an option that includes fossil fuels when there is a clean option at the same price point?</p>]]></content:encoded>
			<wfw:commentRss>http://artman.fi/blog/2009/11/vattenfall-please-explain-yourself/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yup, Unity3D just got a new version and &#8230;</title>
		<link>http://artman.fi/blog/2009/10/yup-unity3d-just-got-a-new-version-and/</link>
		<comments>http://artman.fi/blog/2009/10/yup-unity3d-just-got-a-new-version-and/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 19:10:47 +0000</pubDate>
		<dc:creator>artman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[unity]]></category>

		<guid isPermaLink="false">http://artman.fi/blog/2009/10/yup-unity3d-just-got-a-new-version-and/</guid>
		<description><![CDATA[Yup, Unity3D just got a new version and is now free of charge (at least the former Indie version). Boom says Flash as it&#8217;s beeing overtaken by other development environments for sophisticated web-based games. The guys at Adobe just won&#8217;t listen that they are really missing out on something big.]]></description>
			<content:encoded><![CDATA[<p>Yup, Unity3D just got a new version and is now free of charge (at least the former Indie version). Boom says Flash as it&#8217;s beeing overtaken by other development environments for sophisticated web-based games. The guys at Adobe just won&#8217;t listen that they are really missing out on something big.</p>]]></content:encoded>
			<wfw:commentRss>http://artman.fi/blog/2009/10/yup-unity3d-just-got-a-new-version-and/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Apple logo infringement in Web Feeds</title>
		<link>http://artman.fi/blog/2009/10/apple/</link>
		<comments>http://artman.fi/blog/2009/10/apple/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 06:45:58 +0000</pubDate>
		<dc:creator>artman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://artman.fi/blog/?p=387</guid>
		<description><![CDATA[
So I finally got an update to Web Feeds &#8211; an iPhone RSS reader app &#8211; send to Apple for review. It took quiet a while and yesterday I got a message that the update was rejected due to &#8220;infringement of Apple trademarks&#8221;. Huh?
I know the reviewers are very busy and probably have only minutes [...]]]></description>
			<content:encoded><![CDATA[<p><a title="512K Apple" href="http://www.flickr.com/photos/13048208@N02/2502453271/"><img class="alignleft" style="float: left; " src="http://farm3.static.flickr.com/2025/2502453271_1ea33a7b39_t.jpg" alt="512K Apple" /></a></p>
<p>So I finally got an update to <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=286889917&amp;mt=8">Web Feeds</a> &#8211; an iPhone RSS reader app &#8211; send to Apple for review. It took quiet a while and yesterday I got a message that the update was rejected due to &#8220;infringement of Apple trademarks&#8221;. Huh?</p>
<p>I know the reviewers are very busy and probably have only minutes to test each update and look for suspicious activity. In this case their decision is rather sad. The application is preconfigured with some RSS-feeds users could be interested in, namely Huff-Post, Boing Boing, Engadget and, yes, Apple Hot News.</p>
<p>Now, when the app launches it fetches the feeds and looks for any FavIcons in the Feed&#8217;s domain like any web browser does. Of course the Apple Hot News feed loads up the grey-white apple FavIcon from apple.com. Enough for the reviewer to reject this update (oh, all the other 10 updates have gone through without anyone noticing, hmm).</p>
<p>Maybe I&#8217;ll just resubmit without the Apple Hot News feed&#8230;</p>]]></content:encoded>
			<wfw:commentRss>http://artman.fi/blog/2009/10/apple/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Full GPU acceleration coming with Flash Player 10.1</title>
		<link>http://artman.fi/blog/2009/10/full-gpu-acceleration-coming-with-flash-player-10-1/</link>
		<comments>http://artman.fi/blog/2009/10/full-gpu-acceleration-coming-with-flash-player-10-1/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 02:56:06 +0000</pubDate>
		<dc:creator>artman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[gpu]]></category>
		<category><![CDATA[max]]></category>

		<guid isPermaLink="false">http://artman.fi/blog/?p=382</guid>
		<description><![CDATA[
NVIDIA took the big surprise out of tomorrows MAX keynote by adding a pamphlet to the MAX swag bag that everyone received when registering. It says:
Unique technical partnership between NVIDIA and Adobe engineers optimizes full pipeline acceleration of Flash 10.1 on the GPU.
This means two things: Flash Player 11 will not see the light of [...]]]></description>
			<content:encoded><![CDATA[<p><a title="nVidia" href="http://www.flickr.com/photos/40204093@N06/3976394281/"><img class="alignleft" style="float: left; " src="http://farm3.static.flickr.com/2421/3976394281_344ea4bf5d_m.jpg" alt="nVidia" /></a></p>
<p>NVIDIA took the big surprise out of tomorrows MAX keynote by adding a pamphlet to the MAX swag bag that everyone received when registering. It says:</p>
<blockquote><p>Unique technical partnership between NVIDIA and Adobe engineers optimizes full pipeline acceleration of Flash 10.1 on the GPU.</p></blockquote>
<p>This means two things: Flash Player 11 will not see the light of day tomorrow. Instead, a minor version update 10.1 is going to be releasead. This release will see full graphics pipeline rendering on the GPU. In my mind this means that everything from rendering vectors, text, transforms and Pixel Bender to compositioning will run on the GPU. That&#8217;s absolutely fantastic (if true)!</p>
<p>However, having only a minor revision of FP released tomorrow probably means that there won&#8217;t be many other new features. But expect to see a number of notifications regarding running FP on mobile devices. Again the NVIDIA pamphlet provided some unexpected news:</p>
<blockquote><p>Full GPU acceleration of dynamic games and rich internet applications in the palm of your hand</p></blockquote>
<p>Seems that GPU acceleration (and FP 10.1) is comming to your mobile (if your mobile is NVIDIA TEGRA-powered, err, which it is not&#8230;).</p>
<p>Stay tuned and watch the <a href="http://max.adobe.com">keynotes</a>.</p>
<p>[Update] Shit. GPU acceletation will only be available for mobile devices and selected notebooks. Windows 7 (i.e. DiretX 11 machines) will have h.264 decoded on the GPU, but won&#8217;t support full GPU acceleration in the rendering pipeline. Mac&#8217;s and Linux boxes have even less support for the GPU. Big bummer. I really think Adobe is missing a big opportunity here. Unity3D or Torque3D will become the defacto web-based game plugin, at least for 3D games.</p>]]></content:encoded>
			<wfw:commentRss>http://artman.fi/blog/2009/10/full-gpu-acceleration-coming-with-flash-player-10-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Meet up at MAX</title>
		<link>http://artman.fi/blog/2009/09/meet-up-at-ma/</link>
		<comments>http://artman.fi/blog/2009/09/meet-up-at-ma/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 19:20:26 +0000</pubDate>
		<dc:creator>artman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[aug]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[max]]></category>

		<guid isPermaLink="false">http://artman.fi/blog/?p=379</guid>
		<description><![CDATA[
Anyone from up north (the european north) heading to MAX? We&#8217;re already arriving on saturday, but will probably be too exhausted to do anything that night. But do come have a few (=lots) pints with us on Saturday for some pre-conferencing  
It would also be cool to join any Adobe User Group meeting that [...]]]></description>
			<content:encoded><![CDATA[<p><a title="&lt;3" href="http://www.flickr.com/photos/46509326@N00/3969498574/"><img class="alignleft" style="float: left; " src="http://farm3.static.flickr.com/2494/3969498574_5343b0712a_t.jpg" alt="&lt;3" /></a></p>
<p>Anyone from up north (the european north) heading to MAX? We&#8217;re already arriving on saturday, but will probably be too exhausted to do anything that night. But do come have a few (=lots) pints with us on Saturday for some pre-conferencing <img src='http://artman.fi/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>It would also be cool to join any Adobe User Group meeting that weekend. Anyone know where one&#8217;s beeing held?</p>]]></content:encoded>
			<wfw:commentRss>http://artman.fi/blog/2009/09/meet-up-at-ma/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A new beginning</title>
		<link>http://artman.fi/blog/2009/09/a-new-beginning/</link>
		<comments>http://artman.fi/blog/2009/09/a-new-beginning/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 18:37:17 +0000</pubDate>
		<dc:creator>artman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[new]]></category>
		<category><![CDATA[Stuff happens]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://artman.fi/blog/?p=314</guid>
		<description><![CDATA[
Finally I decided to get myself the internet precense I deserved and got myself my own artman.fi-domain. You know, I&#8217;ve always dreaded the moment I leave Valve (yes, eventually that too will happen&#8230;) because I loose my company email-address as well. I can&#8217;t even count the number of services I&#8217;ve registered to with that specific [...]]]></description>
			<content:encoded><![CDATA[<p><a title="DSCF2549" href="http://www.flickr.com/photos/30083252@N03/3966841216/"><img class="alignleft" style="float: left; " src="http://farm3.static.flickr.com/2544/3966841216_f219c6337c_m.jpg" alt="DSCF2549" /></a></p>
<p>Finally I decided to get myself the internet precense I deserved and got myself my own artman.fi-domain. You know, I&#8217;ve always dreaded the moment I leave <a href="http://www.valve.fi">Valve</a> (yes, eventually that too will happen&#8230;) because I loose my company email-address as well. I can&#8217;t even count the number of services I&#8217;ve registered to with that specific email. Most services nowadays use the email-address as the login name, and usually the login name cannot be changed (stupid, is it not?).</p>
<p>After pondering over this for the past few years (and even subscribing to MobileMe to provide support for all those users who use my iPhone Web Feeds app) it was time to get an email-address which I can be certain of will follow me through the rest of my life.</p>
<p>Once I had the domain I thought about the same thing with my personal blog, previously hosted at valveblog.com. Again, my personal blog was tied to a company that at some point in the future I might not be working for anymore. ValveBlog started out as a co-hosted blog run my me and a few colleagues, but it clearly became apparent that I was the only one doing all the writing, so it sort of just became my personal blog over the matter of a few years.</p>
<p>So yeah, brand new, risen from the ashes of ValveBlog (a design that was way too old anyways) I present you with this mash-up of blog, tweets, mobile photos, weather info and delicious links.</p>
<p>It&#8217;s still very rough around the edges, but should get better every now and then when I have the time to play. And oh, if some Art Director from Valve would like to help me out with the background for example, I&#8217;d greatly appreciate the help.</p>]]></content:encoded>
			<wfw:commentRss>http://artman.fi/blog/2009/09/a-new-beginning/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Hahaah! Google hijacks IE</title>
		<link>http://artman.fi/blog/2009/09/hahaah-google-hijacks-ie/</link>
		<comments>http://artman.fi/blog/2009/09/hahaah-google-hijacks-ie/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 19:20:21 +0000</pubDate>
		<dc:creator>artman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://artman.fi/blog/2009/09/24/hahaah-google-hijacks-ie/</guid>
		<description><![CDATA[This is a new one, but it totally makes sense. Google just released Chrome Frame, a plugin for IE (6 and up) that essentially lets users hijack IE and replace it&#8217;s sluggish, HTML5-lacking rendering engine with Chrome&#8217;s rendering engine. You&#8217;re still using IE&#8217;s shell, but everything is rendered using Chrome. JavaScript performance is tenfold and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.appleinsider.com/articles/09/09/24/google_sneaks_webkit_html_5_support_into_internet_explorer.html">This is a new one</a>, but it totally makes sense. Google just released <a href="http://code.google.com/chrome/chromeframe/">Chrome Frame</a>, a plugin for IE (6 and up) that essentially lets users hijack IE and replace it&#8217;s sluggish, HTML5-lacking rendering engine with Chrome&#8217;s rendering engine. You&#8217;re still using IE&#8217;s shell, but everything is rendered using Chrome. JavaScript performance is tenfold and HTML5 stuff works beautifully.</p>
<p>Now even corporations who have policies against switching from IE can maybe think about upgrading to a modern browser.</p>
<p>I just wonder what the User-Agent is send with each HTTP-request send from this hijacked browser&#8230;</p>]]></content:encoded>
			<wfw:commentRss>http://artman.fi/blog/2009/09/hahaah-google-hijacks-ie/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Web application URI Schemes</title>
		<link>http://artman.fi/blog/2009/07/web-application-uri-schemes/</link>
		<comments>http://artman.fi/blog/2009/07/web-application-uri-schemes/#comments</comments>
		<pubDate>Sat, 25 Jul 2009 18:52:11 +0000</pubDate>
		<dc:creator>artman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ria]]></category>
		<category><![CDATA[uri]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://artman.fi/blog/2009/07/25/web-application-uri-schemes/</guid>
		<description><![CDATA[Operating systems allow applications register a URI Scheme and associate that with a specific application. When a user clicks a link with that scheme the associated application is opened to process the request. For example, the mailto-scheme opens your default email application, the skype-scheme opens up skype and calls the person or number provided in [...]]]></description>
			<content:encoded><![CDATA[<p>Operating systems allow applications register a URI Scheme and associate that with a specific application. When a user clicks a link with that scheme the associated application is opened to process the request. For example, the mailto-scheme opens your default email application, the skype-scheme opens up skype and calls the person or number provided in the link.</p>
<div>It hit me today that what the web needs are web application specific URI Schemes. Take twitter for example. There are a number of &#8220;retweet&#8221;-buttons appearing in blogs, allowing users to share a interesting blog post through twitter. That&#8217;s all good, but what if I don&#8217;t use Twitter.com to post my tweets? What if I want to use TwitHive or PeopBrowsr to do all of my tweets? Currently we&#8217;re stuck with what the blogs owner defined as the URL for the retweet-button.</div>
<div>Or what if my primary mail is web-based? Clicking on a mailto: -link will still open up by default email program on my desktop which is absolutely useless, as I don&#8217;t have an account created there.</div>
<div>So what we need is the ability to asociate a application URI Scheme with a specific web application in addition to a desktop application. Simplified it could work something like this:</div>
<div>I load up GMail. My browser recognises that the page loaded up contains metadata that tells that it can handle the mailto: URI Scheme. Somewhere in the browsers chrome a small button appears notifying me that the mailto: &#8211; URI Scheme is currently not bound the GMail, but to a desktop application. I can click that button and after a confirmation my browser will now load up all mailto: links with a URL provided by GMail.</div>
<div>But this is merely the beginning! What about associating file types with web applications? Everybody&#8217;s familiar with the fact that double-clicking a .doc &#8211; file will load up Word. It would again be quiet easy to associate file types with web applications. What if you&#8217;d like to use a web-based image editing application, say <a href="http://www.sumopaint.com">SUMO</a>, <a href="http://www.picnik.com/">Picnik</a> or <a href="http://www.aviary.com">Aviary</a>? Just log into any of these apps, and let your browser associate jpeg&#8217;s png&#8217;s and gifs with that specific application. Double-clicking any image file will load it up in your preferred web app.</div>
<div>Now that would make web apps first-class citizens. Honk if you&#8217;d like to see this happening!</div>]]></content:encoded>
			<wfw:commentRss>http://artman.fi/blog/2009/07/web-application-uri-schemes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>AS3 sorting algorithm faster than native sorting</title>
		<link>http://artman.fi/blog/2009/06/as3-sorting-algorithm-faster-than-native-sorting/</link>
		<comments>http://artman.fi/blog/2009/06/as3-sorting-algorithm-faster-than-native-sorting/#comments</comments>
		<pubDate>Sun, 14 Jun 2009 19:24:23 +0000</pubDate>
		<dc:creator>artman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[algorithm]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[sorting]]></category>

		<guid isPermaLink="false">http://artman.fi/blog/2009/06/14/as3-sorting-algorithm-faster-than-native-sorting/</guid>
		<description><![CDATA[There have been a number of people blogging about creating AS3 sorting algorithms. Most have come to the conclusion that it&#8217;s not possible to create a faster sorting algorithm than the native one provided for Vectors. And who can blame them? It seems very unlikely that the Flash Player&#8217;s native algorithm would be slower than [...]]]></description>
			<content:encoded><![CDATA[<p>There have been a number of people blogging about creating AS3 sorting algorithms. Most have come to the conclusion that it&#8217;s not possible to create a faster sorting algorithm than the native one provided for Vectors. And who can blame them? It seems very unlikely that the Flash Player&#8217;s native algorithm would be slower than any interpreted AS3 algorithm.</p>
<p>Well, it turns out everybody was wrong, and sorting with an AS3 algorithm is indeed almost twice as fast as it&#8217;s native counterpart!</p>
<p>Consider the following code:</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;height:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">package</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #003366; font-weight: bold;">import</span> flash.<span style="color: #660066;">display</span>.<span style="color: #660066;">Sprite</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #003366; font-weight: bold;">import</span> flash.<span style="color: #660066;">events</span>.<span style="color: #660066;">Event</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #003366; font-weight: bold;">import</span> flash.<span style="color: #660066;">utils</span>.<span style="color: #660066;">getTimer</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; <span style="color: #003366; font-weight: bold;">public</span> <span style="color: #003366; font-weight: bold;">class</span> Sorting <span style="color: #003366; font-weight: bold;">extends</span> Sprite <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">public</span> <span style="color: #003366; font-weight: bold;">function</span> Sorting<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; addEventListener<span style="color: #009900;">&#40;</span>Event.<span style="color: #660066;">ENTER_FRAME</span><span style="color: #339933;">,</span> loop<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">private</span> <span style="color: #003366; font-weight: bold;">function</span> loop<span style="color: #009900;">&#40;</span>e<span style="color: #339933;">:</span>Event<span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #000066; font-weight: bold;">void</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> data<span style="color: #339933;">:</span>Vector.<span style="color: #339933;">&lt;</span>Number<span style="color: #339933;">&gt;</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Vector.<span style="color: #339933;">&lt;</span>Number<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i<span style="color: #339933;">:</span>int <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span><span style="color: #CC0000;">10000</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; data.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>Math.<span style="color: #660066;">random</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span>10000<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> data2<span style="color: #339933;">:</span>Vector.<span style="color: #339933;">&lt;</span>Number<span style="color: #339933;">&gt;</span> <span style="color: #339933;">=</span> data.<span style="color: #660066;">concat</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> t<span style="color: #339933;">:</span>Number <span style="color: #339933;">=</span> getTimer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; data.<span style="color: #660066;">sort</span><span style="color: #009900;">&#40;</span>sf<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; trace<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Native sort&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span>getTimer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-</span>t<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; t <span style="color: #339933;">=</span> getTimer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; data.<span style="color: #660066;">sort</span><span style="color: #009900;">&#40;</span>sf<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; trace<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Native sort on ordered elements&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span>getTimer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-</span>t<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; t <span style="color: #339933;">=</span> getTimer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; shellSort<span style="color: #009900;">&#40;</span>data2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; trace<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;AS3 Shell sort&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span>getTimer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-</span>t<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; t <span style="color: #339933;">=</span> getTimer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; shellSort<span style="color: #009900;">&#40;</span>data2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; trace<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;AS3 Shell sort on ordered elements&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span>getTimer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-</span>t<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; final <span style="color: #003366; font-weight: bold;">private</span> <span style="color: #003366; font-weight: bold;">function</span> sf<span style="color: #009900;">&#40;</span>a<span style="color: #339933;">:</span>Number<span style="color: #339933;">,</span> b<span style="color: #339933;">:</span>Number<span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span>int <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #009900;">&#40;</span>a<span style="color: #339933;">==</span>b <span style="color: #339933;">?</span> 0 <span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span>a <span style="color: #339933;">&lt;</span> b<span style="color: #009900;">&#41;</span> <span style="color: #339933;">?</span> <span style="color: #339933;">-</span>1 <span style="color: #339933;">:</span> 1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; final <span style="color: #003366; font-weight: bold;">private</span> <span style="color: #003366; font-weight: bold;">function</span> shellSort<span style="color: #009900;">&#40;</span>data<span style="color: #339933;">:</span>Vector.<span style="color: #339933;">&lt;</span>Number<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span><span style="color: #000066; font-weight: bold;">void</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> n<span style="color: #339933;">:</span>int <span style="color: #339933;">=</span> data.<span style="color: #660066;">length</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> inc<span style="color: #339933;">:</span>int <span style="color: #339933;">=</span> int<span style="color: #009900;">&#40;</span>n<span style="color: #339933;">/</span>2 <span style="color: #339933;">+</span> 0.5<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">while</span><span style="color: #009900;">&#40;</span>inc<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i<span style="color: #339933;">:</span>int<span style="color: #339933;">=</span>inc<span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>n<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> temp<span style="color: #339933;">:</span>Number <span style="color: #339933;">=</span> data<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> j<span style="color: #339933;">:</span>int <span style="color: #339933;">=</span> i<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">while</span><span style="color: #009900;">&#40;</span>j <span style="color: #339933;">&gt;=</span> inc <span style="color: #339933;">&amp;&amp;</span> data<span style="color: #009900;">&#91;</span>int<span style="color: #009900;">&#40;</span>j <span style="color: #339933;">-</span> inc<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;</span> temp<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; data<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> data<span style="color: #009900;">&#91;</span>int<span style="color: #009900;">&#40;</span>j <span style="color: #339933;">-</span> inc<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; j <span style="color: #339933;">=</span> int<span style="color: #009900;">&#40;</span>j <span style="color: #339933;">-</span> inc<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; data<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> temp<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; inc <span style="color: #339933;">=</span> int<span style="color: #009900;">&#40;</span>inc <span style="color: #339933;">/</span> 2.2 <span style="color: #339933;">+</span> 0.5<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span> &nbsp; &nbsp;<br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>The class will simply run two native sorts to test the performance on a totally random unordered and ordered Vector.&lt;Number&gt; and then run two sorts on the same data with a pure AS3 implementation of <a href="http://en.wikipedia.org/wiki/Shell_sort">Shell Sort</a>.</p>
<p>Shell sort has a good worst case resolve speed and works quiet well even when the origin data is already sorted or almost sorted.</p>
<h3>The results</h3>
<p>On my iMac native sort on the Vector with 10.000 Numbers took an average of <strong>50 milliseconds</strong>. When sorting the already sorted Vector again, it took an average of <strong>38</strong><strong> milliseconds</strong>.</p>
<p>The AS3 algorithm took an average of <strong>31 milliseconds </strong>to sort the random Vector and only <strong>15 milliseconds</strong> to sort the sorted Vector. (<strong>Update:</strong> in debug mode!)</p>
<p>In real life where Vectors that need to be sorted are usually not totally random, you&#8217;ll get a two-fold increase in sorting speed compared to the native algorithm.</p>
<p>Some things to consider, though: Shell sorting in this example gives you a head start over the native sorting algorithm that the data to be sorted are primitives. If you wanted to sort Objects (typed objects of course) based on one of their properties shellSort would no longer outperform Flash Player&#8217;s native sort, as the speed is eaten up by those numerous object property look-ups. However even then it comes very close and in programs that often sort Vectors with objects that are already almost in the right order, you&#8217;ll beat the native sorter by 10-30%.</p>
<p>But there&#8217;s one great type of project where speeding up sorting of Numerical Vectors will increase application performance greatly and that&#8217;s 3D. I started to dig into these algorithms after my profiler told me that 25% of all of my CPU time was going into sorting 3D polygons. Only the drawing operation was slower, but not by much.</p>
<p>P.S. If you want even better performance, don&#8217;t just rely on a single sorting algorithm. QuickSort is 20 times faster than Shell Sort if the Vector is already sorted, but absolutely freaking slow if the Vector sorting order is random. In 3D scenes it might be a good idea to switch between these, using Shell sort for your initial render, the user quick sort if your model rotates only slightly and thus only a few poly&#8217;s are out of place.</p>
<p><strong>Update:</strong> Erik correctly pointed out that I should test the sorting algorithm in the release player instead of the debug player in debug mode, as this might affect results. And indeed it did. It made Shell sorting became much faster. A vector with 100.000 random Numbers took:</p>
<p>Native sort: <strong>338 ms</strong></p>
<p>Native sort on ordered Vector: <strong>245 ms</strong></p>
<p>AS3 Shell sort: <strong>98 ms</strong></p>
<p>AS3 Shell sort on ordered Vector: <strong>49 ms</strong></p>
<p>Who would have thought that interpreted code can do the job 3-5 times more quickly than a native call.</p>
<p><strong>Update</strong>: I forgot to mention the license of the source code. Consider it Public Domain.</p>
<p><strong>Update 2</strong>: Doh. I ported the code too quickly. inc should have been rounded, not floored. Updated the code to work properly.</p>]]></content:encoded>
			<wfw:commentRss>http://artman.fi/blog/2009/06/as3-sorting-algorithm-faster-than-native-sorting/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Flash Builder 4 and Catalyst in public beta</title>
		<link>http://artman.fi/blog/2009/06/flash-builder-4-and-catalyst-in-public-beta/</link>
		<comments>http://artman.fi/blog/2009/06/flash-builder-4-and-catalyst-in-public-beta/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 05:09:57 +0000</pubDate>
		<dc:creator>artman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[flex]]></category>

		<guid isPermaLink="false">http://artman.fi/blog/2009/06/01/flash-builder-4-and-catalyst-in-public-beta/</guid>
		<description><![CDATA[Get it while it&#8217;s hot.]]></description>
			<content:encoded><![CDATA[<p><a href="http://labs.adobe.com">Get it</a> while it&#8217;s hot.</p>]]></content:encoded>
			<wfw:commentRss>http://artman.fi/blog/2009/06/flash-builder-4-and-catalyst-in-public-beta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building MMOG&#8217;s for the Flash Platform: Tooling</title>
		<link>http://artman.fi/blog/2009/02/building-mmogs-for-the-flash-platform-tooling/</link>
		<comments>http://artman.fi/blog/2009/02/building-mmogs-for-the-flash-platform-tooling/#comments</comments>
		<pubDate>Sat, 21 Feb 2009 18:28:07 +0000</pubDate>
		<dc:creator>artman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[mmog]]></category>

		<guid isPermaLink="false">http://artman.fi/blog/?p=176</guid>
		<description><![CDATA[We&#8217;ve just released the teaser site for our first game built with the TrunkTech platform at http://www.eco-rangers.com. While the site was put up rather quickly and doesn&#8217;t include any multiplayer action (nor will it in untill the full game is launched this summer), it was a really important milestone and acid test for the TrunkTech [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve just released the teaser site for our first game built with the TrunkTech platform at <a href="http://www.eco-rangers.com">http://www.eco-rangers.com</a>. While the site was put up rather quickly and doesn&#8217;t include any multiplayer action (nor will it in untill the full game is launched this summer), it was a really important milestone and acid test for the TrunkTech technology. All the features in the first tease game &#8211; Deep Sea Xpedition &#8211; utilize the TrunkTech platform and give you a hint of what&#8217;s going to be possible with the platform. Although it&#8217;s not multiplayer, we&#8217;re still utilizing all aspects of the our technology stack: The first room you&#8217;re entering is actually driven by server-side logic written in Mamboo (AS3 on the Server) and all map levels utilize our MapEngine. User data and high-scores use data synchronization and avatars are rendered with our 3D rendering pipeline.</p>
<div>But most importantly, and the subject of todays post is the fact that the game was mostly built by game designers without any programming skills.</div>
<div>I&#8217;ve talked before about my</div>]]></content:encoded>
			<wfw:commentRss>http://artman.fi/blog/2009/02/building-mmogs-for-the-flash-platform-tooling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building MMOG&#8217;s for the Flash Platform: Metaprogramming</title>
		<link>http://artman.fi/blog/2009/01/building-mmogs-for-the-flash-platform-metaprogramming/</link>
		<comments>http://artman.fi/blog/2009/01/building-mmogs-for-the-flash-platform-metaprogramming/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 20:03:13 +0000</pubDate>
		<dc:creator>artman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[mmog]]></category>

		<guid isPermaLink="false">http://artman.fi/blog/2009/01/27/building-mmogs-for-the-flash-platform-metaprogramming/</guid>
		<description><![CDATA[Previous posts in this series:
Building MMOG&#8217;s for the Flash Platform: Intro

Straight from the start of our MMOG Platform project we knew we wanted to create a technology which is better than anything previously available (or unavailable in the case of proprietary, closed platforms). Quite big words, so we needed a big idea.
We didn&#8217;t start the [...]]]></description>
			<content:encoded><![CDATA[<p>Previous posts in this series:</p>
<div><a href="http://www.valveblog.com/2008/12/building-mmogs-for-the-flash-player-intro.html">Building MMOG&#8217;s for the Flash Platform: Intro</a></div>
<div><a style="float: right;" href="http://artman.typepad.com/.a/6a00d8341de6a153ef010536fbaf45970c-pi"><img class="at-xid-6a00d8341de6a153ef010536fbaf45970c" style="margin: 0px 0px 5px 5px;" title="Asteroids" src="http://artman.typepad.com/.a/6a00d8341de6a153ef010536fbaf45970c-800wi" border="0" alt="Asteroids" /></a><br />
Straight from the start of our MMOG Platform project we knew we wanted to create a technology which is better than anything previously available (or unavailable in the case of proprietary, closed platforms). Quite big words, so we needed a big idea.</div>
<div>We didn&#8217;t start the project with a concepting or architectural design phase. Instead we wanted to get coding straight away and try out some of our initial thughts in a working example and build out the technology stack from there. So we decided to start with a simple game which would still enable to test most of the critical aspects of our technology: <a href="http://www.springfrog.com/games/asteroids/">Asteroids</a>.</div>
<div>Although TrunkTech (the code-name for our technology platform stack) is designed to run MMOG&#8217;s, we don&#8217;t want to limit what kind of games you can write with it. While most people think about online MMOG&#8217;s being isometric, tile-based, slow-paced games where the emphasis is in moving to a certain tile and chatting, we did not want to make that assumption. We also wanted TrunkTech to be able to deliver realtime, multiplayer action-games as part of the virtual world, so Asteroids was a great playground. You have free-moving ships, fast-paced action, network latency to take into account, a world that has to be synronized  across clients and server-side game logic.</div>
<div>After creating the single player game it took us about 30 minutes to get multiple players connect to the game space, have the space synchronize itself across all the clients with everyone swooping around without any noticeable problems from lag. Pretty sweet.</div>
<div>Eventually we didn&#8217;t finish the game as we got too excited about what we had just unleashed and got on to create the rest of the technology stack.</div>
<h3>Client synchronization and metaprogramming</h3>
<div>We&#8217;ve been programming the client-server-side solution for a few months now and in retrospect must say that the most important ideas that we came up &#8211; which enable us to create multiplayer games in a fraction of the time it would usually take &#8211; were automated synchronization and metaprogramming.</div>
<div>Without getting into the boring details, our synchronization stack works essentially this:</div>
<div>When a client connects to a game instance (essentially a script written in AS3) the TrunkTech client and server start talking without imposing any work on the actually developer of the game or it&#8217;s objects. The server synchronize the game state with the client using our custom-developed, AMF-based protocol to get the client up to speed on what&#8217;s happening inside the game instance. For example, a number of other players might have joined earlier and shared their avatar instances (essentially the representation and behavior). The game instance itself might have spawned a number of game objects that need to be shared across all clients (e.g. the actual Asteroids in the Asteroids game), or the state of the game instance itself (time remaining, high-score, &#8230;). All this synchronization happens without any developer intervention. You just join a game instance and automatically receive all the shared objects that are associated with the game.</div>
<div>Even after receiving the first representation of a shared object it&#8217;s properties will of course change overtime. A spaceship might change it&#8217;s course, accelerate, rotate, or a Avatar might say a phrase. But again, the developer does not need to implement anything to make this happen. TrunkTech keeps all shared object in sync by sending messages back and forth and automatically updating properties of these shared objects or calling it&#8217;s methods as requested by the originating client.</div>
<div>Once connected to a game space, the client can choose to add some object to the game instance itself (his avatar or spaceship or whatever). From a developer perspective all that is needed to do is to create a instance from a Class that itself extends the SharedObject definition and tell the game instance to add it as a object that needs to be shared across all clients. The SharedObject base class will take care of all the hard work to keep the objects synchronized. This all happens through object introspection made possible by metaprogramming.</div>
<div>Whenever the programmer wants a property of an object to be synchronize he adds some metadata to the property to describe the type of synchronization necessary to keep all clients up to date an be able to simulate the behavior of the object perfectly. Synchronization might happen at certain intervals or whenever the property or state of the object changes.</div>
<div>In the ship class of our little Asteroids try-out, all we really needed to do is define metadata for a few properties to get that object synchronized correctly to all clients and thus convert a single-player game to multiplayer. Whenever the state of the controls change (an Vector containing the down-state of the arrow keys), these get synchronized. The metadata for the control-property states that whenever it&#8217;s state is synchronized, the location and speed of the ship should be synchronized as well. That&#8217;s really everything you need to know to simulate the movements of one ship across multiple clients.</div>
<div>The server is of course aware of all shared objects across the game instance, including all of their properties and can even intervene and change them at will, essentially taking control of a users objects. When a new client joins the game instance in the middle of the gameplay, the server has all the necessary information to send all the shared objects to the arriving client at get them up to speed.</div>
<div>
<h3>Take away</h3>
<p><span>Metaprogramming is utterly cool and provides you with the tools to create a system which magically do complex tasks on a complex set of objects but let&#8217;s you preserve the speed at which AS3 operates by not using dynamic objects.</span></div>
<div>For MMOG platforms, where you don&#8217;t want to restrict the imagination of the developer actually building out a product it&#8217;s a fantastic tool which let&#8217;s the developer write cleaner and meaner code in a fraction of the time otherwise required by taking all the hard stuff of client synchronization and dealing with it &#8220;in the background&#8221;.</div>
<div>Obviously I need to show you some code examples for all of this to make sense, but that&#8217;s a topic for some future writing.</div>]]></content:encoded>
			<wfw:commentRss>http://artman.fi/blog/2009/01/building-mmogs-for-the-flash-platform-metaprogramming/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Change&#8230; oh yes&#8230;</title>
		<link>http://artman.fi/blog/2009/01/change-oh-yes/</link>
		<comments>http://artman.fi/blog/2009/01/change-oh-yes/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 17:14:56 +0000</pubDate>
		<dc:creator>artman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Stuff happens]]></category>

		<guid isPermaLink="false">http://artman.fi/blog/2009/01/20/change-oh-yes/</guid>
		<description><![CDATA[It&#39;s odd that I feel this happy for something that does only indirectly affect me. Still I feel that the whole world has become a better place as Barack takes his place as leader of &#8211; what can once again become &#8211; the free world.

Congratulations to everyone in the U.S. I have absolutely no doubt [...]]]></description>
			<content:encoded><![CDATA[<p>It&#39;s odd that I feel this happy for something that does only indirectly affect me. Still I feel that the whole world has become a better place as Barack takes his place as leader of &#8211; what can once again become &#8211; the free world.</p>
<p>
<div>Congratulations to everyone in the U.S. I have absolutely no doubt that the next years will be better than the last.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://artman.fi/blog/2009/01/change-oh-yes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spam&#8230; Is it still out there?</title>
		<link>http://artman.fi/blog/2009/01/spam-is-it-still-out-there/</link>
		<comments>http://artman.fi/blog/2009/01/spam-is-it-still-out-there/#comments</comments>
		<pubDate>Wed, 14 Jan 2009 15:55:37 +0000</pubDate>
		<dc:creator>artman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://artman.fi/blog/2009/01/14/spam-is-it-still-out-there/</guid>
		<description><![CDATA[Thanks to good spam filters, I&#8217;ve received very little unwanted emails during the last few years. So little indeed that I didn&#8217;t even remember that spam is still a huge problem. Well, our spam filter&#8217;s license expired and it took a few days to get it back online. My email was almost rendered unusable with [...]]]></description>
			<content:encoded><![CDATA[<p>Thanks to good spam filters, I&#8217;ve received very little unwanted emails during the last few years. So little indeed that I didn&#8217;t even remember that spam is still a huge problem. Well, our spam filter&#8217;s license expired and it took a few days to get it back online. My email was almost rendered unusable with the <span style="font-weight: bold;">HUGE</span> amount of spam arriving in just 48 hours.</p>
<div>So to anyone behind a filter who&#8217;s wondering whether spam is still a big problem&#8230; Yes, very much so.</div>]]></content:encoded>
			<wfw:commentRss>http://artman.fi/blog/2009/01/spam-is-it-still-out-there/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
