Flash Builder 4 und Subclipse

Kürzlich hatte ich das Problem, dass ich nach der Installation von Subclipse im Flash Builder 4 zwar das SVN nutzen konnte, jedoch immer eine Fehlermeldung bekam.

native Library not available
Failed to load JavaHL Library.

Das Problem lässt sich durch folgende Einstellung lösen:

Einstellungen -> Team -> SVN
Dort unter SVN Interface SVNKit auswählen.

Danach läuft wieder alles wunderbar.

, , , , , , , , , ,

No Comments

Flex SDK 3.5a bugfix auto-updater UI

Heute wurde ein kleines update zur aktuellen SDK-Version 3.5 veröffentlicht. Wer mit der SDK 3.5 versucht hat das native UpdateWindow zum laufen zu bringen, wird sich über dieses update freuen. Mir ging es vor kurzem auch so und ich musste erstmal auf die Version 3.4 wechseln. Im Zusammenhang mit dem Flashplayer 10 ist es natürlich ratsamer die aktuellste SDK zu verwenden.

Man hatte das Problem, dass in der auto-update UI kein Skin geladen wurde und somit ein Update nicht möglich war. Man konnte noch den Umweg gehen, ohne Benutzerbestätigung ein Update auszuführen, aber wer möchte das schon. ;)

Das update hat auch keinen Einfluss auf Anwendungs-Signierung und caching. Habe ich auch schon getestet und kann diese bestätigen.

The refreshed build, SDK 3.5a, has only a few files modified in order to fix this issue and this change does not affect the signing and caching of the SDK 3.5 RSLs originally released in December.

Die neue sdk 3.5a steht in allen 3 Versionen zur Verfügung.
Hier die offizielle Meldung im Adobe blog.

, , , , , , , , , ,

No Comments

Flex Videodisplay und direkte Zeitmarken

Ich habe momentan das Problem, dass ich bei der Videodisplay-Komponente nicht direkt an eine bestimmte Stelle springen kann. Dieses Problem lässt sich momentan leider nicht umgehen, da man an der Methode seek() nichts anpassen kann. Aus diesem Grund habe ich begonnen einen kleinen workaround zu erstellen. Dazu auch nochmal vielen Dank für den Tipp beim Flex UG event, zu den keyframes innerhalb des Videos, die bei H.264 nochmal anders gesetzt werden.

Der workaround sieht so aus, dass das Video erst dann wieder eingeblendet wird, wenn die Zeitmarke erreicht ist. Das Videodisplay springt automatisch, durch die seek Methode einen kleinen Schritt zurück und das mache ich mir zu nutze. Beim setzten der playheadtime und anschließendem play(), wird ein bitmap erzeugt und über das Video gelegt. Ebenso wird die Lautstärke auf 0 gesetzt. Wird die Zeitmarke wieder erreicht, wird das bitmap entfernt und die Lautstärke zurückgesetzt. Bis zu diesem Punkt wird auch die update-Methode unterbrochen.

/**
 * @author Christian Müller
 * @date 16.01.2010
 * @url http://www.christian-mueller-design.de
 */
package de.cmd.videodisplay {
  import flash.display.Bitmap;
  import flash.display.BitmapData;
  import flash.display.PixelSnapping;
  import flash.display.Sprite;

  import mx.controls.VideoDisplay;
  import mx.events.VideoEvent;

  public class AccurateVideoDisplay extends VideoDisplay {

    private var _targetPositionSet  : Boolean; // if new position set from outside
    private var _targetPlayHeadTime : Number;  // playheadtime video has to reach
    private var _targetVolume       : Number;  // video volume on new playheadtime

    private var _overlayImage       : Sprite;  // sprite containing screenshot of video while loading

    public function AccurateVideoDisplay() {
      super();
      _targetPositionSet     = false;
      playheadUpdateInterval = 50;
      addEventListener( VideoEvent.PLAYHEAD_UPDATE, onPlayHeadUpdateTrigger ); // overwrite event
    }

    override public function get playheadTime():Number {
      return super.playheadTime;
    }

    override public function set playheadTime( value:Number ):void {
      // set target values
      _targetPositionSet  = true;
      _targetPlayHeadTime = value;
      _targetVolume       = this.volume;

      // set new playheadtime
      super.playheadTime  = value;

      // create and add screenshot
      displayWaitingImage();
    }

    override public function play():void {
      super.play();
    }

    // called when playheadtime changes
    private function onPlayHeadUpdateTrigger( event:VideoEvent ):void {

      // playhead update event will not be dispatched until targetplayheadtime reached
      // outside nothing will happen until targettime
      if ( _targetPositionSet ) {
        event.stopImmediatePropagation();
      }

      // check if target playheadtime reached
      if ( playheadTime >= _targetPlayHeadTime ) { // success
      // screenshot existing
        if ( _overlayImage != null ) {
        var index : Number = getChildIndex( _overlayImage );
          if ( index > -1 ) {
          // remove screenshot and recreate old state
          removeChildAt( index );
          _overlayImage      = null;
          volume             = _targetVolume;
          _targetPositionSet = false;
          }
        }
      }
    }

    // create screenshot of current videoposition
    private function displayWaitingImage():void {
      // set remove sound and add screenshot
      volume = 0;

      var screenshot : BitmapData = new BitmapData( this.width, this.height );
      screenshot.draw( this );
      var overlayImageBmp : Bitmap = new Bitmap( screenshot, PixelSnapping.AUTO, true );
      _overlayImage = new Sprite();
      _overlayImage.addChild( overlayImageBmp );
      addChild( _overlayImage );
    }
  }
}

