AS3 / Flex2 Arrays tipados

Dos posibles soluciones al tipado fuerte para arrays ( TypedArray )

Flex2:

JAVA:
  1. [ArrayElementType("String")]
  2. public var newStringProperty:Array;

Flex2 / AS3:

JAVA:
  1. // sacado de: http://livedocs.macromedia.com/labs/as3preview/docs/00000087.html#120171
  2. package
  3. {
  4.     public dynamic class TypedArray extends Array
  5.     {
  6.         private var dataType:Class;
  7.  
  8.         public function TypedArray ( typeParam:Class, ...args )
  9.         {
  10.             dataType = typeParam;
  11.             var n:uint = args.length
  12.             if (n == 1 && (args[0] is Number))
  13.             {
  14.                 var dlen:Number = args[0];
  15.                 var ulen:uint = dlen
  16.                 if (ulen != dlen)
  17.                 {
  18.                     throw new RangeError("Array index is not a 32-bit unsigned integer ("+dlen+")");
  19.                 }
  20.                 length = ulen;
  21.             }
  22.             else
  23.             {
  24.                 for (var i:int=0; i <n; i++)
  25.                 {
  26.                     // type check done in push()
  27.                     this.push(args[i])
  28.                 }
  29.                 length = this.length;
  30.             }
  31.         }
  32.  
  33.         AS3 override function concat(...args):Array
  34.         {
  35.             var passArgs:TypedArray = new TypedArray(dataType);
  36.             for (var i:* in args)
  37.             {
  38.                 // type check done in push()
  39.                 passArgs.push(args[i]);
  40.             }
  41.             return (super.concat.apply(this, passArgs));
  42.         }
  43.  
  44.         AS3 override function push(...args):uint
  45.         {
  46.             for (var i:* in args)
  47.             {
  48.                 if (!(args[i] is dataType))
  49.                 {
  50.                     args.splice(i,1);
  51.                 }
  52.             }
  53.             return (super.push.apply(this, args));
  54.         }
  55.  
  56.         AS3 override function splice(...args):*
  57.         {
  58.             if (args.length> 2)
  59.             {
  60.                 for (var i:int=2; i<args.length; i++)
  61.                 {
  62.                     if (!(args[i] is dataType))
  63.                     {
  64.                         args.splice(i,1);
  65.                     }
  66.                 }
  67.             }
  68.             return (super.splice.apply(this, args));
  69.         }
  70.  
  71.         AS3 override function unshift(...args):uint
  72.         {
  73.             for (var i:* in args)
  74.             {
  75.                 if (!(args[i] is dataType))
  76.                 {
  77.                     args.splice(i,1);
  78.                 }
  79.             }
  80.             return (super.unshift.apply(this, args));
  81.         }
  82.     }
  83. }

Delegando eventos en JavaScript :: Delegate.create()

Siguiendo el rollo del post anterior, en el que queríamos ejecutar un callback de un evento en el ámbito de una clase concreta, pues otra manera mucho más cómoda de hacerlo para un desarrollador ActionScript sería con una clase Delegate para JavaScript.
La adaptación sería esta:

JavaScript:
  1. /* Delegate.create
  2. * Ejecuta una función en el contexto del objeto original
  3. * @param obj(Object) el objeto dónde ejecutar la función [func]
  4. * @param func(Function) referencia a la función a ejecutar
  5. * @param params(Array) array de parámetros que enviamos a func
  6. */
  7. Delegate = {
  8.     create: function (obj, func, params)
  9.     {
  10.         var f = function()
  11.         {
  12.             return func.apply(obj, params);
  13.         };
  14.         return f;
  15.     }
  16. }

Y un ejemplo:

JavaScript:
  1. Delegate = {
  2.     create: function (obj, func, params)
  3.     {
  4.         var f = function()
  5.         {
  6.             return func.apply(obj, params);
  7.         };
  8.         return f;
  9.     }
  10. }
  11.  
  12. function clazz()
  13. {
  14.     this.msg = "¡Estoy en clazz!";
  15.     this.f();
  16. }
  17. clazz.prototype.f = function ()
  18. {
  19.     var img = new Image();
  20.     img.onload = Delegate.create(this, this.callback, ["param1", "param2"]);
  21.     img.src = "on.gif";
  22. }
  23. clazz.prototype.callback = function(p1, p2)
  24. {
  25.     alert( this.msg );
  26.     alert( p1 );
  27.     alert( p2 );
  28. }
  29. var c = new clazz();

