Blog Oficial de Wixet

12 Sep

Wixet en github

Publicado en Anuncios el 12.09.11 por 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 »

22 Mar

Últimas pinceladas

Publicado en Anuncios, Novedades el 22.03.11 por maxpowel

Buenas! Me alegro de , por fin, tener noticias.

La versión de Wixet con OpenSocial integrado está ya a puntito. En un par de semanas (como mucho) debería estar funcionando así que espero que todo vaya bien.

Antes de nada, quiero aclarar que esta versión no incluirá completamente el estándar opensocial. El motivo es que es bastante grande y prefiero que se pueda usar “un algo” ahora antes que “el todo” pero dentro de un tiempo. Tampoco hay que echarse las manos a la cabeza, lo más común sí funciona (digamos que el 80% más o menos). Todos los detalles técnicos están en la wiki, donde iré poniendo los gadgets propios de Wixet y otros ejemplos explicándolos (aunque de momento el manual de google está bien para iniciarse http://code.google.com/intl/es/apis/igoogle/docs/tutorial.html). Por supueto, se irán añadiendo todas las funcionalidades que queden.

La versión de Opensocial será la 0.9 ya que es la más común y la soportada por la mayoría de contenedores opensocial (igoogle por ejemplo).

También quiero decir que la apariencia es similar a la anterior. El mayor cambio ha sido interno así que la interfaz gráfica apenas se ha visto afectada.

Otro punto importante es la compatibilidad del software. Mi intención es que sea lo más sencillo de instalar, unos requisitos sencillos y la máxima potencia posible. Son terminos un poco complicados de juntar pero la cosa ha quedado tal que así:

Los requisitos mínimos son PHP 5.3 (recuerda que wixet funciona con symfony2) y mysql. Con sólo esto ya puedes tener wixet funcionando.
Esta instalación Wixet funciona pero no de la manera más eficiente posible. Para obtener el mejor rendimiento sería conveniente usar cachés. Si tu servidor cuenta con Memcached y APC el rendimiento crecerá exponencialmente.

Memcached y APC no están disponibles en todos servidores, pero aun así son herramientas bastante comunes y que no requieren de configuración extra (se instalan y a funcionar).

Pero aún no está todo dicho. Una red social no es nada si no puedes realizar búsquedas. Con una instlación básica, puedes realizar búsquedas pero tanto en rendimiento como en capacidad dejan que desear. Para hacer búsquedas muy rápidas y potentes Wixet está preparado para trabajar con Sphinx. Esto ya es un software concreto y a menos que tengas un servidor dedicado seguramente no dispongas de ello. Aclaro que de la misma manera que puedes trabajar con Sphinx puedes hacerlo con Lucene o lo que quieras. Simplemente tendrías que “enganchar” a Wixet (mediante unas clases) tu sistema de búsqueda.

La cosa queda así: Puedes usar wixet para algo casero o para un entorno más exigente. Decidí hacerlo así principalmente porque hay que gente que se ha interesado en usar Wixet, y pienso que no sería “justo” obligar a quien quiera usarlo a gastarse un pastón en un servidor (en ese caso simplemente nadie intentaría usarlo).

Por último, hay cosas “a mayores” que he incluido en wixet y que no forman parte del estándar opensocial. El motivo es simplemente que no existen. Opensocial está en constante crecimiento lo que quiere decir que se van añadiendo cosas. Mi intención es proponer esas cosas nuevas y si se aceptan o incluyen algo semejante se implementarán tal y como se decida en la comunidad opensocial.

Nos vemos!

Un comentario »

03 Jan

Feliz año! Y ya de paso…

Publicado en Anuncios el 03.01.11 por maxpowel

Feliz año nuevo!! Ya se que llego un poco tarde pero también quería aprovechar para contaros un poco acerca de Wixet.

Como dije anteriormente,  ibamos a adoptar el estandar opensocial. Mi intención es dar soporte para opensocial 1.0 aunque el cual ya está prácticamente implementado.

Entre otras cosas que trae opensocial, me gustaría destacar OSAPI que viene a tratar el tema de obtener información sobre los usuarios (perfil), todo lo relativo a los gadgets (aunque yo siempre los he llamado widgets :P ) y el tema de comunicación segura con otros servidores (para aplicaciones externas).

También una nueva interfaz (aunque manteniendo es estilo) se podrá probar junto a la “tradicional”. La intención es valorar cual es más práctica.

Por último, deciros que para ver que realmente funcionan bien los gadgets estoy probando con los de esta página y de momento los renderiza y trabaja a la perfección con ellos. Por supuesto, también habra un sandbox donde cada uno pueda hacer sus propios gadgets. Otra gran ventaja de opensocial, es que la documentación ya está hecha lo que sin duda ahorra una gran cantidad de trabajo (por ejemplo http://wiki.opensocial.org/index.php?title=JavaScript_API_Reference o http://code.google.com/intl/es-ES/apis/gadgets/)

Un saludo y nos vemos pronto ;)

Un comentario »

18 Nov

Wixet todavía más “social”

Publicado en Novedades el 18.11.10 por maxpowel

Saludos!
Cada día que pasa aparecen cosas nuevas o, simplemente, conocemos cosas nuevas. En mi caso hace un tiempiecillo que me topé con opensocial. Opensocial define un estandar para crear aplicaciones y eso quiere decir que una aplicación que siga dicho estandar será compatible con cualquier página que respete el estandar.

Hasta aquí parece algo sin gran importancia, pero espera que te cuento más cosas.opensocial
En wixet se estaba desarrollando un sistema de widgets (miniaplicaciones). Estos widgets cuentan con su parte php y su parte javascript. Últimamente estaba trabajando en hacer que un widget pueda “acceder” al tronco de la página para hacerlos más potentes (ya no se limitarían a ser un cuadradito en el borde).

etiquetas: , , , ,

10 comentarios »

20 Oct

Manual de instalación de Wixet

Publicado en Documentación el 20.10.10 por maxpowel

Buenas! El caso es que he recibido varias peticiones de ayuda para instalar Wixet. La verdad es que no es nada trivial instalarlo, básicamente porque hace uso de muchos servicios y de momento hay que instalarlos a parte (servidor ldap, openfire…).

Realmente no es complicado, sólo es seguir unos pocos pasos. En un futuro intentaré automatizar la instalación lo máximo posible pero mientras tanto os dejo un pequeño manual.

Sin comentarios »

16 Oct

Fuera de aquí bots!

Publicado en Anuncios el 16.10.10 por maxpowel

Buenas!

Desde hace unos días el servidor de Wixet iba realmente mal. Después de investigar vi que había muchos bots atacando másivamente (entiendo atacar por realizar conexiones). Algunos de ellos había chupado más de 25 gigas de tráfico el último mes (unos 180 gigas de tráfico era el total). Por supuesto eso no encaja con las visitas de usuarios de Wixet así que miré el log de apache a ver que demonios estaba pasando.

Había logs con cientos de miles de líneas (cada línea, una peticion) y mirando un poco por encima se ve claramente como son bots que tocan los cojones.

La solución que he tomado es un script que banea IPs. Bueno, no así de sencillo. Todos sabemos que estos bots cambian de IP todo el rato así que no sirve de mucho banear una IP que te ha atacado hace 10 horas. Mi solución ha sido que el script banee a los hosts sospechosos durante 10 minutos, si vuelven ese tiempo se va incrementando. Un bot sospechoso sería por ejemplo el que accede directamente por ip, intenta acceder a directorios inexistentes o hace GET fuera del dominio de wixet (en ese servidor sólo está wixet.com y www.wixet.com así que no hay problema).

Si a alguien se le ocurre alguna medida para combatir esta gente (principalmente servidores chinos y americanos) lo agradecería enormemente.

Ahora el funcionamiento del servidor, si bien es lentillo, es usable. A ver si en un futuro no muy lejano se puede tener acceso a un servidor más potente y económicamente viable ;)

