परिचालन परिवर्तन पुस्तकालय?


102

मैं एक ऐसी लाइब्रेरी की तलाश में हूं, जो मुझे कई उपयोगकर्ताओं (अला गूगल डॉक्स) के बीच वास्तविक समय में पाठ को सिंक्रनाइज़ करने की अनुमति दे।

मैंने ऑपरेशनल ट्रांसफ़ॉर्मेशन पर ठोकर खाई है, जो मेरी ज़रूरतों को पूरा करता है। ऐसा कहने के बाद, मैं ओटी के सार को समझता हूं, लेकिन गणित का नहीं और न ही ओटी के कार्यान्वयन का।

इस प्रकार, मैं सोच रहा था कि क्या कोई ड्रैग'नहलड्रॉप जावास्क्रिप्ट लाइब्रेरी होगी जो एक पाठ क्षेत्र में हुक करेगी, ट्रांसफ़ॉर्म उत्पन्न करेगी, फिर मुझे दूसरे क्लाइंट पर उन परिवर्तनों को लागू करने की अनुमति देगी?

(मैंने एथरपैड स्रोत प्राप्त कर लिया है, लेकिन मैं सिर या पूंछ नहीं बना सकता हूं। अगर कोई ईथर्डपैड के ओटी कार्यान्वयन पर लाभ उठाने का संकेत दे सकता है, तो यह बहुत अच्छा होगा!)


Firebase द्वारा संचालित सहयोगी पाठ संपादक, जिसे Firepad - firepad.io कहा जाता है, कुछ प्रेरणा पाने के लिए कोड की जाँच करें github.com/FirebaseExtended/firepad
Tharanga Hewavithana

जवाबों:


57

मुझे लगता है कि Google Wave के OT कार्यान्वयन के कुछ भाग ओपन सोर्स हैं (और अधिक हिस्से आ रहे हैं)।

मुझे यकीन नहीं है कि यह वही है जो आप खोज रहे हैं, लेकिन ओटी के लिए एक विकल्प विभेदक सिंक्रनाइज़ेशन है :


6
डिफ-मैच-पैच, नील फ्रेज़ियर द्वारा अंतर सिंक्रोनाइज़ेशन पेपर के साथ संयुक्त ( neil.fraser.name/writing/sync ) ने किया! मुझे सही दिशा में इशारा करने के लिए बहुत धन्यवाद।
gamers2000

मैं जो भी समझता हूं, डिफ-मैच-पैच और विस्तार से, MobWrite (चूंकि बाद वाला पूर्व का उपयोग करता है) केवल पाठ का समर्थन करता है, न कि द्विआधारी परिवर्तन। हालाँकि, HTML प्रपत्र तत्वों के साथ सहयोग का एक डेमो है, जो यह संकेत देता है कि यह केवल सादे पाठ का समर्थन नहीं करता है।
gamers2000

इस उत्तर के बाद से "और अधिक भागों में कोई अच्छी खबर" आ रही है?
3

3
दरअसल, Google-डिफ-मैच-पैच का उद्देश्य ऑपरेशनल ट्रांस्फ़ॉर्मेशन के लिए वैकल्पिक विधि को लागू करना है, जो कि डिफरेंशियल सिंक्रोनाइज़ेशन है, जिन अंतरों को समझने के लिए आप डीएस के नील फ्रेजर दस्तावेज़ को पढ़ सकते हैं: neil.fraser.name/writing/sync (OT) इस दस्तावेज में इवेंट पासिंग के रूप में संदर्भित है)। वे दो बहुत अलग विधियां हैं।
बेनजा

5
इस वर्ष है, लेकिन मामले में आप बात नहीं, मैं opensourced है github.com/benjamine/JsonDiffPatch यह लंबे समय से तार के लिए नील के Diff-मैच-पैच का उपयोग करता है, लेकिन यह arbritrary js रेखांकन आपत्ति के लिए काम करता है
Benja

44

पूर्व-लहर इंजीनियरों में से एक ने ShareJS नामक अपने सहयोगी संपादन एल्गोरिथ्म का एक कॉफ़ीस्क्रिप्ट कार्यान्वयन जारी किया है, जिसे अब शेयरडीबी नाम दिया गया है


