Páginas

jueves, 4 de noviembre de 2010

Horror, espanto, pavor (2ª parte... y media)

Si antes me quejo de lo malo que es Python-FUSE para depurarlo y para hacer unidades de test, antes me encuentro con otro con el mismo problema :-P

Bindings de FUSE para python hay varios (eso ya lo sabia) y escogí Python-FUSE aparte de por ser el mas famoso y el "oficial" (o al menos es del unico que hay documentación en la pagina de FUSE) porque ya habia paquetes en Ubuntu. Lo que yo no sabia es que otra de las alternativas (fusePy) tenia paquetes dentro de la CheeseShop (si, asi se llamaba hasta hace poco el repositorio de paquetes oficial de Python antes de "profesionalizarse"), y por lo que parece esta alternativa no solo es mas "pythonica" que Python-FUSE sino que ademas es mas completa respecto a funcionalidad de bajo nivel, y para muestra un boton:


>>> from fs.memoryfs import MemoryFS
>>> from fs.expose import fuse
>>> fs = MemoryFS()
>>> mp = fuse.mount(fs,"/mnt/my-memory-fs")
>>> mp.path
'/mnt/my-memory-fs'
>>> mp.unmount()


Si con esto no es mas facil el hacer las unidades de test sin necesidad de hackeos que baje FSM y lo vea. El problema viene entonces de tener que rehacer PirannaFS usando como base estos nuevos bindings o si hacer PirannaFS compatible con los dos, asi que quizas lo mejor sea estudiar previamente si realmente sera rentable o no, y leyendose el codigo no creo que baste. No se, otra alternativa podria ser el hacerme algun otro sistema de archivos (¿otro mas?), pero FullFAT no tiene bindings en Python (aparte de que queria usar la libreria para "entrenarme" para el paso a C++ de PirannaFS) y no he encontrado nada de bindings de Ext3 en Python, aunque sin lugar a dudas estaria interesante el hacerse una implementacion completa de Ext3 en Python (para chulo, yo :-P ). ¿Vosotros que opinais? ¿Reciclaje? ¿Reimplementación? ¿Mirar para otro lado y hacer como que no he visto esto? :-P

Al menos, de regalo me he encuentrado que CUSE, el hermano pequeño y marginado de FUSE para desarrollar drivers de dispositivo en espacio de usuario (el tio que lo desarrolló se dio cuenta que solo hacia falta añadir dos IOCTLs a FUSE para tener soporte para poder escribir drivers genericos fuera del kernel...) y del cual a casi nadie parece importarle (o al menos no he visto ningun proyecto importante o ni siquiera una pagina con documentacion)... ¡¡¡me encuentro con que han desarrollado unos bindings para Python!!! :-D

Quizas empezase PirannaFS porque CaOS (mi propio sistema operativo que llevo diseñando desde que tenia 10 años) se me hacia muy grande, pero parece que todo el universo se esta conspirando en que lo saque adelante... :-)

Horror, espanto, pavor (2ª parte)

Nota mental: plantearme hacer de proyecto para el año que viene o una maquina del tiempo o un replicador de cuerpos o diseñar una droga que permita alterar la percepcion del tiempo sin los efectos secundarios de la cocaina y que pegue mas fuerte por las mañanas que un cutrebull del Lidl... la falta de tiempo es acuciante, y ahora que se acercan los examenes creo que la mejor opcion va a ser dedicarme a la meditacion tibetana, a ver si asi consigo concentrarme...

Quejas varias aparte, pequeño resumen de en lo que he estado perdiendo el tiempo ocupado las ultimas semanas:

Para empezar, como ya puse en mi anterior post he empezado a realizar baterias de test para el sistema de archivos. Por un lado me hacia falta aprender a hacerlas, porque es algo que siempre he estado dejando de lado, y aunque no ha sido pan comido lo cierto es que no ha sido tan dificil como pensaba, pero la razon mas importante para hacerlo era el tema de difundir el proyecto, porque siendo un proyecto tan complejo y "delicado" (nadie quiere poner sus datos en peligro, y bastante ya me esta dando por [autocensurado] el Ext4 en el Ubuntu del trabajo poniendose en modo solo lectura cuando le doy un poco de caña por un error del kernel respecto a los timeout en discos lentos y antiguos... ¬¬) se necesitaba algun metodo para controlar la evolucion del proyecto y sobretodo para evitar regresiones. Y si, tengo que reconocer una cosa: funcionan, y mucho mejor de lo que pensaba. Tuve bastantes problemas a la hora de realizarlo por la forma en que esta diseñado python-fuse (no se si seria mejor arreglarlo o rehacerlo de cero...) pero lo cierto es que consegui que funcionara, y cuando despues de arreglar unos pequeños fallos que me encontre en la implementacion vi esto


[piranna@Tontodelculo:~/Proyectos/FUSE/PirannaFS/src]
> cat ../test/error.log
...............
----------------------------------------------------------------------
Ran 15 tests in 4.176s

OK


realmente se me puso una sonrisa de oreja a oreja :-D

Pero mas interesante que esto fue cuando leyendome las especificaciones del OpenGroup vi algo que me dejo totalmente desconcertado: en readdir especifica que los famosos . y .. solo deben ser mostrados si el sistema de archivos en cuestion tiene referencias explicitas a ellos, cosa que no es el caso (y de hecho siempre me ha parecido una tonteria si ya sabemos tanto cual es el directorio actual como cual es el padre). Sin embargo en todos los ejemplos y documentacion que he visto los ponian explicitamente a mano. ¿Que hacer, saltarse el estandar, o seguirlo fielmente a pesar de que luego al listar el directorio se vea raro? Al final, como no sabia si la lista de correo del concurso podria servir para esto (apenas acababa de comenzar a usarse y esto era una pregunta muy especifica y hasta cierto punto yo entendia que seria cierta ventaja si alguien me ayudaba) asi que pregunte a mis colegas de AlcorconWireless, y como suele suceder en estas cosas mi amigo Dani (que al final le voy a tener que meter en los titulos de credito por toda la ayuda que me esta dando :-P ) dio con la mejor solucion:

mas friki.. activa una opción para verlos o para no verlos.. jajajaaja

Esa es la diferencia entre un ingeniero y uno que presume de serlo teniendo apenas la mitad de los creditos aprobados. Simplemente brillante.

En fin, la cuestion es que aunque apenas tengo tiempo sigo sacando las cosas adelante, solo espero que con el trajin que llevo no termine implosionando por el estress :-P Espero a ver si para el proximo post ya tengo terminados las unidades de test, porque iba a haber hecho una release especial para Halloween y lo cierto al final ha sido que hacia una semana que no encendia el PC de casa... :-P