Evento Flash/Flex/AIR en Barcelona
En MadeInFlex, el grupo de usuarios de Adobe Flex en España, hemos preparado un evento presencial para el día 16 de Agosto en Barcelona.
Se trata de un evento muy especial ya que traerá a varios Adobe Flash Platform Evangelists de distintos puntos de Europa y se darán charlas acerca de los últimos avances en tecnologías Flash, Flex y AIR.
A continuación programa y pequeña bio de los ponentes: (todas las charlas serán en inglés)
Tom Krcha :: P2P with FP 10.1
![]() |
Tom lleva cerca de 10 años desarrollando en el mundo Flash. Tiene mucha experiencia en soluciones basadas en flash media streaming. Nos hablará sobre P2P con FP 10.1. Aquí está el enlace a su blog. |
Mihai Corlan :: Building Multiscreen apps
![]() |
Lleva en Adobe desde 2006 y desde junio del 2008 como Platform Evangelist sobre Flex, AIR, LCDS, BlazeDS y ColdFusion. Su charla se centrará en la construcción de aplicaciones multiscreen. El enlace de su blog. |
Mark Doherty :: Mobile development with AIR 2.5
![]() |
Mark esta centrado en plataformas móbiles y desarrollo con tecnologías Flash. Hablará del desarrollo de aplicaciones mobiles con AIR 2.5. Su blog. |
Mike Jones :: Flash CS5 and Flash Builder 4 integration
![]() |
Lleva trabajando desde 1996 con tecnologias Flash. Es experto en Flash Professional, Flash Builder, Flash Catalyst, ActionScript, Flex y AIR. Hablará sobre Flash CS5 y la integración con Flash Builder 4. Aquí os dejo el enlace de su blog. |
Michael Chaize :: Migrating from Flex 3.0 to Flex 4.0
![]() |
Trabaja en Adobe Francia desde 2006. Está centrado en la sección Entreprise (LiveCycle & Flex). Nos explicará como migrar de Flex 3.0 a Flex 4.0. Aqui os dejo el enlace de su blog. |
Dónde es y cuánto vale?
MIF onsite IV tendrá lugar en el hotel H10 Marina Barcelona: Av. Bogatell, 64-68 y es 100% gratuito para todos los inscritos.
Las conferencias serán de 16h a 19h y posteriormente se podrá charlar personalmente con los ponentes en la terraza del lugar.
Registro
El registro se hace a través de la página oficial del User Group y las plazas son limitadas.
Para registrate tienes que loguearte con tus credenciales de adobe.com y clicar en RSVP.
Os esperamos a todos!!
55 desarrolladores Flash
La semana pasada abrí una encuesta para saber qué tecnología Flash está utilizando la gente. Nada complejo… la pregunta era “¿Cuál es la tecnología Flash que utilizas más en el día a día?”. El sondeo lo hice mediante un servicio online y participaron 55 personas. Los resultados fueron los siguientes:

Las conclusiones que surgieron tras cerrar la encuesta acerca del alto porcentaje de desarrolladores AS2 fueron básicamente:
- Dptos. de técnicos: éstos se toman muy en serio las políticas de actualización. Obviamente no ven que Flash Player > 8 les pueda aportar ningún valor y por lo tanto se quedan en versiones anteriores. Estoy seguro que en algún caso puede ayudar convencer al dpto. comercial de las bondades del AVM2 vs AVM1 para que pueda darse el cambio de versión.
- Flash Lite: Aquí no hay nada que discutir. Si se quiere desarrollar móvil se tiene que utilizar AS2. Esto hasta que no salga el player 10.1 para algún que otro dispositivo los próximos días.
- La tecnología como medio y no como fin: Sin darnos cuenta estamos inmersos en este torbellino de continua explosión mediática que forman el par tecnología+internet. Nadie lo vive más que nosotros, que estamos suscritos a 900 RSS de blogs, a 1553 cuentas de twitter y encima escribimos en tres o cuatro blogs acerca de qué? de tecnología claro! A menudo nos olvidamos de la parte más esencial de todo esto: crear software que funciona. Nos hemos acostumbrado a vivir en un mercado tecnológico en el que las necesidades ya no surgen sino que se crean. Esto es bueno porque promueve la evolución del mundo digital pero tiene su lado oscuro, el esclavismo al que nos somete. Bueno, me he puesto filosófico ahora… pero es cierto, no?
Gracias a todos los participantes y en especial a los que se mojaron un poco más @fernandocomet, @elisma, @wadus, @supremo_tata, @sinsonido, @solisarg
Material: Integrando PHP5 y AS3 a través de AMF
Dejo aquí todo el material de la charla que ofrecí en la PHPConfrence el viernes:
Slides

