Hoja de ruta para danirod.es en 2018: abrazar la web abierta

Este año, quiero convertir danirod.es en mi principal identidad online y dejar de depender tanto de las redes sociales para alojar mi contenido, como fotos o actualizaciones de estado. Esto no cambiará el uso que hago de las redes sociales, así que si me sigues en una red social, no vas a notar demasiados cambios. Esta entrada de blog me ayudará a documentar la lista de cambios y características que voy a implementar en mi página web a lo largo de este año para volverla abierta, federada e independiente.

Contexto: redes sociales y la web cerrada

Las redes sociales mainstream son utilizadas porque son convenientes y fáciles de configurar. El jaleo requerido para instalar un software, parchear servidores y hacer copias de seguridad de bases de datos, es reemplazado con una interfaz simple en la que sólo debes escribir una actualización de estado o seleccionar una imagen para cargar y pulsar un botón para compartirla con el mundo. Los usuarios sin conocimiento técnico probablemente no se vean capaces de instalar un nodo de GNU Social en un servidor, y luego configurar un registro DNS que permita que un nombre de dominio apunte al servidor. Sin embargo, rellenar un formulario en un dispositivo móvil o en un navegador web es una tarea más sencilla con la que muchos sí se pueden ver capaces.

Sin embargo, pese a lo que parece, las plataformas y servicios proporcionados por terceros no hacen más que almacenar datos en un ordenador que no podemos poseer. Cargamos datos en esos servicios y usamos esos programas en red porque nos prometen que harán lo mejor para poner nuestras imágenes y pensamientos al alcance de las personas con las que estamos conectados. La gente que se suscriba a nuestro canal de YouTube, será capaz de ver nuestro contenido en su lista de suscripciones. Sin embargo, como usuarios externos al sistema, realmente no controlamos la manera en la que estas plataformas almacenan, presentan o distribuyen nuestro contenido. Solamente les alimentamos con nuevos datos para mantener la rueda girando. De modo que se comportan como silos de datos.

Algunos ejemplos de como esto puede tener consecuencias negativas:

  • Almacenamiento: ¿Recuerdan Vine? Años después de ser comprado por Twitter, la “tecnología” (el concepto de repetir un vídeo en bucle si es corto, más bien) fue incorporada en la plataforma de Twitter, para después cerrar el sitio. No se puede cargar contenido nuevo, pero sí es posible visualizar vídeos cargados, pero nadie sabe por cuánto tiempo. ¿Qué ocurre cuando un servicio muere? Afortunadamente, la mayoría de sitios hoy en día tienen un sistema de copias de seguridad que permite exportar datos de un sitio cuando se anuncia la fecha de cierre. Sin embargo, hay cosas, como las URLs, que no pueden ser exportadas, de modo que mueren con el resto del dominio web, provocando que los links se pudran.
  • Distribución: en los últimos años, varias redes sociales han hecho mejoras a la forma en la que presentan los feeds con contenido nuevo a los que un usuario de una red social está suscrito. Ya no es suficiente con suscribirse a temas, personas y marcas que importan, porque ahora hay algoritmos que determinan cuando una actualización de estado o un contenido es lo suficientemente relevante como para enseñarlo en un feed o no. Algunas redes sociales han incorporado características como campanitas, estrellas o favoritos para señalizar a los algoritmos que realmente queremos recibir actualizaciones de estado de esas personas. De modo que te ves forzado a suscribirte dos veces a una persona para recibir su contenido.
  • Presentación: ¿por qué todos los blogs de Medium se ven iguales? No tengo nada más que decir.

Un montón de estos problemas no existirían si pudiésemos controlar el software que opera esas plataformas. Operando una web completa, como en los viejos tiempos, el almacenamiento, la distribución y la presentación de esos contenidos estaría de nuevo bajo nuestro control. No intento romantizar con cómo era la web antes de las redes sociales o con la Web 2.0, pero es imposible negar que, pese a que las redes sociales han permitido a más personas poder tener una identidad online para compartir información y pensamientos con otras personas, también se han llevado parte de la magia que teníamos anteriormente.

