MyPads : point de la semaine 24

Ce n’est pas parce que l’on approche du but que nous allons oublier le point hebdomadaire. Le voici donc.

MyPadsSemaine 24 : ce qui a été fait

Avant la version bêta

  • Ergonomie
    • amélioration de la page de vue et édition du pad, en y ajoutant des liens vers les actions communes sur le pad;
    • possibilité d’ouvrir le pad dans un nouvel onglet;
    • désactivation des liens du menu non encore implémentés (modules des favoris et d’administration);
    • correction de l’affichage du statut de favori dans la vue du pad;
    • ajout des actions communes par le biais d’icônes directement sur la liste de groupes et dans la vue groupes pour les pads;
    • quelques aides en plus.
  • fonctionnel
    • traduction de l’interface de l’anglais au français;
    • langue par défaut en anglais, sauf si le navigateur de l’utilisateur est paramétré dans une autre langue et que la traduction existe;
    • ajout de la possibilité de changer de langue dans l’en-tête de MyPads;
    • choix de la langue à la création de compte et dans le profil utilisateur;
    • sauvegarde en base de données;
    • tests unitaires et fonctionnels associés.
  • Correction de l’ordre de démarrage du plugin au sein d’Etherpad et réutilisation de la session Express créée par Etherpad sous MyPads.

Une partie de ces améliorations a fait suite au lancement d’une pré-bêta en interne lundi et après les retours de membres de Framasoft.

MyPads bêta

Le serveur qui devait accueillir la bêta a été préparé pour la recevoir et un script a été écrit de manière à ce que les données soient régulièrement remises à plat. La version en ligne suit la branche de développement de MyPads et, outre le fait que cette version ne soit pas optimisée ni terminée,  il est possible d’y voir s’y glisser des anomalies plus ou moins gênantes.

L’ensemble des tâches encore à mener avant la version stable a été listée sur le Gitlab. Des bonus sont prévus dans les mois à venir et intégreront une branche develop lorsque la version stable sera publiée.

La bêta a été lancée jeudi par une annonce sur le Framablog ainsi qu’une actualité Ulule à destination des donateurs.

Durant ces quelques jours, un plantage du serveur d’applications a été éprouvé. Il était dû à une mauvaise protection au niveau de l’API dans le cadre de la vérification du mot de passe d’un utilisateur déjà authentifié. Si aucun mot de passe n’était donné, ce qui n’était pas possible sur le client Web sans modification directe du code HTML, la fonction de cryptographie lancée s’interrompait, entraînant avec elle MyPads et Etherpad. L’anomalie n’a pas été remontée par le testeur mais a pu être débusquée et corrigée. Des tests unitaires ont été écrits de manière à éviter que cela ne se reproduise dans de futures versions.

Au total, quelques centaines de personnes se sont connectées au serveur et ont testé le plugin. Nous avons eu assez peu de retours : quelques-uns en commentaires sur l’annonce, sur Framaspère ou encore directement sous Gitlab. Nous sommes conscients que la nécessité de créer un compte sous notre instance Gitlab peut être ressenti comme une contrainte mais il est important pour Framasoft d’héberger ses données. Github n’est utilisé que comme miroir et les anomalies n’y sont par conséquent pas activées. Notez cependant qu’il vous est possible de vous identifier avec un compte Github, si vous le souhaitez.

N’hésitez en tout cas pas à nous faire parvenir vos critiques, suggestions. Elles sont importantes afin de nous aider à finaliser un outil de bonne qualité. Et bien sûr, merci à celles et ceux qui ont pris le temps de tester.

Semaine 25 : ce qui doit être fait

Vous avez déjà en main la liste des éléments prévus pour ce mois mais plus précisément, ces prochains jours :

  • la localisation côté serveur des messages de l’API, et notamment les messages d’erreurs qui sont affichés directement sur le client Web;
  • le module de gestion des favoris : pads, groupes;
  • la récupération de l’identifiant utilisateur pour un usage par défaut au sein des pads créés, ainsi que la possibilité, offerte dans le profil, d’opter pour une couleur préférée;
  • les pages publiques : pour partager un groupe, un lien pourra être donné à vos contacts afin qu’ils puissent afficher directement au sein de MyPads les groues publics ou privés (dans ce cas, le mot de passe sera demandé avant toute interaction).

