Páginas

viernes, 27 de mayo de 2011

TagCrowd

Gracias a microsiervos he descubierto TagCrowd y al pasarlo por el blog me he encontrado con esto...


created at TagCrowd.com


Ese "compartir" sin lugar a dudas tiene un cierto lugar de honor... :-)

martes, 19 de abril de 2011

Las gallinas que entran por las que salen

El viernes pasado fue la final de Madrid del concurso, al igual que el jueves tuve el examen de Fundamentos de los Computadores, y dejando de lado que ya se que no tengo perdon de FSM por tardar tanto en comentar el resultado del partido, lo cierto es que he estado bastante liado/agobiado estos dias.

Las noticias buenas, primero que creo que al final despues de 5 años me he quitado al fin la famosa asignatura :-D No se porque razon, pero la electronica se me atraganto sobremanera, y eso teniendo en cuenta que me meti en informatica por culpa de que la electronica se me quedaba pequeña... Y la segunda... Piranna wins!!! :-D Contra todo pronostico y en especial el mio, ¡resulta que PirannaFS ha ganado! :-D Empece el proyecto por hobbie, nada especial, y ademas era muy "friki" y especifico cuando habia otros que estaban mas orientados a la comunidad. Aparte, de los que estuvimos en la final realmente yo habria apostado por los de los demas (cORMoran me parecio bastante practico, e InfantView yo ya le saque alguna que otra utilidad practica...), asi que normal que todos me miraran con cara rara cuando me entro la risa floja cuando me entere que habia ganado porque todavia no me lo creia :-P Pero bueno, no deja de ser ironico que no me cogiese la promocion de la tablet del ABC aprovechando que trabajaba alli y que ahora tenga una Galaxy Tab para sustituir a mi pobre Spica... :-D

En cualquier caso las dos proximas semanas el proyecto va a estar parado debido a que voy a estar estudiando Java para el examen de Orientacion a Objetos (si, a la vejez viruelas, quien lo diria...), y como no puedo estar haciendo una sola cosa, pues voy a aprovechar para aprender Android y desarrollar el cliente en Java de UnHosted todo a la vez. Como dijo el pirata, "la vida es corta pero ancha"... :-D

Ahora las malas, y es que a pesar de ser "un tecnico extraordinario" (palabras literales) me despidieron del trabajo porque no buscaban un perfil tan tecnico sino "alguien mas de gestion o administracion capaz de atender al cliente". En resumen, yo preocupandome siempre de que mi codigo hablara por mi y ahora resulta que lo que hay que hacer si quieres seguir ascendiendo es saber colocar correctamente un lazo rosa para que no se vean las grietas ni se desmorone el invento. Pues mira, ellos se pierden el tener un campeon entre sus tropas. Al final cuando hasta en el trabajo te dicen directa o indirectamente que si quieres desarrollar una carrera puramente tecnica te tienes que ir a Estados Unidos, agua lleva.

Esta claro, no podian pasarme tantas cosas buenas en una semana sin riesgo de provocar un desequilibrio en la constante espacio-tiempo. Maldito karma...

miércoles, 6 de abril de 2011

Fahrenheit 1832

Semanita de aupa llevo, y semanita de aupa me espera. Semanita llevo, porque he "intentado" (no existe una palabra mejor...) mezclar las dos ramas de PirannaFS (FUSE y PyFilesystem) y el repositorio ha acabado como era previsible: apocalipsis post-nuclear y terminar metiendo los archivos a mano de nuevo (con esto ya si que me paso definitivamente a GIT), al hacerlo me he encontrado bugs al prepararlo todo para la integracion (y aqui me veis, un dia antes de terminado el plazo haciendo todavia la memoria) y encima al empezar a hacer las pruebas directamente sobre el disco he descubierto que SQLite es mucho mas lento de lo que pensaba por pura paranoia y voy a tener que configurarlo y optimizarlo muchisimo antes de tener algo usable. Semanita me espera, porque el jueves tengo examen de Fundamentos de los Computadores (y no he estudiado...), el viernes tengo la presentacion del proyecto (y todavia no la he preparado...) y encima me he comprometido a hacer la version Java-Android de UnHosted en lugar de las aburridas, inutiles y nada practicas practicas de POO para el examen de dentro de 3 semanas. Me encanta vivir al limite... :-D

Pero bueno, no todo son buenas noticias, tambien he conseguido sacar tiempo para hacer la memoria del proyecto, y la teneis en la pagina de documentacion. Tambien estoy aprovechando a desarrollar toda la documentacion del proyecto para tenerlo centralizado en algun sitio y que sea usable por otras personas, y una de las cosas mas importantes es la estructura de clases, la cual ademas me ha permitido ver algunos detallitos y hacer algunas optimizaciones (siempre se me ha dado bien la memoria espacial... :-D ).


