VerRevisiones

Red social distribuida

Este artículo está motivado por el apunte de Manuel sobre una red social distribuida, a raíz de la reciente definición del concepto de pirámide de compromiso en la Indianopedia. Como la discusión allí parece bastante coherente y esto podría acabar siendo un batiburrillo sin demasiado sentido, me limitaré a exponer aquí algunas ideas sobre lo que podría ser una red social distribuida sencilla basada en herramientas existentes. ¡Atención, este artículo contiene bastante carga técnica!

Hace poco me quedé sin poder ver unas fotos de la Semana Santa Saguntina donde salía yo actuando en la Passió en viu, y que alguien había colgado en Facebook, ya que no tengo cuenta en él (tuve una durante unas semanas y espero no haber de revivirla). Tomando por una parte la reflexión del momento sobre qué me motivaría a colgar así unas fotos de contenido digamos «público», y por la otra la conversación en el blog de Manuel, llego a las funciones que yo mismo encuentro interesantes en una red social:

  1. Autorizar sólo a mis amigos a ver o comentar lo que publico.
  2. Seguir lo que publican mis amigos.
  3. Encontrar nuevos amigos partiendo de los existentes.

Situación actual

Para comenzar, el concepto de amigo en la mayoría de redes sociales es realmente pobre y poco matizado, reduciéndose a una simple colección de contactos. En cambio, yo otorgo diferentes grados de confianza a diferentes personas. Es más, esta confianza no sólo depende de la persona, sino del asunto concreto de la información que esté publicando. Por ejemplo, puedo discutir la última clase de teatro con algún compañero, pero éste no tiene por qué saber nada de los problemas personales de mis amigos, y viceversa. En cambio, cualquiera puede conocer mis inquietudes sobre la propiedad intelectual.

Las redes sociales al uso fallan estrepitosamente en este aspecto porque, pese a permitir la autorización, esta es tan básica (i.e. los contactos ven, el resto no) que la sensibilidad de la información que pueda publicar en ella estará limitada por la confianza que tenga con el menos conocido de mis contactos. En los blogs no suele haber ningún control en este sentido, así que al final uno ha de recurrir a una multitud de foros, grupos y listas de correo temáticos cerrados para conseguir una cierta flexibilidad en la autorización.

El seguimiento de lo que publican los contactos queda más o menos resuelto con la redifusión vía RSS: cada contacto emite un canal RSS principal para sus envíos, y cada envío dispone de otro canal para sus comentarios —pero no obviemos que RSS tiene serias limitaciones para ligar comentarios y para recuperar entradas antiguas. Coincidiendo con Manuel y David, podemos ver el seguimiento del canal RSS como el vínculo básico entre contactos, y la publicidad de estos vínculos como una forma de mostrar adhesión (aunque la relación real pueda ser más profunda).

La búsqueda de nuevos contactos en una red social es tan pobre como su concepto de amigo, así que no hay nada que pueda garantizar cierta afinidad entre mí y el amigo de un amigo. En cambio, en un blog puedo, mediante comentarios y pingback, encontrar a gente que al menos muestra cierto interés por los mismos temas que yo. En un grupo o foro cerrado ya suelo conocer al resto de los participantes.

Una propuesta de mejora

Vamos a ver cómo podríamos aumentar la funcionalidad de un blog o un sistema de gestión de contenido existente (manteniendo así las islas digitales propuestas por Manuel) para dotarlo de las funciones básicas de una red social distribuida (y que nos evite de paso haber de echar mano de foros, grupos, listas y similares).

Respecto al significado de «amigo» o «contacto», podríamos intentar modelar los diferentes niveles de confianza en nuestro diseño, pero estaríamos forzando sobre el usuario un modelo concreto que éste no tendría por qué compartir. Sería más flexible, como comentaba el polémico Tuomo Valkonen en Wailing on mailing, dar más relevancia al propio hilo de discusiónthread»): el autor definiría el público de cada hilo (envío) individual, contacto por contacto o ayudándose por grupos de contactos que él mismo definiría y que en principio sólo tendrían sentido para él.

