URL: https://linuxfr.org/users/george/journaux/bluelatex-reloaded-sort-en-beta Title: \BlueLaTeX reloaded sort en bêta ! Authors: Lucas Date: 2014年05月07日T20:07:58+02:00 License: CC By-SA Tags: latex, éditeur, bêta et couchdb Score: 44 Allez, je me fends de mon premier journal pour vous présenter un projet qui m'occupe pas mal depuis quelques années, à l'occasion de la première version bêta publique de [\BlueLaTeX](https://github.com/gnieh/bluelatex), disponible [sur la page des releases](https://github.com/gnieh/bluelatex/releases). ## Mékeskecé ? \BlueLaTeX est tout simplement une plateforme d'édition collaborative de documents en \LaTeX. Le projet consiste en plusieurs modules : - le gestionnaire d'utilisateurs et de documents, - le serveur de synchronisation de fichiers, - le serveur de compilation des documents, - un client web - ... Je reviendrai sur les différents modules par la suite, mais voilà globalement la structure du projet. Une instance d'une ancienne version de \BlueLaTeX est hébergée et utilisable sur [publications.li](http://www.publications.li/). La version bêta ne devrait pas tarder à y être disponible en test. ## Historique Le tout premier prototype de \BlueLaTeX a été écrit par [Martin](http://www.monperrus.net/martin/) en 2010 afin d'explorer l'idée d'un éditeur collaboratif en temps réel de documents en \LaTeX. Ce prototype était écrit en php, le serveur de synchronisation [mobwrite](http://code.google.com/p/google-mobwrite/) en python, et le client utilisait [prototype](http://prototypejs.org/). L'idée était de créer facilement un document \ĻaTeX et de partager un simple lien entre les différents auteurs du document pour travailler dessus. En 2011, le prototype est amélioré pour ajouter une interface Rest plus propre séparant clairement la livraison du contenu du client de la logique de gestion des documents. Le client pour sa part abandonne prototype pour [YUI](http://yuilibrary.com/), le serveur est resté fidèle au php avec une utilisation intensive de `RewriteRule`. J'ai commencé à y mettre mon grain de sel début 2011, mais je n'aimais pas le php. J'ai donc effectué un lobbying pour utiliser autre chose et début 2012, le serveur est enfin entièrement réécrit en [scala](http://www.scala-lang.org/) et fonctionne. Cette nouvelle version n'expose qu'une interface Rest et ne s'occupe pas du tout de l'application web, décorrélant la logique du client. Le but est d'avoir un serveur qui peut être utilisé par n'importe quel client qui parlerait correctement à l'interface. Un nouveau client est réécrit par Martin en GWT, ni lui ni moi n'étant spécialiste de javascript. La synchronisation est toujours effectuée par [mobwrite](http://code.google.com/p/google-mobwrite/) à qui le serveur délègue les requêtes. Cette version est celle qui tourne depuis 2012 sur [publications.li](http://www.publications.li/). Tout au long de ces _générations_ du service, une ligne directrice s'est précisée pour Martin et moi même : fournir une plateforme d'édition collaborative, d'accord ! Mais une plateforme qui cible en premier lieu les publications scientifiques. De nouveaux concepts sont donc venus se greffer, rendant la maintenance du code un poil difficile. Mi 2013, nous avons donc entamé une réécriture complète du serveur, toujours en scala, avec une architecture modulaire permettant de séparer les concepts proprement, et de fournir une API propre et claire. Le code du serveur de synchronisation tenant plus du prototype que du code à mettre en production (notamment beaucoup de choses codées en dur), nous décidons de le réécrire. La [théorie de Neil Fraser](http://code.google.com/p/google-mobwrite/wiki/Theory) très intéressante mais le [protocole](http://code.google.com/p/google-mobwrite/wiki/Protocol) est assez rudimentaire. [Audric](http://www.schiltknecht.fr/) nous rejoint à ce moment et s'attèle à cette tâche. La nécessité de faire un nouveau client web, un poil [moins austère que l'actuel](http://blue.publications.li/u4ceb8c15abc2a) s'est rapidement faite sentir. Au début de l'année nous rejoint donc [Thomas](https://github.com/tdurieux/) qui entame l'écriture du nouveau client web avec [angularjs](https://angularjs.org/). Et nous voici au point où la première bêta de la réécriture est prête et la deuxième est dans les tuyaux. ## Fonctionnalités Cette nouvelle mouture est censée être isofonctionelle à l'ancienne, et bien sûr apporte certaines améliorations que voici. Toutes les fonctionnalités sont disponibles dans le client web par défaut qui fait uniquement des appels à l'[API Rest](https://github.com/gnieh/bluelatex/wiki/Rest-Interface). Il est donc possible d'utiliser n'importe quel client qui sait faire des requêtes HTTP. La seule limitation dans cette première bêta (et pour la première version en fait) est qu'il est nécessaire d'avoir une session basée sur des cookies. La gestion de l'authentification [OAuth](http://oauth.net/) est planifiée pour la version 1.1.0. ### Gestion des papiers  Dans un premier temps, un utilisateur connecté a accès à la page de gestion de ses papiers. Il peut en créer de nouveaux, en supprimer, ou lancer l'édition d'un papier existant. L'auteur d'un papier peut ajouter d'autres auteurs, qui verront à leur tour le papier apparaître dans leur liste, et pourront commencer à travailler dessus. Un rôle de relecteur est aussi disponible, qui s'intégrera dans le workflow classique d'une soumission de papier scientifique que nous souhaitons intégrer dans \BlueLaTeX à moyen terme. Un relecteur a un accès en lecture seule au papier, et pourra par la suite le commenter et l'annoter. ### Édition de papier  La page d'édition d'un papier est composée d'un éditeur de texte, de la liste des fichiers et ressources du papier (fichiers TeX, BibTeX, images, ...) et du rendu du papier compilé en pdf. L'éditeur propose la coloration syntaxique et les fichier édités sont synchronisés en temps réel entre toutes les personnes connectées travaillant dessus. Le support de SyncTeX permet de naviguer facilement entre l'éditeur et le pdf compilé, dans les deux sens. Il est aussi possible de configurer la manière dont le document est compilé, notamment le compilateur à utiliser et l'intervalle entre deux compilations. Les compilations se font en arrière plan, et ne sont pas lancées par l'auteur du papier. Cette fonctionnalité est un essai, afin de voir si c'est plus simple et utilisable que l'ancien comportement où la compilation était lancée à l'initiative de l'utilisateur. Il est possible de charger des images ou autres ressources associées à un papier, ces ressources ne sont pas synchronisées et n'ont pas vocation à être éditées dans le client web. Si vous souhaitez créer un nouveau fichier synchronisé et éditable, il suffit de passer par l'interface du client web. ## Comment qu'c'est qu'on essaye ? Malheureusement, un [bug](https://github.com/gnieh/bluelatex/issues/53) de jeunesse nous empêche de faire une instance de test avec un utilisateur de test pour vous montrer cette bêta, j'espère pouvoir le corriger d'ici la prochaine. En attendant, si vous souhaitez essayer chez vous, il vous suffit de [télécharger l'archive](https://github.com/gnieh/bluelatex/releases/download/v1.0.0-M1/bluelatex-1.0.0-M1.tgz) de cette bêta, de la décompresser sur votre ordinateur, et de lancer la script dans le répertoire `bin`. Afin que ça fonctionne correctement, il faut installer les dépendances nécessaires : - [couchdb](http://couchdb.apache.org/) en version 1.2.0 minimum, - une JVM en version 7 minimum, - il vous faudra un serveur smtp aussi pour valider l'inscription ([FakeSMTP](http://nilhcem.github.io/FakeSMTP/) fait très bien l'affaire), - et je crois que c'est tout... Vous pouvez vous rendre sur [http://localhost:8080/web/index.html](http://localhost:8080/web/index.html) et tester votre installation. C'est une première bêta et toute la mécanique pour lancer proprement en démon n'est pas incluse mais devrait venir dans la prochaine. Cette version n'est évidemment pas faite pour être mise en production mais vous pouvez tester à souhait. Si vous vous sentez l'âme aventureuse et voulez tester en mode développement, il vous faudra 2 dépendances de plus : - [sbt](http://www.scala-sbt.org/) pour compiler le tout, - [jsvc](http://commons.apache.org/proper/commons-daemon/jsvc.html) pour lancer le serveur de développement en démon. Si vous avez toutes les dépendances installées, récupérer la dernière version et la lancer devrait être aussi simple que : ```sh $ git clone git@github.com:gnieh/bluelatex.git $ cd bluelatex $ sbt> blueStart> blueStop ``` Si ce n'est pas aussi simple, un rapport de bug est le bienvenu pour améliorer tout ça. Pour la prochaine bêta, et la version finale, nous travaillerons à améliorer la documentation de la configuration du serveur, pour le moment c'est assez peu (comprendre pas du tout) documenté. ## Architecture globale Sans rentrer dans les détails (loin de là), le serveur est conçu de façon modulaire, permettant d'ajouter ou retirer des fonctionnalités entières. Par exemple le cœur du serveur, nécessaire pour pouvoir le faire tourner, contient la gestion des utilisateurs et des papiers. La synchronisation est un module à part car le choix est donné entre notre implémentation du protocole ou l'implémentation originale de mobwrite. Cette possibilité est donnée afin de pouvoir mieux s'intégrer dans une infrastructure existante qui utilisait l'implémentation originale. Le module de compilation est complètement optionnel, car il est fort possible d'imaginer un client lourd qui permet aux différents auteurs de synchroniser leur travail, mais de compiler sur leur machine. De nouveaux modules avec d'autre fonctionnalités sont dans les tuyaux pour les versions à venir, ce sera le moment de vérité afin de voir si notre architecture tient le coup ! \BlueLaTeX est en fait un ensemble de bundles [OSGi](http://www.osgi.org/Main/HomePage) qui devrait pouvoir tourner avec n'importe quelle implémentation de la spécification. Nous utilisons par défaut [felix](http://felix.apache.org/), mais a priori vous devriez pouvoir vous en sortir avec [equinox](http://eclipse.org/equinox/), [knopflerfish](http://www.knopflerfish.org/) ou autre. ## Et la licence ? Le tout vous est fourni sous licence Apache version 2.0 ## Pour finir Toute idée, tout commentaire, toute critique constructive, tout rapport de bug, toute contribution, sera accueilli avec plaisir. N'hésitez pas à [ouvrir un ticket](https://github.com/gnieh/bluelatex/issues/new) ou à nous rejoindre sur irc à #bluelatex@freenode. Merci d'avoir pris le temps de me lire, et j'espère que ce projet vous plaira autant qu'il nous occupe, et que nous pourront l'améliorer grâce à vos retours.