Einträge zu ‘as3’

fcfg – Flash Configuration Utility

12.11.2010

fcfg logo

Beschreibung

Beim Entwickeln von Flash Applikationen und Seiten benötigt man oft Konfigurationen die aus mehren Quellen aus zusammengesetzt werden. Als Beispiel könnte man hier die Kombination von FlashVars und einer XML Datei die später geladen wird, anführen. Guave Studios versucht hier immer wieder generalisierte Abläufe zu finden um den individuellen Testaufwand zu reduzieren.

Beide enthalten Konfigurationsparameter und müssen an einem Punkt zusammengefügt werden. Wichtig ist hierbei aber, dass die Konfigurationseinträge in den richtigen Formaten und Reihenfolgen und IDs aufeinander abgestimmt werden.

Fcfg bietet hier eine ganz einfachen Ansatz. Es gibt verschiedene Reader, die je nach Datenquelle die Konfigurations IDs und Werte einlesen. Der zuletzt eingefügte Reader überdeckt sozusagen die unteren Reader und bildet somit einen Stammbaum. Die originalen Werte bleiben dadurch bestehen.

var cfg:Fcfg = Fcfg.getUniqueInstance();
cfg.addReader( { config:1} );
cfg.addReader( { config:2} );
 
trace("config: "+cfg.g("config"));
//Output: config 2

Mehrere Quellen

Konfigurationen von mehreren Quellen. Derzeit integriert sind:

  • Flash Objects (Stage parameters, objects)
  • XML Dateien

Als Beispiel eine Normale Applikation die default Values hat, Parameter über FlashVars übergeben bekommt und nachträglich eine XML Config ladet:

var cfg:Fcfg = Fcfg.getUniqueInstance();
//initialize application default values
cfg.addReader( {
	config:"default value"
});
 
//add stage parameters as values FlashVars: config:"flashvar value"
cfg.addReader( stage.loaderInfo.parameters );
 
trace("config: " + cfg.g("config")); //long version: cfg.getSetting
//Output: config: flashvar value
 
//....
//Later on an xml get loaded
var xml:XML = new XML("&lgt;root><setting id='config'>xml value</setting><root>");
cfg.addReader(xml);
 
trace("config: " + cfg.g("config"));
//Output: config: xml value

Ändern zur Laufzeit

Die Konfiguration kann zur Laufzeit verändert werden ohne die originalen Daten zu verändern.

var cfg:Fcfg = Fcfg.getUniqueInstance();
//initialize application default values
cfg.addReader( {
	config:"default value"
});
 
cfg.s("config", "overriden value"); //long version: cfg.setSetting
trace("config: " + cfg.g("config"));
//Output: config: overriden value
 
//now lets remove the setting
cfg.r("config"); //long version: cfg.removeSetting
trace("config: " + cfg.g("config"));
//Output: config: default value

Kettenstruktur

Im den vorigen Beispielen sieht man, dass die Konfiguration eine Strutkur von mehreren Readern/Writern ist.

Aufbau:

  1. Default Value Reader (Object Reader/Writer)
  2. Stage Params Reader (Object Reader/Writer)
  3. XML Config Reader (XML Reader)
  4. Default Modifier (Object Reader/Writer)

cfg.setSetting(“config”,”value”); hat hier den vierten Punkt editiert. Die Kette wir von Unten (4) nach Oben(1) abgearbeitet. Das Value des ersten Readers, der die Config ID (“config”) beinhaltet, wird genommen.

Beim editieren wird der defaultModifier genommen. Dieser ist mit einer gewissen Priorität (20) gespeichert. Bei einem Modifier kann man Werte editieren und löschen.

Der Object Reader/Writer kann dies standardmässig.

Events

Bei Änderungen an Konfigurationseinträgen werden Events dispatched. Fcfg selbst ist ein IEventDispatcher und unterstützt damit die gänigen AS3 Events.

public function sample4():void {
	var cfg:Fcfg = Fcfg.getUniqueInstance();
	cfg.addEventListener(FcfgEvent.SETTING_CHANGED, cfg_changed);
 
	cfg.setSetting("config", "modified setting");
}
 
private function cfg_changed(e:FcfgEvent):void {
	trace("changed: ", e.id, e.newValue, e.oldValue);
	//Output changed: config,modified setting,null
}

Multiton

Um den Zugriff zu zentralisieren und vereinfachen steht ein Multiton in der Fcfg bereit. Somit ist der Zugriff auch auf statischer Ebene möglich.

var cfg:Fcfg = Fcfg.getUniqueInstance(); //unique generated name
cfg.configName; //stored name, can be recalled with this
 
var namedCfg:Fcfg.getInstance("myConfig");
var otherContextCfg:Fcfg = Fcfg.getInstance("myConfig");
//otherContextCfg and namedCfg reference to the same object

