Outils pour utilisateurs

Outils du site


caso_arts_reseau

masto-do-it

Trouver le projet

Ce qui m'intéresse

Ce qui m’intéresse c’est les choses que l’on fait automatiquement, sans réfléchir, les non-choix. On en a un peu parlé pendant la présentation théorique, mais dans le numérique on est “coincé” par Facebook (ou autre) puisqu’il est déjà en position dominante, donc choisir autre chose c’est s’ostraciser.

En faisant quelques recherches je suis tombé sur les notions de “vendor lock-in” ou de “path dependance” et d’ “Anti-pattern”, qui rejoignent cette idée d’utiliser quelque chose de sous-optimal (voire carrément néfaste) par habitude ou parce que c’est imposé par le milieu ou le marché comme standard. J’aime bien l’idée d’effet boule de neige aussi, qu’il y a une sorte d’état d’équilibre jusqu’au moment où on choisit (collectivement) et alors il y a une bascule d’un côté ou de l’autre qui s’opère rapidement. Peut-être que c’est ce moment de bascule qu’il faut creuser  ?

Quelques liens (j’ai l’impression que les pages en anglais sont plus complètes) :

Ça rejoint aussi d’autres choses qui m’intéressent, comme la théorie des jeux (équilibre de Nash entre autres…).

Deux idées de projet

Mais pour en revenir à mon projet je me suis demandé comment lutter contre ces blocages (qui rejoint aussi fort la question du logiciel libre), et j’ai pour l’instant 2 pistes :

  • utiliser mon Raspberry Pi comme un routeur WiFi, ce qui me permettrait de paramétrer ce réseau quand on s’y connecte (je ne suis pas du tout expert en administration réseau, mais j’ai compris que c’était possible). Par exemple, je me dit que je pourrais bloquer les accès à tous les réseaux “dominants” ou faire en sorte que taper l’adresse de Facebook redirige automatiquement sur Mastodon. Ou que si on essaie de taper quelque chose sur Google on a une redirection en passant par DuckDuckGo. À voir dans quel lieu activer ce réseau “piégé”.
  • utiliser l’API de Facebook pour collecter des données d’utilisateurs, pour leur recréer un profil sur Mastodon (c’est l’exemple d’alternative qui me vient en tête, mais ça pourrait être avec YouTube et PeerTube) avec son API. Puisque c’est le “coût” du changement qui incite à ne pas changer de plateforme (devoir recréer son cercle d’amis etc.), si les profils sont déjà prêts ça facilite le travail  :). Alors c’est un peu étrange de forcer des utilisateurs sur une plateforme et c’est pas la bonne façon je pense de rentrer dans le libre, mais dans la mesure où toutes les infos sont rendues accessibles par Fb, c’est aussi une dénonciation de cette collecte de données (mais est-ce qu’on le sait pas déjà  ?). Aussi, j’ai vu qu’il existait un type d’autorisation admin pour l’API de Mastodon, qui permet de créer des comptes et de créer des liens d’amitié entre eux. Je n’ai pas encore trouvé les conditions d’accès à ce statut admin.

Faire un choix

  • Le projet “routeur” est plus modeste, peut-être plus simple techniquement et plus soft politiquement. Il prendrait son sens réellement dans son activation, sous la forme d’une installation ou d’une forme plus performative, comme le fait de le mettre dans un certain endroit pour pirater les requêtes voulant aller vers les serveurs que je veux bloquer.
  • Le projet “bot” est plus engagé politiquement, sûrement plus ambitieux techniquement car il pourrait impliquer de configurer un serveur pour le faire tourner (peut-être sur mon Raspberry Pi ou bien en local sur mon ordi dans un premier temps).

Pour l’instant je penche plus vers le projet “bot”, qui me paraît plus fort dans le sens qu’il est plus applicable à grande échelle, et pas limité à un lieu ou à une activation unique ou ponctuelle.

Ou alors le projet “routeur” devient une série de Raspberry que je cache à certains endroits et qui viennent perturber localement certains lieux  ? Comme des zones “dégafamisées”, des zones blanches pour les GAFAM  ?

Remise en question

En lisant cet article et cet article de Libroscope, j’ai de plus en plus de doutes sur le bien-fondé de ma démarche (du moins dans sa forme de conversion “automatique” ou forcée). Forcer quelque chose ne mène à rien.

