Suggestions for improving Etherpad plugins

UPDATE: Me Gusta! All these things now exist. To improve your Etherpad plugin run

node bin/plugins/checkPlugins.js ep_whatever








In this blog post I will propose some methods to improve Etherpad plugins. This is a musing for myself a brain dump / wish list of things we might want to have in the future.

Test coverage

Does a plugin have test coverage? No test coverage discovered?

How to: Open Github issue including example source code.

Does the plugin have CI? If not create it..

How to: Create .travis file – Possible to automatically register repo as active in travis? Example travis test file

Automatically test plugins when a new version of Etherpad is released.

How to: Github actions?

License

No License?

How to: Suggest Apache 2 license to plugin as pull request

Translations

If plugin has i18n, automatically register plugins to Translate Wiki. If not, suggest supporting i18n.

Readme

Does the README file include a license?

Does the README contain an animated gif of user experience?

Does the plugin contain references to Etherpad as Etherpad lite?

Common faults

Is .ep_initialized included in the repo root? Send PR suggesting to remove it

Does .gitignore exist in root? If not? Send PR suggesting content

Does packages.json include link to repository?

Does package include npm-debug.log? Send PR removing it

JShint/lint?

Spacetime Characterization of Real-Time Collaborative Editing author feedback

This is feedback for the authors of the paper on “Spacetime Characterization of Real-Time Collaborative Editing“. It is an excellent paper full of useful insight for Etherpad.

I’m writing this as an author and maintainer of Etherpad, which for this study was primarily used for providing the data used in the analysis.

I have some suggestions for future research/development of the project with a goal to help improve Etherpad and other RTCE.

I improved the documentation and bugfix the RTCE Analysis and my efforts on this are available on the Etherpad Foundation RTCE Github Repository.

Simulate data to validate analysis.

Spacetime data could be simulated to ensure analysis is accurate.

Suggestion: Generate space-time edits with known values. etherpad-loadtest could do this with just a few hours work probably.

Programming complexity

A single programming language could be used to complete the task.

Suggestion: Rewrite analysis tasks in NodeJS using Etherpad’s built in methods. This would be a few days work.

Supplemental features

Analyzing RTCE along side other communication methods (IE Video conferencing within Etherpad) would be extremely useful. See ep_webrtc, ep_author_follow, ep_comments_page plugins for example..

Suggestion: Speak to WMF to discuss the potential of them rolling out Video chat for a trial period and do a side-by-side comparison to see if there is any difference in findings. This would be a few days prep work then a few months to gather data.

Multiple sources of data.

Using a single source(WMF) for data is not ideal.

Suggestion: Analyze video.etherpad.com, 26LLC (online tutoring platform), WMF and FramaPads content.

Database support

Only supporting a single database store(MySQL) is not ideal as some large instances use Postgres, Maria, Redis etc.

Suggestion: Use Etherpad internals to generate data allowing for analysis of a much larger set of Etherpad instances.

Conclusion

The goal of RTCE software is to reduce the amount of changesets and as such complimentary tools are included as they are often computationally cheaper than editing the pad; some examples are; Chat, Video Chat, Voice Chat and Comments(with suggestions) functionality.

Changesets or RTCE edits are relatively computationally expensive compared to a user doing peer to peer video chat, we want to minimize them so the measurement of success for Etherpad is reducing changesets to complete a document, which is contrary to this paper and may be somewhat surprising to the authors!

Automatically Storing Etherpad Pad contents in Git

This is a how to guide / hack approach for storing Etherpad contents as git commits.

Create git repo

Using your favorite tool / platform. In this instance we use Github to create a new repository called etherpad-storage

Clone git repo

git clone repoURL ~/etherpad-storage

Edit Etherpad settings

Open up settings.json

Replace dirty_db.js with dirty_git_db.js

Replace var/dirty.db with ~/etherpad-storage/dirty.db

Grab the new logic

Grab dirty_git_db.js and put it in your src/node_modules/ueberdb2 folder. Ideally this would be how you do it

curl https://gist.githubusercontent.com/JohnMcLear/3a57977ea4dad39b021b8ee8aac2a730/raw/8a025ec3d4fbeef6cc5520e89ea3eb52c10a7737/dirty_git_db.js -o src/node_modules/ueberdb2/dirty_git_db.js

Install simple-git

From within your Etherpad folder..

cd src/node_modules/ueberdb2 && npm install simple-git

Restart and test.

Restart Etherpad, when you type in a pad your changes should be committed to github and your console should be filled with log messages you will probably want to remove..

Conclusion

This is just a simple hack, it’s not designed for production but it might be useful for someone as reference. The goal ultimately is to create a plugin that provides this functionality. It should be easy enough to do!