Links

Like it?

Hello Air, hello Android :C|

07.06.2010

Adobe AIR für Android ist da. Mit CS5 kann man direkt für Android APK Pakete erstellen. Dieser Artikel erklärt wie man AIR auf Android mit FlashDevelop entwickeln kann.

Mit Guave Studios einen Blick auf Adobe AIR

Da wir bei Guave Studios daran intressiert sind, in den verschiedensten Kanälen interaktive Inhalte bereitzustellen, beschäftigen wir uns intensiv mit den Möglichkeiten, die uns mobile Endgeräte bieten. Ein wichtiger Faktor für uns ist eine möglichst plattformunabhänige Lösung, um keinen unnötigen Aufwand zu generieren. Unter Plattformunabhänig verstehen wir nicht “Eine generelle Lösung für alle” sondern “Eine Lösung für den Einzelnen basierend auf der Lösung für alle”.  Adobe AIR bietet einen gemeinsamen Nenner. Ich denke, dass für viele Applikationen – vorallem im promotionalen Bereich – Adobe AIR ausreicht. Sollte dies nicht der Fall sein, kann eine spezielle Lösung in betracht gezogen werden.

AIR for Android

AIR gibt es für den Android Emulator und auch die Devices mit Android 2.1 (7) oder 2.2 (8). Derzeit befindet sicht AIR noch in der Entwicklung (Beta). Benötigt wird ebenfalls das Android SDK.

Flash CS5

Nachdem man die Vorraussetzungen (AIR auf dem Device/Emulator, Android SDK) installiert und konfiguriert hat (weiter unten) kann man relativ schnell mit der Entwicklung loslegen.

Der Workflow gestaltet sich recht einfach. Unter File -> AIR Android Settings kann man die Parameter für die Erstellung anpassen. Hier hat man die Möglichkeit einen Schlüssel zu generieren der danach zum signieren verwendet wird. Beim Veröffentlichen wird die APK generiert und automatisch bei angschlossenem Device oder Emulator direkt auf dem Endgerät gestartet. Somit kann auch sofort getestet werden.

Nur: Wer codet denn in CS5 ;) ?

Flash Develop

(Tutorial)

Wir hätten auch die Möglichkeit mit Flash Develop über CS5 zu publishen. Ich zeige hier aber die Lösung ohne CS5 benützen zu müssen.

Mit ein paar Einstellungen und einem Template bekommen wir das auch auf Flash Develop oder anderen IDEs zum laufen. Der ganze Worklfow kann per Kommandozeile nachgebaut werden. Selbst debugging direkt in Flash Develop wird möglich.

Hierfür brauchen wir aber noch folgendes:

Dann einfach die Flex SDK entpacken. In denselben Ordner können dann die AIR 2.5 Dateien entpackt werden. Dann noch die playerglobal.swc in den Ordner flex40sdk\frameworks\libs\player\10.1 entpacken.

Android SDK entpacken und Setup ausführen. Die aktuellen APIs updaten. Um testen zu können benötigen wir hier jetzt den Emulator. (USB weiter unten).  Hier wird Android 2.1 oder 2.2 erstellt. Auf der Seite AIR 2.5 SDK muss man noch die APK Datein für den Emulator und eventuell für das Device runterladen. Ich würde empfehlen, den AndroidSDK/tools Pfad zu den Umgebungsvariablen hinzuzufügen (Rechtsklick auf Computer->Erweiterte Systemeinstellungen -> Umgebungsvariablen-> PATH)

Wir können jetzt in der Kommandozeile einen Sever starten mit adb start-server. Wenn wir jetzt den Emulator per emulator -avd [EmulatorName] starten. Mit “adb devices” sehen wir ob unser Emulator erkannt wurde. Sonst nochmal per “adb kill-server” und “adb start-server” probieren.

adb-kill-startserver

Wenn wir jetzt das air.apk für den Android Emulator ausgepackt haben, können wir per adb install Runtime_Emulator_Eclair_20100517.apk (Eclair ist Android 2.1)

Flash Develop (ab 3.1.1) normal installieren und mit dem Flex SDK verbinden (über Einstellungen->AS3 Context->Path to Flexsdk)

Das Flash Develop Template airandroid.fdz kann jetzt ausgeführt werden. Dies ist standardmässig auf Windows mit Flash Develop verlinkt und wird dann automatisch installiert. Alternativ kann man auch die Datei auf .zip umbenennen und in den Flash Develop/Projects Ordner entpacken.

Mit Flash Develop kann jetzt ein Projket vom Typ “Air Android AS3″ erstellt werden. Der Parameter Name ist Pflicht und sollte wenn möglichst klein und ohne Leerzeichen geschrieben werden. Der Package Path kann ich auch empfehlen auszufüllen, da die erstellte Android ApplikationsID sich dann aus packagepath.projectname zusammensetzt.

