Diff Checker

diff চেকার

দুটি টেক্সট বা কোডকে লাইন ও শব্দ-স্তরের হাইলাইটিং সহ তুলনা করুন। পাশাপাশি বা ইউনিফাইড, হোয়াইটস্পেস উপেক্ষা, কেস উপেক্ষা — সম্পূর্ণভাবে আপনার ব্রাউজারের ভেতরে।

না। পুরো টুলটি JavaScript যা এই পেজের ভেতরে চলে। diff অ্যালগরিদম (longest-common-subsequence) আপনার CPU-তে চলে এবং ফলাফল সরাসরি DOM-এ রেন্ডার হয়। DevTools → Network খুলে দেখুন — diff করার সময় কোনো রিকোয়েস্ট যায় না। ভেতরের কোড, গ্রাহক ডেটা, চুক্তির খসড়া, বা সার্ভার টুলে লগ হোক এমন কিছু পেস্ট করার জন্য নিরাপদ।

প্রথমে আমরা উভয় ইনপুটকে লাইনে ভাগ করি এবং একটি LCS (longest common subsequence) অ্যালগরিদম চালাই। যেসব লাইন উভয় পক্ষেই মেলে সেগুলোকে সমান হিসেবে চিহ্নিত করা হয়। যেগুলো মেলে না সেগুলো জোড়া বাঁধা হয় 'change' সারিতে যখন একটি সংযোজনের পাশে একটি বিয়োজন থাকে। প্রতিটি জোড়া পরিবর্তনের জন্য আমরা লাইনের শব্দগুলির উপর (হোয়াইটস্পেসে বিভক্ত) দ্বিতীয়বার LCS চালাই, যাতে শুধু প্রকৃত সম্পাদিত শব্দগুলোই লাল/সবুজ হয়ে জ্বলে — পুরো লাইন নয়।

কেন iKit diff চেকার

একটি পরিচ্ছন্ন, দ্রুত টেক্সট diff প্লেগ্রাউন্ড — কোনো বিজ্ঞাপন, পপআপ বা থার্ড-পার্টি ট্র্যাকার ছাড়াই — ডেভেলপার, লেখক, এবং যারা পরিবর্তন খুঁজে বের করতে চান তাদের জন্য তৈরি।

পাশাপাশি + ইউনিফাইড ভিউ

এক ক্লিকে স্প্লিট (দুই কলাম, ক্ল্যাসিক IDE অনুভূতি) এবং ইউনিফাইড (একক কলাম, +/− চিহ্ন সহ) ভিউয়ের মধ্যে পাল্টে নিন। উভয় ভিউতেই লাইন নম্বর রেন্ডার হয় এবং প্রতিটি পরিবর্তন ইনলাইনে হাইলাইট হয়।

শব্দ-স্তরের হাইলাইটিং

যখন দুটি লাইন পরিবর্তন হয়, আমরা একটি দ্বিতীয় শব্দ-স্তরের diff চালাই, যাতে শুধু প্রকৃত পার্থক্যগুলোই জ্বলে ওঠে — পুরো লাইন নয়। ২০০ অক্ষরের একটি লাইনে একটি ছোট ভুল খুঁজে পাওয়া আরও সহজ হয়।

হোয়াইটস্পেস উপেক্ষা + কেস উপেক্ষা

প্রসাধনী পরিবর্তন (পুনরায় ফরম্যাট করা ইন্ডেন্টেশন, ক্যাপিটালাইজেশন বদল) ফিল্টার করতে এবং প্রকৃত সম্পাদনায় মনোযোগ দিতে হোয়াইটস্পেস ও কেস সংবেদনশীলতা টগল করুন।

ডিজাইনেই গোপনীয়তা

উভয় টেক্সটই আপনার ব্রাউজার ট্যাবে থাকে। diff অ্যালগরিদম স্থানীয়ভাবে JavaScript-এ চলে। DevTools → Network-এ যাচাইযোগ্য: টাইপ করার সময় শূন্য রিকোয়েস্ট যায়।

পরিসংখ্যান + কপি

এক নজরে দেখুন কতগুলি লাইন যোগ, বাদ এবং পরিবর্তন হয়েছে। এক ক্লিকেই diff আপনার ক্লিপবোর্ডে কপি হয়, যা কোড রিভিউ বা কমিট মেসেজে পেস্ট করা যায়।

অফলাইনে কাজ করে

পেজ লোড হওয়ার পর প্রতিটি বাইট স্থানীয়ভাবে গণনা হয়। প্লেনে, কর্পোরেট ফায়ারওয়ালের পেছনে, বা একদমই কোনো নেটওয়ার্ক ছাড়াই কাজ করে — গোপনীয় কোড রিভিউয়ের জন্য উপযোগী।

একটি diff চেকার আসলে কীভাবে কাজ করে

