entramado.net

Borrador de Open Badges para GNU social

Las medallas están de moda, claro, los Juegos Olímpicos, todas las naciones quieren unos bonitos medalleros para lucir en sus televisores, pero… ¿Y nosotros? Los que nos da un poco igual que un tío que ha nacido en algún lugar supuestamente cercano, gane sobre otro que ha nacido más lejos, a veces ni eso. ¿Podemos tener nuestras propias medallas? ¿Premiar lo que nosotros queramos? ¿Lo que nuestra comunidad considere de valor?

6982158585_b42672ba32_h

Añadir una imagen de una medalla olímpica era demasiado fácil, no se que os parecerán éstas, pero la foto es bonita.

Claro que sí, Open Badges es un experimento de Mozilla, una idea simple y potente, una imagen con metadatos que la hacen verificable ante cualquier otro, desgraciadamente la idea no tuvo demasiado éxito, como tantos otros experimentos de Mozilla, lanzan la piedra y esconden la mano, pero lo cierto es que no es culpa de esta organización, lo cierto es que no tiene una comunidad detrás lo bastante grande para poner en marcha este tipo de iniciativas, no está lo suficientemente diversificada. ¿Quién creo que tiene una comunidad lo suficientemente diversificada o podría tenerla? La esfera GNU social.

No solo es que GNU social sea mucho más diversa, es que sociabiliza mucho más que cualquier organización, claro, es una plataforma dedicada a ello, que además es libre y distribuida, creo que es el sitio donde un sistema de medallas puede funcionar bien.

gnusocial500

¿Qué pretendo, entonces?

Hacer un plugin de GNU social que implemente Open Badges intentando seguir el estándar de Mozilla lo mejor posible.

¿Como funcionará?

Siguiendo el estándar Open Badges, tenemos 3 actores en juego: Issuer, Earner y Displayer.

Que en GNU social cuadraría de esta forma:

  • Issuer: Usuario que puede enviar medallas a otros, debe permitir que la medalla se valide con su usuario. Gracias a GNU social este envío puede federarse entre distintos nodos.
  • Earner: Usuario que recibe la medalla.
  • Displayer: El nodo en que se encuentra el usuario es el que almacena y muestra sus medallas. Por lo tanto nuestro nodo serviría de medallero virtual y es además nuestra carta de presentación.

El procedimiento de uso será de esta forma, un issuer decide enviar una medalla a un earner dado, para esto se usa un estado de OStatus, el earner contesta este estado aceptando o rechazando la medalla y una vez aceptada se envía al medallero en su nodo. En el caso especial de el issuer sea el administrador del nodo las medallas se aceptarán automáticamente, esta decisión de diseño concuerda con la arquitectura distribuida de GNU social donde tú aceptas las normas de convivencia del nodo en que resides. Además permitirá en el futuro combinarse con el plugin SocialCapital para entregar medallas a los usuarios del nodo.

¿Sugerencias?

Como todo borrador que se precie está sujeto a cambios, se abre por lo tanto el turno de las propuestas y sugerencias. También se agradecerían recomendaciones para la implementación. Los comentarios están abiertos para que hagáis volar vuestra imaginación.
Photo credit: Emilio_13 via Foter.com / CC BY-SA

Honorables y existencialistas objetos

Photo credit: Pratap Sankar via Scandinavian / CC BY

Photo credit: Pratap Sankar via Scandinavian / CC BY

La semana pasada descubrí por casualidad el blog de Yegor Bugayenko, un blog que en tan solo una semana ha cambiado mi forma de programar, me ha hecho tomar consciencia de cómo funciona la programación orientada a objetos y lo que es más importante ha afianzado los cimientos de la moral que vengo cultivando desde hace tiempo.

Uno de sus posts que mejor resume su forma de programar, es decir, la que él considera correcta tiene como título “Seven Virtues of a Good Object“, me llamó la atención concretamente el punto 2, los objectos trabajan por contratos, a estos contratos en programación les llamamos interfaces. Me atrajo sobre todo el momento en el que dice que no debe interesarnos su origen, ni su sexo ni su religión, cosa que enlaza correctamente con otro de sus posts en el que nos invita a no discriminar objetos por su clase. Como una revelación todas las piezas del puzzle empezaron a encajar en mi mente, cuando dejas de valer por lo que eres empiezas a ser considerado por lo que haces, por tu fidelidad a la palabra dada, en una palabra por tu honor, no por aquel honor medieval rancio que no era más que una burla esencialista, si no al honor original ese por el que cumplimos con nuestras promesas.

