martes, 15 de julio de 2008

Nueva versión de KeyNote: 1.7.1

Muchísima gente conoce y disfruta del programa KeyNote, realizado por Marek Jedlinsk:

En Sourceforge.net: https://sourceforge.net/projects/keynote/
Su propia página: http://www.tranglos.com/free/index.html

Yo mismo lo uso muchísimo, pues hay que reconocer que es tremendamente útil y funciona muy bien.
Pero por lo mismo que lo uso tanto también le he venido a echar falta cierta funcionalidad. Por ello, a finales del año pasado me animé a descargarme el código fuente (está escrito en Delphi, en su mayoría preparado para Delphi 3, una versión ya algo antigua), a intentar comprenderlo y a modificarlo, corrigiendo algunas cosas y mejorando otras.

Me costó al principio porque lo primero que quise hacer adaptarlo a Delphi 2006; además, no estaban incluidos en el paquete que ofrecía Marek todos los ficheros de los componentes de terceros que se estaban utilizando. Entre otras cosas eso impedía compilar el programa. Al final, buscando por internet localicé esos ficheros (o al menos algunos que parecían equivalentes..) Tras algunas adaptaciones a la versión Delphi 2006 conseguí generar un ejecutable de KeyNote que funcionaba.
Para poder comprender mejor el programa y facilitar los cambios hice también un poco de reestructuración de algunos fuentes, principalmente extraer algunos métodos del fichero Kn_Main.pas (extremadamente grande y con funciones de todo tipo) y colocarlos en otros ficheros (o ya existentes o nuevos, en función de su cometido).

A partir de ahí realicé una serie de correcciones y adaptaciones:

-----------------------------------------------------------
25 November 2007 - version 1.7.1
* Añadida la posibilidad de establecer alarmas, asociadas a nodos

-----------------------------------------------------------
13 November 2007 - version 1.7.0
* Corregido un error que podía afectar tanto a las búsquedas como
a las exportaciones o al envío de email. En algunas raras ocasiones
el contenido de un nodo podía provocar que el mecanismo de búsqueda
se "bloqueara" en ese nodo: el contenido del nodo es volcado sobre
un control auxiliar; para algunos contenidos (muy pocos y raros)
una vez volcados en el control auxiliar éste no podía ser limpiado
ni reemplazado. Se ha adoptado una solución de compromiso: cuando
esto ocurre simplemente se elimina y se vuelve a crear nuevamente el
control.
Lo extraño es que este comportamiento se daba con cualquier control
temporal que se crease (TRxRichEdit, TRichEdit, TTabRichEdit), pero
no si como control auxiliar se usaba ActiveNote.Editor u otro editor
de otras pestañas. No he llegado a encontrar ninguna propiedad establecida
en ActiveNote.Editor que justifique la diferencia de comportamiento.
* Cambiado el comportamiento de ESCAPE en la ventana Scratch. En lugar
de pasar el foco al control de edición de la nota, minimiza KeyNote.
* Se mantiene la posibilidad de seleccionar Checkboxes para todos los nodos
(View/Tree Checkboxes -- Ahora View/All nodes Checkboxes) y se añade la
de poder mostrar Checkboxes sólo en los nodos hijos de uno dado.
(Children Checkbox)

* Corregido el error que hacía que se perdiera la marca de check al mover
un nodo. Ahora se mantiene tanto si se realiza mediante drag and drop
como con Shift, también se respeta si se trasfiere el nodo (o subárbol).
Nota:
De momento, si se mueve un nodo con Checkbox hacia otro que no muestra
checkboxes para sus hijos tampoco se mostrará en éste (aunque la marca de
check no se habrá perdido)

* Añadida la capacidad de ocultar nodos. Esto puede conseguirse de dos formas
** Activando un modo que oculta automáticamente los nodos chequeados
(Show or Hide checked nodes)
** Filtrando los nodos de una nota o todas las notas en base a los criterios
de búsqueda (Filter Tree Note)

