﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>blog.mattiasnorell.com &#187; ActionScript</title>
	<atom:link href="http://blog.mattiasnorell.com/category/actionscript/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.mattiasnorell.com</link>
	<description>Otukt i otakt</description>
	<lastBuildDate>Tue, 07 Feb 2012 22:58:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Find out if a loaded swf is AS2 or AS3</title>
		<link>http://blog.mattiasnorell.com/2010/12/22/find-out-if-a-loaded-swf-is-as2-or-as3/</link>
		<comments>http://blog.mattiasnorell.com/2010/12/22/find-out-if-a-loaded-swf-is-as2-or-as3/#comments</comments>
		<pubDate>Wed, 22 Dec 2010 13:16:48 +0000</pubDate>
		<dc:creator>Mattias</dc:creator>
				<category><![CDATA[ActionScript]]></category>

		<guid isPermaLink="false">http://blog.mattiasnorell.com/?p=1931</guid>
		<description><![CDATA[Sometimes you build a swf that will load other swfs at runtime. Most of the time they are managed from a cms and the editor have no idea what so over what actionscript is. To them a swf is a &#8230; <a href="http://blog.mattiasnorell.com/2010/12/22/find-out-if-a-loaded-swf-is-as2-or-as3/">Läs mer <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Sometimes you build a swf that will load other swfs at runtime. Most of the time they are managed from a cms and the editor have no idea what so over what actionscript is. To them a swf is a swf. As a developer you need to build some kind of failsafe for this since if you try to run as3-code on a as2-swf everything will go straight to hell.</p>
<p>A very simple failsafe is to check if the swf is as2 or 3 by using the <a href="http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/LoaderInfo.html#actionScriptVersion" target="_blank" onclick="pageTracker._trackPageview('/outgoing/livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/LoaderInfo.html_actionScriptVersion?referer=');">actionScriptVersion</a> method in <a href="http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/Loader.html#contentLoaderInfo" target="_blank" onclick="pageTracker._trackPageview('/outgoing/livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/Loader.html_contentLoaderInfo?referer=');">contentLoaderInfo</a> which you find in the <a href="http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/Loader.html" target="_blank" onclick="pageTracker._trackPageview('/outgoing/livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/Loader.html?referer=');">Loader</a>-class. This will return either &#8221;2&#8243; for as2 swfs or &#8221;3&#8243; for as3 swfs. Piece of cake.</p>
<pre class="brush: actionscript3; font-size: 50%">var asVersion:int = loader.contentLoaderInfo.actionScriptVersion;
if(asVersion &gt; 2){
     // Stuff for as3
}else{
     // Stuff for as2
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattiasnorell.com/2010/12/22/find-out-if-a-loaded-swf-is-as2-or-as3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fake sinewave</title>
		<link>http://blog.mattiasnorell.com/2010/11/03/fake-sinewave/</link>
		<comments>http://blog.mattiasnorell.com/2010/11/03/fake-sinewave/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 18:53:50 +0000</pubDate>
		<dc:creator>Mattias</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Lab]]></category>
		<category><![CDATA[sinewave]]></category>

		<guid isPermaLink="false">http://blog.mattiasnorell.com/?p=1561</guid>
		<description><![CDATA[First of all, this is just an experiment. A very simple, yet useful experiment. Sometimes you want to create sinewaves but don´t want to go thru all that math for some reason. So, why not use something built into Flash? &#8230; <a href="http://blog.mattiasnorell.com/2010/11/03/fake-sinewave/">Läs mer <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>First of all, this is just an experiment. A very simple, yet useful experiment. Sometimes you want to create sinewaves but don´t want to go thru all that math for some reason. So, why not use something built into Flash? Why not use the graphic-class and the curveTo-method?</p>
<p>I am the first one to say that this method is far from perfect, it could use some more correct math and so on, but at the moment I´m sitting on a train, bored to tears, and I just wanted something to do. So, let me introduce, the fake sinewave.﻿ It might be useful to someone, somewhere, somehow.</p>
<p>
<object width="640" height="480">
<param name="movie" value="http://blog.mattiasnorell.com/wp-content/uploads/2010/11/FakeSineWave.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="window"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#FFFFFF"></param>
<param name="allowScriptAccess" value="always"></param>
<embed type="application/x-shockwave-flash" width="640" height="480" src="http://blog.mattiasnorell.com/wp-content/uploads/2010/11/FakeSineWave.swf" quality="high" bgcolor="#FFFFFF" wmode="window" menu="false" ></embed>
</object>
</p>
<p><em>The components I use for the sliders and the checkbox are part of Bit-101´s excellent <a href="http://www.bit-101.com/blog/?p=1126" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.bit-101.com/blog/?p=1126&amp;referer=');">MinimalComps-component</a>.</em></p>
<pre class="brush: actionscript3; font-size: 50%">package {
	import flash.events.Event;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;

	public class FakeSineWave extends Sprite {

		private var sineHolder : Sprite;
		private var max : Number = 30;
		private var min : Number = max - (max * 2);
		private var points : Number = 30;
		private var size : Number = 640;
		private var pointDistance : int = size / points;
		private var sineColor:uint = 0x000000;
		private var fillSine:Boolean = false;

		public function FakeSineWave() {
			this.addEventListener(Event.ADDED_TO_STAGE, init);
		}

		private function init(e : Event = null) : void {
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;

			sineHolder = new Sprite();
			sineHolder.y = 200;
			addChild(sineHolder);

			drawSine(fillSine);
		}

		private function drawSine(fill:Boolean = false) : void {

			sineHolder.graphics.clear();
			sineHolder.graphics.lineStyle(5, sineColor);

			if(fill){
				sineHolder.graphics.beginFill(sineColor,1);
			}

			for (var i : int = 0;i &lt; points;++i) {
				var anchorX : Number = pointDistance * (i + 1);
				var anchorY : Number = 0;
				var controlX : Number = (pointDistance * (i + 1)) - (pointDistance / 2);
				var controlY : Number = (i % 2 == 0) ? max : min;

				sineHolder.graphics.curveTo(controlX, controlY, anchorX, anchorY);
			}

			if(fill){
				sineHolder.graphics.lineTo(size,stage.stageHeight);
				sineHolder.graphics.lineTo(0,stage.stageHeight);
			}

			sineHolder.graphics.endFill();
		}
	}
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattiasnorell.com/2010/11/03/fake-sinewave/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Inverted Mask &#8211; The latest and greatest. A sneak peek.</title>
		<link>http://blog.mattiasnorell.com/2010/11/02/inverted-mask-the-latest-and-greatest-a-sneak-peek/</link>
		<comments>http://blog.mattiasnorell.com/2010/11/02/inverted-mask-the-latest-and-greatest-a-sneak-peek/#comments</comments>
		<pubDate>Mon, 01 Nov 2010 23:36:40 +0000</pubDate>
		<dc:creator>Mattias</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[inverted mask]]></category>

		<guid isPermaLink="false">http://blog.mattiasnorell.com/?p=1536</guid>
		<description><![CDATA[Ok, the latest and greatest might be pushing it a bit. But I needed to update my inverted mask AS3-lib so that it supported animated masks, moving backgrounds et cetera. The code isn´t really ready for prime time use quite &#8230; <a href="http://blog.mattiasnorell.com/2010/11/02/inverted-mask-the-latest-and-greatest-a-sneak-peek/">Läs mer <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ok, the latest and greatest might be pushing it a bit. But I needed to update my inverted mask AS3-lib so that it supported animated masks, moving backgrounds et cetera. The code isn´t really ready for prime time use quite yet but this is a little demo of the new and improved inverted mask-class. The demo below use your webcam as one source and a jpeg as the second one. To swap between the inverted and normal mask, click anywhere inside the swf.</p>
<p>Maby not so fun fact. The picture, depicting the Brighton pier, was shot during Flash on the beach´10.</p>
<p>
<object width="640" height="480">
<param name="movie" value="http://blog.mattiasnorell.com/wp-content/uploads/2010/11/InvertedWebcam.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="window"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#FFFFFF"></param>
<param name="allowScriptAccess" value="always"></param>
<embed type="application/x-shockwave-flash" width="640" height="480" src="http://blog.mattiasnorell.com/wp-content/uploads/2010/11/InvertedWebcam.swf" quality="high" bgcolor="#FFFFFF" wmode="window" menu="false" ></embed>
</object>
</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattiasnorell.com/2010/11/02/inverted-mask-the-latest-and-greatest-a-sneak-peek/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hur känns det att HTML5 kommer ta ditt jobb?</title>
		<link>http://blog.mattiasnorell.com/2010/10/26/hur-kanns-det-att-html5-kommer-ta-ditt-jobb/</link>
		<comments>http://blog.mattiasnorell.com/2010/10/26/hur-kanns-det-att-html5-kommer-ta-ditt-jobb/#comments</comments>
		<pubDate>Tue, 26 Oct 2010 17:37:54 +0000</pubDate>
		<dc:creator>Mattias</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://blog.mattiasnorell.com/?p=1474</guid>
		<description><![CDATA[Efter som jag jobbar som flashutvecklare får jag ofta frågan ”Hur känns det att jobba med något som kommer försvinna?”. Även om jag vet vad de syftar på frågar jag ofta vad de menar. ”Ja men du vet, HTML5 kommer &#8230; <a href="http://blog.mattiasnorell.com/2010/10/26/hur-kanns-det-att-html5-kommer-ta-ditt-jobb/">Läs mer <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Efter som jag jobbar som flashutvecklare får jag ofta frågan ”Hur känns det att jobba med något som kommer försvinna?”. Även om jag vet vad de syftar på frågar jag ofta vad de menar. ”Ja men du vet, HTML5 kommer ju nu.” Här brukar jag välja att svar på tre olika sätt beroende på vem som frågar.</p>
<p>Ett: Småskratta och säga att den dag HTML5 faktiskt går att använda så kanske det kommer hända.<br />
Två: Ifrågasätta deras kunskap om både HTML5 och Flash följt av en kapning vid fotknölarna<br />
Tre: Den långa varianten där jag lägger fram varför jag tycker som jag gör.</p>
<p>Och det är den jag tänker köra nu.</p>
<p>För det första, HTML5 är bra. Jag tycker det är en grymt spännande plattform och HTML kan göra saker som Flash inte ens borde försöka sig på. De som försöker och framförallt tror att de kan bygga informationssiter i Flash borde skämmas, bli av med jobbet, alternativt säga upp sig, för att gå om Webbkunskap A.</p>
<p>Problemet jag ser med HTML5 är att det förlitar sig för mycket på ett antikt kodspråk, JavaScript. Det är både långsamt och omständligt att arbeta med. För att HTML5 skall bli en allvarlig utmanare till Flash måste vi ha en ny, snabbare version av JavaScript. Bara att kunna typa variabler vore ett stort steg framåt.</p>
<p>Nu ska jag inte bara sitta här och säga att HTML5 och framförallt JavaScript är långsamt. Webbläsare som Google Chrome börjar få sina JavaScript-motorer att prestera riktigt bra, det är egentligen bara en tidsfråga innan vi kan producera grafik och funktionsintensiva applikationer med HTML5. Men i nuläget är det och faktumet att många sitter på gamla webbläsare (Ja, jag tittar på dig IE6) ett problem.</p>
<h2>”Men Flash fungerar ju inte på iPhone/iPad/iWhatever?”</h2>
<p>Nej, det gör det inte, men då ska man inte heller glömma att det är väldigt få som faktiskt äger och använder en sådan enhet om man jämför med hur många som inte gör det. Att döma ut en teknik enbart på grund av en enhet är väldigt trångsynt och framförallt korkat. Om man vänder på steken går Flash, och då främst Air-applikationer, att köra i datorer, mobiltelefoner, TV-apparater, BluRay-spelare och en mängd tablet-pc’s. Även om den stora marknaden just nu är mobilapplikationer kommer inte detta vara för evigt. Inom en inte allt för avlägsen framtid kommer det handla om applikationer som fungerar över en mängd enheter, oavsett om det är en mobiltelefon, en tv eller en hemdator. Mindre utvecklingstid, större spridning. Ingen förlorar på detta, förutom de företag som låser in utvecklare i sina avtal om hur applikationer får utvecklas och distribueras.</p>
<p>Sedan måste man skilja äpplen och päron. Jag tycker att det mesta av webben faktiskt passar bäst i HTML. Många av de appar som går att ladda ner i Apples AppStore skulle fungera minst lika bra som webbappar och det är här HTML5, CSS3 och JavaScript kommer in i bilden igen. Det går att göra väldigt mycket med HTML5, speciellt om de får ordning på standarden för video- och audio-taggarna. Men det är ungefär här som användningsområdet för HTML5 slutar. Vill vi som utvecklare och kreatörer bygga något som innefattar 3D, ge besökaren större möjligheter till interaktivitet, ljud genererade i realtid eller möjlighet att manipulera bilder, video och ljud så räcker helt enkelt inte HTML till, oavsett version. Gör vi en version av Flashsiten för datorer är det enkelt att känna av om samma site körs på en Android-mobil eller en tablet-pc och där efter anpassa gränssnitten för varje enhet. Det fungerar lite på samma sätt som HTML5 kan välja olika CSS-filer beroende på skärmstorlek och media men med Air kan vi bygga program som inte bara kan hårdvaruaccelereras utan även installeras på väldigt många enheter.</p>
<h2>Men&#8230; Du pratar bara teknik. Jag pratar ju om ditt jobb!</h2>
<p>Jag vet. Och det är lite det jag menar. Jag känner inte att mitt jobb är hotat enbart på grund av HTML5. Jag bryr mig egentligen inte om i vilket språk jag bygger saker och ting. Jag vill bygga saker som de vi idag gör i Flash. Om det visar sig att HTML5 är det bättre alternativet om fem år kommer jag gladeligen byta. Så över tid tror jag absolut att HTML5 kommer döda Flash som webbformat. Men jag tror att den dagen det händer har Flash fått fäste på andra plattformar och på så sätt kommer det inte påverka oss som utvecklare speciellt mycket. Vi kommer fortsätta bygga Flash och angående webben har vi vid det laget lärt oss att göra samma saker vi gör i dag, fast med andra verktyg.</p>
<p>Så, för att sammanfatta, jag tror inte HTML5 kommer döda Flash, där emot bör vi utvecklare inte utesluta HTML5 helt och hållet, för mycket intressant kommer hända på den fronten. Även om det har en väg kvar att gå.</p>
<p>Det är det långa svaret jag brukar ge, tyvärr brukar jag inte alltid hinna till slutet innan den jag pratar med avbryter med &#8221;jaja, jag förstår, du gillar Flash&#8221;. Och ja, jag gillar Flash, men jag gillar att jobba med webben mer. Tekniken jag gör det med är sekundär.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattiasnorell.com/2010/10/26/hur-kanns-det-att-html5-kommer-ta-ditt-jobb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>stage.stageHeight return the wrong value by 100 pixels</title>
		<link>http://blog.mattiasnorell.com/2010/10/13/stage-stageheight-return-the-wrong-value-by-100-pixels/</link>
		<comments>http://blog.mattiasnorell.com/2010/10/13/stage-stageheight-return-the-wrong-value-by-100-pixels/#comments</comments>
		<pubDate>Wed, 13 Oct 2010 09:01:28 +0000</pubDate>
		<dc:creator>Mattias</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[stage.stageHeight]]></category>

		<guid isPermaLink="false">http://blog.mattiasnorell.com/?p=1429</guid>
		<description><![CDATA[I found a rather wierd bug in the Flash CS4 IDE today. When I traced the height of the stage Flash returned the value minus 100 pixels. My stageheight was 288 but Flash told me it was 188. Strange. Very &#8230; <a href="http://blog.mattiasnorell.com/2010/10/13/stage-stageheight-return-the-wrong-value-by-100-pixels/">Läs mer <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I found a rather wierd bug in the Flash CS4 IDE today. When I traced the height of the stage Flash returned the value minus 100 pixels. My stageheight was 288 but Flash told me it was 188. Strange. Very strange indeed.</p>
<p>The thing (and the solution in my case) was that I had the Bandwidth profiler open. Once I closed the profiler Flash returned the correct value. I tried the same thing on a few other FLA:s with the same result so I guess it&#8217;s a bug in the IDE. And I hope it&#8217;s gone in CS5.</p>

<a href='http://blog.mattiasnorell.com/wp-content/uploads/2010/10/flash_bandwidthprofiler_bug_1.jpg' rel='shadowbox[sbalbum-1429];player=img;' title='flash_bandwidthprofiler_bug_1'><img width="150" height="150" src="http://blog.mattiasnorell.com/wp-content/uploads/2010/10/flash_bandwidthprofiler_bug_1-150x150.jpg" class="attachment-thumbnail" alt="flash_bandwidthprofiler_bug_1" title="flash_bandwidthprofiler_bug_1" /></a>
<a href='http://blog.mattiasnorell.com/wp-content/uploads/2010/10/flash_bandwidthprofiler_bug_2.jpg' rel='shadowbox[sbalbum-1429];player=img;' title='flash_bandwidthprofiler_bug_2'><img width="150" height="150" src="http://blog.mattiasnorell.com/wp-content/uploads/2010/10/flash_bandwidthprofiler_bug_2-150x150.jpg" class="attachment-thumbnail" alt="flash_bandwidthprofiler_bug_2" title="flash_bandwidthprofiler_bug_2" /></a>

]]></content:encoded>
			<wfw:commentRss>http://blog.mattiasnorell.com/2010/10/13/stage-stageheight-return-the-wrong-value-by-100-pixels/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>goSquare – Geolocation iPhone app gjord i Flash CS5</title>
		<link>http://blog.mattiasnorell.com/2010/09/24/gosquare-geolocation-iphone-app-gjord-i-flash-cs5/</link>
		<comments>http://blog.mattiasnorell.com/2010/09/24/gosquare-geolocation-iphone-app-gjord-i-flash-cs5/#comments</comments>
		<pubDate>Fri, 24 Sep 2010 13:41:04 +0000</pubDate>
		<dc:creator>Mattias</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[goSquare]]></category>
		<category><![CDATA[packager for iphone]]></category>

		<guid isPermaLink="false">http://blog.mattiasnorell.com/?p=1347</guid>
		<description><![CDATA[goSquare är, som ni kanske listat ut, en rippoff / parodi på GoWalla och FourSquare. I all enkelthet fungerar det så att den utnyttjar iPhonens GPS för att skicka koordinater till en databas. Dessa koordinater skickas även en sväng genom &#8230; <a href="http://blog.mattiasnorell.com/2010/09/24/gosquare-geolocation-iphone-app-gjord-i-flash-cs5/">Läs mer <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<iframe src='http://player.vimeo.com/video/15251194?title=1&amp;byline=1&amp;portrait=1' width='640' height='400' frameborder='0'></iframe>
<p>goSquare är, som ni kanske listat ut, en rippoff / parodi på GoWalla och FourSquare. I all enkelthet fungerar det så att den utnyttjar iPhonens GPS för att skicka koordinater till en databas. Dessa koordinater skickas även en sväng genom Google Maps API för att hämta ut den adress man befinner sig på. Detta returneras som ett JSON-objekt. Den insamlade datan presenterar jag sedan <a href="http://blog.mattiasnorell.com/gosquare/" target="_blank">här</a> i en enkel flashfil byggd med Google Maps API:n.</p>
<p>Från början var det tänk att bygga in Google Maps kartor i appen men tyvärr tillåter inte iPhonen att man laddar in den swc som innehåller API:n, men det löser sig nog när man fått pilla lite mer. Detta är trots allt ett experiment.</p>
<p>Hur som helst, ett första försiktigt steg in i världen av appar kodade med AS3.</p>
<p>Tack för mig.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattiasnorell.com/2010/09/24/gosquare-geolocation-iphone-app-gjord-i-flash-cs5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Your application is attempting to run uncompiled ActionScript</title>
		<link>http://blog.mattiasnorell.com/2010/09/23/your-application-is-attempting-to-run-uncompiled-actionscript/</link>
		<comments>http://blog.mattiasnorell.com/2010/09/23/your-application-is-attempting-to-run-uncompiled-actionscript/#comments</comments>
		<pubDate>Wed, 22 Sep 2010 22:48:13 +0000</pubDate>
		<dc:creator>Mattias</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[packager for iphone]]></category>
		<category><![CDATA[swc]]></category>

		<guid isPermaLink="false">http://blog.mattiasnorell.com/?p=1327</guid>
		<description><![CDATA[I&#8217;ve tried to solve this all night. What I&#8217;m, trying to do is a Google Maps app for my iPhone using Flash CS5&#8242;s &#8221;Packager for iPhone&#8221;. When I run the app inside Flash everything, accept the GPS-stuff, work as expected &#8230; <a href="http://blog.mattiasnorell.com/2010/09/23/your-application-is-attempting-to-run-uncompiled-actionscript/">Läs mer <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><a href="http://blog.mattiasnorell.com/wp-content/uploads/2010/09/packager_for_iphone_uncompiled.jpg" rel="shadowbox[sbpost-1327];player=img;"><img class="size-full wp-image-1328 alignright" title="packager_for_iphone_uncompiled" src="http://blog.mattiasnorell.com/wp-content/uploads/2010/09/packager_for_iphone_uncompiled.jpg" alt="" width="320" height="480" /></a>I&#8217;ve tried to solve this all night. What I&#8217;m, trying to do is a Google Maps app for my iPhone using Flash CS5&#8242;s &#8221;Packager for iPhone&#8221;. When I run the app inside Flash everything, accept the GPS-stuff, work as expected but when I publish it in &#8221;Debug on device&#8221;-mode and install it the message in the picture shows.</p>
<p style="text-align: left;">I&#8217;ve tried to include the swc in every possible way. I&#8217;ve decompile the swc and include the as-files. I&#8217;ve tried pretty much everything I can think of. I can&#8217;t find anything about this on Adobe Developer Connect. And on top of that I&#8217;m tired as hell.</p>
<p style="text-align: left;">So, do you know how to solve this?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattiasnorell.com/2010/09/23/your-application-is-attempting-to-run-uncompiled-actionscript/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PixelBenderBooth</title>
		<link>http://blog.mattiasnorell.com/2010/09/15/pixelbenderbooth/</link>
		<comments>http://blog.mattiasnorell.com/2010/09/15/pixelbenderbooth/#comments</comments>
		<pubDate>Wed, 15 Sep 2010 13:28:33 +0000</pubDate>
		<dc:creator>Mattias</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Lab]]></category>
		<category><![CDATA[pixelbender]]></category>

		<guid isPermaLink="false">http://blog.mattiasnorell.com/?p=1209</guid>
		<description><![CDATA[Even thou I think PixelBender is a really good idea I&#8217;ve never actually tried it. One day i thought to my self &#8221;Hey, that PhotoBooth thing Apple ship with their computers cant be that hard to replicate&#8221;. And an hour &#8230; <a href="http://blog.mattiasnorell.com/2010/09/15/pixelbenderbooth/">Läs mer <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Even thou I think PixelBender is a really good idea I&#8217;ve never actually tried it. One day i thought to my self &#8221;Hey, that PhotoBooth thing Apple ship with their computers cant be that hard to replicate&#8221;. And an hour or two later PixelBenderBooth was born. Press &#8221;space&#8221; to remove effects and you need a webcam.</p>
<p>I &#8221;borrowed&#8221; the PixelBender kernels from <a href="http://www.adobe.com/cfusion/exchange/index.cfm?event=productHome&amp;exc=26&amp;loc=en_us" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.adobe.com/cfusion/exchange/index.cfm?event=productHome_amp_exc=26_amp_loc=en_us&amp;referer=');">PixelBender Exchange</a> over at Adobe.com.</p>
<p><span id="more-1209"></span></p>
<p>
<object width="640" height="480">
<param name="movie" value="http://blog.mattiasnorell.com/wp-content/uploads/2010/09/FlashBooth.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="window"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#FFFFFF"></param>
<param name="allowScriptAccess" value="always"></param>
<embed type="application/x-shockwave-flash" width="640" height="480" src="http://blog.mattiasnorell.com/wp-content/uploads/2010/09/FlashBooth.swf" quality="high" bgcolor="#FFFFFF" wmode="window" menu="false" ></embed>
</object>
</p>
<h2>Sample code</h2>
<p>If you want to try it out for yourself you can copy my sample code below and use it with your own kernels. I wrote this thing in FDT 4 so if you use the Flash IDE you need to change a few things, like [SWF(width=640,height=480,frameRate=30)].</p>
<h3>PhotoBooth.as</h3>
<pre class="brush: actionscript3; font-size: 50%">package {
    import flash.events.MouseEvent;
    import flash.events.KeyboardEvent;
    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.display.BitmapData;
    import flash.display.Bitmap;
    import flash.media.Camera;
    import flash.media.Video;
    import flash.events.Event;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.text.TextField;

    [SWF(width=640,height=480,frameRate=30)]

    public class FlashBooth extends MovieClip {
        public var camfeed : Video = new Video(640, 480);
        private var camFrameRate : int = 15;
        private var camWidth : int = 640;
        private var camHeight : int = 480;
        private var cam : Camera;
        private var cameraBitmap : BitmapData;
        private var bmp : Bitmap;

       // Location of the kernels.
        private var siteUrl:String = "";
        private var filterHolder : Sprite = new Sprite();
        private var pbFilters : Array = [siteUrl+"zoomBlur.pbj", siteUrl+"SmartNormalMap.pbj", siteUrl+"RippleBlocks.pbj"];

        public function FlashBooth():void {
            if (stage)
                init();
            else
                addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e : Event = null):void {
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
            removeEventListener(Event.ADDED_TO_STAGE, init);

            // We start by settings up the camera
            cam = Camera.getCamera();

            // If no camera is found...
            if (!cam) {
                // ...we tell the user that is the case...
                var camError : TextField = new TextField();
                camError.text = "I search'd the internetz and haz not found camera. I haz no luck. *sigh*";
                addChild(camError);
            } else {
                // ...or we move on to set the height, width and framerate.
                cam.setMode(camWidth, camHeight, camFrameRate);

                // Then we tell the video-object to use the camera as its source.
                camfeed.attachCamera(cam);

                // Set the bitmap to match the size of the video.
                cameraBitmap = new BitmapData(camfeed.width, camfeed.height);

                bmp = new Bitmap(cameraBitmap);
                bmp.x = 0;
                bmp.y = 0;
                addChild(bmp);

                // Load all the filters in the pbFilters-array thru a for-loop.
                // All settings are defined in the FilterClass.as as get/setters.
                for(var i : uint = 0;i &lt; pbFilters.length;++i) {
                    var f : FilterClass = new FilterClass();
                    f.url = pbFilters[i];
                    f.source = camfeed;
                    f.framerate = camFrameRate;
                    f.start();
                    f.x = (80 * i) + 10;
                    f.y = 10;

                    // Since we want the "big" picture to use the filter loaded
                    // in the class we tell our swf to listen for when the user
                    // click on the previewimage generated within the filterclass.
                    f.addEventListener(MouseEvent.CLICK, addFilter)
                    filterHolder.addChild(f);
                }

                // Some positioning and graphics stuff.
                filterHolder.x = (stage.stageWidth - filterHolder.width) / 2;
                filterHolder.y = stage.stageHeight - (filterHolder.height + 30);

                filterHolder.graphics.beginFill(0x000000, .5);
                filterHolder.graphics.drawRoundRect(0, 0, filterHolder.width + 20, filterHolder.height + 20, 10);
                filterHolder.graphics.endFill();
                addChild(filterHolder);

                // Set up a listener since we want to remove the filter when the
                // user press the spacebar.
                stage.addEventListener(KeyboardEvent.KEY_DOWN, keyboardInput);

                 // Update the big picture everytime a frame is loaded.
                stage.addEventListener(Event.ENTER_FRAME, updateViewport);
            }
        }

        private function addFilter(e : MouseEvent):void {
            // Fetch the filter from within the filterclass.
            bmp.filters = [e.currentTarget.getFilter()];
        }

        private function updateViewport(e : Event):void {
            // Update the big picture.
            cameraBitmap.lock();
            cameraBitmap.draw(camfeed);
            cameraBitmap.unlock();
        }

        private function keyboardInput(e : KeyboardEvent):void {
            // Detect what key the user pressed and if it is the
            // spacebar (keycode 32) remove the filter.
            if(e.keyCode == 32) {
                bmp.filters = [];
            }
        }
    }
}</pre>
<h3>FilterClass.as</h3>
<pre class="brush: actionscript3; font-size: 50%">package {
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.TimerEvent;
    import flash.net.URLRequest;
    import flash.net.URLLoader;
    import flash.net.URLLoaderDataFormat;
    import flash.display.Shader;
    import flash.filters.ShaderFilter;
    import flash.display.BitmapData;
    import flash.display.Bitmap;
    import flash.media.Video;
    import flash.utils.Timer;

    public class FilterClass extends Sprite {
        private var shader : Shader;
        private var shaderFilter : ShaderFilter;
        private var filterBmp : Bitmap;
        private var filterBmpData : BitmapData;
        private var frameRateTimer : Timer;

        // Get and set-vars
        private var _camFeed : Video;
        private var _filterUrl : String;
        private var _frameRate : int;

        public function FilterClass() {
            // We set useHandCursor and buttonMode to true since we want the
            // class to act as a button.
            this.useHandCursor = true;
            this.buttonMode = true;
        }

        public function start():void {

            // We start to load the PixelBender kernel.
            var urlRequest : URLRequest = new URLRequest(_filterUrl);
            var urlLoader : URLLoader = new URLLoader();

            // We need to sett the LoaderDataFormat to binary since the kernel
            // is a compiled file.
            urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
            urlLoader.addEventListener(Event.COMPLETE, applyFilter);
            urlLoader.load(urlRequest);

            // Set up the bitmap that will act as the preview.
            filterBmpData = new BitmapData(640, 480);
            filterBmp = new Bitmap(filterBmpData);
            filterBmp.width = 64;
            filterBmp.height = 48;
            addChild(filterBmp);
        }

        private function applyFilter(e : Event):void {
            // Always remove listeners you have no use for.
            e.currentTarget.removeEventListener(Event.COMPLETE, applyFilter);

            // Tell the Flash Player that we want to use the loaded data
            // as a filter.
            shader = new Shader(URLLoader(e.target).data);
            shaderFilter = new ShaderFilter(shader);

            // Since we want the to act as a button with graphics updated in
            // realtime we need to set the filters-parameter to the shaderFilter.
            filterBmp.filters = [shaderFilter];

            // We could use Event.ENTER_FRAME, but since we want to control the
            // framerate we use a timer so that the preview bitmap will update
            // when we want and not everytime a new frame is loaded.
            frameRateTimer = new Timer(1000 / _frameRate);
            frameRateTimer.addEventListener(TimerEvent.TIMER, update);
            frameRateTimer.start();
        }

        private function update(e : TimerEvent = null):void {
            // We lock the bitmapdata before we draw and then unlock it.
            // Performance my friends, performance.
            filterBmpData.lock();
            filterBmpData.draw(_camFeed);
            filterBmpData.unlock();
        }

        public function getFilter():ShaderFilter{
            // With this function we can pass the filter to objects outside the class.
            return shaderFilter;
        }

        /* GETTERS AND SETTERS */
        public function set source(val : Video):void {
            _camFeed = val;
        }

        public function set url(val : String):void {
            _filterUrl = val;
        }

        public function set framerate(val : int):void {
            _frameRate = val;
        }
    }
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattiasnorell.com/2010/09/15/pixelbenderbooth/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Playing around with Math.sin() and flash.media.camera</title>
		<link>http://blog.mattiasnorell.com/2010/09/10/playing-around-with-math-sin-and-flash-media-camera/</link>
		<comments>http://blog.mattiasnorell.com/2010/09/10/playing-around-with-math-sin-and-flash-media-camera/#comments</comments>
		<pubDate>Thu, 09 Sep 2010 22:21:19 +0000</pubDate>
		<dc:creator>Mattias</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Lab]]></category>
		<category><![CDATA[Utveckling]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[math]]></category>
		<category><![CDATA[webcam]]></category>

		<guid isPermaLink="false">http://blog.mattiasnorell.com/?p=1177</guid>
		<description><![CDATA[I started out by playing with some mathstuff like this, took a detur through flash.media.Camera and ended up with a fusion of the two. And you need a webcam. Main.as package { import flash.display.Sprite; import flash.events.Event; import net.hires.debug.Stats; import flash.display.BitmapData; &#8230; <a href="http://blog.mattiasnorell.com/2010/09/10/playing-around-with-math-sin-and-flash-media-camera/">Läs mer <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I started out by playing with some mathstuff like <a href="http://blog.mattiasnorell.com/wp-content/uploads/2010/09/sine-rotate.swf" rel="shadowbox[sbpost-1177];width=640;height=385;">this</a>, took a detur through <a href="http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/media/Camera.html" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/media/Camera.html?referer=');">flash.media.Camera</a> and ended up with a fusion of the two. And you need a webcam.</p>
<p><span id="more-1177"></span></p>
<p>
<object width="640" height="400">
<param name="movie" value="http://blog.mattiasnorell.com/wp-content/uploads/2010/09/Main1.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="window"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#FFFFFF"></param>
<param name="allowScriptAccess" value="always"></param>
<embed type="application/x-shockwave-flash" width="640" height="400" src="http://blog.mattiasnorell.com/wp-content/uploads/2010/09/Main1.swf" quality="high" bgcolor="#FFFFFF" wmode="window" menu="false" ></embed>
</object>
</p>
<h2>Main.as</h2>
<pre class="brush: actionscript3; font-size: 50%">package {
	import flash.display.Sprite;
	import flash.events.Event;
	import net.hires.debug.Stats;
	import flash.display.BitmapData;
	import flash.display.Bitmap;
	import flash.media.Camera;
	import flash.media.Video;

	[SWF(width=640,height=400,frameRate=30)]

	public class Main extends Sprite {
		private var holder : Sprite = new Sprite();
		private var childCound : uint = 240;
		private var a : Number = 0;
		private var wcfeed : Video = new Video(80, 60);
		private var wc : Camera;
		private var wcbmp : BitmapData;

		public function Main():void {
			if (stage)
				init();
			else
				addEventListener(Event.ADDED_TO_STAGE, init);
		}

		private function init(e : Event = null):void {
			removeEventListener(Event.ADDED_TO_STAGE, init);

			this.graphics.beginFill(0x666666);
			this.graphics.drawRoundRect(0, 0, stage.stageWidth, stage.stageHeight,15);
			this.graphics.beginFill(0xcccccc);
			this.graphics.drawRoundRect(10, 10, stage.stageWidth - 20, stage.stageHeight - 20,10);
			this.graphics.endFill();

			wc = Camera.getCamera();
			wc.setMode(80, 60, 15);
			wcfeed.attachCamera(wc);
			wcbmp = new BitmapData(wcfeed.width, wcfeed.height);

			for (var i : uint = 0; i &lt; childCound;++i) {
				var dot : Dot = new Dot();
				dot.x = (stage.stageWidth - dot.width) / 2;
				dot.y = (stage.stageHeight - dot.height) / 2;
				holder.addChild(dot);
			}

			addChild(holder);

			var bmp : Bitmap = new Bitmap(wcbmp);
			bmp.x = (stage.stageWidth - wcfeed.width) / 2;
			bmp.y = stage.stageHeight - (wcfeed.height + 20);
			addChild(bmp);

			var stat : Stats = new Stats();
			stat.x = 20;
			stat.y = 20;
			addChild(stat);

			stage.addEventListener(Event.ENTER_FRAME, move);
		}

		private function move(e : Event):void {
			wcbmp.draw(wcfeed);

			for (var i : uint = 0; i &lt; childCound;++i) {
				var dot : Dot = holder.getChildAt(i) as Dot;
				var l : Number = i &amp; 15;
				var t : Number = Math.floor(i / 16);
				var colorX : Number = (l / 16) * 80;
				var colorY : Number = (t / 15) * 60;
				dot.changeColor(wcbmp.getPixel(colorX, colorY));

				dot.x = dot.width * (l + 8.5 + Math.sin(a + t * .3));
				dot.y = dot.height * (t + 3 + Math.sin(270 + a + l * .3));
			}
			a -= .05;
		}
	}
}</pre>
<h2>Dot.as</h2>
<pre class="brush: actionscript3; font-size: 50%">package
{
	import flash.display.Sprite;
	public class Dot extends Sprite
	{
		public function Dot(){}
		public function changeColor(color:uint):void{
			graphics.clear();
			graphics.beginFill(color, 1);
			graphics.drawCircle(0, 0, 10);
			graphics.endFill();
		}
	}
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattiasnorell.com/2010/09/10/playing-around-with-math-sin-and-flash-media-camera/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pure ActionScript 3 inverted mask 2.0</title>
		<link>http://blog.mattiasnorell.com/2010/08/21/pure-actionscript-3-inverted-mask-2/</link>
		<comments>http://blog.mattiasnorell.com/2010/08/21/pure-actionscript-3-inverted-mask-2/#comments</comments>
		<pubDate>Sat, 21 Aug 2010 00:00:05 +0000</pubDate>
		<dc:creator>Mattias</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[In english]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[inverted mask]]></category>

		<guid isPermaLink="false">http://blog.mattiasnorell.com/?p=972</guid>
		<description><![CDATA[Update: I´ve rewritten the inverted mask-class from scratch and moved it here. It now support animated movieclips, video, webcam-feed and pretty much everything eles. I think. About ten months ago I wrote a little as3-class that took care of something &#8230; <a href="http://blog.mattiasnorell.com/2010/08/21/pure-actionscript-3-inverted-mask-2/">Läs mer <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<blockquote><p>Update: I´ve rewritten the inverted mask-class from scratch and moved it <a href="http://blog.mattiasnorell.com/as3-libs/inverted-mask/">here</a>. It now support animated movieclips, video, webcam-feed and pretty much everything eles. I think.</p></blockquote>
<p>About ten months ago I wrote a little as3-class that took care of something I think Adobe should have implemented in the FlashPlayer a long time ago, the inverted mask. As time went by I&#8217;ve added some features I found useful while working on projects at work. In this version you can swap between inverted and normal masks, hide/show the mask and remove it from memory.</p>
<p>Finally I just want to say: Adobe, I love Flash but I still think this is way to complicated. A simple <em>DisplayObject.invertedMask = theMask;</em> would be just fine. I know it&#8217;s easy to say &#8221;just do it&#8221; but this is a feature a lot of developers would find useful.</p>
<h3><a href="http://blog.mattiasnorell.com/wp-content/uploads/2010/08/Main.swf" rel="shadowbox[sbpost-972];width=640;height=385;">Demo</a></h3>
<h3>The InvertedMask.as-class</h3>
<pre class="brush: actionscript3; font-size: 50%">package com.mattiasnorell.bitmap
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.BlendMode;
import flash.display.DisplayObject;
import flash.display.Sprite;

/**
* Inverted Mask
* Version 2.0
*
* ...
* Original author:    Rachel Diesel
*                     http://dieselation.com/2009/04/11/inverting-a-mask-in-actionscript-3/
*
* Pure AS3 code    Mattias Norell
*                     http://blog.mattiasnorell.com/2010/08/21/pure-actionscript-3-inverted-mask-2/
*
*/

public class InvertedMask extends Sprite{

private var inverted:Sprite;
private var dup:BitmapData;
private var newAlpha:Bitmap;
private var isInverted:Boolean;

public function InvertedMask($parent:DisplayObject,$mask:DisplayObject,$maskPos:Object):void {
inverted = new Sprite();
inverted.x = $parent.x;
inverted.y = $parent.y;

dup = new BitmapData($mask.width, $mask.height, true, 0xffffff);
dup.draw($mask);

newAlpha = new Bitmap(dup, "auto", false);
newAlpha.x = $maskPos.x;
newAlpha.y = $maskPos.y;
newAlpha.blendMode = BlendMode.ERASE;

$mask.parent.removeChild($mask);

$parent.x=$parent.y = 0;

inverted.addChild($parent);
inverted.addChild(newAlpha);

inverted.blendMode = BlendMode.LAYER;

addChild(inverted);

isInverted = true;
}

public function moveMask($target:Object,$maskPos:Object):void {
$target.getChildAt(0).getChildAt(1).x  = $maskPos.x;
$target.getChildAt(0).getChildAt(1).y  = $maskPos.y;
}

public function Show():void{
inverted.blendMode = BlendMode.LAYER;
}

public function Hide():void{
inverted.blendMode = BlendMode.NORMAL;
}

public function autoShowHide():void{
(inverted.blendMode == BlendMode.LAYER) ? Hide() : Show();
}

public function swapMaskType($type:String = "auto"):void{
if($type == 'auto'){
$type = (isInverted == true) ? 'normal' : 'inverted';
}

if($type == 'inverted'){
Show();
inverted.mask = null;
isInverted = true;
}else if($type == 'normal'){
Hide();
inverted.mask = newAlpha;
isInverted = false;
}else{
trace("You must use either 'inverted','normal' or 'auto'.");
}
}

public function remove():void{
inverted.mask = null;
inverted.blendMode = BlendMode.NORMAL;

newAlpha.bitmapData.dispose();
newAlpha = null;
dup.dispose();
dup = null;
}
}
}</pre>
<h3>Source for the demo swf</h3>
<p>When I code I use Flash Develop, hence the [Embed]-code below. If you use the Flash IDE just remove those two rows and import the image from the library.</p>
<pre class="brush: actionscript3; font-size: 50%">package{
	import flash.display.Sprite;
	import flash.events.MouseEvent;

	public class Main extends Sprite{

		[Embed(source="image.jpg")]
		public var imgCls:Class;

		public function Main():void{
			var img:Sprite = new Sprite();
			img.addChild(new imgCls());
			addChild(img);

			var mask:Sprite = new Sprite();
			mask.graphics.beginFill(0xFF0000,1);
			mask.graphics.drawRect(0,0,30,30);
			mask.graphics.endFill();
			addChild(mask);

			var newMask:InvertedMask = new InvertedMask(img, mask, { x:0, y:0 } );
			addChild(newMask);

			newMask.addEventListener(MouseEvent.MOUSE_MOVE, moveMask);
			newMask.addEventListener(MouseEvent.CLICK, swap);
		}

		private function swap(e:MouseEvent):void {
			e.currentTarget.swapMaskType();
		}

		private function moveMask(e:MouseEvent):void {
			e.currentTarget.moveMask(e.currentTarget, { x:mouseX-10, y:mouseY-10 } );
		}
	}
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattiasnorell.com/2010/08/21/pure-actionscript-3-inverted-mask-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

