§

Options

ভিউ
গ্র্যানুলারিটি
Preprocessing
§

Input

বাংলাদেশ ও পশ্চিমবঙ্গের ডেভেলপাররা GitHub ও GitLab-এ পুল রিকোয়েস্ট রিভিউ করার সময় এবং কনফিগারেশন ফাইল তুলনা করার সময় diff চেকার ব্যবহার করেন। সংবেদনশীল কনফিগ বা ক্লায়েন্ট ডেটা কোনো পাবলিক সার্ভিসে পাঠানো উচিত নয় — এই ব্রাউজার-ভিত্তিক টুল কোনো আপলোড ছাড়াই তুলনা সম্পন্ন করে।

Diff অ্যালগরিদম কীভাবে কাজ করে

এই পেজের প্রতিটি diff ভিউ Myers অ্যালগরিদম দ্বারা তৈরি — Eugene W. Myers-এর ১৯৮৬ সালের একটি কৌশল যা দুটি টোকেন সিকোয়েন্সের মধ্যে সবচেয়ে সংক্ষিপ্ত এডিট স্ক্রিপ্ট O((N+M)D) সময়ে খুঁজে পায়, যেখানে D হলো এডিট দূরত্ব। অ্যালগরিদমটি Longest Common Subsequence সমস্যার উপর নির্মিত এবং ইঞ্জিনটি open-source jsdiff লাইব্রেরি ব্যবহার করে সম্পূর্ণ আপনার ব্রাউজারে চলে।

  1. ইনপুট টোকেনাইজ করুন — তুলনার আগে অ্যালগরিদম প্রতিটি ইনপুটকে টোকেনের একটি সিকোয়েন্সে বিভক্ত করে। লাইন গ্র্যানুলারিটি নিউলাইনে বিভক্ত করে; শব্দ গ্র্যানুলারিটি হোয়াইটস্পেস ও বিরাম চিহ্নের সীমানায় বিভক্ত করে; অক্ষর গ্র্যানুলারিটি প্রতিটি Unicode কোড পয়েন্টকে নিজস্ব টোকেন হিসেবে বিবেচনা করে।
  2. এডিট গ্রাফ তৈরি করুন — Myers অ্যালগরিদম তুলনাকে একটি 2D গ্রিডের মধ্য দিয়ে পাথ হিসেবে মডেল করে যেখানে ডানে সরা মানে 'মূল থেকে মুছুন', নিচে সরা মানে 'পরিবর্তিত থেকে যোগ করুন' এবং তির্যকভাবে সরা মানে 'উভয়ে টোকেন মেলে'। অ্যালগরিদম সবচেয়ে ছোট তির্যক-ভারী পাথ খুঁজে পায়।
  3. LCS বের করুন — সবচেয়ে ছোট পাথে তির্যক মুভগুলো Longest Common Subsequence ট্রেস করে — উভয় ইনপুটে একই আপেক্ষিক ক্রমে প্রদর্শিত টোকেন। LCS-এর প্রতিটি টোকেন 'অপরিবর্তিত'; বাকি সবকিছু হয় সংযোজন বা বিয়োজন।
  4. প্রিপ্রসেসিং অপশন প্রয়োগ করুন — আপনি 'কেস উপেক্ষা করুন' সক্ষম করলে LCS পাসের আগে উভয় ইনপুট লোয়ারকেস করা হয় যাতে 'HELLO' এবং 'hello' অভিন্ন হিসেবে গণনা হয়। 'হোয়াইটস্পেস উপেক্ষা করুন' একাধিক স্পেসকে একটিতে সংকুচিত করে। 'প্রতিটি লাইন ট্রিম করুন' তুলনার আগে প্রতি লাইন থেকে শুরু ও শেষের হোয়াইটস্পেস সরায়।
  5. নির্বাচিত ভিউ রেন্ডার করুন — আউটপুট একই LCS ফলাফল তিনটি উপায়ে প্রদর্শন করে: সাইড-বাই-সাইড বাম দিকে মূল এবং ডানে পরিবর্তিত দেখায় দুই-কলামের গ্রিডে লাল ও সবুজ সারি হাইলাইট সহ। ইউনিফাইড − এবং + প্রিফিক্স লাইন সহ একটি কলাম দেখায়, git diff-এর আউটপুটের মতো। ইনলাইন একই টেক্সট ফ্লোতে বিয়োজন লাল স্ট্রাইকথ্রু এবং সংযোজন সবুজ আন্ডারলাইন হিসেবে দেখায়।
  6. সারসংক্ষেপ স্ট্রিপ গণনা করুন — রেন্ডারিংয়ের পরে টুলটি গণনা করে কতটি টোকেন যোগ হয়েছে, মুছেছে এবং অপরিবর্তিত আছে, তারপর দুটি ইনপুটের বৃহত্তর মোট টোকেনের অনুপাত হিসেবে সাদৃশ্য গণনা করে। ১০০% সাদৃশ্য মানে প্রিপ্রসেসিংয়ের পরে ইনপুটগুলো অভিন্ন।