Nos vemos!

2 comentarios »

04 Oct

Contraseñas antiguas

Publicado en Anuncios el 04.10.10 por maxpowel

Buenas!

Unas cuantas personas me han comentado un problema con la contraseña. Lo que ocurre es que la contraseña se ha cambiado a cada usuario por una aleatoria. El motivo no es otro que aumentar la seguridad ya que el algoritmo de cifrado se ha cambiado y se han añadido otros parámetros para hacerlo más seguro. La solución es resuperar darle a recuperar datos para genera una nueva.

Lo que me ha llevado a hacer este cambio es que el algoritmo usado (md5) NO es un algoritmo de cifrado, sino de compresión. Esto quiere decir que en ningún momento fue ideado para proteger información y en no mucho tiempo se encontrará la manera de “romper”. Lo pongo entre comillas porque realmente no se rompería nada debido a lo que dije antes de que md5 no es un algoritmo de cifrado (pese a que se use masivamente para esta tarea).

Un método para hacer un cifrado más potente es salzonar los datos. De esta manera las contraseñas en md5 estarían incluso “seguras” pero se tendría que generar de nuevo las contraseñas. Llegados a este punto, decidí cambiar md5 por sha que sí es un algoritmo de cifrado sin ningún tipo de indicio de ser roto.

