Feeds:
Entradas
Comentarios

Archive for the ‘Ciclo #2’ Category

A día de hoy se ha finalizado la implementación del ciclo #2 de desarrollo del proyecto.

Este ciclo del desarrollo se puede calificar como el más importante que se va a llevar a cabo. Su objetivo era la implementación de la previsualización de los tipos de archivos más utilizados. Como consecuencia de ello, ha sido necesario tener en cuenta los siguientes aspectos:

  • Tipos de archivo: se han definido las categorías en las que clasificar los tipos de archivos. Se ha tenido en cuenta que muchos archivos pueden no ser legibles, estar mal formado o ser de tipos poco utilizados o específicos de una aplicación.
  • Detección del tipo de archivo: con el fin de clasificar los archivos a previsualizar, es necesario la lectura de su tipo mime y extensión.
  • Generación de la vista previa individual: para cada tipo de archivo es necesario la generación de la vista previa de una manera diferente. Esto ha conllevado la utilización de librerías específicas como ImageMagick o Ffmpegthumbnailer.
  • Gestión del disco duro: una vez generadas las vistas previas de cada archivo, es de suma importancia la gestión eficiente del espacio en disco. Para ello, se almacenan datos sobre los últimos archivos previsualizados y se intenta recuperar la vista previa que se generó la última vez. En este sentido, se ha de tener en cuenta que el archivo no haya sido modificado.
  • Visualización: a la hora de mostrar el resultado obtenido al previsualizar cada archivo, es importante dotar al programa de independencia de la librería gráfica a utilizar. Para ello se ha generado una estructura muy modular que permite la implementación de visualizadores para cualquier librería con únicamente implementar una interfaz común. En la versión actual del programa, se encuentra implementada la visualización mediante GTK+.
  • Gestión de iconos: cuando un archivo no resulta alcanzable o su tipo no es previsualizable por cualquier motivo, se ha de mostrar un icono que lo represente y nos dé información sobre qué tipo de archivo puede ser. Para gestionar este aspecto, se ha implementado la capacidad de usar “temas” de iconos que permitan a un usuario o implementador el diseño de nuevos iconos con los que sustituir los actuales.

Como es denotable, el trabajo ha sido muy grande. Es evidente que el ciclo podría haber sido dividido en varios que comprendieran cada uno de los puntos mencionados anteriormente. Sin embargo, la alta cohesión que existe entre ellos ha ido obligando a incorporárlos de manera progresiva.

Anuncios

Read Full Post »

Tras bastante tiempo sin escribir, vuelvo para comentar algunas decisiones tomadas en el desarrollo y que influyen profundamente en el diseño del proyecto.

En el ciclo 2 de la iteración estoy dedicando el tiempo a implementar la creación de las vistas previas de los archivos  y el mostrado de dicha vista previa para un único archivo introducido por línea de comandos. Tal y como se pensó al principio, la vista previa desaparecería pasado un tiempo determinado. Se ha optado por desechar esta idea y cerrar la vista previa cuando se pulse cualquier tecla. De esta manera se agiliza y se posibilita la previsualización de archivos individuales de forma veloz.

Ahora bien, la ejecución alternativa del programa consiste en lanzar una subshell que lea los comandos introducidos y los ejecute de forma normal. Lo que se añade es la visualización de un panel de escritorio externo a la consola y que muestra las vistas previas de los archivos de la carpeta actual de trabajo. De cara a la implementación, esto implica crear una subshell capaz de reconocer comandos de cambio de directorio, ejecutar cualquier tipo de comando y muchas más complicaciones. Teniendo en cuenta que se pretende obtener un resultado decente, se han estado considerando diferentes alternativas.

La más factible y que daría un resultado muy bueno es la utilización del código fuente de Bash, el intérprete de comandos por defecto en la mayoría de los sistemas Unix. Tras probar a descargar y compilar el código, se ha comprobado que no tiene dependencias (o al menos no ha dado ningún problema en el sistema de trabajo actual). Esto resulta de gran interés a la hora de reutilizar su código para añadirle mejoras. En nuestro caso, la mejora a añadir será la comunicación con la aplicación C++ que muestre las vistas previas del directorio actual de trabajo.

