জেমিনি সিএলআই ব্যবহার করে সহজে এবং সরলভাবে ব্যাখ্যা পাওয়ার জন্য একটি কমান্ড
নমস্কার, আমি মুনো (অদক্ষ)।
অনেকদিন পর দেখা। আমি শক্তি সঞ্চয় করছিলাম। এটা একটা রসিকতা ছিল, আমি শুধু অলসতা করছিলাম। দুঃখিত।
সুতরাং, এটি একটি ছোট বিষয়, তবে জেমিনি সিএলআই প্রকাশিত হওয়ায় সিএলআই ব্যবহারকারীদের জন্য এটি আনন্দের।
আমি শুধু এটি.bashrc-এ রেখে দেখেছি।
ghelp() {
(echo "এটা ব্যাখ্যা করো" ; cat $1 ) | gemini
}
এটি বিশেষ কিছু নয়, তবে ব্রাউজারের মাধ্যমে একটি অতিরিক্ত ধাপ ব্যবহার করে LLM-কে কোড ব্যাখ্যা করানোর প্রক্রিয়াটি চলে গেছে, যা এটিকে আরও সহজ করে তুলেছে।
যেমন এটি দিয়ে
[curljs]
thepassenger:[haturatu]:~/git/curljs$ ghelp curl.js
এই কোডটি একটি Node.js স্ক্রিপ্ট যা [Puppeteer](https://pptr.dev/) নামক লাইব্রেরি ব্যবহার করে একটি নির্দিষ্ট ওয়েবপেজের বিষয়বস্তু পুনরুদ্ধার করে।
নীচে, কোডের প্রতিটি অংশ কী করে তা ব্যাখ্যা করা হলো:
1. **`const puppeteer = require('puppeteer');`**
* Puppeteer লাইব্রেরি লোড করে। এই লাইব্রেরিটি প্রোগ্রাম্যাটিকভাবে Chrome বা Chromium ব্রাউজার নিয়ন্ত্রণ করতে ব্যবহৃত হয়।
2. **`(async () => { ... })();`**
* এটি একটি "তাত্ক্ষণিকভাবে আহ্বান করা অ্যাসিঙ্ক্রোনাস ফাংশন"। পুরো কোডটিকে একটি অ্যাসিঙ্ক্রোনাস ফাংশনে আবদ্ধ করে, `await` কীওয়ার্ডটি অভ্যন্তরীণভাবে ব্যবহার করা যায়। `await` সময়সাপেক্ষ প্রক্রিয়া (যেমন ব্রাউজার চালু করা বা পৃষ্ঠা লোড করা) শেষ হওয়ার জন্য অপেক্ষা করার জন্য প্রয়োজনীয়।
3. **`const url = process.argv[2];`**
* কমান্ড লাইন থেকে পাস করা তৃতীয় আর্গুমেন্টটি `url` ভেরিয়েবলে সংরক্ষণ করে।
* উদাহরণ: যদি `node script.js https://example.com` হিসাবে এক্সিকিউট করা হয়, তাহলে `process.argv[2]`-এ `https://example.com` থাকবে।
4. **`if (!url) { ... }`**
* যদি কোনো URL নির্দিষ্ট না করা হয়, তাহলে একটি ত্রুটি বার্তা প্রদর্শিত হয় এবং `process.exit(1)` দিয়ে স্ক্রিপ্টটি অস্বাভাবিকভাবে বন্ধ হয়ে যায়।
5. **`const browser = await puppeteer.launch({ headless: true });`**
* একটি নতুন ব্রাউজার ইনস্ট্যান্স চালু করে।
* `headless: true` হলো ব্রাউজারের UI (স্ক্রিন) প্রদর্শন না করে ব্যাকগ্রাউন্ডে চালানোর একটি সেটিং। ডিবাগিংয়ের সময়, যদি আপনি ব্রাউজারের অপারেশন দৃশ্যত নিশ্চিত করতে চান, তাহলে এটিকে `false` সেট করুন।
6. **`const page = await browser.newPage();`**
* চালু করা ব্রাউজারে একটি নতুন ট্যাব (পৃষ্ঠা) খোলে।
7. **`await page.goto(url, { waitUntil: 'networkidle2' });`**
* নির্দিষ্ট URL-এ নেভিগেট করে।
* `waitUntil: 'networkidle2'` হলো পৃষ্ঠা লোড হওয়ার জন্য অপেক্ষা করার একটি গুরুত্বপূর্ণ বিকল্প। এটি নেটওয়ার্ক সংযোগের সংখ্যা 2 বা তার কমে আসার পর 500 মিলিসেকেন্ডের জন্য কোনো নতুন সংযোগ না আসা পর্যন্ত অপেক্ষা করে। এটি আধুনিক ওয়েবসাইট (যেমন SPA) সঠিকভাবে প্রদর্শন করতে সাহায্য করে যা জাভাস্ক্রিপ্ট দিয়ে গতিশীলভাবে বিষয়বস্তু লোড করে।
8. **`await new Promise(resolve => setTimeout(resolve, 5000));`**
* পৃষ্ঠা লোড হওয়ার পর, এটি অতিরিক্ত 5 সেকেন্ড অপেক্ষা করে।
* এই অতিরিক্ত অপেক্ষার সময়টি এমন অ্যানিমেশন বা নির্দিষ্ট অপারেশনের পরে প্রদর্শিত বিষয়বস্তুর জন্য অপেক্ষা করার জন্য ঢোকানো হয়েছে যা শুধুমাত্র `networkidle2` দিয়ে সম্পূর্ণরূপে লোড করা যায় না।
9. **`const html = await page.content();`**
* পৃষ্ঠার সম্পূর্ণ HTML বিষয়বস্তু পুনরুদ্ধার করে। এতে জাভাস্ক্রিপ্ট দ্বারা গতিশীলভাবে তৈরি সমস্ত HTML উপাদান অন্তর্ভুক্ত থাকে।
10. **`console.log(html);`**
* পুনরুদ্ধার করা HTML কনসোলে আউটপুট করে।
11. **`await browser.close();`**
* ব্রাউজার ইনস্ট্যান্স বন্ধ করে এবং রিসোর্স মুক্ত করে। এটি ভুলে গেলে প্রক্রিয়াটি অনির্দিষ্টকালের জন্য চলতে পারে।
### সারসংক্ষেপ
এই স্ক্রিপ্টটি **"কমান্ড লাইনে নির্দিষ্ট করা URL-এর ওয়েবপেজটি জাভাস্ক্রিপ্ট এক্সিকিউশন সম্পূর্ণ হওয়ার পর তার চূড়ান্ত অবস্থায় পুনরুদ্ধার করে এবং তার HTML স্ট্যান্ডার্ড আউটপুটে প্রদর্শন করে"** এই প্রক্রিয়াটি সম্পাদন করে।
এটি এমন ওয়েবসাইট (যেমন SPA) থেকে তথ্য পুনরুদ্ধার করার জন্য একটি অত্যন্ত দরকারী পদ্ধতি যা জাভাস্ক্রিপ্ট দ্বারা গতিশীলভাবে রেন্ডার করা হয় এবং একটি সাধারণ HTTP অনুরোধের মাধ্যমে প্রাপ্ত করা যায় না (যেমন, ওয়েব স্ক্র্যাপিংয়ের জন্য)।
এটি এইভাবে আউটপুট দেয়।
তবে, এটাই সব...