El historial de deshacer

abril 5, 2007

Implemnetar la capacidad de deshacer en una aplicación tampoco parece, en principio, demasiado complicado, si se tiene la aplicación diseñada a base de comandos como es el caso de konqueror. Simplemente se guardan los comandos en una pila y ya está. El problema viene cuando tan pronto como tocamos con la realidad.

Resulta que konqueror permite tener varias instancias de sí mismas en ejecución, pero comparten un historial de deshacer entre ellas. Por ejemplo, arrastramos de una ventana a otra un fichero. Desde ambas (y desde cualquier otra) es posible deshacer ésta acción. Esta característica es típica en los administradores de archivos. Pero resulta que las “pestañas cerradas recientemente” son propias de cada ventana. Además, dependiendo de la vista en que se esté, solo se podrán deshacer un tipo de comandos u otro. Es decir, en la vista de navegador web no puede deshacerse la creación de pestañas.

Toda ésta parafernalia viene como resultado de que konqueror sea una aplicación extremadamente versatil y sirva tanto para administrar ficheros como de navegador web. En KDE4 el administrador de ficheros por defecto será dolphin, pero Konqueror seguirá siendo tan flexible como ahora.

A éste cóctel, añadir que resulta que Qt ahora implementa unas serie de clases específicas para manejar la pila de deshacer, y que nos gustaría poder usar. Pero no permite acceder ni eliminar cualquier elemento de la pila, sólo el que está encima del todo. He mandado un reporte de error a la gente de Qt para que subsanen ese problemilla.

De todo esto y más cosas he estado charlando ésta tarde con David Faure por IRC hoy, uno de los principales desarrolladores de KDE. Debido a que no está nada claro el tema, aun no se ha incluído el parche que mandé a la lista de desarrollo😉


Parche en las puertas de KDE

abril 3, 2007

La semana pasada fue infernal. Estuve intentando por todos los medios compilar KDE y menos mal que al final lo conseguí. Después de eso me he pasado muchas horas intentando arreglar el desguisado que teníamos montado con las pestañas recientemente cerradas: la integración en el historial de deshacer fallaba por algún lado. Usé el kdbg para intentar depurar el error pero finalmente he optado por reimplementarlo de una manera diferente y por fin funciona.

Un parche totalmente funcional y que yo sepa sin errores está disponible ahora mismo en la forja. He hablado por IRC con David Faure que es quien mueve los hilos en Konqueror y le he mostrado el parche, le he explicado lo que llevo hecho, y hemos quedado en que realice un mero cambio estético en el código y que luego lo enviaría a la lista de desarrollo de konqueror. El parche ha pasado muchas revisiones, y se encuentra listo, a un paso de traspasar a las puertas del juzgado celestial que permite la entrada en trunk.


Compilando es como se demuestra el rendimiento de la máquina

marzo 26, 2007

Habíamos decidido utilizar una versión más o menos estable, debido al gran cambio en el proyecto kde, y al tiempo que cuesta compilar cada versión nueva, cada semana, todo el kde, así pues nos pusimos de acuerdo y pusimos a punto la revisión 630194.

El miércoles estuvimos revisando el código del parche para ver definitivamente qué es lo que falta por arreglar, y qué podríamos mejorar para que lo metan definitivamente en kde. Lo único que falta es usar KConfigGroup para guardar las pestañas cerradas.

y esta mañana recibo un mail de Edu diciendo lo siguiente:

si señor, ese es un buen título para este mensaje de correo: no podía ser más
descriptivo. Y es que acabo de comprobar que una de las cosas que faltan a
nuestro parche a konqueror, el uso de KConfigGroup,  se facilita en las
nuevas versiones del repositorio Subversion. Sabes lo que significa eso?? que
hay que volver a compilarrrrrrr

Así pues toca actualizar la revisión, ahora utilizaremos la 645846 así que vuelta a compilar kde, y con mi G4, este proceso es largo, muy largo.