1
ShareJS शायद सरल और बेहतर प्रलेखित है और इससे अधिक पुन: प्रयोज्य है जो MobWrite Google के डिफ और पैच के साथ करता है।
ल्यूक स्टेनली

33

मैं उन समाधानों को संक्षेप में बताऊंगा जो मुझे मिले।

  • परिचालन परिवर्तन: जैसे

    • Google Wave OT। दृष्टिकोण तथाकथित बृहस्पति दृष्टिकोण पर आधारित है।
    • ShareJs। Google Wave OT के समान ओटी एल्गोरिदम पर आधारित है।
    • Coweb-jsoe। सीओटी पर आधारित - एक बहुत ही परिष्कृत ओटी दृष्टिकोण जो पी 2 पी संदेश प्रसार का भी समर्थन करता है।
    • OpenCoweb। यह OpenCoweb-jsoe का लाभ उठाता है ताकि समान समस्याओं के लिए एक पूर्णरूपेण फ्रेमवर्क प्रदान किया जा सके।
    • OT.js ShareJs के ऑपरेशन-प्रकार पर आधारित है।
    • DriveSDK। एक बहुत ही दिलचस्प एपीआई जो बहुत कुछ कर सकता है - उदाहरण के लिए रेखांकन पर सहयोग।
    • SwellRT Apache Wave का एक कांटा है। फ़ेडरेटेड है, और समृद्ध पाठ का समर्थन करता है।
  • विभेदक सिंक्रनाइज़ेशन:

    • नील फ्रेजर से डिफ-मैच-पैच।
    • MobWrite डिफ-मैच-पैच एल्गोरिदम का लाभ उठाता है।
  • CRDT (कम्यूटेटिव रेप्लिकेटेड डेटा टाइप):

    • कई अलग-अलग सीआरडीटी एल्गोरिदम हैं जो साझा प्रकारों के कार्यान्वयन की अनुमति देते हैं। कुछ सीआरडीटी पी 2 पी संदेश प्रसार के साथ काम करते हैं, कुछ क्लाइंट-सर्वर मॉडल पर भरोसा करते हैं
    • Yjs आपको मनमाना डेटा प्रकार ( रिचटेक्स्ट , एरे, हैश मैप्स, .. विस्तार योग्य) साझा करने की अनुमति देता है। P2P संचार प्रोटोकॉल के लिए ऑफलाइन समर्थन और समर्थन (XMPP, Websockets और WebRTC के लिए मॉड्यूल हैं)
    • SwarmJS क्लाइंट सर्वर ने ऑफ़लाइन समर्थन के साथ डेटाबेस साझा किया। रिएक्ट के साथ अच्छी तरह से काम करता है
    • Woot Woot CRDT का एक कार्यान्वयन
    • CRDT एक और CRDT कार्यान्वयन
    • Automerge

Google Drive API OT नहीं DS का उपयोग करता है। Developers.google.com/drive/realtime/conflict-resolution
मथियास बक

6

ओ.टी. पुस्तकालय:

HWIOS वेबसोकेट प्रोजेक्ट के भीतर, मैंने दस्तावेज़ अवस्थाओं को सिंक करने के लिए दोनों (सर्वर पर, पी-इन्फिनोट, क्लाइंट पर jinfinote) का सफलतापूर्वक उपयोग किया है।




4

इस समस्या के लिए टर्नकी, या "ड्रैग एंड ड्रॉप" समाधान वास्तव में साझा परस्पर अवस्था को सिंक्रनाइज़ करने की जटिलता के कारण मौजूद नहीं है। डॉमनेड की प्रतिक्रिया एक अच्छा दौर है, और मैंने यहां उपलब्ध समाधानों का अधिक अद्यतित अवलोकन पोस्ट किया है

यह प्रश्न काफी पुराना है, लेकिन कन्वर्जेंस (अस्वीकरण: मैं एक संस्थापक हूं) वहाँ सबसे अधिक टर्नकी समाधान प्रदान करता है, न केवल डेटा सिंक्रनाइज़ेशन प्रदान करता है, बल्कि एक सहयोगी यूएक्स के निर्माण के लिए उपयोगी अन्य एपीआई का एक मेजबान है। यहां एक उदाहरण दिखाया गया है जो आपने अनुरोध किया था: कई क्लाइंट में पाठ फ़ील्ड का सिंक्रनाइज़ेशन।