MyPads

MyPads : week 24

It’s not because beta version has been released that we will forget the weekly point. Here it is.

Week 24 : what have been done

Before the beta

  • User Interface
    • pad view and update module improvements with common actions on the pad;
    • a new button to open the pad edition in a new tab;
    • deactivation of menu items not yet implemented (bookmarks and admin);
    • display fix for pad view bookmarking status;
    • addition of common actions through icons from the group list view for groups and from the group details view for pads;
    • more help texts and icons.
  • Features
    • translation of the user interface from English to French;
    • English is the default language except if the user Web browser has been defined with another language and translation exists;
    • ability to update the language from MyPads header;
    • language selection at subscription and on the user profile;
    • database saving;
    • related unit and functional testing.
  • Fix the launch order of the plugin inside Etherpad; Express session share between Etherpad and MyPads.

Part of these improvements have been made after an intern pre-beta launch on Monday and Framasoft members feedbacks.

Beta

The Linux Server that powers beta version has been prepared to receive it and a script has been written for regular data wipe-out. Online demo version follows the master branch of MyPads. Besides this version is not yet optimized nor finished, you can suffer from temporary bugs or problems there.

Remaining tasks before stable version has been listed on our Gitlab. A few bonus are planned for the next months and will be slowly merged from the future develop branch to the stable one.

Beta has been launched Thursday with a Framablog news and an Ulule one, for donors.

During this couple of days, one crash has happened. Because of a bad protection of the public API, as part of password check of a already authenticated user. When no password is given, thing not possible with the Web client unless intentional modification of HTML code, the used crypto function stops, carrying MyPads and Etherpad. The bug has not been reported but we achieve to found and fix it. Some unit tests have been written in order to avoid a come back in future versions.

In total, hundreds of people go to the beta and test it. However, we’ve got few reactions : some comments at the bottom of the blog post, on Framaspere Diaspora node or on our Gitlab. We are aware that creating an account on our Gitlab instance to interact can feel like a constraint but it is important to Framasoft to host its own data. Github is only used as a mirror and so issues are not activated there. Please note you can login with your Github account if you want to.

In any case, do not hesitate to give us your criticisms, suggestions and feelings. It’s important to help us to offer you good quality software. And of course, thanks to all who take some time to test MyPads.

Week 25 : what will be done

You already have planned elements for this month but in details, these next days :

  • server side localization for API messages, especially error messages that are directly displayed in the Web client;
  • bookmarks module for pads and groups management;
  • user login usage for created pads, and the option, inside the user profile, to select a favorite color;
  • public pages : for group sharing, an URL may be sent to your contacts, allowing them to see public or private groups directly inside MyPads (in the last case, the password will be asked before any interaction).



La première démonstration de MyPads est disponible !

Framapad — un de nos services Libre, Éthique, Décentralisé et Solidaire les plus utilisés — permet de rédiger des documents collaborativement et en temps réel.

Basé sur le logiciel libre Etherpad, Framapad héberge aujourd’hui plus de 300 000 documents, grâce à vos dons qui nous permettent de maintenir le service.

Malheureusement, ce service souffre de deux manques importants :

  • l’impossibilité de regrouper les pads créés (par exemple par thèmes, ou tout simplement pour les retrouver facilement plus tard) ;
  • l’impossibilité de protéger ses pads (pour protéger des données confidentielles, des travaux scolaires, etc.).

Le crowdfunding de MyPads

Framasoft avait donc lancé un appel à financement participatif, afin de collecter une somme qui permettrait de développer un module comblant ces deux lacunes.
La somme fut récoltée en quelques semaines, et nous avions donc pu nous lancer à la recherche d’un prestataire pour effectuer ce développement.

Débuté en janvier 2015, le développement a pris un peu de retard, mais l’adage du libre ne dit-il pas : « Ça sortira quand ça sera prêt » ?