Por otra parte hemos pensado que ya es hora de comenzar con otra cosa, así que el otro día en mitad de una clase estuvimos comentado que es lo siguiente  a implementar: El gestor de sesiones.

Hemos pensado hacer un menú, donde se muestren las sesiones guardadas, y la actual, como una sesión más. La mejor forma de hacer esto es mostrando un árbol, donde se muestren cada sesión guardada, y al desplegar se muestren las ventanas y pestañas que hay dentro de esa sesión. La sesión actual iría como una sesión más, siendo posible guardarla con otro nombre, o arrastrar pestañas de una sesión a otra.

Si por una casualidad de la vida, konqueror fallara y se cerrara automáticamente deberíamos mostrar un mensaje de error al iniciar nuevamente, dando la posibilidad de recuperar la sesión anterior.

Bueno, esto es más o menos lo que hemos estado hablando, a ver si tenemos tiempo de hacer algo más al menos.


La gracia de trabajar en versión de desarrollo

febrero 26, 2007

Todo funciona razonablemente bien, y de repente te bajas los últimos cambios del Subversion y empieza a dar errores de compilación por todos lados, y no sabes qué hacer. Así de demoleddor resulta desarrollar para la versión en desarrollo de KDE 4😉. No me quejo tampoco demasiado, porque al final este tipo de experiencias te enseñan mucho más que trabajar sobre seguro. Es mucho más instructivo.

Ya me ha respondido David Faure al último parche que envié, pero aun le falta algunos retoques. De hecho algunos cambios que él sugirió en realidad se ha dado cuenta de que no eran necesarios pero ya era demasiado tarde porque ya los he implementado. De hecho ya se lo expliqué en un email que le envié, pero por falta de tiempo tardó en responder y.. de todas formas, he aprendido más sobre konqueror por el camino.

Este fin de semana he estado trabajando en mejorar el salvado de sesiones. Esto me servirá para la siguiente idea que preveo implementar, el administrador de sesiones como he vaticinado varias veces. Resulta que las sesiones actualmente guardan las ventanas y todas sus pestañas. Pero recientemente me dí cuenta que tanto Opera como Firefox guardan algo más: el historial de cada pestaña. Así que ni corto ni perezoso me puse a implementar esta característica para Konqi, y falta pulir la implementación un poco pero el grueso de ella ya está hecha.

Y en esto estaba cuando metí la pata con el SVN y todo dejó de compilar, y a cambio salían errores por doquier. Ahora he terminado bajándome una revisión anterior de kdelibs y kdebase que sé que funcionaba y lo he vuelto a compilar todo, y parece que funciona. Así que la tarea más inmediata será seguir puliendo el parche que implementa la recuperación de pestañas cerradas recientemente, e intentar terminar de arreglar el salvado del historial en las sesiones.

Próximamente, más y mejor! El miércoles a más tardar.


La libertina cueva del lobo

febrero 19, 2007

Como muchos, dejamos el tema del concurso por navidad y desde entonces estuvimos liados con los exámenes y trabajos varios, esclavos del sistema de evaluación alternativa. Ahora pasamos página porque empieza un nuevo cuatrimestre, y con él una vida nueva en la que si hay cabida para este emocionante proyecto.

El proyecto sigue más vivo y efervescente que nunca: la semana pasada estuvimos por fin de nuevo en SUGUS una tarde entera dedicada a arrancar una vez más el trabajo desde donde lo habíamos dejado. He vuelto a compilar KDE 4 desde cero, porque en un mes ocurren muchas cosas en la rama de desarrollo, de hecho lo primero que hubo que hacer es arreglar nuestro “viejo” código porque algunas cosas habían cambiado, había funciones que tomaban argumentos diferentes y cosas de ese estilo, pero nada grave. La recompilación me ha venido muy bien porque ahora he conseguido que las aplicaciones de KDE 4 se lancen directamente en mi entorno KDE3 sin Xnest de por medio, y además con antialiasing en las fuentes.