Nota para programadores: Creo que voy a empezar a valorar mi programación respecto a la honorabilidad de mis objetos. ¿La clase X crea objetos honorables? Cuando creamos un test, lo que estamos haciendo es esto mismo, creamos un objeto y comprobamos si es honorable. El honor empieza a formar parte de mi vocabulario técnico también.

Demonios del sistema y el sexo de los ángeles

Pieter_Bruegel_the_Elder_-_The_Fall_of_the_Rebel_Angels_-_Google_Art_Project

Las filosofía Unix, la que impera en esta familia de sistemas operativos desde que apareció allá en los 70, se puede resumir en estas tres frases:

  1. Los programas deben tener una única función y hacerla bien.
  2. Los programas deben funcionar en conjunción con otros.
  3. La interfaz de comunicación es el texto plano.

Me parecía una buena forma de empezar el escrito, el recordar cual es esta filosofía que tantos esgrimen en contra de systemd, nuestro demonio más polémico. También me parecía correcto recordar el famoso significado de las iniciales GNU, “GNU’s not Unix!”, que en nuestra lengua diríamos algo como:

¡Ñu no es Unix, ostia!
Algún ñusero

Y es que han corrido líneas de código y ríos silicio desde que se fundó la filosofía Unix y el panorama que tenemos ahora es bastante distinto al de los 70, 80 y 90, se me ocurren dos diferencias significativas, primero que casi todos los sistemas son multinúcleo y segundo que hay mucha mayor diversidad de dispositivos, sobretodo por la aparición de los dispositivos empotrados, móviles, tabletas, relojes y todo lo que viene con la Internet de las Cosas.

Esto hace que los programas ya no se conecten unos a otros de forma secuencial mediante fontanería software, si no que pueden correr en paralelo y comunicarse mediante un protocolo de paso de mensajes, para esto se ha estandarizado DBus que ha pasado de ser una utilidad para los escritorios a ser una de las herramientas más útiles que tiene GNU/Linux. Este uso de DBus ha hecho que la premisa 2 de la filosofía Unix, siga siendo válida, pero de una nueva forma. La premisa que invalida por completo es la 3, la comunicación en DBus es de forma binaria, no me voy a meter a discutir sobre que es mejor, si el texto plano o el binario, porque es igual que la bizantina discusión entre XML y JSON, ambos tienen ventajas e inconvenientes, defensores y detractores acérrimos de cada uno y sinceramente creo que va un poco por modas la opinión mayoritaria sobre el tema, en el sistema de tuberías de Unix tenía su lógica usar siempre texto plano, ahora ya no tanto.

Y con esto llegamos a la premisa número 1, la que nadie quiere poner en duda, yo tampoco lo haré. Como desarrollador creo que el desacoplamiento de una pieza de software de otras algo extremadamente necesario en un buen diseño y hay que buscarlo siempre que se pueda. Mi opinión sobre systemd es que se ha malinterpretado cual es su función única en el sistema, sí es posible que en un principio aspirara a sustituir al tradicional Init, pero vamos, pensémoslo bien, desde el principio se llama systemd, demonio del sistema, está claro que era algo más que un simple arrancador. Para mí systemd es un administrador de demonios y como tal se encarga del ciclo de vida de los procesos no atendidos por los usuarios, es decir, los demonios. ¿Y journald, udev, logind, networkd y otros? Son dependencias de systemd, cierto, algunas las necesita para funcionar, si no quieres usarlos eres libre de no usar systemd o de desarrollar una adaptación del susodicho demonio para otros sistemas de este tipo y enviar un pull request al upstream.

No me quiero olvidar de porqué estoy aquí contando esta historia, vino por alusiones de @jordila@lamatriz.org sobre un artículo en etccrond.es, buen blog por cierto, donde se criticaba la última decisión del equipo de desarrollo de systemd, matar los procesos que queden corriendo al cerrar una sesión de usuario. A algunos administradores de sistemas esta decisión no les ha gustado nada, su argumento es que ellos día a día cierran sesiones ssh con procesos corriendo y vuelven para comprobar que el proceso ha terminado correctamente. Esto lo realizan redirigiendo las salidas estándar y de error a un archivo que luego revisan. Siento ser duro en esto, pero las cosas por su nombre, es una chapuza, si has llegado hasta aquí sabrás cual es la diferencia entre un demonio y un proceso de usuario, un proceso de usuario se supone que va a estar monitorizado por el usuario mientras se ejecuta y un demonio está preparado para correr sin la atención de ningún usuario, pero está en comunicación con el sistema de logs para dejar constancia de cuando se producen ciertos eventos deseados o indeseados. Hacer correr procesos de usuario como si fueran demonios y crear logs manualmente no está dentro de ninguna filosofía Unix ni lo estará nunca. Lo que necesitamos realmente es una utilidad que demonice un proceso al vuelo y se integre con el sistema de logs que se esté usando. En el ecosistema systemd esto se llama systemd-run.

