El Jardín Indiano

Conquistar el trabajo es reconquistar la vida

Grupo de Cooperativas de las Indias

Descubriendo la magia de OStatus con GNU social

Presentación de la serie y explicación de los fundamentos de GNU social que necesitas conocer para poder unirte al proyecto.

Hazte socio de «El Arte» y haz cerveza

gnusocialGracias a OStatus las instalaciones de GNU social no son jardines amurallados sino que se conectan entre si permitiendo a sus usuarios comunicarse y subscribirse unos a otros. OStatus es el engranaje que da vida a la red distribuida de nodos/servidores de GNU social. Una red distribuida, también conocida como la «federación», cuyas implicaciones son claves para impulsar un modelo social totalmente opuesto al de redes centralizadas y descentralizadas como Twitter y Facebook.

El objetivo de esta serie de posts bajo el título «Descubriendo la magia de OStatus con GNU social» es adentrarnos en el código de GNU social y detallar como funciona cada unas de las piezas de OStatus. Un aprendizaje clave para que nuevos desarrolladores puedan unirse al proyecto y desde el cual afrontar nuevos restos, entre ellos, la privacidad y la seguridad en redes distribuidas.

OStatus: las piezas del engranaje

gnusocial_ostatusOstatus combina de forma natural y eficiente un conjunto de piezas, protocolos, que permiten implementar comunicaciones distribuidas en la Web.

  • Activity Streams codifica las publicaciones, actividades y eventos sociales de los usuarios en los estándares Atom o RSS.
  • PubSubHubbub envia en tiempo real esos feeds a sus subscritpres alrededor de la Web.
  • Salmon notifica a los usuarios sobre las respuestas a sus publicaciones.
  • Webfinger hace fácil encontrar a otros usuarios en la red de nodos.

Aunque cada uno de estos protocolos cumple una función determinada veremos como colaboran entre si y ganan sentido al trabajar como engranaje dentro de cada nodo de GNU social. En este primer post vamos seguir los pasas que da GNU social cuando le pedimos suscribirnos a un usuario remoto, es decir, un usuario que no está en nuestro nodo.

Pero antes de pasar a la acción, veamos donde encontrar a OStatus dentro del código fuente de GNU social.

OStatus en el código fuente de GNU social

Inspirado en el boceto pintado en papel por Andrés durante el campUna de las maravillas de GNU social es su modularidad. Y como no podía ser de otra forma la implementación de OStatus está encapsulada dentro del plugin OStatus que podemos encontrar en la carpeta plugins.

El plugin OStatus agrega a GNU social un conjunto de librerías, funcionalidades y rutas para hacer posible la comunicación entre los nodos de GNU social. Hoy vamos a seguir los pasos del proceso de suscripción entre usuario remotos. El punto de acceso principal para esta opción en cualquier nodo de GNU social es main/ostatussub. Por ejemplo en laMatriz sería https://lamatriz.org/main/ostatussub.

Esta url será nuestro punto de partida para dar un viaje guiado por el proceso de suscripción a usuarios remotos. Un proceso donde nos centraremos en el trabajo que realiza el protocolo: PubSubHubbub.

Iniciamos el viaje hacia la suscripción

seguir_aEstando en el punto de partida, main/ostatussub, de cara al usuario final el proceso no tiene mayores secretos: introduce la dirección OStatus, usuario@example.com o http://example.net/usuario, del usuario al que desea subscribirse, a continuación GNU social le pide confirmar la suscripción, realiza la confirmación y a partir de ese momento empieza a recibir todas las publicaciones del usuario al que pidió suscribirse en su línea de tiempo personal.