Concernant le projet “bot”, peut-être que la solution à ce doute se trouve dans l’analyse plus précise des conditions d’utilisation de FB et Mastodon afin de m’assurer que le sentiment de violation de la vie privée soit dirigé vers FB justement, qui permet ce genre de pratiques, et pas comme un sentiment de prosélytisme ou de lobbying forcené en faveur du libre (alors qu’un des objectifs est justement que les gens puissent se documenter et faire des choix éclairés). Je ne veux pas que le projet puisse outrepasser le consentement des utilisateur.ices, qu’il soit conscient ou inconscient (en acceptant les CGU sans les lire).

Si l’on voit le projet comme une proposition, une offre, une main tendue, un “facilitateur” pour enlever une barrière psychologique, alors il devient moins problématique. Il faut que j’arrive à bien faire attention au ton que je donne au projet et à sa communication pour qu’il soit perçu comme je le souhaite.

Références

  • Benjamin Grosser, Facebook Demetricator (2012)→ une extension de navigateur utilisable par tout le monde pour réduire la nocivité de Facebook (existe aussi pour Twitter, TikTok etc.) en enlevant tous les nombres
  • Benjamin Grosser, NotForYou (2020) → une extension de navigateur pour rendre confus l’algorithme de recommandation de TikTok et proposer des contenus non pertinents
  • Benjamin Grosser, Safebook (2020) → extension qui efface tous les contenus de Facebook pour le rendre inoffensif
  • Julian Oliver & Danja Vasiliev, Men In Gray → Valises qui affichent toutes les données qu’elles captent (échanges de mails, photos, appels téléphoniques ?)

Extrait de la page de présentation du projet :

To do this, the Men In Grey deployed intervention strategies within the frame ‘DISSECT / REFLECT’, asserting that only when networked computer users are made to tangibly witness their vulnerabilities will they reach vital criticality, or a ‘healthy paranoia’.

Est-ce que la prise de conscience passe nécessairement par une démarche aussi intrusive ?

Changement de programme?

Je me rends compte de plus en plus que ce projet risque d’être irréalisable à mon échelle, en plus d’être vraiment compliqué (impossible ?) à prototyper à cause de la nécessité d’avoir un serveur dédié (je ne peux même pas effectuer des tests en local donc c’est compliqué).

Comment détourner le projet pour en faire quelque chose de réalisable ?

Une piste serait de créer un groupe ou un évènement Facebook (pour lequel je ferais la promotion, en faisant du growth hacking pour booster sa visibilité) sur lequel je convertirais tous les profils des personnes qui suivent ce groupe/évènement à une date donnée.
L’idée est que ce geste soit plus performatif/symbolique qu’efficace. Une fuite collective organisée (qui sera en fait une copie, un clone et non une réelle fuite). Tant pis si je n’ai pas 2000 personnes qui répondent présent·e·s la première fois.

Cet évènement pourrait se reproduire, être régulier ou bien ponctuel, avec une date significative et symbolique.

Une fois qu’un de ces évènements s’est produit, je peux envoyer automatiquement un message aux ami·e·s de toutes ces personnes afin de leur signaler qu’un·e de leurs ami·e·s est passé sur Mastodon. Plus quelqu’un·e est (était ?) influent·e sur Facebook, plus iel sera influent·e pour promouvoir Mastodon (ou au moins faire connaître ma démarche de “porte de sortie facilitée”). Je peux aussi pousser les gens “convertis” à en parler autour d’elleux pour devenir des ambassadeur·ice·s de Mastodon (merci le growth hacking).

La question du ton

