Monday, August 8, 2016

লিনাক্সে টার্মিনাল ব্যবহার পর্ব-২

লিনাক্সে টার্মিনাল ব্যাবহারপর্ব -১  এ আমরা দেখেছিলাম কিভাবে কমান্ড লাইন অর্থ্যাৎ ব্যাশ এর কাজ শুরু করবো। আজ আমরা তার কিছু অ্যাডভান্স কাজ এবং কমান্ডস দেখবো। প্রথমেই দেখা যাক আমরা লিনাক্সের টার্মিনালে কিভাবে কিছু ‍প্রিন্ট করবো। ব্যাপারটা খুবই সহজ। জাষ্ট লিখব
echo “Text here.”

এখানে আমরা একটা ষ্ট্রিং নিয়ে কাজ করেছি। চাইলে আমরা ষ্ট্রিংটাকে আগে রিড করেও তারপর প্রিন্ট করতে পারি। তাহলে রিড করার জন্য আমাদের লিখতে হবে-
read x

তাহলেই টার্মিনালে ইনপুট চাইবে। সেখানে আমরা ইনপুট দিলে সেটা x ভেরিয়েবলে স্টোর হবে। এই ভেরিয়েবল যেকোন টাইপ হতে পারে। এবার আমরা x কে প্রিন্ট করবো। লিখব-
echo $x

এখানে ডলার সাইন নির্দেশ করছে এটা একটা ভেরিয়েবল। ডলার যেমন দামি, এটাও তেমন দামি জিনিস। হা হা…
আচ্ছা এবার আমরা একটা নিউমেরিকাল ইনপুট দিয়ে দেখি প্রিন্ট হয় কি না।

ওয়াও। দ্যাটস ওসাম।
ব্যাপারটা ওনেকটা সি প্রোগ্রামিং এর মত তাইনা? অবশ্য একটা সমস্য আছে। সেখানে আমরা একবারে একটা ফাইলে প্রোগ্রাম লিখি এবং সেটাকে একবারে রান করে ইনপুট দিয়ে আউটপুট পাই। কিন্তু এখানে এক লাইন এক লাইন করে লিখতে হয়।
আচ্ছা যদি এখানেও যদি পুরো প্রোগ্রাম একসাথে লিখে রান করা যেত তবে কেমন হতো তুমি বলতো? এই পথ যদি না শেষ হয় তবেকেমন হত তুমি বলতো? অনেক ভালো।
ওয়েল লিনাক্স আমাদের সে সুযোগও দিচ্ছে। এটাকে স্ক্রিপ্টিং বলে। আমরা আমাদের প্রয়োজনীয় কমান্ডগুলি একটা ফাইলে লিখবো, যেটাকে বলা হয় শেল। সি প্রোগ্রাম যেমন .c এক্সটেনশন দিয়ে শেষ হয়, শেল ফাইল তেমনি .sh এক্সটেনশন দিয়ে শেষ হয়।

ওকে তাহলে আমরা একটা ফাইল ক্রিয়েট করে সেটাতে কিছু কমান্ড লিখি। ফাইল ক্রিয়েটের জন্য আমরা যে কোন একটা টেক্সট এডিটর ব্যবহার করবো। আমি এখানে nano ব্যাবহার করছি। nano ওপেন করার জন্য আমরা টর্মিনালে শুধু লিখবো- nano
টেক্সট এডিটরে আমরা আমাদের কমান্ডগুলো লিখবো। লেখা শেষ হলে ctrl+x চাপবো। তখন এডিটর আমাদের কাছে জানতে চাইবে আমরা কি ফাইলটি সেভ করবো কি না। সেভ করলে y না করলে n। আমরা সেভ করবো। y লিখে এন্টার চাপবো।


তারপর আমাদের কাছে ফাইলের নাম চাইবে। আমরা ফাইলের নাম লিখে এন্টার করবো। এবং অবশ্যই নামের শেষ .sh দিতে ভুলবো না।

ফাইল সেভ করলে আমরা আবার টার্মিনালে ফেরত আসবো।