Y este largo – cuento desde el Jueves – fin de semana carnavalesco y estatutario para muchos, ha estado para mí, por circunstancias de la vida, principalmente enfocado a la programación de Konqueror. La primera característica de las que queremos implementar, el historial de pestañas cerradas, antes llamado Trash Tab y ahora renombrado a “Closed Tabs” que creemos más descriptivo, está casi casi terminada. La característica está tan terminada que ¡es posible que pronto sea incluida en el código oficial de Konqueror!

Recapitulemos: a principios de diciembre del año pasado, consideramos que nuestra mejora de konqueror había conseguido una primera implementación usable, y mandamos el parche a la lista de desarrollo para que nos aconsejasen y nos dijeran qué les parecía. Nos hicieron una serie de sugerencias; pues bien, las he implementado.

Muchas cosas han cambiado:

  • Ahora manejamos verdaderamente pestañas y no vistas. Para los que no son usuarios de konqueror o no conozcan esta peculiaridad, resulta que una pestaña la puedes dividir en varias vistas, tanto vertical como horizontalmente. Y luego, cada vista en otras tantas.. es recursivo, pero no suele hacerse demasiadas veces (yo como mucho he llegado a usar 4 vistas a la vez) por motivos espaciales jeje. Esto tiene gran utilidad, por ejemplo cuando quieres usar konqueror como cliente FTP: en una vista pones el listado de ficheros locales, y en la otra la lista de ficheros remotos a la que accedes con ftp://tuserver.com/path/. Pues bien, antes si cerrabas esa pestaña, se guarda en la lista de “trash tab” como dos objetos diferentes, y las recuperabas como 2 pestañas separadas de una sola vista. Ahora ya esto está totalmente solucionado!
  • En Konqueror de KDE 4, existe un nuevo menú Ir/Go, donde puedes acceder a lugares como Home, Desktop, o el Historial más reciente. Pues justo despues del submenú historial, hemos agregado el submenú “Pestañas cerradas recientemente”, de forma análoga a cómo en Firefox 2.x tenemos Historial > Pestañas Recientemente cerradas.
  • Y un de las cosas que más ha costado implementar es añadir al Historial de Deshacer las pestañas cerradas. Es decir, que por ejemplo si cierras una pestaña, puedes pulsar Ctrl+Z y automáticamente se recupera como estaba (o pulsar “Editar > Deshacer: Pestaña cerrada”). Esto quiere decir que la característica de las pestañas cerradas está disponible en 3 lugares diferentes! En la barra de herramientas, en el Menú Ir, y en Deshacer.

(Podría aburriros con alguno de los detalles de implementación, pero podéis suspirar aliviados porque como esta entrada ya es uficientemente larga, lo dejaré para otra vez)

¿Porqué no postee un mensaje de actualización antes? Pues decía antes que he implementado las sugerencias que nos hicieron. El caso es que ayer envié un correo a la lista de desarrollo de konqueror con los cambios realizados, y quise esperar a que me contestasen antes de escribir esta entrada. Y me respondieron: nos han sugerido algunas modificaciones técnicas, como usar KUrl::List en vez de QList y cosas similares, pero en general les ha gustado los cambios (sobre todo que haya implementado el deshacer :D) y parece que no habrá mucho problema en que el parche termine acabando en trunk.

Los cambios sugeridos tardaremos más o menos en implementarlos, pero no me cabe la menor duda de que lo conseguiremos. La idea de tocar un código ajeno y tan imponente como el de KDE, maxime siendo versión en desarrllo, al principio parecía que echaba para atrás, imponía y no fue un camino de rosas, pero le estoy cogiendo el gustillo a la dinámica de trabajo que resulta de trabajar para KDE.

Y pronto, una nueva entrega de los aventuras de dos informáticos que se meten en una libertina cueva del lobo.


