Avatares. Dando cariño al plugin de WordPress GNU Social

El viernes hablé de cómo he incorporado al blog el sistema de comentarios distibuido de WordPress GNU Social con el plugin creado por Manuel de Las indias.

Vengo siguiendo el proyecto desde que se anunció la idea y conversando con Manuel y David acerca de ideas sobre cómo gestionar algunas cosas en el plugin. Esta semana, mientras hacía pruebas antes de incorporarlo al blog, le comenté al Manuel que tenía una idea sobre cómo mejorar la gestión de avatares que se estaba haciendo. Manuel, como buen hacker que es, contestó que le parecía bien, pero me tiró la caña para ver si yo me animaba a hacerlo. Yo dije que sí y la verdad es que ha sido muy divertido.

Nunca había trabajado en el desarrollo de un plugin para WordPress. Sí que había desarrollado temas personalidados pero nunca una linea de código para un plugin y este además presentaba algunos retos como la interacción con el API de GNU  Social o la necesidad de mantener compatibilidad con las primeras versiones del plugin e instalaciones ya existenes.

El escenario previo

Manuel tuvo una gran idea sobre cómo tener almacenada la imagen a mostrar de cada usuario. Hasta ahora en el campo de email del autor del comentario, se almacenaba la url que GNU Social da como avatar a mostrar para ese usuario.

Es una solución ingeniosa, la verdad, pero presentaba varios problemas que los indianos ya habían detectado. A veces cuatro ojos ven más que dos y es parte de la magia del Software Libre así que cuando cuando se me ocurrió cómo solucionar este tema nos pusimos manos a la obra y durante la tarde / noche del sábado hice las modificaciones.

¿Por qué el cambio?

Almacenar una url concreta era depender de que esa imagen esté siempre ahí, lo que puede no ser así por multiples razones.

La primera y más sencilla es simplemente que el nodo al que referencia no nos la pueda entregar. Bien porque el nodo está caído, la imagen ya no esté almacenada, el nodo se haya desmantelado, errores en la red, etc. Eso nos podría dejar con un montón de enlaces con respuestas 404.

La segunda es que, aunque la imagen esté disponible para siempre, el usuario queda atadao, para esos comentarios, a la imagen de avatar que seleccionó en ese momento y eso si bien no es realmente un problema, no es lo más deseable.

Es sobre estos detalles que nace la idea del cambio.

Almacenado usuarios en vez archivos

El primer cambio a realizar es cambiar el almacenamiento de urls concretas de imagenes por el usuario que ha realizado el comentario. Por suerte para nosotros además, la manera en que se referencia a un usuario en GNU Social tiene el formato usuario@nodognusocial.com,   que tiene un formato igual al de un email y esto nos facilita mucho la tarea. De esta manera, almacenando esto en el campo del email, en la fase de pintado de los comentarios, podemos separar ese formato y tenemos disponibles el “nombre” de usuario y el node donde ese usuario está registrado.

Rescatando imágenes

Si no tenemos ni queremos tener almacenadas esas urls de las imágenes de los usuarios, tenemos que solicitarlas en tiempo de mostrar la página al nodo del usuario correspondiente. Para ello atacamos al nodo, solicitando en cada petición la imagen que ese usuario tiene en el momento actual como avatar por defecto. Es algo similar a lo que WordPress hace cuando rescata los avatares de sistemas como Gravatar.

Técnicamente, como tenemos que hacer peticiones a otros servidores desde dentro del plugin, utilizamos funciones de WordPress como wp_remote_request para evitar usar otras soluciones como cURL y mantener todo más integrado en WP y utilizando las herramientas que nos proporciona. Todas las instalaciones de GNU Social tienen un API de tipo REST a la que se pueden hacer consultas y algunas de ellas, como la que nosotros hacemos solo traen datos públicos, por lo que se pueden hacer sin necesidad de usuario y contraseña.

Con esa respuesta, obtenemos en tiempo de pintado la url de la imagen a mostrar para cada usuario.

Me encontré con el asunto de que por supuesto, cada usuario puede y suele tener más de un comentario en cada post y no queremos que esta solicitud al nodo se haga más de una vez para cada página. Es innecesario, retrasaría el tiempo de respuesta de la página y multiplicaría las solicitudes a cada nodo. No es algo brutal que ni que supondría segundos, pero en web, se trata de reducir todo este tipo de ineficiencias para reducir los tiempos del usuario al máximo.