এবার আমরা ফাইলটা ওপেন করবো, অর্থাৎ রান করবো। সেজন্য আমরা লিখবো-
./filename.sh


ও ও…. এটা কি হলো? আমাদের বলছে পারমিশন নেই। কেমনে কি? ওকে তাহলে আমরা একটু পারমিশন নিয়ে আলোচনা করি।
লিনাক্সের পারমিশনকে আমরা দুই ক্যাটাগরিতে নিতে পারি। এক. এক্সেসিবিলিটি এবং দুই. ইউজার.
এক্সেসিবিলিটি পারমিশন তি ধরনের। রিড পারমিশন যেটার পয়েন্ট হলো 4, রাইট পারমিশন যেটার পয়েন্ট 2 এবং এক্সিকিউশন পারমিশন যেটার পয়েন্ট 1. এখন কোন ফাইলের পারমিশন যদি থাকে 3 তাহলে আমরা বুঝবো সেটার শুধুমাত্র এক্সিকিউশন এবং রাইট পারমিশন আছে (1+2=3)। একইভাবে যদি কোন ফাইলের যদি পারমিশন পয়েন্ট থাকে 7 তাহলে আমরা বুঝবো সেটার সব পারমিশন আছে (1+2+4=7)।
আবার তিন ধরনের ইউজার হলো ওনার, গ্রুপ(নেটওয়ার্ক গ্রুপ) এবং আদার্স/পাবলিক। তিন ধরনের ইউজারের জন্য তিনটি পারমিশন পয়েন্ট।
তো কোন ফাইলের পারমিশন সেট করার কমান্ড হলো-
chmod *** filename.sh

এখানে তিনটি স্টার যথাক্রমে ওনার, গ্রুপ এবং আদার্স/পাবলিক ইউজারের জন্য। সুতরাং আমরা চাইলে এক ইউজারের জন্য এক ধরনের পারমিশন দিতে পারবো।

আচ্ছা এবার তাহলে আমরা আমাদের ফাইলটিতে পারমিশন দি। যেহেতু আমরা কোন নেটওয়ার্কের সাথে কানেক্টেড না। তাহলে আমরাই ওনার আমরাই গ্রুপ আমরাই আদার্স/পাবলিক এবং আমরা সবাই রাজা আমাদের এই রাজার রাজত্বে। সুতরাং আমরা ফুল পারমিশন দিব।
chmod 777 filename.sh

এবার আমরা আমাদের ফাইল আবার রান করি।

ওয়াও। এটা কাজ করছে।
আচ্ছা তাহলে আমরা এবার একটা ছোটখাট প্রোগ্রাম করি যেটাতে দুটি সংখ্যা ইনপুট নিয়ে তাদের যোগফল দেখাবে।
তো আমরা nano ওপেন করে লিখবো এবং add.sh নাম দিয়ে সেভ করবো-

পারমিশন দিব-
chmod 777 add.sh
এবং রান করে ইনপুট দিব।

এখানে কিছু বিষয় খেয়াল রাখতে হবে। যেমন অপ্রয়জনীয় স্পেস দেয়া যাবেনা। সেমিকমা দেয়া যাবেনা ইত্যাদি।
আচ্ছা এবার আমরা একটু কন্ডিশনাল প্রোগ্রামিং শিখবো। অর্থাৎ IF ELSE এর কাজ। তো দেখা যাক-
আমরা একটা প্রোগ্রাম লিখবো যেটা একটি সংখা ইনপুট নিয়ে সেটা কি পজিটিভ, নেগেটিভ নাকি জিরো সেটা দেখাবে। যার নাম দিলাম cond.sh-

পারমিশন সেট করে রান করবো এবং আউটপুট দিব।

এখানে -gt মানে হলো grater then, -lt মানে হলো less then, আর fi নির্দেশ করছে আমাদের পূর্বক্ত if স্টেটমেন্ট শেষ হবে এখানে।
আচ্ছা এই পর্বের বিদায়বেলায় আমরা লুপিং শুরু করে যাব। আপাতত আমরা শুধু ফর লুপ নিয়ে মাথা ঘামাবো। (কারন এর বেশী আমি কিছু পারিনা।)
তাহলে আমরা একটা প্রোগ্রাম লিখি যেটা একটি সংখ্যা ইনপুট নিবে এবং ১ থেকে ওই সংখ্যা পর্যন্ত প্রিন্ট করবে এবং শেষে সবগুলো সংখ্যার যোগফল প্রিন্ট করবে। যেটার নাম দিলাম loop.sh

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