Je peux aborder cette fiction, cette personne qui va créer un évènement de fuite “massive” automatisée de Facebook de plusieurs manières. Quel caractère vais-je donner à mon alter-ego ?

  • marketing : pub sur Facebook + vendre une formation pour faire la même chose «vous aussi devenez votre propre serveur et hébergez des données de manière contrôlée afin de les faire fructifier». Je peux même faire du micro-targeting pour choisir ma cible.
  • festif : “venez ça va être marrant, trop cool, on boit une bière en même temps → grosse convert party sur Jitsi”
  • complotiste : “RÉVEILLEZ-VOUS  ! Cette plateforme à la solde des USA nous espionne et lutte pour faire revenir la secte judéo-maçonnique d’OBAMA au pouvoir”
  • sectaire/religieux : “AMEN  ! c’est l’heure du grand Ravissement, l’heure de quitter nos enveloppes numériques baignées dans les pêchés de l’avarice du techno-capitalisme pour aller vers des horizons plus lumineux  !”
  • militant  : “Le libre c’est mieux, je vous propose en toute transparence ma démarche, en vous exposant les faits”.
  • coach sportif/développement personnel : axer le ton sur la “paresse numérique”, le fait de devoir se motiver, se bouger. “La santé c’est important. Pour ça, il faut une bonne hygiène de vie ! Mais vous avez pensé à votre hygiène numérique ? Pour la nouvelle année, je vous propose un programme pour se remettre sur pied, en commençant par un petit coup de pouce  ! RDV le 1 janvier 2021 pour un évènement exceptionnel !”

Installation d'une instance Mastodon

Pour que mon projet fonctionne, j’ai besoin d’un serveur personnel sur lequel installer une instance de Mastodon sur laquelle je serais administrateur, et donc où je pourrais créer des nouveaux comptes.

Pour cela je vais pour l’instant utiliser un Raspberry Pi en tant que serveur.

Dans le détail

Cette partie va être plus technique, et décrire les obstacles que j’ai rencontré.

J’ai suivi le guide d'installation officiel de Mastodon, et ça a bloqué premièrement sur l’installation de Ruby dans un environnement virtuel.

Avant tout il faut activer le ssh par clé d'identification et pas par mot de passe, pour plus de sécurité.

C’est là que les choses sérieuses commencent.

J’ai installé rbenv et ruby, mais ruby n’était pas reconnu comme commande dans le terminal. En fait il fallait taper

rbenv global 2.6.6 (la version qui est dans le tuto)

afin de rendre ruby accessible depuis tous les dossiers.

Ensuite le second problème était l’installation de Ruby on Rails, utilisé par Mastodon. Il y a une extension en particulier (appelé une gem en ruby), bcrypt, qui ne voulait pas s’installer. En fait dans le log on s’aperçoit que bcrypt version 3.1.13 essaie de s’installer sur un ordinateur avec une architecture amd x86. Or, le Raspberry Pi a une architecture arm x32 (x64 en version beta je crois pour les derniers modèles), donc ça ne peut pas marcher. Il faut donc installer manuellement une version de bcrypt compatible avec le Raspberry :

gem install bcrypt --platform arm-linux

Dans mon cas c’était la version 3.1.16. J’ai dû modifier le fichier Gemfile.lock afin de lui préciser qu’il faut utiliser la bonne version, donc la 3.1.16 et pas la 3.1.13 qu’il s’attend par défaut à trouver au moment de l’installation de Ruby on Rails. Gemfile.lock contient, si j’ai bien compris, toutes les dépendances utilisées par Mastodon (et qui fonctionne grâce à Ruby on Rails).
→ Dans Gemfile.lock, modifier bcrypt (3.1.13) en bcrypt (3.1.16)

Ensuite on tape

bundle install

pour installer Rails (si j’ai bien compris).

Maintenant il faut configurer Rails et Mastodon en lançant cette commande :

RAILS_ENV=production bundle exec rake mastodon:setup

On peut configurer un paquet de trucs mais ici ça sert à configurer la base de données PostgreSQL. Pour l’instant mon Raspberry Pi n’est pas en ligne, donc je n’arrive pas à me connecter à la base de données pour la configurer.

La suite des étapes implique de configurer nginx (le serveur web), ajouter un certificat SSL (pour que le serveur soit sécurisé avec le protocole HTTPS) grâce au programme certbot. Puisque mon nom de domaine ne pointe pas encore vers le Raspberry, je ne peux pas terminer cette configuration.

Il faut maintenant que le serveur soit accessible depuis un navigateur pour continuer.

Port forwarding

Mon Raspberry Pi se trouve chez moi, connecté au réseau WiFi. Il peut accéder à internet, mais depuis internet on n’a pas accès au Raspberry Pi. Seul le routeur possède une adresse IP publique. Le port forwarding, ou redirection de port, consiste à faire en sorte que si quelqu’un·e essaie de se connecter à l’adresse IP du routeur, iel soit redirigé·e vers le Raspberry Pi (qui contient l’instance de Mastodon).

