Blog Oficial de Wixet

12 Sep

Wixet en github

Publicado en Anuncios el 12.09.11 maxpowel

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 sus 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!

3 comentarios »

2 comentarios en este tema

  1. Guillermo dice:

    Hay Álvaro… cada vez huele más a la Plataforma Social que te presenté hace años. Espero que entre los dos no nos pisemos, ya que en muchas de las cosas que has anunciado veo claramente a “TuEntidad.es” (la funcionalidad, o cosas como que no hay parte de interfaz gráfica -ya te comenté que eso es inicialmente, pero ahora la propia Plataforma está empezando a dar “applets” análogos al adsense en iframes o con includes de javascript-, o hablar de nosql) y sería una pena invertir el doble de esfuerzos para conseguir lo mismo. Eso sí, si necesitas algún consejo o mantenernos en contacto, sabes donde encontrarme.

    1. maxpowel dice:

      Buenas Guillermo, puede que en alguna idea coincidamos pero mi idea se centra en hacer algo que todo el mundo pueda usar. Me explico. Mientras que tu quieres desarrollar de nuevo el 100% de “todo”, yo intento aprovechar los recursos existentes. Claro, esto tiene pros y contras que ya discutimos anteriormente.

      Mi motivación para hacerlo así es que la gente tenga que hacer el menor esfuerzo posible, yo también soy programador y soy consciente de lo que cuesta tener que dedicar días para aprender algo y que luego resulte que no es lo que necesito. Tanto symfony como doctrine, mysql o el mismo php son herramientas muy utilizadas en este ámibito y con sólo un vistazo ya “sabes como va” (además de los montones de documentación existente).

      El otro punto, tan importante como el primero, es que puedas usarlo en cualquier máquina ya que no todo el mundo puede disponer de un servidor dedicado. Por lo que tengo entendido, lo que tu desarrollas requiere de montar un sistema específico para tu plataforma. Wixet sólo requiere php-5.3 y mysql 5, y aun así soy consciente de que php-5.3 es un requisito un poco puñetero (porque muchos servidores siguen usando php-5.2).

      Simplemente busco algo rápido y funcional.

      Y para terminar, no creo que nos pisemos porque buscamos metas diferentes.

      Un saludo

      1. Guillermo dice:

        Bueno… sólo quería matizar que el sistema que hace posible la utilización de la Plataforma Social “TuEntidad.es” como gestor de Contenidos Digitales para servicios de Red Social necesita, simple y llanamente, un ordenador. A partir de ahí, también es compatible con Windows o Linux de forma nativa, y también con php y Flash, y próximamente con Java también. Eso quiere decir que no necesitas un servidor dedicado. Fíjate, por ejemplo, que simplemente ejecutando el “Fi(eWa)” se puede instalar el ‘packete’ de la Plataforma y tener funcionando con dos clics tu propia “estación” (algo similar a las “semillas” de Diaspora*).

        Referente al tema de pensarlo para un programador, tú mismo lo estás viviendo en tus propias carnes: tienes diferentes lenguajes e incluso paradigmas para programar las diferentes partes, lo cual no es exactamente bueno para aglutinar la metodología de programación y, por lo tanto, ponérselo fácil a los desarrolladores. En tu proyecto necesitas un experto en php, un experto en mysql, etc. … perfiles que existen en el mercado, pero que quizás compliquen la integración de unos con otros (en el caso de php y mysql hay ejemplos de cosas que están un poco ‘forzadas’).

        De todas formas, como meta final, sí creo que nuestros dos proyectos se enfocan a marcar un estándar universal para el acceso y explotación de servicios de red social -”TuEntidad.es” desde hace años, el tuyo recientemente-, y ese cambio por tu parte fue lo que me dio pie a intentar evitar un posible aplastamiento de nuestros esfuerzos proponiéndote una colaboración más estrecha ahora que te has dado cuenta de que ese es el objetivo final que se debe perseguir.