এই পর্ব এই পর্যন্তই। আবারও বলছি যেহেতু আমি লিনাক্সে পুরোপুরি নবিশ। সুতরাং ভুল হতে পারে। ক্ষমাসুন্দর দৃষ্টিতে দেখে জানানোর অনুরোধ করছি। শুদ্ধ করে নেব। ধন্যবাদ।

Md. Rasedur Rahman Roxy
Dept. of CSE
Bangladesh University of Business & Technology

Tuesday, June 28, 2016

লিনাক্সে টার্মিনাল ব্যবহার পর্ব-১

লিনাক্স অপারেটিং সিষ্টেম সম্পর্কে আমরা সবাই কমবেশি জানি। তারপরেও একটু বলি। লিনাক্স একটি ওপেন সোর্স কার্নেল যেটা একজন ফিনিশ ছাত্র লিনাস টরভাডস এর মাধ্যমে 1991 সালে সর্বপ্রথম ছোট পরিসরে ডেভেলপড হয়। এটি একটি ওপেন সোর্স প্রজেক্ট অর্থাৎ এর সোর্সকোড আল্লাহর ওয়াস্তে পাওয়া যায় এবং যে কেউ সেটাকে নিজের মত আপডেট করে নতুন ভাবে বানাতে পারে। যাই হোক আমরা লিনাক্সের কমান্ড লাইনে ফিরে যাই। যদিও লিনাক্সের সব ডিস্ট্রিবিউশনেরই খুব সুন্দর সুন্দর ইউজার ইন্টারফেস আছে তারপরও কেন যেন কমান্ডলাইনে কাজ করেই বেশী মজা পাওয়া যায়। আমার এই লেখাতে আমি আমার অপারেটিং সিস্টেম কোর্সে যেসব কমান্ড শিখেছি সেগুলো গুছিয়ে লেখার চেষ্টা করব।
প্রথমেই আসি কিভাবে কমান্ড লাইন উইন্ডো অর্থাৎ টার্মিনাল ওপেন করবো।
উবুন্টু লিনাক্সে Ctrl+T চেপে টার্মিনাল উইন্ডো ওপেন করা হয়। আর প্রায় সব ডিস্ট্রোতেই (উবুন্টু, রেড হ্যাট, কালি আমি ব্যবহার করেছি) ডেক্সটপে রাইট বাটনে ক্লিক করে একদম নিচ থেকে Open Terminal সিলেক্ট করে ওপেন করা যায়।



আমি কালি লিনাক্স ব্যাবহার করি। সেখানে সাইডবারে এরকম টার্মিনাল আইকন এ ক্লিক করেও টার্মিনাল ওপেন করা যায়।


টার্মিনালে শুরুতে আমরা কিছু ফাইল ম্যানেজমেন্ট এর কাজ করবো।
তার আগে আমরা যদি জানতে চাই আমরা কোন ইউজার একেউন্ট থেকে কাজ করছি তার জন্য আমাদের সেটা লিনাক্সকে সরাসরি ইংরেজীতে জিজ্ঞেস করলেই হবে।
whoami
এই কমান্ডটি লিখে এন্টার প্রেস করুন। লিনাক্স জানিয়ে দিবে আপনি কোন ইউজার। মজার না?

আমরা যদি জানতে চাই আমরা বর্তমানে কোন অবস্থানে আছি ডিস্কের, অর্থাৎ কোন লোকেশনে তাহলে
pwd