Der Entwicklungsstand ist ehr als Alpha zu bezeichnen, da nur Standardoperationen verwendet werden. Allerdings dient sie schonmal als gute Basis.

Ich würde mich auch über andere Ratschläge oder Weiterentwicklungen freuen.

, , , , , , ,

No Comments

Review: Product Development und UX bei Adobe

Flex Usergroup Berlin

Logo Flex UG Berlin

Solange ich noch einige Details der gestrigen Veranstaltung im Kopf habe, möchte ich gern eine kleine review erstellen.

Begonnen hatte die session um ca. 18:30 Uhr in der Zossener Strasse 55 in Berlin Kreuzberg. Veranstaltet wurde sie von der Flex Usergroup Berlin und dieses mal hat es mir wirklich gut gefallen. Die session war gut besucht und der Vortrag von Lars Wulfken(Experience Designer Adobe Systems) hatte bei vielen Zuhörern einiges an Interesse geweckt. Das machte sich durch häufige Detailfragen erkennbar. Gegen 21 Uhr endete der Vortrag und danach wurden noch einige detailiertere Fragen ausgetauscht.

Im groben war der Vortrag gegliedert in:

  • persönliche Vorstellung
  • was macht das XD Team in Hamburg
  • workflow und Planung
  • Zielgruppen
  • software development
  • interaction design
  • experience design
  • Einblick: adobe design patterns

Als zusätzliches Bonbon gab es noch einen kleinen Einblick in die neuen features von Device Central, dass mir bis dahin leider noch unbekannt war. Darunter war auch die Möglichkeit, in Zukunft mehr Aufmerksamkeit auf die Beschleunigungssensoren aktueller und kommender Handys bei der Anwendungsentwicklung zu legen. Diese Funktion hat bei mir sehr großes Interesse geweckt, auch mal mehr in die Handy-Richtung zu entwickeln.

Ich hoffe, die kommenden Termine der Flex UG Berlin werden gleichbleibend spannend.

Hier die originale Agenda des Termins.

weiterführende Links:

, , , , , , , , , ,

1 Comment

Aktualisierungproblem Flex Combobox

Auf pixeltex.com habe ich einen kleinen Artikel zum Problem der dynamischen Aktualisierung der Flex Combobox geschrieben. Seit einigen SDKs besteht das Problem darin, dass bei Änderung des Dataproviders die Dropdown-Liste nicht angepasst wird. Das kann dann störend sein, wenn zur Anwendungslaufzeit die Liste mehrfach angepasst wird.

zum Artikel:
Flex-Snippet: aktualisieren der Liste einer Combobox zur Laufzeit

, , , , , , , ,

1 Comment

Flex SDK 3.5 Updates

Im Zuge der Adobe Flex SDK 3.5 Veröffentlichung gab es nun einige Updates auf der Adobe Seite.

Das neue SDK mit aktualisierten data visualization components ist nun auch offiziell auf adobe.com zu finden.  Laut Adobe Blog wird es allerdings keine neue Flex Builder Version geben. Man soll auch weiterhin das Multi-SDK-Feature verwenden.

