Flex versus Applets

No, no estoy loco, y si, voy a enfrentar al favorito de todos (Flex) versus a un contendiente inesperado (Applets). Probablemente muchos de ustedes se quedaron en el capítulo de la historia de java en el que los applets eran:



  • Cuadraditos grises que en lugar de ayudar molestaban en una página web

  • Estaban limitados a una no-muy-linda interface gráfica (AWT)

  • Sólo funcionaban si tu navegador tenía la última versión de java y sino, "lo siento mucho amigo" y el usuario tenía que llevar un curso de java para entender como meter el plugin de java en su navegador.

Bueno, yo también me había quedado en ese capítulo, hasta que empecé a usar Flex. Aquí mi historia:



Flex está de moda y como todos, empecé a usarlo, así que lo instalé y empecé a hacer unas pruebas... un botón aquí, un formulario allá. Todo muy lindo. Luego vi el código que genera detrás (porque Flex es en realidad una herramienta de diseño que genera código actionscript detrás... por si no se habían dado cuenta todavía...) y noté algo preocupante: sólo con un formulario y un botón Flex ya había auto-generado 41 clases ActionScript! (y una lista de librerías añadidas que yo no había invitado - Provecho debugeando eso cuando tengas un problema en producción). Claro, alguien podría decir que todo eso es "necesario por el bien del diseño y la flex-ibilidad que te da Flex". Ok, Flex es sin duda la mejor herramienta de diseño de contenido web-RIA que existe en el momento. Pero como yo vengo de las épocas en que se programaba en computadoras que tenían menos de 1MB de RAM (si, pregúntale a tu abuelito, de repente él te puede confirmar) mi instinto de programar siempre me lleva a la optimización y a consumir la menor cantidad posible de recursos.


Considerando que Flex cuesta sus buenos $$$, traté un camino menos elegante, más barato, más directo (y más optimizado): evitar Flex y programar directamente en ActionScript (programación "a lo macho" como dice mi amigo Trigomán) sin nada de XMLs ni pantallitas flexibles. Así que probé todas las IDE actionscript que encontré: ASDT, FDT, flashDevelop, PrimalScript y la propia sección "ActionScript-only" de la IDE Flex. El resultado: no aceptable. Ninguna IDE de ActionScript me ofrecía todo lo necesario para que un programador haga trabajo realmente serio, y además las mejores cuestan por encima de 500 dólares. Quizás parte de la culpa de esto la tiene Eclipse que desde hace años me ofrece una poderosa IDE a la que me he acostumbrado y vivir en un mundo en donde las IDEs java bien pagadas (Ejemplo: MyEclipse) está bordeando los 100 dólares o menos.


Pero insistí y logré hacer mi "hola mundo" en ActionScript. Superado el primer reto, llegó mi primera decepción: hacer un simple formulario con un botón en ActionScript. Resulta que para poner un botón tenía dos opciones:



  1. Usaba la clase SimpleButton (que de simple no tiene nada, y el resultado gráfico es horrible)

  2. Si quería un botoncito bonito (como esos que se ven en la web en animaciones flash) tenía que importar librerías de Flash a mi proyecto.

Allí fue cuando pensé: "¿Perdón? ¿dijiste meter librerías del software Flash en mi súper proyecto "quiero-demostrar-que-yo-lo-puedo-hacer-todo-solito-con-actionscript"?, ¿no se supone que un lenguaje de programación debe tener out-of-the-box todo lo necesario para poder pintar un simple botón en la pantalla?"


Humm.... después de todo... Adobe gana dinero vendiendo Flash y Flex, no vendiendo "ActionScript".


Entonces miré nuevamente hacia mi java querido y vi la novedad: JavaFX.



Probé JavaFX (*Proof of concept* que le dicen). Compilé, sacudí y disequé. Resultado: horroroso.


No sé a quien se le ocurrió la idea de este JavaFX (que promete ser la competencia de Flash) pero alguien en SUN debe re-ordenar sus ideas. JavaFX no sólo tiene un lenguaje complicado (parece programación orientada a CSS) sino que además su documentación es incoherente con su propia API. ¿Por qué SUN tuvo que inventar un nuevo lenguaje en lugar de re-utilizar algo parecido a Java?.



Sin embargo.... JavaFX tiene características técnicas (puede llamar a clases java, soporta 3D, y un largo .etc) que no todas funcionan hoy... pero lo harán en sus siguientes versiones. Sólo es cuestión de tiempo... si SUN logra hacer realidad sus promesas con JavaFX.... Adobe va a tener que preocuparse...


Mientras que iba esperando a que JavaFX madure... pensé que tal vez, sólo tal vez, había alguna forma de lograr lo que quiero con Swing. Después de todo Swing es una librería gráfica con años de documentación y mejoras. Ya está madura, está lista. Y entonces, de casualidad noté en uno de los ejemplos de JavaFX algo inesperado: el ejemplo era un Applet! pero no era un applet cualquiera.... fue que descubrí algo maravilloso que SUN no ha promocionado (SUN! esto es genial! saca JavaFX de tu página web y coloca esto en su lugar!): resulta que ahora los applets pueden llamar a programas WebStart (JNLP).



