আমার প্রিয় পোস্ট

সমালোচনা জীবনের পাথেয়, অযাচিত প্রশংসা জীবনের অন্তরা।

PHP::cURL - একটি Facebook Remote Script

১০ ই ডিসেম্বর, ২০০৯ রাত ৮:৪৪

শেয়ারঃ
0 0 0

কাজ করতে ইচ্ছে করছে না, কারন অনেক কাজ জমে গেছে।তাই কাজ থেকে ফাকি দেবার জন্যেই এই লেখা, অবশ্য টেকি পোস্ট।

কি জন্য এই পোস্ট, সেটা জেনে এই লেখা পড়তে হলে এইখানে ক্লক করুন।

আমরা যখন একটা ওয়েবপেজ ব্রাউজ করি, তখন ব্রাউজার প্রথমে টেক্সট (এইচ.টি.এম.এল) রিড করে, এবং পরে রিসোর্স লিংক থেকে রিসোর্স ডাউনলোড করে থাকে, ছবি/ফ্ল্যাশ এপলেট/জাভা এপলেট ইত্যাদি। খেয়াল করে থাকবেন হয়তো, যে কমপিউটারে এ্যাডোব ফ্ল্যাশ প্লেয়ার ইনস্টল করা থাকে না, সেখানে ফ্ল্যাশ এপলেট রান করে না। কারন ব্রাউজারের রিসোর্স ম্যানেজার যখন HTML Code থেকে ফ্ল্যাশ এপলেটের URL খুজে পায়, তখন অপারেটিং সিস্টেমের কাছে এক্সটেশন/প্লাগইন Seek করে। যদি অপারেটিং সিস্টেম রেসপন্স করে থাকে যে ফাইল এক্সটেশন/প্লাগইনটি পরিচিত, তখন URL থেকে ফ্ল্যাশ এপলেট ডাউনলোড হতে থাকে, এবং ফ্ল্যাশ প্লেয়ার মুভি/এপলেট রিড করে। এটা সহজ ভাষায় ব্রাউজারের একটিভিটি।

এখন আমরা যদি একটি Script লিখতে চাই তবে আমাদেরকে একটা প্রক্সি এ্যাপলিকেশন লিখতে হবে, যা ব্রাউজারের মতো আচরন করবে। কারন, সার্ভারের কাছে রিসোর্সের জন্য রিকোয়েস্ট পাঠাতে হলে RFC মেনে কাজ করতে হয়। তাহলে আমাদেরকে কি অনেক Routine Script লেখতে হবে? না এই জন্য আমরা অনেকগুলো টেকনিক ব্যবহার করতে পারি। যেমন, WGET, Socket, File, CURL। তবে আমি এখানে CURL নিয়ে কিছু কথা বলবো। অন্যগুলো না হয় অন্যকোনো 'ফাকি দিবসে' লেখা যাবে।

WGET, CURL হলো একটি ইউনিক্স প্রোগ্রাম যা ইউনিক্স Shell এ Run করে। Socket হলো প্রটোকল, আর আমরা এখানে PHP তে উদাহরন টানবো, এবং এই ল্যাংগুয়েজে Socket এর জন্য বিল্টইন ফাংশন আছে। File এর ও PHP তে ফাংশন বিদ্যমান। যারা উইন্ডোজ ইউজার তাদের চিন্তিত হবার কারন নেই, কারন CURL এর মড্যুল PHP এর উইন্ডোজ ডিস্ট্রিবিউশনে বান্ডেল করে দেয়া আছে। যা হোক, ভুমিকা বাদ দেই, তাতে আমাদের সবার ধৈর্য্যচ্যুতি ঘটতে পারে (আমার ঘটে গেছে :))।

cURL = Client URL
মনে করি আমরা একটা এ্যাপলিকেশন বানাবো যেটা ফেসবুকের স্ট্যাটাস চেন্জ করে দিবে আপনার ওয়েব সাইট থেকে বা লোকালহোস্ট থেকে।

একটা এইচটিএমএল ফরম তৈরী করি, যেখানে ইনপুট হিসেবে ইউজার, পাসওয়ার্ড, এবং স্ট্যাটাস ম্যাসেজ থাকবে। এবং index.php নামে ওয়েবসার্ভারের রুটে (বা আলাদা ফোল্ডারে) সেভ করি।
সামু তে বাগ আছে, এইচটিএমএল কন্টেন্ট থাকলে পোস্ট এডিট করলে পরে আর দেখায় না, তাই দয়া করে এটাচমেন্ট থেকে index.php এর কোড দেখে নিন।