Eh bien, bonne nouvelle : une première démo est disponible !

Un exemple de groupe dans MyPads
Un exemple de groupe dans MyPads

Ceci est une première démonstration.

Alors attention, hein : dans « première démonstration », il y a « première » et « démonstration » !

« Première » car le plugin n’est pas terminé. Il devrait l’être pour l’anniversaire de la clôture de l’appel à participation, c’est-à-dire le 30 juillet prochain.
Cela signifie que beaucoup de choses vont encore évoluer dans les 50 prochains jours. Et surtout qu’il est encore loin d’être complet. Donc, ne vous étonnez pas si certaines choses ne fonctionnent pas comme vous vous y attendriez. Et inutile de nous rapporter que les couleurs ne vous plaisent pas : elles sont tout sauf définitives 😉

« Démonstration » car les comptes et les documents créés sur la démo seront régulièrement effacés. Il ne faut donc surtout pas vous en servir pour créer des documents dans un cadre professionnel, car vos contenus peuvent être effacés d’une heure sur l’autre.

Prendre le temps de bien faire

Alors, les esprits chagrins se plaindront sans doute du délai de développement d’un tel plugin. Cela s’explique principalement par le fait que le développement a réellement commencé au début de l’année 2015, et que le prestataire ne pouvait consacrer 100% de son temps à ce projet (ce qui était convenu et accepté par Framasoft).

Par ailleurs, le développement d’un tel plugin est loin d’être trivial. Plus de 60 000 lignes de codes auront été écrites lors de 200 commits.

Enfin, nous aurons fait le maximum pour vous tenir au courant de l’avancement du projet, avec plus de 20 billets blog, qui ont aujourd’hui pris un rythme hebdomadaire.

Bref, nous vous encourageons à tester le plugin, tout en gardant à l’esprit qu’il reste encore pas mal de travaux à effectuer d’ici fin juillet.

Mypads - Contenu
Exemple de contenu dans un pad protégé

D’ici là, vous pouvez aussi :

  • installer votre plugin sur votre instance d’etherpad (il faudra cloner le dépot et faire un npm install à la main, car MyPads ne sera poussé sur npmjs qu’une fois le développement considéré comme stable) ;
  • nous remonter vos remarques sur le dépôt du GitLab Framasoft (qui, rappelons le, est ouvert à tous).

 

> Tester le plugin MyPads <

 

 




MyPads : point de la semaine 23

img-mypads-ulule2Ce qui a été fait

Un certain nombre de tâches ont pu être travaillées en semaine 23, et notamment :

  • un premier jet du module de partage d’administration et d’invitation d’utilisateurs (en mode visibilité restreinte) pour les groupes
    • pour le moment, il est limité aux seuls inscrits et demande de saisir l’identifiant utilisateur ;
    • mais il sera rapidement possible de saisir une adresse mail en plus de l’identifiant et d’inviter des utilisateurs externes, y compris en mode restreint ;
    • il y est possible de révoquer les droits concédés à d’autres administrateurs ou aux utilisateurs.
  • le module d’affichage des pads avec
    • la création automatique du pad sous etherpad au premier affichage ;
    • sa suppression effective en cas d’effacement sous MyPads ;
    • le filtrage des accès en modes restreint ou privé ;
    • l’accès au pad sans restriction en mode public ;
    • la prise en charge du mot de passe, à saisir en cas de visibilité fixée à privée.
  • le partage, par le biais du lien direct etherpad, de l’accès aux pads publics ou privés (avec mot de passe). L’interface est pour le moment sommaire et évoluera vers une meilleure intégration ;
  • le mode archive des groupes, qui affiche pour le moment l’export HTML des pads qui en font partie ;
  • des corrections d’anomalies ;
  • les tests unitaires et fonctionnels des modules développés ;
  • enfin la correction du bug gênant décrit lors de la semaine 17, par un changement du moment où MyPads est configuré quand l’instance etherpad est lancée, ce qui ne permet plus à YAJSML de venir perturber son fonctionnement.

