Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Discussion: Adding OT to Pair Programming Extension #3080

Closed
shadowcodex opened this issue Nov 15, 2016 · 11 comments
Closed

Discussion: Adding OT to Pair Programming Extension #3080

shadowcodex opened this issue Nov 15, 2016 · 11 comments
Labels
kind/question Questions that haven't been identified as being feature requests or bugs.

Comments

@shadowcodex
Copy link

shadowcodex commented Nov 15, 2016

Pair Programming extension is great, but needs a collision algorithm and I think OT (Operational Transformation) is up for the job.

I'm going to start working on adding the functionality to https://github.com/eclipse/flux. But wanted to drop an issue here for discussion and tracking. I'll reference the issue over at the flux repo when I get over there.

eclipse-archived/flux#24

@shadowcodex
Copy link
Author

@sunix What other backbones were you thinking of adding besides flux?

@TylerJewell Open source OT implementation I was going to use as a reference: https://github.com/Operational-Transformation/ot.js

@shadowcodex
Copy link
Author

shadowcodex commented Nov 16, 2016

I am thinking that we only need to implement the inclusion side of OT.

p = position & c = character to insert & sid = identifier

void T_inc(ins(p1, c1, sid1), ins(p2,c2,sid2)){
  if (p1 < p2) { return ins(p1,c1,sid1);}
  else if (p1 == p2 && sid1 < sid2) { return ins(p1,c1,sid1)}
  else { return ins(p1 + 1, c1, sid1) }
}

we can do the exclusion side too, but doubles everything. But would allow us to support undo and locking.

void T_exc(ins(p1, c1, sid1), ins(p2,c2,sid2)){
  if (p1 < p2) { return ins(p1,c1,sid1);}
  else if (p1 == p2 && sid1 < sid2) { return ins(p1,c1,sid1)}
  else { return ins(p1 - 1, c1, sid1) }
}

@shadowcodex
Copy link
Author

shadowcodex commented Nov 16, 2016

@sunix if we create a che only backbone we could use rethinkdb to hold the operations.

We could set this up as a che_sync agent to be included on workspace composer options.

@shadowcodex
Copy link
Author

ShareDB is a database integration layer dedicated to Operational Transformation: https://github.com/share/sharedb

@tolusha tolusha added the kind/question Questions that haven't been identified as being feature requests or bugs. label Nov 16, 2016
@ghost
Copy link

ghost commented Feb 20, 2017

@shadowcodex do you want this issue to be opened?

@TylerJewell
Copy link

I am ok to leave this issue open as long lived issue to track discussion around pair programming.

@shadowcodex
Copy link
Author

@eivantsov and @TylerJewell . I would leave this up for tracking this discussion as well. However I have become overloaded with system conversions and such at work. So I am unable to work on this going forward. I had high hopes for this, but I just don't have the extra time atm.

@rektide
Copy link

rektide commented Nov 26, 2017

Perhaps an existing collaborative editing spec or project might work well for Che. Some candidates:

(repasting from #2131 (comment) which is a similar, closed issue)

@rektide
Copy link

rektide commented Nov 26, 2017

Oh! redhat-developer/rh-che#438 has a spike experimenting with either Ot.js or teletype (again very limited protocol atm). Yay!

@sunix
Copy link
Contributor

sunix commented Nov 29, 2017

@rektide the protocol is one thing but then how you use it afterwards is another. IMO what you thing is limited in atom in atom/teletype#211 can be solved in Che using the existing piece (teletype-client).

@ghost
Copy link

ghost commented Mar 26, 2018

Closing this one. Please follow #8286

@ghost ghost closed this as completed Mar 26, 2018
This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/question Questions that haven't been identified as being feature requests or bugs.
Projects
None yet
Development

No branches or pull requests

5 participants