রিয়েল-টাইম সহযোগিতামূলক সম্পাদনা কী?

রিয়েল-টাইম সহযোগিতামূলক সম্পাদনা একাধিক ব্যক্তিকে একই ডকুমেন্টে একসাথে কাজ করার অনুমতি দেয়, প্রতিটি ব্যক্তির পরিবর্তনগুলি অবিলম্বে অন্য সবার কাছে দৃশ্যমান হয়। প্রাথমিক সিস্টেমগুলি অপারেশনাল ট্রান্সফরমেশন (OT) ব্যবহার করত — একটি কৌশল যা দ্বন্দ্বপূর্ণ সম্পাদনাগুলি তাৎক্ষণিকভাবে পুনর্বিন্যাস করে — কিন্তু OT প্রতিটি পরিবর্তন নিয়ন্ত্রণ করার জন্য একটি কেন্দ্রীয় সার্ভারের প্রয়োজন। Yjs এর মতো আধুনিক সিস্টেমগুলি Conflict-free Replicated Data Types (CRDTs) ব্যবহার করে: একটি গাণিতিক কাঠামো যেখানে যেকোনো দুটি প্রতিলিপি যেকোনো ক্রমে মার্জ করা যায় এবং সর্বদা একই ফলাফলে পৌঁছায়, কে "জিতবে" তা নির্ধারণ করার জন্য কোনো কেন্দ্রীয় কর্তৃপক্ষের প্রয়োজন ছাড়াই।

CRDTs অফলাইন সম্পাদনাকে স্বাভাবিক করে তোলে: ব্যবহারকারীরা সংযোগ বিচ্ছিন্ন থাকলেও সম্পাদনা চালিয়ে যেতে পারে, এবং তাদের পরিবর্তনগুলি পুনরায় সংযুক্ত হলে পরিষ্কারভাবে মার্জ হয়। এই কারণেই CRDT-এর উপর নির্মিত রিয়েল-টাইম সহযোগিতামূলক সম্পাদকগুলি তাৎক্ষণিক অনুভব করে — সম্পাদনাগুলি প্রথমে স্থানীয়ভাবে প্রয়োগ করা হয় এবং পরে সমবয়সীদের সাথে সিঙ্ক করা হয়, পরিবর্তে স্ক্রিনে প্রদর্শিত হওয়ার আগে সার্ভারে রাউন্ড-ট্রিপের জন্য অপেক্ষা করার পরিবর্তে।

সরঞ্জাম বর্ণনা

সহযোগিতামূলক কোড সম্পাদক হল Yjs এবং CodeMirror 6 দ্বারা চালিত একটি রিয়েল-টাইম মাল্টিপ্লেয়ার কোড সম্পাদক। আপনার দলের সাথে রুম URL শেয়ার করুন এবং রুমের সবাই একই ডকুমেন্ট একসাথে সম্পাদনা করে, প্রতিটি ব্যক্তির কার্সার এবং নির্বাচন একটি লেবেলযুক্ত সূচকে দেখানো হয়।

সম্পাদক ডজনখানেক প্রোগ্রামিং ভাষার জন্য সিনট্যাক্স হাইলাইটিং সমর্থন করে, একটি শেয়ার করা ভাষা ড্রপডাউনের মাধ্যমে নির্বাচনযোগ্য — একটি ব্রাউজারে ভাষা পরিবর্তন করা রুমের সবার জন্য তাৎক্ষণিকভাবে এটি আপডেট করে। ফাইলগুলি Open File বোতাম দিয়ে আপনার স্থানীয় ডিস্ক থেকে লোড করা যায় এবং Save File দিয়ে ডাউনলোড করা যায়।

বৈশিষ্ট্যগুলি

  • লাইভ মাল্টি-ব্যবহারকারী কার্সার: প্রতিটি সহযোগীর কার্সার এবং নির্বাচন একটি রঙ-কোডেড, নামযুক্ত লেবেল দিয়ে দেখানো হয়; একই অবস্থানে একাধিক কার্সার ভিজ্যুয়াল শব্দ কমাতে একটি একক "N ব্যবহারকারী" সূচকে সংকুচিত হয়।
  • শেয়ার করা ভাষা নির্বাচন: সক্রিয় প্রোগ্রামিং ভাষা রুমে সংরক্ষিত থাকে যাতে সমস্ত অংশগ্রহণকারী সর্বদা একই সিনট্যাক্স হাইলাইটিং দেখে, এবং দেরিতে যোগদানকারীরা অবিলম্বে সঠিক অবস্থা পায়।
  • স্থানীয়ভাবে ফাইল খুলুন এবং সংরক্ষণ করুন: ডিস্ক থেকে সরাসরি শেয়ার করা সম্পাদকে যেকোনো সোর্স ফাইল লোড করুন, অথবা সঠিক এক্সটেনশন সহ একটি ফাইল হিসাবে বর্তমান ডকুমেন্ট ডাউনলোড করুন।

এটি কীভাবে কাজ করে