Ce qui est prévu pour cette nouvelle semaine

Pour la semaine 24, il reste un certain nombre de courtes tâches et de petites améliorations à faire. De plus, il est prévu de travailler sur :

  • un module de gestion des favoris par utilisateur : groupes et pads;
  • la mise en place de la gestion de la localisation au niveau du client Web (choisir sa langue pour l’interface) et la traduction vers le français;
  • une prise en charge correcte des permissions avec une véritable séparation entre utilisateurs et administrateurs de groupes et l’apparition du statut d’administrateurs du plugin MyPads.

img-mypads-ulule2

MyPads, week 23

What have been done

A little bunch of things have been worked this week, especially :

  • a first draft of the admin sharing and user invitation module (restricted visibility) for groups
    • at the moment, it only supports existing accounts and needs you to enter user login;
    • but it will soon evolve to also allow email addresses and external users invitation, including in restricted mode;
    • it’s possible into this module to dismiss permissions given to other administrators or users.
  • pad view module with
    • automatic creation of etherpad pad at the first display;
    • effective removal when you delete the pad from MyPads;
    • access filtering for restricted and private modes;
    • free access for public mode;
    • password handling, to be entered when visibility has been set up to private.
  • private, with password, and public pads sharing, through the etherpad direct URL. The user interface is for now basic and will evolve to a better integration;
  • archive mode for groups, that display the HTML export for linked pads;
  • a few bugs fixes;
  • unit and functional testing of worked modules;
  • finally, the resolution of the problem described during week 17, by means of a change when MyPads is configured, after the etherpad instance has been launched. This doesn’t allow YAJSML middleware to conflict with MyPads proper functioning anymore.

What to expect from this new week

About week 24, there are number of short tasks and little improvements to do. Moreover, work is planned on :

  • bookmarks management module per user : groups and pads;
  • setup of Web client localization handling (be able to select the user interface language) and translation to French;
  • a correct support for permissions with a true separation between users and admins of groups and the arrival of MyPads plugin administrators.



MyPads : point de la semaine 22

img-mypads-ulule2Travaux effectués

La semaine dernière a été mise à profit pour :

  • la réalisation de la page de détails des groupes, laquelle comprend :
    • toutes les propriétés du groupes affichées ;
    • la liste des administrateurs et utilisateurs du groupe ;
    • la liste des pads attachés à ce groupe.
  • une gestion sommaire des pads depuis cette page, avec :
    • la création d’un nouveau pad, en saisissant son intitulé ;
    • sa modification, en fait son renommage ;
    • l’effacement de celui-ci ;
    • enfin, l’ajout de pad en favori.
  • les tests fonctionnels liés à cette page.

La gestion des pads n’est pas pleinement terminée puisque le client ne propose pas encore d’écraser les options de visibilité du groupe, c’est à dire que par exemple si le groupe est défini comme public, tous les pads attachés le seront également. Ce comportement sera rapidement amélioré.

Pour la semaine 23

Quelques tâches importantes devraient être effectuées cette semaine avec en priorité l’invitation d’utilisateurs déjà inscrits, le partage d’administration du groupe. Selon le temps disponible, une page regroupant tous les favoris sera également créée ou encore sera effectuée la traduction de MyPads vers le français.

MyPads, week 22

img-mypads-ulule2

Achieved tasks

Last week has been used for :

  • the group’s details module, that includes
    • the display of all group properties;
    • group administrators and users lists;
    • list of linked pads.
  • a basic pads management from this page, with
    • new pad creation, by entering its title;
    • its edition, actually its renaming;
    • the deletion of the pad;
    • finally, pad bookmarking.
  • functional testing of this page.

Pads management is not entirely finished because the Web client does not offer yet to overwrite group visibility options at the level of the pad. In other words, for example, if a group is defined as public, all linked pads will inherit. This behavior will be improved soon.

About the week 23

Some important tasks should be done this week. As a priority, user invitation, administration sharing of the group. In accordance to available time left, a webpage grouping all bookmarked elements will be created. MyPads translation to French may be done too.