IndieWeb: hagamos la web abierta y divertida otra vez

Descubrí a IndieWeb el año pasado y me interesaron bastante las ideas que proponen. IndieWeb es un movimiento alternativo a la web cerrada y corporativa, basada en unas pocas ideas. Deberías poseer tu contenido, y publicarlo en un sitio que sea tuyo, porque no puede estar infinitamente a salvo cuando es administrado por una organización o un servicio de terceros fuera de tu control. La plataforma podría desaparecer, o tu cuenta podría quedar bloqueada o baneada por alguna razón arbitraria.

Además, tener un sitio web implica tener más libertad sobre la forma en la que se puede agregar y presentar contenido. No necesitas crear hilos en tu página web (como pasa en Twitter), porque no hay un límite arbitrario sobre el número de caracteres que puede tener una publicación. Puedes controlar cómo se ve el sitio. Puedes controlar la distribución de tu contenido usando links permanentes que durarán tanto como quieras; idealmente, infinitamente, dado que el alojamiento web y poseer un dominio es barato.

Sin embargo, no tienes por qué quedarte fuera de las redes sociales (salvo que así lo quieras). Hay modelos que te permiten publicar a la vez en tu propia web y en las redes sociales, con el objetivo de hacerlo accesible a amigos que todavía quieran usar esos sitios1. Puedes publicar una foto o una actualización de estado en tu página web, y luego hacer publicación cruzada con servicios de terceros como Twitter o Instagram. Simplemente agrega links a los tweets o a las fotos que apunten de vuelta a la URL de tu página web donde está la misma copia del contenido, y ya habrás establecido esa conexión entre ambas copias del mismo contenido.

Esto se conoce como POSSE: Post on your Own Site, Syndicate Elsewhere (que podríamos traducir como Publica en tu Sitio, Sindica en Otras Redes). Hay herramientas que te permiten hacer esto automáticamente, por ejemplo enviando una actualización de estado a Twitter cuando la publicas en tu propia página web. Sitios que tienen una API pública para desarrolladores hacen más fácil este proceso. De hecho, probablemente ya conozcas algunos servicios que hacen esto automáticamente, como YouTube publicando un tweet cada vez que cargas un nuevo vídeo, o Twitter enviando actualizaciones de estado a tu perfil de Facebook.

Sin embargo, para no depender infinitamente en el modelo POSSE, el grupo de trabajo SocialWG de la W3C ha trabajado en los últimos años en recomendaciones para protocolos que permiten agregar una capa social a páginas web. Esta capa es neutral, no pertenece a ninguna corporación, y no está asociada a ninguna red social en concreto. En su lugar, son protocolos abiertos y federados que una vez se agregan a una página web, permiten que esta se comunique con otras páginas web para disponer de ciertas funciones sociales típicamente presentes en redes mainstream2. Por ejemplo:

  • Webmentions: es la evolución de los pingbacks. Puedes usarlas para informar a otros sitios web que has enlazado a sus posts en los tuyos, tal vez como una cita, como una respuesta, como un like o como un repost. El operador del servidor tiene una ruta HTTP que recibe menciones web de otras webs, de modo que las pueda registrar para presentarlas, por ejemplo, debajo de la entrada original, como si fuesen comentarios en otras plataformas de blog.
  • WebSub: puede que conozcas Atom y RSS. Un cliente consulta un documento alojado en una web para comprobar si esa web tiene nuevo contenido. WebSub funciona igual pero en la dirección opuesta. Es el propietario de un feed el que se ocupa de notificar a los suscriptores cada vez que tiene algo nuevo que ofrecer. Los clientes se suscriben y se desuscriben a este feed informándole al servidor que quieren recibir actualizaciones o no del nuevo contenido. Esto es más eficiente porque evita la necesidad de que un agente de usuario esté comprobando continuamente si hay algo nuevo, cuando lo más probable es que si el volumen de actualizaciones no es elevado no haya nada, siendo el servidor el que se ocupa de comunicarle al mundo lo nuevo que tiene.
  • Micropub: define un protocolo abierto para crear, actualizar y borrar posts usando un cliente. ¿Tienes una forma de agregar contenido a tu página web? Puede que tengas un escritorio de WordPress. O que hayas fabricado tu propio panel de control. O que publiques contenido escribiendo un archivo en una línea de comandos, o enviando un e-mail a una dirección automatizada. Da igual. Mientras tu web hable Micropub, cualquier cliente autorizado podrá crear publicaciones.
  • IndieAuth: es un protocolo de identificación construido sobre OAuth 2.0 que permite a los usuarios identificarse usando su sitio web, de manera similar a como otros servicios permiten a usuarios iniciar sesión con Facebook o Twitter. Es como OpenID, pero bien hecho.