যখন আপনি একটি রুমে যোগ দেন, সম্পাদক একটি Yjs ডকুমেন্ট তৈরি করে যার মধ্যে ফাইল বিষয়বস্তু প্রতিনিধিত্ব করে একটি শেয়ার করা Y.Text নোড রয়েছে। প্রতিটি কীস্ট্রোক একটি কমপ্যাক্ট বাইনারি Yjs আপডেট হিসাবে এনকোড করা হয়, Base64 এ সিরিয়ালাইজ করা হয়, এবং একটি WebSocket রুমের উপর সম্প্রচার করা হয়। সমস্ত সংযুক্ত সমবয়সীরা তাদের নিজস্ব প্রতিলিপিতে আপডেট প্রয়োগ করে; CRDT গ্যারান্টির কারণে, সমস্ত প্রতিলিপি আপডেটগুলি যে ক্রমে আসে তা নির্বিশেষে একই পাঠে পৌঁছায়।

কার্সার এবং নির্বাচন অবস্থানগুলি একটি হালকা Awareness স্তরের মাধ্যমে শেয়ার করা হয় যা একই WebSocket রুমের মাধ্যমে অবস্থান ডেটা রুট করে। সম্পূর্ণ ডকুমেন্ট অবস্থা প্রতি সেকেন্ডে ডিবাউন্স করা হয় এবং স্থায়ী রুম স্টোরেজে লেখা হয়, তাই সেশন শুরু হওয়ার পরে যোগদানকারী ব্যবহারকারীরা অবিলম্বে বর্তমান ডকুমেন্ট পান।

বিকল্পগুলি ব্যাখ্যা করা হয়েছে

  • ভাষা ড্রপডাউন — সম্পাদকের জন্য সিনট্যাক্স হাইলাইটিং ভাষা নির্বাচন করে। পছন্দটি সমস্ত রুম সদস্যদের কাছে সম্প্রচার করা হয় যাতে সবাই সামঞ্জস্যপূর্ণ হাইলাইটিং দেখে। আপনি একটি রুমের সাথে সংযুক্ত না হওয়া পর্যন্ত ড্রপডাউনটি অক্ষম থাকে।
  • ফাইল খুলুন — একটি স্থানীয় ফাইল পিকার খোলে এবং নির্বাচিত ফাইলের পাঠ্য বিষয়বস্তু শেয়ার করা Yjs ডকুমেন্টে লোড করে, রুমের সবার জন্য বর্তমান বিষয়বস্তু প্রতিস্থাপন করে।
  • ফাইল সংরক্ষণ করুন — বর্তমান সম্পাদক বিষয়বস্তু একটি ফাইল হিসাবে ডাউনলোড করে। ফাইল এক্সটেনশন স্বয়ংক্রিয়ভাবে নির্বাচিত ভাষার উপর ভিত্তি করে নির্বাচিত হয়।
  • থিম — সম্পাদক আপনার সিস্টেম ডার্ক/লাইট পছন্দ অনুসরণ করে (localStorage এ সংরক্ষিত)। VS Code-স্টাইল ডার্ক এবং লাইট সম্পাদক থিমগুলির মধ্যে স্যুইচ করতে আপনার OS বা ব্রাউজার থিম টগল করুন।

সীমাবদ্ধতা

  • সিঙ্ক করার জন্য রিলে সার্ভারের সাথে একটি সক্রিয় WebSocket সংযোগ প্রয়োজন; সংযোগ বিচ্ছিন্ন হলে, অফলাইনে করা সম্পাদনাগুলি পুনরায় সংযুক্ত হলে স্বয়ংক্রিয়ভাবে পুনরায় সিঙ্ক হবে।
  • কোনো স্থায়ী সংস্করণ ইতিহাস নেই — একবার একটি সেশন শেষ হয় এবং রুম বন্ধ হয়, ডকুমেন্ট চলে যায় যদি না আপনি Save File বোতাম দিয়ে এটি স্থানীয়ভাবে সংরক্ষণ করেন।
  • বাইনারি ফাইলগুলি (ছবি, সংকলিত বাইনারি, ইত্যাদি) লোড করা যায় না; সম্পাদক শুধুমাত্র সাধারণ-পাঠ্য সোর্স ফাইলগুলির সাথে কাজ করে।
  • এই সরঞ্জামটি বিটা তে রয়েছে; রুম স্থিতিশীলতা এবং সর্বাধিক সমসাময়িক ব্যবহারকারীরা সীমাবদ্ধ হতে পারে।

টিপস

  • সহযোগীদের আমন্ত্রণ জানাতে আপনার ব্রাউজারের ঠিকানা বারে সম্পূর্ণ রুম URL শেয়ার করুন — রুম ID URL এ এনকোড করা হয়।
  • একটি সেশনের শেষে Save File দিয়ে একটি স্থানীয় অনুলিপি সংরক্ষণ করুন; রুম ডেটা অনির্দেশ্যকালের জন্য স্থায়ী হওয়ার গ্যারান্টি নেই।
  • যদি একজন সহযোগীর কার্সার লেবেল গুরুত্বপূর্ণ কোড কভার করছে, লেবেলটি স্বয়ংক্রিয়ভাবে সম্পাদকের ডান প্রান্তের কাছাকাছি থাকলে বাম দিকে ফ্লিপ হয়।