La meilleure explication que j’ai trouvée (en anglais) sur le principe du port forwarding.

Pour l’instant c’est un échec, le nom de domaine censé rediriger vers le serveur/Raspberry Pi ne mène nulle part.

Finalement le Raspberry Pi est hébergé ailleurs, où le routeur permet de faire des réglages plus poussés que la box internet chez moi.

Pour des raisons de sécurité/de trafic le site est accessible par les ports 1080, 1443 et 1022 respectivement pour les connexions HTTP (port 80), HTTPS (port 443) et SSH (port 22). J’ai du bidouiller dans les paramètres DNS pour rediriger le nom de domaine vers le Raspberry Pi sur le port 1080 donc l’adresse du site est un peu bizarre : http://twitter.masto-do-it.xyz:1080

Je peux maintenant enfin poursuivre l’installation de Mastodon.

Création d'un compte Facebook

Finalement je pars sur l’idée du coaching sportif contre la paresse numérique. Il faut que je me trouve un nom, une photo de profil, une bannière et du contenu à partager pour alimenter la page.

Quelques exemples

Les infos personnelles?

Je tire à pile ou face pour savoir si je choisis un homme ou une femme : pile pour une femme et face pour un homme → ça tombe sur face, ce sera donc un homme.

Je choisis un nom sur Character Name Generator (une pépite ce site), sur lequel je peux choisir une nationalité. J’ai choisi Belge parce que mon serveur et mon compte Facebook seront localisés en Belgique. Mon coach s’appellera Christophe Jacobs (le premier nom qui est apparu).

Je choisis une photo de profil sur This Person Does Not Exist avec un air sportif : christophe-jacobs.jpeg

Il à l’air en forme, dans la nature tout ça.

Pourquoi avec des générateurs ? Selon moi, ces algorithmes de machine learning fonctionnant à partir d’une grande quantité de données font écho à ma démarche : échapper aux multinationales exploitant le Big Data.

Je dois donner un âge à mon coach, et après un rapide sondage autour de moi j’ai fait une moyenne et j’arrive à un âge de 37 ans. Il est donc né en 1983.

La date d’anniversaire a été choisie au hasard par random.org → c’est le 15 juin 1983

J’ai choisi de créer un compte mail chez tutanota, une entreprise allemande qui propose un compte gratuit encrypté open-source (ça la fout mal si la personne qui veut sortir les gens de Facebook a un compte Gmail…)

Je cherche une photo de bannière sur CCSearch et FreeImages pour avoir des images (libres de droit) de foule, de chemin ou de quelque chose qui fait penser au développement personnel (trouver son chemin, aller contre la foule tout ça) pour la mettre en bannière. CCSearch est vraiment à la ramasse et je trouve ce genre de trucs sur FreeImages : outside-the-box-1243054.jpg

J’aime assez la dernière parce qu’on a le côté numérique, je pense que je vais partir là-dessus.

Le compte Facebook développeur

Pas trop compliqué à créer, pas besoin de vérification manuelle comme avec l’API de Twitter (cf. @baladecampagne).

Finalement le plus compliqué c’est de trouver un nom :

J’ai opté pour Masto-Do-It, un mélange subtil de Mastodon et de ce fameux meme avec Shia LaBeouf qui évoque bien le coach sportif :

J’essaie d’obtenir des accès à l'API Graph de Facebook, me permettant d’utiliser dans un programme les informations publiques de la plateforme (sur des profils, des évènements, des posts…), mais là encore j’ai des bâtons dans les roues :

Les premiers essais

En suivant cet article/tuto je n’arrive à rien, même dans l’explorateur de l’API.
Je ne peux avoir que les informations qui me concernent, et encore c’est compliqué.

Basculement vers Twitter