Vamos a explicar las partes. En primer lugar vemos un conjunto de clases fuera del paquete de PirannaFS a la derecha de este. Son el conjunto de clases encargadas del sistema de plugins, junto con los plugins encargados de los checksums, el log y los links simbolicos (obviamente, todos ellos en la carpeta de plugins... :-D ). Ya dentro de PirannaFS vemos un par de paquetes para las interfaces de FUSE y de PyFilesystem. Obviamente las clases de FUSE estan vacias porque tengo que adaptarlas a la nueva estructura, asi que nos centraremos en la de PyFilesystem. Ahi vemos tres clases: Filesystem, Dir y File, que heredan de sus correspondientes dentro del core, las cuales tienen sus referencias a la base de datos y al dispositivo. Ahora mismo tienen casi toda su funcionalidad dentro a la espera de que se vayan "destilando" al core a medida que reintegre la interfaz de FUSE. Como se ve la estructura por capas es realmente sencilla puesto que he desarrollado el codigo alrededor de las funciones correspondientes a las interfaces (de ahi que casi todo el codigo este ahora mismo dentro de los paquetes FUSE y PyFilesystem) y porque todo el trabajo duro se lo esta llevando la base de datos (de ahi que sea tan lenta...). Luego cuando convierta Dir y File en plugins propios ya veremos que pasa con todo esto... :-P

Y bueno, aparte de eso, tambien estoy pensando si en lugar de acceder a la base de datos directamente no hacerme un controlador independiente... Eso me permitiria varias ventajas, como el poder serializarlo todo para que tenga soporte multihilo (se le lanzan peticiones y ya se encargara de resolverlas cuando pueda), cachear las peticiones para que funcione mas rapido el sistema (si solo accede el al sistema no deberia haber problema de que esten desactualizados) o incluso simplificar el proceso de sacar el codigo SQL a archivos externos y cargarlos al principio incluso por parte de los plugins... Pura poesia... :-D

PD: Fahrenheit 1832 es la temperatura a la que arde el silicio en contacto con el aire, convirtiendose en SiO2. Nunca maldigo mi suerteeeeee, porque yo friki naciiiii... :-P

miércoles, 30 de marzo de 2011

Minority Report

Pequeña nota aprovechando un pequeño descanso en el curro mientras se configura el Ubuntu que acabo de instalarle: solo decir que debido a lo caotico que se me presenta el mes de abril entre examenes (¿¿¿quien ha sido el que me ha puesto el examen de Fundamentos de los Computadores justo UN DÍA ANTES de la presentación de PirannaFS???), trabajo, presentaciones y memorias, me voy a centrar durante las dos proximas semanas (aparte de a estudiar) a documentar el proyecto tanto rellenando los DocStrings de las funciones como creando diagramas, haciendo la memoria del proyecto y preparando la presentación que tendre en la final de Madrid del dia 15 de Abril. No tengo nada planeado al respecto, asi que debido a la falta de tiempo de hacer algo mas especifico aprovechare a desarrollar toda la documentacion de forma que me valga para todos los frentes que se me han presentado abiertos. Es por eso que de momento la documentacion se encontrara en la forja de Red Iris, donde podreis encontrar absolutamente todo el material relaccionado con PirannaFS (excepto lo publicado en este blog, que se encargan de guardarmelo muy amablemente los chicos de Google... :-D ).

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

domingo, 2 de enero de 2011

Volver a empezar

Casi dos meses hace desde la ultima entrada, pero lo cierto es que han sido dos meses de aupa: presentación en el trabajo, vencimiento de fechas, jornadas maratonianas (entre el miercoles 22 a las 10 de la mañana -tarde, como siempre- y sale el viernes 24 a las 5 de la madrugada...), examenes... y encima, para colmo un antiguo compañero de trabajo ha empezado UnHosted, un proyecto muy interesante y aparte de colaborar con el he participado en el concurso que ha organizado para ponerlo a prueba, asi que el tiempo que le he podido dedicar a PirannaFS ha tendido a 0.

Sin embargo no me he olvidado del proyecto y de hecho ha sido uno de mis propositos de año nuevo (otro de ellos era ganar el concurso de UnHosted... :-D ), asi que aqui estoy intentando retomarlo, y una de las primeras que voy a hacer va a ser olvidarme un poco de la obsesion que coji con las unidades de test. Eso lo hice por estabilizar el codigo y poder publicarlo, pero si por dedicarle tiempo dejo de dedicarselo al proyecto, a perder la ilusion de hacer algo y, lo mas importante, dejo de divertirme, entonces ya no merece la pena.

Precisamente por eso voy a retomar el desarrollo puro y duro, y debido a lo potente que he visto en estos dos meses que es PyFilesystem (que no haya programado no significa que no me haya documentado, y el estar inscrito a su lista de correo ayuda... :-D ) lo primero que voy a hacer va a ser modificar PirannaFS para que sea una libreria que pueda servir como base para crear una interfaz python-FUSE como hasta ahora y otra nueva interfaz PyFilesystem. Asi, aparte de ser compatible tanto con un sistema que ya es funcional como con otro bastante prometedor pero todavia en desarrollo, me permitira luego desarrollar las utilidades de apoyo sin necesidad de lidiar directamente con el sistema de archivos.

Asi que dejando de lado estresses varios y que se presenta un cuatrimestre movidito, dejemos que de comienzo la magia... :-D

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... :-)