Lo anterior es muy similar a definir los destinatarios de un correo, pero hay dos diferencias fundamentales heredadas del sistema base. Por un lado, la posibilidad de que un envío sea abierto a todo el mundo. Por otro, el uso de canales RSS establece un modelo de publicación pull y no push: el destinatario tira del canal cuando quiere recibir nuevos envíos.

¿Cómo definir pues el público de un envío? Su autor asignaría a cada envío una lista de contactos que tendrían acceso a él, como usuarios locales de su sitio o como identidades OpenID (identidades asociadas a direcciones web y proporcionadas por multitud de proveedores o por el propio usuario). OpenID permitiría al autor listar lectores que aún no tienen cuenta de usuario en el sitio, y al lector usar una única identidad gestionada por él mismo y común a todos los sitios (sin necesidad de crear una cuenta en cada uno).

Dado un lector identificado (autenticado) en el sitio del emisor, el control de acceso (autorización) funcionaría así: en canal RSS principal sólo aparecen las entradas que tienen al lector como público, y el lector sólo tiene acceso a las páginas y canales de comentarios correspondientes a estos envíos (los envíos abiertos serían por supuesto accesibles a todo el mundo sin autenticación).

Por desgracia, ahora mismo HTTP no admite OpenID como método nativo de autenticación y es necesario parar por la página de identificación del sitio donde se encuentra el canal RSS —no conozco ningún programa lector de noticias que permita este tipo de autenticación. En cambio, los lectores RSS web podrían usar OAuth para acceder a los canales con las credenciales del usuario ya identificado con OpenID, pero éste debería habilitar a cada sitio el acceso desde su sitio lector vía OAuth. Una solución temporal pasa desgraciadamente por el uso tradicional de usuario y contraseña.

Finalmente, no tiene sentido mantener una conversación privada cuando no sabes quién más puede estar siguiéndola. Por lo tanto, un lector autenticado como parte del público de un envío privado debería ser capaz de ver la lista de contactos del mismo (de forma similar al Wave de Google). Justamente esto permite a los lectores descubrir nuevos contactos potencialmente interesados (según el autor) en los mismos temas (cada contacto de la lista suele ir acompañado de un enlace a su web o blog, que puede coincidir con su OpenID), incluso cuando no lleguen a comentar el envío. Por supuesto, se continúa disponiendo de comentarios y pingback.

Ejemplo

Alberto tiene un blog en http://www.albero.mec/. Crea un nuevo envío privado donde resume la última reunión de padres de niños con necesidades especiales de aprendizaje. Antes de enviarlo, incluye las identidades OpenID de Boris (http://boris.openid4u.mec/) y Carla (http://carla.blogs.mec/), que podrían estar interesados, entre el público del envío.

Boris sigue el canal RSS de Alberto, http://www.alberto.mec/feed. Abre su lector de noticias, activa en él su identidad OpenID y actualiza los canales RSS. Ve la noticia de Albero sobre la reunión, apunta su canal RSS de comentarios (http://www.albert.mec/reunion-del-miercoles/feed) y abre la página de la noticia en el navegador para preguntar en un comentario cuándo será la siguiente (Boris tiene un hijo autista). El sitio de Alberto le pide identificarse, así que introduce su OpenID y accede a la página del envío.

En la página aparece la lista de lectores designados por Alberto. Entre ellos aparece Carla, de quien no sabe nada hace tiempo. Boris ve que Carla (que es maestra) tiene un blog donde describe sus experiencias intentando aplicar nuevas técnicas de enseñanza para niños con dificultades. Boris incluye en su lector de noticias el canal RSS del blog de Carla, http://carla.blogs.mec/feed.xml, y también le envía un mensaje privado mediante el formulario de contacto de su blog para indicarle su identificador OpenID. Carla lo apunta en su grupo de contactos interesados en la educación de niños con necesidades especiales de aprendizaje.

Animado por Boris, Alberto incluye entre los canales RSS que indica seguir en su web el de Carla para dar publicidad a sus proyectos educativos.

Conclusión

De la misma forma que la Red de miniposts distribuida (RMD) usa tecnologías existentes para reemplazar sin complicaciones a propuestas centralizadas como Twitter, se podría conseguir una Red social distribuida (¿RSD?) usando unas pocas tecnologías existentes de formas ligeramente diferentes a como se está haciendo en la actualidad. Bien es cierto que quedan pendientes de resolver algunas cuestiones técnicas (fundamentalmente la autenticación OpenID para el acceso a los canales RSS), pero queda bastante claro que sería relativamente fácil aumentar redes distribuidas como la blogosfera con las funcionalidades mínimas de las actuales redes sociales centralizadas.