Ejemplo 1: Chat AMF

AMF File Chat: Chat realizado con WebOrb para PHP + Flex.
Se puede ver en acción la implementación de mensajería de WebOrb para PHP y un sistema de transferencia de archivos a través del canal del Chat.
Ejemplo 2: Gestor Contactos

Gestor de Contactos realizado con PHP + Flex. Se puede ver cómo con una misma base de código, solo cambiando las rutas de los gateways AMF se puede atacar a un mismo servicio a través de las diferentes implementaciones presentadas: Weborb, AMFPHP y Zend_AMF.
Nota 1: Zend framework debe estar instalado en el include_path de PHP para que funcione con Zend_AMF. Las demás implementaciones funcionan out of the box.
Nota 2: Se debe crear la base de datos MySQL gestor_contactos y ejecutar el script SQL contra ésta para crear la tabla contacto.
Enjoy!
PHP Conference 2009
Vuelve la PHP Barcelona Conference en su edición 2009 los días 30 y 31 de Octubre, este año con una apuesta mucho más fuerte e interesante. Para empezar el evento dura dos días durante los cuales habrá tres charlas/workshops paralelos continuamente.
Este año tengo el placer de participar como ponente dando la charla “Integrando PHP5 y ActionScript a través de AMF“, así que si vas a estar por ahí y te interesa ver cómo se integran PHP y Flash/Flex no puedes perderte esta charla!
La charla se centrará en el protocolo AMF, sus distintas implementaciones en PHP, casos de uso que cubran características interesantes, algunos benchmarks, etc…
Volviendo al evento, este año se volverá a celebrar en el Citilab de Cornellà de Llobregat, muy cerca de Barcelona ciudad.
El programa ya está cerrado y se puede ver en el apartado correspondiente de la web del evento.
Los ponentes: Derick Rethans, Pedro Cambra, Lorna Mitchel, Lorenzo Alberton, Joan Llenas (yo mismo), Rasmus Lerdorf, Kuassi Mensah, Chema Garrido, Erik Schultink, Lars Jankowfsky, Davide Ferrari, Stefan Koopmanschap, Lars Jankowfsky, Àlex Puig, Enrico Zimuel, Hans Zaunere, Damien Seguy, Davide Mendolia, Kuassi Mensah, Jordi Roura, Sebastian Bergmann, Kuassi Mensah, Victor Guardiola, Fabien Potencier, Fernando Palomo, Jordi Catà, David Zuelke… son un montón de ponentes!
Las charlas se darán en Inglés y Castellano dependiendo de la preferencia del ponente. En el apartado de charlas se puede diferenciar el idioma a través de un icono.
Si tienes que viajar y reservar estancia los organizadores proponen algunas opciones.
Y nada más solo queda que te registres!
Nos vemos
2009 Fx+Fc AUG tour: despedida y cierre
Bueno, ha sido un día intenso…
El evento ha sido todo un éxito y me siento muy satisfecho en todos los aspectos. He aprendido un montón, he visto a viejos amigos, he conocido a nuevos, he visto de primera mano mis nuevos juguetitos en acción… me he pasado todo el dia spameando por Twitter las charlas…
Pido disculpa a los que me siguen en Twitter y no les interesa Flex… habrán flipado! por otra parte agradezco a los que habéis estado comentando la jugada y me habéis animando ( aunque no os he podido responder por falta de aliento lo he apreciado, de verdad! a ver si mañana o pasado repaso las preguntas y las respondo en un post separado ). La verdad es que al final ha llegado un momento en el que sentía una responsabilidad muy grande por retransmitir el evento, que tontería… Tú dame el canto de una moneda y te monto un escenario XD
En madeinflex he posteado un resumen del evento.
Flash Builder 4 y Flash Catalyst en labs
Solo una recordatorio para aquellos que todavía no se hayan enterado…
Ya estan disponibles las beta 1 de Flash Builder 4 y Flash Catalyst!
Más info:
AIR Download Manager