এর ভেতরের গণিত ওয়েবের চেয়েও পুরোনো — ১৯৬৫ সালের একটি অ্যালগরিদম LCS, এবং ১৯৮৬ সালে Eugene Myers-এর একটি পরিমার্জন।

  1. 1

    লাইনে ভাগ করুন

    উভয় ইনপুট \n (বা \r\n)-এ ভাঙা হয়। প্রতিটি লাইন একটি টোকেন হয়ে যায়। আমরা টোকেন তুলনা করি — অক্ষর নয় — কারণ বাস্তব কোড বা ডকুমেন্টে বেশিরভাগ সম্পাদনা পুরো লাইন যোগ, বাদ, বা পরিবর্তন করে।

  2. 2

    LCS গণনা করুন

    Longest Common Subsequence হলো এমন বৃহত্তম লাইন সেট যা উভয় ইনপুটে একই ক্রমে দেখা যায়। আমরা নিচের-ডান থেকে হাঁটতে হাঁটতে একটি DP টেবিল পূরণ করি; প্রতিটি সেলে সেই অবস্থান থেকে শেষ পর্যন্ত LCS দৈর্ঘ্য থাকে। এতে O(m × n) সময় এবং মেমরি লাগে।

  3. 3

    অপারেশন পেতে পেছনে হাঁটুন

    টেবিলের উপরের-বাম থেকে শুরু করে আমরা সামনে এগোই: যদি বর্তমান দুটি লাইন মেলে, একটি equal আউটপুট দিই; নাহলে যেকোনো দিক (ডান বা নিচ) বাছাই করি যা LCS দৈর্ঘ্য সংরক্ষণ করে, একটি delete বা insert আউটপুট দিই। ফলাফল হলো অপারেশনের একটি ক্রম যা মূলকে পরিবর্তিতে রূপান্তর করে।

  4. 4

    পরিবর্তিত জোড়ার মধ্যে শব্দ-স্তরের diff

    যখন একটি delete-এর পরে একটি insert আসে, আমরা সেগুলোকে একটি change সারি হিসেবে জোড়া বাঁধি। লাইনের ভেতরে কেবল ভিন্ন অংশগুলোই হাইলাইট করতে, আমরা প্রতিটি পক্ষের শব্দের উপর — হোয়াইটস্পেস সীমানায় বিভক্ত করে — একই LCS অ্যালগরিদম দ্বিতীয়বার চালাই।

সাধারণ diff কাজ

বাস্তব পরিস্থিতি যেখানে আপনি একটি diff চেকারের কাছে যাবেন।

মন্তব্য করার আগে একটি PR পর্যালোচনা

GitHub-এর diff ভিউ চমৎকার, কিন্তু কখনও কখনও আপনি ফরম্যাটারের শোরগোল ছাড়া শুধু মূল পরিবর্তনগুলো দেখতে চান। উভয় সংস্করণ পেস্ট করুন, Ignore whitespace টগল করুন, এবং প্রসাধনী রি-ফরম্যাটগুলো অদৃশ্য হয়ে যাবে — শুধু লজিক সম্পাদনা থাকবে।

দুটি চুক্তির খসড়া তুলনা

আইনজীবী এবং অপারেশন দলগুলোকে প্রায়ই জানতে হয় একটি চুক্তির v1 এবং v2-এর মধ্যে কী পরিবর্তন হয়েছে। উভয়টি পেস্ট করুন, শব্দ-স্তরের হাইলাইটিং সহ একটি রঙিন diff পান — কোনো Word নেই, Track Changes নেই, গোপনীয় শর্তাবলী থার্ড-পার্টি সার্ভারে আপলোড করা নেই।

একটি স্ক্রিপ্ট সম্পাদনা আসলে কী করেছে তা যাচাই

একটি কনফিগ ফাইলে sed/awk/Python regex চালিয়েছেন? নিশ্চিত করতে যে স্ক্রিপ্টটি কেবল আপনি যা প্রত্যাশা করেছিলেন তাই সম্পাদনা করেছে, এখানে মূল এবং ফলাফল পেস্ট করুন। অক্ষর-স্তরের হাইলাইট দ্রুত দৃশ্যত স্ক্যান যা মিস করে, সেই বিচ্ছিন্ন সম্পাদনাগুলো ধরে।

অনূদিত টেক্সটে একটি ভুল খুঁজে পাওয়া

অনুবাদ জোড়া (উৎস বনাম অনুবাদ, বা একই উৎসের দুটি অনুবাদ) — শব্দ-স্তরের diff একটি অনুপস্থিত শব্দ, একটি পুনরাবৃত্ত বাক্যাংশ, বা একটি যতিচিহ্নের পাল্টা — যা প্রুফরিডার মিস করেছেন — খুঁজে পাওয়া তুচ্ছ করে দেয়।

কেন স্থানীয় diff করা গুরুত্বপূর্ণ