Creo que este sistema deja menor lugar a ciertos delirios de representatividad, ya que, siendo el autor quien elabora las listad de público para cada envío, hincharlas artificialmente sería indicativo de spam (y tampoco olvidemos que sólo son visibles para quien ya forma parte de ellas). Asimismo, mostrar públicamente qué canales seguimos podría indicar simple adhesión y dar publicidad a un recuento de gente que sigue nuestro canal tendría un cierto regusto rankista.

¿Cómo veis este sistema? ¿Creéis que es técnicamente posible? ¿Le veis algún sentido, o más bien está completamente fuera de lugar? Espero vuestras opiniones y críticas.

RSD

Sinceramente no sé si merece la pena el esfuerzo. Quiero decir, en la comunicación entre nosotros, teniendo grupos de news, correo, salas de chat, blogs de wp, etc. ¿echamos en falta una herramienta así?

Yo personalmente no. Si quiero postear fotos y que sólo las veáis cuatro amigos, o las subiré al grupo de news u os invitaré a una sala de chat o simplemente las postearé en mi blog protegiendo el post con una contraseña que os pasaré luego por email...

A la RMD le veo sentido porque usando el blog permite tener canales compartidos, distribuidos y a la carta para compartir enlacitos y temas que abran debate sin más preocupación que abrir una categoría propia. RMD no nace de twitter sino de la experimentación previa del minipost y el descubrimiento de lo útil que nos era.

A la RSD sólo le vería sentido como "agenda distribuida", puro FOAF que me mantiende al día de los cambios de mail, teléfono y empresa de la gente que conozco. En esa utilidad facebook y sus "utilidades" no aportan referencia alguna. Más bien la cosa sería una red distribuida de vcards con las que podría sincronizar la agenda de mi Thunderbird... y aún así ¿merecería la pena? Creo que no, el tiempo de gestión de a quién abro mi vcard, si la dejo pública o no, etc. haría demasiado trabajoso mantener la red viva (como nos pasó con FOAF en 2005)

Opción para profanos

El asunto es que para alguien con conocimientos técnicos y un servidor a mano no es problema montar o usar las múltiples soluciones que comentas, pero para alguien lego en la materia sí lo es, y eso hace tentadoras las redes sociales cerradas donde con una simple cuenta de usuario lo tienes todo hecho.

Aunque reconozco que mi propuesta no es factible actualmente (básicamente por la autenticación OpenID), su gracia es que tan solo exige al usuario que su blog admita control de acceso basado en OpenID para conseguir algo aproximado a las actuales redes sociales, listas, foros y grupos cerrados, con la diferencia fundamental de ser distribuída y de que cada emisor controla su propio canal tanto para intercambios públicos como privados.

Por ejemplo, habiendo compartido entre un grupo de amigos una lista de OpenID común, cuando postearan en sus blogs con esa lista como público, obtendríamos algo parecido a un grupo de news o lista de correo cerrada, pero organizada de forma distribuida. Para alguien con la capacidad justa para crearse un blog o un OpenID, yo lo veo bastante fácil. Aunque tal vez esté aún anclado pensando en un mundo de mumis en lugar de uno de bricoleurs. ;)

RSD

Quizá estos dos enlaces aporten algo a esta conversación:

http://dig.csail.mit.edu/2008/Papers/MSNWS/

http://dig.csail.mit.edu/2007/tab/foaf.html

Todo esto me lo encotré tirando del hilo que empezó con este video:

http://www.ted.com/talks/tim_berners_lee_on_the_next_web.html

De momento siento que todo esto me supera, pero me acordé de tu post y creo que igual te puede interesar.

¡Interesantes!

Gracias Fer, los enlaces me parecen muy interesantes. Respecto al artículo primero, me gusta la idea de que cada recurso tenga su propia URL, de forma que no tenga por qué estar todo en el servidor, y que las descripciones RDF sean editables vía estándares web. La verdad es que se nota mucho la mano de Tim Berners-Lee en el proyecto. ;)

