Blog

Temas: Personal
Juan Mellado, 26 Noviembre, 2012 - 11:39

He vuelto a cambiar de ciudad de residencia. Esta vez me he venido a vivir a Valencia. Es la quinta ciudad a todo lo largo de mi vida en la que voy a vivir. ¡A ver lo que duro por aquí!

Llevo poco más de dos meses viviendo aquí ya, aprovechando los fines de semana que no llueve para caminar sin rumbo fijo e irme encontrando lugares. Es agradable volver a vivir en un ciudad con grandes avenidas por las que pasear. Y volver a tener el mar cerca es todo un plus.

Como de costumbre durante el periodo de transición, con la mudanza y tal, he estado bastante desconectado del mundillo "online". Sin Internet en casa, e incluso sin ordenador. A ver si recupero un poco el ritmo y desarrollo algo.

Respecto al blog, hace unas semanas ví que estaban entrando bastante comentarios de spam, así que de momento están deshabilitados. Me tocará perder el tiempo revisando logs, el código del captcha, y cambiando la implementación si es preciso.

Temas: Personal
Juan Mellado, 13 Septiembre, 2012 - 12:03

VelitaOtro año más que cumple este blog. Siete para ser más exactos. Tantas como vidas tiene un gato. O tantas como tiene este blog, que se resiste a morir a pesar de todas las redes sociales que amenazan con hacerlo desaparecer.

Revisando los posts de estos últimos doce meses observo que últimamente le he prestado mucha atención a Dart, el nuevo lenguaje que está desarrollando Google, y que ha sido en general un año bastante productivo en cuanto a proyectos:

- js-handtracking: Una librería escrita en JavaScript que realiza procesamiento de imágenes en tiempo real, capaz de detectar el contorno de una mano de un vídeo capturado a través de una webcam.

- Hangar: Un visor WebGL de ficheros en formato AC3D escrito en JavaScript. Este formato lo utilizan algunos simuladores de conducción y aviación de código abierto.

- zx-dart: Un emulador de Spectrum que escribí en Dart.

- dart-lzma: Una implementación del algoritmo de compresión LZMA escrito en Dart. Conseguí que funcionará, pero nunca ha pasado de la versión alpha.

- js-aruco: Mi librería en JavaScript para la creación de aplicaciones de realidad aumentada. Conseguí aumentar el rendimiento e implementar el algoritmo para pasar de dos a tres dimensiones.

- J2EE: Una serie de artículos que estuve escribiendo durante una temporada revisando un montón de tecnologías afines a Java.

- Spring: Otra serie de artículos dedicados a Spring, ese framework para Java que todos odian y aman al mismo tiempo.

Y muchas otras pequeñas cosas, y no tan pequeñas, que me dejo en el tintero. A ver que me depara este nuevo año.

Juan Mellado, 8 Junio, 2012 - 13:56

He desarrollado un emulador de ZX Spectrum en Dart. ZX Spectrum fue uno de los ordenadores más populares durante la década de los ochenta, y este año se cumplieron treinta desde su creación. Dart es un nuevo lenguaje de programación que está desarrollando Google. He llamado zx-dart al proyecto y lo he liberado como código abierto.

zx-dart

La versión de código nativo en Dart se puede ejecutar en Dartium, que es una versión de Chrome que incluye la máquina virtual de Dart. Aunque el rendimiento es pésimo, no alcanza ni un frame por segundo. Hay que tener en cuenta que Dart todavía está en desarrollo, las mejoras tienen que ir llegando poco a poco, además de que la especificación oficial del lenguaje cambia cada pocas semanas, por lo que el código escrito hoy puede que no funcione mañana.

Dart viene acompañado de una herramienta llamada (actualmente) dart2js que convierte el código Dart a JavaScript, de forma que se pueda ejecutar directamente en Chrome sin necesidad de la máquina virtual de Dart. Afortunadamente esta versión alcanza los 20 FPS en mi máquina y el emulador se deja probar, aunque para una simulación realista de un Spectrum debería alcanzar al menos 50 FPS.

Demo online: http://www.inmensia.com/files/zxdart/index.html

El emulador que he implementado está basado en JSpeccy. Realiza una emulación básica de un Spectrum 48K, con carga de ROM y ejecución de BASIC. Le faltan muchas características básicas, como la generación de sonido o la posibilidad de cargar snapshots por ejemplo. Pero hoy en día hay muchos emuladores bastante completos para casi cualquier plataforma, por lo que no merece la pena complicar el desarrollo para reinventar la rueda. Quizás un port a Dart de algún emulador ya existente escrito en JavaScript podría ser una mejor opción.

Ha sido emocionante el primer arranque, después de múltiples fallos, y ver el famoso mensaje de copyright.

Temas: Java
Juan Mellado, 5 Junio, 2012 - 19:13

DukeHe subido un par de artículos nuevos a la serie que estoy dedicando a revisar algunas de las especificaciones para la web de J2EE. Los dos nuevos artículos tratan sobre Java Server Faces (JSF), el framework estándar para el desarrollo de aplicaciones que nació para sustituir a los tecnológicamente deprecados JSP.