MyPads point de la semaine 21

img-mypads-ulule2Tâches réalisées

Le prestataire a été à l’arrêt pour raison médicale la semaine 20 ainsi qu’une partie de la semaine 21. Les avancées n’ont donc couru que sur quelques journées et se sont focalisées sur la page de liste des groupes avec :

  • une séparation claire entre les groupes mis en favoris, ceux en lecture seule et les autres ;
  • un léger remodelage de la vision des éléments principaux pour chaque groupe directement sur cette page ;
  • une recherche par mot clé, insensible à la casse, qui parcourt les noms et labels associés à chaque groupe ;
  • des filtres pré-définis : les groupes dont je suis administrateur, ceux dont je suis simple utilisateur, les groupes restreints, privés ou publics ;
  • des filtres par labels (tags) : la liste de tous les labels employés pour les groupes affichés est disponible dans la barre de filtres et il est possible d’en sélectionner un ou plusieurs ;
  • chaque filtre est cumulable : il est par exemple possible de rechercher les groupes dont le mot « informatique » apparaît dans le titre, qui ont pour labels « astuce » et « programmation » et qui sont publics ;
  • le test fonctionnel de cette page.

Cette semaine

La gestion des pads sur le client Web va enfin démarrer et devrait pouvoir être terminée dès cette semaine. Il est également prévu la prise en charge des invitations pour les groupes et pads restreints ainsi que le partage d’administration avec d’autres utilisateurs.

 

MyPads, week 21

img-mypads-ulule2Tasks done

The contractor has paused the development for medical reason during week 20 and for part of week 21. So progress has been focused around group list page with :

  • a clear separation between bookmarked groups, archived ones and others;
  • a light redesign of visible elements per group into this page;
  • search by keyword, case-insensitive, processing group names and tags;
  • ready-made filters : groups I am administrator, those I am just user, restricted, private or public groups;
  • tags filters : a list of all tags used for displayed groups is available into the filters sidebar and it’s possible to select one or more;
  • each filter is cumulative : for example you can search for groups with the word « computer », which have tags « tooltip » and « development » and are public;
  • functional testing of this module.

This week

Pads management, into the Web client, will finally begin and should be done this week. It’s also planned to start user invitation for groups and pads and administration sharing with other.




MyPads point de la semaine 19

img-mypads-ulule2Travaux effectués

Comme prévu, le travail a été poursuivi du côté des groupes de pads. Plus en détail :

  • la modification des groupes existants, avec la conservation du mot de passe en mode privé (pas besoin de le saisir à nouveau) ;
  • la suppression des groupes ;
  • la gestion d’étiquettes par groupe : créées et supprimées à la volée pendant la modification ou la création de groupe ;
  • un début de gestion des favoris par utilisateur avec le marquage des groupes souhaités ;
  • les tests fonctionnels allant de pair avec ces développements.

Suite

Il y aura peu d’avancées cette semaine, le programmeur étant indisponible quelques jours pour des raisons médicales. Le prochain point concernera donc la semaine 21 avec au programme la recherche par filtres, étiquettes et texte brut sur les groupes et, enfin, le début de la gestion des pads privés.

MyPads, week 19

img-mypads-ulule2

Work done

As expected, tasks have covered groups of pads management. In detail :

  • edition of existing groups, with password keeping where in private visibility (no need to fill it again);
  • group removal;
  • tags management per group : created on the fly and removed during group creation or edition;
  • beginning of bookmarks management per user with group marking;
  • functional testing around these developments.

Suite

There won’t be much progress this week because the developer is absent for a few days for medical reason. Next point will be done week 21. We expect search by filters, tags and plain text over the groups. Also, finally, private pads management start.




MyPads point de la semaine 18

Nouvelle semaine, nouveau point hebdomadaire. Avec quelques jours de retard puisque celui-ci aurait du paraitre jeudi dernier.

img-mypads-ulule2Les tâches réalisées

