miércoles, julio 01, 2015

Recordatorio para escribir acerca de bcache y de las variables de entorno en entornos de desarrollo

Inicio

Esta es una tormenta de ideas de dos asuntos que me tienen atormentado.

bcache

No he atendido bien una entrada en mi blog que escribí hace un par de años acerca de la laptop que adquirí en aquel entonces. El asunto es que merecía una continuación explicando cómo terminé instalando mi máquina y cómo aproveché la configuración híbrida de dos unidades de almacenamiento masivo con diferentes tecnologías: discos magnéticos y estado sólido.

Lo que hice fue configurar bcache en Ubuntu 14.04 (por eso el título de esta sección). Así, logré utilizar la unidad de estado sólido de 32 GB como "cache" del disco duro de 1TB, logrando virtualmente una unidad de un 1TB con la velocidad de lectura y escritura de una unidad de estado sólido ¿Cómo lo hice? Es un paso a paso que merece una entrada completa explicándolo.

Ahora, tengo el problema de que el disco duro de 1TB se está dañando, y tal vez deba instalar el sistema nuevamente sólo con la unidad de esta sólido de 32GB. Me hubiese gustado más bien reinstalar el sistema con la unidad híbrida para repasar los pasos que tuve que dar para lograrlo y así facilitar la escritura del artículo.

Lo bueno de esta situación es que puedo establecer un momento en el futuro para escribir el paso a paso: el día que me compre el nuevo disco duro de 1TB.

Variables de entorno en el proceso de desarrollo de software


Otro aspecto del que quiero escribir. Pero sobre todo, dominar. Por eso dejo este recordatorio.

Creo que la primera vez que trabajé con archivos de configuración fue con los archivos de configuración del MS-DOS. Recuerdo el "autoexec.bat" y el "config.sys". Después reencontré los archivos de configuración cuando descubrí Linux.

Pero en la disciplina del desarrollo de software, no fue hasta que trabajé con Django que ate los cabos. Los archivos de configuración son parte de la interfaz de usuario, destinada a un usuario especial: el que instala, configura y administra el software que le has entregado para que sea utilizado en definitiva por el usuario final. Y como parte de la interfaz de usuario, no es un asunto que deba tratarse a la ligera: hay que pensar en ello. Haría una reseña al libro de "El Arte de programar Unix", pero no sabría exactamente que parte señalar. Sólo recuerdo que algunas ideas acerca de diseñar bien estos asuntos de la interfaz de usuario, incluso cuando se trate de tomar la decisión de qué letra elegir para una opción de un programa de consola, vienen de ese libro.

Luego Rails me propuso el asunto de los entornos (desarrollo, pruebas y producción). También maven con sus "perfiles".

Curiosamente fue después, en un curso de programación de earthworm (un software especial para sismología), que atestigüé la extraña pero antigua costumbre de mantener un archivo con variables de entorno, que durante el proceso de desarrollo se cargan con el comando "source".

Inmediatamente recordé el libro "The Unix Programming Environment" que sugiere que Unix es un entorno de programación: entonces, las variables de entorno son sólo una de las herramientas con las que cuenta el programador.

Y ahora el "merge" (config/environments): http://12factor.net/config .

De esto es lo que quiero escribir. Pero quiero dominar la técnica, cosa que no hago todavía porque no la practico día a día.

Curiosamente, el uso de una herramienta para trabajar con "APIs" REST me ha dado la oportunidad de experimentar la técnica de una manera muy cómoda. Hablo de Postman, que te perminte definir un conjunto de "variables de entorno" y agruparlas como un "entorno", para luego poder utilizarlas en las pruebas que hagas con él (que para eso es el Postman al final de cuentas, para hacer pruebas).

Algo que me gustó muchísimo es el hecho de que todas las cosas que guardes en Postman, quedan guardadas en "la nube" si se lo permites, y ya no dependes de la máquina en donde estés trabajando para recuperar tus valiosas variables de entorno... ¿No existe algo así para la consola?¿Un sistema para administrar las variables de entorno de manera centralizada de forma simple como en Postman?.

Alguno de los videos de Yeoman da un tip genial acerca de los perfiles en los terminales. La idea es definir un perfil por cada proyecto de desarrollo de software en que se esté trabajando, y este perfil definirá todas las variables de entorno que se necesiten.

Fin

Termino con el principio: esta es una tormenta de ideas de dos asuntos que me tienen atormentado. Son cosas que quiero culminar, pero no lo haré ahora. El motivo de esta entrada es no perder las ideas que tengo que están relacionadas con esos asuntos.