Kabosu - Creando cosas

Logo de la página. Gato esférico con colores verdoso.

Mi sistema de notas

Publicado: 2024-06-11 (actualizado 2024-10-06)

Etiquetas: Linux, Proyectos, Software


Actualizado el 2024-10-06 para corregir algunos errores ortográficos.

Llevaba algo más de un año usando el programa libre Logseq para gestionar mis notas y tareas tanto en casa como en el trabajo. El programa no está mal y me ha servido pero desde el principio me molestaba un poco que todo en Logseq sean listas, que no se puedan organizar las notas por carpetas y algunos detalles más.

Hace cosa de un mes tuve la idea loca de programar mi propia aplicación de notas adaptada totalmente a mis necesidades. La aplicación de notas perfecta. Un par de horas me duró la tontería como explico en este artículo.

Mi aplicación de notas ideal

Yo llevo años gestionando mis tareas pendientes con una aplicación de notas u otra: Evernote, Onenote, Google Keep, Quiver, Obsidian, Logseq... y seguro que me he dejado alguna. He ido migrando los datos de una a otra y cambiando mi metodología pero básicamente tengo 4 conjuntos de datos:

Esas categorías están influenciadas por las ideas de Gettings Things Done (GTD) aunque no sigo ese método.

Me gusta dividir los TODOs y referencias en carpetas para tener las notas un poco organizadas. Por ejemplo, tareas que tengo que hacer la próxima vez que vaya al pueblo a ver a mis padres. Prácticamente cualquier aplicación de notas permite organizar las notas como a mí me gusta excepto Logseq que se basa en grafos.

Últimamente también tengo una lista de tareas diarias y semanales que he llamado rutinas. Son cosas que quiero hacer todos los días o semanas. No sé si hay alguna aplicación que permita manejar este tipo de tareas periódicas de forma intuitiva. Idealmente yo querría definir una tarea como diaria, semanal o mensual y que cuando llegara el momento se moviera automáticamente al grupo de tareas pendientes.

Solo necesito notas de texto. No me hace falta añadir imágenes y si me apuras ni siquiera Markdown.

Explícitamente no quiero sincronización en la nube ni en mi servidor privado ni nada. He llegado a la conclusión de que no necesito tener todas las notas disponibles las 24 horas del día en cualquier lugar del mundo.

Implementando mi aplicación

Empecé implementando una pequeña aplicación en modo texto con Python 3 usando SQLite para almacenar los datos. Siempre había querido hacer algo con esa mini base de datos y esta era la oportunidad ideal.

El primer escollo que me encontré en el desarrollo era cómo editar las notas. Pensé en hacer lo mismo que Git cuando hacemos un commit: crear un fichero de texto temporal y abrir el editor de texto por defecto (Neovim en mi caso). Cuando se cierra el editor, el contenido del fichero temporal se almacena como mensaje de commit. Era una solución elegante para mi aplicación y sencilla de implementar pero me quedé pensando en que si iba a estar creando ficheros temporales desde la base de datos y luego guardando de nuevo el contenido en la base de datos podía simplemente almacenar todas las notas como ficheros de texto y ahorrarme toda la conversión.

Así que decidí que guardaría las notas organizadas por directorios como archivos de texto. Editar una nota era tan simple como abrir el fichero con un editor. Unos minutos después de quitarme de encima SQLite vi que básicamente iba a escribir código en Python para organizar ficheros de texto. Algo que puedo hacer perfectamente con comandos de la terminal. Creo que no llevaba ni dos horas desarrollando la aplicación y ya había cancelado el proyecto. En ese momento empecé a crear ficheros de textos para cada una de mis notas de Logseq. Los he ido organizando un poco y a continuación explico el estado actual.

Mi sistema de notas

Lo llamo sistema de notas porque ya no es propiamente una aplicación. No pretendo que nadie lo use porque creo que es 100% personal. Solo quería escribirlo para así formalizarlo un poco y sacarlo de mi cabeza. Además, ni siquiera es definitivo. He estado escribiendo este artículo a ratos durante más de una semana y he ido cambiando cosas por el camino.

He creado unos directorios para almacenar las notas. Uno para cada una de las categorías que he listado más arriba:

Como en Linux las extensiones de fichero están de adorno y no tienen realmente ninguna función real decidí no poner ninguna. Así, para crear nuevas tareas ejecuto comandos como:

$ touch "TODO/llamar al banco"
$ touch "TODO/preparar documentación registro"
$ mkdir TODO/blog
$ touch "TODO/blog/minimizar HTML"
$ touch "TODO/blog/articulo sobre sistema de notas"
$ touch "TODO/blog/crear script para subir la web a neocities"
$ touch "routines/daily - bajar la basura"
$ touch "routines/weekly - copia de seguridad raspberry pi "

Para listar las tareas pendientes se puede usar ls pero yo prefiero find porque también muestra los ficheros que hay dentro de los directorios. Además find TODO significa literalmente que estoy buscando las tareas que tengo que hacer.

$ find TODO
TODO
TODO/preparar documentación registro
TODO/blog
TODO/blog/crear script para subir la web a neocities
TODO/blog/minimizar HTML
TODO/blog/articulo sobre sistema de notas
TODO/llamar al banco

Al completar una tarea solo hay que moverla al directorio done.

$ mv "TODO/llamar al banco" done/

Al usar los comandos de la terminal puedo hacer prácticamente lo que me ocurra. Por ejemplo, si un día no sé a qué dedicarme puedo elegir una tarea aleatoriamente:

$ find TODO | shuf -n 1
TODO/blog/crear script para subir la web a neocities

Las rutinas diarias y semanales se activan simplemente creando un enlace de los ficheros de routines a TODO.

$ ln -s "routines/daily*" .  # Empezar el día
$ ln -s "routines/weekly*" .  # Empezar la semana

Tengo esos comandos en scripts llamados start-day.sh y start-week.sh. El primero lo ejecuto manualmente cada mañana (o cuando me acuerdo) y el segundo los lunes. Deberían ejecutarse automáticamente con cron pero de momento lo estoy haciendo todo a mano.

Me siento muy cómodo con la terminal de Linux así que este sistema me resulta muy eficiente. Además en la empresa para la que trabajo controlan muy estrictamente lo que se puede instalar en los ordenadores. Al no tener que instalar nada puedo usar el mismo sistema en casa y en el trabajo.

Y este es mi método. He dejado de usar Logseq y he pasado a organizar mis tareas en ficheros de texto. De momento estoy contento. Principalmente por que me aclaro más con la estructura de directorios que con el grafo de Logseq.


Artículo siguiente: Pequeña actualización del blog
Artículo anterior: lscpu y las vulnerabilidades en los procesadores