अन्यथा, ShareDB एक महान ओपन-सोर्स समाधान है जो लोगों की बहुत सारी जरूरतों को पूरा करता है।



2

एक js क्लाइंट लिब (Strophe.js) के साथ, आप एक पूर्ण XMPP सर्वर (जैसे jabber.org) का उपयोग मेरे क्लाइंट-साइड OT lib (JSOTTEST) के साथ एक पूर्ण क्लाइंट-सर्वर सिस्टम बनाने के लिए कर सकते हैं।

जब मेरे पास कोड को संशोधित करने का समय होगा, तो मैं एक डेमो क्लाइंट-सर्वर चैट सिस्टम का src जमा करूंगा।


1
लगभग दो साल पहले आप लिखते हैं "मैं एक डेमो के src सबमिट करूँगा ..."। क्या आपने कभी उस डेमो को पूरा किया?
ब्रायन ओकले

क्षमा करें ... लेकिन मेरे पास सार्वजनिक डेमो जारी करने का समय नहीं था! हालाँकि यह php के लिए Bosh lib का उपयोग करके बहुत सरल है !! अलविदा
user981836

2

Npm ने नोड के लिए कुछ अच्छे ओ.टी. लाइब्रेरी हैं।

  • https://npmjs.org/package/ot - कोडमिरर और इक्का के लिए एडेप्टर और साथ ही ग्राहक और सर्वर कार्यान्वयन
  • https://npmjs.org/package/changesets - नोड और ब्राउज़र में उपयोग करने योग्य सादे पुस्तकालय; आपको 'परिवर्तन' (अनिवार्य रूप से भिन्न) का निर्माण करने की अनुमति देता है जिसे आप चारों ओर भेज सकते हैं, एक दूसरे के खिलाफ बदल सकते हैं और एक दस्तावेज़ पर लागू कर सकते हैं

1

आप सेडानेट के लोगों से बात कर सकते हैं । हालांकि केडा बंद स्रोत है और उनकी वेब साइट पर कोई निःशुल्क परीक्षण उपलब्ध नहीं है। मैं केडा के विकास में शामिल रहा हूं और वाणिज्यिक परियोजनाओं में इसके साथ काम करना जारी रखता हूं, इसलिए यदि आप इस रास्ते पर चलते हैं तो मैं कुछ प्रतिक्रिया / सलाह दे सकता हूं।


1

मैं etherpad लाइट के साथ etherpad.org की बात करता हूं अन्य समाधानों से बेहतर है।


1
क्या आप कुछ उदाहरणों से ईथरपैड की श्रेष्ठता को प्रमाणित कर पाएंगे?
DL नरसिम्हन

1

हम एक सहयोगी संपादक का निर्माण कर रहे हैं जो वर्जनिंग के साथ ऑपरेशनल ट्रांसफॉर्मेशन को जोड़ता है। इस तरह हम ऑफलाइन और ऑनलाइन दोनों तरह के कोलाब का समर्थन कर सकते हैं। हमने अपने ओपन सोर्स स्टैक के हिस्से के रूप में कल अपनी ओटी लाइब्रेरी जारी की।

http://interior.substance.io/modules/operator.html

हमने वर्जनिंग के लिए एक लाइब्रेरी का भी योगदान दिया है।

http://interior.substance.io/modules/chronicle.html


1

मैंने एक छोटी सी यूनिक्स लिखी है (एक काम करो और इसे अच्छी तरह से करो) लाइब्रेरी जो एक ओटी कंट्रोल लेयर को लागू करती है, जिससे आप अलग-अलग ओटी टाइप्स में प्लग इन कर सकते हैं (सभी शेयरजेएस कंप्लेंट टाइप का समर्थन करता है)। यह shareJS के समान है लेकिन कम राय वाला और अधिक सारगर्भित है।

https://github.com/marcelklehr/gulf

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.