En las búsquedas (y filtrados) es posible indicar si se quiere o no
considerar también los nodos ocultos.
Al seguir un favorito que apunte a un nodo oculto éste se hará visible.
Los nodos ocultos (por estar chequeados y aplicado el botón Check Hidden Nodes
o bien por haber sido filtrados) no impiden realizar cualquiera de las funciones
que se pueden aplicar a un árbol.




Con esto ya realizado me intenté poner en contacto con el autor, entre otras cosas para comunicarle los nuevos cambios hechos y solicitarle consejo sobre cómo dar a conocer esta nueva versión. Yo sólo he hecho algunas pequeñas mejoras, TODO el trabajo y el mérito evidentemente lo tiene él.
Ahora bien, pensé que también debía yo aparecer en el 'About KeyNote', pero dejando muy claro qué es lo que yo había hecho.

Hoy he comprobado que el proyecto dentro de Sourceforge.net está teniendo vida en su foro. Hay muchas personas que se siguen interesando por el programa y que se plantean evolucionarlo. Por ello me he animado a escribir un post en ese foro:
https://sourceforge.net/forum/forum.php?thread_id=2121339&forum_id=73406
explicando (en mi mal inglés) básicamente lo que aquí digo.

En principio mi idea no es continuar evolucionando este programa. Estoy trabajando en un nuevo programa con otra filosofía de diseño, y desarrollado en .NET. Al igual que Marek yo también lo haré disponible mediante alguna licencia de software libre. Cuando tenga consistencia lo iré dando a conocer.

De todas formas me parece una pena que no se aproveche el trabajo que ya he hecho, entre otras cosas porque estoy convencido de que hay muchísima gente que sigue utilizando KeyNote y le pueden resultar útiles las mejoras que le añadido (también algunas correcciones)

Por ello, aunque no sé muy bien dónde debería colgar tanto los fuentes como el nuevo ejecutable, lo haré si hay gente que está interesada. Aprovecho para pedir sugerencias sobre cómo hacerlo, pues no tengo experiencia en la publicación de software libre y quiero, tanto respetar adecuadamente la autoría de Marek como que se garantice el trabajo hecho por mí.

Nota: no he preparado todavía (ni tengo por ahora previsto hacerlo) ningún nuevo programa de instalación. Por ello, lo que hay que hacer es instalar la versión última de KeyNote (1.6.5) --si es que aún no se ha hecho-- y reemplazar el ejecutable Keynote.exe. También se debería sustituir la ayuda Keynote.hlp por un nuevo KeyNote.chm, así como sería correcto reemplazar los ficheros readme.txt y History.txt.

Para implementar algunos de los cambios de la nueva versión he tenido que ampliar ligeramente la especificación del formato de un fichero KeyNote. Todos los nuevos elementos son opcionales, por lo que la nueva versión puede abrir sin problemas un fichero correspondiente a la versión 1.6.5

9 comentarios:

pss: dijo...

Hola Daniel!

Fantástica tu idea de mejorar KeyNote 1.6.5, yo lo usé bastante hace mucho, actualmente utilizo TreeDBNotes Pro, sin embargo, me interesa y deseo hacerte algunas consultas:
1. ¿Puedes implementarle soporte para Tablas, Marcadores de Texto (bookmarks)?
2. ¿Puedes proveerle soporte para pegar desde la web contenido html (imágenes+texto) en una sola operación?
3. ¿Podrías agregarle una spreadsheet básica, como módulo o plugin?
4. ¿Puedes generar una versión en Español de KeyNote?

Agradeceré tus comentarios/respuesta
pss (Chile)

DPrado dijo...

Hola pss,