El otro día se me planteó la duda de si sería posible hacer algo parecido a un gestor de descargas con AIR. Después de experimentar un poco con las APIs de network junto con un poco de investigación de cómo trabaja el protocolo HTTP internamente he sacado un prototipo de lo que podría ser el core de este hipotético gestor de descargas.
Aquí enumero las funcionalidades que se esperan de un gestor de descargas y si están implementadas en el prototipo:
- pause / resume download:
Esta es la funcionalidad más importante y esencial de un gestor de descargas. La posibilidad de pausar / reanudar el proceso de descargan tantas veces como sea necesario.
Esta funcionalidad si está implementada en el prototipo. - multipart download:
Esta funcionalidad no es esencial pero si un plus a tener en cuenta para cualquier gestor de descargas que se precie. La posibilidad de segmentar la descarga de un mismo archivo en varios hilos de tal forma que el proceso de descarga sea más rápido, hasta un 200% más rápido (existen limitaciones en la velocidad de descarga de las conexiones individuales).
Esta funcionalidad si está implementada en el prototipo. - Posibilidad de persistir la sesión de descarga:
Esta funcionalidad es esencial sobretodo si se quiere descargar grandes archivos que requieren que se reanude la descarga después de cerrar la aplicación o incluso hacer un reboot del sistema operativo. También es útil en el caso de caídas de red o cuelgues de la aplicación (crash recovery).
Esta funcionalidad no está implementada en el prototipo.
Descarga ejemplo
Descarga el código fuente del prototipo
JSProxy: javascript desde actionscript
Una forma sencilla de gestionar todo el javascript que podamos necesitar en una aplicación flash/flex utilizando exclusivamente actionscript.
Un ejemplo (con Flash):
-
import com.joangarnet.js.JavaScript;
-
import flash.events.Event;
-
-
var flashAppId:String = 'JSProxyFlash';// movie id in the html host
-
test1();
-
test2();
-
function test1():void{
-
// some javascript to inject in the DOM
-
var js1:XML =
-
<script type="text/javascript">
-
<![CDATA[
-
function sayHello(){
-
alert( "hello" );
-
}
-
Utils = {
-
getURL:function(){
-
return window.location.href.toString();
-
}
-
}
-
var z = 10;
-
var a = {
-
b:{
-
c:{
-
prop1:"hola 1",
-
prop2:"--"
-
}
-
}
-
};
-
]]>
-
</script>;
-
var javascript1:JavaScript = new JavaScript(flashAppId);
-
javascript1.addEventListener(Event.COMPLETE,javascript1Complete);
-
javascript1.js = js1.toString();
-
}
-
// the javascript is ready to use from now on
-
function javascript1Complete(event:Event):void{
-
var javascript1:JavaScript = event.target as JavaScript;
-
trace( javascript1.getScope("Utils").getURL() );
-
javascript1.getScope(JavaScript.WINDOW).sayHello();
-
trace( javascript1.getScope(JavaScript.WINDOW).z );
-
trace( javascript1.getScope("a.b.c").prop1 );
-
javascript1.getScope("a.b.c").prop2 = "hola 2";
-
trace( javascript1.getScope("a.b.c").prop2 );
-
}
-
// let's try to load an external library
-
function test2():void{
-
var javascript2:JavaScript = new JavaScript
-
(
-
flashAppId,
-
"http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"
-
);
-
javascript2.addEventListener(Event.COMPLETE,javascript2Complete);
-
}
-
// the library is loaded and ready to be used
-
function javascript2Complete(event:Event):void{
-
var javascript2:JavaScript = event.target as JavaScript;
-
trace( javascript2.getScope("jQuery.browser").version );
-
}
Se puede ver se puede trabajar de dos formas: inyectar javascript o cargar archivos .js externos en tiempo de ejecución.
Una vez se han inyectado/pedido dichos scripts y el javascript engine del navegador los ha interpretado disponemos de un callback que nos avisa de que ya podemos trabajar con ellos.
Utilizando namespaces
¿Qué es?
Un namespace (espacio de nombres) es un contenedor abstracto que nos permite controlar la visibilidad de propiedades y métodos. Es algo parecido al concepto de package.
Por defecto disponemos de cuatro namespaces: private, protected, public e internal. Estos espacios de nombre tiene un comportamiento especial que permite restringir el acceso a miembros teniendo en cuenta una serie de reglas con respecto a la herencia o al package al que pertenecen.
Aparte de éstos cuatro nosotros podemos definir nuestros propios namespaces.
Un ejemplo
Definimos un namespace:
-
package com.joangarnet.namespaces{
-
public namespace jg_internal = "http://www.joangarnet.com/namespaces/jg_internal";
-
}
Aplicamos el namespace a un miembro de una clase:
-
package com.joangarnet.controls{
-
public class Window{
-
import com.joangarnet.namespaces.jg_internal;
-
private var propiedad:String = "No soy accesible";
-
jg_internal var propiedad:String = "Si soy accesible";
-
}
-
}
Vemos que tenemos dos propiedades "propiedad" con el mismo identificador, lo cual puede parecer erróneo. Lo que sucede al compilar es que al tener visibilidades diferentes, estan en espacios de nombres diferentes, los identificadores no colisionan.
Yo personalmente he utilizado raramente esta característica del lenguaje, pero se me ocurren algunas [pseudo]situaciones interesantes dónde puede ser útil:
Miembros pseudo privados
Hace un par de posts me quejaba del hecho que, en algún caso puntual algunas clases del SDK de Flex lo ponían dificil a la hora de proporcionar extendibilidad. La causa de ésto era la definición de miembros privados en algunas clases que entorpecían y, alguna vez incluso imposibilitaban el poder extenderlas. En un par de ocasiones he tenido que recurrir a una técnica llamada monkey patching para poder extender una clase determinada.
Una posible forma de eviar esto pasaría por definir un espacio de nombres semánticamente parecido a private (¿os suena mx_internal?) que nos permitiera extender los miembros de la clase de forma responsable, siendo conscientes de que estamos utilizando un namespace especial y que tenemos que andar con especial ojo en lo que hacemos.
Pseudo sobrecarga de métodos
El hecho que podamos definir un mismo método en diferentes espacios de nombres dentro de una misma clase nos hace recordar a la sobrecarga de métodos disponible en otros lenguajes como Java. Se puede obtener una funcionalidad parecida utilizando namespaces:
-
<?xml version="1.0" encoding="utf-8"?>
-
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="inicio()">
-
<mx:Script>
-
<![CDATA[
-
namespace air;
-
namespace flex;
-
private var runtime:Namespace;
-
private function inicio():void{
-
if( Capabilities.playerType == "Desktop" ) {
-
runtime = air;
-
}else{
-
runtime = flex
-
}
-
runtime::guardar();
-
}
-
-
air function guardar():void {
-
trace( "Guardar en filesystem" )
-
}
-
-
flex function guardar():void {
-
trace( "Guardar en el server" )
-
}
-
]]>
-
</mx:Script>
-
</mx:Application>
Esto ejecutado en un navegador y ejecutado en una aplicación AIR muestra dos resultados diferentes.
Ejecución pseudo condicional
La compilación condicional disponible en Flex Builder es una funcionalidad muy útil (de la que hablaré en un futuro post en madeinflex) que permite definir bloques que se ejecutan dependiendo si se ha asignado un valor determinado desde los parámetros de compilación. Esto permite por ejemplo tener rutinas de debug que solo se compilan durante el desarrollo y que en el momento de salir a producción con un simple cambio en un valor desaparecen por completo.
Con namespaces y siguiendo exactamente el mismo sistema que en el ejemplo anterior podemos hacer algo parecido como se ve en el siguiente ejemplo:
-
<?xml version="1.0" encoding="utf-8"?>
-
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="inicio()">
-
<mx:Script>
-
<![CDATA[
-
namespace desarrollo;
-
namespace produccion;
-
-
public static var entorno:Namespace;
-
-
private function inicio():void{
-
entorno = produccion;
-
entorno::guardar();
-
}
-
-
desarrollo function guardar():void {
-
trace( "Estoy en desarrollo" )
-
}
-
-
produccion function guardar():void {
-
trace( "Estoy en producción" )
-
}
-
]]>
-
</mx:Script>
-
</mx:Application>
Enlaces relacionados
* namespace * Namespace
Nuevo Flex!
Fascinante!!!! esta vez se han pasado cuatro calles!!!!!
Ahora puedes construir tu propio Flex a medida! Puedes hacerlo a través de un configurador muy visual hecho con.... Flex!
Además esta vez tenemos una web especialmente creada para Flex!
Corre, serás uno de los primeros en verlo ;)
[ via faratasystems.com ]
