Respecto al uso de Tabulator para navegar las listas FOAF y trabajar con ellas, sería interesante saber si algún usuario del FOAF «pelado» como David encontraría más atractiva esta forma de trabajo.

Mi intención con este artículo solo era insinuar cómo crear una «red social del hombre pobre» sobre una infraestructura de blogs, no llegar a tan bajo nivel como proponen tus enlaces. :) Precisamente tengo esbozado un pequeñito post sobre algunas soluciones completas para crear redes sociales distribuidas que he encontrado. A ver si lo acabo de escribir y cuelgo pronto.

seguimiento de comentarios

Hola Ivan,
me he planteado unas cosillas respecto a esto que escribiste...

Dices que en una red social hay 3 cosas importantes:
1. Autorizar sólo a mis amigos a ver o comentar lo que publico.
2. Seguir lo que publican mis amigos.
3. Encontrar nuevos amigos partiendo de los existentes.

Pero te falta algo que hace facebook de forma muy sutil y que es lo que creo yo que le da una gran ventaja:

4. Seguir los comentarios de tus amigos en cualquier otra publicación.

Fíjate que eso lo soluciona Facebook mostrando posts de gente que aunque no la tengas agregada si que un amigo tuyo la ha comentado. Y esta es una buena manera de mejorar el punto 3 anterior.

De momento con blogs esto es imposible. Los rss solo pueden controlar los posts o comentarios de 1 solo blog. Lo que se necesitaría es una especie de rss de los comentarios de un amigo en cualquier blog.

Como se podría solucionar esto de forma distribuida? Se te ocurre algo?

¿RSS/pingback de comentarios ajenos?

Umm, buena observación. Ciertamente, desconozco si hay algo así en el mundo de los blogs, pero se me ocurre que se podría implementar de forma distribuida mediante una especie de pingback del blog donde se ha dejado el comentario al del que lo dejó.

Me explico: Alberto deja un comentario en un post del blog de Bea, indicando su nombre, dirección de correo y URL de su blog. El software de blog de Bea, al aprobar el comentario de Alberto, se conectaría al blog de éste y obtendría una URL donde indicar que el comentario ha sido publicado. La indicación incluiría la URL del comentario y tal vez otra info como el título del post o el propio texto del comentario. El soft de blog de Alberto (tras hacer las comprobaciones pertinentes) podría añadir esta entrada a un canal RSS de comentarios realizados en otros blogs.

¿Cómo lo ves?

Delegar la responsabilidad de

Delegar la responsabilidad de actualizar correctamente la información a cada blog puede ser un problema. Algunos blogs podrían tener la funcionalidad, otros no... Quizás sería más cómodo con un plugin en el navegador, que se encargara de actualizar el rss de comentarios externos en el blog.

He intentado buscar algún software que hiciera esto pero lo más parecido que he encontrado ha sido cocoment.

Eso sí, si se quisiera granularizar más los comentarios externos según quien sea el lector la cosa se complica... Lo bonito de facebook es que lo hace y no tienes que preocuparte de nada!

Como los pingback

Efectivamente, mi propuesta tiene el problema que comentas, que es exactamente el mismo que tienen los pingback, pero también tiene su misma ventaja de ser distribuida (coComment parece otro servicio centralizado). Lo del plugin da también juego, aunque necesitarías añadir soporte para unos cuantos sistemas de blog.

Me parece que hara falta algo

Me parece que hara falta algo más que un plugin o un módulo de wordpress/drupal/loquesea para que esto funcione. Hacen falta nuevos protocolos para compartir la información entre blogs o redes sociales. Por ejemplo, he encontrado salmon

Interesante

Sí, conocía Salmon pero yo estaba pensando en algo mucho más simple y similar a los pingback: el autor del blog A cuelga un comentario en el blog B y al publicarlo éste se conecta a la URL que ha dejado A, de donde obtiene una URL donde comunicar vía XML-RPC que se ha publicado el comentario de A junto con su URL. El soft del blog A puede bajarse la página de la URL para hacer sus comprobaciones antes de publicar la entrada en su canal de comentarios externos.

Muy simple pero me temo que muy vulnerable a spam también :( .