SlideShare una empresa de Scribd logo
1 de 45
ShareJS
Collaborative Anything
Ace



           ShareJS Client
      OT




           ShareJS Server   Redis
      OT
Ace


[{i:"H", p:0}]
                        ShareJS Client
[{i:"i", p:1}]
                   OT




                        ShareJS Server   Redis
                   OT
Ace


[{i:"H", p:0}]
                        ShareJS Client
[{i:"i", p:1}]
                   OT




                        ShareJS Server   Redis
                   OT
Other
             Ace                         Editor


[{i:"H", p:0}]
                        ShareJS Client
[{i:"i", p:1}]
                   OT




                        ShareJS Server            Redis
                   OT
Other
             Ace                         Editor


[{i:"H", p:0}]
                        ShareJS Client
[{i:"i", p:1}]
                   OT




                        ShareJS Server            Redis
                   OT
Other
             Ace                         Editor


[{i:"H", p:0}]
                        ShareJS Client
[{i:"i", p:1}]
                   OT

                 Socket.io


                        ShareJS Server            Redis
                   OT
Other
             Ace                         Editor


[{i:"H", p:0}]
                        ShareJS Client
[{i:"i", p:1}]
                   OT

                 Socket.io
                                REST

                        ShareJS Server            Redis
                   OT
Other
             Ace                         Editor


[{i:"H", p:0}]
                        ShareJS Client
[{i:"i", p:1}]
                   OT

                 Socket.io          No stre
                                REST       aming


                        ShareJS Server            Redis
                   OT
[{i:"H", p:0}]    Client   Server
      [{i:"i", p:1}]

Ace
       ShareJS Client



Socket.io


       ShareJS Server
[{i:"H", p:0}]    Client                       Server
      [{i:"i", p:1}]
                        doc:‘hello’, snapshot:null
Ace
       ShareJS Client



Socket.io


       ShareJS Server
[{i:"H", p:0}]    Client                       Server
      [{i:"i", p:1}]
                        doc:‘hello’, snapshot:null
Ace                        doc:‘hello’, v:10, snapshot:‘’
       ShareJS Client



Socket.io


       ShareJS Server
[{i:"H", p:0}]    Client                       Server
      [{i:"i", p:1}]
                        doc:‘hello’, snapshot:null
Ace                        doc:‘hello’, v:10, snapshot:‘’
       ShareJS Client
                        open:true, v:10


Socket.io


       ShareJS Server
[{i:"H", p:0}]    Client                       Server
      [{i:"i", p:1}]
                        doc:‘hello’, snapshot:null
Ace                        doc:‘hello’, v:10, snapshot:‘’
       ShareJS Client
                        open:true, v:10
                                          open:true, v:10
Socket.io


       ShareJS Server
[{i:"H", p:0}]    Client                       Server
      [{i:"i", p:1}]
                        doc:‘hello’, snapshot:null
Ace                        doc:‘hello’, v:10, snapshot:‘’
       ShareJS Client
                        open:true, v:10
                                          open:true, v:10
Socket.io                        op:[{i:‘Hi’, p:0}], v:10




       ShareJS Server
[{i:"H", p:0}]    Client                       Server
      [{i:"i", p:1}]
                        doc:‘hello’, snapshot:null
Ace                        doc:‘hello’, v:10, snapshot:‘’
       ShareJS Client
                        open:true, v:10
                                          open:true, v:10
Socket.io                        op:[{i:‘Hi’, p:0}], v:10

                        op:[{d:"i", p:1}], v:11

       ShareJS Server
[{i:"H", p:0}]    Client                       Server
      [{i:"i", p:1}]
                        doc:‘hello’, snapshot:null
Ace                        doc:‘hello’, v:10, snapshot:‘’
       ShareJS Client
                        open:true, v:10
                                          open:true, v:10
Socket.io                        op:[{i:‘Hi’, p:0}], v:10

                        op:[{d:"i", p:1}], v:11
                                            op:null, v:11
       ShareJS Server
[{i:"H", p:0}]    Client                       Server
      [{i:"i", p:1}]
                        doc:‘hello’, snapshot:null
Ace                        doc:‘hello’, v:10, snapshot:‘’
       ShareJS Client
                        open:true, v:10
                                          open:true, v:10
Socket.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
[{i:"H", p:0}]    Client                       Server
      [{i:"i", p:1}]
                        doc:‘hello’, snapshot:null
Ace                        doc:‘hello’, v:10, snapshot:‘’
       ShareJS Client
                        open:true, v:10
                                          open:true, v:10