Aclaro que hay sitios donde dicen “romper” SHA pero realmente lo que hacen es por fuerza bruta sacar la clave cuando la longitud de ésta es muy pequeña y no funciona con longitudes de clave más grandes (a menos que tengas acceso a un superordenador). Aclaro que la longitud de la clave no tiene nada que ver con la contraseña del usuario, es algo interno del algoritmo en cuestión.

Espero que podáis disculplar las molestias.

Un saludo

3 comentarios »

27 Sep

Nueva version funcionando

Publicado en Anuncios el 27.09.10 por maxpowel

Saludos, hace ya un par de semanas que el dominio principal (www.wixet.com) está usando la nueva aplicación de Wixet. No está terminada ni mucho menos ya que tenemos muchas más ideas por implementar pero creo que es buen momento para haber hecho la migración. En primer lugar, todo aquello que no funcionaba en el wixet viejo (de la parte de la interfaz sobretodo) ahora sí funciona. La parte javascript ha sufrido un cambio muy drástico (a mejor creo yo) y el principal motivo es que ahora funciona de manera autónoma. He implementado un sistema de controladores y actions (al estilo mvc) que maneja toda la ejecución del javascript en vez del modelo anterior donde los widgets lo manejaban todo. Ahora mismo no existe nada así libre (se de alguna página importante que usa este sistema pero el código se lo guardan) así que me tocó hacerlo lo que implica que probablemente de fallos. Con el tiempo se irá perfeccionando.

Ahora Wixet funciona sobre symfony. Esto ha supuesto reescribir toda la aplicación lo que quiere decir que hay códigos no muy probados que puedan requerir cambios. Por ejemplo el algoritmo de comprobación de permisos ha sufrido cambios para mejorar el rendimiento.

Actualmente Wixet esta en una cloud. Con esto quiero decir que los recursos del sevidor son variables y los iré aumentando en función de la carga (que el presupuesto no anda para mucho más :P ).

No quiero enrollarme más, sólo decir pasito a pasito Wixet se va completando y esperemos que mantenga el ritmo.

Nos vemos!

Sin comentarios »

03 Sep

Sonidos y vídeos en los comentarios

Publicado en Documentación el 03.09.10 por maxpowel

Buenas! Ayer actualicé unos cambios que hice.
Básicamente consiste en poner audios y una mejora de los vídeos de youtube.

En cuanto a los audios, se usa HTML5. Tanto firefox como chrome lo soportan.

Observamos que cuando hay un audio aparece a la derecha el nombre del audio y las opciones de reproducción. El formato utilizado es OGG Vorbis así que todos los audios que se subán se convertirán a ese formato. Ogg Vorbis es un formato libre (así como el contenedor ogg), de calidad y además soportado por firefox y chrome de manera nativa. Por supuesto los audios no se autoreproducen ni nada por el estilo. La idea de estos audios es “expresar” con un sonido lo que a veces es muy complicado de explicar con palabras (y que incluso pierde gracia) y no para subir canciones y tener una música de fondo. Por este motivo el tamaño de los sonidos está muy limitado. Si se desea tener música ya se hará un widget para reproducir de Jamendo (o lo que sea) pero ya más adelante.