কেন diff চেকার ব্যবহার করবেন

  • Git ক্লায়েন্ট ছাড়া কোড রিভিউ — একটি কনফিগ ফাইল, SQL মাইগ্রেশন বা শেল স্ক্রিপ্টের দুটি সংস্করণ পাস্ট করুন এবং রিপো ক্লোন না করে বা ব্রাঞ্চ সুইচ না করে কী পরিবর্তিত হয়েছে দেখুন। ইউনিফাইড ভিউ সরাসরি চ্যাট থ্রেড বা টিকেটে কপি করার উপযোগী আউটপুট দেয়।
  • চুক্তি ও দলিল রেডলাইন — শব্দ-স্তরের diff Word-এর Track Changes প্যানেলের চেয়ে দ্রুত চুক্তির খসড়াগুলোর মধ্যে কোন শর্তগুলো পরিবর্তিত হয়েছে তা দেখায়। প্রথম খসড়া থেকে ধারা A এবং চূড়ান্ত কপি থেকে ধারা B পেস্ট করুন এবং ঠিক কোন বাক্যাংশটি পরিবর্তিত হয়েছে তা লাল-সবুজে হাইলাইট হয়।
  • প্রবন্ধ ও খসড়া সংশোধন — লেখকরা প্রথম খসড়া সম্পাদিত সংস্করণের সাথে তুলনা করতে শব্দ গ্র্যানুলারিটিতে ফ্লিপ করতে পারেন যাতে প্রতিটি প্রতিস্থাপন, ঢোকানো এবং কাটা দেখা যায়। অনুবাদকরা উৎস টেক্সটের বিপরীতে পরিবর্তন নিরীক্ষা করতে এবং সম্পাদকরা কপি এডিট লেখকের কণ্ঠস্বর রক্ষা করেছে কিনা তা যাচাই করতেও এটি ব্যবহার করেন।
  • লগ ও কনফিগ তুলনা — দুটি সার্ভার কনফিগ স্ন্যাপশট, দুটি cron শিডিউল বা দুটি ps aux আউটপুট তুলনা করা সিসঅ্যাডমিনরা লাইন গ্র্যানুলারিটি ব্যবহার করে ২০০-লাইনের ফাইলে একমাত্র পরিবর্তিত প্যারামিটার সেকেন্ডে খুঁজে পেতে পারেন।

সাধারণ প্রয়োগ

লেখা, ডেভেলপমেন্ট এবং অপারেশন কাজে প্রতিটি সম্পাদনা চক্রের শেষে টেক্সট diff দেখা যায়।

  • পুল রিকোয়েস্ট রিভিউ: দুটি ফাংশন ইমপ্লিমেন্টেশন পাশাপাশি পেস্ট করুন এবং ব্রাঞ্চ চেকআউটের ওভারহেড ছাড়াই লজিক পরিবর্তন বোঝার পরে অনুমোদন দিন।
  • ইন্টারন্যাশনালাইজেশন QA: ইংরেজি উৎস স্ট্রিং এবং এর অনুবাদিত সমতুল্য শব্দ স্তরে তুলনা করুন যাতে অনুবাদক যে সন্নিবেশ, বাদ বা পরিভাষা বিনিময় করেছেন তা শনাক্ত হয়।
  • ইনসিডেন্ট বিশ্লেষণ: আউটেজের আগে কনফিগারেশন পরিবর্তন আলাদা করতে দুটি Kubernetes ম্যানিফেস্ট স্ন্যাপশট বা দুটি 'docker inspect' আউটপুট লাইন স্তরে diff করুন।

