Skip to main content

Posts

Showing posts from July, 2026

[AI] Introducing the Open Knowledge Format VS Vactor Database

 এই লেখাটিতে Open Knowledge Format (OKF) নামে একটি নতুন এবং সহজ ফাইল ফরম্যাট নিয়ে আলোচনা করা হয়েছে এটি কী এবং কেন তৈরি করা হয়েছে? আজকাল AI (যেমন ChatGPT, Gemini ইত্যাদি) অনেক কাজ করতে পারলেও একটি মূল সমস্যায় পড়ে—তাহলো সঠিক ও আপডেট তথ্যের অভাব (Context) । একটি কোম্পানিতে বিভিন্ন তথ্য ছড়িয়ে-ছিটিয়ে থাকে (যেমন: ডেটাবেজ স্কিমা, কোড কমেন্ট, গুগল ড্রাইভের ফাইল, বিভিন্ন নোট)। AI এর জন্য এত জায়গা থেকে তথ্য এনে সঠিক উত্তর দেওয়া কঠিন হয়ে পড়ে। এই সমস্যার সমাধানের জন্য গুগল ক্লাউড টিম Open Knowledge Format (OKF) নিয়ে এসেছে। এটি AI এবং মানুষ—উভয়ের জন্যই পড়া ও ব্যবহারের উপযোগী এক ধরনের উন্মুক্ত ফাইল স্ট্যান্ডার্ড (Open Standard) । 💡 OKF এর মূল বৈশিষ্ট্যসমূহ OKF কোনো জটিল সফটওয়্যার বা সার্ভিস নয়, বরং এটি খুব সাধারণ কিছু ফাইল সাজানোর নিয়ম: শুধুমাত্র Markdown (মার্কডাউন): সাধারণ টেক্সট ফাইল ( .md ), যা খুব সহজেই সাধারণ নোটপ্যাডে বা GitHub-এ পড়া ও এডিট করা যায়। YAML Frontmatter (তথ্য চিহ্নিতকরণ): প্রতিটি ফাইলের ওপর ছোট একটি সেকশন থাকে, যেখানে টাইপ, শিরোনাম, ক্যাটাগরি, ট্যাগ ও সময় লেখা থাকে। ফোল...

Logout from all devices কিভাবে implement করা হয়?

 সব ডিভাইস থেকে একসাথে লগআউট করার (Logout from all devices / Global Logout) ফিচারটি মূলত Session Management -এর ওপর ভিত্তি করে কাজ করে। ডেভেলপমেন্টে এটি প্রধানত ২টি উপায়ে ইমপ্লিমেন্ট করা হয়—আপনি সেশন ট্র্যাকিংয়ের জন্য Database/Redis (Stateful) ব্যবহার করছেন নাকি JWT (Stateless) ব্যবহার করছেন তার ওপর ভিত্তি করে। নিচে সহজ ভাষায় এবং টেকনিক্যাল আর্কিটেকচারসহ দুটি পদ্ধতিই আলোচনা করা হলো: ১. Database বা Redis ব্যবহার করে (Stateful Session) যদি আপনার অ্যাপ্লিকেশনে ট্র্যাডিশনাল সেশন আইডি (Session ID) বা টোকেন ডেটাবেজ/Redis-এ সেভ করা থাকে, তবে গ্লোবাল লগআউট করা সবচেয়ে সহজ এবং সিকিউর। যেভাবে কাজ করে: ১. সেশন ট্র্যাকিং: ইউজার যখনই কোনো ডিভাইসে লগইন করে, ডেটাবেজ বা Redis-এ একটি নতুন রো বা কি (Key) তৈরি হয়। সেখানে user_id , session_id , device_info এবং expires_at সেভ থাকে। ২. গ্লোবাল লগআউট রিকোয়েস্ট: ইউজার যখন "Logout from all devices" বাটনে ক্লিক করে, তখন ব্যাকএন্ডে একটি রিকোয়েস্ট যায়। ৩. ডেটা ডিলিট/ইনভ্যালিডেট: ব্যাকএন্ড কুয়েরি চালিয়ে ওই নির্দিষ্ট user_id -এর যতগুলো অ্যাক্টিভ সেশ...