Socket.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
Ace



           ShareJS Client
      OT

  Socket.io
                   REST

           ShareJS Server   Redis
      OT
Ace



           ShareJS Client
      OT

  Socket.io
                   REST
                             Redis
           ShareJS Server
      OT                    Memory
Ace



           ShareJS Client
      OT

  Socket.io
                   REST
                             Redis
           ShareJS Server
      OT                    Memory


  % bin/sharejs
Ace



           ShareJS Client
      OT

  Socket.io
                   REST

           ShareJS Server    Memory
      OT


              Your Web App
Ace



           ShareJS Client
      OT




           ShareJS Server
      OT
Operational
OT   =
         Transformation
{
Operational
OT   =
         Transformation
{
                =
          What happens if 2 people
           edit at the same time?
Operational
               OT   =
                        Transformation
{
                               =
Set of types
                         What happens if 2 people
                          edit at the same time?
Operational
                 OT     =
                            Transformation
{
                                   =
               • Text
Set of types
                             What happens if 2 people
                              edit at the same time?
Operational
                 OT      =
                             Transformation
{
                                    =
               • Text
Set of types
                              What happens if 2 people
               • Rich text     edit at the same time?
Operational
                 OT      =
                             Transformation
{
                                    =
               • Text
Set of types
                              What happens if 2 people
               • Rich text     edit at the same time?
               • JSON
Operational
                 OT     =
                             Transformation
{
                                    =
               • Text
Set of types
                              What happens if 2 people
               • Rich text     edit at the same time?
               • JSON
               • Your data
Operational
                 OT     =
                             Transformation
{
                                    =
               • Text
Set of types
                              What happens if 2 people
               • Rich text     edit at the same time?
               • JSON
               • Your data

                             Only type right now
Operational
                  OT     =
                               Transformation
Client                                                   Server

 v10
                             ‘ACD’
                                                         v10
        op:[{d:‘AC’, p:0}]           op:[{i:‘B’, p:1}]



                   ‘D’               ‘ABCD’

         op:[{i:‘B’, p:0}]
  v11
Operational
                  OT     =
                               Transformation
Client                                                   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
Operational
                  OT     =
                               Transformation
Client                                                   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
Ace



           ShareJS Client
      OT

  Socket.io
                   REST
                             Redis
           ShareJS Server
      OT                    Memory
Ace



src/client          ShareJS Client
               OT

             Socket.io
               Socket.io
                                 REST
                                           Redis
                         ShareJS Server
                    OT                    Memory
Ace



src/client          ShareJS Client
               OT

             Socket.io




             Socket.io         REST
src/server                             Redis
                    ShareJS Server
               OT                     Memory
Ace



src/client             ShareJS Client


              Socket.io

                            Operational
src/types         OT     =
                           Transformation

              Socket.io           REST
src/server                                Redis
                       ShareJS Server
                                         Memory
Really beta warning
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.
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!)
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!)
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!)
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

Más contenido relacionado

Destacado

Everyday English
Everyday EnglishEveryday English
Everyday Englishlady3140
 
CLOrox fy05_q3_spmt
CLOrox   fy05_q3_spmtCLOrox   fy05_q3_spmt
CLOrox fy05_q3_spmtfinance48
 
BNZ, hoe wordt je vrienden met Google presentation 13-05-2015
BNZ, hoe wordt je vrienden met Google  presentation 13-05-2015BNZ, hoe wordt je vrienden met Google  presentation 13-05-2015
BNZ, hoe wordt je vrienden met Google presentation 13-05-2015John Meijering ✔
 
PM processing 03 2015(eng)
PM processing 03 2015(eng)PM processing 03 2015(eng)
PM processing 03 2015(eng)Vadim Andreev
 
Mahabharat Winning Strategies
Mahabharat Winning StrategiesMahabharat Winning Strategies
Mahabharat Winning StrategiesRajesh Goyal
 
広島アニメ関連イベントカレンダー(仮)はじめました
広島アニメ関連イベントカレンダー(仮)はじめました広島アニメ関連イベントカレンダー(仮)はじめました
広島アニメ関連イベントカレンダー(仮)はじめましたYoshitake Takata
 
Disobedience Invitation
Disobedience InvitationDisobedience Invitation
Disobedience Invitationtianvh
 
autozone Bylaws4
autozone  Bylaws4autozone  Bylaws4
autozone Bylaws4finance46
 
omnicare annual reports 2000
omnicare annual reports  2000omnicare annual reports  2000
omnicare annual reports 2000finance46
 
liz claiborne AR_2004
liz claiborne  AR_2004liz claiborne  AR_2004
liz claiborne AR_2004finance48
 
molson coors brewing COORS_AR2001
molson coors brewing  COORS_AR2001molson coors brewing  COORS_AR2001
molson coors brewing COORS_AR2001finance46
 
Fetish Furniture Portfolio
Fetish Furniture  PortfolioFetish Furniture  Portfolio
Fetish Furniture PortfolioCharles Powers
 
autozone CorporateGovernancePrinciples1208
autozone  CorporateGovernancePrinciples1208autozone  CorporateGovernancePrinciples1208
autozone CorporateGovernancePrinciples1208finance46
 
molson coors brewing ProxyStatement1
molson coors brewing   ProxyStatement1molson coors brewing   ProxyStatement1
molson coors brewing ProxyStatement1finance46
 

Destacado (16)

Everyday English
Everyday EnglishEveryday English
Everyday English
 
CLOrox fy05_q3_spmt
CLOrox   fy05_q3_spmtCLOrox   fy05_q3_spmt
CLOrox fy05_q3_spmt
 
BNZ, hoe wordt je vrienden met Google presentation 13-05-2015
BNZ, hoe wordt je vrienden met Google  presentation 13-05-2015BNZ, hoe wordt je vrienden met Google  presentation 13-05-2015
BNZ, hoe wordt je vrienden met Google presentation 13-05-2015
 
PM processing 03 2015(eng)
PM processing 03 2015(eng)PM processing 03 2015(eng)
PM processing 03 2015(eng)
 
Mahabharat Winning Strategies
Mahabharat Winning StrategiesMahabharat Winning Strategies
Mahabharat Winning Strategies
 
2009 Lenca Update
2009 Lenca Update2009 Lenca Update
2009 Lenca Update
 
広島アニメ関連イベントカレンダー(仮)はじめました
広島アニメ関連イベントカレンダー(仮)はじめました広島アニメ関連イベントカレンダー(仮)はじめました
広島アニメ関連イベントカレンダー(仮)はじめました
 
Disobedience Invitation
Disobedience InvitationDisobedience Invitation
Disobedience Invitation
 
autozone Bylaws4
autozone  Bylaws4autozone  Bylaws4
autozone Bylaws4
 
omnicare annual reports 2000
omnicare annual reports  2000omnicare annual reports  2000
omnicare annual reports 2000
 
liz claiborne AR_2004
liz claiborne  AR_2004liz claiborne  AR_2004
liz claiborne AR_2004
 
molson coors brewing COORS_AR2001
molson coors brewing  COORS_AR2001molson coors brewing  COORS_AR2001
molson coors brewing COORS_AR2001
 
Fetish Furniture Portfolio
Fetish Furniture  PortfolioFetish Furniture  Portfolio
Fetish Furniture Portfolio
 
Clipagem
ClipagemClipagem
Clipagem
 
autozone CorporateGovernancePrinciples1208
autozone  CorporateGovernancePrinciples1208autozone  CorporateGovernancePrinciples1208
autozone CorporateGovernancePrinciples1208
 
molson coors brewing ProxyStatement1
molson coors brewing   ProxyStatement1molson coors brewing   ProxyStatement1
molson coors brewing ProxyStatement1
 

Último

The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 

Último (20)

The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 

ShareJS launch talk

  • 2. Ace ShareJS Client OT ShareJS Server Redis OT
  • 3. Ace [{i:"H", p:0}] ShareJS Client [{i:"i", p:1}] OT ShareJS Server Redis OT
  • 4. Ace [{i:"H", p:0}] ShareJS Client [{i:"i", p:1}] OT ShareJS Server Redis OT
  • 5. Other Ace Editor [{i:"H", p:0}] ShareJS Client [{i:"i", p:1}] OT ShareJS Server Redis OT
  • 6. Other Ace Editor [{i:"H", p:0}] ShareJS Client [{i:"i", p:1}] OT ShareJS Server Redis OT
  • 7. Other Ace Editor [{i:"H", p:0}] ShareJS Client [{i:"i", p:1}] OT Socket.io ShareJS Server Redis OT
  • 8. Other Ace Editor [{i:"H", p:0}] ShareJS Client [{i:"i", p:1}] OT Socket.io REST ShareJS Server Redis OT
  • 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. [{i:"H", p:0}] Client Server [{i:"i", p:1}] Ace ShareJS Client Socket.io ShareJS Server
  • 11. [{i:"H", p:0}] Client Server [{i:"i", p:1}] doc:‘hello’, snapshot:null Ace ShareJS Client Socket.io ShareJS Server
  • 12. [{i:"H", p:0}] Client Server [{i:"i", p:1}] doc:‘hello’, snapshot:null Ace doc:‘hello’, v:10, snapshot:‘’ ShareJS Client Socket.io ShareJS Server
  • 13. [{i:"H", p:0}] Client Server [{i:"i", p:1}] doc:‘hello’, snapshot:null Ace doc:‘hello’, v:10, snapshot:‘’ ShareJS Client open:true, v:10 Socket.io ShareJS Server
  • 14. [{i:"H", p:0}] Client Server [{i:"i", p:1}] doc:‘hello’, snapshot:null Ace doc:‘hello’, v:10, snapshot:‘’ ShareJS Client open:true, v:10 open:true, v:10 Socket.io ShareJS Server
  • 15. [{i:"H", p:0}] Client Server [{i:"i", p:1}] doc:‘hello’, snapshot:null Ace doc:‘hello’, v:10, snapshot:‘’ ShareJS Client open:true, v:10 open:true, v:10 Socket.io op:[{i:‘Hi’, p:0}], v:10 ShareJS Server
  • 16. [{i:"H", p:0}] Client Server [{i:"i", p:1}] doc:‘hello’, snapshot:null Ace doc:‘hello’, v:10, snapshot:‘’ ShareJS Client open:true, v:10 open:true, v:10 Socket.io op:[{i:‘Hi’, p:0}], v:10 op:[{d:"i", p:1}], v:11 ShareJS Server
  • 17. [{i:"H", p:0}] Client Server [{i:"i", p:1}] doc:‘hello’, snapshot:null Ace doc:‘hello’, v:10, snapshot:‘’ ShareJS Client open:true, v:10 open:true, v:10 Socket.io op:[{i:‘Hi’, p:0}], v:10 op:[{d:"i", p:1}], v:11 op:null, v:11 ShareJS Server
  • 18. [{i:"H", p:0}] Client Server [{i:"i", p:1}] doc:‘hello’, snapshot:null Ace doc:‘hello’, v:10, snapshot:‘’ ShareJS Client open:true, v:10 open:true, v:10 Socket.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. [{i:"H", p:0}] Client Server [{i:"i", p:1}] doc:‘hello’, snapshot:null Ace doc:‘hello’, v:10, snapshot:‘’ ShareJS Client open:true, v:10 open:true, v:10 Socket.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. Ace ShareJS Client OT Socket.io REST ShareJS Server Redis OT
  • 21. Ace ShareJS Client OT Socket.io REST Redis ShareJS Server OT Memory
  • 22. Ace ShareJS Client OT Socket.io REST Redis ShareJS Server OT Memory % bin/sharejs
  • 23. Ace ShareJS Client OT Socket.io REST ShareJS Server Memory OT Your Web App
  • 24. Ace ShareJS Client OT ShareJS Server OT
  • 25. Operational OT = Transformation {
  • 26. Operational OT = Transformation { = What happens if 2 people edit at the same time?
  • 27. Operational OT = Transformation { = Set of types What happens if 2 people edit at the same time?
  • 28. Operational OT = Transformation { = • Text Set of types What happens if 2 people edit at the same time?
  • 29. Operational OT = Transformation { = • Text Set of types What happens if 2 people • Rich text edit at the same time?
  • 30. Operational OT = Transformation { = • Text Set of types What happens if 2 people • Rich text edit at the same time? • JSON
  • 31. Operational OT = Transformation { = • Text Set of types What happens if 2 people • Rich text edit at the same time? • JSON • Your data
  • 32. Operational OT = Transformation { = • Text Set of types What happens if 2 people • Rich text edit at the same time? • JSON • Your data Only type right now
  • 33. Operational OT = Transformation Client Server v10 ‘ACD’ v10 op:[{d:‘AC’, p:0}] op:[{i:‘B’, p:1}] ‘D’ ‘ABCD’ op:[{i:‘B’, p:0}] v11
  • 34. Operational OT = Transformation Client 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. Operational OT = Transformation Client 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. Ace ShareJS Client OT Socket.io REST Redis ShareJS Server OT Memory
  • 37. Ace src/client ShareJS Client OT Socket.io Socket.io REST Redis ShareJS Server OT Memory
  • 38. Ace src/client ShareJS Client OT Socket.io Socket.io REST src/server Redis ShareJS Server OT Memory
  • 39. Ace src/client ShareJS Client Socket.io Operational src/types OT = Transformation Socket.io REST src/server Redis ShareJS Server Memory
  • 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. 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. 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. 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. 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

Notas del editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n