Coder à plusieurs en temps réel avec Teletype for Atom

Par:
fredericmazue

ven, 17/11/2017 - 15:07

Écrire du code avec un autre programmeur est un excellent moyen d'assimiler des connaissances, de se remettre en question à travers de nouvelles perspectives et, à terme, de créer de meilleurs logiciels. C'est également une façon enrichissante de découvrir comment fonctionne une autre personne. Malheureusement, la logistique nécessaire pour écrire du code avec un autre programmeur s'avère généralement compliquée, à tel point que nombre de codeurs ne tentent pas l'expérience. Voici quelques-uns des obstacles les plus courants :

  • Des équipes distantes ne peuvent pas partager physiquement la même machine ; en outre, il est parfois difficile de collaborer lorsque les membres d'une même équipe partagent le même bureau.
  • Les environnements de développement intégrés (IDE) basés sur le Cloud et les sessions tmux distantes exigent de déplacer l'ensemble du workflow vers un environnement hébergé, ce qui n'est ni toujours possible, ni même souhaitable.
  • La latence de connexion lors du partage d'écran peut donner lieu à une situation inconfortable, où seul l'un des collaborateurs peut éditer facilement.

Le codage « social » ne devrait pas être si compliqué d'après GitHub qui annonce une première avancée pour rendre le codage collaboratif aussi simple que le codage individuel avec Teletype for Atom. Aux premières heures de l'informatique, les téléscripteurs (télétypes) étaient utilisés pour établir un circuit en temps réel entre deux machines, de sorte que toutes les informations saisies sur une machine apparaissaient immédiatement sur l'autre. S'inspirant de cette ancêtre électromécanique, Teletype for Atom connecte directement les données saisies au clavier par les collaborateurs distants dans l'environnement de programmation, avec à la clé une solution collaborative sans conflit et à faible latence qui permet d'éditer tout fichier pouvant être ouvert dans Atom.

Démarrer avec Teletype
Après avoir installé Teletype via l'affichage des paramètres Atom ou avec la ligne de commande apm install teletype, il est possible d'ouvrir un « portail » dans l'espace de travail local à partir du nouveau menu Collaboration dans la barre d'état.

Il suffit alors à l'utilisateur de partager l'identifiant secret de son portail avec ses collaborateurs en utilisant son service de chat préféré.

Pour accéder au portail, les collaborateurs devront simplement cliquer sur « join » dans le menu Collaboration en entrant l'ID du portail.

Après avoir accédé au portail, les collaborateurs voient un nouvel onglet s'afficher dans l'espace de travail où ils pourront visualiser et éditer les contenus de l'éditeur actif. Chacun dispose de son propre curseur et peut saisir du code en même temps. Toutefois, étant donné que le partage s'effectue au niveau de la frappe et non des pixels, tous les participants conservent leurs propres raccourcis clavier, paquets (packages) et thèmes personnalisés.

Lorsqu'un utilisateur partage un portail, le code reste sur son disque local. Lorsqu'il bascule entre deux fichiers, le contenu de l'éditeur actif est transmis aux collaborateurs qui peuvent ainsi suivre le processus, faute de quoi votre flux de travail ne sera pas modifié.

Implémentation détaillée

Édition sans conflit
En théorie, l'édition collaborative est un problème délicat. Pour que les modifications soient appliquées de façon réactive, chaque collaborateur gère sa propre réplique de chaque document, appliquant les changements localement, immédiatement avant de les transmettre aux autres collaborateurs. En raison de la simultanéité du processus, les modifications sont appliquées dans un ordre différent sur chaque réplique, mais au bout du compte, toutes les répliques doivent présenter les mêmes contenus.

Après avoir passé plusieurs nuits blanches à lire des articles et des études sur la question, GitHub a finalement décidé de baser Teletype sur le cadre théorique des types de données répliquées sans conflit (CRDT). Fondamentalement, les CRDT sont des structures de données qui convergent toujours vers la même représentation lorsqu'elles sont actualisées à l'aide du même ensemble d'opérations, même si ces dernières sont appliquées dans un ordre différent. Le CRDT d'édition de textes que GitHub a rédigé pour le cœur de ce système est disponible en tant que bibliothèque autonome, appelée teletype-crdt.

Connexion des pairs
Pour connecter les collaborateurs, GitHub utilise les canaux de données WebRTC. Après un contact initial pour échanger les métadonnées de connexion via les serveurs GitHub, toutes les données empruntent des connexions cryptées de gré à gré (peer-to-peer). Les serveurs GitHub ne voient jamais les fichiers ni les éditions, ce qui maximise la confidentialité et minimise les temps de latence entre les collaborateurs, quelle que soit la proximité avec les centres de données.

Si le package Teletype Atom implémente les composants d'interface UI et le code d'intégration spécifique à Atom, la logique réside essentiellement dans une bibliothèque compatible avec tous les éditeurs appelée teletype-client.

Les protocoles GitHub et API risquent d'être instables (churn) pendant que le système est en développement, mais il devrait être possible d'intégrer la librairie teletype-client dans n'importe quelle application Web, voire sous forme de package dans un serveur Electron pour pouvoir lui « parler » à partir d'éditeurs natifs. Favoriser l'interopérabilité entre les différents éditeurs de texte constitue l'un des piliers de la vision de GitHub à long terme.

Retour chariot, saut de ligne
Pour l'instant, Teletype transmet uniquement du texte. Il est par conséquent intéressant de l'associer à une application de communications vocales. Le traditionnel partage d'écran peut également être utile pour partager l'état des applications en dehors d'Atom. À terme, GitHub prévoit d'incorporer directement ce type de fonctionnalités dans le paquet, entre autres améliorations.

GitHub propose dès à présent une version bêta de ce paquet, qu'il juge utile dès aujourd'hui. GitHub utilise Teletype depuis plusieurs mois pour construire Teletype, en collaborant sur deux continents et trois fuseaux horaires.

Visitez le site teletype.atom.io pour coder à plusieurs dans Atom.