A Dos años de piltri

imagen del cerro piltriquitrón, que significa colgado de las nubes
A fines de octubre hace dos años fue la primera entrada que hice en piltri. Estaba en el bolsón. De ahí el nombre. Este año volví para el bolsón. Y ahí mismo terminé de publicar lo que considero la primer versión estable de piltri. Llevó dos años y un par de aprendizajes. A la vez, durante estos dos años pude mantener la práctica de escribir. Además de eso. Piltri me fue útil para organizar tareas y recordatorios, y organizar ideas.
Creo que este modelo súper simple me sienta bien.
A priori diría que queda poco por agregar al software; el resto quedará para extensiones. Por ejemplo, será viable hacer un método para organizar mi djismo? O hacer un sistema para rastrar gastos e ingresos?

Fennel, lisp, cli

Piltri empezó como un cli software hecho en fennel, un lisp que compila a lua. En ese momento me interesaba bastante lisp como lenguaje, por su simpleza y por introducirme al concepto de desarrollo interactivo (o REPL driven development).
El software tenía una serie de comandos con opciones para manipular el journal. Principalmente, producir una base de datos de backlinks (guardada como una tabla de fennel directo al disco), buildear el journal como una página web para publicar, y además otra serie de comandos adicionales que fui agregando (y que hoy forman parte de las extensiones).
Por otro lado, el software se integraba en neovim a través de un plugin, también escrito en fennel. Principalmente el plugin se encargaba de mostrar los backlinks a un archivo, permitiendo navegar esos links.
Con el tiempo me fueron apareciendo una serie de cuestiones que me hicieron difícil mantener el software. Por un lado, armar la base de datos de backlinks implicaba parsear todos los archivos markdown como strings, intentando capturar los links. Esto con el tiempo se volvió muy poco robusto; parsear strings a mano es un garrón. Por otro lado, me di cuenta que fennel como lenguaje (o, mi propia expectativa acerca de como se programa en lisp) me incentivaba a un estilo de código difícil de mantener. Era muy común ver pipelines de map, filter, reduce largísimas y donde se hacía difícil entender que es lo que estaba sucediendo. La manera en que diseñe la estructura de datos también se me hizo bastante tedioso. Algo que me di cuenta es que como piltri funcionaba como un cli, cada vez que corría un comando tenía que hacer un montón de transformaciones sobre los datos para tenerlos de una manera útil para distintas tareas. Hoy en día, como corre como un plugin de fondo dentro de neovim, puedo leer todos los archivos, sus contenidos, etc y tenerlos a mano además de los backlinks. Lo cual hace muchas cosas mucho más simples y directas.

Port a neovim y lua

Un poco los problemas que tenía parseando strings fue la principal motivación de portar piltri completamente a neovim. Además, es el principal entorno donde interactúo con el software así que el port tenía sentido. Diría que diseñarlo como software para la terminal no resultó ser taan útil.
Menciono el caso de parsear los archivos markdown como motivación, porque neovim tiene integrado treesitter que permite construir un AST (abstract syntax tree) de un string y así poder obtener distintos elementos de un archivo markdown muchísimo más fácil. Por ejemplo, obtener todos los links con sus urls y textos capturados es tan simple como escribir el siguiente query:

    ((link_text) @text
     (link_destination) @filename)

para luego obtener en lua algo tipo

{
    {text = "Texto del link", filename = "archivo.html"}
    {text = "Otro texto del link", filename = "otro_archivo.html"}
}

Este fue el primer inmediato beneficio de usar neovim como runtime. A la vez, aprovechando el port a neovim probé implementarlo en lua y no en fennel. La motivación del cambio a priori creo que tuvo que ver con querer probar el lsp y los typehints que uno puede usar en lua. Un poco mi experiencia con JSDoc informó esta decisión. Sin embargo, me seducía usar plain lua y no tener que pasar por fennel. La verdad que habiendo usado lua para esto y otras cosas últimamente, me hizo dar cuenta que lua esta bueno! O sea, siempre me cayó bien y creo que por esquisito y por querer probar un lisp, terminé yendo para el lado de fennel. Y creo que en el espacio que fennel habita, aparecen un montón de ideas copadas (por ejemplo, software basado en capabilities, algo que me coparía explorar en algún futuro).
Aprovechando el port, también sumé algunos tests que confieso no están tan bien hechos, no son exhaustivos ni le dediqué tanto tiempo...

Hoy

Hoy en día piltri existe como un plugin de neovim cuyas ideas principales están bastante terminadas. La posibilidad de sumar extensiones hizo que el scope del plugin sea bastante reducido:

Decisiones y convenciones

Originalmente piltri per-se también era un static site builder, pero me incliné por sacarlo del core y moverlo a una extensión. Creo que fue una decisión que tuvo sentido... pero ya veremos.
Muchas de las propuestas de uso que me hice las mantengo (por ejemplo, el archivo TODO) y otras las aprovecho mas o menos a la vez que fui aprendiendo como usarlas.
Por ejemplo, inicialmente tenía un archivo VER.html donde en el archivo iba agregando pelis que quería ver a una lista no ordenada. Después me di cuenta de que en realidad lo que podía hacer es linkear a ese archivo desde el archivo del día y ya. Además esto facilita la posibilidad de que, cuando vea esa película linkeada a VER.html, la podía re-linkear a otro archivo VISTO.html, así pudiendo no sólo anotar pelis por ver sino también poder ver que pelis estuve viendo...
Es lindo poder darse el tiempo para experimentar con ideas pequeñas pero expandibles, sin necesidad de estar consantemente adaptando el software; o buscando un punto medio de adaptación entre el software y uno.
Porque siendo sensato, mantener software lleva tiempo, y está bueno poder hacer, usar y ya