Cómo instalar una Raspberry Pi sin conectar una pantalla

El proceso de instalación oficial de Raspberry Pi siempre me ha tirado para atrás por el hecho de necesitar teclado y pantalla, esto es un sistema empotrado… ¡Hagámoslo desde nuestra red!

Primero que nada, vamos a descargar la imagen de Raspbian para instalarla en nuestra tarjeta SD, no vamos a usar entorno gráfico, así que he optado por Rasbian Jessie Lite, que tampoco se puede decir que es tan lite, la imagen pesa 1GB aproximadamente.

Descomprimimos lo que hemos bajado y seguimos el procedimiento para quemar la imagen en la SD. Este procedimiento se reduce a estos dos comandos:
dd bs=4M if=2016-05-27-raspbian-jessie.img of=/dev/mmcblk0
sync

Donde el dispositivo de salida /dev/mmcblk0 corresponde con el dispositivo donde se encuentra la tarjeta SD y 2016-05-27-raspbian-jessie.img es la imagen que hemos descomprimido.

Una vez terminado si queremos conectar la Raspberry a través de WiFi, tenemos que meter el SSID y la clave de nuestra red. He seguido éste tutorial que explica como hacerlo editando el archivo /etc/wpa_supplicant/wpa_supplicant.conf que podemos encontrar en las nuevas particiones de nuestra tarjeta SD. Si queremos conectar a la red nuestro cacharro directamente por Ethernet, no es necesario nada de esto, con un cable Ethernet y listo. Otro truco es conectar directamente al PC con un cable Ethernet, se creará una red local entre el PC y la Raspberry y también nos podremos conectar.

Por último conectamos la tarjeta SD y a la red de alguna de las formas que he comentado anteriormente. Ahora es cuando nos vamos a conectar por SSH, pero ¿Que dirección utilizamos? La magia llega de manos del demonio Avahi, que corre en las distribuciones Debian por defecto, esto hace una autoconfiguración de la red y nos da un punto de acceso dentro de nuestra red interna, esto es gracias a mDNS, un sistema DNS distribuido que permite que en una red local todos sepan los nombres de dominio del resto, así que simplemente nos conectaremos de esta forma:

ssh pi@raspberrypi.local

Como sabéis os pedirá el password, que por ahora estará por defecto a raspberry y podéis empezar con vuestra Raspberry Pi a configurarlo todo a vuestro gusto, empezando por cambiar esta contraseña.

Mensajes privados en GNU social y su federación

Los mensajes privados en GNU social son una de las cosas más olvidadas de la plataforma y este olvido viene dado por varios motivos; el primero que los mensajes privados o directos están implementados en un plugin que hay que añadir a posta en el config.php de la siguiente forma:

addPlugin('DirectMessage');

Después que la interfaz de los mensajes es bastante espartana y anticuada, usa esa separación entre la bandeja de entrada y de salida tan anticuada en lugar de la ventana normal de chat.

El tercer motivo y uno de los más importantes es que los mensajes no federan, OStatus no está preparado para ello y la gente que conoce el protocolo en profundidad asegura que no es la mejor solución.

XMPP_logo

¿Cuál es en mi opinión la mejor solución para esto? Implementar XMPP para los mensajes, esta solución permitiría federar mensajes al igual que cualquier servidor con XMPP, usar la cuenta con usuarios fuera de GNU social que tengan estas cuentas y también solucionaría el segundo problema porque se podrían usar aplicaciones XMPP como Conversation para iniciar conversaciones con toda tu red federada.

Puesto que ya hay un plugin para GNU social de XMPP, que permite usar el protocolo para publicar en la red, la solución podría ser modificar el plugin para que publique y reciba directamente desde los mensajes directos. Espero que este post sirva para iniciar una conversación sobre este tema y si alguien con conocimientos para llevar esto acabo se anima, que lo intente.

Comunitarismo para salir del capitalismo