আমাদের এখন Proxy Script তৈরী করতে হবে। আমরা প্রথম ফেইসবুকের হোমপেজে ভিজিট করবো যাতে করে ফেইসবুক আমাদের স্ক্রীপ্টকে চিনতে না পারে, এন্ড ইউজার এটিচুড - ফাকি বাজি আরকি!

//Initializing FB Homepage to void suspicious attitude
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://login.facebook.com/');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3");
$page = curl_exec($ch);
/*
কোড কমেন্ট:
curl_init() - এই ফাংশন কল করে ইনিশিয়েলাইজ করে নিচ্ছি
curl_setopt() - এই ফাংশন দিয়ে আমরা ব্রাউজারের ব্যবহারবিধি বলে দেব।
CURLOPT_URL - যে পেজটা আমরা এই স্ক্রীপট দিয়ে পড়তে চাই
CURLOPT_SSL_VERIFYPEER - যদি আমরা SSL Certificate Validate করতে চাই তবে ১ হবে, অন্যথায় ০ হবে। সাধারনত ব্যাংকের ট্রানসেকশন সংক্রান্ত প্রসেসে এটা ট্রু করে নিতে হয় নিরাপত্তার জন্য, তবে এর জন্যে Certificate ইন্সটল করে নিতে হয়। সাধারন কাজে লাগে না, তাই ঐ দিকে যাবো না।
CURLOPT_COOKIEFILE - যে ফাইলে আমরা কুকিগোলো সেভ করবো।
CURLOPT_COOKIEJAR - যে ফাইলে আমরা কুকিগোলো রিড করবো।
CURLOPT_COOKIEJAR এবং CURLOPT_COOKIEFILE এর ভ্যালু একই হবে।
CURLOPT_RETURNTRANSFER - আমরা CURL কে বলে দিচ্ছি যে আমরা পেজ ডাউনলোড করবো। না চাইলে ০। এখানে ১ বা ট্রু করতে হবে।
CURLOPT_USERAGENT - এখানে আপনি যা ইচ্ছা লিখে দিতে পারেন। এটাই সার্ভার পড়বে। তবে সন্দেহজনক আচরন থেকে বাচার জন্য পরিচিত ব্রাউজারের মেটা লিখে দেয়া উত্তম। তাতে করে আপনি সন্দেহের তালিকা থেকে বেচে যাবেন ৫০ ভাগ।

curl_exec() - সব সেটিংস হয়ে যাবার পর আমরা এই ফাংশন কে কল করলে Shell এ CURL এক্সেকিউট করবে এবং পেইজ ডাউনলোড করবে একজন মানুষের মতো করে। আমরা $page নামক ভ্যারিয়েবলে পুরো পেইজের HTML কোড ধরে রাখবো পরবর্তী ধাপের জন্য।
*/

আমরা এখন ইউজার আইডি, পাসওয়ার্ড , স্ট্যাটাস ম্যাসেজ দিয়ে ফেইসবুকে লগইন করার চেষ্টা করবো-

//Submitting the login credential to FB curl_setopt($ch, CURLOPT_URL, 'https://login.facebook.com/login.php?&next=http://m.facebook.com/home.php'); curl_setopt($ch, CURLOPT_POSTFIELDS,'email='.urlencode($login_email).'&pass='.urlencode($login_pass).'&login=Login'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3"); $page = curl_exec($ch);
/*
কোড কমেন্ট:
এখানে CURL এর দুটো নতুন অপশন প্যারামিটার যোগ হয়েছে -
CURLOPT_POSTFIELDS - আমরা HTML Form এ যে ফিল্ডগুলো এড করেছি সেগুলোকে CURL এর মাধ্যমে POST করবো।
CURLOPT_POST - আমাদের এই অপারেশনে একটি ফরম POST হবে সে সেট করে দিচ্ছি। দেখুন আগের প্রসেসে আমরা POST করিনি, GET করেছি। GET ডিফল্ট অপশন।

$page নামক ভ্যারিয়েবলে পুরো পেইজের HTML কোড ধরে রেখেছি।
*/

বেস্ট কেস হলে আমাদের কাজ শেষ, কিন্তু FB Challenge করে বসলে কাজ হবে না। আরো কিছু সাবধানতা অবলম্বন করতে হবে। দেখি কিভাবে FB Challenge করতে পারে।