Segundo ScreenShot, TrashTab funcionando

diciembre 13, 2006

Bueno, como Edu ha comentado, ya está el trashtab andando, y aquí va un pequeño screenshot.

trashtab2 screenshot


Primer objetivo completado

diciembre 7, 2006

Una táctica bastante útil para conseguir algo grande es hacerlo pasito a pasito. De ésta manera cada paso conseguido es un logro, y como son muchos pasos, termina siendo reconfortante. El icono de la papelera de reciclaje ya funciona sin problemas. Tenemos una lista interna donde se van guardando todos las vistas/pestañas que konqueror vaya cerrando, y pulsando en el icono de la papelera que Dani creó puedes reabrir la última pestaña cerrada. También puedes acceder a las 10 últimas mediante un menú desplegable.

Por supuesto, que funcione sin problemas no significa que esté terminado del todo, pues siempre cabe lugar a un mayor desarrollo. Por ejemplo:

  • Como digo, se guardan toodas las pestañas que has cerrado pero sólo se muestran las 10 más recientes. Esto permite que si has cerrado 20 pestañas y recuperas una de las 10 que se muestran en la lista desplegable, al volver a abrir la lista no aparecen sólo 9, sino 10: las 9 de antes y otra URL más. No obstante probablemente terminemos limitando el número máximo de pestañas a almacenadas a unas 50-100.
  • Podríamos hacer que el número de pestañas a mostrar en el menú desplegable sea configurable mediante una entrada de configuración, añadirle atajos de teclado y numerar las entradas, poder vaciar la papelera..
  • Antes he dicho que por cada pestaña/vista que se cierre, se guarda una entrada en la lista de pestañas cerradas. Esto es porque konqueror permite subdividir una pestaña en un número indeterminado de vistas. Quizá sería conveniente que se pudiese recuperar no solo la URL de cada pestaña/vista, sino la disposición de las vistas dentro de una misma pestaña. Pero esto tiene el inconveniente de que ya no debemos guardar URLs sino objetos más complicados en la lista, y que además en las pestañas con varias vistas, éstas se pueden cerrar de una en una y no sólo todas a la vez, etc.

Actualmente la lista de URLs cerradas es por ventana. Pero.. ¿y si queremos recuperar la ventana que acabamos de cerrar? Para ello podríamos tener una lista global propia del navegador y no de cada ventana, pero entonces cabe plantearse cómo mostrarla al usuario de manera que éste lo entienda y aun así maneje todo de forma sencilla. Probablemente podría solucionarse teniendo además de las listas por ventanas, una global que almacenase las ventanas cerradas (y todas sus pestañas), y mostrar al usuario la unión de ambas en el menú desplegable. Otra posibilidad sería la sincronización de las listas de las diferentes ventanas mediante eventos.

Me he dado cuenta que este “añadido” que hemos escrito para Konqueror tiene mucho que ver con otro de los objetivos que nos propusimos: mejorar el manejo de sesiones. Al fin y al cabo, también se trata de guardar el estado de las ventanas y las pestañas, aunque se realice y muestre de distinta manera. Por ello anticipo que ¡ese será nuestro siguiente objetivo! un gestor de sesiones tal que eclipse al de Opera. Y con lo que aprendamos realizando eso, puede que se nos aclaren las dudas sobre cómo terminar el último punto de la lista de arriba😉.

Siento no poneros una captura aun del botoncito de marras con su lista desplegable. No es nada espectacular y además no ha variado apenas respecto a lo que mostró Dani en el último post. Pero no os voy a engañar, esa no es la razón por la que no hago una captura, porque a todos nos gusta el eye candy y maxíme en un tochaco como el que he escrito. El problema es que las fuentes de texto no las he logrado configurar bien en mi máquina, así que hasta que no consiga arreglarlo, todas las capturas las hará nuestro amigo Dani. Felicidades a los que hayan llegado hasta esta última línea.