Coder Social home page Coder Social logo

crate's People

Contributors

ane-wane avatar chat-wane avatar jbardon avatar maximepvrt avatar momo54 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

crate's Issues

Notify the user of the state of the signaling procedure

To share a document, the user can "share" its access which, in practice, opens a socket to a signaling server ( configurable in the future ). Then, another user can ask to this signaling server to relay its message to the proper peer.

Currently, there are nothing that shows to the user that a connection to the server has been successfully established. Or if the connection has been established, but no peers contacted the server to use this connection before the timeout. Or if everything went well.

Integrated tutorial

Make a step-by-step tutorial to teach how a document can be edited and shared.

Monitoring the underlying processes and structures

In the settings, a monitoring button should be available in order to know the size of the LSEQ identifiers, the anti-entropy rounds, the traffic going through us (distinguished into the membership and broadcast), etc...

This monitoring should help the user to understand how CRATE behaves.

Typing at the exact same moment produces an error

TypeError: Object function n(){} has no method 'first'
at b ($quill.min.js:6:25853)
at a.transform ($quill.min.js:6:27561)
at a.applyDelta ($quill.min.js:8:1331)
at b.insertText ($quill.min.js:9:19084)
at Application.eval ($controller.js:29:10)
at Application.EventEmitter.emit (events.js:101:17)
at Application.eval ($model/application.js:17:11)
at Application.EventEmitter.emit (events.js:98:17)
at Peer.receive ($model/peer.js:127:20)
at Peer.eval ($model/peer.js:55:11)

Enforce security using editing session ids

Some troubles may arise from the save/load of files. Indeed, without this feature, a document exists only if at least one peer keeps it alive, i.e., does not close the browser tab. Thus, when he shares it, the document is fully replicated.

On the opposite, if someone joins the authoring of a document while a local file is already opened, some undesired behaviors can happen. For instance, it is to be expected that the files will merge and both documents will be corrupted, i.e., the characters of both documents are mixed together.

Support different kinds of "sharing" of documents

Currently, you can share a document by giving a link containing an id. This id is used to get access to the sharer through websocket. This link has the particularity to be unlimited in time but for 1 user only. We can imagine a link giving access limited in time, and/or number of joining, and/or access rights etc.

See the evolution of the signaling servers to provide the functionalities.

App running

I installed all the dependencies but app seems to be crashed when loaded in browser.

hud: keep the user informed of the issues

Currently, the user is not aware of networking events. He only knows when he is connected, or not. However, multiple kinds of error can happen between each connection. For instance, it could be nice to notify when the user did not manage to connect because of network configuration, or the shared link seems stale, etc.

Handle keyboard shortcut

Would be nice to have ctrl+N to create a new file, ctrl+O to open a file, ctrl+S to save etc...

Sending large objects fails

When sharing too large documents, the joiner does not retrieve the data.
The suspected reason: the packet to send are too large.
Possible solution: cut this in smaller packets.

Create a plugin out of CRATE

Either using polymer or jquery plugin: create a standalone package embeddable within the html easily, including both the editor and the networking. (Consider branching or another project)

GUI adapted to mobile

Current application uses bootstrap. However, it does not use its mobile-first capabilities. Thus, the GUI is ridiculously small on mobile devices.

Problems on Firefox

Cannot join a session started on Firefox with chrome...
But i can join a session started on chrome with Firefox...

roadmap

I amlooking for a crdt compliant system that allows modelling of data as entities this way.

Also an ice that allows collaborative editing in general.

This is for a project related to 3d cad.
So I need to allow the objects to be collabotated on :)

Its for PhD / research project.

Could you elaborate on the roadmap ?

Changelog

Now that CRATE has an explicit versioning shown in the demo page, a changelog should appear somewhere, either in the application or the github page. (Github commit are not necessarily corresponding to a new version, thus, the changelog make a summary of multiple commits)

Multithread the application

Include the webworker-thread module to allow multithreading the applications: separate the network membership concerns from the editor concerns etc.

editor functionality: add groupware

We are currently using the ace editor. However, it does not have any groupware functionalities as we can find in Quilljs. Such functionalities greatly enrich the user experience since users are aware of the activities of others and can adapt accordingly.

For instance, see the cursor of each other, the authorship of characters etc.

Loss of messages

When typing to fast, with multiple editors running on a same machine, some messages do not reach every editors. Since we assume eventual delivery, it may cause inconsistencies.
TODO: check if the messages are sent, then rebroadcast, then received; at application level and at network level.

Disconnection button

Currently, a user can join but cannot leave the network. Simply add a disconnect button which call the appropriate networking function (not in the common p2pnetwork interface yet). Thus, the user can connect, disconnect, continue the editing offline, reconnect and share its changes.

Support for multiple input characters

Currently, the editor does not support characters that requires multiple keyboard inputs, i.e., ^ + e gives ê. The reason is : when the first character is typed, it has its own identifier and is considered as a self-contained character.
Thus, while the view contains "ê", the model contains "^" and "e". The local editor is able to merge the two characters, but the remote editors consider that they are different.

A dismissed "sharing address" cannot be redisplayed

Currently, if the user dismiss the sharing address, he cannot reach it anymore. Therefore, if he forgets the address, or wants to show the QR-code, he must unshare and share again...

Todo: on click on "signaling server state" in the header, it toggle the visibility of the link container.

Anti-entropy inefficient

The current mechanism to get the missing elements of the document ( to catch up after being offline ) is inefficient. C.f. ./lib/application => getOperation.

Currently the complexity is k.n^2 where k is the average size of the identifier, n is the number of elements.

Could be improved using the whole pack of operations requested.
Could be improved with a direct access to the tail of identifiers.

Filling the fields is mandatory

Currently, if you do not fill the fields of your local ip + mask you will get an exception ( because the application starts to create a socket using empty values ).
TODO: Add a verification of the values and actually starts when the fields are checked

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.