আপনার IP পরিচিত না হলে আপনাকে সন্দেহ করে জন্মদিন জিজ্ঞেস করবে। আমরা তারজন্যেও প্রস্তুত। আমাদের চেক করে দেখতে হবে যে স্পেসিফিক কোনো টেক্সট আছে কিনা। এইজন্য রেগুলার এক্সপ্রেশন লাগবে। PHP এর আছে দারুন এক ফাংশন - preg_match। ereg/preg নিয়ে অন্যদিন কথা বলবো। আর এইখানে কোড তুলে দিলে ভালো দেখাচ্ছে না, ডাউনলোড করে নিন এইখান থেকে । -

if(preg_match('/You are signing in from an unfamiliar location/sim',$page)) {
//কিছু করতে হবে
}


এই কাজটি ফেইসবুকের API দিয়ে করা যায়। কিন্তু আমি এখানে PHP - cURL ব্যবহার ও পদ্ধতি দেখাবার জন্য এভাবে বর্ননা করলাম। কারো কোনো কিছু বুঝতে হলে আমাকে জানাবেন, সার্বিক ভাবে সাহায্য করবো। ধন্যবাদ।

হেল্প ও রেফারেন্স লিংক:
PHP কি?
cURL
cURL কি?

 

প্রকাশ করা হয়েছে: ওয়েব-টেক-নেট  বিভাগে । সর্বশেষ এডিট : ০৯ ই ডিসেম্বর, ২০১০ রাত ১০:০০ | বিষয়বস্তুর স্বত্বাধিকার ও সম্পূর্ণ দায় কেবলমাত্র প্রকাশকারীর...

 

১. ১০ ই ডিসেম্বর, ২০০৯ রাত ৮:৪৭
সারওয়ার ইবনে কায়সার বলেছেন: /:)মাথার উপ্রে দিয়া শোঁ শোঁ গতিতে ছুইটা গেলো.....:)

তারপরও পোস্টের জন্য প্লাস
১০ ই ডিসেম্বর, ২০০৯ রাত ৮:৫৯

লেখক বলেছেন: আপনার মাথার উপর দিয়া শো শো গতিতে ছুইটা যাবার পরও যে আপনার মাথা গোল আছে, এইজন্য আলহামদুলিল্লাহ। আপনার প্লাস ও পড়ার জন্য আপনাকে অসংখ্য ধন্যবাদ :)

১০ ই ডিসেম্বর, ২০০৯ রাত ৯:৪৯

লেখক বলেছেন: :(

৩. ১০ ই ডিসেম্বর, ২০০৯ রাত ১০:১১
ম্দু বলেছেন: অসাধারন ।কিছু ধারনা আগে থেকেই ছিল...আরও ভালভাবে এখন বুঝতে পারলাম ।আগামীতে কি এরকম আরও কিছু লেখা আশা করতে পারি ?? :) + এবং অবশ্যই প্রিয়তে ।
১১ ই ডিসেম্বর, ২০০৯ রাত ১২:৪৭

লেখক বলেছেন: ধন্যবাদ। আগেও কিছু টেকি পোস্ট দিয়েছিলাম। সামুতে টেকি পোস্ট খুব একটা সাড়া পড়ে না। আর বাংলা লিখা তুলনামুলক কষ্ট সাড়া না পেলে লিখতে ইচ্ছা করে না। আপনারা যদি সাথে থাকেন তবে লিখে যাবো ইনশাল্লাহ্‌।

আগের কিছু পোষ্ট:
আউটসোর্সিং: Ebay শপ ডিজাইনার/প্রোগ্রামারদের জন্য একটি জরুরী টুল

তৈরী করুন এনিমেটেড ছবি - ওয়েব থেকে - বানাইলাম আপনাদের জন্য

তৈরী করুন ভি-কার্ড (মোবাইলের জন্য) - ওয়েব থেকে - বানাইলাম আপনাদের জন্য

তৈরী করুন ভি-ক্যালেন্ডার (মোবাইলের জন্য) - ওয়েব থেকে - বানাইলাম আপনাদের জন্য


উইন্ডোজ এ রাজীয়তি - ২

উইন্ডোজ এ রাজীয়তি

