Google Analytics en Adobe AIR: Polaris
Buscando información respecto a la API de Google Analytics, me encontré con esta pequeña aplicación realizada en Adobe AIR. Si bien no brinda toda la información a la que podemos acceder desde Google Analytics, es una manera sumamente rápida y efectiva de acceder a la data de mayor importancia. Me pareció un excelente ejemplo de lo que se puede lograr haciendo uso de un web service y de Adobe AIR.
Sitio con información de la aplicación:
http://www.desktop-reporting.com/
Descarga:
http://www.desktop-reporting.com/polaris.html
novedades en Flash CS5
Novedad de Flash CS5
Soporte para iPhone.
A su vez, se encargó de remarcar lo que de algún modo intuíamos; si bien Flash permitirá desarrollar aplicaciones para iPhone, esto no quiere decir que el iphone vaya a soportar el formato swf. Luego de un proceso, lo que se hace es crear el formato nativo de aplicaciones para iPhone (.ipa). iPhone NO va a soportar fomato SWF.
Mejoras en edición de videos y en la herramienta Decco:
En cuanto a los videos, los mismos se podrán reproducir en tiempo de edición desde la IDE de Flash, sin necesidad de exportar la película. De este modo, se puede visualizar el video mientras uno edita sus propiedades del mismo (x, y, width, height, etc).
AS3 - método unloadAndStop();
Hasta la versión 9 de FP, contábamos con el método unload() de la clase Loader para proceder a la descarga de aquellos contenidos que eran cargados por medio del método load() de dicha clase. Ahora bien, el problema surgía cuando se generaba la descarga de una película y:
Si contabas con audio o video, estos continuaban con su reproducción.
Continuaban abiertas aquellas conexiones que no han sido cerradas (netConnection, netStream, localConnection, etc)
Continuaban consumiendo recursos todos aquellos procesos de los cuales prescindimos al descargar la película (listeners que, sería razonable, sean eliminados al descargar la película)
Si bien existen motivos para que esto sea así, indudablemente es una molestia. A pesar de que la optimización de recursos es parte de nuestro desempeño, tratar de eliminar absolutamente todas aquellas referencias innecesarias que están haciendo que el Garbage Collector no las tenga en cuenta, es una actividad por demás engorrosa, molesta y llena de inconvenientes durante el proceso.
Por suerte, desde Flash Player 10, contamos con una solución. Solución parcial y aún con varios ajustes por hacer, pero solución al fin:
El método unloadAndStop();
Por medio del mismo no sólo se procede a la descarga de la película swf, sino que se intenta anular aquellos contenidos secundarios del mismo y detener la ejecución de comandos de dicho archivo, por lo tanto:
Se detienen aquellos sonidos que se estén ejecutando.
Se eliminan los listeners que hayan sido añadidos al escenario.
Se eliminan los eventos enterFrame, frameConstructed, exitFrame, activate y deactivate.
Se detienen los temporizadores.
Se eliminan las instancias de cámara (Camera).
Se eliminan las instancias del mic (Microphone).
Se detienen los clips de película.
En vistas a la optimización de recursos, definitivamente es mucho más ventajoso que el método unload(), y evita en gran parte aquellos malabares que debíamos hacer antes de eliminar una película. De todos modos, si bien este es el camino, considero que aún queda mucho por hacer al respecto; sería mucho más productivo nuestro tiempo, y por ende, más interesantes nuestros desarrollos, si el proceso para mantener optmizadas nuestras películas fuese más transparente de lo que actualmente es. Esperemos se mejore día a día en esta cuestión y encontremos nuevas soluciones en versiones posteriores de FP. Si bien queda mucho por hacer, por suerte, el método unloadAndStop() es un buen indicio de estar yendo por el buen camino…
AS3 - SoundMixer.computeSpectrum();
Les dejo esta pequeña clase donde se hace uso del método computeSpectrum() de la clase SoundMixer en modo FFT (Fast Fourier Transform). Por medio del método computeSpectrum() se puede tomar la onda de un sonido que se está reproduciendo., y lluego almacenarla dentro de un ByteArray. Teniendo acceso al mismo, podemos generar representaciones visuales de dichas ondas. Este es un sencillo ejemplo que desarrollé a modo de clase para que sea personalizable, escalable y reutilizable; verán al descargar los archivos que no es de gran complejidad, y lo más interesante es la sencillez de su implementación; modificando algunos parámetros, podemos lograr distintos gráficos, que con un poco de ingenio e imaginación, se pueden adaptar a cualquier proyecto.
click aca para descargar los archivos!
(eliminé el MP3 del .rar para facilitar la descarga. Para que puedas ver el ejemplo en funcionamiento, mové un mp3 a la carpeta sound, y renombrarlo como song.mp3)
index.fla:
Hay cuatro bloques de código:
En primer lugar, importamos la clase:
import com.FrequencyVisualization;
Luego cargamos de manera externa un sonido:
var soundReq=new URLRequest(”sound/song.mp3″);
var typeSound = new Sound();
typeSound.load(soundReq);
typeSound.play(0);
A continuación, creamos un objeto al cual le vamos a asignar una serie de propiedades, y que usaremos para enviarle a la clase. Las propiedades de dicho objeto se van a tener en cuenta dentro de la clase a la hora de dibujar (y redibujar) los contenidos del espectro de sonidos. Se le pueden agregar unos cuantos parámetros más, pero con estos poquitos a mi me alcanzó (al menos hasta ahora) para poder aplicarlo prácticamente a cualquier desarrollo sin tener que hacer grandes modificaciones: Los parámetros a enviar son el color de las barras del espectro (barFill), la cantidad de barras (barsNumber), el ancho de las mismas y su separación (barWidth y barsSeparation) y por último, un valor alpha (barAlpha). Más abajo hay algunas imágenes para ver como combinando distintos valores para estas propiedades, podemos obtener resultados considerablemente distintos.
var visObj:Object = new Object();
visObj.barFill = 0xff0066;
visObj.barsNumber=10;
visObj.barWidth = 2;
visObj.barsSeparation = 2;
visObj.barAlpha = 0;
Para concluir, creamos una instancia de la clase FrequencyVisualization, y le pasamos como parámetro el objeto que acabamos de crear:
var eVis:FrequencyVisualization=new FrequencyVisualization(visObj);
eVis.x=250;
eVis.y=stage.stageHeight-30;
stage.addChild(eVis);
Eso es todo
Los programadores tienen con qué entretenerse dentro de la clase FrequencyVisualization, y quienes no tengan interés en entender códigos ni enredarse en su lógica, tienen un modo sencillo e intuitivo para que en cuatro pasos puedan contar con su ecualizador…
Algunas alternativas:
Modificando los distintos valores de las propiedades que asignamos al objeto que enviamos como parámetro a la clase, obtenemos diversos resultados:
var visObj:Object = new Object();
visObj.barFill = 0xff0066;
visObj.barsNumber=10;
visObj.barWidth = 2;
visObj.barsSeparation = 2;
visObj.barAlpha = 0;
var visObj:Object = new Object();
visObj.barFill = 0xff0066;
visObj.barsNumber=50;
visObj.barWidth = 2;
visObj.barsSeparation = 1;
visObj.barAlpha = 1;
var visObj:Object = new Object();
visObj.barFill = 0×00ff00;
visObj.barsNumber=10;
visObj.barWidth = 2;
visObj.barsSeparation = 2;
visObj.barAlpha = 1;
var visObj:Object = new Object();
visObj.barFill = 0×000000;
visObj.barsNumber=5;
visObj.barWidth = 1;
visObj.barsSeparation = 3;
visObj.barAlpha = 1;
var visObj:Object = new Object();
visObj.barFill = 0xFF9900;
visObj.barsNumber=10;
visObj.barWidth = 10;
visObj.barsSeparation = 2;
visObj.barAlpha = 1;
var visObj:Object = new Object();
visObj.barFill = 0×339999;
visObj.barsNumber=10;
visObj.barWidth = 10;
visObj.barsSeparation = 2;
visObj.barAlpha = 0.2;
NOTA: Al trabajar sobre esta clase, establecí el modo FFT (Fast Fourier Transform) debido al tipo de espectro de sonido que debía representar. El método FFT nos devuelve datos del espectro de frecuencias en lugar de datos de forma de onda. En breve voy a escribir un post con clases y ejemplos de representaciones visuales de datos de forma de onda, en lugar de espectros de frecuencia…veremos que se pueden lograr otras animaciones realmente interesantes.
Saludos!
FlashTracer, Add-on para Firefox
Seguramente muchos conozcan y hagan uso de este add-on, pero para quien sea una novedad, va a encontrar una enorme solución en este pequeño, sencillo y facil de implementar plug-in para Firefox.
Por medio del mismo, podemos visualizar todos los mensajes de salida (outputs generados por la función trace() en Flash) que se ejecuten en un SWF desde la ventana del navegador…
Para que funcione, debemos tener instalada la versión Debug de Flash Player. Se puede hacer la descarga del mismo desde el siguiente link:
http://www.adobe.com/support/flashplayer/downloads.html
Y aquí el link para la descarga del add-on:
https://addons.mozilla.org/en-US/firefox/addon/3469
una vez instalado, lo ejecutamos desde el panel Herramientas de nuestro navegador. Una vez abierta la extensión, en la misma se encuentran las instrucciones para vincularlo correctamente al archivo flashlog.txt (archivo de texto en el cual se almacenan todos los mensajes de salida de Flash al utilizar la versión debug de Flash Player).
Sencillo:
Dentro de nuestro FLA hacemos algún uso de la función trace:
for(var m:uint = 0; m<10; m++){
trace(m, ” - saludos desde as3Hispano.com! :)”);
}
Y al ejecutar nuestra película desde el Firefox y tener abierto Flash Tracer, veremos los mensajes de salida:

Y aquí les dejo otro modo de poder visualizar los trace() de Flash desde el navegador; esta vez, por medio de Firebug (gracias NaN!):
http://labs.findsubstance.com/2008/02/26/firebugs-console-log-flash-debugging-made-easy/
Al menos yo prefiero Flash Tracer por su implementación, y porque su uso es más sencillo; Flash Tracer directamente lee los mensajes de salida guardados en el archivo flashlog.txt, y Firebug establece una comunicación por medio de ExternalInterface para posteriormente mostrar el mensaje en la consola de salida.
Si bien uso Firebug, lo prefiero para otro tipo de soluciones…de todos modos, sobre gustos…
Saludos! ![]()
Adobe Latin Flash Tour
Lee Brimelow y Enrique Duvos (confirmados hasta ahora) estarán llevando a cabo el Adobe Latin Flash Tour. No pierdan la oportunidad de asistir; seguramente expongan las últimas novedades de la plataforma y podamos tener (aunque sea) una pequeña parte de lo que es Adobe MAX en latinoamérica.
Listado de ciudades:
Santiago, Chile Nov 7th – http://www.mmug.cl/index2.php
Buenos Aires, Argentina Nov 9th – http://adobetourargentina.eventbrite.com
Lima, Peru Nov 11th – http://www.garageflash.com/el-flash-latin-tour-llega-al-peru
Bogotá, Colombia Nov 13th – http://latinflashtour.eventbrite.com
San Jose, Costa Rica Nov 16th – http://www.techcampcostarica.com
Mexico City, Mexico – Wed Nov 18th – http://latinflashtourmx.eventbrite.com
Desde los mismos pueden proceder al registro; el evento va a ser gratuito.
sitio del evento:
- Sitio de Adobe Latin Flash Tour
AS3: Event Listeners y WeakReference (referencia débil)
Si bien en el capítulo dos del libro Flash Extremo desarrollé este tema con mayor profundidad, considero que vale la pena hacer una mención al mismo en el blog para comprender su funcionamiento y aportar un modo de adoptar una buena práctica a la comunidad de desarrolladores:
La sintaxis por medio de la cual agregamos eventos, es la siguiente:
Pero existen tres parámetros más, los cuales son de carácter opcional:
addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown, false, 0, false)
Para que el garbage collector “elimine” la referencia a aquellos eventos que ya no estamos utilizando, debemos asignar la referencia débil al declararlos. De aquí, el por qué del true del último parámetro:
Contenidos libro Proyectos Web: Flash + PHP + XML + MySQL
Mariano Makedonsky
ISBN: 987-1347-15-4
Páginas: 384
Peso: 454 grs.
1 | INTRODUCCIÓN
Conceptos básicos referentes a cada lenguaje, a fin de encarar sin problemas el desarrollo de los proyectos de este libro.
2 | WEBMAIL Y REGISTRO DE USUARIOS
En este capítulo, veremos de qué modo se realiza el registro de un usuario, cómo verificamos sus datos y, por último, haremos un webmail utilizando Flash y PHP.
3 | ADMINISTRADOR DE NOTICIAS
A lo largo de este proyecto, aprenderemos a desarrollar un administrador de noticias desde su base de datos hasta su visualización, y entenderemos por qué es tan flexible trabajar de este modo.
4 | GALERÍA DE IMÁGENES
Explicaremos paso a paso cómo crear una galería de imágenes de forma dinámica. También mencionaremos algunas particularidades para obtener mejores resultados, tanto en la producción como en la visualización de los mapas de bits.
5 | REPRODUCTOR MP3
En este capítulo, vamos a crear un reproductor de MP3, conociendo las particularidades y las ventajas que nos brinda Flash al trabajar con sonidos externos.
6 | PIZARRA DE DIBUJO
Trabajaremos con matrices, tanto del lado del cliente como del lado del servidor, a fin de crear una pizarra de dibujo que nos permita guardarlos en una base de datos y abrirlos otra vez.
7 | CALENDARIO DINÁMICO
Éste es un claro ejemplo para poner en práctica los conocimientos adquiridos hasta el momento, y nos servirá para avanzar en otros aspectos fundamentales, como el manejo de controles
8 | FORO DE DISCUSIÓN
Explicaremos cómo desarrollar un foro íntegramente en Flash, utilizando PHP como lenguaje del lado del servidor y XML como el nexo entre ambos.
9 | SISTEMA DE COMPRAS
Aplicaremos todos los conocimientos adquiridos para crear un sistema de compras online.
Archivos del libro Proyectos Web: Flash + PHP + XML + MySQL
todos los archivos de ejemplo aqui!
1 | INTRODUCCIÓN
>> http://as3hispano.com/files/proyectosweb/capitulo1.rar
2 | WEBMAIL Y REGISTRO DE USUARIOS
>> http://as3hispano.com/files/proyectosweb/capitulo2.rar
3 | ADMINISTRADOR DE NOTICIAS
>> http://as3hispano.com/files/proyectosweb/capitulo3.rar
4 | GALERÍA DE IMÁGENES
>> http://as3hispano.com/files/proyectosweb/capitulo4.rar
5 | REPRODUCTOR MP3
>> http://as3hispano.com/files/proyectosweb/capitulo5.rar
6 | PIZARRA DE DIBUJO
>> http://as3hispano.com/files/proyectosweb/capitulo6.rar
7 | CALENDARIO DINÁMICO
>> http://as3hispano.com/files/proyectosweb/capitulo7.rar
8 | FORO DE DISCUSIÓN
>> http://as3hispano.com/files/proyectosweb/capitulo8.rar
9 | SISTEMA DE COMPRAS
>> http://as3hispano.com/files/proyectosweb/capitulo9.rar
AS3 SharedObjects
SharedObjects (también conocidos como SO u Objetos Compartidos en español) son las Cookies de Flash. Las mismas nos permiten almacenar información limitada de datos en el equipo de un usuario, o en un servidor. Veremos que si bien pocas veces hacemos uso de ellas, son de una enorme utilidad y repercuten de manera positiva en la experiencia de usuario (por más de que a nivel conciente no lo perciban).
Flash utilisa los SO de manera local y de manera remota. En este post abarcaremos la manera local de trabajar con ellas.
Esta posibilidad de almacenar info en el sistema del usuario, pone a nuestra disposición una enorme gama de posibles soluciones que si bien no siempre son determinantes para el funcionamiento de un desarrollo, indudablemente mejoran la experiencia:
¿Alguna vez notaste que el reproductor de videos de Youtube conserva siempre el último volumen que seteaste, por más de que cierres el sitio y vuelvas?
Al igual que Youtube, muchos players hacen esto, y la manera de lograrlo es justamente por medio del uso de SharedObjects. La pregunta anterior me llena de curiosidad. La hago con bastante frecuencia, y salvo pocos desarrolladores, la mayoría no sabe que la web de videos hace eso con el volumen. Quizas a muchos les parezca un dato menor, o incluso imperceptible; a nivel consciente no estamos pendiente del volumen, pero brindar estas pequeñas soluciones, indudablemente mejoran la experiencia de navegación y la interacción con las aplicaciones; nos facilitan su manejo y por sobre todas las cosas, muchas veces logran optimizar nuestros tiempos y focalizarlo en lo que realmente nos interesa.
Pero el alcance de los SO es mucho más potente y les podemos dar los más diversos usos; cuando comiencen a pensar en posibles soluciones, seguramente le vengan a la cabeza muchísimas ideas y posibilidades. Sí, prácticamente todas ellas, son válidas.
Veamos como usarlas en Flash:
En primer lugar, debemos declarar una instancia de la clase SharedObject:
mySharedObject = SharedObject.getLocal(”as3hispano”);
Por medio del método getLocal() indicamos el nombre que llevará nuestro SO y el cual utilizaremos tanto para leer como para guardar valores.
Cómo almacenar valores:
Una vez que contamos con nuestra instancia, a la propiedad data de la misma, podemos asignarle los atributos que queremos almacenar y luego leer. Suponiendo que queramos almacenar un valor numerico, lo hacemos del siguiente modo:
mySharedObject.data.volumeSO = 0.7;
La clase SharedObject cuenta con el método flush, por medio del cual podemos dar la orden de que se grabe el valor inediatamente. En caso de no utilizar el método flush, el SO se guardará cuando se finalice la sesión (cuando se cierre el SWF o cuando se utilicen los métodos close() o clear() de la clase SharedObject):
var flushIt:String = mySharedObject.flush();
Cómo leer valores:
También accedemos a los valores almacenados por medio de la propiedad data. Lógicamente, debemos haber declarado una instancia de la clase SharedObject:
var value:Number = mySharedObject.data.volumeSO;
trace(value);
En caso de que no exista el atributo que estamos tratando de leer del equipo del usuario, nos devolverá null.
La clase SharedObject cuenta con varios métodos, propiedades y eventos que ayudan a trabajar con ellos gran flexibilidad. Su uso es realmente sencillo e intuitivo, su implementación es cuestión de pocos minutos y el aporte que hacen a la experiencia de navegación es realmente significativo.
Por otro lado, al implementar cookies con PHP, tenemos hasta 4Kb para almacenar información. Los Objetos Compartidos de Flash nos proveen de 100 kb por defecto (pudiéndose alternar entre otros valores; 1mb, 10mb, ilimitado, 10 kb y ninguno).
Podemos configurar estos parámetros desde http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager03.html
El uso de los SO puede ser de lo más variado. Aquí les dejo un pequeño ejemplo implementando el slider genérico que se utilizó en un post anterior.