La semaine dernière, nous avons abondamment parlé d’une anomalie gênante autour d’Etherpad, de yajsml et de MyPads. Une solution de contournement a été trouvée mais devra être confirmée : pour réinstaller le plugin, il semblerait qu’après l’avoir désinstallé, la suppression forcée du cache NPM (se situant en général dans un répertoire caché, /home/user/.npm) permette de ne plus éprouver le problème. Nous verrons une fois MyPads publié sur NPM, et non installé en local, si ce contournement deviendra inutile et mettrons en œuvre ce qu’il faudra pour améliorer la situation si ce n’est pas le cas.

En dehors de cela, cette semaine a été consacrée essentiellement au module de gestion des groupes avec l’affichage de la liste des groupes, leur création. À propos de la notion, centrale, de groupe dans MyPads :

  • chaque utilisateur, authentifié, peut créer un nombre illimité de groupes;
  • ceux-ci contiennent chacun un nombre illimité de pads;
  • chaque groupe dispose d’un identifiant unique en base de données et d’un label;
  • au niveau du groupe, il est demandé de définir une visibilité pour les pads qui seront contenus
    • restreinte : uniquement pour les personnes explicitement invitées, lesquelles devront posséder ou créer un compte sur l’instance MyPads;
    • privée : accès restreint à l’utilisation d’un mot de passe et dans ce cas, un compte n’est pas nécessaire;
    • publique : les pads contenus sont accessibles par leur adresse Web, comme c’est le cas aujourd’hui sans MyPads.
  • cette visibilité est appliquée par défaut mais pourra être écrasée individuellement pour chaque pad contenu;
  • un groupe pourra être mis en lecture seule, pour consultation uniquement;
  • chaque groupe pourra voir son administration partagée avec d’autres utilisateurs, qui pourront alors en modifier les propriétés et y créer des pads;
  • en plus de ce qui était prévu initialement
    • chaque utilisateur pourra mettre en favori un ou plusieurs groupes auxquels il participe;
    • il sera possible d’associer des étiquettes (tags) pour chaque groupe.

Semaine 19

Le travail sur les groupes va être poursuivi. En théorie, nous devrions obtenir en fin de semaine :

  • la suppression des groupes;
  • les étiquettes, favoris;
  • les filtres et la recherche dans la liste de groupes;
  • les tests fonctionnels qui vont avec le module groupes.

Lorsque la gestion des groupes sera terminée, celle des pads arrivera rapidement, puisque cette dernière sera similaire à celle des groupes, et même simplifiée par rapport à elle.
Rendez-vous en fin de semaine pour le prochain point.

MyPads, week 18

New week, new point with a delay of couple of days : this news should have been published last Thursday

img-mypads-ulule2

Tasks done

Last time, we’ve copiously talked about an annoying bug around Etherpad, yajsml and MyPads. A workaround has been found but must be confirmed : to install the plugin again, it seems that, after uninstalling it, a forced removal of NPM cache (which resides into a hidden directory, like  /home/user/.npm) helps to not suffer from the problem. We’ll check after MyPads publication under NPM public repository if this workaround becomes useless. We’ll work to improve the situation otherwise.

Apart from this bug, the week has been mostly dedicated to group management module : list display, creation. About the groups main concept in MyPads :

  • every user, authenticated, can create an unlimited number of groups;
  • those one can contain one or more pads;
  • each group has a database unique identifier and a name;
  • for each group, you’ll have to define a visibility level for linked pads
    • restricted : only invited users can view and edit pads, people who need a MyPads account;
    • private : the access is protected by a password, in this case, the account isn’t mandatory;
    • public : pads are accessible through their Web address, like in classical Etherpad.
  • this visibility property is applied by default to all attached pads but can be overwritten for each pad;
  • a group can be set up on read-only mode;
  • each group can be shared with other users, then they will be able to edit its properties and create new pads into it;
  • bonus elements
    • each user can bookmark one or more groups;
    • tags can be assigned to each group.

Week 19

Work in groups management will continue. In theory, we should get, at the end of the week :

  • group removal;
  • tags and bookmarks implementation;
  • research and filters from the group list;
  • functional testing of the groups module.