AIR Android Flash Wizzard

Wir können das Projekt jetzt anlegen.

Im src Ordner kann jetzt die Datei Main.as editiert werden. Ein kleines trace(“Hello World”); sollte für unseren ersten Test reichen.

Im Projektordner scripts sollte man noch die settings.bat anpassen um individuelle Keys zu generieren. Es kann auch hier direkt ein Key hinterlegt werden. (CERTIFICATE_FILE). Es kann hier auch ein Passwort spezifiziert werden. Dies ist dann aber während der ganzen Zeit in der Datei gespeichert. Ich würde empfehlen während des Entwicklungsprozesses den SelfSigned Key zu verwenden und erst beim Release auf den richtigen Code Signingkey zu verwenden. Derweilt wird das Passwort automatisch beim Debuggen aus der settings.bat gelesen.

Endlich testen!

Jetzt können wir das Projekt direkt per F5 oder dem Run Button testen.

Ablauf:

  1. .swf File wird gebuildet
  2. key wird gecheckt und evtl generiert
  3. IP Addresse wird ermittelt um den Debugger zu connecten (Erste IPv4 im ipconfig)
  4. Das APK wird gebuildet und mit dem Key gesigned
  5. Die Applikation wird auf dem verbundenen Device deinstalliert (falls installiert)
  6. Die Applikation wird auf dem verbundenen Device installiert
  7. Die Applikation wird auf dem Device gestartet
  8. Der Debugger connected zum Debugger auf der hinterlegten IP
  9. Hello Android müsste in der Console auftauchen

Anmerkungen zum Device USB Debugging

Das heikelste war es, mein HTC Desire mit Android 2.1 für die Entwicklung zu präparieren. Ich habe viele Informationen im Internet gefunden, jedoch nur wenige waren erfolgreich.

Was ich speziell zum HTC Desire sagen kann ist, den Treiber der auf der SD Card ist zu benutzen. Dieser wird mit HTC Sync installiert. Aktiviert man auf dem Device das USB Debugging, sieht das Device mit “adb devices”.

Für das Flash Debugging wird WLAN Access benötigt. Mit einer zugewiesenen IP (DHCP zb) kann man das Device zum Debugger verbinden.

Und voila, viel Spass beim Applikationen schreiben.

Links


Fnfo – Flash Info

30.04.2010

Flash Version Information

Die Flash Version Information ist ein Development und Deployment Tool für Flash Anwendungen.

Implementierung

Die einfache Implementierung erfordert eine Zeile Code.

Fnfo.initialize(this);

Mit BuildInformation Plugin

Fnfo.initialize(this, {versioninfo:FnfoVersion_fnfo.VERSION_FILE } );

Das Resultat ist dieses untere Flash. (Rechts in das Flash klicken und den Context Menüpunkt fnfo anklicken)

This movie requires Flash Player 9

Um die Information zu schliessen einfach nochmal Rechtsklick und fnfo anklicken.

Der Output wäre wie folgt:

Version: 0.0.1
ProjectName: fnfo
VersionNumber: 0.7.0.5-32
BuildTime: 07.04.2010 12:09:00.44
BuildComputer: MARTIN-WORK/martin
PlayerVersion: WIN 10,0,42,34
PlayerDebug: true
PlayerType: PlugIn
PlayerAudio: true
PlayerMp3: true
SystemOs: Windows 7
ScreenResulution: 1680/1050
ExternalInterface: true
ExternalInterfaceObject: null
ReportTime: Wed Apr 7 16:10:20 GMT+0200 2010
ReportExecution: 00:00:04:293
LastError: none
LoadUrl: http://www.guavestudios.com/blog/fnfo-07.swf
SwfVersion: 9
BytesTotal: 14933
StageParam: test1Param = Hello
StageParam: test2Param = World

Die angezeiten Informationen helfen ein Problem genauer zu klassifizieren. Besonders wenn der Kunde eine Fehlermeldung tätigt, kann dieser mit einem Rechtsklick auf einfache Art und Weise wichtige Infos übermitteln. Die wichtigsten Informationen sind oben aufgelistet, können aber beliebig erweitert werden.

Weitere Beispiele finden sich unter: GettingStarted

Plugins

Derzeit sind die meisten Plugins integriert. Eine Plugin Struktur ermöglicht es aber eigene Plugins selbst hinzuzufügen.

Unter anderem arbeite ich derzeit an einem Screenshot Plugin, dass per Knopfdruck einen aktuellen Screenshot der Applikation mit den gesammelten Informationen und einen Zusatztext an einen Server schicken kann. Dies ist besonders hilfreich, um während der Entwicklung schnell und präzise Fehlerinformationen zu sammeln. Seit Flashplayer 10.1 gibt es zudem die Möglichkeit den zuletzt aufgetretenen Fehler zu melden.