Finalement l’API de Facebook est très restrictive, et pour avoir accès aux informations d’un profil il faut avoir l’autorisation de la personne concernée. Ça implique de créer un chatbot messenger qui renvoie vers une page web avec un bouton “autorisez-vous cette application blablabla”, ou bien un site avec un bouton “se connecter avec Facebook”, et ça me plaît moyen. Ça rajoute une bonne couche de complexité technique et en plus c’est moins intuitif pour l’utilisateur. Mon intention était quand même de pouvoir convertir des profils en masse qui se sont juste abonnés à un évènement. Demander plus d’actions de la part des utilisateur·ice·s va à l’encontre de ma volonté de faciliter leur passage au libre, de les sortir de leur paresse numérique en faisant le moins d’effort.

C’est pourquoi j’ai décidé de tenter ma chance avec l’API de Twitter, que je connais mieux et qui est bien plus permissive (une fois qu’on en a eu l’accès). En plus Mastodon ressemble plus à Twitter qu’à Facebook dans le principe, donc ça colle peut-être mieux au projet.

Premiers essais #2

En attendant d’avoir accès à l’API avec le compte Twitter de Christophe Jacobs, qui demande une vérification manuelle, j’ai utilisé les clés d'un autre projet utilisant l'API de Twitter pour faire des tests de code en Python (l’utilisation d’API nécessite un compte développeur pour obtenir des clés de sécurité qui confirment que la personne est autorisée à effectuer ces actions).

Pour ça j’utilise la librairie Tweepy qui simplifie pas mal l’accès à l’API.

J’ai réussi à récupérer par exemple tous les followers d’un utilisateur particulier, desquels je peux récupérer le nom, la description, la localisation, la langue, etc.

import tweepy, json
 
###authentification à l'API
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
 
###récupérer les infos sur l'utilisateur connecté (remplacer '@baladecampagne' par le nom du compte développeur)
user = '@baladecampagne'
personne = api.get_user(user)
 
###créer et remplir une liste de followers
followers= []
[followers.append(us.screen_name) for us in api.followers(user, count=900)]
 
###créer et remplir une liste avec les infos sur les followers
followers_infos = []
for follower in followers:
    followers_infos.append(api.get_user(follower))
 
###afficher certaines infos de chaque follower
for fol_inf in followers_infos:
    print(fol_inf.name, '\n', fol_inf.description, '\n', fol_inf.location, '\n')

Avec ça on peut récupérer déjà pas mal d’infos.
Par ici, un lien vers la documentation du module Tweepy qui montre toutes les infos qu’il est possible de récupérer par ce biais.

J’ai plus que ce qu’il me faut, avec en prime le dernier tweet envoyé.

Informations nécessaires

Avec ce premier script je peux récupérer ces infos (que je réutiliserais pour la création du compte Mastodon) :

  • nom
  • localisation
  • photo de profil
  • photo de bannière
  • dernier tweet
  • la langue utilisée
  • la description

Mais il me manque une info capitale, l’adresse email. Je me doutais bien que ce genre de donnée ne se trouve pas aussi facilement, alors je vais devoir poursuivre mes recherches. Sans email je ne peux pas créer de compte Mastodon.

Je me retrouve avec le même problème que Facebook mais un peu plus tard : j’ai besoin que l’utilisateur clique sur un bouton pour donner son accord afin que je puisse avoir son adresse mail par exemple.(la documentation de Twitter)

Dans le cas de Twitter j’ai accès à plus d’infos de base facilement mais pour créer un projet qui utilise des adresses email il faut que je fournisse des liens vers des conditions d’utilisation et de protection des données qui seront évaluées par Twitter (ça me semble assez ambitieux).

Difficultés

Je pense qu’un problème majeur est que je n’utilise pas Twitter donc je connais assez peu sa logique et comment être actif sur ce réseau.

Un autre problème se trouve dans le fait que je doive demander plus d’actions que ce que je pensais à l’utilisateur.ice. Le serveur que j’utiliserais pour ce projet sera éphémère (il tourne sur mon Raspberry Pi, je ne veux pas le “bloquer” pour d’autres projets), et je ne compte pas renouveler le nom de domaine que j’ai acheté pour l’occasion. Il faudra que je conçoive un manuel pour que les “converti.e.s” changent d’instance Mastodon assez rapidement après que mon programme leur ait créé un compte. S’il faut une confirmation en cliquant sur un bouton pour avoir accès à l’adresse mail (qui va paraître louche et ressembler à un piratage), plus le fait de devoir changer de serveur, ça rajoute de la complexité pour un projet qui se veut simplificateur.