Para solucionar esto, para cada usuario que vamos a mostrar, consultamos si antes hemos guardado ese valor de url en la caché de WordPress a través de wp_cache_get, parte de una colección de funciones que WP nos dá para optimizar petciciones trabajando con caché. De esta manera, si ya tenemos el dato, saltamos la petición y procedemos al pintado. Si no, hacemos la petición al nodo y cuando responde, guardamos en caché con wp_cache_set y seguimos. Si el usuario se vuelve a repetir en la misma página, ya lo tendríamos y no necesitamos solicitar de nuevo, volveríamos al primer caso explicado.

Retrocompatibilidad

Para mí una de las cosas más bonitas de lo que hemos logrado al hacer el cambio en el plugin es no romper la compatibilidad con todos los comentarios que se han creado con la primera versión del plugin.

Como mínimo en Las indias ya llevan unos cuantos posts con el sistema y no queríamos dejar esos comentarios con imagenes erroneas, ni siquiera con las antiguas, parte del reto era hacerlos igual de compatibles. Por no hablar de otros blog, incluso algunos que quizá ni sabemos si ya lo tienen instalado. Será transparente para el usuario y el autor del blog si se usó originalmente un sistema o el otro.

En caso de usuarios del sistema original, en lugar de tomar el nick del usuario, sacamos la id de usuario y la url de su nodo del campo comment_author_url y hacemos las mismas peticiones que he explicado antes solo que basado en la id. Caché incluida.

Gestión de errores

En cualquier software pueden pasar cosas. En el nuestro, concretamente pueden pasar varias cosas.  Que el nodo o el usuario ya no existan o estén temporalemte fuera de linea, que existan pero falle el API o que algún dato que hubiese en el nombre de usuario haya sido modificado o mal guardado por la razón que sea en base de datos.

Pero lo bueno es que en ese caso, si cualquiera de esas situaciones se diese, tenemos al autor del blog cubierto. La gestión de errores para el sistema de avatares, en caso de fallo al obtener las imágenes del nodo, tampoco te dejaría con la página llena de errores 404. En lugar de la foto del usuario, mostramos una imagen por defecto. Pero no cualquiera, sino la que el usuario haya decidido configurar como avatar por defecto en los comentarios de su blog.

Siguientes pasos

Según dice Manuel, y estoy de acuerdo, parece que estamos listos para una versión 1.0 del plugin. Así que creo que lo siguiente, aunque él podrá hablar mejor de esto, será hacer los preparativos para incorporar el plugin al directorio de WordPress y quizá otras acciones para darlo a conocer.

Como dicen en Las indias, empiezan a alcanzar velocidad de crucero en el desarrolo con GNU Social y me alegro mucho de que estos pequeños cambios puedan abrir la puerta un poco más para ese futuro.

El regreso a WordPress

Esta semana escribí sobre el nuevo sistema de comentarios distribuidos que he incorporado al blog y ya comentaba que se trata de un plugin para WordPress, así que en realidad no es sorpresa que he vuelto a migrar el blog, pero me apetecía comentar un poco las razones de la decisión. Técnicas y de usuabilidad como autor.

En febrero anunciaba que había cambiado de dominio y había aprovechado el cambio para migrar a otro software de publicación, Ghost. Tengo que decir que  funciona muy bien y me gusta, no es cuestión de eso. En mi caso lo tenía auto alojado y la instalación es facil, funciona rápido y no me ha dado ni un solo problema. Pero para las cosas que quiero hacer de aquí a un tiempo se me quedaba corto.

El tiempo que lleva Ghost en desarrollo es relativamente poco, y si bien está perfectamente maduro para poder publicar, en mi opinión, si pretendes hacerlo con cierta asiduidad, aún le faltan cosas para que sea, digamos, cómodo de usar. Inisito, no es ni mucho menos una queja, es un producto fantástico y lleva muy buen camino.

Panel de control

Panel de control GhostEl famoso panel de control de Ghost que quizá hayas visto en el video de presentación del proyecto, a dia de hoy no existe. Está en desarrollo según la hoja de ruta del proyecto, pero lo que hay ahora dista mucho de ser tan completo. En realidad lo que tenemos es poco más que un listado de posts publicados y en borrador, desde el que puedes acceder a la creación, edición o la configuración del blog.

No existe una búsqueda de artículos, lo que en mi caso, aunque no es un blog con un contenido enorme, ya empieza a volverse incómodo cuando tratas de referenciar artículos para dar cierto contexto.

Gestión de multimedia

Sencillamente no existe. No hay nada implementado aún para navegar entre archivos subidos,  borrar imágenes y demás. Esto si que llega a ser un inconveniente enseguida, porque no puedes ver lo que ya has utilizado en otros artículos y no existe nada parecido a una biblioteca.

Si subes un archivo dos veces, lo subes dos veces.

Referencias internas