Hay servicios, como webmention.io, que hacen facilísimo integrar estas tecnologías en tu web porque ya están hechas. También, si estás fabricando tu página web desde cero en un lenguaje de programación, puedes usar alguna librería que implemente estos protocolos para agregar el soporte a tu web en poco tiempo. Sin embargo, también puede ser divertido como un reto de programación escribir tu propia implementación. Algunos protocolos tienen suites de pruebas para verificar que se ha implementado correctamente el protocolo. Comencé a trabajar en un Plug para Elixir que agrega soporte para menciones web, pero no lo he terminado y no he podido trabajar mucho en él últimamente. Pero está siendo un buen proyecto para practicar lo que estoy aprendiendo sobre el lenguaje de programación Elixir y para saber más sobre los Plugs de Elixir.

Vale, pero ¿cuál es el plan para este año?

Este año quiero reunir todo el contenido creado por mí que hay esparcido en distintos lugares de internet, siendo YouTube la única excepción por cuestiones de ancho de banda y de espacio en disco. Eso significa que quiero hacer mi contenido de Twitter, Instagram, Flickr y Google+ disponible a través de mi página web.

Luego, me aseguraré de que el nuevo contenido que publique en redes sociales sea publicado en su lugar en mi sitio web. No te darás cuenta de nada si me sigues en Twitter o Instagram, porque el contenido será simultáneamente sindicado mediante POSSE. Además, voy a seguir usando esas redes sociales y repartiendo likes y retweets a memes. Aunque la URL canónica para representar ese contenido compartido seguirá estando en mi propia página web.

Como reto de programación, quiero implementar algunas de las recomendaciones del grupo de trabajo SocialWG y luego agregarlas a mi página web.

Tipos de publicación: notas, fotos y entrenamientos

Quiero cerrar el agujero entre las redes sociales que uso y mi página web descentralizada este año. Igual que sitios como Facebook permiten tener múltiples tipos de publicación (actualizaciones de estado, fotos, vídeos, enlaces…), puedes hacer lo mismo con páginas web. De hecho, ya lo estoy haciendo. Algunas de mis publicaciones en esta web son artículos de blog y otras son marcadores en el linklog.

Este año quiero hacer cambios en el código fuente que hace funcionar mi página web para agregar los siguientes tipos de publicación:

  • Notas: similares a los tweets. Pequeñas actualizaciones de estado de no más de un par de frases que se pueden implementar como entradas de blog cortas sin título. A diferencia de Twitter y Mastodon, no hay límite de caracteres, pero hacerlas largas va en contra de su propósito.
  • Fotos: no me gusta nada cómo la mayor parte de redes sociales de fotografía tratan las imágenes, porque sólo te dejan agregar una descripción a las fotos. Flickr es la excepción que parece permitir agregar título y descripción a las fotos. Dado que el propósito de la web abierta también es tener libertad para establecer mis propias normas, me gustaría tener todo y estar feliz. Quiero títulos de foto, quiero descripciones de foto, y si es posible, quiero texto alternativo en mis fotos.
  • Entrenamientos: capturo un montón de información sobre mis entrenamientos con Runtastic. No voy a compartir datos de mapas en línea por las implicaciones para la privacidad que puede conllevar, pero sí considero que puede ser interesante tener publicaciones con los números, y conservar los mapas en privado, por si Runtastic desapareciese algún día.

