chat-wane / crate Goto Github PK
View Code? Open in Web Editor NEWCRATE is a real-time distributed CollaboRATive Editor
Home Page: http://chat-wane.github.io/CRATE
CRATE is a real-time distributed CollaboRATive Editor
Home Page: http://chat-wane.github.io/CRATE
When I try to deploy this project. I got an error message Failed to load resource: net::ERR_CONNECTION_REFUSED. I think this is about the connection to https://ancient-shelf-9067.herokuapp.com.
Error detail: get http://127.0.0.1:5000/socket.io/?EIO=3&transport=polling&t=1525075475984-0 failed
The user can stop sharing the access to its document by pressing a button.
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.
Make a step-by-step tutorial to teach how a document can be edited and shared.
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.
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)
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.
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.
I installed all the dependencies but app seems to be crashed when loaded in browser.
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.
Would be nice to have ctrl+N to create a new file, ctrl+O to open a file, ctrl+S to save etc...
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.
When a peer already uses a link with ? and shares a document, the one who connects to him is only able to connect one over the two necessary links.
Probably an issue related to the signaling server.
If two users have a cursor in the same place and start writing, the letters are mixed. Cursor of parties move together.
Generate a QR-code representing the sharing address.
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)
I don't find in the README or the wiki a how-to for running CRATE.
Current application uses bootstrap. However, it does not use its mobile-first capabilities. Thus, the GUI is ridiculously small on mobile devices.
Currently, you only can insert or delete one character at a time.
TODO: handle selection+remove, copy/paste etc.
Cannot join a session started on Firefox with chrome...
But i can join a session started on chrome with Firefox...
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 ?
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)
The buttons related to webrtc call should be disabled until the application gets an answer.
Include the webworker-thread module to allow multithreading the applications: separate the network membership concerns from the editor concerns etc.
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.
http://chat-wane.github.io/CRATE/index.html?pertinerent
becomes
http://chat-wane.github.io/CRATE/index.html?106454740126
which is an unexpected ( it should keep pertinerent )
Currently, our signaling server is hosted on heroku. TODO: give the possibility to the user to configure the address himself. Also, inform how/where he can host them himself.
/?&&
Clicking on such link should open 3 editors joining their respective editing session.
Currently, it gets the first one only.
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.
After some investigations, it seems that the 3g-connections becomes idle very quickly producing errors. Therefore, the signaling server cannot do his job in such cases.
TODO: configure heroku and socket.io to handle such connections
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.
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.
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.
Use the localstorage to keep the recent documents. When joining a network, open the according file.
it isnt running ,can somebody help with it?
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.
Be sure that the user do not type anything wrong in the configuration.
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
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.