La alternativa que se acaba de explica presenta ciertos retos que no se prevén complicados de solucionar. El primero es la llamada a código C++ desde el código fuente de Bash, escrito al completo en C. El segundo es la definición de las interfaces de comunicación entre ambas aplicaciones para evitar la introducción del código C++ de la aplicación en el código C de bash y complicar la compilación. Tras realizar una pequeña prueba, se ha conseguido invocar una función C++ (que no formaba parte de ninguna clase) desde el código de bash, y al ejecutar la terminal el funcionamiento ha sido el esperado.

En definitiva, se pretenda realizar una incorporación de Terminal Previewer al código fuente de Bash y eliminar así los problemas para la creación de una subshell de una cierta calidad. Aunque en este ciclo no se va a realizar ningún esfuerzo en este tema, considero de gran importancia para el proyecto la decisión tomada.

Por último, mencionar que se está trabajando en la persistencia de las vistas previas en el disco duro para su reutilización en un momento cercano en el tiempo. Además, se han realizado avances en la generación de vistas previas de archivos de imagen, vídeo y audio.

Read Full Post »

Siguiendo con lo previsto, se ha terminado la implementación del test inicial que comprobará el funcionamiento de la parte implementada en el ciclo 2 del desarrollo.

Tal y como se contó en este blog hace más o menos una semana, en el ciclo 2 del desarrollo se comenzará con la previsualización de archivos. En este paso, se probará la visualización de un único archivo introducido por línea de comandos. Una ejecución válida sería algo como:

$ tp foto.jpg

El resultado de la ejecución del programa de esta manera será la aparición de una ventana en el escritorio que muestre la vista previa del archivo introducido. Esta vista previa desaparecerá al pulsar cualquier tecla o al pasar un tiempo determinado (5 segundos por defecto, configurable con el argumento  -t, –time).

El conjunto de archivos que se utilizarán para probar el funcionamiento correcto del programa se encuentra en la forja del proyecto. Se incluyen archivos de tipos muy variados que intentan cubrir en gran parte el abanico de tipos que está previsto que sean previsualizables.

Una vez definido este test, se comenzará con la implementación de la parte más importante del proyecto.

Read Full Post »

Conforme a lo planificado, en el ciclo #2 del desarrollo se trabajará la previsualización de archivos introducidos por línea de comandos. Al pasarle un único archivo como argumento al programa, éste mostrará durante un tiempo determinado una ventana con la previsualización del archivo.

Sin embargo, este ciclo puede llevar más tiempo del deseado. Esto es debido a la necesidad de implementar 2 funcionalidades que en un principio se pueden ver como una sola, tal como refleja la lista, pero que entrañan una dificultad considerable:

  • Detección del tipo de archivo y creación de la vista previa acorde al tipo
  • Visualización de la vista previa generada

La primera de ellas conlleva un esfuerzo extra, ya que implica la utilización de diferentes utilidades y librerías para la obtención de vistas en miniatura para cada tipo de archivo. Dependiendo del tipo de archivo, se mostrará lo siguiente:

  • Imágenes: miniatura
  • Audio: reproducción desde un punto determinado (inicio o medio)
  • Vídeo: gif animado con capturas
  • Texto: resumen del fichero (número de líneas, palabras, etc…)
  • Pdf: gif animado con páginas
  • Código fuente: lenguaje de programación y líneas
  • Archivos comprimidos: número de archivos y algoritmo de compresión

Como es evidente, en la lista de tipos de archivos no se mencionan gran parte. Se pretenderá dar cabida al mayor número posible de ellos, potenciando en un principio los anteriores.

En cuanto a la segunda tarea, se necesita incorporar a la aplicación una pequeña ventana gráfica que muestre la vista en miniatura obtenida. Se utilizará la librería gtkmm (GTK para C++). Debido al desconocimiento de los bindings utilizados por ella, se necesitará un tiempo extra de aprendizaje.

Como se puede ver, el tiempo previsto para un único ciclo de desarrollo es demasiado grande. Sin embargo, existe una gran dependencia de las dos subtareas descritas. Por tanto, se realizarán de forma conjunta aunque ello conlleve un tiempo mayor.

Se procederá en breve a la descripción e implementación del test correspondiente al ciclo #2.

Read Full Post »