Eventos javascript dentro de clases

En javascript, cuando desde dentro de una clase registramos un evento y queremos que dentro del callback de dicho evento sigamos dentro del ámbito de la clase simplemente no existe manera de hacerlo...
Siempre que se registra un evento a un elemento, el ámbito de su callback es el mismo elemento.
La librería javascript prototype nos viene con una función (la homóloga de mx.utils.Delegate.create() de AS2.0) que nos permite hacer tal cosa.
Sería así:

Actionscript:
  1. Event.observe(this.mi_elemento, 'click', this.mi_metodo.bindAsEventListener(this), false);

Enlaces de interés:
* Prototype And The This Keyword
* Prototype.js
* The this keyword

Comunicación AS3 AS2

Interesante artículo de Peter Ent en el que explica como comunicar un una aplicación hecha para FlashPlayer 9 con un swf hecho para Player 6, 7 u 8 cargado en dicha aplicación.
Para los que no pueden esperar avanzo que la clave está en la clase LocalConnection().

Enlace al post:
* Using ActionScript 2 SWFs with Flex 2

AS3.0 y AVM2 a fondo

Gary Grossman nos cuenta como sacar provecho de AS3 y la nueva máquina virtual (AVM2 ) mediante ejemplos.

* AS3 Tuning
[via andre-michelle]

Google Browser Sync

Extensión para Firefox que permite sincronizar cuentas (favoritos, passwords, historial, cookies, tabs y ventanas) entre ordenadores:

Página del proyecto:
* Google Browser Sync
[vía sephiroth]

bugs/soluciones para FP9

Se ha publicado un listado de problemas/soluciones en el desarrollo para Flash Player 9.

Flash Player TechNote:
* Flash Player 9 Emerging Issues
[via moock]

flashextensibility :: directorio de recursos JSFL

El sitio flashextensibility ha abierto como repositorio open source de scripts JSFL.
Sin duda un buen sitio para los que gustan extender las características del IDE de Flash.

Enlace al sitio:
* flashextensibility

Talleres de verano Sublash 2006 ( IV edición )

IV edición Talleres de verano Subflash 2006.
Este año no va a ser menos. En Subflash se está organizando la quedada Flashera veraniega.
Esta vez se hace en Asturias. Otros años se hizo en Teruel (2003), Madrid (2004) y Barcelona (2005). El año que viene puede que se haga en tu ciudad!! :)
pero por si acaso no es así... si eres desarrollador web, quieres conocer a otros de tu tribu, asisitir a charlas interesantes, y estas libre el fin de semana del 18, 19 y 20 de Agosto de 2006 rellena el formulario del microsite del evento: http://www.subflash.com/talleres/2006/
Por cierto, uno de los talleres lo impartiré yo mismo:
- Flex 2 será gratis pero vale mucho,
muestra del framework de Flex 2
: Como indica el nombre el taller será un repaso de los componentes y funcionalidades que lleva el framework de Flex2. Una visita guiada por los componentes y por todas las funcionalidades que hacen de Flex2 una gran herramienta. Apto para todos los públicos :)
Otros talleres serán:
- Dirección de Arte en Proyectos
- Flash y dispositivos Móviles
- Sistemas de representación de redes
sociales y de información

- AJAX

Lugar
Talleres: en el Ciber Centro La Lila. Oviedo, Asturias.
Alojamiento: en un albergue de Lugo de Llanera, muy cercano a Oviedo.

Fechas
Fin de semana del 18, 19 y 20 de Agosto de 2006.

Precio
Opción Completa - 65€ (aprox)
Opción Asturias - 48€ (aprox)
Opción Oyente - GRATUITA

Inscripciones
http://www.subflash.com/talleres/2006/php/inscripciones.php

ActionStep tiene blog

El framework ActionStep ya tiene blog: http://www.actionstep.org/