When the groups management will be finished, pads management will be out quickly, because it will be similar, and even simplified.
See you at the end of this week for the next point.




MyPads point de la semaine 17

Comme annoncé la semaine dernière, c’est désormais un point hebdomadaire qui émaillera le travail autour de MyPads. Cette semaine n’aura pas été de tout repos et les avancées visibles sont malheureusement peu nombreuses. Explications.


img-mypads-ulule2

Les travaux

La mise en place des tests fonctionnels client, simulant une navigation réelle, a occupé les premiers jours de développement. Ensuite MyPads a subi quelques modifications pour fonctionner avec la version 4 d’Express, le cadre de développement sur lequel repose Etherpad et donc MyPads. Cette migration a été initiée par le tout premier contributeur externe au plugin, et a été rendue nécessaire par la migration d’Etherpad une semaine plus tôt.

Cette migration a été l’occasion de tester à nouveau la compatibilité de MyPads avec Eherpad. Cela peut sembler étonnant, mais MyPads est développé de manière autonome vis à vis d’Etherpad et est régulièrement testé en tant que plugin Etherpad, pour les raisons suivantes :

  • accélérer le développement et éviter de devoir relancer Etherpad voire réinstaller le plugin à chaque modification;
  • permettre les tests unitaires et fonctionnels serveur, très difficile sinon à partir d’un plugin Etherpad, isoler une base de tests du reste de l’instance;
  • conserver une forme d’indépendance vis à vis du cœur d’Etherpad : afin de ne pas nécessiter des modifications d’Etherpad lui-même et de limiter les régressions en cas de changements internes de ce dernier.

Malheureusement le fonctionnement de MyPads s’est révélé erratique : parfois correct, parfois non. Pour les techniciens, seules les méthodes GET et HEAD sont autorisées et toute autre méthode HTTP est refusée. Le problème, nouveau, est intimement lié au logiciel intermédiaire (middleware) yajsml, lequel est employé par Etherpad afin d’optimiser les requêtes des fichiers dits statiques (scripts, images, styles etc). En théorie, les requêtes prises en charge par MyPads ne devraient pas être impactées par ce logiciel intermédiaire, mais pour une raison mal comprise, elles le sont parfois.

Le problème, c’est que MyPads fonctionne autour d’une interface de programmation standard, une API HTTP REST, sur laquelle se connecte le client Web, et qui permettra à d’autres clients ou à des outils tiers de voir le jour. La résolution du soucis n’est pas aisée : l’anomalie intervient de manière aléatoire. Peu de plugins sont touchés car la plupart ne définissent pas leurs propres routes HTTP. Même si yajsml est modifié pour résoudre le soucis, il faudra que la fondation Etherpad accepte le patch et l’intègre avant de pouvoir retrouver une fonctionnement correct de MyPads. Or, il semble que yajsml sera bientôt remplacé par une technologie plus standard.

D’autres résolutions ont été envisagées, du fait de la situation de yajsml, et entre autres :

  1. Substituer, comme certains plugins le font,  l’API HTTP REST par une API basée sur socket.io, la technologie employée par Etherpad pour la collaboration en temps réel et qui repose en premier lieu sur le standard WebSocket. Cette voie a été expérimentée cette semaine mais représente une charge considérable de travail et la réécriture de nombreux modules. De plus, il ne s’agit pas d’un remplacement propre : MyPads y perd une méthode de communication plus standard ainsi que son système d’authentification, lequel avait été choisi pour permettre à terme une connexion depuis des comptes externes ou encore un annuaire LDAP, OpenID etc
  2. Faire de MyPads une application indépendante, de fait non plus un plugin, qui gèrerait les accès des utilisateurs aux pads en fonction des groupes définis. Le problème de cette solution est de complexifier l’installation de MyPads et de risquer des incompatibilités avec certains autres plugins. Aussi, nous sortirions de fait du cadre du cahier des charges initial.

