From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@sympa.inria.fr Delivered-To: caml-list@sympa.inria.fr Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by sympa.inria.fr (Postfix) with ESMTPS id 801A1801BD for ; Thu, 6 Jul 2017 14:13:54 +0200 (CEST) Authentication-Results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=adrien@notk.org; spf=Pass smtp.mailfrom=adrien@notk.org; spf=None smtp.helo=postmaster@nautica.notk.org Received-SPF: None (mail3-smtp-sop.national.inria.fr: no sender authenticity information available from domain of adrien@notk.org) identity=pra; client-ip=91.121.71.147; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="adrien@notk.org"; x-sender="adrien@notk.org"; x-conformance=sidf_compatible Received-SPF: Pass (mail3-smtp-sop.national.inria.fr: domain of adrien@notk.org designates 91.121.71.147 as permitted sender) identity=mailfrom; client-ip=91.121.71.147; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="adrien@notk.org"; x-sender="adrien@notk.org"; x-conformance=sidf_compatible; x-record-type="v=spf1" Received-SPF: None (mail3-smtp-sop.national.inria.fr: no sender authenticity information available from domain of postmaster@nautica.notk.org) identity=helo; client-ip=91.121.71.147; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="adrien@notk.org"; x-sender="postmaster@nautica.notk.org"; x-conformance=sidf_compatible IronPort-PHdr: =?us-ascii?q?9a23=3A4BtAPh9jh8waof9uRHKM819IXTAuvvDOBiVQ1KB3?= =?us-ascii?q?0uscTK2v8tzYMVDF4r011RmSDNqds6oMotGVmpioYXYH75eFvSJKW713fDhBt/?= =?us-ascii?q?8rmRc9CtWOE0zxIa2iRSU7GMNfSA0tpCnjYgBaF8nkelLdvGC54yIMFRXjLwp1?= =?us-ascii?q?Ifn+FpLPg8it2e2//5/ebx9UiDahfLh/MAi4oQLNu8cMnIBsMLwxyhzHontJf+?= =?us-ascii?q?RZ22ZlLk+Nkhj/+8m94odt/zxftPw9+cFAV776f7kjQrxDEDsmKWE169b1uhTF?= =?us-ascii?q?UACC+2ETUmQSkhpPHgjF8BT3VYr/vyfmquZw3jSRMMvrRr42RDui9b9mRhHohi?= =?us-ascii?q?kZKjA3827YhdBtg6xUrh2svAB/zo3ObY2JKPZzZKHQcNUHTmRBRMZRUClBD5ug?= =?us-ascii?q?YoQSFeoBPPhXr4/grFUWtxSxGBejBPnywTJPnHD5wLc60+U/HgHAxwEgGdUOsG?= =?us-ascii?q?jXrNnvM6cSS++1wbDOwD7eYf1W3jL955LJchAnufyMRK9wccvVyUkrFQPFlU+c?= =?us-ascii?q?ppDiPzOQzugCrWyb7+tnVeKqkWInrAdxrSa3ysYii4nJhYMVykja+ipkwYY6P8?= =?us-ascii?q?e0SElhYd6rCJdQuCCaN5dyQsw4WG5kojo1yroDuZKjfCkF0psmxxvFZ/yAaYiI?= =?us-ascii?q?7QrvVOGNLjdjhXJld6ywhxCo/Uin0O38Wc+520tJoCpditTBsm0B2wbO5sSZV/?= =?us-ascii?q?dx5EWs1SuV2wzO5exJI0Y5nrfBJZE72L4/jJ8TvFzDHiDonEX2i7ebdkM+9ei1?= =?us-ascii?q?9+TnY6npqYWGO49yjQH+Lqculta4AeQiPQgCR2mb+eKi273/5UD0RKhGgucrnq?= =?us-ascii?q?XHrZzWP8YWqrOjDwNI3Ysu6Q6zDzK839QZmXkHIkhFeBWCj4XxIV7BPer4Dfah?= =?us-ascii?q?jFSqizprwffGPqHiApnXKXjDirjhca5n60FA0Aoz0cxf55VMB74dOv3zX0vxuM?= =?us-ascii?q?XcDh84KAy03/3qCM5914MbQWKAGLWVMKLUsV+S5+IgOfOAZIEPuGW1F/9w7Pfr?= =?us-ascii?q?iTo9mEQBVaivx5oeLn6iTdp8JEDMSHb2g9oHWUEDsgckBLjjhEeDXDh7YXGuXO?= =?us-ascii?q?Q7/D5tW9HuNpvKWo342O/J5yy8BJADPm0=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0B+AgCsKF5Z/5NHeVtcHgYMGQYMgy5jh?= =?us-ascii?q?DUInTiVEIIRLIkWPxgBAQEBAQEBAQEBAWooQhCBYSKCVhcPATQrHAIFEw4CEQU?= =?us-ascii?q?YincMk1CdY4Imi3aBC4Icg0yBYYJwhQgCgmoMMTCCMQWHdoFnhmyORoZNeowyD?= =?us-ascii?q?W+Bc4EPjisClTgfOIEKMSEIKAiFDAwBgkg+gWuEf4I+AQEB?= X-IPAS-Result: =?us-ascii?q?A0B+AgCsKF5Z/5NHeVtcHgYMGQYMgy5jhDUInTiVEIIRLIk?= =?us-ascii?q?WPxgBAQEBAQEBAQEBAWooQhCBYSKCVhcPATQrHAIFEw4CEQUYincMk1CdY4Imi?= =?us-ascii?q?3aBC4Icg0yBYYJwhQgCgmoMMTCCMQWHdoFnhmyORoZNeowyDW+Bc4EPjisClTg?= =?us-ascii?q?fOIEKMSEIKAiFDAwBgkg+gWuEf4I+AQEB?= X-IronPort-AV: E=Sophos;i="5.40,317,1496095200"; d="scan'208";a="230678823" Received: from nautica.notk.org ([91.121.71.147]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 06 Jul 2017 14:13:53 +0200 Received: by nautica.notk.org (Postfix, from userid 1003) id C8828C01B; Thu, 6 Jul 2017 14:13:51 +0200 (CEST) Date: Thu, 6 Jul 2017 14:13:51 +0200 From: Adrien Nader To: caml-list@inria.fr Message-ID: <20170706121351.GA15013@notk.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit User-Agent: Mutt/1.5.21 (2010-09-15) Subject: [Caml-list] [ANN] Prose v1 - a collaborative text editor Hello, I am happy to announce the first release of Prose, a collaborative text editor started after being both frustrated and horrified by Etherpad Lite. Etherpad Lite is heavily used in groups I am involved in or close to: FFDN, DIY ISPs, Éxégètes Amateurs, Framasoft, ... (all being horrible leftists and libre-ists). It occurred to me that its bugs, administration costs and limitations were hampering us. It realistically aims at replacing Etherpad Lite with something better on every aspect for both clients and servers: lower CPU, memory and network usage, more features, fewer bugs and an active development. The code is hosted on https://gitlab.com/adrien-n/prose and can be downloaded either through git or through tarballs on https://gitlab.com/adrien-n/prose/tags . A demo is available on http://prose.yaxm.org/pads/caml-announce . Any document name can be used and the website root is an alias for "default". Its development has been in line with the vision of the new French President to make France a « Startup Nation ». As such, the current release works, has an UI that shouldn't change too much but also has a few caveats that aren't immediately visible. It is a « minimum viable product », i.e. « a product with just enough features to satisfy early customers, and to provide feedback for future development. » [1]. It is believed the AGPLv3 license will scare absolutely no angel investor. I haven't conducted thorough benchmarks because performance is very clearly in favor of Prose: - lower network usage for cold and hot browser caches, almost optimal, - much much lower CPU usage - > 4 times lower server-side memory - > 5 times lower page load time Installation is not documented through an Ansible role which is stored under ansible/ in the sources. Ansible code is not very fun to write but reading it shouldn't be an issue and it guarantees the procedure is always up-to-date. The project wouldn't exist without Ocsigen and QuillJS. QuillJS [ https://quilljs.com/ ] is a rich-text editing widget which features Operational Transform [2] for edition deltas. Ocsigen [ https://ocsigen.org/ ] is already well-known in the OCaml world; it does most of the hard work an everything else is based on it. The code has been quite heavily documented and its entrypoint is prose.eliom. One of the project goal has been to make an ocsigen project that could be used by others to learn. Maybe it has now grown too much for that but it should still be possible to extract interesting blocks and make a nice tutorial using it. Besides general improvements, future version will introduce client-side storage, session-handling and encryption along with more export formats. Tests, bug reports and contributions are warmly welcome. Development is carried on gitlab which handles oauth2 and authentication using accounts from twitter, facebook, github and bitbucket is possible. [1] https://en.wikipedia.org/wiki/Minimum_viable_product [2] https://en.wikipedia.org/wiki/Operational_transformation -- Adrien Nader