Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ShareJS launch talk

Talk at SydJS launching ShareJS - a framework for collaboratively editing documents and stuff.

Related Books

Free with a 30 day trial from Scribd

See all
  • Login to see the comments

ShareJS launch talk

  1. 1. ShareJSCollaborative Anything
  2. 2. Ace ShareJS Client OT ShareJS Server Redis OT
  3. 3. Ace[{i:"H", p:0}] ShareJS Client[{i:"i", p:1}] OT ShareJS Server Redis OT
  4. 4. Ace[{i:"H", p:0}] ShareJS Client[{i:"i", p:1}] OT ShareJS Server Redis OT
  5. 5. Other Ace Editor[{i:"H", p:0}] ShareJS Client[{i:"i", p:1}] OT ShareJS Server Redis OT
  6. 6. Other Ace Editor[{i:"H", p:0}] ShareJS Client[{i:"i", p:1}] OT ShareJS Server Redis OT
  7. 7. Other Ace Editor[{i:"H", p:0}] ShareJS Client[{i:"i", p:1}] OT Socket.io ShareJS Server Redis OT
  8. 8. Other Ace Editor[{i:"H", p:0}] ShareJS Client[{i:"i", p:1}] OT Socket.io REST ShareJS Server Redis OT
  9. 9. Other Ace Editor[{i:"H", p:0}] ShareJS Client[{i:"i", p:1}] OT Socket.io No stre REST aming ShareJS Server Redis OT
  10. 10. [{i:"H", p:0}] Client Server [{i:"i", p:1}]Ace ShareJS ClientSocket.io ShareJS Server
  11. 11. [{i:"H", p:0}] Client Server [{i:"i", p:1}] doc:‘hello’, snapshot:nullAce ShareJS ClientSocket.io ShareJS Server
  12. 12. [{i:"H", p:0}] Client Server [{i:"i", p:1}] doc:‘hello’, snapshot:nullAce doc:‘hello’, v:10, snapshot:‘’ ShareJS ClientSocket.io ShareJS Server
  13. 13. [{i:"H", p:0}] Client Server [{i:"i", p:1}] doc:‘hello’, snapshot:nullAce doc:‘hello’, v:10, snapshot:‘’ ShareJS Client open:true, v:10Socket.io ShareJS Server
  14. 14. [{i:"H", p:0}] Client Server [{i:"i", p:1}] doc:‘hello’, snapshot:nullAce doc:‘hello’, v:10, snapshot:‘’ ShareJS Client open:true, v:10 open:true, v:10Socket.io ShareJS Server
  15. 15. [{i:"H", p:0}] Client Server [{i:"i", p:1}] doc:‘hello’, snapshot:nullAce doc:‘hello’, v:10, snapshot:‘’ ShareJS Client open:true, v:10 open:true, v:10Socket.io op:[{i:‘Hi’, p:0}], v:10 ShareJS Server
  16. 16. [{i:"H", p:0}] Client Server [{i:"i", p:1}] doc:‘hello’, snapshot:nullAce doc:‘hello’, v:10, snapshot:‘’ ShareJS Client open:true, v:10 open:true, v:10Socket.io op:[{i:‘Hi’, p:0}], v:10 op:[{d:"i", p:1}], v:11 ShareJS Server
  17. 17. [{i:"H", p:0}] Client Server [{i:"i", p:1}] doc:‘hello’, snapshot:nullAce doc:‘hello’, v:10, snapshot:‘’ ShareJS Client open:true, v:10 open:true, v:10Socket.io op:[{i:‘Hi’, p:0}], v:10 op:[{d:"i", p:1}], v:11 op:null, v:11 ShareJS Server
  18. 18. [{i:"H", p:0}] Client Server [{i:"i", p:1}] doc:‘hello’, snapshot:nullAce doc:‘hello’, v:10, snapshot:‘’ ShareJS Client open:true, v:10 open:true, v:10Socket.io op:[{i:‘Hi’, p:0}], v:10 op:[{d:"i", p:1}], v:11 op:null, v:11 ShareJS Server op:[{d:"H”, p:0}], v:12
  19. 19. [{i:"H", p:0}] Client Server [{i:"i", p:1}] doc:‘hello’, snapshot:nullAce doc:‘hello’, v:10, snapshot:‘’ ShareJS Client open:true, v:10 open:true, v:10Socket.io op:[{i:‘Hi’, p:0}], v:10 op:[{d:"i", p:1}], v:11 op:null, v:11 ShareJS Server op:[{d:"H”, p:0}], v:12 op:null, v:12
  20. 20. Ace ShareJS Client OT Socket.io REST ShareJS Server Redis OT
  21. 21. Ace ShareJS Client OT Socket.io REST Redis ShareJS Server OT Memory
  22. 22. Ace ShareJS Client OT Socket.io REST Redis ShareJS Server OT Memory % bin/sharejs
  23. 23. Ace ShareJS Client OT Socket.io REST ShareJS Server Memory OT Your Web App
  24. 24. Ace ShareJS Client OT ShareJS Server OT
  25. 25. OperationalOT = Transformation{
  26. 26. OperationalOT = Transformation{ = What happens if 2 people edit at the same time?
  27. 27. Operational OT = Transformation{ =Set of types What happens if 2 people edit at the same time?
  28. 28. Operational OT = Transformation{ = • TextSet of types What happens if 2 people edit at the same time?
  29. 29. Operational OT = Transformation{ = • TextSet of types What happens if 2 people • Rich text edit at the same time?
  30. 30. Operational OT = Transformation{ = • TextSet of types What happens if 2 people • Rich text edit at the same time? • JSON
  31. 31. Operational OT = Transformation{ = • TextSet of types What happens if 2 people • Rich text edit at the same time? • JSON • Your data
  32. 32. Operational OT = Transformation{ = • TextSet of types What happens if 2 people • Rich text edit at the same time? • JSON • Your data Only type right now
  33. 33. Operational OT = TransformationClient Server v10 ‘ACD’ v10 op:[{d:‘AC’, p:0}] op:[{i:‘B’, p:1}] ‘D’ ‘ABCD’ op:[{i:‘B’, p:0}] v11
  34. 34. Operational OT = TransformationClient Server v10 ‘ACD’ v10 op:[{d:‘AC’, p:0}] op:[{i:‘B’, p:1}] ‘D’ ‘ABCD’ op:[{d:‘A’, p:0}, op:[{i:‘B’, p:0}] v11 {d:‘C’, p:1}] v11
  35. 35. Operational OT = TransformationClient Server v10 ‘ACD’ v10 op:[{d:‘AC’, p:0}] op:[{i:‘B’, p:1}] ‘D’ ‘ABCD’ op:[{d:‘A’, p:0}, op:[{i:‘B’, p:0}] v11 {d:‘C’, p:1}] ‘BD’ v11
  36. 36. Ace ShareJS Client OT Socket.io REST Redis ShareJS Server OT Memory
  37. 37. Acesrc/client ShareJS Client OT Socket.io Socket.io REST Redis ShareJS Server OT Memory
  38. 38. Acesrc/client ShareJS Client OT Socket.io Socket.io RESTsrc/server Redis ShareJS Server OT Memory
  39. 39. Acesrc/client ShareJS Client Socket.io Operationalsrc/types OT = Transformation Socket.io RESTsrc/server Redis ShareJS Server Memory
  40. 40. Really beta warning
  41. 41. Really beta warning• No authentication• Need a rich text OT type• Could be way faster • Saves a snapshot with every op • O(N ) with the number of people typing in a 2 doc at the same time• Redis requires history to all fit in RAM. Mongodb?• Faye > SocketIO?• No undo support, even though thats really easy.
  42. 42. Really beta warning• No authentication• Need a rich text OT type• Could be way faster • Saves a snapshot with every op • O(N ) with the number of people typing in a 2 doc at the same time• Redis requires history to all fit in RAM. Mongodb?• Faye > SocketIO?• No undo support (should be easy!)
  43. 43. Really beta warning• No authentication• Need a rich text OT type• Could be way faster • Saves a snapshot with every op • O(N ) with the number of people typing in a 2 doc at the same time• Redis requires history to all fit in RAM. Mongodb?• Faye > SocketIO?• No undo support (should be easy!)
  44. 44. Really beta warning• No authentication• Need a rich text OT type• Could be way faster • Saves a snapshot with every op • O(N ) with the number of people typing in a 2 doc at the same time• Redis requires history to all fit in RAM. Mongodb?• Faye > SocketIO?• No undo support (should be easy!)
  45. 45. Help out!• http://sharejs.org/• Join the mailing list (link from the website)• ShareJSLib on twitter• Most importantly: Contribute code! • https://github.com/josephg/ShareJS

×