Como comenté antes, no hay manera de hacer una búsqueda entre tus contenidos para referencias a unos archivos desde otros. No necesariamente algo tan completo como lo que ofrece WordPress al crear un enlace, es que no hay nada aún.

Por razones similares, tampoco existe aún un api para poder crear en las plantillas una caja de búsqueda. Esto creo que es muy incómodo para los lectores. Existen soluciones a través de scripts que bucean en el RSS del blog, es un buen hack y muy buena idea para atacar el problema, pero no es muy … eficiente.

Programación de publicaciones

Parece que también está en la hoja de ruta pero a dia de hoy … nada de nada. Puedes tener los post en estado de borrados, evidentemente, pero no programar una fecha de publicación. En mi caso, que suelo escribir por la noche que es cuando tengo algo de tiempo, o lo dejaba publicado a las tantas o tenía que estar pendiente de publicar por la mañana. No es un problema enorme, pero es algo a lo que estamos acostumbrados.

Plugins

Por ahora no exite un API en Ghost para que los desarrolladores puedan crear plugins que amplien las funcionalidades del software. Así que básicamente lo que hay creado (y hay bastantes cosas) son scripts que hacen algunos hacks para poder llevar a cabo lo que se quiere en el la plantilla.

Esto es lo único, en mi opinión, que sí considero un error por parte de los creadores. Por lo que he podido ver, existe una buena cantidad de desarrolladores con ganas de crear para Ghost. Quizá si se priorizase este API, antes incluso que algunas cuestiones de core del sistema, el estado y el ecosistema podrían crecer bastante.

i18n

No exitste absolutamente ninguna manera de tener las plantillas con cadenas por idioma, contenido multi lenguaje, el panel de control en tu idioma ni nada que tenga que ver con internacionalización. Tengo cero problemas con manejarme con un software en inglés, pero es algo que no me gusta. Quiero al menos la posibilidad.

Sistema de comentarios

En Ghost no existe sistema de comentarios. Esto no es algo que falta por hacer. El proyecto parece tener claro que no lo quieren y no lo pondrán. No sé en realidad si es tanto por simplificación (lo dudo) y para hacerles a ellos más sencilla su oferta del software como servicio.

No es sorpresa, lo sabía cuando lo instalé, de hecho nada es sorpresa porque primero probé todo unos días en local. No me acababa de gustar la idea de usar un sistema centralizado y privado como Disqus, pero con el tiempo la idea me ha ido “escamando” cada vez más hasta el punto de ser uno de los motivos principales para el cambio.

¿Lo recomendaría?

Pues aunque pueda parece que he acabado muy descontento por lo que comento en los puntos anteriores, si.

Para alguien que busque una solución realmente sencilla y que no le guste estar cacharreando con el blog, probando cosas nuevas o incorporando distintos tipos de contenido, de verdad que Ghost funciona super bien. Es fácil de usar, es rápido, tiene un API de desarrollo de plantillas en JS muy bien documentado.

Pero en mi caso, como digo, echaba de menos poder hacer todas las cosas que comento, así que, unido a algunas cosas que me apetecía apoyar, como las integraciones con GNU Social, la decisión estaba clara. Volver a WordPress.

 

 

Imagen destacada: Creative Commons por Alexande Gounder

GNU Social. Un paso adelante en la conversación

Estrenando comentarios

Hoy estoy de estreno y muy contento. No solo he vuelto a migrar el blog a WordPress, sobre lo que escribiré un artículo, seguramente mañana. Estoy de estreno con un sistema de comentarios distribuido.

Desde hoy los comentarios de mi blog no solo no pertenecen a una empresa, como durante la temporada en que he usado Disqus, sino que ni siquiera están atrapados en mi blog.

Ahora utilizo un sistema que liga los comentarios de blog a la red de GNU Social  a través del plugin wp-gnusocial.

Se trata de un desarrollo de Manuel y parte de la idea de tratar de generar converacion más allá de los canales habituales. Quien tiene o ha tenido un blog, conoce la sensación de que nadie comenta en los post, pero luego te manda muchos comentarios en redes sociales como respuesta al enlace. ¿verdad?.

Esto presenta varios problemas. El primero que lo interesante de los comentarios del post, normalmente es la conversación que se genera. Y el segundo es que lo que escribes en Facebook o Twitter no es tuyo, es de la empresa. Como ya hemos comentado, podrían cerrar tu cuenta y perederías el acceso a participar de esa conversación, cuando en realidad se sustenta sobre contenido generado por tí. El modelo de Facebook y Twitter, además, suele generar una conversación corta y escasa, en parte por la propia naturaleza de estas redes. Pero ¿y si podemos tener lo mejor de ambos mundos con una solucion que no solo es libre sino además distribuida?.