কমান্ডটি এক্সিকিউট (এন্টার কি প্রেস) করবো।
এই pwd এর মানে হচ্ছে print working directory. অর্থাৎ বর্তমানে কর্মরত ডিরেক্টরি। ও হ্যাঁ ফোল্ডারকে ডিরেক্টরিও বলা হয়।
দেখা যাচ্ছে আমরা বর্তমানে অপারেটিং সিস্টেমের রুট নামক ফোল্ডারে অবস্থান করছি। বাই ডিফল্ট আমাদের টার্মিনাল রুটেই অবস্থান করবে। শিকড়ের টান বলে কথা।

আচ্ছা এবার আমরা যদি চাই এই ফোল্ডারে আমরা আরেকটা ফোল্ডার ক্রিয়েট করবো, তাহলে নিচের কমান্ডটি এক্সিকিউট করবো।
mkdir Folder_Name

এখানে mkdir  মানে Make Directory. এক্ষেত্রে একটা বিষয় খেয়াল রাখতে হবে ফোল্ডারের নামের মাঝে স্পেস দিলে শুধুমাত্র প্রথম অংশটুকু নাম হিসেবে নেবে। কেন সেটা আমি জানিনা। এই কমান্ড এক্সিকিউট করার পর টার্মিনালে কোন আউটপুট আসবে না।
কিন্তু আমরা কমান্ড দিয়েই দেখতে পারি ফোল্ডার তৈরি হয়েছে কি না। তার জন্য নিচের কমান্ডটি এক্সিকিউট করবো।
ls

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

ওকে, এবার আমরা যদি চাই যে আমরা আমাদের নতুন তৈরি করা ফোল্ডারটিকে এন্ট্রি মারবো, তাহলে ঝটপট নিচের কমান্ডটি এক্সিকিউট করে ফেলি।
cd Folder_name


এখানে cd মানে হলো change directory. আমরা দেখতে পাচ্ছি আমাদের কমান্ড স্ট্রিং পরিবর্তিত হয়েছে। এখন আমরা যদি পূব ব্যাবহৃত pwd কমান্ডটি আবার এক্সিকিউট করি তাহলে আমরা দেখব যে আমার কারেন্ট ওয়ার্কিং ডিরেক্টরি পরিবর্তিত হয়েছে।

এবার আমরা দেখি আমাদের এই নতুন তৈরি ফোল্ডারে কি কি আছে।

যেহেতু এটা একদম ব্রান্ড নিউ ডিরেক্টরি সুতরাং এটাতে কিছু থাকবেনা এটাই স্বাভাবিক।

এবার আমাদের যদি মনে হয় আমরা আবার শিকড়ের টানে রুট এ ফিরে যাবো তাহলে নিচের কমান্ডটি এক্সিকিউট করে ফেলি।
cd ..

দেখা যাচ্ছে আমরা আবার শিকড়ের টানে রুটে ফিরে আসছি। এখানে একটা বিষয় লক্ষনীয়, যেকোন সময় এই কমান্ড ব্যাবহার করে যে আমরা রুটেই আসতে পারবো তা কিন্তু না। এই কমান্ড আমাদের এক স্টেপ প্রিভিয়াস ডিরেক্টরিতে নিয়ে যাবে।

আচ্ছা এখন আমাদের যদি ফোল্ডারের নামটা পছন্দ না হয় তাহলে আমরা সেটাকে রিনেমও করতে পারি কমান্ড দিয়ে।
mv Folder_name New_folder

দেখা যাচ্ছে আমরা আমাদের ফোল্ডারের নাম পরিবর্তন করে Folder_name থেকে New_folder এ রিনেম করে ফেলেছি। দ্যাটস ওসাম।

এখন যদি আমরা চাই আমরা আমাদের এই New_folder  টাকে রুট থেকে Documents ফোল্ডারে মুভ করবো তাহলে
mv New_folder Documents


প্রশ্ন আসতে পারে রিনেম এবং মুভ এর কমান্ড সেম কেন। উত্তর আমি জানিনা অন্তত এখন পর্যন্ত।

সমস্যা হলো এখন ডকুমেন্টস ফোল্ডারে আমাদের New_folder ফরএভার এলোন থাকতে চাচ্ছেনা। সে দু:খে মরে যেতে চায়। সো আমরা তাকে ডিলেট করে দিতে পারি। আফটার অল যে চলে যেতে চায় তাকে যেতে দিতে হয়।
rmdir New_folder