Inserción de sonidos

La inserción de sonidos se hace desde el propio editor de texto. Son los dos elementos de la derecha, el botón con un altavoz y el cuadro de búsqueda.

El botón muestra tus sonidos favoritos. Para ello hace uso de un complejo algoritmo que obtiene los 20 audios más usados por la persona :P

El cuado de búsqueda busca en todos los audios disponibles. La idea es que no se suban audios privados sino graciosos y elocuentes para gozo y disfrute de todos los usuarios (uy que frase ha salido ahí). Aunque si esto causa algun problema de privacidad (alguien sube comentarios de voz grabador por la misma persona y no quiere que cualquiera pueda oirlo) se cambia, no hay ningún problema.

Inserción de vídeos

No me abucheéis pero se usa el reproductor flash de youtube. Me ha costado tomar esta decición pero actualmente creo que es la correcta. Ahora hay mucho alboroto con el tag video de html5 además de que la reproducción de vídeos HTML5 por youtube está en fase experimental (que es anterior incluso a la fase de pruebas) y no disponible para todos los vídeos. Por suerte la decisión de Youtube de usar WebM nos garantiza que podremos usar HTML5 sin problemas ni para firefox ni chrome.

Tengo que decir que ya no se usa la bibliteca Zend ni el API php de youtube. Era un engorro y además obligaba a cargar con Zend (ya que no lo usaba para nada más). Realmente el API de youtube es una fuente rss. Esto es que tu le preguntas algo a youtube y él te responde en formato xml (vamos, como algunos teleoperadores :P ) y teniendo clases nativas en PHP para leer XML pues veía una tontería usar la biblioteca de youtube (que además es muy poco versátil).

Con una clase PHP de apenas 60 líneas tengo lo necesario para realizar búsquedas y paginaciones. ¡El cambio creo que es una mejora evidente!

También hay cambios visuales. Ahora no se carga un reproductor de youtube por cada vídeo. En su día era lo más sencillo pero muchos estarán de acuerdo en que no debemos maltratar así nuestro ordenador (básicamente porque flash no se caracteriza por ser muy ligero). Se utiliza un reproductor general.

El reproductor está pegado debajo a la derecha. Se abre cuando pinchas sobre cualquier foto de un vídeo de youtube. Usa los controles del api javascript del reproductor de youtube así que en principio no debería dar ningún problema. En principio los vídeos cargan con un tamaño de reproductor pequeño. Pero si vídeo te gusta y quieres verlo en grande puedes redimensionarlo como si fuera una ventana (o usar pantalla completa).

La búsqueda es como antes

Pues por ahora esto es todo. El reproductor se puede hacer con muchas más funciones pero de momento quiero centrarme en ofrecer lo necesario y que funcione bien. Luego ya se extenderá con todo tipo de funciones.

Y como siempre digo, cualquier alguna sugerencia o crítica constructiva será bien recibida ;)

PD: Segun comentan, hay cosas que aparentan no funcionar desde firefox. Da una sensación de “vaya mierda que esto no rula” pero el problema es que hay muchos cosole.log (para labores de debug) y que si no se tiene instalado firebug da error en tiempo de ejecución. Intento elminarlos todos pero a veces se me olvida alguno. Espero que no cause muchas más molestias.

etiquetas: , ,

2 comentarios »

31 Aug

Versión ya lista (casi)!

Publicado en Anuncios el 31.08.10 por maxpowel

Saludos compañeros!

Sólo decir que ya se puede ver la versión funcional de Wixet. No quiero catalogarla de alpha ni beta ni nada. Ahora mismo se puede hacer todo lo que se podía hacer con la versión antigua de Wixet (y alguna cosilla como la gestión de permisos) pero mejor.

Con “mejor” me refiero por ejemplo a una mejor interfaz, funcionalidades extras… y bueno todo el rollo aquel de que corre sobre un sistema superchachiguay (que fue lo que propició el cambio).

Un comentario »