Notxor tiene un blog

Defenestrando la vida


Reaprendiendo a programar

Estos días ando un poco perdido y apenas tengo tiempo para escribir en el blog. Como me consta que hay quien lo sigue y lee casi cualquier cosa que escribo ─no entiendo muy bien las razones, pero alguna tendrán─, he decidido contar un poco qué ando haciendo estos días para estar tan ocupado... estos días de aislamiento y cuarentena, cuando se supone que tenemos tiempo hasta para hacer pan o repostería.

Sin embargo, he estado liado, no creo que haga falta contaros toda mi vida. El caso es que he estado muy liado con un curso de seguridad informática para psicólogos, que ya está completo y colgado en la plataforma virtual del Colegio de Psicólogos a la espera de que le den el visto bueno y decidan abrir las inscripciones para el público. Es el primer curso que realizo para la plataforma moodle y estoy expectante, ─y también algo nervioso─, por ver si funciona bien o no.

El resto del tiempo lo he dedicado a largas siestas y a rascarme el ombligo... bueno, no exactamente: alguna siesta ha caído, evidentemente, pero también estoy en medio de otras cosas y proyectos personales. Ya hablé por aquí de que quería aprender erlang durante esta cuarentena y en ello me hallo. Me leí un par de libros haciendo ejercicios que proponían e intentando comprender cómo funciona el lenguaje en sí. Pero la mejor forma de aprender es utilizándolo. Durante el aprendizaje de erlang me acompañó un colega del CAAD y ya puestos nos metimos en un proyecto de aprendizaje. Me permitiréis que no hable del mismo, porque cada vez que hablo de un proyecto acaba en vaporware. Así pues, me guardo los detalles. Sólo diré, como se puede deducir, que siendo erlang el lenguaje, tiene que ver con un sistema concurrente cliente-servidor, y que, siendo ambos del CAAD, es un proyecto lúdico.

Ese proyecto de aprendizaje me está obligando a redescubrir herramientas, que si bien venía utilizando, lo hacía de una manera más superficial o completamente distinta a como las estaba utilizando hasta ahora. Por ejemplo, emacs se había convertido en mi editor por defecto, pero curiosamente escribía poco código con él, lo que más hacía era utilizarlo para escribir documentos, consultar la agenda, etc. Igual que también utilizo git, pero no de la forma que lo estoy haciendo ahora.

Redescubriendo herramientas

Como podéis suponer, mi editor de trabajo por defecto es emacs. Bueno, por defecto y sin defecto, es mi editor y basta. Realizar un proyecto de programación trabajando con él me ha hecho redescubrir muchas cosas que aunque ya las conocía y las utilizaba, la perspectiva personal sobre las mismas se ha visto modificada por el uso continuo.

Sobre alguna de esas herramientas ya he hablado aquí y no quiero hacer un artículo demasiado profuso y aburrido sobre algo de lo que ya hablé en su día. Pero dejadme puntualizar algunas cosas.

Git y Magit

Hasta ahora mi trabajo con git ha sido bastante plano y simple. Es decir, aunque lo he utilizado en muchas de mis cosas, mis repositorios apenas tienen ramas. Por ejemplo, la contabilidad, que la llevo con Ledger-Cli, ya lo conté por aquí, tiene un repositorio git donde voy actualizando los gastos y las facturas. Sin embargo, no hay ramas, es un repositorio unipersonal muy sencillo: git commit, git push y nada más.

Este blog también tiene su repositorio. Vale que tengo una rama para borradores de artículos y la principal para publicarlos. Pero también es un repositorio unipersonal y lineal: las ramas no se mezclan, no se cruzan, hay dos ramas: una para escribir y otra para publicar. No hay rebasado ni mezcla entre ellas.

El utilizar git para programar, en un repositorio compartido y con una profusión de ramas a la que no estoy acostumbrado, me está obligando a aprender cómo funciona git en realidad, con un ejemplo concreto de lo que es un repositorio de desarrollo. Me obliga a aprender a hacer rebases y merges.

Redescubrir git implica que estoy redescubriendo también magit. Todo lo que aprendo nuevo lo hago desde la línea de comandos. Eso me permite con posterioridad hacerlo desde magit con más conocimiento de causa. Desde el buffer de magit-status se pueden lanzar un montón de comandos pulsando una sola tecla: commit, pull, fetch, push, rebase, merge, log...