আপনি যে টেক্সট তুলনা করেন সেগুলো সাধারণত ব্যক্তিগত: অভ্যন্তরীণ রেপো থেকে কোড, চুক্তির খসড়া, গ্রাহক-ডেটা এক্সপোর্ট, বা অপ্রকাশিত পণ্যের কপি। অপরিচিতের সার্ভারে সেগুলো পেস্ট করা একটি কাগুজে ছাপ তৈরি করে যার নিয়ন্ত্রণ আপনার নেই। iKit-এর diff চেকার হলো JavaScript যা ইতিমধ্যেই আপনার ব্রাউজার ট্যাবে লোড হয়ে আছে — তুলনা আপনার CPU-তে চলে এবং কখনও কোনো নেটওয়ার্ক সকেট স্পর্শ করে না।

  • diff করার সময় শূন্য নেটওয়ার্ক রিকোয়েস্ট — DevTools → Network-এ যাচাইযোগ্য।
  • ইনপুট ব্রাউজার মেমরিতে থাকে; Clear বা পেজ রিফ্রেশে মুছে যায়।
  • অভ্যন্তরীণ কোড, NDA-সুরক্ষিত নথি, গ্রাহক সাপোর্ট ট্রান্সক্রিপ্ট, এবং ডেটা-রেসিডেন্সি নীতির অধীনে যা কিছু পড়ে — সবকিছুর জন্য নিরাপদ।

Related guides

Deep-dive tutorials and tool comparisons from the iKit blog.

প্রায়শই জিজ্ঞাসিত প্রশ্ন

এটি কি নিরাপদ? আমার টেক্সট কি আপলোড হচ্ছে?

না। পুরো টুলটি JavaScript যা এই পেজের ভেতরে চলে। diff অ্যালগরিদম (longest-common-subsequence) আপনার CPU-তে চলে এবং ফলাফল সরাসরি DOM-এ রেন্ডার হয়। DevTools → Network খুলে দেখুন — diff করার সময় কোনো রিকোয়েস্ট যায় না। ভেতরের কোড, গ্রাহক ডেটা, চুক্তির খসড়া, বা সার্ভার টুলে লগ হোক এমন কিছু পেস্ট করার জন্য নিরাপদ।

লাইন + শব্দ-স্তরের হাইলাইটিং কীভাবে কাজ করে?

প্রথমে আমরা উভয় ইনপুটকে লাইনে ভাগ করি এবং একটি LCS (longest common subsequence) অ্যালগরিদম চালাই। যেসব লাইন উভয় পক্ষেই মেলে সেগুলোকে সমান হিসেবে চিহ্নিত করা হয়। যেগুলো মেলে না সেগুলো জোড়া বাঁধা হয় 'change' সারিতে যখন একটি সংযোজনের পাশে একটি বিয়োজন থাকে। প্রতিটি জোড়া পরিবর্তনের জন্য আমরা লাইনের শব্দগুলির উপর (হোয়াইটস্পেসে বিভক্ত) দ্বিতীয়বার LCS চালাই, যাতে শুধু প্রকৃত সম্পাদিত শব্দগুলোই লাল/সবুজ হয়ে জ্বলে — পুরো লাইন নয়।

Split এবং Unified ভিউয়ের মধ্যে পার্থক্য কী?

Split ভিউ দুটি টেক্সটকে পাশাপাশি জোড়া লাইন নম্বর সহ দেখায় — IDE-তে (VS Code, JetBrains) যেভাবে diff দেখা যায় তার কাছাকাছি। Unified ভিউ একটি কলামে +/− প্রিফিক্স সহ লাইন দেখায় — `git diff` যা প্রিন্ট করে তার কাছাকাছি। আপনার কর্মপ্রবাহের সাথে যেটি মেলে সেটি বেছে নিন; দুটোই একই ডেটা রেন্ডার করে।

'হোয়াইটস্পেস উপেক্ষা' কেন সাহায্য করে?

কোড পুনরায় ফরম্যাট করা (Prettier চালানো, ট্যাব/স্পেস বদল, লাইন এন্ডিং স্বাভাবিক করা) দৃশ্যত শোরগোল যোগ করে যা প্রকৃত পরিবর্তন ঢেকে রাখে। 'Ignore whitespace' টগল করলে স্পেস/ট্যাবের ধারাবাহিকতা একটিমাত্র স্পেসে সংকুচিত হয় এবং diff করার আগে লাইনের প্রান্ত ছাঁটা হয় — তাই আপনি শুধু অর্থপূর্ণ সম্পাদনাই দেখেন, প্রসাধনী নয়।

ব্রাউজারে আমি সর্বোচ্চ কত বড় ইনপুট diff করতে পারি?

LCS অ্যালগরিদম O(m × n) মেমরি ব্যবহার করে যেখানে m এবং n হল প্রতিটি পক্ষের লাইন সংখ্যা। iKit তুলনাকে প্রায় ৪ মিলিয়ন সেলে (≈১৬ MB) সীমাবদ্ধ রাখে, যা স্বাচ্ছন্দ্যে কয়েক হাজার লাইন বনাম কয়েক হাজার লাইন সামলাতে পারে। বড় diff-এর জন্য (পুরো ডেটাবেস ডাম্প, পূর্ণ-ফাইল লগ), `diff` বা `git diff --no-index`-এর মতো একটি CLI টুল ব্যবহার করুন — এগুলো আরও স্মার্ট অ্যালগরিদম (Myers diff) ব্যবহার করে যা মিলিয়ন লাইনে স্কেল করে।