Buscar este blog

jueves, 31 de marzo de 2011

Versión v0.7

Desde la versión 0.5, he añadido algunos cambios, a una versión 0.6 que no publiqué aquí en el blog, y ahora una versión 0.7 que es el motivo de esta entrada. Veámos el correspondiente video, como ya viene siendo habitual:



La nueva funcionalidad se describe a continuación:
  • Incluido buscador: éste aparece automáticamente al lanzar la aplicación. Puede ocultarse/mostrarse con F4. Con Ctrl+F puedes escribir directamente en el buscador, como en firefox y otros tantos programas. Si el clado ya existe, se selecciona el nodo para ver dónde está. Si no está en el árbol, se lee de wikispecies el clado y se carga en la aplicación un nuevo árbol, de dos niveles de profundidad, con el clado buscado como raíz.
  • Menú contextual de ayuda: aparece autómaticamente al lanzar la aplicación. Puede ocultarse/mostrarse con F1.
  • Se permiten hacer capturas con Ctrl+S.
  • Ctrl+click en un nodo lo selecciona, de modo que el nombre del clado permanezca visible. Otra vez Ctrl+click lo deselecciona.



Eficiencia y diseño


Ha mejorado la eficiencia de la aplicación. El diseño de la aplicación, existente desde la versión v0.4, consiste en una clase base de la mayoria de las clases del juego, llamada Strategy, que tiene una función init y una función step, es decir, la aplicación es, en esencia, una fase de inicialización, y después la secuencia de pasos hasta que la aplicación finalice: un paso es actualizar la cámara, cambiar la posición de los nodos, cambiar la posición del menú contextual de ayuda o del buscador cuando éste se muestra u oculta.

Cada clase hereda de la clase Strategy para definir en qué consisten sus propios pasos. Pero éstas clases tienen cierta dependencia entre los cambios de los demás. El objeto más importante de la aplicación es el propio árbol, y la cámara solo se actualiza cuando el árbol cambia. Aquí podemos ver el diagrama de colaboración de la clase Viewing, la responsable del visionado:




Podemos ver como Viewing contiene un objeto PhyloTree, que es el árbol en sí. Hereda virtualmente de ColorTree y LocTree. El primer contiene una serie de nodos coloreados (ColorNode que hereda virtualmente de Node), y LocTree contiene a los mismos nodos (LocNode que también hereda virtualmente de Node), pero solo centrándose en sus posiciones. Así, ColorTree implementa el algoritmo de coloreado que se actualiza en su función step, y LocTree implementa el algoritmo de posicionado (el algoritmo Spring Embedder) que ya fué explicado. A su vez, tanto la posición como el color es un Smooth, una clase que tiene el propósito de dirigir un vector desde una posición de origen a una posición final a un ritmo controlado de forma paramétrica, y que también se actualiza paso a paso, pues también hereda de la clase Strategy. La clase Smooth es usada tanto para controlar el cambio de los colores y la posición de cada nodo, así como su glow (el radio del brillo que acompaña a cada nodo), la posición del buscador, la del menú contextual de ayuda y la cámara.

A partir de aquí, surge una cadena de dependencias de abajo a arriba. La clase Smooth tiene una variable _changed que indica si el vector ha cambiado de posición o no (cuando el vector llega a la posición final no se producen nuevos cambios). Si no se han producido nuevos cambios en ninguno de los nodos, significa que el árbol ya está en una posición estable. Por tanto, LocTree indicará en éste punto que no hay actualizaciones. Entonces la cámara recibe ésta información y, a su vez, indica que él tampoco ha modificado nada. Con éste control en la política de cambios, se optimiza mucho el código, pues llegada a una posición estable se ahorran la mayoría de los cálculos que realiza la aplicación a cada paso.

Anteriormente no se realizaba bien este control y siempre se realizaban todos los cálculos, es decir, no se detectaba bien la llegada a una posición estable, y ahora se ha depurado éste control para detectarse efectivamente —la variable _changed era global a PhyloTree, LocTree y ColorTree, pués estaba en la clase Strategy, y ahora en Strategy sólo está la función virtual bool changed() y la variable _changed ahora es propia de cada clase, facilitándo mucho éste control.

También había errores en el cálculo del tamaño ocupado por el árbol. La clase LocTree calcula, cada vez que hay posiciones, el rectángulo convexo que contiene al árbol completo, y éste rectángulo es el que toma la cámara para especificar su proyeccion. Como, y en parte por culpa del mal control de cambios, éste rectángulo convexo se calculaba mal, la cámara no enfocaba bien, sobre todo cuando un árbol solo tenía un nodo.


Mejora del analizador léxico


Otro detalle importante en la calidad de la funcionalidad de la aplicación es el analizador léxico incrustado. Cada vez que se hace una consulta a wikispecies, éste devuelve un texto que contiene, entre otra información, los subclados de cada clado. Éstos subclados hay que buscador, y el analizador lexíco es el que se encarga de ello, analizando la salida de la consulta al API. Sucede que la forma en que se presentan los subclados no está del todo formalizado, y hay muchos casos particulares y variantes de éstas salidas que hacían que antes no se reconocieran todos los clados, y el árbol quedaba incompleto. Se han realizado muchas mejoras en ésta búsqueda y ahora el lexer es más potente y se reconocen una mayor cantidad de clados y el árbol es bastante más completo que antes, aunque supongo que seguirá habiendo casos particulares no controlados que tendré que buscar y depurar.

Éstos cambios no son muy complicados de controlar, pero hay que saber cuáles son éstos casos particulares, y ésto es lo complicado. Hay que ir haciendo pruebas y explorando clados aleatorios en busca de fallos, mirándo qué devuelve el API y por qué no se reconoce. Así que, si a alguien le apetece ayudarme en ésto, bienvenida séa su ayuda y/o particupación.

Para finalizar, también indicar que ya está mejorada y ampliada la información necesaria para poder compilar la aplicación. Tanto en el readme como en la documentación se muestran los paquetes concretos que hace falta instalar, y además cmake avisa de si ha encontrado las librerías o no. Antes solo avisada de «algunas» librerías, pero no se controlaban todas.

3 comentarios:

  1. Estoy ansioso de poder usar tu trabajo ya terminado, imagina todas las posibilidades que se lograran con esta nueva herramienta, sin duda sera de gran ayuda para biólogos veterinarios y curiosos.

    ResponderEliminar
  2. Como aficionado a la biología evolutiva en particular, y a las ciencias naturales en general, ese es precisamente el propósito que persigo, que sea una herramienta útil.

    Saludos y gracias por tu buena opinión.

    ResponderEliminar
  3. Donde puedo descargarlo compa, lo necesito pa mi tarea de Biologia

    ResponderEliminar