visuse

VISUal Search Engine

Herramientas y tecnologías utilizadas

Las herramientas y tecnologías escogidas para el desarrollo de un proyecto deben ser escogidas cautelosamente, ya que pueden suponer el fracaso de éste o pueden aumentar su complejidad, para lo cual deberemos conocer cuales son las distintas alternativas y las necesidades de nuestro proyecto. Además todas las tecnologías son libres y compatibles con la licencia escogida para liberar el proyecto.

Del lado del cliente

En cuanto a ejecución de código en el navegador del usuario para determinar la disposición de los resultados, las alternativas son básicamente dos: utilizar código JavaScript o una aplicación utilizando la tecnología de Adobe Flash. La primera alternativa está hoy presente en la práctica totalidad de las navegadores y, aunque hay problemas por las diferencias entre los distintos intérpretes, existe cierto grado de estandarización. La segunda nos permitiría evitar esas diferencias de ejecución en los distintos navegadores si utilizamos la implementación oficial, sin embargo las aplicaciones Flash son pesadas de cargar, su tecnología es privativa (lo que va en contra de la naturaleza abierta de la web) y obligan al usuario a instalar un complemento a su navegador que muchas veces no está disponible en todos los navegadores (como pasa en los de los dispositivos móviles).

Debido a la falta de estándar de JavaScript/ECMAScript es aconsejable la utilización de una biblioteca que nos permita no tener que preocuparnos porque nuestros desarrollos se ejecuten de formas distintas en los diferentes navegadores. Además la utilización de grandes bibliotecas o framework simplifican la manipulación del DOM (Documment Object Model), el tratamiento de eventos y la comunicación asíncrona. Dentro de la amplia variedad de librerías para JavaScript disponibles me decanté por el uso de jQuery por su velocidad y simplicidad, porque tiene una baja curva de aprendizaje y cuenta con una excelente documentación y porque pone a nuestra disposición una gran cantidad de extensiones.

A la hora de hacer la disposición de resultados en la pantalla, una vez descartada la tecnología Adobe Flash por las razones comentadas, nos quedan básicamente dos alternativas: la utilización de XHTML/HTML o de HTML5. Para disponer imágenes en un punto concreto de la página es suficiente con la utilización de HTML en combinación con hojas de estilos indicando a las imágenes que se sitúen en posiciones absolutas, aunque sería más complicado lograr complejos efectos de animación (aunque no imposible, utilizandolo en combinación con JavaScript). En cambio, HTML5 es aún un borrador, no aportaría demasiadas funcionalidades (únicamente la inclusión de efectos bonitos con la utilización del elemento canvas) y está aún en proceso de implantación, sólo disponible en las últimas versiones de los distintos navegadores y en algunos casos parcialmente.

Del lado del servidor

Del lado del servidor, se eligió como lenguaje de programación Python debido a que se trata lenguaje de alto nivel que sin embargo no se puede considerar y que tiene una importante presencia entre las aplicaciones web debido a su velocidad y la facilidad para desarrollar en él. Además genera un código fácil de leer y su biblioteca estándar muy completa, especialmente fue especialmente útil en la serialización de los objetos en JSON, mediante la librería jsonpickle, para transmitirlos al lado del servidor.

En combinación con Django, permite la rápida creación de sitios web complejos desarrollados con una estructura modular, facilitando el uso de plantillas, accesos a bases de datos, uso de direcciones amigables y creación de cachés.

Comunicación

En la comunicación, como se ha comentado, se hace uso de JSON (JavaScript Object Notation), un formato ligero para el intercambio de datos, frente a su principal alternativa XML, un lenguaje de marcado de propósito general. La elección de JSON se debe a la velocidad en que se procesa en JavaScript, a que resulta muy simple tanto para humanos como para máquinas, a que está orientado a las estructuras de datos de los lenguajes de programación modernos y a que no necesitamos la validación mediante esquemas de las respuestas.

Realmente esta decisión no supone un gran compromiso, con unas simples modificaciones la comunicación se podría realizar utilizando XML sin afectar a las dos partes involucradas en la comunicación.

Anuncios

16 junio 2010 Posted by | Tecnologías | , , , , , , , , , , , , , , , , | Deja un comentario

Visuse 0.3 ya está aquí

Por fin está lista la versión 0.3 de Visuse, que ya se puede descargar y que, como ya os adelantamos, viene cargada de novedades:

  • Reestructura del código JavaScript del PhotoWall.
  • Enorme mejora en el rendimiento del código JavaScript:
    • Ahora no se comprueba al cambiar de página que las imágenes estén cargadas.
    • En cuanto llegan los resultados del primer buscador empiezan a cargarse imágenes.
  • Actualización cada 2 segundos de los resultados conforme cargan las imágenes.
  • Paso de página atrás.
  • Mejoras en la interfaz. Entre ellas el efecto “cine” para que los usuarios no tengan que abandonar la página para ver los vídeos o imágenes.
  • Cambios en el código para resolver problemas al pasar a producción con mod_python.

Esta versión también arregla distintos errores:

  • Fallo en búsquedas con acentos.
  • Desaparición de resultados de Google Images.
  • Error en las búsquedas de Flickr, que a veces mostraba resultados no relacionados. Por Fran Lucena.
  • Problema con la paginación y el refresco cuando alguno de los buscadores no devolvía ningún resultado.
  • Problema con la paginación y el refresco cuando fallaba la petición a alguno de los buscadores.

13 mayo 2010 Posted by | Lanzamientos | , , , , , , , , | 1 comentario

Acelerando Visuse

Desde un primer momento tuve claro que la velocidad del buscador es fundamental para dejar contentos a los usuarios y que lo siguiesen utilizando, por ellos los últimos esfuerzos que acabo de realizar en el proyecto son para mejorar la velocidad en la que el código JavaScript muestra los resultados.

En lo que es el algoritmo de situación de las imágenes había poco que optimizar, ya que se trata de un algoritmo voraz que consigue determinar la posición de cada imagen muy rápido. Sin embargo, a la hora de utilizar este algoritmo cometía algunos errores imperdonables y que hacían parecer al buscador lento y pesado:

  • Cada vez que se pasaba de página se comprobaba si las imágenes habían cargado.
  • No empezaban a descargarse las imágenes hasta que todos los resultados no habían llegado.
  • Las imágenes mostradas sólo se actualizaban cada vez que se descargaban todos los resultados de un buscador.

Tras reestructurar completamente el código, finalmente se logró el comportamiento esperado:

  • Las imágenes únicamente se cargan al principio (o se comprueba si han cargado en caso de que estén en caché).
  • Las imágenes empiezan a descargarse tan pronto como llegan los resultados del primer buscador.
  • La actualización de las imágenes mostradas se hace cada 2 segundos, mientras no hayan cargado todas las imágenes.

Estas mejoras, junto con la resolución de algunos bugs y mejoras en la interfaz, son las principales características que incorporará la próxima versión del software (la 0.3) y que espero lanzar en los próximos días (de cara a la final del CUSL nacional).

8 mayo 2010 Posted by | Mejoras | , , , , , , , , , | 1 comentario