Flash para Barrapunteros como tú
ACTUALIZACIÓN: Finalmente este artículo pasó a portada de Barrapunto el 29 de Octubre. Interesante echarle un ojo a los comentarios.
–
Introducción
A raíz de este artículo de Barrapunto me he dado cuenta de que todavía hay mucha gente anclada en la idea de que Flash sólo sirve para hacer dibujitos y letras que vuelan. Bueno, también sirve para eso.
Para que todo el mundo se sitúe, declaro lo siguiente alto y claro:
- Yo soy Flashero. Trabajo desde hace 5 años como programador Flash. Sí, he puesto programador y Flash en la misma frase.
- Mi visión de Adobe es 50%-50% amor/odio. Creo que como empresa que son tienen todo el derecho a hacer lo que les parezca con su tecnología y tienen todo mi respeto por llevar a Flash a lo que es hoy en día. Dicho esto, por ejemplo muchas veces tienen una política poco clara sobre algunas aplicaciones libres del mundilo Flash, lo cual me molesta bastante.
- Llevo algún tiempo en Barrapunto aunque antes me dedicaba simplemente a lurkear. La frase “Barrapunto ya no es lo que era” me hace gracia porque como yo llegué tarde a la fiesta, para mi siempre ha sido lo que es ahora. Es decir, un sitio de noticias (algunas me interesan, otras no) con una mezcla de gente que sabe mucho, junto con una panda de trolls con mucho tiempo libre. El título del artículo viene a que tradicionalmente el usuario medio de Barrapunto “odia” Flash, sus intros, el software privativo y (parece) que no se informa sobre la realidad de Flash últimamente. Espero que me sepan perdonar la gracieta cariñosa del título.
La idea es proporcionar una visión general actual sobre lo que es el desarrollo de aplicaciones Flash hoy en día (Octubre 2007) para que quien quiera trollear lo haga con conocimiento de causa. No es lo mismo decir:
“Flash es sólo para hacer dibujitos que vuelan” // esto suena a “webmaster” y <marquee>
que
“Adobe es el diablo por intentar sabotear proyectos como Red5″ // mucho más 2.0!
Que quede claro que mi intención con este artículo es hacer una visión más o menos rápida de los tópicos más habituales en el desarrollo Flash. Como no soy un experto en todos estos campos, seguramente haya errores o puntualizaciones que gustosamente corregiré si alguien me los indica (cuentame arroba zarate tv o directamente en el blog). Al final hay enlaces para ampliar información.
Flash es sólo una herramienta
Algo que mucho friki parece olvidar selectivamente es que Flash es sólo una herramienta. Como con todas las tecnologías hay gente que la usa muy bien y gente que la usa muy mal.
Yo personalmente también odio las intros, los “efectos libro” y el que una web tenga música y me obligue a quitar la mía cuando navego. Yo sufro no sólo a clientes que me obligan a programar estas y otras fechorías sino que luego sufro también esas webs cuando navego y a los millones de barrapunteros señalándome con el dedo como si yo hubiera programado todas las intros del mundo.
¿Pero en Flash se programa?
La salida de ActionScript 2 supuso un salto de calidad brutal en cuanto a metodología de programación. ActionScript 2 es un lenguaje de programación orientado a objetos basado en ECMAScript.
Sin embargo programar en AS2 requiere ciertos hacks poco elegantes para tareas concretas. Esto es porque AS2 y AS1 son compilados al mismo bytecode que es el que interpreta la ActionScript Virtual Machine 1 (ASVM1).
AS3 sin embargo se compila a un bytecode completamente nuevo que es el que interpreta la AVM2 (lanzada con el player 9). En AS3 se ha cambiado y mucho la estructura interna del lenguaje para hacerlo completamente estricto con ECMAScript de tercera generación (ECMA-262).
El arsenal de herramientas de un flashero a día de hoy no dista mucho del de un programador Java o C. Compiladores por línea de comandos, herramientas de control de versiones, plugins de Eclipse, consolas de log y debug, descompiladores, libros de programación orientada a objetos… lo normal.
Flash ¿vs? Software Libre
Como he dicho antes, la política de Adobe sobre algunas de las aplicaciones libres es cuando menos ambigua. La norma general es un sospechoso silencio sobre por ejemplo Red5 (clon libre de Flash Media Server) o la antigua versión de Screenweaver que permitía incluir el ocx de Flash en un ejecutable.
Adobe por ahora sigue la norma de vive y deja vivir, aunque tambié ha hecho movimientos muy torpes como obligar al proyecto FlashObject a rebautizarse como SWFObject porque no podía utilizar su marca registrada “Flash”. Cargar contra tus propios desarrolladores y evangelistas MAL Adobe.
El formato swf
El formato swf es público pero pertenece a Adobe. Se pueden solicitar las especificaciones pero el leerlas te incapacita para crear un reproductor de swfs:
This license grants the Licensee access to the SWF file format specification to aid in the creation of software which creates SWF files.
This license does not permit the usage of the specification to create software which supports SWF file playback.
Es decir, si lees las especificaciones y aceptas la licencia legalmente, NO puedes crear un reproductor de archivos swf como GNash (ver abajo). Lo que sí puedes es crear una herramienta generadora de swfs. ¿Significa esto que Gnash es ilegal? NO. Significa que los programadores de GNash no pueden echar un ojo a la especificación.
Desarrollar Flash con Software Libre
MTASC es un compilador de ActionScript 2 (player 6,7,8) totalmente abierto. Es multiplataforma y funciona mucho, mucho mejor que el compilador oficial del Flash IDE 8. Pero MTASC no puede sólo con toda la faena, así que para eso nació SWFMill. ¿Se puede hacer con el dúo MTASC + SWFMill lo mismo que con el IDE oficial? NO.
Si necesitas hacer animación tradicional por frames, entonces necesitas el IDE (o alguna de las otras herramientas para generar swfs como Toon Boom o Swift 3D). Ahora, a día de hoy Flash es mucho más que animación tradicional. Sin tocar el IDE de Flash y utilizando herramientas libres sobre Linux se pueden programar aplicaciones Flash para la gestión de usuarios, chats, herramientas de videoconferencia, etc, etc.
Para desarrollar ActionScript 3 (player 9) puedes bajarte el SDK de Flex 2 que es multiplataforma pero que aún no ha sido liberado (más información aquí) o usar haXe. haXe es un lenguaje de programación web similar a ActionScript 2 que compila a Flash (6,7,8 y 9), JavaScript y Neko bytecode. Neko es una máquina virtual que funciona en el servidor como módulo de Apache. Es decir, que con el mismo lenguaje (haXe) puedes compilar para cliente, servidor y aplicaciones de escritorio (ScreenweaverHX, ver más abajo).
Tamarin
Como he dicho antes, la introducción de la AVM2 y AS3 ha llevado al player de Flash a dar el salto de calidad que le faltaba. La AVM2 utiliza JIT (Just In Time compilation) lo que ha supuesto una mejora brutal del rendimiento.
Pero resulta que la AVM2 no es sólo la máquina virtual para AS3, sino que es una máquina virtual para lenguajes ECMAScript. Tanto es así que Mozilla ha decidido sustituir su motor de JavaScript por la AVM2 en lo que se conoce como el proyecto Tamarin. Adobe liberó una parte de la AVM2 bajo la MPL en una de las mayores donaciones de código a la Mozilla Foundation.
Flex 2 SDK
Seguramente ayudados por la presión de MTASC y haXe, Adobe decició liberar el SDK de Flex 2. Flex es un framework de componentes para el desarrollo de aplicaciones Flash ya que el resultado final de Flex es igualmente un archivo swf, sólo que en lugar del IDE de Flash + ActionScript se utiliza MXML (Macromedia XML, lenguaje de marcado) y AS3. Pero repito, el resultado final es el mismo.
Junto con la liberación de Flex, Adobe también está empezando a abrir poco a poco su sistema de gestión de bugs al estilo Bugzilla.
GNash
GNash es el reproductor de swfs de la Free Software Foundation. A día de hoy la compatibilidad es bastante limitada ya que sólo reproduce películas de player 7 y algunas de player 8. Aun así, será incluido por defecto en la próxima versión de Ubuntu y otras distribuciones.
Aunque no está preparado para sustituir con garantías al player oficial, el proyecto es bastante interesante. La mayoría de detractores de Flash argumentan que es una herramienta propietaria. Tener un player libre abre aun más las puertas de Flash allí donde por razones (normalmente económicas) a Adobe no le interesa invertir tiempo de desarrollo. Por ejemplo, sistemas de 64 bits o dispositivos fuera de los oficialmente soportados.
También podría redistribuirse sin necesitar el permiso de Adobe, lo cual facilitaría la labor de programas como ScreenweaverHX y otros wrappers de aplicaciones Flash. Eso evitaría la obligación de que el usuario final tenga la correcta versión de Flash instalada. Sobre si es legal redistribuir el player de Flash sin el consentimiento oficial de Adobe, hay una interesante discusión aquí y aquí. Mi visión es que NO es legal, pero Adobe nunca ha actuado en contra de esos proyectos. Mantiene silencio e insinúa acciones, pero no hace nada. Claramente FUD para mi.
Flash y accesibilidad
La accesibilidad es uno de los puntos flojos de Flash, eso no hay quien lo dude. La comunicación con lectores de pantalla es nula o complicada y Flash tampoco responde por defecto a las preferencias de accesibilidad que el usuario ha establecido en su navegador.
Dicho esto, la última actualización del player de Flash parece que incluye soporte para Microsoft Active Accessibility (MSAA) no sólo para el ActiveX (IE) sino también para los plug-ins (Firefox y compañía). Hay una interesante discusión en la lista de accesibilidad de Mozilla, especialmente este post.
Un problema bastante grave que esperemos que Adobe junto con los fabricantes de navegadores se digne a solucionar se llama SeamlessTabbing. Este parámetro se define en el código HTML usado para incluir un objeto Flash en una página y, en teoría, permite que una aplicación Flash entre sin problemas en el ciclo de tabulaciones de una página HTML. Es decir, desdepués de hacer tab en el objeto HTML precedente a Flash, el navegador da el foco a la película Flash que inicia su propio ciclo de tabs y, al llegar al último elemento, “salta” de nuevo al elemento HTML inmediatamente posterior. Esto funciona a día de hoy, pero sólo en Internet Explorer.
Una vez que el objeto Flash tiene el foco, es posible programar aplicaciones accesibles sólo con el teclado, lo cual puede no parecer mucho pero por lo menos es algo.
Resumen: hagamos lo poco que se puede hacer para mejorar la accesibilidad de nuestras aplicaciones Flash.
Flash y buscadores
Por qué Google no hace más para buscar información dentro de archivos swf no lo tengo claro. Seguramente sea una mezcla de “política” añadido a que el formato swf no es un estandar. Lo que sí tengo claro es que la mayoría de aplicaciones Flash a día de hoy están “vacías de contenido”, es decir, obtienen sus datos de forma dinámica (xmls, bases de datos etc), así que seguramente leer “dentro” de ellas no supusiese un gran avance.
Para conseguir que el contenido se indexe y de paso evitar que los usuarios de IE tengan que activar la película Flash haciendo click en ella (el problema de Microsoft vs. EOLAS) la mejor forma de incluir contenido Flash es utilizar alguno de los métodos basados en JavaScript. Los más conocidos son Flaccess, SWFObject, o el nuevo SWFFix.
Aunque con algunas diferencias entre ellos, estos métodos se basan en presentar la página en cuestión como HTML y “poner encima” las partes con Flash mediante JavasScript. Aunque esto podría dejar fuera a usuarios con el plugin de Flash instalado pero JS desactivado, no utilizar JS implica caer en el problema de EOLAS y perder una buena manera de validar que el usuario tiene la versión mínima necesaria del plugin.
Más enlaces a artículos y amplías discusiones sobre el tema en la sección de enlaces.
Flash es multiplataforma. O eso dicen.
¿Multi significa más de uno, no? Entonce sí, Flash es multiplataforma. La clave claro está en saber cuán multiplataforma es. A día de hoy estas son las plataformas soportadas:
Windows, Mac y Linux. Player 9.
Dispositivos móviles Symbian. Flash Lite 3 (base de Player 8, aunque no completo).
PDAs y Smartphones. Flash para PocketPC (Player 7).
PSP. Player 6 con muchas limitaciones.
Montones de otros dispositivos como la Wii, la PS3, móviles no basados en Symbian y cosas más estrafalarias como Chumby.
Flash no funciona nativamente en sistemas de 64 bits ni en en FreeBSD. Dejo a juicio del lector decidir si calificar a Flash de multiplataforma o no.
Aplicaciones que molan y proyectos curiosos
No son ni mucho menos todos los que hay, pero yo creo que son una buena muestra del potencial de Flash y AS3. La mayoría además son Open Source.
Papervision3D
Papervision3D es el motor de 3D en Flash más extendido a día de hoy. No es el primero ni el último pero es Open Source y ha conseguido aunar a una importante comunidad de desarrolladores que lo están haciendo mejorar día a día.
Capitaneado por el español Carlos Ulloa está empezando a dar los primeros frutos realmente interesantes para el 3D en Flash.
Red5
Hay 2 formas de publicar vídeo en Flash. Descarga progresiva (el vídeo se carga dinámicamente) o streaming real (el player conecta con un servidor, abre una conexión y descarga el vídeo según lo necesita).
El servidor oficial de Adobe es Flash Media Server (antes Flash Communication Server), pero los chicos de Red5 (escrito en Java) están haciendo un muy buen trabajo para tener un servidor de streaming para Flash totalmente abierto. últimamente parece que Adobe quiere poner alguna traba legal a proyectos como Red5 o Wowza (otro clon de FMS, esta vez cerrado y de pago), pero está aún por ver el alcance y la validez de la amenaza.
Red5 también se usa para programar aplicaciones multi-usuario como chats o vídeo conferencias.
Hydra
Hydra (parte del Adobe Image Foundation Toolkit) es un nuevo lenguaje de programación de Adobe para la creación de efectos y procesamiento de imágenes. En teoría, está optimizado para utilizar GPUs y CPUs multi-núcleo con lo que el rendimientno debería ser bueno. Sin embargo, lo relamente interesante es que podrá ser usado tanto en Flash como en AfterEffects.
AlivePDF
AlivePDF es una librería en AS3 para la creación de PDFs directamente desde Flash creada por Thibault Imbert, culpable también de proyectos como SMTPMailer, Mouse Gesture, WiiFlash, etc, etc.
Flash VNC
Cliente de VNC escrito en AS3 por Darron Schall. Seguramente no para ser usado en producción y más como prueba de concepto y aprendizaje.
ScreenweaverHX
La idea de los wrappers o contenedores de Flash es simple. Incluir la película Flash dentro de un ejecutable para poder ampliar sus posibilidades. Desde acceso de lectura y escritura al disco o al regístro de Windows hasta proveer una API de la ventana que lo contiene.
Una de las primeras aplicaciones fué Screenweaver (primero de pago, luego libre) que no hace mucho se pasó completamente a haXe (de ahí el HX). SWHX es un contenedor de aplicaciones Flash totalmente extensible mediante haXe y Neko.
FC64
FC64 es un emulador de Commodore64 escrito en AS3 también por Darron Schall y compañía.
Enlaces