También estoy interesado en tipos de publicación adicionales. Igual que puedes informar a tus amigos en Facebook de programas de TV y películas que has visto o de álbumes que has escuchado, podría agregar soporte para los scrobbles (similares al sistema de scrobbling usado en Last.fm) para mantener un registro de los podcasts, álbumes de música u otro contenido audiovisual que haya visto, pero no es una prioridad en este momento, porque eso sería un montón de contenido que administrar.

Importar más archivos

En 2016 importé una buena cantidad de entradas de blog procedentes de viejas web en danirod.es. Una vez tenga soporte para nuevos tipos de publicación, me gustaría importar archivos de contenido procedente de otras redes sociales, con fines de copia de seguridad.

  • Agregar fotos de mi feed de Instagram y Flickr a la sección Fotos. Algunas fotos compartidas en otras redes sociales, como Twitter o Google+, pueden entrar también.
  • Agregar datos de antiguos entrenamientos hechos con otras aplicaciones de fitness que he usado en el pasado. Usaba CardioTrainer hasta que se convirtió en Noom y cambió de modelo de negocio. De hecho, lo cambié por Endomondo hace tantos años que a estas alturas no sé si sigue funcionando o si el sitio ha muerto. Sin embargo, antes de irme descargué un montón de registros de entrenamientos corriendo y en bici mediante su sistema de exportado de datos, así que tengo eso. Esos archivos están en alguna parte de mi disco duro. Si los encontrase, los podría archivar aquí también.
  • Descargar la mayoría de mi historial de tweets y cargarlo en este sitio. Los tweets con foto pueden ser Fotos. Los tweets con enlaces pueden ser considerados Marcadores. Otros tweets serían notas regulares. Por ahora me parece oportuno dejar fuera de esta copia de seguridad las respuestas, retweets y tal vez citas, ya que causarían mucho ruido y tal vez haya problemas de copyright de por medio.

Agregar microformatos y enlaces rel=me

Esto ya está hecho, por cierto. Puedes probarlo viendo el código fuente de esta página.

Los microformatos son un sistema para la web semántica basado en agregar metadatos a páginas web diseñadas para humanos. Con diseñadas para humanos me refiero a que son documentos HTML con contenido valioso para personas, como entradas de blog, noticias, una web personal, o datos sobre un evento. Un documento RDF o un documento JSON no está pensado para ser consumido primero por humanos.

Los microformatos son similares a otros formatos como RDFa, OpenGraph, JSON+LD o Schema.org, y funcionan agregando marcas HTML invisibles y simples a documentos para anotar información sobre ellos. SIn embargo, Microformatos está pensado como una tecnología que permite generar, ya no sólo documentos válidos en HTML5, sino documentos válidos en HTML4 y XHTML 1.0, para sitios web un poco más antiguos o con requisitos particulares.

Tomemos el siguiente código HTML:

<p>Mi nombre es Ana Pérez.</p>

Con un poco de marcado invisible, podemos facilitar a software no humano reconocer que me llamo Ana Pérez.

<p class="h-card">Mi nombre es <span class="p-name">Ana Pérez</span>.</p>

h-card es un microformato que representa una tarjeta de contacto. Permite describir información sobre una persona o sobre una organización. Cada microformato tiene propiedades. Una de ellas es p-name, que se usa para describir el nombre de una persona. Este documento sigue siendo legible por humanos, pero ahora los robots pueden extraer información sin necesidad de usar heurísticas o de deducir la información de otro modo.