Vivimos en la época en que el capitalismo ha alcanzado ya todas sus fronteras, al no poder llegar a nuevos mercados el sistema se convierte en un juego de suma cero, es decir, para que nosotros tengamos más otros tienen que tener menos y viceversa, esto se ha visto también mucho en el campo de la ecología, ese oponer el ser humano al resto del mundo, cuantas veces hemos oído lo de «No podemos seguir creciendo eternamente.», la respuesta es clara así no.

Por otra parte no siempre la sociedad capitalista ha traído cosas malas, consiguió destruir el sistema feudal donde se ataba a las personas a la tierra y se abolieron los estamentos, fue una auténtica revolución que germinó en las ciudades y permitió a la burguesía desde espacios al principio nimios ir creciendo hasta absorber en su modelo a toda la sociedad, finalmente a todo el mundo. Esto fue un claro avance social, pero se ha llegado a un punto en que en lugar de avances se está empezando a hacer retrocesos, se está haciendo frente a las ineficiencias del sistema a través del estado, estamos viendo tácticas por parte de las macro-corporaciones que harían buenos a los grandes señores feudales.

molinos y eléctricas

Perdón por la comic sans, desconozco quién es el autor original.

Pero tenemos una oportunidad de cambiar todo esto, la bajada de la escala óptima para la producción permite que pequeñas comunidades igualitarias se pongan a producir, ganando para ellos autonomía, permitiendo economías desmercadas dentro de estas comunidades. Al acercarnos a la escala óptima conseguimos un aumento sin límites de la eficiencia en la producción, lo que se conoce como productividad, que gestionado por estas pequeñas comunidades igualitarias permite reducir el tiempo y los recursos para la producción al tiempo que se aumenta lo producido en variedad y cantidad, esto que podemos llamar economía de la abundancia es la unión de un modelo de Producción P2P (entre pares) y la Economía Directa de los Kickstarters.

El conseguir cada vez más con menos es la clave del modelo que se presenta aquí, machaca las reglas del mundo capitalista, ya no hay que robarle al otro para nosotros tener más, si no que ambos podemos conseguir lo que deseemos, lo que puede permitir a la larga una sociedad de la abundancia con unas reglas totalmente nuevas y basada en el poder de las pequeñas comunidades igualitarias. Aquí y ahora podemos empezar a crear ese mundo al margen del sistema. ¡És el momento!

Todo esto y mucho más es lo que nos enseña el Manifiesto Comunero de Las Indias, podéis descargarlo en los distintos formatos en su página de presentación.

Cifra tus comunicaciones móviles con OpenPGP I

Reconocimiento: mrsdkrebs via Foter.com / CC BY

Desde ya ni me acuerdo cuando que colecciono llaveros, alguna especie de obsesión fluye por mis venas por los contenedores de llaves, ese objeto para agrupar todas las llaves y un escalofrío recorre mi espalda si tengo que encontrar una llave concreta en un llavero, el objetivo soñado, la llave única para toda tu vida, es una de tantas utopías a la que solo nos podemos acercar por la vía digital. En esta serie de tutoriales vamos a ver cómo, usando el estándar OpenPGP podemos cifrar nuestras comunicaciones digitales y muchas más cosas. Voy a empezar por las comunicaciones en el móvil, que son las grandes olvidadas en cuanto a seguridad, pero que ya representan un importante porcentaje de nuestra comunicación.

Antes que nada, decir que voy a utilizar únicamente software libre sobre Android para esta serie y es muy recomendable instalar una tienda de aplicaciones de software libre llamada F-Droid, con esta aplicación podréis descargar aplicaciones gratuitamente mientras que en la Play Store tendríais que pagarlas.

Nuestro llavero

Antes que nada vamos a instalarnos nuestro llavero digital en el móvil, la aplicación se llama OpenKeychain  y es la que va a gestionar nuestras claves privadas y las claves públicas de la gente con quien nos comuniquemos.

En primer lugar por lo tanto necesitaremos una clave privada propia, si ya tenemos una porque ya usábamos de antes OpenPGP, la exportaremos a un archivo y la subiremos al móvil de una forma segura (por cable por ejemplo, ¡No uséis internet para esto, es inseguro!), si es nuestra primera vez con OpenPGP podemos crear una nueva clave privada desde OpenKeychain.

También necesitaremos las claves públicas, también llamados certificados, de toda aquella persona con la que deseemos comunicarnos de forma segura, así que pediremos a nuestros amigos estos certificados o los exportaremos al móvil si ya los teníamos. Al final tendremos una cosa así:

Screenshot_2016-01-30-12-49-10

Cifrar Correo

