viernes, 22 de octubre de 2010

Cuál es la diferencia entre .SWF y .FLA?

En una larga charla con Juan Muro, sobre los diferentes hábitos de hacer las cosas en lo que se refiere a proyectos ActionScript, llegamos a la conclusión de que muchos flasheros no dan el salto a utilizar otro editor de código que no sea FlashCS3, y mucho menos a compilar (publicar), por desconocimiento, poca información clara al respecto y confusión entre conceptos tales como Flex, FlexBuilder, Eclipse, FDT, classpath, swc, y diversos términos relacionados con la programación orientada a objetos (POO), etc.
La razón es sencilla. Estamos arraigados a Flash hasta la médula, y nos cuesta cambiar nuestras maneras, que buenas o malas, siempre nos han funcionado.
Con este post me gustaría aclarar dudas que se plantean a cualquier flashero con poca o mediana experiencia a la hora de afrontar un PROYECTO ACTIONSCRIPT con otra cosa que no sea FlashCS3.
¿Qué es FlashCS3?
Eso ya lo sabemos todos, pero básicamente es una herramienta que nos permite generar una aplicación en formato swf, en la que podemos diseñar, crear símbolos gráficos, incrustar o cargar imágenes, videos, sonidos, tipografías, etc, e interactuar con ellos mediante código ActionScript. Es una herramienta completa y para muchos tiene todo lo necesario para desarrollar. Con ella podemos también dibujar, crear efectos y diseñar. Trabaja en formato vectorial, pero además nos permite generar contenidos multimedia.
Nunca nos han hecho falta herramientas externas para desarrollar un proyecto. Flash nos daba todo lo esencial. Podemos escribir código y almacenar todos los símbolos gráficos necesarios dentro de un solo .fla, publicamos y ya tenemos nuestra web, juego, cd multimedia (o vete tú a saber) funcionando.
Lo que quiero decir con todo esto, es que es una forma válida de hacer las cosas aunque existan otras “distintas” (por llamarlo de alguna manera).
¿Qué es Flex, qué es FlexBuilder y qué tienen que ver con Flash?
Existe mucha confusión a la hora de hablar de Flex, o editar código con Flex. A ver, lo primero de todo: Flex no es FlexBuilder, y muchas veces cuando se habla de Flex, en realidad se refieren a FlexBuilder, pero como tiene incluida la palabra “Flex” la gente se equivoca.
Flex es simplemente un FRAMEWORK orientado al desarrollo de RIA´S. Hablando en plata, es una “herramienta” que nos da la facilidad de desarrollar ciertos tipo de cosas, en concreto las RIAS. ¿Qué es una RIA? ya estás tardando en leer este artículo de wikipedia que lo explica genial. Hagamos lo que hagamos con Flex, al final lo que generamos es lo mismo que Flash, un archivo SWF con nuestra aplicación. Por lo tanto Flex solo es una manera de desarrollar Flash y ambos no son cosas distintas, todo es plataforma Flash.
Flex se basa en componentes que implementan mucha funcionalidad básica y avanzada. Funcionalidad necesaria para cualquier aplicación, y que nos costaría muchas horas desarrollar con Flash. Ya que en Flash, a parte de sus componentes, lo tenemos que hacer todo a mano, es mucho más “artesano”. Por poner algún ejemplo, estamos hablando de sistemas de navegación, posicionamiento en pantalla, diseños líquidos, deep linking, validación de formularios, comunicación con bases de datos, Flash remoting, servicios web, y un largo etcétera que Flash no incorpora por defecto.
Y en difinitiva es eso, una ayuda para desarrollar, que también tiene sus limitaciones. En Flex no se diseña ni se dibuja, ni se anima en línea de tiempo. Por eso los diseñadores están lejos de usarlo. Pero si alguna vez has tenido que programar un proyecto medianamente grande, seguro que entenderás perfectamente las ventajas que comento.
Para dejar algo “bonito” en Flex se usan métodos como el skineado de componentes, adjuntar hojas de estilo CSS, etc. Nos da menos libertad para crear efectos visuales, pero nos facilita la vida en otros sentidos. Además, dentro de una aplicación Flex podemos incrustar cualquier cosa hecha con Flash. Desde assets gráficos hasta aplicaciones enteritas.
No se trata de si debemos utilizar Flex o Flash, sino de qué es lo mejor para el proyecto que acaba de caer en nuestras manos. No hay un método universal y creo que nunca lo habrá. Pero eso ya es un debate muy famoso, y cada uno que forme sus propias opiones al respecto. Yo tengo la mía.
Para crear una aplicación Flex solo son necesarias dos cosas:
  1. código fuente (ActionScript)
  2. un compilador (mxmlc), que interpreta el código y genera el archivo binario SWF ( lo mismo que hace Flash al publicar)