Sigamos estos mismos pasos pero ahora haciendo referencia a las líneas de código de GNU social donde se desarrolla la acción.

  • Se ejecuta la acción. Cuando el usuario pulsa el botón «continuar» se ejecuta una petición POST, que incluye la variable profile, sobre la acción ostatussub implementada por el plugin OStatus.

    A partir de este momento GNU social se lanza a la caza del feed, todo es un feed, que se esconde detrás del usuario OStatus que le hemos indicado.

  • ¿Una uri o un email? Lo primero es confirmar si el usuario ha introducido en el formulario una uri o un usuario OStatus en formato dirección de email. Si lo que tenemos es un usuario OStatus en formato dirección de email tendríamos que tirar de Webfinger. Pero para este post vamos a suponer que tenemos una uri para encontrar el feed que buscamos. A partir de este momento es cuando entra en acción PubSubHubbub.

    PubSubHubbub nos permite suscribirnos a un feed en tiempo real. No tendremos que hacer peticiones regulares al feed para obtener las nuevas publicaciones sino que seremos notificados y se nos enviará el nuevo contenido en tiempo real cuando el feed se actualice. Para entender la lógica detrás de PubSubHubbub recomiendo ver este vídeo.

    En los pasos para implementar PubSubHubbub lo primero es descubrir como suscribirnos al feed, descubrir cual es el agente, hub, al que tenemos que pedirle que nos subscriba al feed. Este hub se encarga de informar a los subscriptores remotos sobre las actualizaciones de los feeds de los usuarios en su nodo. Cada nodo de GNU social tiene su propio agente.

  • discovery_pubsubhubbubDescubrir el hub. Una vez tenemos la url del feed GNU social hace una petición GET para obtener la información sobre el hub al que tiene que solicitarle la suscripción, le da persistencia a los datos encontrados (url del feed, hub del feed, etc) guardandolos en la base de datos asociados al usuario OStatus para el que recibimos una petición de suscripción. Culminado el paso, GNU social nos presenta los datos del usuario al que queremos suscribirnos y nos pide confirmación.
  • subscribingEnviamos solicitud de suscripción al hub. Una vez el usuario confirma la suscripción, GNU social da inicio al proceso de suscripción. Siguiendo la especificación de PubSubHubbub para solicitarle la suscripción a un hub, tenemos que hacerle una petición POST enviándole la siguiente información: mode=subscribe, topic=, callback=, verify=sync. El topic es la url del feed al que queremos suscribirnos y callback la url donde queremos recibir primero la clave de confirmación y a partir ahí las actualizaciones del feed. Aquí el código que implementa esto en GNU social. Enviada la solicidad tenemos que esperar a que el hub nos haga una petición GET con la clave de confirmación.
  • Recibimos la clave desde el hub y volvemos a confirmar.
  • !!Ya estamos suscritos!! A partir de este momento el hub nos va a enviar las actualizaciones del feed al que nos acabamos de suscribir con peticiones al url del callback que le hemos pasado.

¿Te ha gustado el viaje? ¿Te has perdido en algún punto? Esta serie de posts tiene como objetivo contribuir a la documentación de GNU social y facilitar la llegada de nuevos desarrolladores. Si encuentras algún error, tienes alguna idea para mejorar esta documentación, no dudes en comentar este post.

«Descubriendo la magia de OStatus con GNU social» recibió 13 desde que se publicó el Sábado 23 de abril de 2016 dentro de la serie «» . Si te ha gustado este post quizá te gusten otros posts escritos por Manuel Ortega.