Il a été décidé que la dernière piste ne serait à employer qu’en cas de dernier recours et c’est la migration vers socket.io qui a été d’abord privilégiée. Néanmoins, à la vue du travail nécessaire et surtout des pertes fonctionnelles que cela risque d’amener, cette solution ne sera pas poursuivie.

La semaine prochaine

Le travail va reprendre sur la version HTTP REST standard qui a été développée jusqu’ici. Il est prévu :

  • qu’étant donné que la suppression du yajsml n’arrivera qu’à un terme inconnu, il faudra dépister l’anomalie et la résoudre, ou au moins proposer un contournement simple;
  • de poursuivre le développement, moins actif que prévu cette semaine, avec notamment
    • le passage d’une authentification en propre classique vers JSON Web Token, dont le travail a commencé cette semaine avec le test de socket.io, de manière à renforcer la sécurité des échanges de données chiffrées entre serveur et client;
    • les groupes et pads, évidemment.

Rendez-vous jeudi prochain pour le point de la semaine 18.

MyPads week 17

As announced last week, we now give some news about MyPads development weekly. Last couple of days haven’t been picnic and few enhancements are visible. Explanations below.

img-mypads-ulule2

Work

Frontend functional testing setup, aiming to simulate real navigation, has filled the first days. Then MyPads has been updated to work with Express version 4. Express is the framework which powers Etherpad and so MyPads. This migration has been introduced by the very first MyPads external contributor, and was necessary because of the Etherpad migration a week earlier.

These modifications were a good moment to test MyPads’compatibility towards Eherpad. That can be surprising but MyPads has been programmed independently from Etherpad and is regularly tested as an Etherpad plugin, here’s why :

  • speeding up the development and avoiding Etherpad reboot or plugin re-installation at each update;
  • allowing unit and functional server testing, quite hard from an Etherpad plugin, and isolate a test database from the whole node;
  • retaining a distance regarding Etherpad core in order to avoid need of Etherpad updates and limit regressions in case of internal modifications of it.

Sadly MyPads behavior becomes erratic : sometimes correct, sometimes buggy. For technicians : only GET and HEAD HTTP verbs were allowed and all other method has been forbidden. This problem seems to be linked to the yajsml middleware, used by Etherpad in order to optimize static files requests (scripts, images, styles etc). In theory, MyPads handled routes should not be impacted by this middleware, but for an misunderstood reason, they sometimes are.

Problem is that MyPads is based on a standard home-defined HTTP REST API, which the Web client connects to. This interface may allow other clients and third party tools to be created more easily. Debugging the problem is not an easy task, due to the randomness of the behavior. Few plugins should be concerned because most of them don’t define their own routes. Even if yajsml is updated to fix the issue, the Etherpad developers will have to accept the patch and merge it before we have MyPads working correctly. Now it seems that yajsml will be soon replaced by a more standard technology.

Others resolutions have been considered, regarding to yajsml situation :

  1. Replace, as others plugins do, the HTTP REST API by a socket.io one. socket.io is the technology used by Etherpad for realtime collaboration, that use as a first class citizen the WebSocket protocol. This approach has been tried this week but requires a considerable amount of work and many modules rewriting. Moreover, it’s not a proper replacement : MyPads loses its more standard communication method but in addition its authentication system, which have been chosen to allow, later, connection through external accounts,  LDAP directory, OpenID etc
  2. Move MyPads from a plugin to a standalone application, which handle user access according to created groups and pads. Problem with this solution : harden the MyPads installation, risks of incompatibilities with some other plugins. Also, making a standalone app won’t conform to the initial specifications.

We have decided to follow the last proposition only as a last resort. The migration to socket.io has been preferred but, with the light of required work and moreover functional looses, it won’t continue.

Next week

Work will be resumed on the HTTP REST version, the one developed until now. We expect :

  • because yajsml removal won’t happen before an unknown time, it will be important to find and fix the bug, or at least to provide a simple workaround;
  • move forward, with
    • migration from a classical authentication to JSON Web Token, which has been partially done this week as part of socket.io test, in order to harden encrypted data exchanges between client and server;
    • groups and pads, obviously.

See you next Thursday for week 18 point.