Aunque solo con esas dos cosas suelen trabajar los muy frikis, ya que funciona a través de línea de comandos (sí, la pantallita negra con código matrix). Lo más sencillo es usar una herramienta que haga transparente ese proceso…
Y ahora toca hablar de FlexBuilder, que simplemente es herramienta para desarrollar Flash, propiedad de Adobe, con varias utilidades muy interesantes y que está basado en Eclipse, (un IDE de desarrollo).
FlexBuilder facilita la vida a la hora de programar, nos da pistas sobre el código, y muchas veces lo genera automáticamente con atajos de teclado y otras artimañas varias.
Con él podemos crear aplicaciones basadas en el framework de Flex del que hablábamos antes, o aplicaciones Flash basadas en simple ActionScript de toda la vida (solo AS3 por cierto). Hay que tener muy en cuénta estos dos conceptos, porque son dos cosas distintas. En el lado que nos toca, hablaré solo de la segunda.
Con FlashCS3 podemos escribir código en el panel de ActionScript incorporado, u organizar nuestro código en clases externas al .fla, en forma de archivos .as.
Si en el panel de propiedades especificamos la “Document Class”, al publicar, Flash leerá e interpretará todo el código de dicha clase y sus dependencias. Se puede combinar código de las clases con código en línea de tiempo, u optar por utilizar solo una de las dos. Normalmente, en una aplicación totalmente orientada a objetos, en la linea de tiempo hay poco código, y se suele referir a acciones básicas (esto es discutible, lo se).
El editor de código de FlashCS3 es lo más inutil y frustrante que puedas usar, ya que es poco intuitivo, y está exento (casi) de cualquier tipo de ayuda si no te sabes todo de memoria (métodos y propiedades de objetos, etc). Por eso muchos optan por usas editores externos para el código. Existen varios, como por ejemplo Eclipse FDT, Flash develop, FlexBuilder, TextMate, etc. Y sí, incluyo FlexBuilder.
Podemos usar FlexBuilder (o cualquiera de los citados) para programar un proyecto ActionScript, y después compilar con FlashCS3, es perfectamente viable. Para ello solo hay que crear un proyecto con las clases que FlashCS3 usa para publicar, en concreto la “Document Class”. De esa manera hacemos las cosas como siempre, tenemos línea de tiempo, una librería con todos los símbolos que nos de la gana, podemos hacer fuegos artificiales… y por fuera tenemos un editor de código que nos ayuda muchísimo en la tarea de programar.
Por otro lado, podemos “deshacernos” de FlashCS3 en la tarea de compilar o publicar. ¿Cómo? Pues por ejemplo en FlexBuilder, nos basta con especificar la tan nombrada “Document Class” o “clase de aplicación”. Y entonces al compilar el proyecto ocurriría lo mismo, todo empezaría a funcionar a través de esa clase y sus dependencias.
¿Cuál es la diferencia entre FlexBuilder (o similares) y FlashCS3?
Esto puede llegar a ser muy discutible y muy subjetivo, pero las diferencias más importantes según mi opinión son las siguientes:
FlashCS3: tenemos disponible y “visible” la librería sin necesidad de hacer el pino puente.
FlexBuilder: no hay librería visible incorporada y que podamos manejar, pero sí podemos crear una librería con Flash y usarla desde FlexBuilder.
FlashCS3: Podemos diseñar y dibujar como nos plazca, para crear símbolos y elementos gráficos animados en línea de tiempo.
FlexBuilder: Dependemos de Flash para dicha tarea. Si queremos animar sin depender de Flash tendrá que ser por código.
FlashCS3: dependemos de un .fla o varios para nuestro desarrollo
FlexBuilder: no necesitamos en principio un .fla, a no ser vayamos a generar librerías de símbolos en formato swf o swc
FlashCS3: Los archivos .fla a veces se corrompen, se estropean, o dan errores sin sentido al compilar (lo he sufrido mucho en mis carnes)
FlexBuilder:No sule haber problemas al compilar.
FlashCS3: Compilamos y se genera el swf resultante o una plantilla html básica.
FlexBuilder: Además de generar un html más completo, podemos configurar el programa para que despues de compilar, abra una url en concreto, cosa muy útil cuando trabajamos con aplicaciones de datos que se comunican con un servidor o cargan archivos externos, ya que siempre estaremos viendo un “caso real” y evitando sorpresas relacionadas con el sandbox al llevar el proyecto a producción.
FlashCS3: Desde un .fla solo podemos linkar una “Document Class”
FlexBuilder:En un mismo proyecto podemos tener tanas aplicaciones como queramos. Cada una genera un swf diferente.
FlashCS3: está muy limitado si queremos extender su funcionalidad.
FlexBuilder: existen varios plugins de terceras partes como por ejemplo CVS, Subclipse (subversion), editor de snippets, etc, que nos ayudarán en la mecánica de trabajo.
FlashCS3: podemos programar en procedural sin programación orientada a objetos
FlexBuilder: debemos seguir una estructura orientada a objetos
FlashCS3: La depuración (debug) en FlashCS3 deja mucho que desear
FlexBuilder: La depuración es bastante avanzada y además tenemos “memory profiling” o gestión de memoria. Podremos saber en tiempo de ejecución, cuántas instancias de cada objeto existen, y cuál es su peso. Esto es muy útil para optimizar nuestra aplicación, y ver por dónde puede estar fallando el rendimiento.
¿Por qué utilizar FlexBuilder y no otro editor como FDT o FlashDevelop?
Pues eso ya es cuestión de cada uno. Personalmente creo que como editor de código, FlexBuilder deja mucho que desear frente a Eclipse FDT que es muchísimo más potente (solo le falta programar solo), y FlashDevelop que también lo es.
Pero FlexBuilder es más sencillo de aprender, de configurar y según instalas está listo para trabajar con AS3. En otros editores hay varios pasos previos antes de poder compilar.
FDT, aunque es mi editor favorito, y creo que la herramienta más potente que existe ahora mismo, en la versión más avanzada, es bastante más caro (712.81 € al día de hoy), contra los 207,64 € que vale FlexBuilder.
En cambio FlashDevelop es gratis, cosa muy a tener en cuenta a la hora de decidirse. (Se requiere .NET framework para poder utilizarlo)

No hay comentarios:

Publicar un comentario