Vamos a instalar ahora el mejor cliente libre de correo para Android, K-9 Mail, configuramos ahora nuestra cuenta de correo y le pedimos a nuestro amigo que nos envíe un correo cifrado por nuestro certificado, recordad como funciona la criptografía asimétrica. En este caso tengo que dar las gracias a @gustavo@lamatriz.org por haber participado en el experimento.

Lo que veremos será algo como esto:

Screenshot_2016-01-30-12-40-08

Screenshot_2016-01-30-12-40-17Screenshot_2016-01-30-12-40-26

Como mi clave privada está protegida por una contraseña OpenKeychain me la pedirá y me preguntará cuanto tiempo deseo que la recuerde:

Screenshot_2016-01-30-12-40-35Screenshot_2016-01-30-12-41-09

Y finalmente tenemos el correo descifrado en nuestro móvil.

Ahora vamos a hacer el recorrido inverso, vamos a enviar un correo cifrado a nuestro amigo con su clave pública y cuando este lo reciba lo podrá descifrar con su clave privada. Los pasos ya son sencillos escribimos un correo y marcamos las casillas de firmar y cifrar, después nos saldrá una pantalla para configurar el OpenKeyChain para decirle que clave vamos a usar.

Screenshot_2016-01-30-12-51-13

Screenshot_2016-01-30-12-51-54

Y esto es todo por hoy, mis siguientes experimentos serán sobre cifrado de otras comunicaciones. ¡XMPP cifrado, allá vamos!

Red distribuida no es malla completa

Un error de concepto que leo una y otra vez a lo largo de la red es la confusión entre red distribuida y red de malla completa, lo cierto es que están relacionadas estas dos redes, pero no son lo mismo, vamos a verlo.

Red distribuida: La extracción de cualquiera de los nodos no desconectaría de la red a ningún otro. Todos los nodos se conectan entre si sin que tengan que pasar necesariamente por uno o varios centros locales. En este tipo de redes desaparece la división centro periferia y por tanto el poder de filtro sobre la información que fluye por ella.

Indianopedia

Partiendo de esta definición básica del concepto de red distribuida podemos ver que estas redes coinciden con la definición de red de malla o redes mesh. Las redes de malla se distinguen en dos tipos: completamente conectadas o parcialmente conectadas.

malla completa-parcial

En las primeras, todos los nodos tienen una conexión directa con otros nodos por lo tanto la comunicación puede ser siempre directa, no es necesario el enrutado de la información. En las segundas, las más abundantes, cada nodo está comunicado con varios nodos, pero no todos, la información circula por toda la red porque los nodos son más o menos permisivos en el traspaso de información, es decir que existe un protocolo de enrutado, en redes como GNU social, que es de este tipo, a este protocolo le llamamos federación y su especificación es OStatus.

Persona ha muerto, larga vida a OpenID connect

mozilla personaLa compañía de Firefox sigue soltando lastre. Una vez Mozilla ha decidido retirar su servidor de Persona, su sistema de identificación de usuarios, nos queda una duda: ¿Ahora que hacemos? ¿Como podemos gestionar nuestras identidades con un estándar distribuido?

Cuando la misma Mozilla no recomienda ya hacer instalaciones propias de Persona, ya se puede dar por muerto este estándar y tenemos que pensar en otras opciones. Así que o inventamos un nuevo sistema de identificación distribuida más moderno o volvemos al estándar al que dio la espalda Mozilla, OpenID. En aquel momento la decisión estaba justificada por la limitación de OpenID de no poder identificar mediante la dirección de correo electrónico, cosa que consideraban indispensable para la adopción por el usuario común.

Logo OpenIDLo cierto es que ahora tenemos un nuevo estándar, OpenID connect, que une las ventajas de OpenID con las características de los servidores WebFinger para permitir la identificación por correo electrónico, número de teléfono o lo que queramos. En mi opinión es el momento de coger este estándar que casi no se ha implementado y empezar a usarlo para conseguir una Web distribuida. Puesto que la identificación es la base para la identidad y esta no debe anclarse a servicios centralizados si queremos un mundo sin ataduras.

APT al estilo moderno

Resulta que llevaba 2 años usando APT a la vieja usanza y no me había enterado. Ahora los comando apt-* están unificados. Ya no es necesario usar «apt-get install x» o «apt-cache search y» con usar «apt install x» o «apt search y» basta.

litox@cerebro:~$ sudo apt update && sudo apt upgrade

Todos usamos cookies, acéptalo ya. más información

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close