Politique de confidentialité & conditions de service

Pour avoir accès à l’adresse email de mes futurs followers, j’ai besoin des accès des utilisateur·ice·s à leur profil Twitter. En cliquant sur un bouton “Se connecter avec Twitter”, on autorise l’application qui le demande un accès à une partie des données de notre profil et/ou des droits d’écriture pour poster des tweets, suivre un compte ou bien envoyer des messages privés par exemple. Cela nécessite que mon compte développeur Twitter ait plus de permissions, je dois cocher dans les paramètres :

  • Enable 3-legged OAuth
  • Request email address from users

Ces permissions me sont accordées que si je remplis des obligations légales (RGPD, ou Règlement Général de Protection des Données en Europe).

Mais comment écrire une politique de confidentialité et des conditions de service (en anglais en plus) ?

Je suis tombé sur ce site, qui est un générateur de politique de confidentialité, et ce site, qui génère les conditions de service. C’est presque trop facile et un peu louche. Ces sites proposent même d’héberger gratuitement et pour toujours les documents que je viens de générer (je sens que Chtistophe Jacobs va recevoir des spams dans sa boîte mail prochainement).

Ces documents légaux sont accessibles ici et ici pour l’instant, mais je les hébergerais directement sur le serveur ensuite.

Il y a quand même un peu de ménage à faire, notamment dans la politique de confidentialité qui parle de cookies (à part ceux que Twitter utilise via le bouton “se connecter avec Twitter”, je n’ajouterais pas de cookies) et qui dit que l’on peut se connecter à Facebook ou Google depuis le site (c’est un template assez large donc je peux enlever quelques détails).

Schéma de fonctionnement actuel

Créer un site pour que tout fonctionne

Construction

J’utilise PHP pour construire le site et les appels à l’API. Le site va aussi abriter les documents légaux ainsi qu’un tutoriel pour démarrer Mastodon, et sûrement des consignes pour changer d’instance une fois que les nouveaux·elle·s arrivant·e·s auront crée et configuré leur compte.

Pour cela j’utilise la librairie PHP Twitter OAuth|Twitter OAuth qui simplifie beaucoup les requêtes HTTP.

Sur la page principale, il y a un bouton “Se connecter avec Twitter” qui renvoie à une page automatique qui indique les droits qui me sont accordés par la personne se connectant avec son compte Twitter. Le seul bémol est que pour faire fonctionner Twitter OAuth
mon compte développeur doit avoir des droits d’écriture, c’est-à-dire pouvoir twitter à la place des personnes connectées. C’est un droit dont je n’aurais pas besoin, et dont je ne me servirais pas, mais qui va s’afficher automatiquement sur la page de connexion et qui peut faire peur.

Je suis donc obligé pour l’instant d’activer ces permissions d’écriture sur mon compte développeur, même si en théorie ce n’est pas nécessaire.

Design

L’idée est de s’inspirer des interfaces de Twitter et de Mastodon, qui sont déjà assez similaires. Vu que j’ai peu d’éléments à afficher je vais juste reprendre des couleurs et une police qui donne un sentiment familier afin de faciliter la transition.
Les couleurs

Choix de la police

Je voulais utiliser la même police que Twitter pour rester dans un univers familier. En plus, vu que j’utilise les outils de Twitter pour le détourner ça s’inscrit dans la continuité de mon principe.

D’après ce site, Twitter utilise Helvetica Neue/Arial/Segoe UI/Ubuntu (selon le système utilisé), et Roboto pour la version Android.

Puisque Helvetica (je ne sais pas quelle version) est par défaut sur les Macs et Arial sur les PC, je peux faire une règle CSS qui s’adapte aux différent·e·s utilisateur·ice·s pour qu’iels aient la même police que lorsqu’iels sont sur Twitter.

html{
  font-family: 'Helvetica', 'Arial', 'Roboto', sans-serif;
}

J’ai rajouté un petit décompte jusqu’à l’évènement de conversion (pour l’instant prévu le 21 mars 2021, date des 15 ans de Twitter) grâce à ce petit script en javascript, pour rajouter au côté performatif du projet.

caso_arts_reseau.txt · Dernière modification: 18/03/2021 16:36 de thomas