Es decir que antes: Los applets era cuadraditos grises que no podían hacer mucho
WebStart podía poner todo el poder de java; pero no dentro de tu navegador (la experiencia del usuario se veía cortada)


Pero ahora!: Los applets tienen todo el poder en un aplicativo WebStart! es decir que ahora los applets pueden:



  • Acceder a todas las librerías javas que deseen (Si, incluido SWING). No importa que la PC del usuario no tenga ese súper-jar que le falta, el applet la bajará por ti.

  • Pintar gráficas 3D!. Esto es algo que Flash versión 10 (todavía beta) recién está empezando a tener.

  • Los programadores java pueden aprovechar todo su conocimiento para hacer aplicaciones web RIA (Quizás en el futuro si va servir algo poner "Swing" en tu CV :) )

  • Los puedes utilizar mientras esperas a que JavaFX madure y tenga todo el potencial prometido.

  • Bonus plus 1: El nuevo plugin de java (versión 1.6 update 10-beta 25) para tu navegador carga los applets más rápido que antes y además te pone una linda barrita de progreso mientras esperas.

  • Bonus plus 2: Te gusta el CSS? claro! es lo que has usado tantos años para uniformizar el estilo de tus aplicaciones web. Claro, también lo puede usar en Flex. Y.... también en tus applets! ( https://javacss.dev.java.net/ )

  • Bonus plus 3: ¿Pensaste que sólo podías hacer animaciones en flash? Resulta que java soporta desde hace años el formato SVG (si, gráficos escalables, como los que usas en flash). Uno de los mejores programas para editar SVGs es de Adobe (Illustrator)... ahh... las ironías de la vida...


Y si todavía sigues leyendo esto, a continuación, las demos.



Demo 1: ¿Es google earth? ¿Estoy viendo un telescopio? NO! es un applet!. Y si, puedes hacer zoom, girar, marcar lugares específicos en el mapa...




Demo 2: ¿Es un avión? ¿Es el nuevo juego de playstation? NO! es un applet! Y si, ese es Quake (full 3D) corriendo en un applet.


Los applets han regresado.... (y pronto llegará el verdadero JavaFX como refuerzo).... esto se va a poner bueno!

Nota importante: si quieres ejecutar las demos necesitas JRE1.6 update 10( http://java.com/en/download/beta_6u10.jsp )


¿Quieren saber más?


http://brigomp.blogspot.com/2008/04/el-retorno-de-los-applets-otra-vez.html


https://jdk6.dev.java.net/plugin2/jnlp/


6 Response to Flex versus Applets

3 de agosto de 2008, 9:44

"Parece que los applets siempre están volviendo pero no acaban de cuajar", y creo que nunca lo haran.

3 de agosto de 2008, 9:46

Felicitaciones tío por tu nuevo blog, interesante el post, voy a hacer las respectivas pruebas, un abrazo, cuidese, hasta luego.

Anónimo
3 de agosto de 2008, 12:44

En la portada de java.sun.com hay por lo menos 2 artículos sobre esto. Obviamente no lo hacen al nivel de JavaFX, pero sí le dan bastante promoción al update 10.

Anónimo
8 de agosto de 2008, 11:35

Tak, que buena en verdad... tu sabes que estoy metido en Flex y Java... es importante no ensegueserse con lo ultimo que sale. Quizas hoy mucha gente apuesta por Flex... los tiempos pasan y salen cosas buenas tambien... pedir ayuda e investigar da buenos resultados... asi que te felicito por tu investigación y por tu blog... me causo gracia tu comentario de optimizacion... causan en mi recuerdos muy gratos... en verdad que hacia falta tus comentarios... no dejes de publicar... es importante guiar... como alguien lo hizo en su momento conmigo. Gracias Tak.

19 de octubre de 2010, 15:12

Hola Tak,
tengo un problema con los applets de java en FFox, pero no en IE.

veras utilizo el nuevo plugin de java pero cuando voy a ejecutar un applet en FF me pide soporte "java-vm", sin embargo el nuevo plugin me carga el soporte "java-vm", no lo entiendo¡¡¡¡(al consultar about:plugins lo veo)

La aplicacion que utilizo solo trabaja con una version de java(java 6u11), ya probe en otro equipo donde si me funciono a actualizar a la ultima version(a java 6u22) pero no me funciona con esa, asi que no puedo usar otr(actualizar no me sirve)

espero puedas orientarme pues este problema me trae de cabeza desde hace tiempo y necesito resolverlo ya¡¡.

Gracias, saludos:D

Anónimo
24 de octubre de 2011, 13:00

Malas tecnicas de programacion, uso de asistentes, etc., en la actualidad desarrollo en Flex 3.6, tengo una aplicacion en la cual cada pantalla de mantenmiento de datos tan solo pesa entre 40KB y 80KB ademas utilizo las librerias compartidas que dan una carga mas rapida los swf, al no recargar todo. ademas de que mi aplicacion es modular, de verdad ke vuela

aqui la muestra
http://www.youtube.com/watch?v=8m7wsUS1tJ0