Unterstützt werden jetzt die mit Sicherheitsupdates ausgestatteten Flash Player 10.0.42 and AIR 1.5.3, inkl. einiger kleiner Bugfixes.

Die Language Reference wurde auch an die Version 3.5 angeglichen. Ich selbst habe auch noch mit der 3.4 Version gearbeitet.

weitere Informationen

, , , , , , , ,

1 Comment

Flex/AS3 embed font

Immer wieder habe ich die Situation, dass ich in Flex eine bestimmte Schriftart einbetten möchte. Gute und einfache Lösungen sind recht schwer zu finden, obwohl immerwieder viele danach suchen.

Hier meine kleine Lösungshilfe:

Als erstes bettet man die Schriftart am besten mit eingeschränktem Zeichensatz ein, sonst verschwendet man ziemlich viel Speicher (Beispiel für swf Größenunterschied: 224kB oder 33 kB). Diese unicodeRange bezieht sich auf Buchstaben, Zahlen und einige gebräuchliche Sonderzeichen.

[Embed(systemFont="Helvetica", fontName="Helvetica",
       mimeType="application/x-font",
       unicodeRange="U+0040-U+00FF,U+0030-U+0039,U+003A-U+0040")]
private var FontHelvetica : Class;

[...]

public function registerFont():void {
    Font.registerFont(FontHelvetica);
}

Später im code setzt man dann einfach nur noch das Textformat:

var format : TextFormat = new TextFormat();
format.font = "Helvetica";
format.color = 0xFF00FF;
format.size = 10;
format.bold = true;

textfield.defaultTextFormat = format;

Viel Spaß beim Weiterentwickeln.

, , , , , ,

No Comments

Adobe AIR 1.5.3

Die neue SDK ist online. Es gab kleine Bugfixes, Sicherheits-Updates und einen weiteren Schritt in die neue Zertifizierungs-Richtung. Es diesem Grund kann es für bestehende Anwendungen wichtig sein einige Änderungen vorzunehmen, wenn sie 1.5.3 verwenden möchten.

If you have deployed an existing Adobe AIR application using AIR 1.5.2 or earlier and you want to update your application to use the 1.5.3 namespace, you will need to specify the old publisher ID of your application in your descriptor. Instructions on how to find your publisher ID and specify it in your descriptor are described in the release notes.

The process for changing certificates in an update to a deployed application has changed. Beginning with AIR 1.5.3, certificate renewals will no longer be handled automatically and you will need to use the migrate feature of ADT. Please learn more about this topic by reading the release notes.

Zu den wichtigeren Bugfixes gehören:

When an intermediate certificate expires, it is no longer possible to sign an application with a renewed certificate (fixed by removing the publisher ID).
The AIR application installer crashes on Linux systems using AMD Phenom processors.

Liste der behobenen Fehler:

Bug # Bug title
2411661 When an intermediate certificate expires, it is no longer possible to sign an application with a renewed certificate (fixed by removing the publisher ID)
2464587 AIR application installer crashes on Linux systems using Phenom processors
2421099 When the Mac Snow Leopard option is enabled to minimize the windows “behind” the application icon in the dock, applications that are maximized do not un-minimize the window
2471920 HTMLLoader: KeyCodes are not transmitted well when using shift key inside an HTMLLoader
2474555 In Linux, AIR applications open links in Firefox even if default browser is set to a different application

Weitere Informationen:

, , , , ,

1 Comment

Adobe AIR 2.0 Beta

Die Beta-Version von AIR 2.0 ist nun offiziell erhältlich und es gibt echt eine Menge neuer Funktionen, die AIR noch interessanter machen.

Hier eine kleine Einführung:

Was kann AIR 2.0 im einzelnen:

  • Support for the detection of mass storage devices
  • Advanced networking capabilities like secure sockets, UDP support, and the ability to listen on sockets
  • Support for native code integration
  • The ability to open a file with its default application
  • Multi-touch and gesture support
  • New APIs for access to raw microphone data
  • Webkit update with HTML5/CSS3 support
  • Global error handling
  • Improved cross-platform printing
  • Improved security and support for enterprise and government standards
  • Safari 4.0.3
Ich freue mich schon sehr demnächst einige der neuen features ausgiebig testen zu können.
Links:

, , , , , , , , ,

No Comments

GreenSock Tweening V11

