Páginas

sábado, 25 de septiembre de 2010

[0.2.1] Symlinks, Plugins y cintas de video

Aunque he tardado algun tiempo en actualizar cosas debido a lo saturada que tengo la agenda este año entre el trabajo y la carrera (aunque segun he visto en los blogs de los demas no soy el unico, bien por nosotros :-) ) al fin ha llegado el viernes tarde y para desconectar de una semana demasiado corta en tiempo (se me ha pasado volando sin darme cuenta, con lo que me jode...) y demasiado larga en estress en la que incluso he perdido mi maravilloso Android (snif...) me he puesto a darle un pequeño empujon al proyecto y a falta de uno hay dos: primero, ya tenemos links simbolicos, y segundo, ya tenemos una plataforma seria de plugins, aunque por ironico que parezca no por culpa del codigo para generar los links simbolicos, sino por culpa de la creacion de su tabla.

En primer lugar, los links simbolicos tienen sus propias funciones dentro de FUSE (symlink para crearlos y readlink para parsearlos), los cuales hasta ahora no las habia implementado porque no eran necesarias para el nucleo del sistema de archivos, asi que como primera aproximacion al sistema de plugins decidi mapearlas directamente dentro de la clase, al igual que he hecho con sus equivalentes en la base de datos.

Sin embargo para la creacion de la tabla no podia mapear ninguna funcion sino que tenia que ejecutarse cuando terminara de hacerse la base de datos entera, asi que buscando algun ejemplo de como hacer un sistema de notificacion de eventos en python (podia hacermelo yo y los ejemplos que encontre eran muy parecidos, pero queria ver si ya habia algo bien hecho y probado que poder reutilizar. Al menos esa es una de las ventajas del software libre, que si ya hay algo bien hecho no hay porque duplicar esfuerzos, ¿no?) y entre todo lo que encontre el que mas se parecia a lo que necesitaba para el sistema de plugins fue este codigo. Sin embargo aparte de que no me gustaba mucho como tenia implementado el sistema de carga de plugins (¿un archivo de configuracion? Por favor... con lo comodo y practico que es tener un directorio desde donde cargarlos al igual que se hacia con las extensiones del sistema del MacOS Classic...) tambien hacia referencia a PyDispatcher, el cual tambien hacia referencia a Louie. ¿Cual escoger? Al final como muchas otras veces en que tengo alternativas de codigo y me da igual uno que otro, deje que Ubuntu eligiera por mi para ver cual era el metodo mas estandar, y como Louie era el unico que tenia paquetes dentro de los repositorios oficiales, pues me decante por el :-)

Asi que aunque ha sido por algo completamente accidental, ahora tenemos un sistema de notificacion de eventos bastante avanzado. Puede que sea un problema con vistas a una futura implementacion como sistema de ficheros nativo (mas librerias externas, mas problemas de integracion), pero como apenas todavia estamos en las primeras fases de desarrollo todavia hay tiempo de modificarlo mas adelante si hace falta. De momento en cualquier caso hara falta una plataforma de plugins mas solida que la que tengo actualmente de mapear las funciones directamente, asi que a lo mejor con suerte incluso consigo matar dos pajaros de un tiro y consigo desarrollar un sistema de plugins lo suficientemente bueno como para que me lo incluyan en la libreria estandar de python (y eso si que seria un puntazo... ;-) ).

Proximo paso, aprender un poco mas como funciona Louie y desarrollar el plugin de log :-D

4 comentarios:

  1. Creo que el tuyo es el proyecto más interesante que se presenta al concurso, sinceramente.
    Suerte con él, y cuida la ortografía :)

    ResponderEliminar
  2. ¡Muchísimas gracias, así da gusto empezar un lunes! :-D Tu proyecto tampoco esta nada mal, el reconocimiento facial en tiempo real no es nada fácil... Te recomiendo que le eches un vistazo a la librería OpenCV, que la desarrollo hace unos años Intel como librería de reconocimiento visual superoptimizada, es software libre bajo licencia MIT y quizás te pueda dar buenas ideas :-)

    Y si, tienes razón, tengo un problema muy grave con las tildes :-P Intentare prestarle mas atención de ahora en adelante a la hora de escribir las entradas en el blog, o al menos le haré un poquito mas de caso al subrayado rojo... :-P

    ResponderEliminar
  3. ¡Buenas Piraña!

    Por el estado de avance del proyecto entiendo que quizás ya no estés interesado en indagar algo más sobre sistemas de plugins para python. Yo mismo tuve que enfrentarme a esa tesitura para alguno de mis proyectos y, con diferencia, el mejor enlace/documentación sobre sistemas de plugins para python es el análisis que realizó la gente de PiTiVi:

    http://wiki.pitivi.org/wiki/Design_Docs_Plugins

    Inspirado en PiTiVi y en Listen Media Player, me aventuré a crear PlugLib, una librería básica que orienta a la hora de que terceros proporcionen sistemas de plugins para sus aplicaciones:

    repo: http://gitorious.org/pluglib/pluglib
    pluglib aplicado a hamster: https://gitorious.org/hamster-with-plugins

    Sobre PlugLib mi gran alegría fue cuando vi que lo habían utilizado y ampliado para proporcionar plugins para Orca (lector y magnificador de pantalla para Gnome):

    http://git.gnome.org/browse/orca/commit/?h=cfr-plugins-experimental&id=2a97f35531b1cf9dd524ba91eb4a60104651a688

    Como puedes ver, este es un tema que me despierta gran interés, voy a revisar el uso que has hecho de Louie, pues no lo conocía.

    ¡Saludos y enhorabuena por el proyecto!.

    ResponderEliminar
  4. ¡Hola Felix! Gracias por los links, realmente estan interesantes, y enhorabuena por tu libreria :-) Te va a hacer gracia, pero a pesar de tener tan avanzado el proyecto, lo cierto es que a pesar de ser una parte fundamental del sistema necesito volver a revisar el sistema de plugins :-P

    Los que me has mandado no me valen porque mi codigo es realmente anarquico y no hay ninguno que proporcione un sistema de dependencias tan potente como el que necesito (me inspire en como funciona APT), y el usar los sub-plugins como indica alguno no es lo que necesito. Respecto a Louie lo estoy usando como sistema de notificacion entre los plugins cuando se producen determinados eventos, con lo que se puede decir que mi sistema de plugins es un sistema hibrido: puedes meterte hasta la cocina... siempre y cuando se produzca un evento al que vincularte en el fregadero :-P Realmente es asi por como se ha estado desarrollando el sistema de archivos, porque se pueden producir eventos en cualquier momento y a veces hay que esperar a que terminen de procesarse otros datos antes.

    Sin embargo me ha dado algunas buenas ideas como el usar python eggs (hasta ahora solo tenia en cuenta modulos de python y en un futuro paquetes) pero si lo mezclamos todo podria salir un sistema bastante minimalista y a la vez potente, asi que ¿te apetece que hagamos el sistema de plugins para python definitivo y que nos lo metan en la libreria estandar? :-)

    ResponderEliminar