Feeds:
Entradas
Comentarios

Archive for the ‘Implementación’ Category

Se ha estado trabajando estos días en la implementación de la posibilidad de crear pestañas y un menú superior. El resultado ha sido parecido al que se puede ver en Gnome-terminal, donde se pueden crear un número indefinido de pestañas y el menú superior es ocultable. La siguiente captura de pantalla sirve de presentación del trabajo realizado:

Además, y como parte de la interfaz, se ha añadido al proyecto la funcionalidad de localización. De esta manera, ya es posible traducir los mensajes de la interfaz para que se adapten al idioma del sistema del usuario. Ya que únicamente se ha implementado una pequeña parte de las capacidades que se desean de la interfaz, no se va a poner interés en traducirla a diferentes idiomas. En cuanto esté terminada en próximas funcionalidades, se publicará un tutorial para ayudar a la traducción y los archivos necesarios para ello.

Anuncios

Read Full Post »

Se da por concluido el ciclo #5 del desarrollo en el cual se ha implementado la funcionalidad de monitorización del directorio actual para actual el panel en consecuencia.

Para detectar los cambios, se ha utilizado la extensión del kernel inotify que nos permite leer de un descriptor de fichero estructuras de datos con la información de los eventos que ocurren. De esta manera, hemos conseguido detectar todos los eventos que se deseaban y gestionarlos adecuadamente.

Para adaptar la arquitectura a la generación de vistas previas de archivos individuales ha sido necesario modificar el Preview Manager y añadir funcionalidades nuevas a la clase Normal Previewer. Ahora, es posible la generación de vistas previas sueltas en el directorio actual y actualizar el Preview Manager.

Como parte de las pruebas, se han detectado errores muy importantes, los cuales han sido solventados. Algunos estaban ya presentes en el ciclo anterior. Para una información más detallada se recomienda ver la forja del proyecto en su sección de bugs.

En próximos días se tomará la decisión de la siguiente funcionalidad a implementar, teniendo en cuenta las peticiones de los usuarios en la encuesta que se publicó hace unos días.

Read Full Post »

En los últimos días se ha estado trabajando en las primeras tareas del ciclo #5 de desarrollo: la escritura de un test y el comienzo de la implementación. Como ya se dijo anteriormente, este ciclo de desarrollo se va a dedicar a la monitorización del directorio actual. Se detectarán creaciones de archivos, borrados y modificaciones para actualizar el panel y que la interfaz sea coherente con el terminal en todo momento.

El test inicial ya se encuentra disponible, y las funcionalidades de creación y eliminación de archivos implementadas. Se ha optado por utilizar la biblioteca inotify. Esta se encuentra integrada en el kernel y nos notifica de los cambios de directorios leyendo de un descriptor de fichero. Aprovechando la arquitectura actual, y realizando una pequeña modificación en el gestor de vistas previas en discos, se ha logrado un funcionamiento adecuado. En los próximos días se trabajará en la implementación de la actualización del panel para los archivos que hayan sido modificados.

Read Full Post »

Como parte del ciclo 4 de desarrollo, se ha trabajado en la utilización de las GNU Autotools para la configuración, compilación e instalación de la aplicación.

GNU Autotools permiten, haciendo uso de los conocidos comandos “configure, make y make install“, la generación de un archivo Makefile para su posterior uso en el proceso de compilación e instalación. Gracias al uso de estas herramientas, se permite la comprobación de dependencias de bibliotecas y herramientas necesarias para poder compilar el proyecto. Se consigue así hacer que el proyecto sea portable y fácilmente instalable e cualquier distribución GNU/Linux.

Para descargar la última versión del proyecto y compilarlo utilizando las herramientas descritas, consulta la sección de Descargas.

Read Full Post »

A día de hoy se ha finalizado la implementación del ciclo #3 del desarrollo. Como ya se comentó, el test a pasar era la navegación por el árbol de directorios utilizando los comandos habituales del terminal a la vez que las vistas previas de los archivos de dichos directorios se mostraran en el panel lateral.

A fin de comprender un poco las decisiones tomadas en este ciclo, se muestra la siguiente lista de aspectos relevantes:

  • Se ha tomado y modificado el código fuente de la última versión de bash. En cada cambio de directorio, éste avisa a nuestra aplicación a través de una fifo.
  • La aplicación integra un bash-tp (así es como llamamos a la modificación de bash realizada). Así, tanto el panel como el terminal se encuentran en la misma ventana de escritorio.
  • La generación de vistas previas ha sido optimizada mediante la utilización de hilos individuales para cada archivo a previsualizar.
  • La implementación llevada a cabo ha utilizado Gtkmm como biblioteca gráfica.

Para comprender el resultado obtenido, qué mejor manera que ver las siguientes capturas de pantalla tomadas de la versión actual de la aplicación.

Ahora una captura de la versión básica de la aplicación:

Como podemos contemplar, en la primera imagen la aplicación ha sido lanzada sin ningún fichero por línea de órdenes, y actúa en el modo normal de navegación por directorios. Al contrario, en la segunda ejecución, se muestra el resultado obtenido de la ejecución de la aplicación al pasarle por línea de órdenes un archivo (en este caso un vídeo). Se ha de tener en cuenta que en este caso en particular se muestra una de las opciones de generación de vista previa para los vídeos, consistente en generar múltiples capturas y concatenarlas.

Tras poner a prueba los resultados obtenidos, se puede afirmar que la aplicación se encuentra en una etapa usable. Tras trabajar con ella durante varios días, se llega a la conclusión de que aumenta la productividad enormemente, permitiendo la navegación por el árbol de directorios del sistema sin utilizar apenas comandos como “ls” o los navegadores Nautilus o Konqueror.

Por último, y como aspecto más técnico, cabe comentar la optimización llevada a cabo en la etapa de refinamiento de este ciclo. En ella, se ha optimizado la colocación de las vistas previas en el panel analizando la forma en la que GTK+ refresca las ventanas. Para ello, se han encapsulado las acciones a realizar en “Comandos”, que son independiente de la biblioteca gráfica que se utilice. En este caso particular, GTK+ los procesará al final de cada una de sus iteraciones del bucle principal.

En definitiva, se da por finalizado el ciclo #3 del proyecto. En una entrada posterior de este blog se expondrá el trabajo a realizar en el siguiente ciclo. Os animo a echar un vistazo, descargar y probar el proyecto.

Read Full Post »

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.

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 »

Older Posts »