এখানে rmdir মানে হলো রিমোভ ডিরেক্টরি। দেখা যাচ্ছে আমাদের ফরএভার এলোন New_folder  সাহেবের অকাল প্রয়ান ঘটেছে। তাইতো Documents ফোল্ডারটি শুন্যতায় হাহাকার করে।

এখন একটা মজার কমান্ড। আমরা চাইলে টার্মিনালে আমাদের কারেন্ট ডেইট, টাইম দেখতে পারি। শুধুমাত্র টার্মিনালকে বলতে হবে
date


একি ভাবে কারেন্ট মাসের ক্যালেন্ডারও দেখতে পারি।
cal

দেখা যাচ্ছে আমাদের টার্মিনালে অনেক হিজিবিজি হয়ে গেছে। সুতরাং আমরা টার্মিনালকে বলবো সব আবর্জনা clear করতে।

বাহ্ আমাদের টার্মিনাল পরিষ্কার হয়ে গেছে। কি সুন্দর কথা শুনে। বাসার বুয়ারাও যদি এরকম শুনতো।
ওয়েল অনেক কমান্ডিং হয়েছে। এবার আমরা একটা নির্দিষ্ট টাইমে কম্পিউটারকে শাটডাউন হওয়া অর্ডার দিয়ে ঘুমিয়ে পড়তে পারি।
shutdown 01:00


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

Md. Rasedur Rahman Roxy
Dept. of CSE
Bangladesh University of Business & Technology

Wednesday, September 17, 2014

এ্যারে নিয়ে কিছু কথা

এ্যারে নিয়ে কথা বললে প্রথমে বলতে হয় এ্যারে কি। E. Balagurusamy স্যার তাঁর Programming in ANSI C বইতে লিথেছেন "An Array is a fixed-size sequenced collection of element of the same data type." BYRON S. GOTTFRIED স্যার তাঁর PROGRAMMING WITH C বইতে লিখেছেন ”Many applications require the processing of multiple data items that have common characteristics. In such situations it is often convenient to place the data items  into  an array, where  they  will  all  share the same name.” কিন্তু সমস্যা হলো আমি এতটা মেধাবী না যে এত বড় জ্ঞানীদের দাঁতভাঙ্গা ডেফিনেশন বুঝব। তাই আমি নিজের মত একটা সংজ্ঞা বানিয়ে নিয়েছি। আমার মতে এ্যারে হল একটা নামের মধ্যে একধরনের অনেকগুলো ডাটা রাথার পদ্ধতি। বুঝা গেলোনা? আচ্ছা ধরে নিন এ্যারে হল ”মুদি দোকানদারের বাকীর খাতা”। হ্যাঁ ঠিক তাই। যারা মুদি দোকানদারের বাকীর খাতা সর্ম্পকে কিছুই জানেন না তাদের বলছি, এই খাতার পাতার উপর দিকে একজনের নাম থাকে, তার নিচে একপাশে তারিখ অন্যপাশে সিরিয়ালে বিভিন্ন অংক লেখা থাকে। একটা তারিখের পাশে একটা অংক। এই অংকগুলো প্রতিনিধিত্ব করে ঐদিন ঐ ব্যা্ক্তির পণ্যধ্বংশের পরিমাণ। জিনিসটা অনেকটা এরকম-

মফিজ
01/10
100/-
02/10
50/-
03/10
200/-
এখন মফিজের নামের জায়গায় একটা ভেরিয়েবল বিবেচনা করুন, তারিখের ঘরকে বিবেচনা করুন এ্যারে এড্রেস আর টাকার ঘরকে বিবেচনা করুন এ্যারে এলিমেন্ট হিসেবে। এবার দেখুন কেমন হলো জিনিসটা-

