# Finding Lego Services
## Background
Replacing core Office oriented components is an opportunity to rethink the offer using the latest technologies and concepts, to respond to the evolving requirements of the community.
White Paper: https://malt.web.cern.ch/malt/internals/2018-12-10-the-road-to-new-cern-office-and-collaborative-applications/
## Working group objectives
Finding "Lego Services" for Office components alternatives, **web based, FOSS** preferred for at least the following use cases:
- Text editing
- Wikis
- Slides editing
- Spreadsheet editing
- Other use cases welcome, like Kanban, etc..
The job can be done in background, and consists of searches, discussions with peers, friends, community, in order to provide in a few weeks time a list of products that will be evaluated later in a specific sprint (participants TBD).
Discussions if any should happen in Mattermost, MAlt-Office channel:
https://mattermost.web.cern.ch/it-dep/channels/malt-office
Please provide the results by filling the list below.
Target date: somewhere around 15th January.
## Results
### Text, notes editing
Preferrably in Markdown format, but other proposals welcome.
Text editor, collaborative editing, (reviewing mode).
#### User requirements
Feedback from a HackMD/CodiMD user:
- Searching (full text)
- Download my content
- Storage space with back up
#### Platforms
- [CodiMD (HackMD)](https://github.com/hackmdio/codimd)
- [Instance at CERN](https://codimd.web.cern.ch)
- Official [CLI for CodiMD](https://github.com/hackmdio/codimd-cli) on GitHub
- Etherpad lite: https://github.com/ether/etherpad-lite
- Cryptpad: https://cryptpad.fr/
- [Try It](https://cryptpad.web.cern.ch/)
- *Note: zero knowledge application, uses the passwd as part of the encryption. This is lost with ldap integration, which is not trival anyway.*
- [Dillinger](https://github.com/joemccann/dillinger) - Dillinger is a cloud-enabled, mobile-ready, offline-storage, AngularJS powered HTML5 Markdown editor.
- Public instance: http://dillinger.io
- [Demo at CERN on OpenShift](https://test-dillinger.web.cern.ch/)
- Supports exporting documents as Markdown, HTML and PDF
- Supports importing and saving files from GitHub, Dropbox, Google Drive and One Drive (provided that the respective configuration has taken place in advance - see [example for GitHub](https://github.com/joemccann/dillinger/blob/master/plugins/github/README.md)). There is an [open feature request for a GitLab plugin](https://github.com/joemccann/dillinger/issues/234).
- [StackEdit](https://github.com/benweet/stackedit) - Full-featured, open-source Markdown editor based on PageDown, the Markdown library used by Stack Overflow and the other Stack Exchange sites.
- Public instance: https://stackedit.io/
- Supports exporting files in Markdown, HTML, PDF, Word, EPUB...
- Supports importing and saving files from GitHub, Dropbox, Google Drive, GitLab etc.
- [Demo at CERN on OpenShift](https://test-stackedit.web.cern.ch/)
- Slightly modified version to hide external integrations (Dropbox, GitHub etc) and to automate the integration with CERN GitLab (Dev). Go to the menu on top right corner and select _Workspaces_ or _Synchronize_, then _Add CERN GitLab account_ and follow the instructions.
- [Here is a pending question](https://community.stackedit.io/t/how-to-set-default-gitlab-application-id-and-server-url-not-visible-to-the-user/435) to the StackEdit community on how to properly set default hidden configuration for GitLab integration.
- [Here is a GitHub issue](https://github.com/benweet/stackedit/issues/122) regarding integration with ownCloud (CERNBox).
- Firepad: https://firepad.io/ (nice to integrate in sites, not sure it's MD)
- Framapad: https://framapad.org/en/
- Turtle: https://turtlapp.com/ (secure collaborative notebook)
- Scrumblr: https://github.com/aliasaria/scrumblr (sticky notes blackboard)
- **Trilium**: https://github.com/zadam/trilium (interestng for documentation editing ?)
- [Demo at CERN on OpenShift](https://test-trilium.web.cern.ch/)
- username: `lego`
- password: `lego`
- _Currently only recent Chrome and Firefox are supported (tested) browsers._ -- [Trilium developer](https://github.com/zadam/trilium/blob/master/README.md)
- > _I've been thinking about various forms of multi user, but I keep coming to the impression that it would open pandora's box of feature requests and the app would lose its focus on being primarily personal note taking system. Having the assumption that there's only single user simplifies many things._ -- [Trilium developer](https://www.reddit.com/r/linux/comments/9c34b8/trilium_notes_new_note_taking_application/e5815kw) on reddit
- Gobby: https://github.com/gobby/gobby
- Conclave: https://github.com/conclave-team/conclave
- No longer maintained
- **DHTMLX** richtext: https://dhtmlx.com/docs/products/dhtmlxRichText/ - Javascript library that also offers solutions for Gantt and Spreadsheet
- [Try It](http://dhtmlxpro.cern.ch/) - Data parsing and serialization in HTML and Markdown formats
- Nice wysiwyg editor with MD export
- Brainstorm: https://github.com/Azeirah/brainstorm.git
- Laverna: https://laverna.cc/
- Permanote: https://github.com/keybits/permanote
- Notable: Local only editing, possible to sync data over CERNBox https://github.com/notable/notable
#### Other
- GitLab - Editing of Markdown (and other) files can be directly done on GitLab with the simple file editor or the [Web IDE](https://docs.gitlab.com/ee/user/project/web_ide/). Also, there is currently an open merge request for GitLab for a [rich WYSIWYG editor for Markdown fields](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/22177).
- In this case, would an external Markdown editor for GitLab be necessary (HackMD-it, StackEdit, Dillinger, etc)?
### Wiki
Related to note taking and editing but also touching the wiki aspect, prompted from a user's thoughts on a "[Possible wiki-like website implementation](https://codimd.web.cern.ch/s/HyNwo_nGE)".
#### User requirements #1
- Modern GUI
- Markdown support
- Text, formulas, charts, figures, attached files, etc
- CERN authentication and authorisation / Sharing with access control
- Searching (full text)
- Versioning / History
#### User requirements #2
- host code snippets and related recipes
- private among a given e-group (or e-groups)
- editing in Markdown (raw and WYSIWYG)
- searchable (full text)
- categorization and structuring of content
- easy to use for both power and non-power users
- history of changes
#### Platforms
- [List on Wikipedia](https://en.wikipedia.org/wiki/List_of_wiki_software)
- https://wikis.cern.ch
- Based on [Confluence](https://www.atlassian.com/software/confluence)
- Managed by BE/CO
- Not available outside of CERN
- [GitLab Wiki](https://docs.gitlab.com/ee/user/project/wiki/)
- Available at gitlab.cern.ch?
- https://twiki.cern.ch/
- https://foswiki.cern.ch/
- http://xwikidev.cern.ch/
- http://matterwiki.com/
- [Demo on Heroku](https://matterwiki.herokuapp.com/)
- _Expect some things to be broken as we're actively working on a stable v0.3.0 release. Although the master branch is expected to work fine, we'd suggest you to wait until everything is completed._ -- [Matterwiki developers](https://github.com/Matterwiki/Matterwiki/blob/master/README.md) on [Aug 5, 2017
](https://github.com/Matterwiki/Matterwiki/commit/9825eaf293665e41b24eb6b2af07bf0eab75e7eb)
- [No new commits since August 2017](https://github.com/Matterwiki/Matterwiki/commits/master)
- [Wiki.js](https://wiki.js.org/) - An open source, modern and powerful wiki app
built on Node.js, Git and Markdown.
- [Demo at CERN on Openshift with CERN OAuth2](https://test-wikijs.web.cern.ch/)
- [MDwiki](http://www.mdwiki.info) - 100% static single file CMS/Wiki done purely with client-side Javascript and HTML5.
- No longer maintained
- [gollum](https://github.com/gollum/gollum) - A git-based Wiki
- [Demo at CERN on OpenShift with CERN SSO](https://test-gollum.web.cern.ch/) (accessible to `it-dep-cda` e-group only)
- [Jekyll](https://jekyllrb.com/) - Transform your plain text into static websites and blogs.
- Quite complicated for a simple wiki
- Example at CERN: https://cern.ch/it-dep-cda/
- [MkDocs](https://www.mkdocs.org/) - MkDocs is a fast, simple and downright gorgeous static site generator that's geared towards building project documentation. Documentation source files are written in Markdown, and configured with a single YAML configuration file.
- [mdBook](https://rust-lang-nursery.github.io/mdBook/) - mdBook is a command line tool and Rust crate to create books using Markdown files. It's very similar to Gitbook but written in Rust.
- [GitBook](https://github.com/GitbookIO/gitbook) - GitBook is a command line tool (and Node.js library) for building beautiful books using GitHub/Git and Markdown (or AsciiDoc).
- Deprecated
- Example at CERN: https://cern.ch/configdocs/
- [docsify](https://github.com/docsifyjs/docsify/) - A magical documentation site generator.
### Slides editing
Preferrably in Markdown format, but other proposals welcome.
#### Commercial examples
- [Slides.com](https://slides.com/) (not FOSS, but that's what we are looking for !) ([pricing](https://slides.com/pricing))
- [Slidebean](https://slidebean.com/) ([pricing](https://slidebean.com/pricing/))
- [Visme](https://www.visme.co/) ([pricing](https://www.visme.co/pricing/))
- [Prezi](https://prezi.com/) ([pricing](https://prezi.com/pricing/))
#### FOSS
- HackMD, CodiMD: https://github.com/hackmdio/codimd
- **Hackmd-it to connect to gitlab**
- Cryptpad: https://cryptpad.fr/
- Editors for [reveal.js](https://revealjs.com/) (library behind Slides.com, HackMD/CodiMD slides, etc)
- List of [Plugins, Tools and Hardware](https://github.com/hakimel/reveal.js/wiki/Plugins,-Tools-and-Hardware) (examples)
- [kreator.js](https://github.com/piatra/kreator.js) - Visual editor; A GUI for reveal.js
- [Hacker-Slides](https://github.com/jacksingleton/hacker-slides) - Visual editor; A simple app that combines Ace Editor and RevealJS
- Strut: https://github.com/tantaman/Strut
- [_15 commits in the last 4 years_](https://github.com/tantaman/Strut/commits/master)
- [_version 2 anounced but last commit 3,5 years ago_](https://github.com/tantaman/strut/commits/master)
- [_no activity from maintainer_](https://github.com/tantaman/strut2/issues/9)
- impress.js, Impressionist:
- https://github.com/impress/impress.js?utm_source=recordnotfound.com
- https://github.com/henrikingo/impressionist
- Framaslides: https://framaslides.org/ (still in Beta)
- [SlideWiki](https://slidewiki.org/) ([Github](https://github.com/slidewiki)):
- _The SlideWiki project has received [funding from the European Union's Horizon 2020 research and innovation programme](https://slidewiki.eu/) under grant agreement No 688095_
- Has compelling features:
- Import existing slide decks from PowerPoint and OpenOffice formats.
- Use the online, collaborative WYSIWYG slide authoring tools.
- Create and edit decks collaborative with colleagues.
- Track the history and changes to your content.
- etc.
- And/But:
- [~] reveal.js is the presentation mode backend library
- [+] There is [active development](https://github.com/slidewiki/slidewiki-platform/commits/master) on the project
- [-] The UI/UX leaves a lot to be desired
- [-] There is an excess of features that is more confusing rather than helpful
- [-] The on-premise deployment [seems a bit complicated](https://github.com/slidewiki/slidewiki-deployment) (simple tests on OpenShift and locally with docker-compose failed). This could lead to a higher maintainance cost.
- [+] [Authentication via OAuth2](https://slidewiki.github.io/2016/08/16/authorization.html) seems to be there.
- [~] Could have easy touch with _Thanasis Priftis, Director of Ynternet.org, Researcher and HEG-GE lecturer in Geneva, Switzerland, Member of SlideWiki’s Advisory Board_?
- https://github.com/gitpitch/ (https://gitpitch.com/) Git MD to Slides (provided by Georgios Kaklamanos on MM)
- [remark](https://github.com/gnab/remark) - A simple, in-browser, markdown-driven slideshow tool targeted at people who know their way around HTML and CSS. (_reveal.js alternative_)
- [WebSlides](https://github.com/webslides/webslides) - Finally, everything you need to make HTML presentations, landings, and longforms in a beautiful way. Just a basic knowledge of HTML and CSS is required. Designers, marketers, and journalists can now focus on the content. (_reveal.js alternative_)
- [Marp](https://github.com/marp-team/marp) - Marp is the ecosystem to write your presentation with plain Markdown.
### Spreadsheet editing
- dhtmlx https://dhtmlx.com/docs/products/dhtmlxSpreadsheet/
- [examples](http://dhtmlxos.cern.ch/spreadsheet/samples/index.html)
- [Try it](https://twiki.cern.ch/Spreadsheet/)
- ethercalc: https://ethercalc.net/
- Framacalc: https://accueil.framacalc.org/en/ (Based on Ethercalc)
- Handsontable: https://github.com/handsontable/handsontable
- React-Data-Grid: https://github.com/adazzle/react-data-grid
- Apache Superset: https://superset.apache.org/
- Maybe a bit overkill, but could cover some advanced Excel usage, like PowerQuery/PowerPivot, graphs, etc.
### Other
Kanbans, Doodle like, etc.
Any productivity tool that can fill a CERN use case.
#### Kanban
- Kanboard: https://kanboard.org/ (Kanban)
- Wekan: https://wekan.github.io/ (kanban)
- Framaboard: https://framaboard.org/ (kanban)
- Cryptpad: https://cryptpad.fr/
- Taiga: https://taiga.io/
- Restyaboard: https://restya.com/board
#### Gant
- Cryptpad: https://cryptpad.fr/
- Ganttlab: https://www.ganttlab.org/ (Gant Diagram)
- We have tried it to organise REANA development but the fact that it displays all tasks in a repo without time constraints made it unusable. We deployed it on CERN OpenShift (code with fix to run on OpenShift [here](https://gitlab.com/diegodelemos/ganttlab-live/tree/adapt-docker-image-to-openshift) http://ganttlab.web.cern.ch/)
- Linked to gitlab issues, mainly developpers oriented
- Taiga: https://taiga.io/
- LibrePlan: https://github.com/LibrePlan/libreplan
- DHTMLX: https://dhtmlx.com/docs/products/dhtmlxGantt/
- [Try it](https://twiki.cern.ch/Gantt/)
#### Collaborative Scheduling
- Framadate: https://github.com/framasoft/framadate (Collaborative scheduling)
- Rally: https://rallly.co/ (collaborative scheduling)
- Bitpoll: https://github.com/fsinfuhh/Bitpoll (collaborative scheduling)
- DHTMLX:
- [Try it](https://twiki.cern.ch/Scheduler/)
#### Surveys
- Framaforms: https://framaforms.org/ (surveys)
- LimeSurvey CE: https://www.limesurvey.org/stable-release
- **TellForm: https://tellform.com/ https://github.com/tellform/tellform**
- JDeSurvey: https://github.com/JD-Software/JDeSurvey
#### Orphans
- Framagenda: https://framagenda.org/login (shared calendar)
- **Framaestro: https://framaestro.org/ (create workspace with the apps you want)**
- Loomio: https://www.loomio.org/ (Collaborative decision helper)
- PrivateBin: https://privatebin.info/ (Pastebin clone)
- Framapic: https://framagit.org/fiat-tux/hat-softwares/lutim (secret picture sharing)
### A Windows App Store ?
Alternatives for a CERN App Store on Windows
- Npackd: https://npackd.appspot.com/
- Oneget: https://github.com/OneGet/oneget (compatible with Chocolatey)
- Wapt: https://www.tranquil.it/solutions/wapt/?lang=en
- Opsi: https://www.opsi.org/ (more complete solution that work on Windows AND linux)
- AppGet: https://appget.net/ (not sure we can install it on premise)
#### Web App Store
- SandStorm appstore https://apps.sandstorm.io/
## Phase 2: Debrief
- DHTMLX does a lot of features, but not collaborative
- This very much depends where you place DHTMLX. It fits well in TWiki
- Request (Nikos) for some twiki or equivalent to store and share thoughts, with authz better than codimd
- Request is for an organized way of pages and data
- See notes and comments at the **Wiki** section above
- Products to evaluate first round
- DHTMLX - [SWOT analysis](https://codimd.web.cern.ch/vTnzwNl8Sy2O--cUUtDMtA#)
- Trillium
- See notes and comments at the **Text** section above
- Hackmd-it
- Turtl
- Strut (http://test-strut.web.cern.ch/)
- See notes and comments at the **Slides** section above
- Slidewiki
- See notes and comments at the **Slides** section above
- Other analysis
- Cryptpad - [SWOT analysis](https://codimd.web.cern.ch/s/SkzySdN7N#)
## Phase 3: Shortlisting
| Product | Developper profile | Standard user profile | Poweruser | CERN integration |
|---------|--------------------|---------------------|---|--------|
| CodiMD | X | - | |Gitlab via Hackmd-it, SSO via SAML or OAuth, export content via API |
| Turtl | - | X | |SSO via SAML 2.0, export content via Turtl API or complete user backup in Markdown using Turtl-Backup project|
|Wekan| X | X | |SSO via Oauth2 in PR. SAML works in sandstorm already. integration with nextcloud/owncloud on the way > cernbox ?|
|Loomio | X | X | |Data export possible via JSON file. SSO is supported on their instance, but no details. Integration is supported with SLACK or MS. nothing else.|
|Cryptpad |X|X||Export file as HTML or PDF.
|LaTeX (overleaf)|-|-|X(word, powerpoint)|Allready deployed.
|Strut |X|X|-|
|DHTMLX|X|X|-|cernbox and TWiki. Should be ok in Foswiki |
### Input from Nikos
Original: https://codimd.web.cern.ch/sMFnKn9STpyUC_lVZSLTRQ
**On note taking and Markdown editing and integration with GitLab**
- CodiMD seems to be covering a need at CERN for note taking (in Markdown) that is not covered by any other tool currently. That, in combination with the intuitive interface and export options (slides, PDF) make it an excellent candidate for a Lego service we can invest in.
- The hackmd-it browser extension doesn't seem to be open source (such that we can easily tweak it) and works best with <https://codimd.io/>, <https://github.com/> and <https://gitlab.com/>. In the extension settings you can define the URL to your own HackMD/CodiMD instance but all I managed to do is open an .md file from a GitHub project into <https://codimd.web.cern.ch/> without any option to save it back.
- CodiMd offers integration with a custom GitLab instance (environmental variables for instance URL, client ID, etc) but only for authentication and not import/export. One could imagine that we could even invest the effort of implementing an integration for import/export as well? (relevant to StackEdit)
- There is a very recent and promising official CodiMD CLI that could be the base for future integrations of our own.
- Dillinger is an in-browser Markdown editor that comes with integration for GitHub, Dropbox etc. No GitLab integration yet but there is an open feature request for a GitLab plugin.
- Deployable locally: <https://test-dillinger.web.cern.ch/>
- If a GitLab integration existed this could function as a user-friendly interface to edit Markdown files off a GitLab repository.
- StackEdit is an in-browser Markdown editor that comes with integration for GitHub, Dropbox, GitLab (as of September 2018!) etc.
- Deployable locally: <https://test-stackedit.web.cern.ch/>
- It can already integrate with a custom GitLab instance and offer an interface to edit Markdown files in a repository. At CERN I've set up an integration with <https://gitlab-dev.cern.ch/> (see how to test it in the Lego services notes on CodiMD). The integration has room for improvement but it's a solid working prototype of how a user friendly interface for editing Markdown files off a GitLab repository should look like.
- Could we port StackEdit's GitLab provider implementation to CodiMD with a moderate amount of effort (given that the authentication integration is already there)?
- Having said the above, GitLab already features a basic Markdown editor (with preview) as well as a richer Web IDE and there is work in progress for a rich WYSIWYG editor for Markdown fields on GitLab. Is this (or will this be) a good enough and user friendly enough way to edit Markdown pages on GitLab?
**More on note taking**
- Trilium seems to be very raw and overwhelming in features - I think there is a considerable learning / usage curve for the average user. Also, the main developer himself considers it a purely "personal" note taking system and not collaborative. Finally, browser support is a bit restrictive.
- Deployable locally: <https://test-trilium.web.cern.ch/> (username: lego / password: lego)
**On documentation tools and wikis**
- Matterwiki seems to be frozen for the past 1,5 years in version 0.2.3. I would consider it deprecated.
- Wiki.js seems quite active and promising and a new version should be coming soon (2.0.0-beta.11 released this 23 days ago). It is Markdown-based and the user interface is quite user friendly. If version 2 is what it promises to be then this could be a interesting choice for project/service/team documentation.
- Deployable locally: <https://test-wikijs.web.cern.ch/> (with CERN OAuth 2 authentication). Basic e-group-based authorisation could be easily implemented.
- gollum is fairly established and relatively active, nevertheless simple. It's a git-based wiki that supports all forms of markup and of course git-based history. Probably a bit niche.
- Deployable locally: <https://test-gollum.web.cern.ch/>
- Jekyll / MkDocs / mdBook / GitBook: platforms that are targeted at writing your Markdown files, adding a custom structure description and building them into a very nice looking website. GitBook is now deprecated, Jekyll is more complicated than the others and mdBook is lacking fancy plugins. MkDocs seems to be a very promising solution that we could suggest as a GitBook replacement for existing documentation projects in IT (and beyond?) (at the ASDF meeting with Maria Dimou). If the Markdown files could be edited at their source (GitLab) in a user friendly way (see CodiMD, StackEdit) it could further lower the bar of user friendliness (in combination with easier initial deployment without the need for creating a service account etc).
**On slides**
- As far as I could tell the commercial services (Slides.com , Slidebean, Visme, Prezi) are a sizeable step above the free and open source solutions.
- The people of reveal.js maintain a list of editors (some of them GUI and web-based).
- See for example <https://github.com/piatra/kreator.js>. But it seems to be no longer maintained and I wouldn't call the interface user friendly in the first place...
- Strut has 15 commits in the last 4 years and although version 2 was announced, the last commit was 3,5 years ago.
- SlideWiki is a very interesting project. It's the outcome of an EU project and it's quite active in development. It's open source and has a lot of features (perhaps too many): import from PowerPoint and OpenOffice, online collaborative WYSIWYG slide authoring, history and track etc. We could even have a local contact with them: Thanasis Priftis, Director of Ynternet.org, Researcher and HEG-GE lecturer in Geneva, Switzerland, Member of SlideWiki’s Advisory Board. It is however a bit raw and the interface could be confusing. But "in principle" it could be what we are looking for.
- Marp is a very active project for Markdown-based presentations but with a quick look it doesn't seem to offer much more than creating slides with CodiMD (current demo).
### Input from Vincent
#### DHTMLx
- candidate for multiple purposes
- Scheduler
- Missing invitation to meeting ?
- Resources management
- Rich Text Editor (with easy MD export)
- Spreadsheets
- Does it make sense compared to OnlyOffice which will be provided on Web version ?
- Pivot table not bad (not worst than LibreOffice)
- Already set up for Gantt charts
- Gantt Chart Viewer is ready for initial tests (https://gantt-viewer.web.cern.ch/)
- Integration on CERNBox preview on coming week