Integration in bestehende IDEs

Die einfachste Integration bietet derzeit ein Prebuild Command. Jede IDE die dies unterstützt kann aktuelle Buildinformationen dem SWF beifügen. Zusätzlich generiert das Script (version.bat) eine Versionsklasse in der die Versionsdatei eingespeichert ist. Diese wird, wenn nicht vorhanden direkt im src Ordner erstellt. Damit kann man diese schnell und einfach anbinden.

Prebuild command in Flash Develop:

scripts/version.bat $(OutputName) $(ProjectName) src

Die Buildnummer setzt sich derzeit aus:

{major}.{minnor}.{build}.{svnrevision}-{localbuild}
{major}.{minnor}.{build} gelesen aus {projectswf}.productversion
{svnrevision} wird mit dem WCRev Utilty aus TortoiseSVN ermittelt
{localbuild} erhöht sich jedes mal bei einem lokalen Build und wird in  {projectswf}.buildnr gespeichert

Status

Derzeit befindet sich das Tool in Entwicklung. Vorallem mit dem Flashplayer 10.1 mit Global Errorhandling werden wir eine komfortable “Fehler melden” Möglichkeit einbauen.

Meinen Dank an Guave Studios, dass dieses Projekt ebenfalls Open Source ist.

Links

Gilbert Gress ruft euch an!

07.04.2010

http://www.gress-cam.ch

Eine interaktive Aufklärungskampagne der Suva.

Das Projekt

Gemeinsam mit Angelink haben wir vor kurzem das Projekt gress-cam.ch realisiert.
Hier tritt Gilbert Gress als Botschafter der schweizer Unfallversicherung Suva auf. Die Kampagne stellt wichtige Informationen zur Suva bereit und klärt über Unfallprävention im Sport auf.

gilbert_web

Die Idee

Die Idee war direkt mit Gilbert Gress in Kontakt zu treten, der einem dann erklärt auf was man beim Sport besonders achten muss um Unfälle zu vermeiden. Dazu soll er sogar Nutzer anrufen, die ihm seine Telefonnummer hinterlegen.

Realisiert wurden diese Anforderungen mit einer Microsite, die die Webcam von Gilbert Gress zeigt. Gilbert klärt hier einen Besucher über Telefon auf was alles gefährlich sein könnte. Nach Beendigung des Gesprächs fordert die Trainerlegende den Besucher auf, seine Telefon/Natelnummer einzugeben. Dann könne er einen aus der Liste der Besucher aussuchen und einen Rückruf tätigen.

gresscam-dreh4

Umsetzung

Damit Gilbert Gress wirklich anrufen kann, benötigten wir einen Telefonservice, der ein Tonband von seiner Stimme in der richtigen Sprache abspielt und dies mit dem Webcam-Video synchronisiert. Die Dreharbeiten fanden nicht bei Gilbert Gress zu Hause, sondern bei uns im eingerichteten Studio statt.

gresscam-dreh5

gresscam-dreh1_grossgresscam-dreh3_grossgresscam-dreh2_gross

Das gesamte Video besteht aus einem einzigen progressiven Stream. Während der Anrufer wartet, loopt ein Video Controller vor und zurück. Sobald der Teilnehmer den Anruf annimmt, wird die Lautstärke des Videos nach unten geregelt und das Video spielt synchron weiter ab. Hat der Anrufer keine Nummer eingegeben, wird er wiederum zum Zaungast und kann die Unterhaltung mithören. Am Ende verabschiedet sich Gilbert Gress und wünscht den Zuschauern alles Gute.

Grossen Wert wurde auf die sharing-Funktionen gelegt, um es dem Besucher so einfach wie möglich zu machen, seinen Freunden von der Seite zu erzählen. Das Feedback Formular ermöglicht es, zusätzlich Rückfragen und Vorschläge zu tätigen.

Als Grundstock verwendeten wir das PureMVC Framework. Einige andere Libraries (fnfo,fcfg,puremvc,puremvc-syncer,asaf3,flayout,osmf,resm,servicelib,tweener) reduizierten unseren Arbeitsaufwand erheblich.
Hiermit ein Dankeschön an die Entwickler.

Ein tolles Projekt mit vielen Raffinessen.

gresscam-dreh6

Flash-Freelancer gesucht

26.08.2009

flahsergesucht

Als Aushilfe in arbeitsintensiven Zeiten und für interessante Projekte suchen wir einen Flash Developer auf Freelance-Basis.

Mitbringen solltest du:

*) Möglichst viel AS3 Erfahrung und Kenntnis in objektorientierter Programmierung
*) SVN Kenntnisse
*) Teamfähigkeit
*) Starke Nerven für Stresssituationen :)
*) Flexibilität

Wir freuen uns auf deine Rückmeldung unter off…@guavestudios.com