Pagination: Offset Pagination and Cursor Pagination

 ডাটাবেস বা API থেকে বড় পরিমাণের ডাটা ছোট ছোট টুকরো করে ইউজারকে দেখানোর প্রক্রিয়াকে Pagination (পেজিনেশন) বলা হয়। যখন আমাদের টেবিলে হাজার হাজার বা লাখ লাখ ডাটা থাকে, তখন একবারে সব ডাটা লোড না করে পেজ আকারে লোড করা হয়। সবচেয়ে জনপ্রিয় দুটি পেজিনেশন পদ্ধতি হলো Offset Pagination এবং Cursor Pagination । নিচে এ দুটি পদ্ধতির বিস্তারিত আলোচনা করা হলো: ১. Offset Pagination (অফসেট পেজিনেশন) এটি পেজিনেশনের সবচেয়ে সাধারণ এবং সহজ পদ্ধতি। আমরা সাধারণত ওয়েবসাইটে যে ১, ২, ৩, ৪ নম্বর পেজ বা "Next/Previous" বাটন দেখি, সেটি বেশিরভাগ সময় অফসেট পেজিনেশন দিয়েই করা হয়। এটি কীভাবে কাজ করে? এটি ডাটাবেসের LIMIT এবং OFFSET ক্লজ ব্যবহার করে কাজ করে। LIMIT: একটি পেজে কয়টি ডাটা দেখানো হবে (Page Size)। OFFSET: কয়টি ডাটা বাদ দিয়ে (Skip) পরের ডাটাগুলো নেওয়া শুরু হবে। উদাহরণ: ধরি, প্রতি পেজে আমরা ৫টি করে ডাটা দেখাতে চাই ( LIMIT = 5 )। Page 1: LIMIT 5 OFFSET 0 (প্রথম ৫টি ডাটা আসবে) Page 2: LIMIT 5 OFFSET 5 (প্রথম ৫টি বাদ দিয়ে ৬ থেকে ১০ নম্বর ডাটা আসবে) Page 3: LIMIT 5 OFFSET 10 (প্রথম ১০টি বাদ দি...

Internal Implementation of Array

 Array মূলত Contiguous Memory Location    ব্যবহার করে data store করে। ইন্টারনাল প্রসেসিং স্টেপস:  Base Address: Array যখন তৈরি হয়, তখন মেমোরিতে তার শুরুর লোকেশন বা Base Address (ধরি, 1000) ফিক্সড হয়। Element Size: Array-এর ডেটা টাইপ অনুযায়ী প্রতিটি এলিমেন্টের সাইজ ফিক্সড থাকে (যেমন, Integer হলে 4 Bytes)। Direct Formula: যখন আপনি Array[4] চান, তখন CPU মেমোরিতে কোনো লুপ চালায় না। সে সরাসরি এই সূত্রটি ব্যবহার করে: Target Address = Base Address + (Index * Element Size) উদাহরণ: মেমোরিতে Array-এর শুরু যদি হয় 1000 নম্বর ঘরে এবং প্রতিটি এলিমেন্ট যদি 4 Bytes জায়গা নেয়, তবে ৪ নম্বর ইনডেক্সের অ্যাড্রেস হবে: 1000 + (4 * 4) = 1016 । CPU সরাসরি 1016 নম্বর অ্যাড্রেসে জাম্প করে ভ্যালু নিয়ে আসে। কোনো সার্চ বা লুপ লাগে না বলেই এটি O(1) । Python  Dynamic Array Python list (যা আসলে একটি Dynamic Array) এই সমস্যাটি সমাধান করে References বা Pointers-এর মাধ্যমে। Dynamic array কিভাবে Element size fix করবে? আমার array তে যদি digit, string থাকে তখন কিভাবে element size আসবে?  ar...

পাইথন প্রোগ্রামিং ল্যাঙ্গুয়েজের মাল্টি প্রসেসিং এবং মাল্টি থ্রেডিং

পাইথন প্রোগ্রামিংয়ে মাল্টি-থ্রেডিং (Multi-threading) এবং মাল্টি-প্রসেসিং (Multi-processing) হলো একই সাথে একাধিক কাজ (Concurrency) করার দুটি ভিন্ন উপায়। ১. মাল্টি-থ্রেডিং (Multi-threading) বাস্তব উদাহরণ: আপনার রেস্টুরেন্টে একজন প্রধান শেফ (CPU/Process) আছেন এবং তার আন্ডারে ৪ জন অ্যাসিস্ট্যান্ট শেফ (Threads) আছেন। তারা সবাই একই রান্নাঘরে (Memory Space) কাজ করছেন। একজন সবজি কাটছেন, একজন মসলা পিসছেন, একজন মাংস ধুচ্ছেন। তারা একই উপাদান এবং থালা-বাসন শেয়ার করছেন। কীভাবে কাজ করে: এখানে একটি মাত্র মেইন প্রোগ্রাম বা প্রসেসের ভেতরে একাধিক "থ্রেড" বা ছোট ছোট কাজের ধারা তৈরি হয়। এরা সবাই কম্পিউটারের একই মেমোরি (RAM) শেয়ার করে। কোথায় ব্যবহার করবেন (I/O Bound Tasks): যখন আপনার প্রোগ্রামে এমন কাজ থাকে যেখানে CPU-কে বসে থাকতে হয় (যেমন: ইন্টারনেট থেকে ফাইল ডাউনলোড করা, ডেটাবেজ থেকে ডেটা আনা, বা ইউজারের ইনপুটের জন্য অপেক্ষা করা)। পাইথনের সীমাবদ্ধতা (GIL): পাইথনে GIL (Global Interpreter Lock) নামের একটি লক থাকে। এর কারণে মাল্টি-থ্রেডিং করলেও পাইথন একসাথে মাত্র একটি থ্রেডকেই CPU ব্যবহার করতে দ...