Páginas

lunes, 21 de marzo de 2011

PirannaFS Reloaded

Dos meses y medio, el ritmo decrece... :-P Lo cierto es que como bien predije este cuatrimestre iba a ser de aupa, y lo ha sido: jornadas de 12 horas, mudanza y media hora mas de transporte... y trabajo para casa los fines de semana. Por suerte hace dos semanas se hizo la presentación de los trenes y no solo la señora Cristina Fernández de Kirchner (para que veais como cotiza el niño... :-D ), sino que encima antes de que se terminara el proyecto conseguí trabajo en Vocento, y tiro oca porque me toca: estoy en todo el centro, tardo la mitad en llegar, el horario es flexible, las horas son ajustadas, el ambiente es agradable, el trabajo es tranquilo... y me pagan un 33% mas. Vamos, que me ha tocado la primitiva :-D Es por eso que despues de varios meses de estress y no dormir no solo vuelvo a tener fuerzas para estudiar en el tren sino que mucho mas importante, vuelvo a tener TIEMPO, y es por eso por lo que en las dos ultimas semanas le he pegado un chute bien fuerte a PirannaFS :-D

Para empezar, finalmente pude probar como seria el sistema usando PyFilesystem, y no hay lugar a dudas: me ha convencido. Dejando de lado que por su filosofia tan pythonica se queda a bastante alto nivel de lo que seria un sistema de archivos normal (el acceso a los sectores no se hace directamente sino a nivel de archivos...) lo cierto es que su uso de excepciones hasta la estenuación lo hace realmente potente y sencillo de programar: adios a comprobar continuamente valores de retorno que no nos atañen, si no nos interesa una excepcion ya habra otro que se encargue. Relax... y una limpieza de codigo y un estilo Zen minimalista increible. ¡Si hasta en algunos casos los comentarios de cabecera ocupan mas que el codigo! :-P

Ademas, este reinicio cual ave Phoenix me ha permitido el encontrar algunos fallos ciertamente molestos y solventar algunas idiosincrasias como el hecho de que la longitud de los chunks empezara en 1 para apuntar siempre al siempre simplemente por ahorrar algunas sumas de vez en cuando, aparte de poder limpiar codigo y encontrar soluciones mas optimas a algunos problemas, lo cual me ha llevado a pensar que al tener ahora un nucleo mas limpio, quizas si sea buena idea el tener tambien una version Python-FUSE del sistema de archivos saltandome algunas capas de abstraccion de PyFilesystem. Al fin y al cabo, el usar excepciones en lugar de retornar valores de error era el paso logico a dar para tener un codigo en condiciones, hoy dia el hacer las cosas al "estilo C", por muy simple, portable y optimo que pudiese ser, es un sin sentido teniendo opciones mas potentes (mismamente C++).

Ahora bien, despues de haberme metido en faena, efectivamente PyFilesystem no es la panacea: todavia esta muy verde e inmaduro, y no esta pensado para desarrollar sistemas de archivos nativos... ni parece que tengan intencion de hacerlo. Al igual que FUSE era famoso porque aparecieron multitud de sistemas de archivos "de juguete" (los sistemas de archivos para acceder a sistemas online son legion) esa filosofia es mucho mas real en PyFilesystem, lo cual tampoco es malo si lo que se pretende es que sea mas facil el desarrollo de sistemas de archivos. Sin embargo esta facilidad lleva implicita cierta abstraccion como es el hecho de acceder a nivel de ficheros (al menos, al ser "file-like objects", la integracion y uso de estos directamente en codigo python externo es directo), y tambien hay algunas decisiones como la ausencia directorio actual y el que los directorios realmente sean sub-sistemas de archivos (logico desde un punto de vista jerarquico-recursivo...) lo hace un poco extraño y dificil de manejar, aparte de que no hay definidas clases neutras desde las que poder heredar de _nada_. Al menos he intentado solucionar estos fallos en mi implementacion de PirannaFS sobre PyFilesystem, asi que cuando lo tenga mas fino y estable los adaptare a la libreria y enviare los parches correspondientes a ver que pasa :-)

Y recuerden niños: no olviden supervitaminarse y supermineralizarse hacer unidades de test para todo: no veais el subidon de adrenalina que da despues de haber hecho una metamorfosis completa del codigo el no saber por donde empezar a comprobar que todo esta bien, encontrarse perdido dentro del codigo de PyFilesystem unas unidades de test basicas, ver como te dicen exactamente donde estan los fallos (incluso algunos que ni siquiera suponias que podrias llegar a tener, como es la corrupcion de archivos de gran tamaño) e ir resolviendolos uno a uno (a veces mas ;-) ) poquito a poco y pasar de no superar ninguno de los 49 a que solo queden 10 y la mayoria relaccionados con los hilos... :-D