৪. ১০ ই ডিসেম্বর, ২০০৯ রাত ১১:২৫
সিউল রায়হান বলেছেন: ভাল লাগলো পড়ে :) উদাহরণ দিয়ে এভাবে টিউটোরিয়াল দেয়ার রীতি রেগুলার বজায় রাখবেন আশা করি......

অফ টপিক: ইউটিউবের কাজটা করার সময় আমি নিজে একটা ক্লাস লিখেসিলাম যেইটা কা্র্লের চেয়েও ফাস্ট কাজ করে ;)
১১ ই ডিসেম্বর, ২০০৯ রাত ১:০৫

লেখক বলেছেন: Routine Class লিখেছিলেন? দারুন! কোন প্রটোকলে? PHP এর fsockopen এর চাইতে cURL Fast, Robust এবং Reliable। WGET কিন্তু আবার cURL এবং fsockopen এর চাইতে ভালো। ডাউনলোড ব্যন্ডউইথ সবচেয়ে ভালো ইউটিলাইজ করতে পারে। ১ জিবি ডাউনলোড ব্যান্ডউইথ এ ক্লায়েন্টের সার্ভারে আমাদের একটা পিএইচপি এ্যাপলিকেশন (WGET / cURL) রান করছে ১ বছর হলো। অসাধারন পারফরমেন্স।

আপনার ক্লাস সম্পর্কে বলুন, আমরাও জানি।

৫. ১০ ই ডিসেম্বর, ২০০৯ রাত ১১:৪৪
অদ্ভুত বলেছেন: যদিও আমার পিএইচপি এরাবিয়ান হর্স সুপার ঢেউটিন ভাল লাগেনা তারপরও + :)
১১ ই ডিসেম্বর, ২০০৯ রাত ১:১৩

লেখক বলেছেন: পিএইচপি কে আমিও ভালা পাইতাম না। হাতে খড়ি জব এ জয়েন করে। ২০০৪ এ। এর আগে পার্লে কাজ করতাম। এবং অনেক কাজই করা হয়েছে। বাংলাতে আমার একটা পোর্টাল ছিলো, ২০০২ এ - http://www.banglavasha.com/ । প্রথম বাংলায় ডাইনামিক পোর্টাল। ইউনিজয়, ফোনেটিক ও ইংলিশ লেআউটে বাংলা চ্যাট ছিলো (প্রথম বাংলায় ওয়েব চ্যাট)। সার্ভার ক্র্যাশ করলো। সব হারালাম। ব্যাকআপ ছিলো না। আর ইচ্ছে হলো না নতুন করে করার। তাই ট্রাভেল পোর্টাল করে রেখে দিয়েছি, এটাও পেন্ডিং অবস্থায়।

পার্ল কে আমি খুব ভালা পাই। অন্য রকম ফ্লেভার :)

আপনাকে পড়ার জন্য ধন্যবাদ :)

৬. ১১ ই ডিসেম্বর, ২০০৯ রাত ১:০৭
কঠিন চিজ বলেছেন: সারওয়ার ইবনে কায়সার বলেছেন: /:)মাথার উপ্রে দিয়া শোঁ শোঁ গতিতে ছুইটা গেলো.....:)

তারপরও পোস্টের জন্য প্লাস


চার বিয়ে
Click This Link
১১ ই ডিসেম্বর, ২০০৯ রাত ১:২২

লেখক বলেছেন: পোস্ট পড়ার জন্য ধন্যবাদ :)

আমি কমেন্টাইছি, তবে ভয়ে ভয়ে ;)

৭. ১১ ই ডিসেম্বর, ২০০৯ রাত ১:৪১
সিউল রায়হান বলেছেন: আমিতো fsockopen দিয়েই করেসিলাম ;) কার্ল ইনিশিয়েট করতে এমনি এমনি টাইম নষ্ট হয় মনে হয়েছিল, তাই নিজেই হেডার ম্যানিপুলেট করেছিলাম.......

ক্লাসটা দিয়ে লাভ নাই, অ্যালগরিদমটা দেই :) ( বি.এস.ডি. লাইসেন্সে প্রকাশ করলাম)

১) সকেট ওপেন কর ও দরকারী হেডার রিকোয়েস্টগুলিকে একটা স্ট্রিংয়ে নাও

২) "MAX_LIMIT" পরিমাণ ডাটা রিকোয়েস্ট কর গেট/পোস্ট মেথড দিয়ে ( "MAX_LIMIT" = নেটওয়ার্কের সর্বোচ্চ ডাটা ট্রান্সফার লিমিট, যেমন: IP-4 এ এটা মনে হয় ৪০ বাইট)