La especificación de JSF es bastante extensa, por lo que he dividido el contenido en dos partes:

- JSF (1): Este primer artículo explica algunos de los conceptos básicos. Desde la configuración que se debe realizar para que una aplicación web utilice JSF, hasta como escribir páginas utilizando Facelets, así como definir beans, inyectar dependencias, definir reglas de navegación, implementar validadores, conversores y listeners, e incluso como construir plantillas y componentes.

En cada tema he procurado comentar las distintas alternativas, ya que por lo general la configuración se puede hacer utilizando ficheros XML o, preferentemente, anotaciones.

- JSF (2): En este segundo artículo me he centrado exclusivamente en las librerías de acciones estándar introducidas con JSF. Para cada tag hay una descripción y un pequeño ejemplo.

Las librerías de acciones de JSF incluyen una acción equivalente para elemento HTML estándar, acciones específicas para crear plantillas y componentes, y una librería auxiliar de acciones complementarias de propósito general.

A pesar de suponer una mejora considerable con respecto a JSP, en particular por la introducción de las plantillas y la orientación a componentes reutilizables, sigue siendo bastante el código que hay que escribir y la configuración que realizar, por lo que el uso de un IDE que permita diseñar las vistas de forma gráfica y genere automáticamente el código es hoy en día una opción bastante recomendable. No obstante, sigue siendo vital conocer el detalle de funcionamiento a más bajo nivel, sobre todo cuando aparecen los problemas o se quiere ir más allá de las opciones que facilita un IDE.

Temas: Chrome Dart
Juan Mellado, 1 Junio, 2012 - 10:17

DartAndo otra vez trasteando con Dart, el nuevo lenguaje de programación de Google para la web. Aunque ellos en vez de "lenguaje" lo llaman "plataforma". He cogido un proyecto viejo y lo estoy adaptando al nuevo lenguaje, sobre todo para probar la nueva versión del IDE, de Dartium, que es un build especial de Chrome que lleva incluida la máquina virtual de Dart, y dart2js, que es el tercer conversor de Dart a JavaScript que liberan.

Dart está todavía en desarrollo, lo que quiere decir que ahora mismo lo único que se puede hacer es trabajar sobre la versión alpha. Todavía le queda mucho camino por recorrer, pero las primeras sensaciones es que es mucho mejor que JavaScript para proyectos grandes que requieran un mínimo de organización. Tiene más de "Java" que de "Script".

En el IDE han añadido algunas cosas básicas que las primeras versiones que liberaron no tenían. ¡Ya se puede renombrar ficheros! Aunque lo más importante es que han añadido un pequeño depurador. Desgraciadamente está muy verde. La depuración paso a paso no está muy fina todavía, por ejemplo en los switch/case obliga a pasar por cada case en vez de ir directamente al que cumple la condición como es lo habitual. Aunque lo peor es que no se pueden añadir watches, por lo que al final se acaba depurando a la antigua usanza, tirando mensajes por consola, convirtiendo los desarrollos actuales en toda una heroicidad.

Por lo que respecta al lenguaje en sí, poco que decir, es parecido a Java por ejemplo, con sus clases, interfaces y demás. Aunque me preocupa un poco la diferencia de tipos con JavaScript, en particular de los enteros. En Dart los enteros no tienen un tamaño fijo predeterminado, a diferencia de JavaScript que son de 64 bits. Esto hace que las operaciones de manipulación de bits se comporten de forma distinta en un lenguaje y otro. Sobre todo porque en JavaScript además este tipo de operaciones se truncan a 32 bits. Muchas aplicaciones no utilizan este tipo de operaciones, pero curiosamente en el tipo de desarrollos que yo suelo hacer son bastante habituales, ya que manipulo grandes cantidades de información a nivel binario.

El API está evolucionando bastante rápido, aunque eso implica que es normal encontrar algunas discrepancias entre la documentación y la implementación. Por ejemplo, el generador de números aleatorios es una función de la clase Math, aunque la documentación indica que se encuentra en una clase aparte Random. En realidad no tiene mucha importancia, y si me he dado cuenta es porque el generador no funciona bien, siempre genera la misma secuencia de números, y tratando de resolverlo estuve estudiando un poco más a fondo la documentación.

Por último, un tema importante a tener en cuenta es que las aplicaciones en Dart están pensadas para ejecutarse desde línea de comandos o desde un navegador, pero la única forma de tener una interface gráfica hoy en día es ejecutarlas desde un navegador. Tengo curiosidad por saber como evolucionará esto, sobre todo porque tener que implementar una aplicación típica de escritorio es un requerimiento normal. Quizás la solución sea desarrollar bindings con algunas librerías ya existentes. De hecho, desde Dart se pueden realizar llamadas a código C/C++, a la manera de los métodos native de Java por ejemplo. Es una vía interesante a estudiar.