En este nuevo vídeo podemos ver el sistema de búsqueda de caminos empleando el conocido algoritmo A* junto a una malla de triángulos diseñada con Blender. Es una sencilla demostración en el que el usuario mueve el marcador verde, pulsa la barra espaciadora y el personaje se dirige automáticamente al punto indicado por dicho marcador.
Después de trabajar mucho en ello, se ha llevado un gran cambio en la implementación que ha supuesto la eliminación del código fuente de bash por completo. Se ha optado por utilizar las facilidades que nos da el sistema Gnu/Linux para determinar el directorio actual de un proceso (consultando el directorio /proc/). Así, el proyecto reduce considerablemente su peso y aumenta enormemente su legibilidad y sencillez.
Debido a la importancia del cambio, el proyecto pasa a su versión 0.2.0. En próximas horas se procederá a la liberación de los paquetes .deb correspondientes, consultar la sección de Descargas. Se dará por finalizado el trabajo a llevar en el ciclo #4 de desarrollo cuando éstos se encuentren disponibles al completo.
We have been doing a lot of things since the last time I wrote in the blog. So far, the tool has the following built-in features: Allow to create personal spaces In every personal space, you can write a blog, … Continue reading →
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:
También hay algunas mejoras técnicas que no constituyen una nueva funcionalidad, pero que mejora la existente:Eficiencia y diseñoHa 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éxicoOtro 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.
Buenas!, he liberado el código de Vidali a fecha de hoy, por lo que la teneís disponible tanto en la Forja como en Github. De momento este es un resumen del estado actual del proyecto: Mejoras a 31 de marzo: -Ventana de login mejorada y simplificada. Pendiente de mejorar la compatibilidad con IE y Opera. [...]
Los chicos del Estudio Evergreen (Antonio Caro y Daniel Pellicer) siguen componiendo piezas para la banda sonora del juego a un ritmo envidiable. Recientemente colgaron en su blog dos nuevas melodías, las que sonarían durante al finalizar con éxito un nivel o al morir en el intento. A continuación podréis escucharlas. Victoria: una canción alegre
Ya está disponible el idioma rumano para YakiTo. Podeis utilizar el archivo de idioma Romanian.lang para utilizarlo en vuestra instalación actual de YakiTo. En la próxima versión del programa se incluirá dicho idioma, por lo que no será necesario instalarlo a mano.
Gracias a Nicu Cîrja por la traducción.
Un día más aquí me encuentro dispuesto a sacarle todo el jugo a una de las clases que componen LibWiiEsp. Ya va quedando poco para finalizar la documentación en forma de comentarios en los métodos y descripciones; de hecho, ayer con la entrada sobre Logger se acabaron las clases que implementan el patrón Singleton, y [...]
Tengo el orgullo de informaros de que el idioma Alemán ya está disponible en YakiTo. De momento se ha habilitado la descarga del archivo de idioma correspondiente (German.lang) para que cualquiera pueda utilizarlo. Más adelante se integrará en la próxima versión de YakiTo.
Parece que el trabajo realizado para crear un sistema de traducción sencillo está dando sus frutos. Poco a poco, YakiTo va contando con nuevos idiomas disponibles, lo cual es algo muy positivo para la mejora de la accesibilidad del programa.
Gracias a Axel Blumenberg por la traducción.
Pequeña nota aprovechando un pequeño descanso en el curro mientras se configura el Ubuntu que acabo de instalarle: solo decir que debido a lo caotico que se me presenta el mes de abril entre examenes (¿¿¿quien ha sido el que me ha puesto el examen de Fundamentos de los Computadores justo UN DÍA ANTES de la presentación de PirannaFS???), trabajo, presentaciones y memorias, me voy a centrar durante las dos proximas semanas (aparte de a estudiar) a documentar el proyecto tanto rellenando los DocStrings de las funciones como creando diagramas, haciendo la memoria del proyecto y preparando la presentación que tendre en la final de Madrid del dia 15 de Abril. No tengo nada planeado al respecto, asi que debido a la falta de tiempo de hacer algo mas especifico aprovechare a desarrollar toda la documentacion de forma que me valga para todos los frentes que se me han presentado abiertos. Es por eso que de momento la documentacion se encontrara en la forja de Red Iris, donde podreis encontrar absolutamente todo el material relaccionado con PirannaFS (excepto lo publicado en este blog, que se encargan de guardarmelo muy amablemente los chicos de Google... :-D ).