int marks[3]
2
80
1
75
0
40
এখন দেখুন marks ভেরিয়েবলটিতে তিনটি মান রাখলাম যার সবগুলোই ইন্টিজার। আর [3] নির্দেশ করেে এই ভেরিয়েবলে কতগুলো মান থাকবে। এবার বুঝা গেল বালাগুরুস্বামী স্যারের ফিক্সড সাইজ কথাটার মর্ম? এবার মুদি দোকান থেকে আমাদের কম্পাইলারে ফিরে আসি। এ্যারে ডিক্লেয়ার করার পদ্ধতি হল-
type variable_name[size]
এক্ষেত্রে আমাদের মনে রাখতে হবে এ্যারে এ্যড্রেস শুরু হবে শুন্য থেকে এবং চলবে size-1 পর্যন্ত। কেন? তা আমার জানা নেই, Dennis MacAlistair Ritchie সাহেব হয়তো বলতে পারতেন। জানেন তো উনি সি ল্যাংগুয়েজের আবিস্কারক। এতক্ষন যে ধরনের এ্যারে নিয়ে কথা বললাম তাকে বলে ওয়ান ডাইমেনশনাল এ্যারে। এছাড়াও আছে টু ডাইমেনশনাল এ্যারে এবং মাল্টিডাইমেনশনাল এ্যারে। দেখা যাক এই বিদখুটে নামগুলোর চেহারা কেমন-

int marks[3][2]
2
25
80
1
39
75
0
95
40

0
1
Two dimensional array
ডিক্লারেশন এরকম-
type variable_name[row_size][column_size]

Multidimensional array কিরকম তা আমি নিজে আগে শিখে নিই তারপর বলব। অর্থাৎ ওয়ান ডাইমেনশনাল এ্যারে তে আমরা একটি কলাম পাচ্ছি ডাটা রাখার জন্য, টু ডাইমেনশনালে দুটি।এ্যারে সম্পর্কে আর একটা কথা, এ্যারে হচ্ছে একটি Derived Data Type. কারন এ্যারে গঠিত হয়েছে Primary Data Type কেই কিছুটা মডিফাই করে। এরকম আরো দুটি ডাটা টাইপ হলো Functions & Pointers.

আহ্ হা। আমার জ্ঞানের ঝুলি আবার ফুরিয়ে গেলো। আমি আমার ঝুলিতে মাল্টিডাইমেনশনাল এ্যারে বা অন্য কিছু নিয়ে ফিরে আসব। ততক্ষন পর্যন্ত ধন্যবাদ সবাইকে।

Monday, September 15, 2014

অনলাইন জাজ এ প্রবলেম সলভিং ও সাবমিটিং

