Buenas!
Hoy quiero anunciar que a partir de hoy, Wixet utilizara github. Github ofrece un montón de ventajas pero sin duda, la más interesante es que cualquiera puede proponer cambios y gestionar de manera clara esas aprotaciones (en subversion sólo quienes tienen permisos puede subir código y el tema de correccion de bugs o propuestas de código es manual). Dicho esto, voy a pasar con lo que realmente quería anunciar
Wixet como framework de red social
Wixet se ha planteado como un framework de redes sociales más que una red social en sí misma. Los motivos son bien sencillos y es que internet está plagado de redes sociales mientras que montarte la tuya propia y personalizada es algo más complicado. Entonces Wixet lo que ofrece es software para la gestión de los servicios de una red social como por ejemplo manejo de usuarios, busquedas, objetos multimedia, permisos… todo desde un punto de vista eficiente, seguro y extensible. Más adelante publicaré la documentación para saber exactamente qué es y qué no es Wixet.
Mi intención también es que la dependendencia sobre Wixet sea lo menor posible, la idea es construir una apliación usando Wixet en vez de usar Wixet para construir una apliación. En cualquier momento se podría cambiar Wixet por cualquier otra biblioteca sin tener que volver a empezar tu aplicación (siempre y cuando se mantengan las interfaces).
Básicamente, los servicios que ofrece Wixet son:
MediaItemManager: Maneja los archivos multimedia. Fotos, músicas, vídeos… Principalmente se encarga de crear thumbnails y todo lo relacionado con los archivos físicos.
PermissionManager: Gestión de los permisos. Añadir, insertar, eliminar… Se ha creado un servicio espécifico para esto por ser una labor muy sensible. De esta manera no cambias permisos de manera “accidental” y es fácil guardar un historial.
Fetcher: Se encarga de la gestión de objetos (guardar, extraer y eliminar). La principal ventaja es que él solito se encarga de cachearlo todo (memcached y apc) para un rendimiento óptimo. Siempre que se maneje cualquier tipo de objeto es de vital importancia usar este servicio ya que comprueba los permisos tanto para escribir como para leer. Comprobar los permisos de un único objeto es totalmente trivial mientras que extraer una colección de objetos es algo realmente complejo (si queremos que sea eficiente). El motivo es que en Wixet exiten grupos, usuarios, objetos (equivalente a un archivo) y álbumes (equivalente a un directorio) y puedes dar permisos a grupos sobre albumes, usuarios sobre objetos y en general cualquier tipo de combinación que desees. Si pensamos trabajar con pocos usuarios y objetos es bastante sencillo, pero la idea es que la aplicación pueda funcionar con miles de usuarios, objetos, grupos y albumes y dado que es una tarea que se realiza continuamente es de vital importancia que sea muy rápida.
La otra gran labor que realiza es la de búsqueda de personas. Mediante los campos típicos (nombre, ciudad, gustos…) se encarga de encontrar los mejores resultados. Está pensado para trabajar con cualquier tipo de buscador (quien realmente hace la búsqueda) y en wixet se proporcionan dos tipos, el básico y el “potente”. El básico utiliza doctrine y la propia base de datos mysql para hacer búsquedas. Es sencillo, fácil de usar y no requiere nada extra. El potente utiliza el motor sphinx. Sphinx es un software especializado en esta labor con lo que s
us búsquedas serán mucho más rápidas y precisas. Obviamente requiere que tengas instalado en tu servidor Sphinx. Por supesto, puedes utilizar lo que te de la gana (lucene o cualquier otro método que te guste) creando una clase que cumpla sencilla interfaz (básicamente la query y los parámetros).
Si Wixet tuviera un corazón, sin duda sería este servicio.
Interfaz gráfica independiente de Wixet
Yendo al grano, Wixet no cuenta con una interfaz gráfica. La idea es no acoplar en absoluto la interfaz con el resto de la aplicación. En mi caso, me gusta OpenSocial y por eso la interfaz que he hecho se basa en gadgets (y usando jquery y jquery-ui) pero eso no tiene el por qué gustarle a todo el mundo. En tu aplicación puedes hacer la interfaz gráfica como quieras mientras utilizas Wixet. Este bundle implementa todo lo relativo a opensocial y gracias a doctrine y symfony conseguimos una integración total, se comporta como si WixetBundle + OpenSocialBundle sólo fuera una única apliación.
Symfony 2 y Doctrine 2
Como mencioné en otras ocasiones, Wixet está construido mediante Symfony 2 y Doctrine 2. Estas herramientas son muy potentes (y recientes) y se adaptan perfectamente al diseño de Wixet. No voy a entrar en detalles de rendimiento y otros aspectos técnicos sino que voy a comentar la parte más interesante de cara a un usuario, los Bundles. En symfony un bundle es una aplicación en sí. Wixet en bundle y la interfaz
gráfica es otro bundle. Esto quiere decir que puedes extender las funcionalidades de tu aplicación simplemente instalando bundles lo que implica que las posibilidades son infinitas! Actualmente y pese a lo joven que es symfony, ya existen un montón de bundles
En el futuro
No hay que preocuparse, Wixet está diseñado con base en el rendimiento pensando que haber miles de usuarios y objetos. Por este motivo, las tablas críticas (aquellas pueden tener muchas entradas) se pueden sustituir sin problema por documentos ya que no requieren “joins” ni relaciones de ningún tipo (las llamadas “nosql” como mongo). Actualmente la única tabla afectada es la de los permisos finales. Es una especie de caché que básicamente contiene los pemisos “calculados” de cada usuario y cada recurso, lo que quiere decir que el número de entradas será exponencial y mysql podría “perderse” un poco si trabajara con decenas de millones de entradas mientras que ese es justo el escenario perfecto para una “nosql”. No voy a entrar en detalles técnicos, sólo quiero decir que la aplicación está pensada para servir tanto para un sitio pequeño como uno con gran volumen de trabajo. O incluso que empieces con un sitio pequeño y que cuando crezca puedas adaptarlo de manera muy sencilla.
Ideas y comentarios
Como plataforma abierta, Wixet está dispuesta a esuchar todo tipo de ideas y sugerencias. Obviamente yo sólo conozco una pequeña parte del mundo web así que cualquier aportación es bien recibida. Por ejemplo nodejs me parece una excelente herramienta pero dado que no lo conozco bien en profundidad lo dejo para un futuro, y seguro que hay por ahí un montón de herramientas muy útiles que ni si quiera conozco.
Repositorios
Por supuesto, Wixet es y será software libre y los respositorios públicos. Tengo muchos pedacitos de código y documentación por organizar así que si alguien mira el contenido de los respositorios que no se asuste por la “asuencia” de código
WixetBundle: https://github.com/maxpowel/WixetBundle
OpenSocialBundle: https://github.com/maxpowel/OpenSocialBundle
Un saludo y espero tener más noticias pronto!