También, me he encontrado algún problema. Es decir, no problemas por mal funcionamiento de las herramientas sino por despiste del usuario: como estar convencido de estar en una determinada rama y estar en otra. Eso me recuerda que siempre, cada vez que voy a realizar alguna acción tengo que pulsar C-c g, ─la combinación de teclas para el comando magit-status que tengo asignada─, y comprobar que efectivamente estoy en la rama que debo estar antes de hacer un merge o un rebase.

Projectile

Hasta ahora tenía instalado Projectile para la gestión de proyectos, pero apenas lo utilizaba. Tampoco es que haya dando un salto cuantitativo con él, creo que apenas lo utilizo un mínimo porcentaje de toda su funcionalidad, tan sólo estoy utilizando unos pocos comandos con profusión y con el nuevo proyecto le he encontrado alguna función interesante:

  • Compilar: C-c p c. El proyecto cuenta con un Makefile que hace todo el trabajo, incluso con un comando make run que compila y lanza el proyecto de forma automática, pero lo veremos después. Le puedes decir a Projectile que lo utilice en lugar del escueto make. Si hay errores, en la ventana de compilación puedes navegar por los errores de forma sencilla para solucionarlos.
  • Buscar en el proyecto: C-c p s g. Busca una expresión en todo el proyecto. Bueno, esto lo utilizo más cuando escribo en el blog, porque me permite buscar en todos los ficheros y saltar al que me interesa desde la lista de resultados.
  • Abrir fichero: C-c p f. Muestra una lista de ficheros que pertenecen al proyecto y es más fácil buscar el que te interesa, al menos en proyectos pequeños, que navegando con Dired.
  • Ejecutar el proyecto: C-c p u. La primera vez que lo llamas pide el comando para iniciarlo. En este caso make run, luego cada vez que lo quiero lanzar es suficiente con la combinación de teclas. Hay que tener en cuenta que en esta ocasión lanza también un entorno erlang y que hay que pararlo para hacer más pruebas.
  • Cerrar los buffers del proyecto: C-c p k. Hace un kill de los buffers abiertos del proyecto. Algo que me viene muy bien porque suelo utilizar emacs en su modo daemon. Cuando cierras la ventana de emacs los buffers siguen abiertos, por lo que cambiar de actividad, pasar de un proyecto a otro puede sobrecargar el editor con demasiados buffers abiertos. Cerrar de forma selectiva un grupo de ellos es muy útil.

Erlang y erlang.el

Cuando comencé con el erlang me pareció un lenguaje muy marciano. Bueno, sigue pareciéndomelo, no es comparable a otros lenguajes que conozco y tiene una sintaxis un tanto extraña.

Después de varias semanas trabajando con él me encuentro cómodo y poco a poco mis esquemas mentales se van adaptando a otra forma de pensar y hacer las cosas.

Un problema con el que me he encontrado es con el indentado, ya sabéis lo especial que es emacs con los indentados, precisamente porque delega en los modos este aspecto, resulta un poco caótico. Depende de los gustos de quien haya programado el modo. No siempre esos gustos coinciden con todo el mundo.

Concretamente, me estoy acostumbrando a no utilizar TAB para realizar la indentación, porque lo hará al modo establecido en erlang.el y sí a utilizar M-i que, tiendo tab-width establecido a 4 espacios, realiza la identación sin llamar a lo establecido en el modo y haciendo los saltos de cuatro en cuatro espacios.

Conclusiones

Pues a estas cosas me estoy dedicando y es curioso, redescubrir herramientas que creía ya conocidas y cómo les encuentras ese detalle que te facilita aún más la vida.

El comprobar que emacs tiene más recovecos que los que se ven a simple vista tampoco es algo nuevo, a poco que hayas trabajado con él. Sin embargo, cada vez que trabajo con él, tengo la sensación de que apenas he rascado un poco en la superficie de las herramientas que proporciona. Siempre aprendiendo, siempre descubriendo y eso hace que mi curiosidad se vea incentivada.

No he querido hablar del proyecto en concreto, está en una fase muy inicial y avanzamos muy despacio, intentando hacer las cosas correctamente, con el lastre añadido de que es un proyecto de aprendizaje. Efectivamente, estamos ─al menos yo─ aprendiendo mucho: sobre programación funcional en general, sobre erlang en particular y sobre emacs y sus herramientas, de modo tangencial.


Comentarios

Debido a algunos ataques mailintencionados a través de la herramienta de comentarios, he decidido no proporcionar dicha opción en el Blog. Si alguien quiere comentar algo, me puede encontrar en Mastodon y en Diaspora con el nick de Notxor.

También se ha abierto un grupo en Telegram, para usuarios de esa red.

Disculpen las molestias.