৩) রেসপন্সকে তুলনা করে দেখ এর মাঝে হেডারের শেষ পাওয়া গেল নাকি ( পরপর দুইটা \r\n আরকি)

৪) যদি না পাওয়া যায় তাহলে রেজাল্ট হেডার অ্যারেতে রেসপন্সকে যোগ কর এবং স্টেপ ২ তে যাও

৫) যদি পাওয়া যায় তাহলে হেডার অংশটুকুন হেডার অ্যারেতে এবং বাকিটুকুন রেজাল্ট অ্যারেতে যোগ কর

৬) হেডারে উল্লেখিত পদ্ধতিতে ( ট্রান্সফার এনকোডিং) বাকি ডাটা রিকোয়েস্ট কর

**************

লাইসেন্স উল্লেখ করে লিখলাম এতে অবাক হবেন না কারণ কোডারদের উচিত লাইসেন্স দিয়ে কাজ করা কারণ কোন বিষয়ে সেই বিষয়টা নিয়ে প্রথম যিনি ভেবেছেন তার কাছে অনেক ইনফো পাওয়া যেতে পারে যা বিষয়টিকে এগিয়ে নিতে সাহায্য করবে...... প্রথম ভাবা মানুষটিও সেই বিষয়টিকে এগিয়ে নিতে চান.....
আর এটাই ওপেন সোর্সের ধারণা...... কোড করবে সবাই.... কোন চুরি হবে না, যা হবে সবার মিলিত চেষ্টায় ও সবাইকে ক্রেডিট দিয়েই হবে :)
আপনি অ্যালগরিদম নিয়ে কাজ করেন যেহেতু আপনিও এই থিম মেনে চলবেন আশা করি, কোডিং ল্যাংগুয়েজ রিলেটেড আপনার বাকি পোস্টগুলিকেও কোন লাইসেন্সে দিয়ে দিন.....
১১ ই ডিসেম্বর, ২০০৯ রাত ১:৫৮

লেখক বলেছেন: ধন্যবাদ আপনাকে মুল্যবান পরামর্শ দেবার জন্য। প্র্যাকটিস করার চেষ্টা করবো। এবং আপনার একটা লেখা পড়ে WTFPL লাইসেন্স দিয়ে ফেইসবুকের টেস্ট স্ক্রীপ্ট ডাউনলোড করে দিয়েছি ;)

আপনার এ্যালগরিদম আমার কাছে একটু পুরোনো মনে হয়েছে। আর এইরকম ক্লাস phpclasses.org অনেক আছে। সম্ভবত একটা এওয়ার্ড উইনিং ক্লাস ও আছে। যাই হোক আপনাকে অসংখ্য ধন্যবাদ শেয়ার করার জন্য।

fsockopen দিয়ে স্ক্রীপ্টিং করলে আপনার Script কে ব্যাকগ্রাউন্ড প্রসেসে পাঠিয়ে দেবেন, নাহয় সার্ভার লোড বেড়ে যাবে। সার্ভার ডাউন হয়ে যেতে পারে একাধিক রিকোয়েস্ট একসাথে রান করলে।

আর CURL নিজেই সিস্টেম লেভেলে রান করে, CGI এর মতো। Shell থেকে রিটার্ন নিয়ে বা ফাইল/ডাটাবেজ লগ করে নেক্সট প্রসেসে যেতে পারেন। তবে আপনি ছোট ফাইল বা প্রসেস নিয়ে কাজ করলে fsockopen এ সাচ্ছন্দ্যবোধ করলে তাই দিয়ে করতে পারেন। কিন্তু ব্যান্ডউইথ/মেমরী কনজ্যুম হলে একটু টুইক করে নেবেন।


৮. ১১ ই ডিসেম্বর, ২০০৯ রাত ২:৫২
সিউল রায়হান বলেছেন: WTFPL লাইসেন্স জিনিস একটা ;)

