<?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>zeroseven labs &#187; ActionScript</title>
	<atom:link href="http://labs.zeroseven.de/tag/actionscript/feed/" rel="self" type="application/rss+xml" />
	<link>http://labs.zeroseven.de</link>
	<description></description>
	<lastBuildDate>Wed, 28 Jul 2010 07:43:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Schnelle Fourier-Transformation (1D + 2D) für ActionScript</title>
		<link>http://labs.zeroseven.de/development/actionscript-development/schnelle-fourier-transformation-1d-2d-fur-actionscript/</link>
		<comments>http://labs.zeroseven.de/development/actionscript-development/schnelle-fourier-transformation-1d-2d-fur-actionscript/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 12:36:43 +0000</pubDate>
		<dc:creator>alexanders</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[computeSpectrum]]></category>
		<category><![CDATA[extract]]></category>
		<category><![CDATA[fourier]]></category>
		<category><![CDATA[schnelle]]></category>
		<category><![CDATA[Sound]]></category>
		<category><![CDATA[Transformation]]></category>

		<guid isPermaLink="false">http://labs.zeroseven.de/?p=1510</guid>
		<description><![CDATA[Wie schon in einem älteren Beitrag (SoundMixer.computeSpectrum() vs. Sound.extract()) von mir beschrieben, gibt es (noch immer) ein Problem mit der computeSpectrum Methode des SoundMixers. Diese Methode zum Auslesen des Spektrums ist an sich eine schöne Funktion, gehört aber dem SoundMixer. Dieser ist eine globale Flash-Klasse, was einige Probleme mit sich bringt. Nutzt man diese Funktion [...]]]></description>
			<content:encoded><![CDATA[<p>Wie schon in einem älteren Beitrag (SoundMixer.computeSpectrum() vs. Sound.extract()) von mir beschrieben, gibt es (noch immer) ein Problem mit der <code>computeSpectrum</code> Methode des SoundMixers. Diese Methode zum Auslesen des Spektrums ist an sich eine schöne Funktion, gehört aber dem SoundMixer. Dieser ist eine globale Flash-Klasse, was einige Probleme mit sich bringt. Nutzt man diese Funktion innerhalb eines SWFs und hat andere SWF, welche Sound beinhaltet offen, kommt es unweigerlich zu Sicherheitsfehlern und wirklich unschönen Geräuschen. </p>
<p><span id="more-1510"></span></p>
<p>Umgehen lässt sich dies mit Hilfe der der <code>extract()</code> Methode der Sound-Klasse. Hier wird das gesamte Frequenzspektum des Sounds augelesen und kann weiter verwendet werden. Aber es gibt einen gravierenden Unterschied bei beiden Mehtoden. Die computeSpectrum liefert von Haus aus eine schnelle Fourier Transformation mit. Hingegen liefert die <code>extract()</code>-Methode nur RAW-Daten zurück. Kurz zusammengefasst bedeutet dies, dass mit Hilfe der <code>computeSpectrum</code> die zurückgelieferten Frequenzen nach Bereich sortiert werden und bei der anderen Funktion eben nicht.</p>
<p>Klar könnte man hingehen und selbst eine einfache Sortierfunktion schreiben. Doch bei der etwas größeren Datenmenge die bewältigt werden muss, wird dies das Script auf jeden Fall verlangsamen. Eine Methode die verwendet werden kann zur Sortierung ist die Schnelle Fourier-Transformation, die auf der Diskreten Fourier-Transformation basiert. Aber leider gab es diese Funktion, wie gesagt, nur innerhalb der <code>computeSepctrum()</code> Methode.</p>
<p>Nun hat Eugene Zatepyakin sich die Mühe gemacht und eine Implementierung der schnellen Fourier-Transformation in ActionScript 3 geschrieben, die frei verfügbar bei Google-Code ist. Mit Hilfe dieser Klassen konnte ich, nach ein paar Tests, den SoundVisualizer mit der Funktionalität zur Sortierung der Sound Daten erweitern, ohne die oben kurz angerissenen Probleme wieder aufzureißen. </p>
<p>Die Implementierung ist, wie Eugene sie auch beschreibt, sehr einfach. Für die Verwendung mit Sound wird die FFT-Klasse verwendet. Des weiteren gibt es noch die FFT2D-Klasse, welche die Möglichkeit eine zweidimensionale Transforation durchzuführen bietet, wie sie etwa bei Bildern Verwendung findet. Bei der Initialisierung der Klasse mit deren init()-Methode sollte man auch nicht über 2048 Bytes gehen, da sonst wiederum die Performance leidet. Besonders ist darauf zu achten, dass die Anzahl der ausgelesenen Bytes über die <code>extract</code>-Methode mit der bei der init Methode übereinstimmt.</p>
<p>Der eingentliche Analyzer ist in der FFTSpectrumAnalyzer-Klasse. Hier wird in der initLogarithmicAverages-Methode zunächst die Mindestbandbreite angegeben und die Anzahl an Bändern, in die eine Oktave unterteilt werden soll.<br />
Sehr wichtig ist auch die Einstellung &#8220;Little Endian&#8221; für den ByteArray, welcher die resultierenden Daten hält. Innerhalb des onSampleDataEvent-Handlers werden die ausgelesenen Bytes dann der fft-Klass mittels <code>setStereoRAWDataByteArray(bytes)</code> mitgegeben, um dann anschließend die <code>forwardFFT()</code> aufzurufen, welche die eigentliche Transformation ausführt. <code>fftHelp.analyzeSpectrum()</code> liefert dann den analysierten ByteArray, welcher dann weiter benutzt werden kann für alle möglichen visuellen Ausgaben, zurück. Noch ist hier der Sound selbst noch nicht ausgegeben. Dafür müssen die Bytes zurück transformiert werden über <code>fft.inverseFFT()</code>. Nach dem Zurücksetzen der Position innerhalb des BytesArrays können nun die SoundBytes an <code>event.data</code> zur Ausgabe übergeben werden. Den genauen Ablauf der Funktionen kann man auch auf Google Code nachlesen. Hier hat Eugene zwei Beispielscripts eingefügt. Und als anschauliches Beispiel für die Verwendung seiner Bibliothek einfach den zeroseven SoundVisualizer anschauen. Hier ist im letzten Reiter eine weitere Checkbox, in der man angeben kann, ob die Daten sortiert (FFT) oder unsortiert (RAW) verwendet werden sollen.</p>
<p>Links:</p>
<ul>
<li>
Vergleich computeSpectrum und extract: <a href="http://labs.zeroseven.de/development/actionscript-development/soundmixer-computespectrum-vs-sound-extract-2/">http://labs.zeroseven.de/development/actionscript-development/soundmixer-computespectrum-vs-sound-extract-2/</a>
</li>
<li>
Wikipediaeintrag zur Schnellen Fourier-Transformation: <a href="http://de.wikipedia.org/wiki/Schnelle_Fourier-Transformation">http://de.wikipedia.org/wiki/Schnelle_Fourier-Transformation</a>
</li>
<li>
Wikipediaeintrag zur Diskreten Fourier-Transformation: <a href="http://de.wikipedia.org/wiki/Diskrete_Fourier-Transformation">http://de.wikipedia.org/wiki/Diskrete_Fourier-Transformation</a>
</li>
<li>
Eugenes Blog zu ASFFT: <a href="http://blog.inspirit.ru/?p=405">http://blog.inspirit.ru/?p=405</a>
</li>
<li>
Eugenes Blog zu Update von ASFFT: <a href="http://blog.inspirit.ru/?p=410">http://blog.inspirit.ru/?p=410</a>
</li>
<li>
Google Code Seite: <a href="http://code.google.com/p/in-spirit/wiki/ASFFT">http://code.google.com/p/in-spirit/wiki/ASFFT</a>
</li>
<li>
Beispiel zur Verwendung von ASFFT: <a href="http://visualizer.zeroseven.de">http://visualizer.zeroseven.de</a>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://labs.zeroseven.de/development/actionscript-development/schnelle-fourier-transformation-1d-2d-fur-actionscript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Starten von Systemprozessen in AIR 2.0</title>
		<link>http://labs.zeroseven.de/development/air/starten-von-systemprozessen-in-air-2-0/</link>
		<comments>http://labs.zeroseven.de/development/air/starten-von-systemprozessen-in-air-2-0/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 07:01:26 +0000</pubDate>
		<dc:creator>juergenm</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Adobe AIR]]></category>
		<category><![CDATA[AIR 2.0]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[NativeProcess]]></category>

		<guid isPermaLink="false">http://labs.zeroseven.de/?p=1504</guid>
		<description><![CDATA[Eine der Neuerungen von AIR 2.0 ist die NativeProcess API, die es ermöglicht mit Systemprozessen zu interagieren und somit Systemanwendungen zu starten und zu beenden. Diese API bietet eine Menge von neuen Möglichkeiten für AIR-Applikationen. In diesem Blogeintrag werde ich zeigen wie aus AIR Firefox gestartet werden kann.

Native Installers
AIR Applikationen können nicht nur als *.air [...]]]></description>
			<content:encoded><![CDATA[<p>Eine der Neuerungen von AIR 2.0 ist die NativeProcess API, die es ermöglicht mit Systemprozessen zu interagieren und somit Systemanwendungen zu starten und zu beenden. Diese API bietet eine Menge von neuen Möglichkeiten für AIR-Applikationen. In diesem Blogeintrag werde ich zeigen wie aus AIR Firefox gestartet werden kann.</p>
<p><span id="more-1504"></span></p>
<p><strong>Native Installers</strong><br />
AIR Applikationen können nicht nur als *.air Dateien exportiert und weitergegeben werden, sondern auch als &#8220;Native Installer&#8221; also *.exe für Windows bzw. *.dmg für MacOS. Dies ist die Voraussetzung um mit Systemprozessen kommunizieren zu können. Ein weiterer Vorteil von Native Installers ist, dass die AIR Runtime mit der Applikation installiert wird, falls diese noch nicht auf dem System des Benutzers verfügbar ist und eine Internetverbindung besteht. Falls der Benutzer nicht mir dem Internet verbunden ist, kommt wenigstens eine Meldung man solle sich doch bitte die aktuelle AIR runtime von der Adobe Seite herunterladen. Weiterhin gibt es die Möglichkeit die AIR Runtime zum Beispiel auf einer CD/DVD mitzuliefern, dafür ist allerdings eine <a href="http://www.adobe.com/products/air/runtime_distribution1.html#license">Re-Destributable Lizenz</a> von Adobe nötig, <a href="http://www.mikechambers.com/blog/2008/04/07/redistributing-the-adobe-air-runtime-installer/">siehe Blogeintrag von Mike Chambers</a>.</p>
<p><strong>Erstellen eines Native Installers</strong><br />
Da man aus FlashBuilder standardmäßig nur *.air Files exportieren kann müssen hier auf die Konsole zurückgreifen. Das Packagingprogramm hierfür heißt ADT und befindet sich im bin Ordner des AIR sdks. Es gibt grundsätzlich zwei verschiedene Arten Native Installers zu erstellen: </p>
<ul>
<li>aus dem Sourcecode eines AIR Projekts</li>
<li>aus einer bereits bestehenden AIR Datei</li>
</ul>
<p>Dieser Aufruf erstellt eine Anwendung mit Native Installer für MacOS aus den Quelldaten der Applikation.</p>
<pre>adt -package -storetype pkcs12 -keystore myCert.pfx -target native myApp.dmg main-app.xml main.swf</pre>
<p>Folgender Aufruf erstellt eine Anwendung mit Native Installer für MacOS aus einer AIR Datei</p>
<pre>adt -package -target native myApp.dmg myApp.air</pre>
<p>Um einen Native Installer für Windows zu erstellen wird einfach anstatt myApp.dmg myApp.exe verwendet. Einschränkung: Native Installers können immer nur für das Betriebssystem erstellt werden das gerade genutzt wird. Will mal also ein *.exe für Windows erstellen muss ADT unter Windows aufgerufen werden.</p>
<p>Mehr Infos dazu auf der <a href="http://help.adobe.com/en_US/air/build/WS789ea67d3e73a8b22388411123785d839c-8000.html">Adobe Hilfe</a>.</p>
<p><strong>NativeProcess API</strong><br />
Die <a href="http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/flash/desktop/NativeProcess.html">NativeProcess</a> Klasse bietet die Möglichkeit mit einem Systemprozess zu interagieren. Über die Funktionen <code>start(info:NativeProcessStartupInfo):void</code> und <code>exit(force:Boolean  = false):void</code> werden Prozesse gestartet und beendet. Über die Eigenschaften <code>running</code>, <code>standardError</code>, <code>standardInput</code> und <code>standardOutput</code> kann der Prozess überwacht werden.</p>
<p>Der Funktion <code>start()</code> wird eine <a href="http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/flash/desktop/NativeProcessStartupInfo.html">NativeProcessStartupInfo</a> Objekt übergeben das Informationen zum Prozess enthält der gestartet werden soll. Die Eigenschaft <code>executable</code> muss eine Referenz auf die Datei enthalten die gestartet werden soll und über <code>arguments</code> kann eine Vector von Strings<br />
mit Parametern angegeben werden.</p>
<pre>var file = new File('/Applications/Firefox.app/Contents/MacOS/firefox-bin');
var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
nativeProcessStartupInfo.executable = file;
var process:NativeProcess = new NativeProcess();
process.start(nativeProcessStartupInfo);</pre>
<p>Dies ist nur ein kleines Beispiel das natürlich beliebig erweiter werden kann. Schön ist auf jeden Fall, dass sich dadurch ganz neue Möglichkeiten für AIR Applikationen auftun. Der große Nachteil von AIR bleibt aber weiterhin, dass die AIR Runtime auf jeden Fall installiert werden muss, es ist also zum Beispiel kein Starten von CD möglich.</p>
<p>Links und weitere Beispiele:</p>
<ul>
<li><a href="http://www.adobe.com/devnet/air/flex/quickstart/interacting_with_native_process.html">Adobe DevNet: Interacting with a native process</a></li>
<li><a href="http://help.adobe.com/en_US/air/build/WS789ea67d3e73a8b22388411123785d839c-8000.html">Adobe Help: Packaging an AIR application in a native installer</a></li>
<li><a href="http://www.mikechambers.com/blog/2008/04/07/redistributing-the-adobe-air-runtime-installer/">Mike Chambers: Redistributing the Adobe AIR Runtime Installer</a></li>
<li><a href="http://www.adobe.com/products/air/runtime_distribution1.html#license">Adobe: Distribute Adobe® AIR® Runtime</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://labs.zeroseven.de/development/air/starten-von-systemprozessen-in-air-2-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multitouch in Flash und AIR</title>
		<link>http://labs.zeroseven.de/development/air/multitouch-in-flash-und-air/</link>
		<comments>http://labs.zeroseven.de/development/air/multitouch-in-flash-und-air/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 10:05:37 +0000</pubDate>
		<dc:creator>juergenm</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[GestureEvent]]></category>
		<category><![CDATA[Multitouch]]></category>
		<category><![CDATA[TouchEvent]]></category>
		<category><![CDATA[TransformGestureEvent]]></category>

		<guid isPermaLink="false">http://labs.zeroseven.de/?p=1208</guid>
		<description><![CDATA[Seit dem 02. Februar ist Adobe AIR 2.0 beta 2 unter Adobe Labs verfügbar und bereits seit Mitte Dezember 2009 gibt es eine Betaversion des FlashPlayers 10.1. Eine der Neuerungen ist die Unterstützung von Multitouch Events. Dies eröffnet neue Wege der Interaktion und bringt ein ganz neue Benutzererfahrung die schon von dem IPhone bzw. IPodTouch [...]]]></description>
			<content:encoded><![CDATA[<p>Seit dem 02. Februar ist Adobe AIR 2.0 beta 2 unter <a href="http://labs.adobe.com/technologies/air2/">Adobe Labs</a> verfügbar und bereits seit Mitte Dezember 2009 gibt es eine <a href="http://labs.adobe.com/technologies/flashplayer10/">Betaversion des FlashPlayers 10.1</a>. Eine der Neuerungen ist die Unterstützung von Multitouch Events. Dies eröffnet neue Wege der Interaktion und bringt ein ganz neue Benutzererfahrung die schon von dem IPhone bzw. IPodTouch bekannt ist.</p>
<p><span id="more-1208"></span></p>
<p>Die Voraussetzung ist natürlich eine entsprechende Hardware. Um die Multitouchfähigkeit testen zu können ist entweder ein multitouchfähiger Touchscreen oder ein Touchpad wie zum Beispiel beim MacBook Pro erforderlich. Außerdem kommt es darauf an wie viele Touchpunkte das Eingabegerät unterstützt, von Flash Seite gib es hier keine Einschränkungen.</p>
<p>Doch wie sieht das Ganze in ActionScript aus? Die Multitouchfähigkeit basiert hauptsächlich auf folgenden Events</p>
<ul>
<li><code>flash.events.TouchEvent</code></li>
<li><code>flash.events.GestureEvent</code></li>
<li><code>flash.events.TransformGestureEvent</code></li>
</ul>
<p><strong>Multitouch Input Mode</strong><br />
Es gibt zwei Multitouch Modi <code>MultitouchInputMode.TOUCH_POINT</code> und <code>MultitouchInputMode.GESTURE</code>. Um Multitouch Events verwenden zu können, muss die statische Variable inputMode der Multitouch Klasse gesetzt werden: <code>Multitouch.inputMode = MultitouchInputMode.GESTURE;</code>. Wird der Modus &#8220;touchPoint&#8221; gewählt werden TouchEvents dispatched, wird der modus &#8220;gesture&#8221; gewählt werden GestureEvents und TransformGestureEvents dispatched. Anhand der TouchPoint Events können die verschiedenen Berührungspunkte ausgelesen und verarbeitet werden.<br />
In diesem Eintrag will ich aber auf die Gestures eingehen. Es werden die vom IPhone bekannten Gesten für zoomen, drehen und wischen (mit zwei oder drei Fingern) und der tab mit zwei Fingern unterstützt.</p>
<ul>
<li><code>TransformGestureEvent.GESTURE_ZOOM</code></li>
<li><code>TransformGestureEvent.GESTURE_ROTATE</code></li>
<li><code>TransformGestureEvent.GESTURE_PAN</code> (2 Finger)</li>
<li><code>TransformGestureEvent.GESTURE_SWIPE</code> (3 Finger)</li>
<li><code>GestureEvent.GESTURE_TWO_FINGER_TAP</code></li>
</ul>
<p><strong>Test Anwendung</strong><br />
Um die Funktionen zu testen habe ich eine einfach AIR Anwendung gemacht in der Bild über die Gesures gedreht, gezoomt, und bewegt werden kann. Mein<a href="http://labs.zeroseven.de/wp-content/uploads/2010/02/MultitouchTest.air.zip"> Test AIR App kann hier heruntergeladen</a> werden, es wird allerdings die <a href="http://labs.adobe.com/downloads/air2.html">AIR 2.0beta Runtime</a> benötigt und natürlich ein Eingabegerät das Multitouch unterstützt.</p>
<p><strong>Anwendung auf Propeller</strong><br />
Mein Kollege Alex hat gestern einen Beitrag zu seinem <a href="http://labs.zeroseven.de/development/actionscript-development/flash-experiment-rotation/">Propeller-Experiment</a> geschrieben, diesen habe ich genommen und mit Multitouchfähigkeiten ausgestattet. Über die Geste Rotation kann der Propeller rotiert werden, über zoom kann gezoomt werden und das Wischen mit 3 Fingern wechelt die Farbe. <a href="http://labs.zeroseven.de/wp-content/uploads/2010/02/MultitouchPropeller.air.zip">Hier gibts die AIR Applikation</a>, viel Spaß beim ausprobieren.</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.zeroseven.de/development/air/multitouch-in-flash-und-air/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash Experiment &#8211; Rotation</title>
		<link>http://labs.zeroseven.de/development/actionscript-development/flash-experiment-rotation/</link>
		<comments>http://labs.zeroseven.de/development/actionscript-development/flash-experiment-rotation/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 14:59:54 +0000</pubDate>
		<dc:creator>alexanders</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[BitmapData]]></category>
		<category><![CDATA[Experiment]]></category>
		<category><![CDATA[Matrix]]></category>
		<category><![CDATA[Shape]]></category>

		<guid isPermaLink="false">http://labs.zeroseven.de/?p=1200</guid>
		<description><![CDATA[Eine Rotation über den Abstand der Maus zum Zentrum. Dabei werden hier in diesem Beispiel nur zwei Shapes gezeichnet, um dann eine Animation &#38; Verzerrung über Matrix-Berechnungen und BitmapData.draw() zu realisieren:











]]></description>
			<content:encoded><![CDATA[<p>Eine Rotation über den Abstand der Maus zum Zentrum. Dabei werden hier in diesem Beispiel nur zwei Shapes gezeichnet, um dann eine Animation &amp; Verzerrung über Matrix-Berechnungen und BitmapData.draw() zu realisieren:</p>
<p><span id="more-1200"></span></p>
<p>
<object width="627" height="627">
<param name="movie" value="http://labs.zeroseven.de/wp-content/uploads/2010/02/Propeller1.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="opaque"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#000000"></param>
<embed type="application/x-shockwave-flash" width="627" height="627" src="http://labs.zeroseven.de/wp-content/uploads/2010/02/Propeller1.swf" quality="high" bgcolor="#000000" wmode="opaque" menu="false" ></embed>
</object>
</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.zeroseven.de/development/actionscript-development/flash-experiment-rotation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Der zeroseven SOUND VISUALIZER</title>
		<link>http://labs.zeroseven.de/design/der-zeroseven-sound-visualitzer/</link>
		<comments>http://labs.zeroseven.de/design/der-zeroseven-sound-visualitzer/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 07:19:05 +0000</pubDate>
		<dc:creator>alexanders</dc:creator>
				<category><![CDATA[DESIGN]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AlivePDF]]></category>
		<category><![CDATA[computeSpectrum]]></category>
		<category><![CDATA[extract]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Sound]]></category>

		<guid isPermaLink="false">http://labs.zeroseven.de/?p=1187</guid>
		<description><![CDATA[Der Visualizer ist aus der einfachen Idee entstanden, Sounds mittels Flash zu visualisieren. Begonnen hat es mit einfachen Ausgaben des Spektrums eines Sounds mit Hilfe der computeSpectrum() Methode des SoundMixers. Immer weitere Versuche, was mit dem entstehenden ByteArray machbar ist, entstanden.

In Gesprächen entwickelte sich dann die Idee, eine Plattform zu schaffen, welche Sounds eines Users [...]]]></description>
			<content:encoded><![CDATA[<p>Der Visualizer ist aus der einfachen Idee entstanden, Sounds mittels Flash zu visualisieren. Begonnen hat es mit einfachen Ausgaben des Spektrums eines Sounds mit Hilfe der computeSpectrum() Methode des SoundMixers. Immer weitere Versuche, was mit dem entstehenden ByteArray machbar ist, entstanden.</p>
<p><span id="more-1187"></span></p>
<p>In Gesprächen entwickelte sich dann die Idee, eine Plattform zu schaffen, welche Sounds eines Users analysiert, visualisiert und später dann ein Bild zum Download der aktuellen Visualisierung anbietet. Ein einfacher Screenshot wäre hier möglich gewesen und die Bilder jpg- oder png-kodiert zum download anzubieten. Aber solche Bilder sind sehr klein und können dann z.B. nicht als Plakat gedruckt werden. Also suchte ich nach einer anderen Lösung. SVG wäre eine Variante gewesen. Dazu hatte ich auch schon die Grundzüge eines Exporters geschrieben, der die XML-Struktur aus Graphics-Elementen in ActionScript bilden kann. Hiermit wäre zumindest die freie Skalierbarkeit des Plakates gewährleistet. Etwa zu dieser Zeit bin ich dann auf die Bibliothek AlivePDF von Thibault Imbert gestoßen und hab auch hier erste Versuche betrieben (<a href="http://labs.zeroseven.de/development/actionscript-development/aus-flash-flex-generierte-pdfs/">siehe labs-Eintrag dazu</a>). Und nach ein paar Tests war klar, das ist der Weg, den ich für den Visualizer gehen muss.</p>
<p>Aber der SVG Exporter war nicht ganz gestorben. Das Logging-Tool das im Hintergrund mitläuft ist noch immer Teil der Anwendung. Einfach gesagt, merkt sich dass Tool die Spezifikationen aller Elemente. Dieses Log nutze ich jetzt beim PDF-Export zum Erstellen der Elemente des PDFs.</p>
<p>Anfangs mit random-Farben ausgestattet, brachte Sebastian die Idee ins Spiel Kuler für Farbprofile zu nutzen. Also erfolgte mit Hilfe des Adobe Syndication Packages das Laden und Auslesen des Feeds der 20 beliebtesten Farben von Kuler. Dennoch hat auch der User die Möglichkeit eigene Farben zu verwenden. Ein eigenes ColorPicker-Tool kommt hier zum Einsatz.</p>
<p>Auch die Formen wurden vielfältiger. Anfangs nur mit Kreisen gezeichnet, kamen weitere Grundformen und Polygone hinzu. Auch die Möglichkeiten der Ausgabe erweiterten sich, je mehr ich mich darin &#8220;reingetestet&#8221; hatte. Eigene Formate entstanden sowie Hilfstools zur Umrechnung von Pixelwerten aus dem Logger hin zu Zoll und Millimeter. Die Oberfläche bekam ein schickes Design verpasst und weitere Funktionen spendiert, um dem User mehr Möglichkeiten zu geben sein eigenes Plakat zu erstellen.</p>
<p>Ein Problem das es zudem zu bewältigen galt, waren die Probleme der SoundMixer.computeSpectrum() Methode. An sich eine tolle Sache und auch die Möglichkeit den ByteArray als RAW-Daten oder als Daten mit einer schnellen Fourier-Transformation zu erhalten ist sehr viel wert. Aber der SoundMixer hat einen entscheidenden Nachteil. Er ist eine globale Klasse und greift somit auf alle möglichen Sounds zu. Das führte dazu, dass der Visualizer zum Beispiel versucht auf die Sounds eines Videos von YouTube zuzugreifen, wenn dieses in einem anderen Browser Tab oder Fenster läuft. Und ganz klar entsteht dabei ein Sandbox-Problem. Umgangen habe ich diese Problematik mit Hilfe der Sound.extract() Methode. Sie liefert den ByteArray gleich zu Anfang zurück und zwar für den gesamten Audiostream. Daher erfolgt hier die Abtastung anders und etwas komplizierter als bei der computeSpectrum() Methode. Aber auch hierzu gibt es schon einen labs-Eintrag von mir (<a href="http://labs.zeroseven.de/development/actionscript-development/soundmixer-computespectrum-vs-sound-extract-2/">Link</a>).</p>
<p>So entwickelte sich mit der Zeit eine Oberfläche, die für mich zum einen als Versuchs- und Testprojekt diente, aber letztendlich ein Tool darstellt, das ein breites Spektrum der Flashfunktionen abdeckt und auch zeigt was man performancetechnisch mit Flash so anstellen kann.</p>
<p>Aber nun nicht länger lesen sondern einfach ausprobieren:<br />
<a href="http://visualizer.zeroseven.de/">http://visualizer.zeroseven.de/</a></p>
<p>Des weiteren möchte ich noch Thibault Imbert für seine Mühe und Arbeit bei AlivePDF danken, ein wirklich hammerkrasses Tool! Ebenso Sascha Wolter für seinen SystemManager, den Junges von Greensock für TweenLite &amp; TweenMax, den Entwicklern des De MonsterDebugger und denen von pixelbreaker.com für das MacMouseWheel.</p>
<p><a href="http://www.alivepdf.org">www.alivepdf.org</a><br />
<a href="http://www.wolter.biz">www.wolter.biz</a><br />
<a href="http://www.greensock.com">www.greensock.com</a><br />
<a href="http://www.pixelbreaker.com">www.pixelbreaker.com</a><br />
<a href="http://www.adobe.com">www.adobe.com</a><br />
<a href="http://www.demonsters.nl">www.demonsters.nl</a></p>
]]></content:encoded>
			<wfw:commentRss>http://labs.zeroseven.de/design/der-zeroseven-sound-visualitzer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash Experiment &#8211; Pixelhole</title>
		<link>http://labs.zeroseven.de/development/actionscript-development/flash-experiment-pixelhole/</link>
		<comments>http://labs.zeroseven.de/development/actionscript-development/flash-experiment-pixelhole/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 12:49:30 +0000</pubDate>
		<dc:creator>alexanders</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Bitmap]]></category>
		<category><![CDATA[BitmapData]]></category>
		<category><![CDATA[Experiment]]></category>
		<category><![CDATA[Graphics]]></category>

		<guid isPermaLink="false">http://labs.zeroseven.de/?p=1175</guid>
		<description><![CDATA[Ein weiteres Experiment, das ein Bild auf Pixelbasis animiert. In Bezug auf die Mausposition zum jeweiligen Pixel wird eine Verschiebung generiert. Einfach klicken und ausprobieren:











]]></description>
			<content:encoded><![CDATA[<p>Ein weiteres Experiment, das ein Bild auf Pixelbasis animiert. In Bezug auf die Mausposition zum jeweiligen Pixel wird eine Verschiebung generiert. Einfach klicken und ausprobieren:</p>
<p><span id="more-1175"></span></p>
<p>
<object width="627" height="400">
<param name="movie" value="http://labs.zeroseven.de/wp-content/uploads/2010/01/PixelFlow.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="opaque"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#000000"></param>
<embed type="application/x-shockwave-flash" width="627" height="400" src="http://labs.zeroseven.de/wp-content/uploads/2010/01/PixelFlow.swf" quality="high" bgcolor="#000000" wmode="opaque" menu="false" ></embed>
</object>
</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.zeroseven.de/development/actionscript-development/flash-experiment-pixelhole/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Flash Experiment &#8211; Curving</title>
		<link>http://labs.zeroseven.de/development/actionscript-development/flash-experiment-curving/</link>
		<comments>http://labs.zeroseven.de/development/actionscript-development/flash-experiment-curving/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 10:18:59 +0000</pubDate>
		<dc:creator>alexanders</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Bitmap]]></category>
		<category><![CDATA[BitmapData]]></category>
		<category><![CDATA[Experiment]]></category>
		<category><![CDATA[Graphics]]></category>

		<guid isPermaLink="false">http://labs.zeroseven.de/?p=1167</guid>
		<description><![CDATA[Ein kleines Experiment unter Verwendung eines Zusatzpackages von Lee Brimelow. Es wird alle 50 Millisekunden eine neue Linie mit zufälliger Farbe, Position und Winkel erzeugt und animiert. Um die Performance nicht ins unermessliche zu belasten, werden fertig animierte Linien auf ein BitmapData reduziert und von der DisplayList genommen.











]]></description>
			<content:encoded><![CDATA[<p>Ein kleines Experiment unter Verwendung eines Zusatzpackages von Lee Brimelow. Es wird alle 50 Millisekunden eine neue Linie mit zufälliger Farbe, Position und Winkel erzeugt und animiert. Um die Performance nicht ins unermessliche zu belasten, werden fertig animierte Linien auf ein BitmapData reduziert und von der DisplayList genommen.</p>
<p><span id="more-1167"></span></p>
<p>
<object width="627" height="600">
<param name="movie" value="http://labs.zeroseven.de/wp-content/uploads/2010/01/curves.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="opaque"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#000000"></param>
<embed type="application/x-shockwave-flash" width="627" height="600" src="http://labs.zeroseven.de/wp-content/uploads/2010/01/curves.swf" quality="high" bgcolor="#000000" wmode="opaque" menu="false" ></embed>
</object>
</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.zeroseven.de/development/actionscript-development/flash-experiment-curving/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Flash Experiment &#8211; Lines</title>
		<link>http://labs.zeroseven.de/development/actionscript-development/flash-experiment-lines/</link>
		<comments>http://labs.zeroseven.de/development/actionscript-development/flash-experiment-lines/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 09:37:57 +0000</pubDate>
		<dc:creator>alexanders</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Bitmap]]></category>
		<category><![CDATA[BitmapData]]></category>
		<category><![CDATA[Experiment]]></category>
		<category><![CDATA[Graphics]]></category>

		<guid isPermaLink="false">http://labs.zeroseven.de/?p=1138</guid>
		<description><![CDATA[Ein kleines Flash-Experiment das knapp 1300 gebogene Linien mittels der Graphics Klasse zeichnet. Diese Linien werden dann aber nicht dem DisplayStack hinzugefügt, sondern  über BitmapData.draw in ein Bitmap-Objekt gezeichnet. Damit ist eine relativ performate Animation möglich.











Baut man diese Animation weiter aus, kann man die Überlagerungen und Alpha-Werte dazu nutzen, einen DisplacementMapfilter zu verwenden. Durch [...]]]></description>
			<content:encoded><![CDATA[<p>Ein kleines Flash-Experiment das knapp 1300 gebogene Linien mittels der Graphics Klasse zeichnet. Diese Linien werden dann aber nicht dem DisplayStack hinzugefügt, sondern  über BitmapData.draw in ein Bitmap-Objekt gezeichnet. Damit ist eine relativ performate Animation möglich.</p>
<p><span id="more-1138"></span></p>
<p>
<object width="627" height="627">
<param name="movie" value="http://labs.zeroseven.de/wp-content/uploads/2010/01/MagneticStyle.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="opaque"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#000000"></param>
<embed type="application/x-shockwave-flash" width="627" height="627" src="http://labs.zeroseven.de/wp-content/uploads/2010/01/MagneticStyle.swf" quality="high" bgcolor="#000000" wmode="opaque" menu="false" ></embed>
</object>
</p>
<p>Baut man diese Animation weiter aus, kann man die Überlagerungen und Alpha-Werte dazu nutzen, einen DisplacementMapfilter zu verwenden. Durch dessen Einsatz bekommt die Animation einen fluiden Eindruck.</p>
<p>
<object width="627" height="627">
<param name="movie" value="http://labs.zeroseven.de/wp-content/uploads/2010/01/lion.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="opaque"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#000000"></param>
<embed type="application/x-shockwave-flash" width="627" height="627" src="http://labs.zeroseven.de/wp-content/uploads/2010/01/lion.swf" quality="high" bgcolor="#000000" wmode="opaque" menu="false" ></embed>
</object>
</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.zeroseven.de/development/actionscript-development/flash-experiment-lines/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Aus Flash &amp; Flex generierte PDFs</title>
		<link>http://labs.zeroseven.de/development/actionscript-development/aus-flash-flex-generierte-pdfs/</link>
		<comments>http://labs.zeroseven.de/development/actionscript-development/aus-flash-flex-generierte-pdfs/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 06:15:34 +0000</pubDate>
		<dc:creator>alexanders</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[erzeugen]]></category>
		<category><![CDATA[generieren]]></category>
		<category><![CDATA[PDF]]></category>

		<guid isPermaLink="false">http://labs.zeroseven.de/?p=1070</guid>
		<description><![CDATA[Oft ist es doch so, dass innerhalb einer Flash oder Flex Applikation PDFs zum download angeboten werden sollen. Sind diese fest auf dem Server hinterlegt, ist dies kein Problem. Einen Link darauf setzen und das Problem ist gelöst. Doch was nun, wenn die Inhalte aus dem SWF dazu dienen sollen, das PDF zu erzeugen. Dann [...]]]></description>
			<content:encoded><![CDATA[<p>Oft ist es doch so, dass innerhalb einer Flash oder Flex Applikation PDFs zum download angeboten werden sollen. Sind diese fest auf dem Server hinterlegt, ist dies kein Problem. Einen Link darauf setzen und das Problem ist gelöst. Doch was nun, wenn die Inhalte aus dem SWF dazu dienen sollen, das PDF zu erzeugen. Dann wird es schon interessanter.</p>
<p><span id="more-1070"></span></p>
<p>Ohne eine serverseitige Programmierung geht hier nichts. Zum Beispiel Java oder PHP müssen zur Hilfe genommen werden. Ärgerlich und vor allem umständlich wenn es darum geht, das PDF und die auf dem Screen enthaltenen Inhalte zu synchronisieren. Es muss hier nun überlegt werden, welche Informationen sende ich wie an den Server, um das Ergebnis zu reproduzieren, welches clientseitig eigentlich schon da ist. Wie gesagt sehr umständlich.</p>
<p>Thibault Imbert hat hier einen Ansatz geschaffen, der es Flash und Flex Entwicklern ermöglicht, PDFs clientseitig zu generieren. Nur ein kleines PHP Script ist noch nötig, um das PDF fertig zu stellen. Dieses ist im Package schon enthalten und fertig zum nutzen. AlivePDF heißt dieses Package und ist, was die Entwicklergemeinde freut, open source. Und die Handhabung des ganzen ist denkbar einfach.</p>
<p><code>var pdf:PDF = new PDF(orientation:String, unit:String, pageSize:Object=null, rotation:int=0);</code></p>
<p>Mit dieser Zeile ist das Grundgerüst der PDF schon erstellt, wobei <em>orientation</em> Hoch- oder Querformat definiert, unit das Maß in dem das PDF angelegt wird (Pixel, mm, ..), <em>pageSize</em> definiert die Seitengrößen (A4, A3, usw.) und letztlich <em>rotation</em> die Drehung der Inhalte als letzten Parameter. Für die ersten drei gibt es Klassen mit statischen Variablen zur Definition. Interessant ist hier die Size-Klasse, die sich recht leicht um weitere Seitengrößen erweitern lässt.</p>
<p><code>pdf.setDisplayMode (zoom:String = "FullWidth", layout:String = "SinglePage", mode:String = "UseNone"); </code></p>
<p>Hiermit lässt sich definieren wie die Seite selbst dargestellt werden soll. Mit <em>zoom</em> zum Beispiel ist die Vergößerung der Anzeige definiert oder mit <em>layout</em> das Layout des Dokumentes selbst. Einfache Seite, eine Spalte oder zwei Spalten links sind mögliche Parameter.</p>
<p><code>pdf.addPage(page:Page = null);</code></p>
<p>Hiermit wird eine Seite im PDF hinzugefügt, der dann schlussendlich die Inhalte hinzugefügt werden. Als Parameter ist es möglich ein Page-Objekt mitzugeben, welches wiederum andere Größen- und Formatausrichtungen haben kann, als das PDF selbst. Damit können im PDF auch unterschiedliche Seitengrößen erzeugt werden, je nach dem was gerade benötigt wird.</p>
<p>Nun ist die erste Seite erzeugt und lässt sich mit Inhalten befüllen. Dabei gibt es Funktionen zur allgemeinen Seitendefinition (z.B. <em>setRightMargin</em>) oder eben um Inhalte einzufügen. Dabei können Grafikobjekte wie Kreise, Flächen oder Pfade erzeugt werden, wobei hier die sehr große Ähnlichkeit zu den Graphics-Funktionen den Workflow von vorne herein einfach gestalten. Aber auch Texte oder Bilder können eingefügt werden. Aber auf all diese Funktionen nun einzugehen, würde jeden Rahmen sprengen.</p>
<p>Um nun aus dem PDF-Objekt ein richtiges PDF zu machen, wird nun das create.php aus dem Package benötigt. An diese sendet man den erzeugten ByteCode und das php-File sagt dem ByteStream: &#8220;Du bist ein PDF und jetzt kann man dich runterladen.&#8221; Das war es auch schon. Wie gesagt sehr einfach gehalten.</p>
<p>Um es kurz zusammen zu fassen, es gibt eine unglaubliche Masse an Funktionen und Einstellungsmöglichkeiten, dabei handelt es sich bei der aktuellen Version von AlivePDF um eine Alpha-Version und bisher ist mir noch kein Fehler untergekommen. Also hat Thibault ganze Arbeit geleistet! Vieles ist noch immer etwas experimentell, da die Dokumentation noch nicht sehr weit gediehen ist, aber bei einer Alpha Version ist dies glaub zu verkraften. Insgesamt also schon jetzt ein sehr gelungenes Werk.</p>
<p>Noch ein paar Links zum Thema:<br />
<a href="http://www.alivepdf.org/">www.alivepdf.org</a><br />
<a href="http://alivepdf.bytearray.org/alivepdf-asdoc/">Dokumentation</a><br />
<a href="http://code.google.com/p/alivepdf/">Download</a></p>
<p>Und drei kleine Videotutorials:<br />
<a href="http://alivepdf.bytearray.org/wp-content/tutorials/alivepdf-tutorial-getting-started.swf">Getting Started</a><br />
<a href="http://alivepdf.bytearray.org/wp-content/tutorials/alivepdf-tutorial-flex-application.swf">Flex &amp; AlivePDF</a><br />
<a href="http://tv.adobe.com/#vi+f1472v1017">Introduction on Adobe TV</a></p>
]]></content:encoded>
			<wfw:commentRss>http://labs.zeroseven.de/development/actionscript-development/aus-flash-flex-generierte-pdfs/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Google Analytics für Flash und Flex</title>
		<link>http://labs.zeroseven.de/development/actionscript-development/google-analytics-fur-flash-und-flex/</link>
		<comments>http://labs.zeroseven.de/development/actionscript-development/google-analytics-fur-flash-und-flex/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 06:15:56 +0000</pubDate>
		<dc:creator>alexanders</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Analytics]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[GoogleAnalytics]]></category>

		<guid isPermaLink="false">http://labs.zeroseven.de/?p=1058</guid>
		<description><![CDATA[Google Analytics ist ein mächtiges Tool um das Nutzerverhalten innerhalb einer Seite zu untersuchen. Wo klickt der User, welche Themen sind besonders interessant und wie kann die Seite für den Nutzer optimiert werden? Dies sind nur ein paar Punkte bei denen Google Analytics hilfreich zur Seite steht.

Bei Flash und Flex Anwendungen war hier bisher Schluss. [...]]]></description>
			<content:encoded><![CDATA[<p>Google Analytics ist ein mächtiges Tool um das Nutzerverhalten innerhalb einer Seite zu untersuchen. Wo klickt der User, welche Themen sind besonders interessant und wie kann die Seite für den Nutzer optimiert werden? Dies sind nur ein paar Punkte bei denen Google Analytics hilfreich zur Seite steht.</p>
<p><span id="more-1058"></span></p>
<p>Bei Flash und Flex Anwendungen war hier bisher Schluss. Die Seite wird aufgerufen, das SWF geladen und dies war der letzte Aufruf des Trackers, wenn der User sich ab nun innerhalb der SWF bewegt. Ein Zustand der jeden Marketingmenschen zur Verzweiflung treibt.</p>
<p><code>public var gaTracker:GATracker;</code></p>
<p>Der hier aufgeführte GATracker ist der Kern des com.google.analytics &#8211; Packages. Es enthält alle notwendigen Klassen um Google Analytics auf einer Flash oder Flex Anwendung anzusprechen. Dazu wird wie oben beschrieben eine Variable der GATracker erstellt. Über diese läuft dann die gesamte Kommunikation.<br />
Nur wird bei applicationComplete (Flex) oder eben im Konstruktor (Flash) die oben beschriebene Variable instanziiert. Dazu müssen verschiedene Parameter mitgegeben werden damit die Kommunikation zu Google Analytics auch so funktioniert wie es soll. Wenn die Flash oder Flex Anwendung und auf dem MVC-Model basiert, bietet es sich zu dem an, die Tracker Variable im Model anzulegen. So lässt sie sich von überall nutzen.</p>
<p>Um nun aber auf die Parameter der Instanziierung einzugehen:</p>
<p><code>gaTracker = new GATracker(this, 'XX-XXXXXXX-X', TrackerMode.AS3, true);</code></p>
<p>Dies beschreebt die Instanziierung der GATrackers via ActionScript. Wobei &#8216;this&#8217; das parent DisplayObject darstellt. Ich denke dass es sinnvoll ist, mit this auf root der SWF zu verweisen. Als nächstes kommt der Google Analytics-Account. Diese ID einfach hier als String eintragen. Nun wird es interessanter. Der dritte Parameter beschreibt den TrackerMode ausgehened von der App. Dabei gibt es zwei Modi: TrackerMode.AS3 oder TrackerMode.BRIDGE. Dabei lässt es sich recht einfach unterscheiden, welchen Modus man verwenden soll. Der BRIDGE Modus wird genutzt, wenn in der HTML-Seite, in welche das SWF eingebettet wird, bereits ein Google Analytics-Tracker vorhanden ist. Dieser Tracker wird im BRIDGE-Modus über External-Interface angesprochen und dann auch für die Kommunikation zu Google Analytics genutzt. Der AS3-Modus wird hingegen genutzt, wenn kein Tracker in der HTML-Seite vorhanden ist. Der letzte Parameter sagt aus, ob der Tracker im Debug-Modus laufen soll oder nicht. Dies ist besonders interessant während der Entwicklung um zu überwachen welche Informationen gesendet werden.</p>
<p>Für die Flex-MXML Syntax gibt es einen eigenen Tag zum implementieren:<br />
<code><br />
</code></p>
<p>Hier verhalten sich die Attribute wie oben beschrieben, nur eben das es keinen Verweis auf das DisplayObject gibt, da der Tag sowieso schon in einem liegt. Hinzu kommt aber eine ID um den Tracker aufrufen zu können.</p>
<p>Wie wird nun die Userinteraktion an Google Analytics übertragen? Um es vorweg zu sagen, man kann als Entwickler definieren was alles getrackt werden soll und wie es ankommt. So ließe sich zum Beispiel vom MouseClick bis hin zur kleinsten Mausbewegung alles mittracken. Das dies (meist) nicht sinnvoll ist, ist klar aber es zeigt auf, welche Möglichkeiten es gibt.</p>
<p>Es gibt zwei Aufrufe zum senden von Informationen. trackPageview und trackEvent. Mit dem ersten wird GoogleAnalytics eine Information übermittelt, entsprechend dazu, wenn der User auf eine andere Seite navigieren würde:</p>
<p><code>gaTracker.trackPageview("/aFakePage");</code></p>
<p>Dabei wird die &#8220;neue&#8221; Verzeichnisstruktur in der sich der User befindet, an Google übermittelt. Eben so als hätte sich die URL verändert.<br />
Die zweite Möglichkeit dient dazu interne Events der RIA zu übermitteln, die nicht von der Usernavigation ausgehen.</p>
<p><code>gaTracker.trackEvent('category', 'action', 'label', [value:optional]);</code></p>
<p>Hier entspricht die &#8220;<em>category</em>&#8221; der Gruppe zu der der Event zugeordnet werden soll und die &#8220;<em>action</em>&#8221; ist inhaltlich an die &#8220;<em>categorie</em>&#8221; gebunden. Das heißt, wenn es sich um Events handelt, die beispielsweise von einer Videosteuerung ausgehen, ist es sinnvoll die &#8220;<em>category</em>&#8221; &#8216;video&#8217; zu nennen und the &#8220;<em>actions</em>&#8221; wären zum Beispiel &#8220;play&#8221;, &#8220;pause&#8221; und so weiter. Das &#8220;<em>label</em>&#8221; bietet die Möglichkeit weitere Informationen zum category-action-Paar zu übermitteln, ebenso wie über &#8220;<em>value</em>&#8220;, wobei es sich hier um einen positiven Integer handeln muss.</p>
<p>Insgesamt eine sehr einfache Variante, um aus einem SWF heraus zu Google Analytics zu kommunizieren. Letztendlich würden sorgar zwei Zeile Code ausreichen, um den Datenaustausch zu erstellen. Das Package gibt es im übrigen zum Download bei GoogleCode.</p>
<p>Links:<br />
<a href="http://code.google.com/p/gaforflash/">http://code.google.com/p/gaforflash/</a><br />
<a href="http://www.insideria.com/2009/02/using-google-analytics-within.html">http://www.insideria.com/2009/02/using-google-analytics-within.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://labs.zeroseven.de/development/actionscript-development/google-analytics-fur-flash-und-flex/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
