Farbfeld


Farbfeld es el regalo de reyes que Laslo Hunhold, miembro del proyecto suckless, nos ha hecho este año. Se trata de un formato de imagen sin pérdida que pretende sustituir a PNG. En realidad este post no tiene intención de profundizar en el nuevo formato, pero este va a servirme como excusa para comentar ciertos aspectos de la programación y de la informática en general que deberían cambiar para beneficio de desarrolladores y usuarios.

Lo que hace especial a farbfeld es su simplicidad, que permite que sea fácil de manipular, entender e incluso programar a mano. El formato especifica un archivo que comienza con la palabra "farbfeld", el ancho y alto de la imagen y después de esta cabecera, el valor de cada pixel en formato RGBA. Nada más.

En informática se debería seguir siempre la filosofía Unix,
"Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface."
Esta máxima podría reducirse en el aforismo KISS, tan utilizado en la retórica Archlinuxera. Es justamente lo que pretende el proyecto suckless y que ejemplifica a la perfección este nuevo formato. Farbfeld hace una cosa y la hace bien, representar los píxeles de una imagen. El resto de formatos de imagen también hacen esto pero se complican introduciendo métodos internos de compresión. En este sentido, PNG utiliza el clásico algoritmo DEFLATE.

El tamaño importa! no es que farbfeld no le preste atención a la compresión, sino que la delega en programas externos a los que accede mediante un pipe. La recomendación del desarrollador es utilizar bzip2, basado en el algoritmo Burrows–Wheeler, que trabaja bastante mejor que DEFLATE. Esto no solo consigue aligerar la complejidad interna del formato, sino que produce mejores tasas de compresión que PNG y abre la puerta a utilizar cualquier otro algoritmo de compresión que pueda ofrecer mejores resultados en el futuro, de forma transparente, ya que su ejecución se realiza fuera del archivo de imagen. Si PNG quisiera cambiar el anticuado DEFLATE por un algoritmo de nueva generación como LZMA, por ejemplo, debería reestructurar por completo el formato y podrían surgir problemas de compatibilidad, que complicarían aún más algo que debería ser tan simple como farbfeld nos propone.

Todos deberíamos aprender de este proyecto que lo verdaderamente importante es tener una actitud que promueva la descentralización de los servicios, que sea capaz de crear sinergias entre distintos elementos del sistema utilizando sencillos métodos de redirección como los pipes de UNIX. Todo esto nos permitirá desarrollar código más ágil, elegante, pequeño, eficiente y escalable.
Descarga, investiga, revisa el código, disfrútalo y recuerda: KISS.