কার্ল নিয়ে কাজ করিনি কারণ এর স্ট্রাকচারটা জানিনা :( মানে কোডিংটা কিভাবে করা সেটা আরকি..... তাই এমন হতে পারে যে ও নিজে নিজে এমন অনেক কাজ করল যেগুলি আমার দরকারই নাই ফলে পুরাই লস

অন্যদিকে fsockopen এর স্ট্রাকচারটা জানি ( ও শুধু নেটওয়ার্ক প্যাকেট তৈরী করে বাকিটা ওর কাছে যাওয়া প্যারামিটার দিয়ে ফিল করে, কোন এক্সট্রা প্রসেসিং না)...... ফলে আমার মনে হয়েছে এটাই আমার কাজের জন্য পারফেক্ট......


তবে কার্লকে হাই লেভেল থ্রেডিংয়ে (মানে প্রতি সেকেন্ডে খুব বিশাল পরিমানে রিকোয়েস্ট আসা কোন সাইট) বিট করা টাফ আছে কারণ ওটা সিস্টেমে চলে অন্যথায় একবার মা্ত্র সকেট ওপেন করা লাগে এমন কাজে fsockopen টাই ভাল....


কোডটা পুরাতন তবে এফিসিয়েন্ট মনে হয়েছে...... আর মিয়া আপনি তো আছেনই এটাকে আরো এফিসিয়েন্ট করতে কারণ এটা ওপেন সোর্স জিনিস :)

আপনার সাথে কথা বলে ভাল লাগলো কারন আপনিও এফিসিয়েন্সি পছন্দ করেন :`> আমাদের দেশের পি.এইচ.পি. কোডারদের কাজে এটা খুব দেখেছি আমি/:).......

রেগুলার নজর থাকবে আপনার ব্লগে......আর হ্যা, কোড না দিয়ে অ্যালগরিদমটা দিবেন তাহলে পি.এইচ.পি হোক আর মাতৃভাষা(সি/সি++) যেটাতেই কাজ করিনা কেন আমরা সবারই উপকার হবে, কি বলেন /?? :)
১১ ই ডিসেম্বর, ২০০৯ রাত ৩:১৭

লেখক বলেছেন: কোড ব্লক তুলে দিয়েছি যারা আসলে সি.এস.ই ব্যাকগ্রাউন্ড থেকে আসে নি তাদের জন্য। ইনশাল্লাহ Pseudo code/এ্যালগরিদম তুলে দেবে পরের লেখাগুলোতে ।

৯. ১১ ই ডিসেম্বর, ২০০৯ রাত ৩:০৬
'লেনিন' বলেছেন: দারুণ! এই সংক্রান্ত এটাই মনে হয় প্রথম বাংলাতে কোনো টিউটোরিয়াল।

১১ ই ডিসেম্বর, ২০০৯ রাত ৩:১৫

লেখক বলেছেন: কেমন আছেন? জানিনা প্রথম কিনা, কিন্তু হঠাৎ মনে হলো লিখে ফেললাম। 2d barcode নিয়া একটা পোস্ট লিখবো, ওটা নিয়া মনে হয় কেউ লিখে নাই :) ধন্যবাদ।

১১ ই ডিসেম্বর, ২০০৯ ভোর ৪:৩৫

লেখক বলেছেন: ধন্যবাদ।

১২. ২১ শে এপ্রিল, ২০১০ রাত ১২:৫৮
তামীম বলছি বলেছেন: কাজের পোষ্ট। প্রিয়তে নিয়ে রাখলাম। পরে সময় নিয়ে পড়ে দেখব। ধন্যবাদ পোষ্টের জন্য।

 

মোট সময় লেগেছে ১.৫১৩৫ সেকেন্ড

 

সামহোয়‍্যার ইন...ব্লগ বাঁধ ভাঙার আওয়াজ, মাতৃভাষা বাংলায় একটি উন্মুক্ত ও স্বাধীন মত প্রকাশের সুবিধা প্রদানকারী প্ল্যাটফর্ম। এখানে প্রকাশিত লেখা, মন্তব‍্য, ছবি, অডিও, ভিডিও বা যাবতীয় কার্যকলাপের সম্পূর্ণ দায় শুধুমাত্র সংশ্লিষ্ট প্রকাশকারীর...
© সামহোয়্যার ইন...নেট লিমিটেড | ব্যবহারের শর্তাবলী | গোপনীয়তার নীতি
আমার দশর্ন :
ধর্ম নিরপেক্ষতা একটা জুজু। আর নিরপেক্ষ ধর্ম হলো ইসলাম, কারন ইসলাম বিশ্বাস করে 'যার যার ধর্ম তার তার...
আর এস এস ফিড

পোস্ট আর্কাইভ

আমার লিঙ্কস

আমার বিভাগ