একটি কাজের উদাহরণ

একটি পাঁচ-লাইনের সার্ভার কনফিগ নিন। মূল: host=localhost, port=5432, dbname=app_db, user=app, password=secret। পরিবর্তিত: host=db.prod.example.com, port=5432, dbname=app_db, user=app_prod, password=secret। লাইন গ্র্যানুলারিটি এবং সাইড-বাই-সাইড ভিউতে, লাইন ১ বাম দিকে লাল (host=localhost) এবং ডানে সবুজ (host=db.prod.example.com) দেখায়, লাইন ৪ লাল (user=app) এবং সবুজ (user=app_prod) দেখায়, এবং লাইন ২, ৩ এবং ৫ উভয় দিকে অপরিবর্তিত থাকে। সারসংক্ষেপ স্ট্রিপ ২টি সংযোজন, ২টি বিয়োজন, ৩টি অপরিবর্তিত এবং ৬০% সাদৃশ্য রিপোর্ট করে।

এটি কি আমার ব্রাউজারে চলে?

হ্যাঁ। সম্পূর্ণ diff গণনা open-source jsdiff লাইব্রেরি ব্যবহার করে ক্লায়েন্ট-সাইডে চলে। আপনি টাইপ, পেস্ট বা তুলনা করা কিছুই কোনো সার্ভারে পাঠানো হয় না। আপনি নিজে যাচাই করতে পারেন: ব্রাউজার DevTools খুলুন, Network ট্যাবে সুইচ করুন, লগ মুছুন, Compare ক্লিক করুন এবং নিশ্চিত করুন যে তুলনা ধাপে শূন্য নেটওয়ার্ক অনুরোধ হয়।

সাদৃশ্য শতাংশের মানে কী?

সাদৃশ্য গণনা করা হয় অপরিবর্তিত টোকেন / max(মূলের মোট টোকেন, পরিবর্তিতের মোট টোকেন) হিসেবে। ১০০% স্কোর মানে প্রিপ্রসেসিং অপশন প্রয়োগের পরে দুটি ইনপুট অভিন্ন। ০% স্কোর মানে ইনপুটগুলোর মধ্যে কোনো টোকেন ভাগ করা নেই। মেট্রিকটি এডিট দূরত্বের একটি আনুমানিক মাপ — দ্রুত গেজ হিসেবে দরকারী — কোনো প্লাজিয়ারিজম বা মৌলিকতা স্কোর নয়।

JSON / YAML / XML কি সিমান্টিক্যালি diff করা যাবে?

এই টুলে নয়। এটি একটি টেক্সট-স্তরের diff, তাই JSON বা XML-এর শুধুমাত্র হোয়াইটস্পেস রিফরম্যাটিং এখনও অনেক পরিবর্তন দেখায় যদিও ডেটা লজিক্যালি একই। JSON-এ অবজেক্ট কী পুনর্বিন্যাস করাও পরিবর্তন হিসেবে দেখায় যদিও বেশিরভাগ পার্সার কী ক্রমকে অসামঞ্জস্যপূর্ণ মনে করে। একটি সত্যিকারের সিমান্টিক diff-এর জন্য উভয় ইনপুটকে একই ইন্ডেন্টেশন ও কী ক্রমে স্বাভাবিক করুন এবং তারপর এখানে পেস্ট করুন।

ইউনিফাইড বনাম সাইড-বাই-সাইড ভিউ কীভাবে আলাদা?

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

বাম দিকে মূল পেস্ট করুন, ডানে পরিবর্তিত সংস্করণ, একটি ভিউ ও গ্র্যানুলারিটি বেছে নিন এবং তুলনা মিলিসেকেন্ডে আসে। লাইভ মোড চালু করুন এবং যেকোনো পাশ সম্পাদনা করার সময় প্রতিটি কীস্ট্রোকে diff পুনরায় চালবে। ফলাফল একটি স্ট্যান্ডার্ড ইউনিফাইড .patch ফাইল হিসেবে ডাউনলোড করুন যা git apply সরাসরি ব্যবহার করতে পারে। কোনো আপলোড নেই, কোনো অ্যাকাউন্ট নেই, কোনো ভেন্ডর API কী নেই, কোনো কোটা নেই।