Es gibt eine neue Version der GreenSock Tweening Klassen. In diesem Release gibt es ein allgemeines Update der Klassen und einiges Neues. Neu sind die Timeline-Klassen mit denen man tweens wie auf einer Zeitleiste ansprechen und bearbeiten kann. Nett ist sind Funktionen wie “reverse”.

Was mich allerdings am meisten interessiert ist die neue TweenNano-Klasse. Sie ist nur 1.6 kb groß und ist wunderbar für Banner geeignet. Die bisherige TweenLite braucht 4.7 kb. Das kann schon einen Unterschied machen.

Die Neuerungen bei TweenLite und TweenMax:

  • TweenLite now has pause(), resume(), reverse(), play(), and restart() methods which it shares in common with all TweenCore classes (TweenMax, TimelineLite, and TimelineMax). This brings polymorphism to the platform in a very convenient way. So you can create a class variable, for example, and type it as a TweenCore and populate it with a TweenLite, TweenMax, TimelineLite, or TimelineMax and use common controls.
  • useFrames” is now officially supported. So to make a tween or timeline base its timing on frames instead of seconds, simply pass “useFrames:true” through the vars object. For example, to tween mc’s x coordinate to 100 over the course of 30 frames, do TweenLite.to(mc, 30, {x:100, useFrames:true});
  • Improved speed
  • Full ASDoc documentation
  • Associate any data with a particular tween using the new “data” special property.
  • TweenMax has new fromTo() and allFromTo() methods which allow you to define the starting and ending values in a tween (or group of tweens).
  • allTo() and allFrom() were moved to TweenMax and the stagger, onCompleteAll, and onCompleteParams are now function parameters instead of special properties in the vars object.
  • invalidate() any TweenLite/Max or TimelineLite/Max to force a re-initialization. This can be very useful if you want to reuse/restart a tween/timeline without having it revert to its starting values.
  • TweenLite has a “currentTime” property now, so it’s easy to find out exactly how far along a TweenLite is and/or make it skip to a certain point.
  • Added onReverseComplete callback (and event dispatching in TweenMax/TimelineMax) so that you can take action when a tween/timeline finishes returning to its beginning after having been reversed. Also added onRepeat callback to TweenMax and TimelineMax.
  • New “transformMatrix” plugin allows you to tween a DisplayObject’s/MovieClip’s transform.matrix properties. Either use the normal a, b, c, d, tx, and ty properties or convenient x, y, scaleX, scaleY, skewX, skewY, and rotation values. Yes, that’s right – you can easily skew a DisplayObject/MovieClip now!
  • New “motionBlur” plugin applies a realistic directional blur based on the velocity and angle of a DisplayObject’s x/y movement. See an interactive demo in the updated Plugin Explorer (below). MotionBlurPlugin is a membership benefit of Club GreenSock for all “Really Green”, “Shockingly Green”, and corporate members.
  • New “physics2D” plugin delivers simple physics functionality for tweening a DisplayObject’s x and y coordinates based on a combination of velocity, angle, gravity, acceleration, accelerationAngle, and/or friction. See an interactive demo in the updated Plugin Explorer. Physics2DPlugin is a membership benefit of Club GreenSock for all “Really Green”, “Shockingly Green”, and corporate members.
  • New “physicsProps” plugin delivers simple physics functionality for tweening any property of any object using velocity, acceleration, and/or friction. See an interactive demo in the updated Plugin Explorer. PhysicsPropsPlugin is a membership benefit of Club GreenSock for all “Really Green”, “Shockingly Green”, and corporate members.
  • New “dynamicProps” plugin that allows you to associate a function with a property so that every time the tween is updated, it calls that function to get the end value for the associated property. You could, for example, tween an object’s x/y coordinates to wherever the mouse is. See an interactive demo in the updated Plugin Explorer (below). DynamicPropsPlugin is a membership benefit of Club GreenSock, replacing ColorTransformPlugin which is now available to non club members.
  • The AS3 flavor of TweenMax now has internal algorithms that can execute certain easing calculations 35-80% faster (overall speed boost is closer to 3-15%)! You just need to activate the eligible easing classes (options include Linear, Quad, Cubic, Quart, Quint, and Strong). Example: FastEase.activate([Strong, Linear, Quad]).

Freue mich schon auf den Einsatz der neuen Funktionen.

Links:

http://blog.greensock.com/v11/
http://www.video-flash.de/index/greensock-tweening-engine-11/

, , , , , , , , ,

No Comments