La idea es que un usuario pude responder a los comentarios desde cualquier nodo de GNU Social, no tiene porqué ser el mismo que usa el propietario del blog. El único requisito es una cuenta en un nodo y, eso si, seguir al usuario que publíca el blog para que puedas comentar desde tu nodo.

¿Comentar en el blog desde fuera de el?

Si, porque una vez que has leido el post, de esta manera tu puedes continuar con la conversación desde tu nodo, no tienes porqué acceder de nuevo al blog. Y es ahí donde todo se vuelve social. Diferentes personas que acceden desde diferentes nodos pueden participar de una conversación que surgió a raiz de un post sin visitarlo y que aun así esa conversación quede reflejada en el post. ¿No es fantástico?.

Estado del plugin

A dia de hoy el plugin ya es perfectamente funcional. Los indianos llevan ya tiempo usándolo y soy testigo de que funciona perfectamente. Ahora entre varios estamos tratando de sugerir ideas y echar una manilla, por lo que el desarrollo del plugin está completamente vivo. Y sé de buena tinta que todas las sugerencias positivas son bienvenidas.

Instalación y configuraciones

Actualmente el plugin no está en el directorio general de plugins de WordPress, pero la instalación es muy facil.

Se puede obtener clonando el repositorio del mismo. Aquí tienes dos opciones, acceder al directorio

wp-content/plugins 

de tu instalacion de WordPress o clonarlo fuera y hacer un enlace simbólico a esa carpeta.

Para clonar el repositorio basta un:

git clone git://bitujo.enkidu.coop/wp-gnusocial

Una vez clonado, accede a plugins instalados en el panel de control de WordPress e introduce los datos que se piden (url, usuario y clave) para empezar a publicar.

Después de activar el plugin, no te preocupes si aún no ves ningún cambio. Tus post antiguos mantendrán la configuración que tenías y el sistema de comentarios nativos. En el momento en que publiques un post nuevo, el plugin creará una entrada en el nodo configurado con un enlace al post y podrás ver el nuevo sistema de comentarios.

En cualquier caso, los comentarios quedan también guardados en tu blog, en el panel habitual, por que lo que puedes gestionarlos de la misma manera que hacías antes. Evidentemente no puedes moderar la conversación en el nodo, pero sí en tu blog.

Decisión consecuente

En mi caso se trataba de una decisión cosecuente. No me gusta tener mi contenido ni los comentarios del blog en un serivicio que no puedo controlar. Durante el tiempo que he usado Ghost, no tenía muchas opciones mejores para los comentarios, pero me quemaba usar Disqus y perder el control de los datos. Es cierto que Disqus te permite exportar, pero al final el sistema no lo controlas tu, evidentemente.

Y precisamente hoy hablábamos del tema en La Matriz, el nodo de GNU Social de los amigos de Las indias y Manuel comentaba algo en lo que tiene muchas razón. Si defendemos que hay que recuperar la red para que sea independiente y no esté completamente basada en cuatro servicios centralizados, si pensamos que internet debe volver a ser de las personas, es el momento de dar un paso adelante y no vacilar. Ser consecuentes y no solo “predicar con el ejemplo”, sino dar un paso muy importante para que tanto nosotros como todos los que decidan acercarse y ser parte de “otra cosa”, podamos disfrutar de una red, unos servicios, relaciones y comunicaciones como realmente nos gustan. Vamos a construir el entorno que relamente queremos y empezar favoreciendo la conversación, nos parece un comienzo estupendo.

El Software Libre y su apuesta por ser diferente

Hace días que por varias conversaciones le doy vueltas al planteamiento de algunos proyectos de Software Libre, pero hoy leyendo un artículo de Manuel Ortega sobre el modelo de interacción y relaciones en GNUSocial frente al de Twitter, me ha venido más claro lo que quería contar.

Manuel habla en su artículo (entre otras cosas) de las dudas que se plantean dentro del proyecto de GNU Social sobre cambiar la manera en la que los nodos y los usuarios interactúan entre si. De producirse ese cambio, el modelo se parecería más al de Twitter, aunque para esta explicación recomiendo acudir al artículo de Manuel, no quiero a explicar de nuevo lo mismo que él ha contado perfectamente.

El caso es que ese cambio, evidentemente haría posible que mucha más gente se pueda acercar en masa a interactuar a los nodos de GNUSocial porque le ofrecería algo que ya conoce. Se estaría replicando el modelo y cambiando solo el Software que corre detrás.

Distintas necesidades