Si estás leyendo este post dentro de danirod.es, podrás comprobar que esta entrada de blog está embutida dentro de una etiqueta con la clase h-entry, que es la que se usa para las entradas (como las entradas de blog). Este texto está metido dentro de una etiqueta e-content (el contenido de la entrada de blog). Además, la cabecera y el pie de página de la entrada tiene más clases agregadas al título, la fecha de publicación, la URL y las etiquetas. Todas estas clases ayudan a un ordenador a detectar correctamente todos los metadatos sobre una entrada de blog.

h-entry es usado, por ejemplo, en servidores de webmentions, de tal modo que cuando son informados de que cierta URL les ha mencionado, la visitan para extraer los datos del post y mostrar el título y el autor, como si fuese un comentario en una entrada de blog.

Además, también he agregado enlaces de tipo rel=me a la etiqueta <head> de mi plantilla. rel=me es un tipo de relación XFN usada en enlaces (<a>, <link> y <area>) para indicar que la dirección a la que apunta ese enlace se corresponde con otra dirección mía. Por ejemplo, uso rel=me para marcar mis otros perfiles en redes sociales, dado que esas URLs también son mis perfiles:

<link rel="me" title="Twitter" href="https://twitter.com/danirod93">
<link rel="me" title="LinkedIn" href="https://linkedin.com/in/danirod">
<link rel="me" title="GitHub" href="https://github.com/danirod">

Implementar algunas recomendaciones del SocialWG

Por programar cosas, querría implementar algunos endpoints o microservicios e implementar algunas recomendaciones del SocialWG. Podría usar un servicio ya existente para esto, o una librería, pero me parece más divertido hacerlo todo por mi cuenta para programar más.

Quiero implementar lo siguiente:

  • Webmentions: es fácil si continúo trabajando en Menta. Tal vez no me lleve demasiado.
  • Micropub: no quiero escribir un panel de control o un dashboard si voy a ser el único usuario del sistema. En su lugar, prefiero desacoplar la escritura de la web y tener un endpoint micropub y un cliente micropub para escribir nuevas actualizaciones de estado.
  • WebSub: parece muy útil, incluso lo podría reusar en otros proyectos.
  • IndieAuth: lo requeriré para agregar Micropub.

Conclusiones

Sé que ha sido una entrada de blog un poco larga (heh, por eso no es una nota), pero quería proporcionar un poco más de contexto en mi hoja de ruta para ayudar a lectores a entender de qué estoy hablando. Además, si consigo inspirar a otras personas para que hagan esfuerzos similares con sus identidades en línea, sería mejor.

Hemos oído de Tim Berners-Lee, creador de la World Wide Web, en artículos publicados en los últimos años ligeramente incómodo con la dirección que la web está tomando. La web hoy en día es cerrada, controlada por unas cuantas corporaciones. Cosas como la neutralidad de la red o el geobloqueo tampoco es que hagan mucho por facilitar las cosas.

Aquellos que tengan el conocimiento y las herramientas para hacer su pequeña contribución a arreglar una internet rota, deberían trabajar en arreglarlo. Esta es mi pequeña contribución.

  1. Incluso si a largo plazo es malo para ellos, no serás capaz de convencer a todas las personas que conoces de lo malas que son las redes sociales de terceros. Es más fácil (y también más práctico y más útil para el propio ecosistema) dar ejemplo por tu cuenta y centrarte en fabricar herramientas para ser usadas por ti en vez de centrar tus esfuerzos en otra cosa. 

  2. Si eres un usuario de GNU Social o de Mastodon, seguramente habrás podido experimentar esto por tu cuenta, ya que los usuarios de un nodo de GNU Social o Mastodon pueden seguir usuarios que tengan su cuenta en un nodo diferente. Los servidores intercambiarán datos para asegurarse que recibas actualizaciones de estado de esos usuarios, y las menciones o interacciones que tengan con ellos también les serán enviadas.