Comentarios recibidos en este post y unidos a la discusión global de todos a través de la Matriz, nuestro espacio conversacional.

  1. Los indianos dice:

    Descubriendo la magia de OStatus con GNU social https://lasindias.com/descubriendo-la-magia-de-ostatus-con-gnu-social Esta serie de posts tiene como objetivo contribuir a la documentación de GNU social y facilitar la llegada de nuevos desarrolladores.

  2. @litox Qué bueno! Sí ves que algo no queda claro o se puede detallar más en algún aspecto, dinos y así aprovechamos para ir puliendo la documentación que vamos generando 🙂

    Estamos ahora documentando, el intercambio de mensajes entre dos nodos una vez ya tienen usuarios subscritos entre si

    @lasindias

  3. @manuel @lasindias la primera leída es un poco liosa por la cantidad de nombre nuevos, pero creo que está bien explicado, releeré el texto con más calma.

  4. Manu dice:

    @manuel @lasindias @litox Tengo una pregunta, a lo mejor me estoy adelantando y lo vais a explicar en un próximo artículo. ¿Cuando estoy suscrito a un usuario, quién se encarga de descargar las actualizaciones de contenido de ese usuario, el cliente o el servidor? Es decir, cuando yo conecto a lamatriz.org, por ejemplo, ¿es mi ordenador el que se encarga de descargar el nuevo contenido del usuario al que estoy suscrito, o es el servidor el que descarga el contenido periódicamente y me lo entrega cuando me conecto? Pienso que la primera forma es mejor, distribuye el trabajo entre los usuarios y alivia el trabajo del servidor.

  5. @manolollr El proceso es el siguiente, cuando tú te subscribes a un usuario en otro nodo de GNU social, el servidor de laMatriz no tiene que estar haciendo polling o peticiones para descargarse las nuevas publicaciones del usuario al que estás suscrito. Sino que el hub del nodo del otro usuario le envía una notificación a laMatriz cada vez que el otro usuario actualiza su feed, vamos cuando hace una nueva publicación.

    Al igual que el hub de laMatriz le notifica a todos los usuarios que están suscritos a ti, cuando haces una nueva publicación.

    Sí, ahondaremos más sobre el detalle de este proceso en próximos posts 😉

    @lasindias @litox

  6. David P dice:

    Muchas gracias por este trabajo necesario 🙂

  7. @lasindias Vale, tengo dos sugerencias, la aclaración esa «todo es un feed» lía un poco, sería mejor que simplemente enlazaras en la palabra feed y no pusieras la aclaración, porque parte la frase en dos y te deja roto cuando lo lees.
    Lo segundo es en el punto en que hablas de que recibimos la clave, ¿Qué clave?¿Para qué sirve esa clave?

  8. @litox Qué bueno! Cambiamos lo del feed. Lo de la clave tiene que ver con una verificación que pide el hub cuando envias la solicitud de suscripción. Le releemos y vemos como dejar esto más claro. Gracias!!

  9. @manuel @lasindias @litox @manolollr Hay una cuestión material obvia: un software corre sobre servidores, la topología de la red es la topología de servidores. La estructura de gnusocial es la de los servidores donde corre gnusocial, así q es una red distribuida. 

    Luego hay una cuestión filosófica: ¿por qué tanto éxito de la terminología P2P si es confusa? Por ejemplo «el P2P lending» son servicios centralizados, tanto que corren en un único servidor, pero es P2P porque establecen la responsabilidad de los créditos entre dos usuarios «persona a persona»… que son dos clientes es decir, son por definición dependientes del nodo de créditos que los empareja. Pero a que si eres facebook (o airbnb o uber) mola  decir que eres P2P? Justo  porque esconde y confunde la naturaleza centralizada de lo que está pasando.

    Así es cómo la mirada individualista es util a la concentracion de poder.

    ¿Por qué decimos q la estructura distribuida de gnu social cobra sentido cuando los nodos son comunitarios? Porque no creemos que sea el individuo el que pueda evitar la concentración de poder (sea en mediadores o en «mineros») sino redes de comunidades abiertas, consensuales y democráticas. La mirada comunitarista te da simplemente una perspectiva en la que las trolas de los centralizadores no pueden agarrar y en las que el poder se distribuye entre servidores controlados democráticamente (y siempre, si eres un individualista filosófico te  puedes crear tu propia instancia :-D) 

  10. @davidut Es un placer jugar, hackear y aprender con OStatus y GNU social 🙂 Y nos alegra un montón que estos posts vayan ayudando a abrir la puerta a más colaboradores, desarrolladores y usuarios.

    @lasindias

Pingbacks recibidos desde éste y otros blogs

  1. […] la federación? Desde luego no renunciamos a la magia de OStatus. Empezamos a trabajar desde ya en desarrollar un plugin de BuddyPress para OStatus. Aunque también […]

Deja un comentario

Si no tienes todavía usuario puedes crear uno, que te servirá para comentar en todos nuestros blogs en la
página de registro de Matríz.

El Correo de las Indias es el agregador de blogs de los
socios del Grupo de Cooperativas de las Indias:
F-83409656 (Sociedad de las Indias Electrónicas S. Coop.)
F-85220861 (El Arte de las Cosas S.Coop.)
G-84082569 (Las Indias Club)