আমরা যারা নতুন প্রোগ্রামিং ল্যাংগুয়েজ শিখছি তারা এবং যারা কম্পিটিটিভ প্রোগ্রামিং করে থাকেন তারা প্রাকটিস করেন সাধারনত অনলাইন জাজগুলোতে। কিন্তু আমরা যারা নতুন তারা এক্ষেত্রে যে প্রবলেম টা ফেস করি তা হল কিভাবে সাবমিট করব বুঝতে পারিনা, বা সাবমিট করতে পারলেও সঠিক প্রোগ্রাম হওয়া সত্তেও ইরর দেখায়। এ ব্যাপারে আমার স্বল্পজ্ঞান এবং কিঞ্চিৎ অভিজ্ঞতা শেয়ার করছি।

  1. আউটপুটের ব্যাপারে আমাদের একটা বিষয় মাথায় রাখতে হবে যে জাজিং প্রোগ্রাম আউটপুটকে এক বা একাধিক ষ্ট্রিং হিসেবে বিবেচনা  করে। তাই একটি স্পেস, ট্যাব কিংবা লাইন গ্যাপ অমিল হলেও প্রোগ্রাম এরর দেখাবে। এক্ষেত্রে প্রেজেন্টেশন ইরর শো করবে।
  2. সাবমিট বাটন টিপে দেওয়ার পূর্বে ভালো করে খেয়াল রাখা দরকার কোন ল্যাংগুয়েজ সিলেক্ট করা আছে। কোড করলাম সি ল্যাংগুয়েজে আর সাবমিট করলাম জাভা দিয়ে তাহলে মিস্টি নিয়ে নিজের শশুর বাড়ীর বদলে ভাইয়ের শশুর বাড়ী যাবার মত অবস্থা হবে। এক্ষেত্রে সাবমিশন ইরর শো করবে।
  3. জাজিং ইরর শো করলে মাথা গরম করে কম্পিউটারের চোদ্দগুষ্টি উদ্ধারের কোন দরকার নাই। অপেক্ষা করুন। অপেক্ষার সময়ে পরের প্রবলেমটার অ্যালগরিদম সাজিয়ে ফেলুন।
  4. একই  প্রবলেম বার বার সাবমিট করার পরেও রং আনসার আসলে “আমার দ্বারা কিছু হবেনা” নিজেকে এই মহান সার্টিফিকেট দিয়ে ঘুমাতে যাবার কোন মানে হয়না। ”একবার না পারিলে দেখ শতবার” এই নীতিতে আপত্তি থাকলে পরের প্রবলেম নিয়ে মাথা ঘামান। পরের টা করতে গিয়ে আগেরটার সলুশন পেয়েও যেতে পারেন।
  5. টাইম লিমিট ইরর পেলে টাইম নিয়ে ভাবুন। ভাবার ক্ষেত্রে কোন টাইম লিমিট আসবে না। কোড থেকে লুপ কমাতে চেষ্টা করুন। কমপ্লেক্সিটি কমানোর চেষ্টা করুন। যেখানে ম্যাথমেটিকাল ফরমূলা দিয়ে কাজ হবে সেখান থেকে লুপ বাদ দিন। মনে রাখবেন লুপ একবার লেখা হলেও এটা কিন্তু বারবার কাজ করে।
  6. উসাইন বোল্টের দৌড়ের পথে একটা ইট রাখলে সে যেমন হোঁচট খেয়ে চিতপটাং হয় রানটাইম ইরর অনেকটা সেরকম। কোড এর কোন একটা স্টেটমেন্টে এসে হোঁচট খেয়ে পড়ে কম্পাইলার। এমন হলে খুজে দেখুন কোথায় ইট আছে। হতে পারে কোন ম্যাথমেটিকাল ইরর, লাইব্রেরী ফাংশন গন্ডগোল, ইত্যাদি।
আমার অর্জিত জ্ঞানের ঝুলি এই পর্যন্তই সীমাবদ্ধ। এই সীমাবদ্ধ জ্ঞানে যতটুকু বুঝি কম্পিটিটিভ প্রোগ্রামিং প্রোগ্রামিং শেখার এক অনন্য উপায়। সুতরাং কম্পিটিটিভ প্রবলেম সলভিং এ অংশগ্রহণ করুন। সাবমিশন লিস্টে কার কোন স্ট্যাটাস ভালো লাগে আমি জানিনা। তবে আমার এ্যাকসেপটেড এর চাইতে যে কোন ধরনের ইরর দেখলে ভালো লাগে। কারন প্রত্যেকটা ইরর থেকে কিছু শিখতে পারা যায়। আজ এ পর্যন্তই। আবার অন্য কোন বিষয় নিয়ে লিখব। তার আগে আমি শিখে নিই। কোন ভূল থাকলে কমেন্ট করুন। ধন্যবাদ।

Sunday, September 15, 2013

সুখে থাকো ও আমার নন্দিনী
হয়ে কারও ঘরনি
জেনে রাখো প্রসাদের ও বন্দীনি
প্রমাণ কভু মরেনি
চলে গেছ কিছুতো বলে যাওনি
পিছুতো ফিরে চাওনি।
আমিও পিছু ডাকিনি।
বাধা হয়ে বাধিনি
সুখে থাকো ও আমার নন্দিনী
হয়ে কারও ঘরনী।

ভূলে আছ কখনো মনে করনি।
দু ফোটা জলও ফ্যলনি।
আমিতো ভূলে থাকিনি
রাখি খুলে রাখিনি।
সুখে থাকো ও আমার নন্দিনী
হয়ে কারও ঘরনী
জেনে রাখো প্রসাদের ও বন্দীনি।
প্রেম কভু মরেনি।

গানটি ভালো লাগলে ডাউনলোড লিংক........