Con carácter general comentarte que a pesar de que he actualizado KeyNote añadiendo nuevas funcionalidades mi intención es desarrollar una nueva herramienta de gestión de notas, con una filosofía diferente, basado en un lenguaje y tecnología diferentes: vb.NET y db4o. (Ya estoy de hecho ya trabajando en ella)
Como usuario que soy de KeyNote, lo que le voy a pedir a la nueva herramienta es que incluya, en lo fundamental, todo lo que ya tiene KeyNote. Y aparte, tendrá todo lo que le echo en falta a KeyNote y me resulta dificil y costoso abordar desde KeyNote.

Dicho esto, no descarto añadir pequeñas mejoras o corrección de errores al actual KeyNote, pero esto depende de su coste, pues como te he indicado mi intención es derivar hacia una nueva herramienta.

De las cosas que enumeras te cuento:

1- La limitación de las tablas en KeyNote viene de la limitación del control RichEdit. Sobre los marcadores, actualmente ya tiene, aunque son mejorables (Mark KeyNote location, Insert KeyNote link).
Quiero mejorar considerablemente la relación entre notas o los enlaces y marcadores. Sobre las tablas también quiero trabajar, aunque si me resulta complicado (pues también me voy a basar inicialmente en RichEdit) intentaré reemplazarlo al menos con una gestión básica de hoja de cálculo (y te respondo al punto 3). Ya le he echado el ojo a varios desarrollos libres que podría adaptar en esa dirección.

2- En principio no me es prioritario, pero lo estudiaré también probablemente.

3- Lo tengo muy en cuenta

4- Habrá una versión de Tesela en español, por supuesto. Sacar una versión de KeyNote en español es perfectamente posible pero pesado, porque los textos están distribuidos en inglés por todo el código y las pantallas. Y no voy a estas alturas a cambiar el diseño de la aplicación para ello. Si genero un nuevo ejecutable en español cualquier cambio que deba realizar lo tendré que aplicar a dos versiones diferentes, inglesa y española. No sé, por ahora no lo tengo previsto.

Por cierto, la nueva herramienta también será Open source. Cuando esté un poco más madura la daré a conocer. Te puedo adelantar el que por ahora es el nombre que manejo para el programa: Tesela (piensa en las teselas de un mosaico)
Y otra cosa, tengo pensado poder importar desde el actual formato KeyNote (¿cómo no? :) )

Un saludo desde Sevilla (España)

pss: dijo...

Gracias por tu completa respuesta.
Ahora, a esperar la nueva aplicación: "Tesela"
¿Podrías presentar/adelantar algunos screenshots de la nueva aplicación?

Gracias nuevamente
pss

DPrado dijo...

Hay una nueva versión (1.7.2) que mejora el tratamiento de tablas.
Ya me cuentas

Sobre la nueva aplicación: Cuando esté un poco más madura la haré accesible desde SourceForge, y mostraré algunos ejemplos de pantalla

Un saludo

Anónimo dijo...

Aquí otro usuario de Keynote con años de uso diario. Quisiera proponer otra utilidad para Keynote. La posibilidad de asignar etiquetas "tags" a cada nota para después manejarlas dinámicamene mediante búsquedas y agrupamientos por etiquetas. No sé si pido mucho o poco porque de programar no sé nada pero creo que la etiquetación de los nodos podría ser útil.

DPrado dijo...

Lo que señalas de las etiquetas me parece muy interesante. De hecho es una parte muy importante del nuevo desarrollo en el que estoy trabajando (TESELA) --Bueno ahora mismo estoy muy volcado con una serie de actualizaciones sobre KeyNote NF, pero estoy deseando cerrarlas por un tiempo y volver a TESELA...---

De momento no tengo previsto incorporarlo a KeyNote NF.
Lo que hago por ahora en algunas ocasiones es seguir un convenio para etiquetar el contenido de una nota: incluir texto acotado de una manera concreta que me permita identificarlo en búsquedas o con el nuevo mecanismo de filtrado:
Ej: [HITO:1.1.7], [ToDO], "[[ToDo]]"
etc

Un saludo
Daniel

pss: dijo...

