Una mirada a la toma de notas
Una tarea fundamental de mi trabajo es tomar notas. Puede parecer una tarea sencilla: coges un papel, un bolígrafo o una estilográfica y escribes lo que necesites recordar más adelante. Probando ese sistema todo termina en un montón de garabatos esparcidos por papeles que acaban perdiéndose o mezclándose de tal modo que puedes tener un dato anotado, saber que lo anotaste y nunca volver a encontrarlo. Frustración es lo que consigues a lo largo del tiempo. Para evitar esto pasé a cuadernos o agendas que no permitieran el ir perdiendo hojas. Pero nada impide que añadas múltiples papeles sueltos y posits con anotaciones entre las páginas del cuaderno (o de la agenda) o que arranques alguna. Luego me pasé a las tarjetas de notas y ocurrió más o menos lo mismo. Viendo la precariedad del sistema, lo intenté también con medios electrónicos, pero el problema se mantuvo, lo que conseguí cambiar es un montón de papeles por tener un montón de archivos de texto con anotaciones mezclándose como sus equivalentes analógicos dentro del cajón.
La parte fundamental que me faltaba era tomarme en serio la tarea de
tomar notas. Algo que es fundamental para el desarrollo de mi
profesión pero que nunca nadie me explicó, ni se le dio importancia
alguna mientras estudiaba la carrera. Lo que nunca nadie me explicó es
que tomar notas no consiste sólo en anotar ese dato que sabes que
luego te hará falta, sino tener un sistema por el que buscar dicho
dato después. Una nota olvidada en el rincón de un cajón tiene el
mismo efecto que si nunca la hubieras tomado, o peor aún, pues sabes
que lo anotaste y no puedes encontrarlo. Después, conocí el método
Zettelkasten y me conciencié que un buen sistema de notas requiere
dedicar un tiempo a ordenar y relacionar la información, para luego
poder encontrarla. Podía volver al cajón con tarjetas de notas o
continuar con un directorio lleno de archivos org
con las más
variadas anotaciones dentro: anotaciones de datos personales de
clientes, de datos de sesiones, de consultas a libros, de temas para
el blog, de curiosidades que me llaman la atención o de cosas que
estoy estudiando. En fin, un sindiós al que había que disciplinar y
meter en vereda y Zettelkasten exponía un método congruente.
Así me pasé algo de tiempo jugueteando con org-roam
, procesando las
notas que antes estaban en un directorio y que consultaba con deft
.
El cambio funcionó un tiempo hasta que org-roam
cambió de versión y
comenzó a tirar de una base de datos squlite
externa. Perdió
bastante flexibilidad. Con deft
tenía mis notas en diferentes
directorios, podía buscar en uno u otro, cambiar de directorio al
cambiar de actividad, separando las notas profesionales de las del
blog, por ejemplo, o tenerlas todas en un vistazo. Por eso, en lugar
de migrar mis notas de org-roam
v.1 a v.2, pasé las notas a
zetteldeft
y lo he estado utilizando durante algún tiempo. Hace
poco me preguntaron por org-roam
de nuevo y volví a probarlo, sólo
para poder hablar con propiedad. No podía criticar el sistema sin
probarlo de nuevo. Mis conclusiones las podéis leer en este mismo
blog, en el artículo anterior. Pero para resumirlo diré, que cambiar
el directorio de notas al vuelo, en org-roam
significa la renovación
de la base de datos. Algo que no sería muy pesado haciendo pruebas,
pero cuando aumenté el número de notas —tan sólo a una cuarta parte de
las que tengo— el tiempo de espera se incrementó bastante y decidí
continuar con zetteldeft
. Lo único que me aportaba org-roam
era la
vistosidad de org-roam-ui
, que es cierto que es espectacular, pero
que finalmente no resulta tampoco una herramientas demasiado flexible,
porque depende de org-roam
.
Buscando más información y conversando por la Internet sobre
zetteldeft
me comentaron que el propio autor de zetteldeft
había
descontinuado el mismo y se había pasado a denote
. Pasé a probarlo
para decidir con cuál me quedo. Mi conclusión final es que,
efectivamente, me pareció un sistema mucho más sencillo de utilizar:
- No reinventa la rueda: utiliza otros paquetes que están hechos para
hacer alguna de las tareas. Por ejemplo, para las búsquedas puedes
utilizar
deft
,grep
,consult
, cualquiera, lo que te sea más cómodo o a lo que estés ya acostumbrado. - Soporte nativo para el cambio de directorios con
denote-silos-extras.el
. Puedo seguir jugando con el cambio de directorios sin tener que esperar a que se rehaga una base de datos externa. - La captura de notas es muy rápida y permite tener diferentes
plantillas para hacerlo. También a través de
org-capture
. - Permite la utilización de notas
.org
,.md
,.txt
y conviviendo en el mismo silo.
Ahora bien, si me preguntas si estoy contento al 100%, mi respuesta es: me falta poco. De hecho, llevo pensando un tiempo que debería hacer mi propio sistema de notas para ajustarlo a todo aquello que hecho en falta en los que he probado hasta ahora. Hace un tiempo ya hablé de TiddlyWiki y lo sigo utilizando, pero no como un sistema de notas, sino como un wiki que me permite tener páginas web como la de la radio sin mucho esfuerzo. También utilicé Zim en su día.
Pruebas y más pruebas
Ahora mismo tengo instalados tres sistemas de notas en Emacs, que están conviviendo de aquella manera y que mantendré hasta una charla que tengo prometida para un vídeo de los de hispa-emacs sobre la toma de notas. La convivencia de los tres paquetes se hace un poco pesada a estas alturas y estoy deseando eliminar el lastre en la configuración.
Mantendré deft
, porque la visualización en tabla y la búsqueda
rápida de contenido me parecen bastante buenas. He probado el paquete
denote-menu
, pero la funcionalidad del mismo es bastante pobre.
El ingenioso arte de mantener los tres sistemas va de la siguiente manera:
deft
y zetteldeft
El código a continuación permite mantener las notas en directorios separados y cambiar entre ellos.
;; Tomar notas (use-package deft :ensure t :bind ("<f5>" . deft) :commands (deft deft-refresh) :config (setq deft-directory "~/Nextcloud/Notes" deft-extensions '("org" "md" "txt") deft-use-filename-as-title t)) (use-package zetteldeft :ensure t :after deft :config (zetteldeft-set-classic-keybindings)) (setq zetteldeft-title-suffix "\n#+tags: #") (setq deft-default-extension "org") (setq zetteldeft-backlink-prefix "- Backlink: ") ;; Cambio de directorio Deft (defun deft-cambio-dir (dir) "Cambiar de directorio Deft al `DIR' de forma interactiva." (interactive "DNuevo directorio Deft: ") (message (format "Se cambia def-directory a: %s" dir)) (setq deft-directory (expand-file-name dir)) (deft-refresh)) (defun deft-recursivo () "Establece que `deft' busque también en subdirectorios." (interactive) (setq deft-recursive t) (deft-refresh)) (defun deft-no-recursivo () "Hace que `deft' no busque en subdirectorios." (interactive) (setq deft-recursive nil) (deft-refresh)) (global-set-key (kbd "C-<f5>") #'deft-cambio-dir) (global-set-key (kbd "M-<f5>") #'deft-recursivo) (global-set-key (kbd "S-<f5>") #'deft-no-recursivo)
Como veis he asignado a la tecla <f5>
el acceso a deft
y también
he programado un cambio de directorio, asignado a C-<f5>
y la
posibilidad de hacer que busque en subdirectorios con M-<f5>
o que
deje de hacerlo con S-<f5>
. Por defecto, las notas las tengo
sincronizadas a una nube Nextcloud particular y de esa manera son
accesibles desde distintos dispositivos, como tablet y móvil.
Con org-roam
sólo hice unas pocas pruebas, como ya he comentado.
Trasladé algunas de las notas a este sistema, hice las pruebas y sigue
instalado temporalmente.
denote
Configurar este paquete hubiera sido más sencillo si no hubiera tenido
que modificar todo el key-map
del paquete, para que no se pegara con el
org-roam
ya instalado cambié todas las teclas a la combinación base
C-c z
... aunque para acceder a las notas, me gustaría más C-c n
(ahora asignado a org-roam
).
;;; instalación de denote (use-package denote :defer t :config (setq denote-directory (expand-file-name "~/denotas/") denote-known-keywords '("emacs" "cie-11" "blog") denote-infer-keywords t denote-sort-keywords t denote-prompts '(title keywords) denote-date-prompt-use-org-read-date t denote-backlinks-show-context t)) (add-hook 'find-file-hook #'denote-link-buttonize-buffer) ;;(require 'denote-journal-extras.el) (setq denote-journal-extras-directory "~/denotas/diario") (setq denote-journal-extras-title-format 'day-date-month-year) ;; Keybindings para denote (let ((map global-map)) (define-key map (kbd "C-c z j") #'denote-journal-extras-new-or-existing-entry) ; entrada a diario (define-key map (kbd "C-c z n") #'denote) (define-key map (kbd "C-c z N") #'denote-type) (define-key map (kbd "C-c z o") #'denote-open-or-create) (define-key map (kbd "C-c z d") #'denote-date) (define-key map (kbd "C-c z z") #'denote-signature) ; "zettelkasten" mnemonic (define-key map (kbd "C-c z s") #'denote-subdirectory) (define-key map (kbd "C-c z t") #'denote-template) ;; If you intend to use Denote with a variety of file types, it is ;; easier to bind the link-related commands to the `global-map', as ;; shown here. Otherwise follow the same pattern for `org-mode-map', ;; `markdown-mode-map', and/or `text-mode-map'. (define-key map (kbd "C-c z i") #'denote-link) ; "insert" mnemonic (define-key map (kbd "C-c z l") #'denote-link-or-create) (define-key map (kbd "C-c z I") #'denote-add-links) (define-key map (kbd "C-c z b") #'denote-backlinks) (define-key map (kbd "C-c z f f") #'denote-find-link) (define-key map (kbd "C-c z f b") #'denote-find-backlink) ;; Note that `denote-rename-file' can work from any context, not just ;; Dired bufffers. That is why we bind it here to the `global-map'. (define-key map (kbd "C-c z r") #'denote-rename-file) (define-key map (kbd "C-c z R") #'denote-rename-file-using-front-matter)) ;; Key bindings specifically for Dired. (let ((map dired-mode-map)) (define-key map (kbd "C-c C-d C-i") #'denote-link-dired-marked-notes) (define-key map (kbd "C-c C-d C-r") #'denote-dired-rename-marked-files) (define-key map (kbd "C-c C-d C-R") #'denote-dired-rename-marked-files-using-front-matter))
He añadido también el paquete denote-menu
, que muestra las notas en
forma de tabla, sin embargo, no proporciona filtros y la ordenación se
restringe a la fecha, tanto ascendente como descendente.
(use-package denote-menu :defer t) (global-set-key (kbd "C-c z m") #'denote-menu-list-notes)
En este sentido, me resulta más práctico acceder a deft
y cambiar el
directorio al correspondiente a denote
.
¿Qué necesito en mi toma de notas?
Debo reconocer que org-mode
me ha malacostumbrado, con él puedes
hacer de todo y algunas herramientas se me hacen, a estas alturas
imprescindibles. Tanto, que el proyecto de crear mi propio sistema
de notas se percibe tan complejo como el propio org-mode
y por
tanto, tan desafiante y lleno de aprendizajes que me estoy planteando
seriamente hacerlo.
De momento se podría decir que con estos sistemas tengo la mayoría de
mis necesidades cubiertas. Sin embargo, para algunas cosas he de tirar
de herramientas externas al propio Emacs y org-mode
... como decía
Extremoduro: salir, entrar, el royo de siempre.
Lo que necesito, son unas pocas cosas:
- Gestión de calendario. Algo que para concertar citas es
fundamental, y una vez me he acostumbrado a la agenda de
org-mode
y a cambiar de vista con una tecla, me resultan innecesariamente complejos otros sistemas. - Gestión de tareas periódicas. Como autónomo, la presentación de IVA e impuestos trimestrales u otras tareas periódicas, como el programa de radio, el repaso semanal a la contabilidad, etc. Aparecen en mi agenda de forma automática y además las puedo marcar cuándo las hago y llevar un registro de cuándo hice qué cosa.
- Control de tiempos. Algunas de las tareas que realizo las cobro
por horas, por lo tanto, el cronometrar cuánto tiempo invierto en
ello me facilita luego la facturación. Esto es algo que
ya apareció en este blog y no hace falta repetirlo. Lo hace
org-mode
de una manera sencilla. - Notas cifradas. En mi trabajo la confidencialidad es una de las
necesidades básicas del día a día. Poder tener notas cifradas sobre
mis clientes y sus problemas, es básico para mí. Basta con terminar
el nombre del archivo de la nota con
.gpg
para que se cifre automágicamente. - No sólo texto. Las anotaciones, efectivamente, suelen ser de
texto, sin embargo, algunas veces necesito adjuntar algún gráfico,
como los perfiles de tests y otros adjuntos, como archivos
pdf
, por poner un ejemplo. Emacs además proporciona las suficientes herramientas para visualizar casi todos los tipos de adjuntos. - Separación de notas. Cuando te dedicas a una sola cosa, parece buena idea tener todas las notas en el mismo sitio. Sin embargo, me dedico a varias actividades independientes y por tanto necesito que no se me mezclen las anotaciones. Especialmente las que se refieren a facturación, pues unas llevan IVA y otras —las clínicas y las educativas— están exentas de ese impuesto. Además, las notas sobre las sesiones con clientes están en un disco duro externo cifrado y no se deben mezclar con otro tipo de notas.
- Accesible desde distintos dispositivos. El problema viene, normalmente, de acceder con otros sistemas operativos, como por ejemplo, Android/®. Cuando salgo por ahí, no suelo llevar el ordenador más que contadas veces, como cuando voy a hacer el programa de radio, y es más cómodo trasladarme con una /Tablet barata que no me supondrá demasiada pérdida si se estropea o le pasa algo.
De todos estos puntos —seguro que ahora mismo no caigo en algún
requisito más—, el más complejo es el 7. El resto (y mucho más) lo
hace org-mode
por nosotros sin despeinarse. El asunto de tener
varios dispositivos con las notas sincronizadas es lo complicado y he
utilizado varias aplicaciones y métodos para hacerlo, como
aplicaciones de sincronización, nube. En la actualidad estoy
optando por tener un repositorio, al fin y al cabo, las notas en su
mayoría son texto plano. Además, sigo teniendo mi nube prsonal, en mi
sitio web, mediante NextCloud y me permite compartir datos, como el
repositorio, porque es un fichero fossil
.
Si te preguntas por qué utilizo fossil
y no git
la respuesta tiene
varias vertientes. La primera es que un repositorio fossil
es
monolítico —un fichero sqlite
con todo dentro— y eso nos da alguna
ventaja al compartirlo por NextCloud. O dicho de otro modo: uno de
los problemas que me encontré cuando lo intenté con git
es que los
cambios de un repositorio git
se almacenan en archivos sueltos
dentro de un directorio oculto del sistema. Además NextCloud se
lleva mal con los archivos y directorios ocultos y no siempre
sincroniza correctamente, sin contar con las ocasiones en las que hay
colisión entre las versiones de los distintos dispositivos. Alguna
vez me encontré el repositorio totalmente inservible por efecto de una
mala sincronización, pues cuando hay conflicto en NextCloud suele
añadir archivos duplicados para no borrar nada. Si no estaba atento a
los errores de sincronización y abría git
, la aplicación se
encontraba con que el repositorio tenía elementos extraños que no
sabía cómo manejar.
Por otro lado, aunque con fossil
también hay conflictos, pero, el
resultado es mucho más manejable. Si ha habido algún choque de
versiones se mantiene el archivo anterior y añade el elemento extraño.
El efecto resultante es que el repositorio no se ha actualizado, no
hay error ni se corrompe el log. Simplemente, vas a NextCloud
solucionas el error y actualizas de nuevo con fossil update
.
Planes futuros
Lo dije antes: llevo tiempo queriendo hacer una aplicación sencilla
que cumpla con todas mis necesidades en el ámbito de la toma de
notas. ¿Para qué? Pues para aprender. A eso se le juntan las ganas de
aprender PicoLisp, un lenguaje minimalista de la familia de los
LISP. Aunque no hay necesidad a estas alturas, porque tengo montado
un sistema de mínimo esfuerzo juntando distintas piezas de terceros:
Emacs, org-mode
, denote
, deft
, NextCloud, Termux (para
Android®) y fossil
.
¿Por qué PicoLisp? A parte de que es un lenguaje similar a LISP o Scheme, tiene unas características minimalistas de las que siempre me resultan interesantes: integra, en una máquina virtual muy reducida, una base de datos y soporte para GUI. Además, para Android® existe una aplicación llamada PilBox que ejecuta scripts de PicoLisp directamente en ese sistema operativo. Por otro lado, también puedes usarlo desde Termux, porque es uno de los paquetes que puedes instalar en esa maravillosa «minidistro» integrada en Android®.
El objetivo, como he dicho antes, no es crear el más maravilloso sistema de notas, sino aprender. Necesitaré bajar a definir qué es una anotación, de qué partes se compone, cuáles son sus características y comprender así un poco mejor algunos algoritmos básicos y manejar listas, árboles, propiedades y, por supuesto, sus enlaces y valores.
Tardaría menos haciendo un pequeño paquete de Emacs, que subiéndose
a hombros de gigantes, consiguiera realizar aquello (poco) que echo a
faltar en el sistema que tengo montado ahora, pero con elisp
ya me
manejo y no aprendería demasiado.
Comentarios