Estoy de acuerdo en que en algunos casos, lo que se necesita de algunos proyectos de Software Libre es ofrecer un programa que haga lo mismo que la versión privativa sin caer ( evidentemente ) en el problema de recortar los derechos de los usuarios. A veces queremos saber, por ejemplo, que el software que usamos no hace un uso indebido de los datos. En otras ocasiones, la gestión de administraciones públicas hace necesario replicar funcionalidades de la manera más parecida posible.

Es todos estos caso está claro, la ingeniería inversa y la replicación son el camino. Buscar la manera de ofrecer lo mismo con libertad.

Lo que creo es que no todos los proyectos necesitan seguir ese patrón. El desarrollo de algunos, debería poder ser una apuesta por hacer algo distinto. Si desde el movimiento del Software Libre se apuesta por usar el recurso de la tecnología para producir cambios sociales, se impone la necesidad de aplicar fórmulas distintas.

Redes sociales o sistemas operativos

Es evidente que toda aquella tecnología que tiene que ver con la comunicación, en un mundo globalizado, es una herramienta perfecta para fomentar el cambio de paradigmas.

En el caso de GNU Social, ¿por qué cambiar el model actual de federación?. ¿No sería una bonita idea apostar por ofrecer un modelo diferente?. En un proyecto que no se ha desarrollado con el fin de obtener ingresos millonarios, ¿por qué debería ser prioritario conseguir una entrada masiva de usuarios a los que por otra parte no les importa mucho la filosofía del proyecto?. En mi opinión, si GNU Social quiere de verdad ser diferente, debería mantener esa diferenciación.

Me gustaría exponer también el caso de Firefox OS, desarrollado por Mozilla.

A veces la gente no entiende por qué le digo que no se trata de hacer una competencia directa a Android o iOS. El proyecto nace directamente con otra filosofía, se puede ( y debe ) permitir prestar atención a otras detalles como la privacidad, la accesibilidad, el respeto a los usuarios.

Es a este planteamiento que me refiero. Todas estas herramientas pueden ser verdaderamente útiles para quienes quieren llevar a cabo cámbios, proponer maneras distintas de hacer las cosas.

¿Queremos de verdad que las cosas ocurran de manera distinta? ¿No queremos copiar las formas de quienes han tomado el poder de la red y la tecnología?. Tomemos caminos diferentes y no caminemos en círculos con otros zapatos para ver si nos llevan a otro sitio. Debemos ofrecer verdaderas alternativas y no simples sustitutivos.

El blog ha muerto, viva el blog

Cada poco tiempo leemos a los gurús de internet o supuestos expertos en comunicación anunciar la muerte del blog y su supuesta sustitución por parte de las redes sociales. Sin embargo no dejan de aparecer soluciones de software para la creación de blogs, crece el número de bitácoras personales e incluso proliferan nuevas plataformas para la creación gratuita de los mismos.

Especialmente si se trata de un blog hospedado por uno mismo, no existe a día de hoy otra manera de poder publicar de manera libre tu propio contenido. No importa si es opinión, lecciones de idiomas, crítica política o creación literaria, ninguno de estos contenidos es realmente tuyo si no lo publicas en tu propio medio y una red social es muchas cosas, pero no es desde luego tu propio medio.

En tu blog aplican tus normas, tus temáticas, tus plazos, tu criterio y tu nivel de tolerancia. En las redes sociales centralizadoras ( Facebook, Twitter y demás ), tanto si lo percibes como si no, estás sujeto a los criterios e intereses de empresas y por tanto estás en riesgo de quedar fuera del juego cuando resultes incómodo o inadecuado.

Lo cierto además es que a pesar de que escuchamos una y otra vez ese discurso de la muerte de la blogosfera, todo el mundo termina ( aunque le hayan llegado compartidos en Facebook ) leyendo lecciones de cocina, cuidado de plantas, opiniones políticas y demás en blogs.

Yo diría por tanto que esta actitud y continua proclamación de la muerte de la bitácora responde más al interés de estos medios controlados que a una situación real. Quienes controlan los medios saben que no es cierto, puesto que tienen todos los datos, saben lo que se comparte, pero les interesa crear la sensación de que sus medios “son” internet y no solo un acumulador de contenido ajeno, una especie de lector de RSS muy bien pintado per igual de bien filtrado.

Tu blog genera conversación, intercambio, no adhesión y paso a lo siguiente. Los lectores de un blog, si se convierten en habituales, generan al final cierta relación con el mismo, una especie de compromiso.

En realidad y aunque no lo leerás a menudo en los grandes medios, es el trinufo de la red humana, de la conversación y la libertad.

El blog ha muerto, larga vida al blog.