Hola Daniel!

Acá desde Chile (Sud América)

Desearía saber como va el desarrollo de "TESELA", es posible ya tener una visión de la aplicación, ¿está ya accesible/visible en SourceForge?
¿Podrías contarnos algo más cerca de la nueva aplicación?, ¿Cuál es el lenguaje de programación?, ¿usarás componentes de terceros (ejemplo: TRichView)? Agradeceré tu información
Saludos
pss

DPrado dijo...

Hola pss,
No te puedo dar mucha más información de la que en su momento te dí. El proyecto ni mucho menos lo tengo parado pero ahora mismo el poco tiempo que tengo lo estoy dedicando a realizar algunas mejoras a KeyNote NF. Muchos de esos desarrollos también los voy a aprovechar para TESELA, aunque sólo sea porque me obliga a estudiar y conocer más a fondo el control RichText de Windows, por ejemplo. Y las ideas aplicadas a KeyNote también son extrapolables a TESELA.

A tus preguntas:
- No, aún no está en SourceForge. Realmente con toda probabilidad lo acabaré publicando en Google Code, simplemente porque lo encuentro mucho más ágil y cómodo que SourceForge, al menos para proyectos pequeños.
Supongo que sabrás que KeyNote (KeyNote NF) está ya en Google Code.

Estoy aprendiendo mucho de lo que supone trabajar en Open Source, ofreciendo el código y permitiendo a la gente hacer sugerencias, manteniendo un control más adecuado de versiones (con Subversion en mi caso), etc. Cuando suba TESELA eso lo tengo ganado, pero también veo que se va mucho tiempo en responder a unos y otros. Como mi inglés no es precisamente muy bueno pues eso me hace que le dedique más tiempo a esas faenas.

Dicho esto, sí pienso dar más información sobre TESELA, básicamente porque intentaré levantar el proyecto junto con la documentación. Pero por ahora no puedo contarte mucho más.

Sobre el lenguaje ya te lo indiqué hace un tiempo: vb.net apoyado por la base de datos orientada a objetos db4o.
Sí pienso usar componentes de terceros allá donde me sea útil. En relación a lo que es el editor ya lo tengo prácticamente hecho (al menos lo fundamental) y me he apoyado, igual que KeyNote, en el control RichText de windows. Me he ayudado también de código escrito en KeyNote (convertido a vb.net), aunque mejorado, así como de códigos y sugerencias de otras personas, por ejemplo publicadas en CodeProject.

Espero que te sirva esta información.

Por cierto, en agosto me preguntaste si se podía generar una versión en Español. La versión actual (1.7.5) admite múltiples idiomas. Como ejemplo yo he ofrecido una versión parcialmente traducida pero que necesita completarse. ¿Te animas a hacerlo? En http://code.google.com/p/keynote-nf/issues/detail?id=23 se da más información

Un saludo

pss: dijo...

Hola Daniel,
Gracias por tu información, sólo quería saber acerca del grado de avance respecto de tu programa "Tesela", desde la última vez que te consulté.

En relación a KeyNote NF, no lo estoy usando, de hecho nunca lo volví a instalar, ahora estoy usando otra aplicación (TreeDBNotes Pro), a la espera de la tuya (Tesela).

Respecto de ayudar en la traducción de KeyNote, en verdad, no lo creo posible, dado que ya dejé de usarlo hace 3 años atrás, y por tu información, está muy lejos de alcanzar las características que yo necesito hoy día.

Mis requerimientos son las de poder capturar artículos y notas desde la web (texto+imágenes) en un sólo paso y manejar unas cuantas databases, con manejo de Adjuntos, Marcadores directos al texto (pág/párrafo/línea/palabra) y Manejo de Enlances (Links), en todo esto, la aplicación que uso actualmente es muy buena.

Bueno, solamente agradecerte tu respuesta e información y espero ver pronto algo más contundente y visible de Tesela.

Saludos
pss