<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6406323640934495857</id><updated>2012-02-16T19:34:54.493-08:00</updated><category term='Algoritmos'/><category term='Presentación'/><category term='Librerías'/><category term='Metaproyecto'/><category term='Visualización'/><category term='Desarrollo'/><title type='text'>Blog FreePhyloTree</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://freephylotree.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6406323640934495857/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://freephylotree.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Peregring-lk</name><uri>http://www.blogger.com/profile/00378641453100687666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_awMjJtuQx4U/TF21g-pkjJI/AAAAAAAAAAM/5VVMoirJWhE/S220/estrellaPunta.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>11</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6406323640934495857.post-6722920154982277508</id><published>2011-06-03T07:37:00.000-07:00</published><updated>2011-06-03T08:05:17.092-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Metaproyecto'/><category scheme='http://www.blogger.com/atom/ns#' term='Visualización'/><title type='text'>Novedades: logo</title><content type='html'>&lt;div style="text-align: justify;"&gt;He de decir, que al terminar el concurso local, dejé el proyecto de lado, porque me he dedicado a todas las actividades universitarias que tenía pendientes. Respecto al resultado del proyecto en la fase final del concurso —he de recordar, que el premio era del concurso local de Cádiz, pero el objetivo final era el concurso nacional del CUSL.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-v3wyRc1O8Ig/Tej189kIocI/AAAAAAAAAFM/iZiRPpl_DTc/s1600/capture.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 278px;" src="http://2.bp.blogspot.com/-v3wyRc1O8Ig/Tej189kIocI/AAAAAAAAAFM/iZiRPpl_DTc/s400/capture.png" alt="" id="BLOGGER_PHOTO_ID_5614007363184402882" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;En el concurso local no fuí uno de los cinco finalistas, pero obtuve una mención especial, entre otros tres proyector que también fueron menciones espaciales. Mi compañero gaditano, desarrollador de &lt;a href="http://osl2.uca.es/iberogre/index.php/P%C3%A1gina_Principal"&gt;Iber Ogre y Sion Tower&lt;/a&gt; —segundo en el concurso local de Cádiz— ha sido el ganador en la categoría de mejor proyecto comunitario. &lt;a href="http://www.concursosoftwarelibre.org/1011/files/NP_5CUSL_Ganadores.pdf"&gt;Aquí&lt;/a&gt; podeis ver la nota de prensa sobre los ganadores.&lt;br /&gt;&lt;br /&gt;Respecto al desarrollo de mi proyecto, quisiera anunciar que ya tengo logo —en realidad es la única noverdad. En la imágen anterior, se ve una captura de pantalla con el logo en blanco y negro como fondo de la aplicación. El logo ha sido creado por mi compañera de universidad y amiga Noelia Sales Montes —a su vez ganadora del mejor proyecto de educación y ocio en el concurso del año pasado.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-DrAt_LsccUc/Tej2ZKINSDI/AAAAAAAAAFc/BaxaByAiGLk/s1600/logoFPT.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 200px;" src="http://4.bp.blogspot.com/-DrAt_LsccUc/Tej2ZKINSDI/AAAAAAAAAFc/BaxaByAiGLk/s200/logoFPT.png" alt="" id="BLOGGER_PHOTO_ID_5614007847593265202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;El logo nació después de unas cuantas semanas de discusión sobre mis «apetencias» respecto al logo, y ella finalmente editó la versión definitiva. Mi más sincero agradecimiento a ella por su trabajo.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6406323640934495857-6722920154982277508?l=freephylotree.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freephylotree.blogspot.com/feeds/6722920154982277508/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://freephylotree.blogspot.com/2011/06/novedades-logo.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6406323640934495857/posts/default/6722920154982277508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6406323640934495857/posts/default/6722920154982277508'/><link rel='alternate' type='text/html' href='http://freephylotree.blogspot.com/2011/06/novedades-logo.html' title='Novedades: logo'/><author><name>Peregring-lk</name><uri>http://www.blogger.com/profile/00378641453100687666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_awMjJtuQx4U/TF21g-pkjJI/AAAAAAAAAAM/5VVMoirJWhE/S220/estrellaPunta.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-v3wyRc1O8Ig/Tej189kIocI/AAAAAAAAAFM/iZiRPpl_DTc/s72-c/capture.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6406323640934495857.post-3097516947705836157</id><published>2011-03-31T03:27:00.000-07:00</published><updated>2011-03-31T06:08:56.222-07:00</updated><title type='text'>Versión v0.7</title><content type='html'>&lt;div style="text-align: justify;"&gt;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:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/0HnR-4m1jFs" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;La nueva funcionalidad se describe a continuación:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;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.&lt;/li&gt;&lt;li&gt;Menú contextual de ayuda: aparece autómaticamente al lanzar la aplicación. Puede ocultarse/mostrarse con F1.&lt;/li&gt;&lt;li&gt;Se permiten hacer capturas con Ctrl+S.&lt;/li&gt;&lt;li&gt;Ctrl+click en un nodo lo selecciona, de modo que el nombre del clado permanezca visible. Otra vez Ctrl+click lo deselecciona.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Eficiencia y diseño&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;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 &lt;i&gt;Strategy&lt;/i&gt;, 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.&lt;br /&gt;&lt;br /&gt;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 &lt;i&gt;Viewing&lt;/i&gt;, la responsable del visionado:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-_CeCLqn5ueQ/TZRpl4qPAwI/AAAAAAAAAEw/_IR38PzRemg/s1600/classfpt_1_1Viewing__coll__graph.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img src="http://1.bp.blogspot.com/-_CeCLqn5ueQ/TZRpl4qPAwI/AAAAAAAAAEw/_IR38PzRemg/s320/classfpt_1_1Viewing__coll__graph.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5590209137059234562" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 320px; height: 290px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Podemos ver como &lt;i&gt;Viewing&lt;/i&gt; contiene un objeto &lt;i&gt;PhyloTree&lt;/i&gt;, que es el árbol en sí. Hereda virtualmente de &lt;i&gt;ColorTree&lt;/i&gt; y &lt;i&gt;LocTree&lt;/i&gt;. El primer contiene una serie de nodos coloreados (&lt;i&gt;ColorNode&lt;/i&gt; que hereda virtualmente de &lt;i&gt;Node&lt;/i&gt;), y &lt;i&gt;LocTree&lt;/i&gt; contiene a los mismos nodos (&lt;i&gt;LocNode &lt;/i&gt;que también hereda virtualmente de &lt;i&gt;Node)&lt;/i&gt;, pero solo centrándose en sus posiciones. Así, &lt;i&gt;ColorTree &lt;/i&gt;implementa el algoritmo de coloreado que se actualiza en su función &lt;i&gt;step&lt;/i&gt;, y &lt;i&gt;LocTree &lt;/i&gt;implementa el algoritmo de posicionado (el algoritmo&lt;i&gt; Spring Embedder) &lt;/i&gt;que &lt;a href="http://freephylotree.blogspot.com/2010/12/version-v02.html"&gt;ya fué explicado&lt;/a&gt;. A su vez, tanto la posición como el color es un &lt;i&gt;Smooth&lt;/i&gt;, 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 &lt;i&gt;Strategy&lt;/i&gt;. La clase &lt;i&gt;Smooth &lt;/i&gt;es usada tanto para controlar el cambio de los colores y la posición de cada nodo, así como su &lt;i&gt;glow&lt;/i&gt; (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.&lt;br /&gt;&lt;br /&gt;A partir de aquí, surge una cadena de dependencias de abajo a arriba. La clase &lt;i&gt;Smooth&lt;/i&gt; tiene una variable &lt;i&gt;_changed &lt;/i&gt;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, &lt;i&gt;LocTree &lt;/i&gt;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.&lt;br /&gt;&lt;br /&gt;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 &lt;i&gt;_changed &lt;/i&gt;era global a &lt;i&gt;PhyloTree, LocTree y ColorTree, &lt;/i&gt;pués estaba en la clase &lt;i&gt;Strategy&lt;/i&gt;, y ahora en &lt;i&gt;Strategy &lt;/i&gt;sólo está la función virtual &lt;i&gt;bool&lt;/i&gt; &lt;i&gt;changed() &lt;/i&gt;y la variable &lt;i&gt;_changed &lt;/i&gt;ahora es propia de cada clase, facilitándo mucho éste control.&lt;br /&gt;&lt;br /&gt;También había errores en el cálculo del tamaño ocupado por el árbol. La clase &lt;i&gt;LocTree &lt;/i&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mejora del analizador léxico&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;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 &lt;i&gt;lexer &lt;/i&gt;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.&lt;br /&gt;&lt;br /&gt;É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.&lt;br /&gt;&lt;br /&gt;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.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6406323640934495857-3097516947705836157?l=freephylotree.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freephylotree.blogspot.com/feeds/3097516947705836157/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://freephylotree.blogspot.com/2011/03/version-v07.html#comment-form' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6406323640934495857/posts/default/3097516947705836157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6406323640934495857/posts/default/3097516947705836157'/><link rel='alternate' type='text/html' href='http://freephylotree.blogspot.com/2011/03/version-v07.html' title='Versión v0.7'/><author><name>Peregring-lk</name><uri>http://www.blogger.com/profile/00378641453100687666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_awMjJtuQx4U/TF21g-pkjJI/AAAAAAAAAAM/5VVMoirJWhE/S220/estrellaPunta.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/0HnR-4m1jFs/default.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6406323640934495857.post-4051906780099754191</id><published>2011-03-23T16:11:00.002-07:00</published><updated>2011-03-24T06:05:04.733-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Metaproyecto'/><title type='text'>Final del premio local del CUSL V</title><content type='html'>&lt;div style="text-align: justify;"&gt;Bueno, esta mañana ha sido la final del premio local del CUSL V de la universidad de Cádiz, y bueno, según la opinión de los evaluadores, mi proyecto ha sido el mejor, y he resultado ganador, llevándome un fabuloso mini-portatil. Yo no estoy seguro de mi propia opinión al respecto, aunque agradezco a todos aquellos que, a mi favor, sí que lo tienen claro. Me encanta mi criatura, creo que es una buena idea y tiene mucho futuro, pero &lt;a href="http://siondream.com/blog/"&gt;Iber Ogre y Sion Tower&lt;/a&gt; es un gran proyecto que también se merecería el premio que al final me he llevado yo. Aunque por muy poco —un punto— lo que no está de más recordarlo, tanto a la salud de David Saltares como de la de otros participantes y de la mía propia, que tampoco quiero caer en el círculo del &lt;a href="http://en.wikipedia.org/wiki/Impostor_syndrome"&gt;síndrome del impostor&lt;/a&gt;. El proyecto &lt;a href="http://www.3oheme.com/dominous"&gt;Dominous&lt;/a&gt;, de Ignacion Palomo Duarte, que fué tercer premio, también quedó a un punto del de David, así que también podría haber sido tan buen ganador como nosotros, aunque no he tenido el placer de ver y ejecutar su proyecto como para dar una opinión, pero me remito a la puntuación como prueba de su calidad. &lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt; En total, el resto de premios han sido: el de David Saltares Márquez, &lt;a href="http://siondream.com/blog/"&gt;Iber Ogre y Sion Tower&lt;/a&gt;, como mejor proyecto de Ocio, Ezequiel Vázquez de la Calle como mejor proyecto de comunidad con &lt;a href="http://wiipang.wordpress.com/"&gt;WiiPang&lt;/a&gt;, el proyecto &lt;a href="http://www.3oheme.com/dominous"&gt;Dominous&lt;/a&gt; de Ignacio Palomo Duarte como mejor proyecto de innovación, Sebastían Guerrero Selma como mejor proyecto de seguridad por &lt;a href="http://seguesec.blogspot.com/search/label/PFC"&gt;Security Leaks&lt;/a&gt;, y &lt;a href="http://balloonbreakers.blogspot.com/"&gt;Ballon Breakers&lt;/a&gt; como mejor proyecto de ocio, de Jesús González Rodríguez. Éstos tres últimos participantes, lamentablemente, no pudieron asistir a la presentación de ésta mañana y Manuel Palomo Duarte (el coordinador) hizo de sustituto, presentándo sus proyectos brevemente entre nuestras presentaciones.&lt;br /&gt;&lt;br /&gt;Una mañana entretenida, donde nervios y expectación jugaban juntos en un partido la mar de interesante. Luego nos fuimos a comer a la pizzería «la bella italia» para celebrarlo, aunque no pudimos rematar la faena con heladitos al no haber ninguna heladería abierta por la ciudad, pero por lo general fue un buen día acompañado de un agradable sol.&lt;br /&gt;&lt;br /&gt;Pero la vida sigue, y al acabar la mañana todos volvimos a nuestras rutinas diarias de trabajos y clases para la universidad, que es lo único que queda cuando lo demás se va, y lo que habrá hasta que, si Dios quiere, los gaditanos nos volvamos a colar en la final y a vernos en Granada.&lt;br /&gt;&lt;br /&gt;Así que mucha suerte a todos los participantes para la nacional, que no decaigan los ánimos de los que se queden a las puertas, a seguir trabajando en nuestros proyectos y, sobre todo, ¡a disfrutar!&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6406323640934495857-4051906780099754191?l=freephylotree.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freephylotree.blogspot.com/feeds/4051906780099754191/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://freephylotree.blogspot.com/2011/03/final-del-premio-local-del-cusl-v.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6406323640934495857/posts/default/4051906780099754191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6406323640934495857/posts/default/4051906780099754191'/><link rel='alternate' type='text/html' href='http://freephylotree.blogspot.com/2011/03/final-del-premio-local-del-cusl-v.html' title='Final del premio local del CUSL V'/><author><name>Peregring-lk</name><uri>http://www.blogger.com/profile/00378641453100687666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_awMjJtuQx4U/TF21g-pkjJI/AAAAAAAAAAM/5VVMoirJWhE/S220/estrellaPunta.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6406323640934495857.post-2167862091747326300</id><published>2011-03-15T11:06:00.000-07:00</published><updated>2011-03-15T13:39:53.733-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Desarrollo'/><title type='text'>Versión v0.5</title><content type='html'>&lt;div style="text-align: justify;"&gt;Versión v0.5. Me da miedo ponerle un nombre de versión mayor.  Pero la verdad es que ahora la aplicación «da' gusto», ya que , por fin, se construye el árbol de forma dinámica extrayendo datos de la web. ¿De qué web?. Pues lo mejor que tenemos ahora, que yo sepa y que sea público, es &lt;a href="http://species.wikimedia.org/"&gt;Wikispecies&lt;/a&gt;. De ahí se va generando el cladograma que se visualiza en la aplicación. Pero luego entraremos en más detalles, ahora, a disfrutar un poco durante los cinco minutos y algo que dura el video:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/udweZ8QxTd0?hl=es&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/udweZ8QxTd0?hl=es&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;Los nuevos cambios más importantes añadidos son los siguientes:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Cambio importante de diseño, a destacar: clase  &lt;span style="font-style: italic;"&gt;Strategy&lt;/span&gt;, de la que heredan la mayoría de las clases del juego, clase &lt;span style="font-style: italic;"&gt;Smooth&lt;/span&gt;, para suavizado de movimientos y desacoplado de las distintas funcionalidades del árbol, es decir, clases &lt;span style="font-style: italic;"&gt;Tree&lt;/span&gt; vs &lt;span style="font-style: italic;"&gt;LocTree&lt;/span&gt; vs &lt;span style="font-style: italic;"&gt;ColorTree&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Procesado automático del cladograma: cada taxón/clado tiene su correspondiente artículo en Wikispecies. Éste consta de una primera sección en donde residen los subclados. Con la librería &lt;a href="http://curl.haxx.se/libcurl/"&gt;libcurl&lt;/a&gt; hacemos consultas al MediaWiki-API de Wikispecies, y con &lt;a href="http://flex.sourceforge.net/"&gt;flex&lt;/a&gt; la analizamos para extraer cada subclado.&lt;/li&gt;&lt;/ul&gt;Y la nueva funcionalidad:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Exploración del cladograma de wikispecies: haciendo doble click izquierdo en una clado hoja del árbol se expanden sus subclados.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Visualización del artículo del clado en wikipedia:haciendo doble click derecho en el nodo correpondiente.&lt;/li&gt;&lt;li&gt;Contracción del árbol: haciendo doble click izquierdo en un clado que no sea hoja, el clado se constrae, ésto es, desaparecen sus subclados. Para constraer el árbol «por arriba», en vez de por abajo, es decir, eliminar padres y hermanos que no interesen, hay que hacer Ctrl+doble click izquierdo en el nodo deseado, ese nodo se convierte en nuestra nueva raíz, desapareciendo el resto del árbol.&lt;/li&gt;&lt;li&gt;Las teclas →, ↑, ← y ↓ sirven para mover  la cámara, y si se mueve el ratón mientras se mantiene pulsado el botón izquierdo del ratón, la cámara también se mueve pero en dirección contraria.&lt;/li&gt;&lt;/ul&gt;Algunas cosas a corregir/mejorar:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;La cámara no siempre está centrada, y hay que moverla manualmente.&lt;/li&gt;&lt;li&gt;Disminuir la sobrecarga cuando el árbol es muy grande.&lt;/li&gt;&lt;li&gt;Construir subespecies (solo se construyen clados y especies).&lt;/li&gt;&lt;li&gt;Indicar la categoría taxonómica del clado (filo, órden, etcétera).&lt;/li&gt;&lt;li&gt;Búsqueda de clados.&lt;/li&gt;&lt;li&gt;Construcción del clado, «hacia arriba»: solo se puede expandir el árbol en dirección padre-hijo.&lt;/li&gt;&lt;li&gt;Indicar cuál es la raíz del árbol u, opcionalmente, indicar la dirección padre-hijo en el árbol, ya que con árboles grandes es difícil saber «donde estás».&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;También tenemos una rama de trabajo, llamada 3ddevelopment (de la versión v0.3, no de la última) en la que hay una visualización en 3D del árbol. Pero no la he querido mergear con la rama principal por que todavía no veo claro cuál será su uso. La visualización y exploración es menos cómoda y la sobrecarga de la máquina es considerable. Es más bonito, pero menos útil «en la práctica». Quiero agradacer eternamente a mi compañero Pepe cullera por su colaboración, que es el que ha desarrollado al completo dicha rama 3D y espero algún dia encontrar alguna justificación al uso del 3D en la aplicación y trasladar el contenido a la rama principal, al menos como opción de visualización, para los que lo deseen.&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6406323640934495857-2167862091747326300?l=freephylotree.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freephylotree.blogspot.com/feeds/2167862091747326300/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://freephylotree.blogspot.com/2011/03/version-v05.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6406323640934495857/posts/default/2167862091747326300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6406323640934495857/posts/default/2167862091747326300'/><link rel='alternate' type='text/html' href='http://freephylotree.blogspot.com/2011/03/version-v05.html' title='Versión v0.5'/><author><name>Peregring-lk</name><uri>http://www.blogger.com/profile/00378641453100687666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_awMjJtuQx4U/TF21g-pkjJI/AAAAAAAAAAM/5VVMoirJWhE/S220/estrellaPunta.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6406323640934495857.post-663158227313827053</id><published>2011-01-14T11:17:00.000-08:00</published><updated>2011-01-15T04:48:17.481-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visualización'/><category scheme='http://www.blogger.com/atom/ns#' term='Desarrollo'/><category scheme='http://www.blogger.com/atom/ns#' term='Librerías'/><title type='text'>Versión v0.3</title><content type='html'>&lt;div style="text-align: justify;"&gt;Ya tenemos nueva versión. ¿Qué lo hace distinto de la anterior?, pues principalmente, que ya se integra con un mini-explorador que permite visualizar los distintos clados en wikipedia. Es algo cutre puesto que se usa el nombre del nodo con el nombre del artículo de wikipedia. Si éste no existe, aparecerá la página de wikipedia que te propone crear un nuevo artículo.&lt;br /&gt;&lt;br /&gt;He aquí un video:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/5Znko1E2hsY?hl=es&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/5Znko1E2hsY?hl=es&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;Para conseguir integrar el explorador, sencillamente he hecho uso del módulo de Qt WebKit. Sí, habeis leido bien, he migrado el proyecto a Qt, y la verdad es que estoy muy satisfecho, casi todo lo que te imagines Qt te lo ofrece: te ahorra el trabajo de controlar los dobleclicks, te permite crear señales entre funciones puesto que contiene un mecanismo interno de &lt;span style="font-style: italic;"&gt;signal and slots&lt;/span&gt;, búsqueda de contenidos en el código HTML, widgets de openGL, etcétera. Además, está perfectamente documentado. Vamos, toda una delicia de librería.&lt;br /&gt;&lt;br /&gt;Por ejemplo, para controlar la animación, tengo un reloj que da pulsos cada 40 milisegundos —y así tenemos 25 fotogramas por segundo—, y ese reloj está conectado con el slot PhyloTree::animate(), de modo que cada pulso es una señal, y la función animate es un callback que la recibe, aunque todo ese proceso es controlado por Qt. El siguiente paso importante a dar es que el software interactúe con el API de wikipedia para obtener la información deseada de forma robusta.&lt;br /&gt;&lt;br /&gt;Otra característica de la que me estoy preocupando en mantener es el «smootheado» de todos los elementos animables posibles, así, si el usuario mueve la cámara con el ratón, la posición no cambia inmediatamente, sino de forma suave hasta su posición final. Lo mismo ocurre si cambiamos el tamaño de la ventana, que tanto el viewport como el miniexplorador integrado se mueve a la nueva posición y tamaño de forma progresiva.&lt;br /&gt;&lt;br /&gt;Por último, hay un desarrollador y ahora colega que va a experimentar en una nueva rama de git con el paso a 3D del árbol, al que incluso añadirá efectos de desenfoque, y también la posibilidad de ver el árbol con profundidad mediante el uso de gafas cromáticas; todo un lujo.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6406323640934495857-663158227313827053?l=freephylotree.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freephylotree.blogspot.com/feeds/663158227313827053/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://freephylotree.blogspot.com/2011/01/version-v03.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6406323640934495857/posts/default/663158227313827053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6406323640934495857/posts/default/663158227313827053'/><link rel='alternate' type='text/html' href='http://freephylotree.blogspot.com/2011/01/version-v03.html' title='Versión v0.3'/><author><name>Peregring-lk</name><uri>http://www.blogger.com/profile/00378641453100687666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_awMjJtuQx4U/TF21g-pkjJI/AAAAAAAAAAM/5VVMoirJWhE/S220/estrellaPunta.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6406323640934495857.post-7829726743982506198</id><published>2010-12-29T06:48:00.000-08:00</published><updated>2010-12-29T08:57:17.857-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visualización'/><category scheme='http://www.blogger.com/atom/ns#' term='Desarrollo'/><category scheme='http://www.blogger.com/atom/ns#' term='Algoritmos'/><title type='text'>Versión v0.2</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Después de un mes con el proyecto dejado de lado, he aprovechado las navidades para trabajar en él un poco, y la verdad es que los resultados son satisfactorios, por ahora.&lt;br /&gt;&lt;br /&gt;Los cambios son sencillos, he programado un algoritmo basado en fuerzas para imprimir el árbol, la cámara se mueve si se mantiene pulsado el ratón, y también hay programado un algoritmo de coloreado inventado por mí. Además, se ven los nombres de los clados que representan los nodos cuando se coloca el ratón encima.&lt;br /&gt;&lt;br /&gt;He aquí un video de ejemplo:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/YauA0ATRgno?hl=es&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/YauA0ATRgno?hl=es&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Mas técnicamente, los dos algoritmos principales son los siguientes:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Algoritmo basado en resortes&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Es el algoritmo usado para calcular la posición de los nodos del árbol. Es un algoritmo de la familia de los algoritmos basados en fuerzas, conocido popularmente como &lt;span style="font-style: italic;"&gt;Spring Embedder&lt;/span&gt; (resortes embebidos). Este algoritmo consiste en lo siguiente: cada arista es, en realidad, un resorte, —es decir, un muelle— que tiene una longitud dada. Cada pareja de nodos no conectados,  se unirán con una arista ficticia que también modelará a un resorte. Las aristas verdaderas serán resortes de atracción, y las aristas ficticias serán resortes de repulsión.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_awMjJtuQx4U/TRtaaA2poZI/AAAAAAAAAEc/y7GgZp5Qz0E/s1600/Pantallazo-1.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 73px;" src="http://3.bp.blogspot.com/_awMjJtuQx4U/TRtaaA2poZI/AAAAAAAAAEc/y7GgZp5Qz0E/s400/Pantallazo-1.png" alt="" id="BLOGGER_PHOTO_ID_5556133968243958162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Las posiciones de los nodos se inicializan aleatoriamente, y se unirán con muelles de la forma indicada. Cada resorte intentará volver a su posición inicial, generándose un sistema de fuerzas que buscará una situación de equilibrio. Es como si forzaramos una serie de puntos unidos con muelles, algunos estirados y otros comprimidos, y luego tiraramos el conjunto al aire. El gráfico anterior ilustra bastante bien su comportamiento, dando finalmente una visualización elegante del árbol.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Algoritmo basado en intervalos de colores&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Este algoritmo es invención mía, y funciona de la siguiente forma: a cada nodo se le asigna un intervalo de colores, y se colorea con el centro de dicho intervalo. Dicho intervalo se parte en tantos subintervalos como hijos tenga el nodo, y, análogamente, se colorea con su centro. Se procede recursivamente para todo el árbol, siendo el intervalo de la raíz del árbol el propio cubo RGB (y por tanto, la raíz del árbol será de color gris, pues es el centro del cubo).&lt;br /&gt;&lt;br /&gt;La forma de partir cada intervalo es el siguiente. Partiendo del cubo RGB asignado a la raíz, primero se elige para particionar la dimensión R —es decir, la del color rojo—. Así, si la raíz tiene n hijos, el cubo se partirá en n rectángulos 3D, donde el ancho en la dimensión R de cada rectángulo 3D será el ancho del nodo raíz dividido entre 'n'. Para el siguiente nivel, cada cubo se partirá en la dimensión G, luego en la B, luego nuevamente en la R, y así sucesivamente.&lt;br /&gt;&lt;br /&gt;La idea de éste algoritmo es que cada nodo sea dueño de una región, del cubo RGB de la que ninguno de sus hijos podrá escapar. Así, aunque en los primeros niveles haya saltos en la gama de colores —sobre todo si cada nodo tiene pocos hijos—, a medida que se incrementa la profundidad la gama de colores  de nodos relacionados será mas homogénea, y el propio coloreado será un indicador gráfico de la cercanía entre nodos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Aspectos por cambiar o mejorar&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Hay todavía muchas cosas importantes por mejorar en la aplicación. El más importante por ahora es que la aplicación no cuenta con ninguna base de datos externa. El árbol está creado nodo a nodo en el fichero &lt;span style="font-style: italic;"&gt;program.cpp&lt;/span&gt;, es decir, embebido en el propio código. Este es quizás el siguiente aspecto crucial de la aplicación, tener una base de datos externa, y crear la visualización del árbol leyendo los datos a partir de dicha base de datos. Seguramente usaré posgreeSQL.&lt;br /&gt;&lt;br /&gt;Otros aspectos menores son referidos, por ejemplo, al peso de las aristas. Por ahora, cada arista tiene el mismo peso, que viene indicado en el propio algoritmo basado en resortes —en realidad, no existe aún ninguna clase arista que tenga un atributo peso, sencillamente es una pareja de nodos—. Habrá que asignar un peso a cada arista, usando algún criterio relacionado con el árbol filogenético —por ejemplo, proporcional al número de nietos que tenga un hijo—, y adaptar el algoritmo de resortes para que éste cambio no produzca efectos indeseables en la visualización.&lt;br /&gt;&lt;br /&gt;Otro aspecto a cambiar es el posicionado del árbol. El árbol entero es movido según el sistema de fuerzas que provoquen los resortes, y habrá que cambiar el algoritmo para que, al menos la raíz, quede fija en un punto dado, porque a veces el árbol se mueve demasiado hacia un extremo y hay que mover la cámara para volver a centrarlo.&lt;br /&gt;&lt;br /&gt;Hasta otra ...&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6406323640934495857-7829726743982506198?l=freephylotree.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freephylotree.blogspot.com/feeds/7829726743982506198/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://freephylotree.blogspot.com/2010/12/version-v02.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6406323640934495857/posts/default/7829726743982506198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6406323640934495857/posts/default/7829726743982506198'/><link rel='alternate' type='text/html' href='http://freephylotree.blogspot.com/2010/12/version-v02.html' title='Versión v0.2'/><author><name>Peregring-lk</name><uri>http://www.blogger.com/profile/00378641453100687666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_awMjJtuQx4U/TF21g-pkjJI/AAAAAAAAAAM/5VVMoirJWhE/S220/estrellaPunta.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_awMjJtuQx4U/TRtaaA2poZI/AAAAAAAAAEc/y7GgZp5Qz0E/s72-c/Pantallazo-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6406323640934495857.post-5384188385861926807</id><published>2010-11-13T12:23:00.001-08:00</published><updated>2010-11-13T12:28:46.078-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visualización'/><category scheme='http://www.blogger.com/atom/ns#' term='Desarrollo'/><title type='text'>Mi primer blur</title><content type='html'>&lt;div style="text-align: justify;"&gt;Bueno, tan pronto como traducí mi aplicación a openGL, ya le añadí el blur. Por ahora el resultado es pobre porque solo me queda perfilar los efectos, pero la dinámica de trabajo, que es lo que me interesaba, ya la conozco. Este es el resultado final:&lt;br /&gt;&lt;br /&gt;&lt;span class=”fullpost”&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_awMjJtuQx4U/TN70Axd-NQI/AAAAAAAAAEI/MZY_CDdSBqc/s1600/arbolBlur.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 300px; height: 320px;" src="http://2.bp.blogspot.com/_awMjJtuQx4U/TN70Axd-NQI/AAAAAAAAAEI/MZY_CDdSBqc/s320/arbolBlur.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5539132885828515074" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La visualización es pobre por dos motivos: no hago cálculos de qué color corresponde a cada nodo, ya que todavía estoy viendo como pintar árboles, no cuál es el contenido del árbol, cosa de la que depende el color asignado (y cuestión todavía que tengo que definir). Y las aristas tampoco tienen blur aún (y tampoco se han colocado sombras).&lt;br /&gt;&lt;br /&gt;Estos aspectos se definirán ya muy a posteriori, mi siguiente prioridad ahora es programar el algoritmo de visualización del grafo (es decir, el que coloca cada nodo en un lugar adecuado para una &lt;i&gt;estética&lt;/i&gt; visualización), y luego, pelearme con la impresión de texto.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6406323640934495857-5384188385861926807?l=freephylotree.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freephylotree.blogspot.com/feeds/5384188385861926807/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://freephylotree.blogspot.com/2010/11/mi-primer-blur.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6406323640934495857/posts/default/5384188385861926807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6406323640934495857/posts/default/5384188385861926807'/><link rel='alternate' type='text/html' href='http://freephylotree.blogspot.com/2010/11/mi-primer-blur.html' title='Mi primer blur'/><author><name>Peregring-lk</name><uri>http://www.blogger.com/profile/00378641453100687666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_awMjJtuQx4U/TF21g-pkjJI/AAAAAAAAAAM/5VVMoirJWhE/S220/estrellaPunta.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_awMjJtuQx4U/TN70Axd-NQI/AAAAAAAAAEI/MZY_CDdSBqc/s72-c/arbolBlur.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6406323640934495857.post-5895680001712276393</id><published>2010-11-13T06:49:00.001-08:00</published><updated>2010-11-13T09:15:49.781-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Desarrollo'/><category scheme='http://www.blogger.com/atom/ns#' term='Librerías'/><category scheme='http://www.blogger.com/atom/ns#' term='Algoritmos'/><title type='text'>Adios Ogre</title><content type='html'>&lt;div style="text-align: justify;"&gt;Desde mi última entrada, han ocurrido muchas cosas en mi proyecto, pero qué han tenido muy poca repercusión en su aspecto actual. Como ya adelanté en la presentación, quería que mi proyecto se pareciera al aspecto de Gource por cuestión de elegancia, y todos éstos cambios tienen su origen en la persecución de ésta idea.&lt;br /&gt;&lt;br /&gt;Como un grafo, y por tanto un árbol, no es más que nodos y aristas, los modelos 3D con los que hace falta trabajar son muy sencillos. Sumándole ésto a que el tamaño de cada nodo, o de cada arista, puede ir cambiando en tiempo de ejecución, el dibujado, y con ello los modelos también deberían hacerlo. Ésto me llevo directamente a trabajar con el tipo &lt;i&gt;ManualObject&lt;/i&gt; de Ogre, que te permite definir los modelos vértice a vértice, definir subobjetos, y cambiarlos en tiempo de ejecución. Es decir, todo lo que necesitaba, aunque precisamente por trabajar con objetos geométricos a bajo nivel veía a Ogre un recurso demasiado disparatado. Ogre está orientado para trabajar con modelos complejos, en escenarios complejos, con cálculos complejos. Yo no necesito muchos efectos gráficos ni de iluminación, y es todo relativamente sencillo. Pero por tal de no empezar a aprender openGL, por cuestión de tiempo, decidí seguir adelante.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;La primera idea para simular el efecto de Gource era mediante el uso de una esfera, con una luz en su centro que la reflejara, para que tuviera el aspecto de una estrella brillante. Cómo se nota que era la primera vez que trabajaba en un contexto 3D. Cuándo tienes un objeto, iluminarlo solo cambia la intensidad de la luz en su superficie, en los lugares donde la luz incida, oscureciéndose a medida que la superficie se aleja de la luz, o se hace más innacebile para ella. Una luz no se verá si no hay ningún objeto en el que reflejarla. Y por poner una luz dentro de un objeto, nunca va a tener un aspecto de "bombilla".&lt;br /&gt;&lt;br /&gt;Una vez comprendido ésto, cambié de táctica. Relegé la construcción 3D del árbol en un nuevo objeto, usando el patrón estrategia (&lt;i&gt;StrategyMakeTree&lt;/i&gt;). Ahora tenía dos construcciones, una mediante esferas (&lt;i&gt;SphereMakeTree&lt;/i&gt;), y otra recurriendo al llamado efecto Tyndall (&lt;i&gt;ColloidMakeTree&lt;/i&gt;).&lt;br /&gt;&lt;br /&gt;El efecto Tyndall es lo que ocurre cuando un rayo de luz entra en una habitación, o cuando el agua se refleja en el mar. El aire de la habitación, o el agua, tienen una serie de impurezas. Cuando un rayo de luz penetra, cada partícula impura refleja la luz que incide en ella, creando una serie de puntos de luz indistinguibles entre sí para el ojo humano, dando la sensación de un continuo iluminado. Luz reflejada en aire o agua pura no es visible en forma de rayo, debido a que no tiene partículas que puedan reflejar la luz incidente en ellas. En la imágen siguiente se ve un láser que atraviesa dos vasos, uno con agua pura, y otro con impurezas, y se observa como el agua pura no muestra al rayo atravesándolo, mientras que las impurezas disueltas en el agua sí que lo permiten.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://silver-lightning.com/tyndall/tyndall2.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 480px; height: 360px;" src="http://silver-lightning.com/tyndall/tyndall2.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Un sistema como el aire o el agua con impurezas, son llamados coloides, y mi nueva idea, era, por supuesto, que cada nodo fuera un coloide. Se crearía una nube de puntos con forma esférica, de forma que en su centro hubiera una mayor densidad, y en el límite de su radio poca. Luego, situando una luz en su centro se simularía un coloide, difuminándose la intensidad lumínica a medida que la luz se alejaba de su centro, hasta diluirse con el fondo negro.&lt;br /&gt;&lt;br /&gt;Pero por más formas ideadas para implementar un coloide, ninguna tuvo éxito. Para experimentar, comencé construyendo una esfera que tuviera siempre una misma densidad de puntos. Pero si construía una esfera de poca densidad, se veía en vez de un coloide una nube dispersa de puntos. Si la construía con poca densidad. Se veía una esfera sólida en vez de un coloide. Si hacía una esfera de poca densidad, con mucho radio, y alejando mucho la cámara, se volvía a ver una esfera sólida.&lt;br /&gt;&lt;br /&gt;Mi siguiente paso fue ver como lo hacía Gource. Me llevé un tiempo estudiando su código fuente, lo que me llevó a aprender bastantes cosas de openGL para comprenderlo. Explorándo el código descubrí, entre otras cosas, que el efecto de destellos de luz cuando se creaba una rama nueva se llama &lt;i&gt;bloom&lt;/i&gt;. El desenfocado que buscaba, &lt;i&gt;blur&lt;/i&gt; (&lt;i&gt;blur&lt;/i&gt; no es más que borroso en inglés). También descubrí que existe una rama de la teoría de grafos que se llama visualización de grafos, y Gource usa un algoritmo de visualización basado en fuerzas, esto es, que el grafo funciona como un sistema gravitatorio, donde cada nodo afecta a la posición de los restantes nodos, hasta alcanzar una posición de equilibrio, que es la posición final de visualización.&lt;br /&gt;&lt;br /&gt;Otro detalle interesante es que, como el árbol está cambiando de posición y orientación constantemente, las aristas están curvadas de modo que incrementen la sensación de movimiento, curvándose la aristas en un sentido semejante al sentido de giro del árbol. Para construir estás aristas curvadas, se hace uso de splines.&lt;br /&gt;&lt;br /&gt;La forma que tiene gource de dibujar el &lt;i&gt;blur&lt;/i&gt; (el desenfoque), es mediante el uso de texturas. Se especifican las coordenadas de un cuadro, se coloca encima una imágen que contiene un círculo difunado que hace las veces de desenfoque, y encima se coloca otra imágen con el nodo en cuestión. El color de la textura de desenfoque se mezcla con el del nodo, y con eso finalmente parece que es el propio nodo el que brilla.&lt;br /&gt;&lt;br /&gt;Intenté hacer lo propio con Ogre, creando la clase &lt;i&gt;GourceianMakeTree&lt;/i&gt;. Y empezaron los problemas. Por más vueltas que le daba, no conseguía que la textura se renderizara bien. Sobre el funcionamiento interno de &lt;i&gt;ManualObject&lt;/i&gt; existe poca documentación, en la lista de correo de la forja tampoco hubo nadie que me pudiera ayudar de forma totalmente satisfactoria. Incluso un desarrollador con el que mantengo contacto por correo, muy familiarizado con Ogre y openGL, con el que aprendí muchísimo, tampoco supo como resolver mi problema. Todo ello demuestra el poco conocimiento, uso o divulgación, de los &lt;i&gt;ManualObject&lt;/i&gt;, lo que me convenció más aún que Ogre no estaba hecho para trabajar de esa forma (ya que nadie más lo hacía).&lt;br /&gt;&lt;br /&gt;Así que decidí dejar Ogre, y con ello OIS, y cambiarme a openGL, con Glut primero, y con SDL después. Este paso de glut a SDL fue debido a que, aunque glut sea orientado a eventos -cosa que hace más elegante el diseño para este tipo de aplicaciones-, su sintaxis me obligaba a hacer cosas poco elegantes, como tratar con atributos externos o trabajar con referencias a funciones miembro, con sintaxis prefijada, y sin tener control total sobre la función &lt;i&gt;MainLoop&lt;/i&gt;, que es la función de Glut que lleva el control de toda la aplicación.&lt;br /&gt;&lt;br /&gt;Una vez perdidos unos cuantos dias aprendiendo openGL, pude finalmente reescribir mi aplicación. El diseño prácticamente no ha cambiado. Las clases se organizan de la misma forma, solo que las funciones miembro sí que son distintas y hacen cosas distintas.&lt;br /&gt;&lt;br /&gt;Un detalle curioso (que tuve que descrubir yo, y nunca se advierte cuando se habla de SDL + openGL), entre Glut y SDL es que, mientras Glut toma el sistema de coordenadas del escenario centrado en la pantalla, SDL toma el centro del escenario en la coordenada (0, 0) de la pantalla, es decir, la esquina superior izquierda. Además, la pantalla se convierte en el primer cuadrante invertido, ya que la coordenada &lt;i&gt;y&lt;/i&gt; de la pantalla crece desplazándose hacia abajo, como de costumbre en SDL. Es decir, que hay que tener en cuenta que SDL no cambia su comportamiento sea una ventana openGL o una pantalla "clásica".&lt;br /&gt;&lt;br /&gt;Y respecto al aspecto actual del proyecto, pocas novedades. Todavía no tengo programado el desenfoque, solo pinto un cuadro blanco por cada clado, conectados por aristas. En la siguiente imágen se muestra una captura.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_awMjJtuQx4U/TN7D-zAyqYI/AAAAAAAAAEA/RIQSUzOafFE/s1600/arbolPrimeroOpenGL.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 190px; height: 200px;" src="http://2.bp.blogspot.com/_awMjJtuQx4U/TN7D-zAyqYI/AAAAAAAAAEA/RIQSUzOafFE/s200/arbolPrimeroOpenGL.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5539080075325122946" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;No hay ningún algoritmo "propio" de impresión del árbol. Sencillamente, los hijos los imprimo en columna, con un desplazamiento x constante, por tanto, los hijos de padres distintos podrían solaparse.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6406323640934495857-5895680001712276393?l=freephylotree.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freephylotree.blogspot.com/feeds/5895680001712276393/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://freephylotree.blogspot.com/2010/11/adios-ogre.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6406323640934495857/posts/default/5895680001712276393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6406323640934495857/posts/default/5895680001712276393'/><link rel='alternate' type='text/html' href='http://freephylotree.blogspot.com/2010/11/adios-ogre.html' title='Adios Ogre'/><author><name>Peregring-lk</name><uri>http://www.blogger.com/profile/00378641453100687666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_awMjJtuQx4U/TF21g-pkjJI/AAAAAAAAAAM/5VVMoirJWhE/S220/estrellaPunta.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_awMjJtuQx4U/TN7D-zAyqYI/AAAAAAAAAEA/RIQSUzOafFE/s72-c/arbolPrimeroOpenGL.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6406323640934495857.post-6784028138718280032</id><published>2010-10-25T17:19:00.000-07:00</published><updated>2010-10-25T17:48:21.450-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Metaproyecto'/><title type='text'>¿git-svn?, quizás otro día.</title><content type='html'>&lt;div style="text-align: justify;"&gt;Me he llevado día y pico quebrándome la cabeza intentando aclararme sobre como interactuar entre git y svn, sin tener dos repositorios independientes almacenados de forma local. Así que intenté entender el comportamiento de git-svn a fin de usar dicho comando para actualizar svn desde mi repo git.&lt;br /&gt;&lt;br /&gt;Sé que eso trae muchos problemas con las ramas del proyecto, que es quizás el aspecto de arquitectura que más dificulta la tarea de su sincronización. Pero partía de una premisa: nunca habrá cambios "nuevos" en el repositorio svn que no haya sido subidos por mí, es decir, nunca voy a necesitar hacer el clásico &lt;i&gt;pull&lt;/i&gt; desde svn (que en git-svn, es &lt;i&gt;git svn rebase&lt;/i&gt;).&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;Pero eso no fue suficiente. Para empezar, no conseguí usar el repo de svn como un repo remoto sin más. Primero hay que bajarse el repo svn (con &lt;i&gt;git svn clone&lt;/i&gt;), luego usar git de forma normal, sincronizándolo con tu repo git de la web también de forma normal, y todo de forma normal, y cuándo lo desees, con &lt;i&gt;git svn dcommit&lt;/i&gt; subes tus cambios a svn. Ésto es aceptable, aunque desearía no verme obligado a hacer un svn clone cuando el repo svn está completamente vacío, estándo el de git con contenido incluido. Sencillamente no me gusta o no me fío del todo.&lt;br /&gt;&lt;br /&gt;Pero además, los dcommit de git-svn modifican la información de los commits de git puro, para adaptarlo. No quiero que svn ensucie a git. Además, ésto provoca una "pega" adicional: si realizas un commit, creas una nueva rama, vuelves a la master y realizas un dcommit, cuando intentes mergear la nueva rama no encuentra su punto de anclaje al haber sido modificado por dcommit, lo que produce conflictos.&lt;br /&gt;&lt;br /&gt;Ese es un detalle que no me gustaba nada, y que me hacía temer errores en un futuro. No quiero partirme la cabeza con una herramienta, porque las herramientas significan exáctamente lo contrario: ahorrarte trabajo, no producirtelo. Si no veo las cosas claras o no me convencen, las reniego. Y después de tanto, todavía no me llegó a quedar claro como se sincronizaban las ramas y los tags (en general, la jerarquía de directorios de svn) entre git y svn.&lt;br /&gt;&lt;br /&gt;Así que, al final, tendré dos copias locales. Cuando quiera actualizar svn, copio los archivos y santas pascuas, cosa que ya me habían aconsejado en la lista de correo del CUSL5.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6406323640934495857-6784028138718280032?l=freephylotree.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freephylotree.blogspot.com/feeds/6784028138718280032/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://freephylotree.blogspot.com/2010/10/git-svn-quizas-otro-dia.html#comment-form' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6406323640934495857/posts/default/6784028138718280032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6406323640934495857/posts/default/6784028138718280032'/><link rel='alternate' type='text/html' href='http://freephylotree.blogspot.com/2010/10/git-svn-quizas-otro-dia.html' title='¿git-svn?, quizás otro día.'/><author><name>Peregring-lk</name><uri>http://www.blogger.com/profile/00378641453100687666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_awMjJtuQx4U/TF21g-pkjJI/AAAAAAAAAAM/5VVMoirJWhE/S220/estrellaPunta.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6406323640934495857.post-8579226302312228358</id><published>2010-10-25T16:48:00.000-07:00</published><updated>2010-10-25T17:17:57.215-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Metaproyecto'/><title type='text'>Cámaras... ¡Acción!</title><content type='html'>&lt;div style="text-align: justify;"&gt;Ya me han confirmado la aceptación en la forja del proyecto. Era obvio que me lo aceptarían, ya que me lo aceptaron en el cusl5 (no creo que se peleen entre ellos), pero había que esperar, y la verdad es que no ha sido tanta la espera. Y ahora tengo todas las herramientas necesarias y todo el contexto para poder empezar a trabajar.&lt;br /&gt;&lt;br /&gt;Así que, con todo, ésto son los "cuerpos oficiales" del proyecto:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Página del proyecto en gitorious (se aloja el repo git): &lt;a href="http://gitorious.org/freephylotree"&gt;http://gitorious.org/freephylotree&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Página del proyecto en forja.rediris (se aloja el repo svn): &lt;a href="https://forja.rediris.es/projects/cusl5-freephylo/"&gt;https://forja.rediris.es/projects/cusl5-freephylo/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Blog del proyecto: &lt;a href="http://freephylotree.blogspot.com/"&gt;http://freephylotree.blogspot.com/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;Y por ahora ésto es todo. A la derecha del blog, hay un gadget llamado "Sitios del proyecto y su autor" con éstas referencias. A medida que vaya configurando y/o añadiendo más sitios se irán comentando en éste blog y se colocará en dicho gadget. Por ejemplo, cuando active la página web principal del proyecto (que seguramente estará basado en la wiki que genera doxygen), se informará y se colocará en dicho gadget. O cuando disponga de documentación, o si activo la lista de correo (cosa que creo innecesaria por ahora), etc. En todo éstos casos, las "noticias" tendrán la etiqueta "Metaproyecto" -cómo ésta entrada-.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Meta&lt;/i&gt; es un prefijo que procede del griego y que se usa para indicar que vamos a elevarnos un grado de abstracción. En éste caso, las entradas etiquetadas con metaproyecto indican entradas que hablan sobre cosas del proyecto a gran escala o "desde fuera", como los sitios relacionados con el proyecto, el uso dado a los repositorios, las presentaciones realizadas del mismo, etc; y nunca de detalles sobre implementación, resolución de problemas, confección de ideas para nuevas funcionalidades y demás cuestiones relacionadas con el desarrollo.&lt;br /&gt;&lt;br /&gt;Creo que tener bien identificado éste tipo de meta-información es muy necesario, ya es que la que mejor permiten orientar a los "seguidores", y mucho más aún, a los nuevos visitantes. A medida que se vayan colocando nuevas etiquetas con fines especificos o importantes, también se comentarán en entradas de "metaproyecto".&lt;br /&gt;&lt;br /&gt;Para no crear complejidad innecesaria que confunda al personal, en la forja de rediris he desactivado todas las opciones que no uso, así, en la página del proyecto de la forja de rediris están desactivadas las opciones de documentación, de foros, de lista de correos, etc; y la visión del contenido del proyecto es mucho más clara: si no encuentras la lista de correo es que no se usa, y todos contentos. Para eso está este blog, y si llegara a tener mucha participación, entonces habilitaré la lista.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6406323640934495857-8579226302312228358?l=freephylotree.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freephylotree.blogspot.com/feeds/8579226302312228358/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://freephylotree.blogspot.com/2010/10/camaras-accion.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6406323640934495857/posts/default/8579226302312228358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6406323640934495857/posts/default/8579226302312228358'/><link rel='alternate' type='text/html' href='http://freephylotree.blogspot.com/2010/10/camaras-accion.html' title='Cámaras... ¡Acción!'/><author><name>Peregring-lk</name><uri>http://www.blogger.com/profile/00378641453100687666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_awMjJtuQx4U/TF21g-pkjJI/AAAAAAAAAAM/5VVMoirJWhE/S220/estrellaPunta.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6406323640934495857.post-640522736061431008</id><published>2010-10-24T08:04:00.000-07:00</published><updated>2010-10-25T07:27:03.829-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Presentación'/><title type='text'>Presentación</title><content type='html'>&lt;div style="text-align: justify;"&gt;Me acaban de confirmar la aceptación de mi nuevo proyecto, FreePhyloTree, en el CUSL5, y aquí inauguro éste blog para ir informando de mi progreso, mis ideas, mis peleas con las librerías, los intentos de suicidio a los que sobreviva y demás florituras que acaezcan en el desarrollo de éste proyecto.&lt;br /&gt;&lt;br /&gt;Antes que nada (y por tercera vez, tanto en el CUSL5, como en la forja), explicaré en qué consiste el proyecto. Se llama FreePhyloTree, y es una herramienta de visualización 3D de árboles filogenéticos, también llamados filogramas. ¿Qué es un filograma?, pues un árbol que refleja las relaciones evolutivas entre especies.&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;Por ejemplo, éste es un filograma bonito y decorado:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://www.llnl.gov/str/June05/gifs/Ovcharenko4.jpg"&gt;&lt;img src="https://www.llnl.gov/str/June05/gifs/Ovcharenko4.jpg" border="0" alt="" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 528px; height: 301px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Este árbol refleja, por ejemplo, como nosotros estamos más emparentados con los roedores que con las gallinas, ya que el ancestro común con los roedores es posterior al ancestro común con las gallinas, que está más cerca de la raíz. Y también refleja que existe un ancestro común a todos: la raíz del árbol. Para más información sobre la clasificación de las especies y los árboles filogenéticos, pueden visitar éste artículo de mi otro blog: &lt;a href="http://elperegrinocurioso.blogspot.com/2010/09/clasificacion-de-los-seres-vivos.html"&gt;clasificación de los seres vivos&lt;/a&gt;. Existen muchas maneras de representar árboles filogenéticos, y aquí se muestran otros ejemplos:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/9/9d/Edge_tree.gif"&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/commons/9/9d/Edge_tree.gif" border="0" alt="" style="cursor: pointer; text-align: center; width: 350px; height: 399px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/8/84/Tree_of_life_int_zh.svg"&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/commons/8/84/Tree_of_life_int_zh.svg" border="0" alt="" style="cursor: pointer; text-align: center; width: 720px; height: 500px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/6/6f/Filogenia_thylacinus.JPG"&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/commons/6/6f/Filogenia_thylacinus.JPG" border="0" alt="" style="cursor: pointer; text-align: center; width: 429px; height: 405px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Por mi parte, quiero crear árboles filogenéticos con una apariencia como ésta:&lt;br /&gt;&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 480px; height: 360px;" src="http://blog.excilys.com/wp-content/uploads/2010/05/gource-linux-small.jpg" border="0" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;Esta imagen tan bonita y elegante no es ni más ni menos que Gource, una herramienta hecha por google para visualizar el historial de cambios de un proyecto bajo git. Cada nodo de ese árbol es un directorio, y cada hoja, un fichero del proyecto. Gource crea una animación que va modificando ese árbol a la par que se van modificando los ficheros del proyecto (es decir, a medidas que se suceden las versiones del repositorio).&lt;br /&gt;&lt;br /&gt;Cuando conocí dicho software, sencillamente me encantó. Unido ésto a que me interesa el campo de la evolución biológica y que además no conocía ningún software que ayudara a su estudio, cuando decidí inscribirme al CUSL5 no se me ocurrió otra cosa que fusionar ambas ideas.&lt;br /&gt;&lt;br /&gt;Visualizadores de árboles filogenéticos, existen muchos. Libres menos, pero también los hay, y en realidad hay bastantes. En 3D, también. Pero ninguno es una herramienta didáctica, es sencillamente eso, un visualizador. En FreePhyloTree se pretende camuflar una especie de enciclopedia sobre evolución biológica dentro de un visualizador de árboles filogenéticos: visualizando el árbol, se conocen las relaciones evolutivas, y seleccionando cierto clado, se obtiene la información textual que ayuda a entender su historia y contexto evolutivo: historia de los descubrimientos, época geológica, contexto ecológico, etc. Llevar el seguimiento de la historia evolutiva de una especie se hace, así, mucho más fácil.&lt;br /&gt;&lt;br /&gt;Todavía no tengo planificado de qué naturaleza será dicha "enciclopedia": si cada clado se anexará a una página wiki integrada con el sistema, si existirá una línea temporal, con qué tipos de árboles contaremos  (filogramas o cronogramas, o una fusión de ambos), o de qué forma se interactuará con la base de datos.&lt;br /&gt;&lt;br /&gt;Normalmente, diversos autores tienen diversas ideas sobre la historia evolutiva de un grupo de organismos, lo que provoca una obvia confusión en los estudiantes: es muy complicado entender la filogenia de una especie si en cada referencia se muestra una historia evolutiva distinta; así que también se pretenderá crear una visualización cómoda y comprensible de los distintos posibles árboles que relacionan a un mismo grupo de organismos.&lt;br /&gt;&lt;br /&gt;El blog del proyecto, será el blog que estás leyendo. El repositorio principal está alojado en &lt;a href="http://gitorious.org/freephylotree"&gt;gitorious&lt;/a&gt;, y el repositorio secundario, y necesario para el CUSL5, estará alojado en la forja de rediris (pendiente de confirmación). En este último (ya que va con svn, -y ya va siendo hora de permitir git-) guardaré solo los commits importantes, los que añadan alguna funcionalidad nueva y así se facilite el seguimiento del repositorio (y de paso no ensuciamos el historial de commits y no volvemos loco a los evaluadores ;) ). La página principal del proyecto también es la ofrecida por la forja (pendiente de confirmación primero, y de construcción después).&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6406323640934495857-640522736061431008?l=freephylotree.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://freephylotree.blogspot.com/feeds/640522736061431008/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://freephylotree.blogspot.com/2010/10/presentacion.html#comment-form' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6406323640934495857/posts/default/640522736061431008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6406323640934495857/posts/default/640522736061431008'/><link rel='alternate' type='text/html' href='http://freephylotree.blogspot.com/2010/10/presentacion.html' title='Presentación'/><author><name>Peregring-lk</name><uri>http://www.blogger.com/profile/00378641453100687666</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_awMjJtuQx4U/TF21g-pkjJI/AAAAAAAAAAM/5VVMoirJWhE/S220/estrellaPunta.png'/></author><thr:total>5</thr:total></entry></feed>
