গেম অব লাইফ

গেম অব লাইফ বা সংক্ষেপে লাইফ হচ্ছে একটি সেলুলার অটোমাটন। এটি একটি জিরো-প্লেয়ার গেম, অর্থাৎ এটি কারো হস্তক্ষেপ ছাড়াই প্রাথমিক একটি অবস্থা থেকে নিজে নিজে চলতে থাকে।

১৯৭০ সালে গেমটি উদ্ভাবন করেন ব্রিটিশ গণিতবিদ জন হর্টন কনওয়ে (২৬ ডিসেম্বর ১৯৩৭ – ১১ এপ্রিল ২০২০)। ফাইনাইট গ্রুপ (finite groups), নট থিউরি (knot theory), সংখ্যাতত্ত্ব, কম্বিনেটরিয়াল গেম থিউরি, কোডিং থিউরিসহ অনেক বিষয়ে তিনি কাজ করেছেন। তবে গেম অব লাইফ উদ্ভাবনের জন্য তিনি বিশেষভাবে পরিচিত।

১৯৪০-এর দশকের শেষ দিকে জন ভন নিউম্যান জীবনকে (Life) এমন একটি ‘সৃষ্টি’ হিসেবে আখ্যায়িত করেন, যা নিজেই নিজের প্রতিরূপ সৃষ্টি করতে পারে এবং একটি টুরিং মেশিনকে সিমুলেট করতে পারে। ভন নিউম্যান এর একটি বাস্তব মডেল তৈরি করতে চেয়েছিলেন, কিন্তু তৎকালীন প্রযুক্তির সীমাবদ্ধতার কারণে করতে পারেননি। তাঁর ধারণাকে সিমুলেট করতে স্তানিসোয়াফ উলাম (Stanisław Ulam) আবিষ্কার করেন সেলুলার অটোমাটা। নিউম্যান পরে সেলুলার অটোমাটন ব্যবহার করে তাঁর ডিজাইনটি তৈরি করেন।

নিউম্যানের ডিজাইনটি ছিল অনেক জটিল। অন্যান্য গবেষকগণ আরো সরল প্রকৃতির লাইফ তৈরি করেছেন। কনওয়ে তাদের মধ্যে অন্যতম। কনওয়ে উলামের ডিজাইনের চেয়ে একটু ভিন্ন নিয়ম-কানুন নিয়ে গবেষণা করে গেম অব লাইফ তৈরি করেন। কনওয়ে গেমটির নিয়ম বাছাই করেছেন খুব চিন্তাভাবনা করে, যাতে জনসংখ্যার হঠাৎ বিস্ফোরণ (অতিবৃদ্ধি) না হয়, ফলাফল এলোমেলো ও অনিশ্চিত হয় ইত্যাদি।

গেম অব লাইফ ১৯৭০ সালে সায়েন্টিফিক আমেরিকানে প্রথম প্রকাশিত হয়।

নিয়ম

গেমটি একটি দ্বিমাত্রিক গ্রিড নিয়ে গঠিত। এই গ্রিড অসীম পর্যন্ত বিস্তৃত। গ্রিডের প্রতিটি ঘর সম্ভাব্য দুটি অবস্থার যেকোনো একটি অবস্থায় থাকে : জীবিত অথবা মৃত (অন/অফ)। প্রতিটি ঘরের সাথে তার আশেপাশের আটটি ঘরের মিথস্ক্রিয়া (interaction) হয়। আটটি ঘর হচ্ছে চারপাশের চারটি এবং কোনাকুনি চারটি।

গেমটি ধাপে ধাপে সম্পন্ন হয়। যেকোনো ধাপে নির্দিষ্ট ঘটনা একই সময়ে গ্রিডের প্রতিটি ঘরে সম্পন্ন হয়। প্রতি ধাপে নিচের চারটি ঘটনা ঘটে :

  • যেকোনো জীবিত ঘরের যদি দুটির কম জীবিত প্রতিবেশী থাকে, তাহলে ঘরটি মারা যায়।
  • যেকোনো জীবিত ঘরের যদি দুই বা তিনটি জীবিত প্রতিবেশী থাকে, তাহলে ঘরটি পরের ধাপে বেঁচে থাকে।
  • যেকোনো জীবিত ঘরের যদি তিনটির বেশি জীবিত প্রতিবেশী থাকে, তাহলে ঘরটি মারা যায় (সংখ্যাধিক্যের কারণে)।
  • যেকোনো মৃত ঘরের যদি ঠিক তিনটি জীবিত প্রতিবেশী থাকে, তাহলে ঘরটি জীবিত হয়ে ওঠে (নতুন করে জন্মায়)।

এই চারটি ধাপকে তিনটি ধাপে সংকুচিত করা যায় :

  • যেকোনো জীবিত ঘরের যদি দুই বা তিনটি জীবিত প্রতিবেশী থাকে, তাহলে ঘরটি পরের ধাপে জীবিত থাকবে।
  • যেকোনো মৃত ঘরের যদি ঠিক তিনটি জীবিত প্রতিবেশী থাকে, তাহলে ঘরটি পরের ধাপে জীবিত হয়ে উঠবে।
  • বাকি সব জীবিত ঘর পরের ধাপে মারা যাবে। মৃত ঘরগুলো মৃতই থাকবে।

এভাবে ধাপে ধাপে গেমটির একেকটি প্রজন্ম তৈরি হয়। প্রতিটি প্রজন্ম তার পূর্বের প্রজন্মের একটি ফাংশন। অর্থাৎ, পূর্বের প্রজন্মের নির্দিষ্ট বিন্যাসের জন্য পরের প্রজন্মে সব সময় একই বিন্যাস তৈরি হবে।

লাইফের নমুনা

গেমটিতে নির্দিষ্ট কিছু বিন্যাস থেকে মজার কিছু প্যাটার্ন তৈরি হয়। প্যাটার্নগুলোর আচরণের ওপর ভিত্তি করে এদের বিভিন্ন নাম দেওয়া হয়েছে, যেমন : স্টিল লাইফ, ওসিলেটর, স্পেসশিপ ইত্যাদি।

স্টিল লাইফ পরবর্তী প্রজন্মেও স্থির থাকে, পরিবর্তন হয় না। ওসিলেটর নির্দিষ্ট কিছু প্রজন্ম পরপর আগের অবস্থায় ফিরে আসে। চিত্র ৪-এর পালসার ও চিত্র ২-এর ব্লিংকার ওসিলেটরের উদাহরণ। স্পেসশিপও একধরনের ওসিলেটর, তবে এগুলো এক জায়গায় স্থির না থেকে নির্দিষ্ট দিকে ছুটতে থাকে। চিত্র ৩-এর গ্লাইডার একটি স্পেসশিপ।

নিচে দেওয়া প্রোগ্রামটির র‌্যানডম ভার্শন কয়েকবার চালালে প্রচুর স্টিল লাইফ ও ব্লিংকার দেখা যাবে। কপাল ভালো হলে কিছু স্পেসশিপও দেখা যাবে।

Game of life blinker.gif
চিত্র ২ : ব্লিংকার
Game of life animated glider.gif
চিত্র ৩ : গ্লাইডার
Game of life pulsar.gif
চিত্র ৪ : পালসার
চিত্র ৫ : ক্রস
কম্পিউটার সিমুলেশন

আধুনিক কম্পিউটারে খুব সহজে এই গেমটি সিমুলেট করে দেখা যায়। কম্পিউটারের মেমোরি যেহেতু সসীম, তাই এতে অসীম গ্রিডের পরিবর্তে নির্দিষ্ট আকারের গ্রিডে গেমটি সিমুলেট করা হয়।

এখানে পাইথন দিয়ে একটি কোড দেখানো হলো। গ্রিডের আকার পরিবর্তন করতে main() ফাংশনে size ভ্যারিয়েবলটি পরিবর্তন করতে হবে (লাইন ৮১)। গসপারের গ্লাইডার গান (চিত্র ১) সিমুলেট করতে choice ভ্যারিয়েবলের মান পরিবর্তন করে অন্য কিছু বা ফাঁকা স্ট্রিং দিলেই হবে (লাইন ৮২)।

[ছবি ও তথ্য : উইকিপিডিয়া]

ভিম : কাস্টমাইজেশন

আগের দুই পর্বে (১ম, ২য়) ভিমের সঙ্গে প্রাথমিক কিছু পরিচয় হয়েছে। এই পর্বে দরকারি কিছু বিষয়—যেগুলো সাধারণত একবারই কনফিগার করে নেওয়ার প্রয়োজন হবে—সেগুলো নিয়ে কিছুটা লিখেছি।

এই পর্বের সবচেয়ে দরকারি জিনিস হচ্ছে .vimrc ফাইল। ভিম ওপেন হওয়ার সময় এই ফাইলটি পড়ে বিভিন্ন কনফিগারেশন ঠিক করে নেয়। স্থায়ীভাবে কোনোকিছু সেট করতে আমাদের এই ফাইলে কনফিগারেশনগুলো লিখতে হবে। লিনাক্সে /etc/vim/vimrc বা /etc/vimrc ফাইলেও কনফিগারেশন থাকতে পারে। তবে সেগুলোতে হাত না দেওয়াই ভালো, যদি না আপনি জানেন যে আপনি ঠিক কী করছেন।

টার্মিনাল ওপেন করে নিচের কমান্ডটি এক্সিকিউট করুন –

$ vim ~/.vimrc

এতে .vimrc ফাইলটি খুলবে।

ধরে নিচ্ছি এই লেখা যারা পড়ছেন, তারা সবাই প্রোগ্রামার। তাই প্রোগ্রামিংসংক্রান্ত কিছু কাজ দিয়েই শুরু করা যাক। প্রথমেই আমাদের দরকার লাইন নম্বর। .vimrc ফাইলে লিখে ফেলুন –

set number

এবার ফাইলটি সেভ করে ভিম বন্ধ করুন। আবার ওপেন করুন। এখন লাইন নম্বর দেখা যাচ্ছে। কোডের সিনট্যাক্স হাইলাইটিংয়ের জন্য লিখুন –

syntax on

অটো ইনডেন্টেশনের জন্য লিখুন –

filetype plugin indent on

ভিমে ট্যাব ক্যারেক্টারের দৈর্ঘ ডিফল্টভাবে ৮ স্পেস, যা অনেকেরই পছন্দ না। আবার ট্যাব ক্যারেক্টারের বদলে স্পেস ব্যবহার করা একটি ভালো অভ্যাস। সুতরাং নিচের লাইনগুলোও লিখে ফেলুন –

set tabstop=4
set shiftwidth=4
set expandtab

এবার ফাইলটি সেভ করে নিন। প্রোগ্রামিংয়ের জন্য ভিম তৈরি হয়ে গেল।

কম্পিটিটিভ প্রোগ্রামিং যারা করে, তারা প্রায়ই দ্রুত কোড লেখার জন্য টেমপ্লেট তৈরি করে রাখে। ভিমেও এ রকম টেমপ্লেট ব্যবহার করা যায়। ধরে নিলাম আপনার সি প্লাস প্লাসের একটি টেমপ্লেট লাগবে। নিচের মতো একটি ফাইল তৈরি করুন –

#include <bits/stdc++.h>

using namespace std;

// Other macros and functions

int main()
{

    return 0;
}

ফাইলটি skel.cpp নাম দিয়ে সেভ করে ~/.vim/templates/ ডিরেক্টরিতে নিয়ে রাখুন –

$ mkdir -p ~/.vim/templates/
$ mv skel.cpp ~/.vim/templates/

এবার .vimrc ফাইলটি ওপেন করে নিচের লাইনটি যোগ করুন –

autocmd BufNewFile *.cpp 0r ~/.vim/templates/skel.cpp

ফাইলটি সেভ করে নিন। এখন থেকে .cpp এক্সটেনশনের যেকোনো নতুন ফাইল তৈরি করলে এতে টেমপ্লেট ফাইলের কোডটুকু যুক্ত হয়ে যাবে। আবার আপনি যদি চান যে ফাইল তৈরির পর কার্সর কোনো নির্দিষ্ট লাইনে থাকুক (যেমন : মেইন ফাংশনের শুরুতে), তাহলে নিচের লাইনটি .vimrc-তে যোগ করতে পারেন।

autocmd BufWinEnter *.cpp call cursor(8, 1)

এতে কার্সরটি ৮নং লাইনের শুরুতে থাকবে। আপনি আপনার টেমপ্লেট অনুযায়ী এখানে লাইন নম্বর ঠিক করে দিন। এতে নতুন ফাইল তৈরির পর নেভিগেট করে মেইন ফাংশনে যেতে হবে না, কার্সর আগে থেকেই সেখানে থাকবে। আপনি কেবল i চেপে কোড করা শুরু করবেন।

[ছোট্ট দুটি তথ্য এখানে দেওয়া দরকার বলে মনে করি। ভিমে কমান্ড মোডে o (ছোট হাতের O) চাপলে কার্সর যে লাইনে অবস্থিত, তার নিচে একটি নতুন লাইন ইনসার্ট হয়। আবার ইনসার্ট মোডে যাওয়ার জন্য i না চেপে a চাপা সুবিধাজনক।]

ভিমের ডিফল্ট কালারস্কিম পরিবর্তন করতে চাইলে কমান্ড মোডে গিয়ে লিখুন :colo, তারপর একটি স্পেস দিন, তারপর Ctrl + d চাপুন। কালারস্কিমের একটি তালিকা দেখা যাবে, নিচের ছবির মতো –

এখন পছন্দমতো একটি কালারস্কিমের নাম লিখে এন্টার চাপুন। যেমন : blue কালারস্কিম সেট করতে চাইলে লিখতে হবে :colo blue। এখানে colorscheme-কে সংক্ষেপে colo লেখা হয়েছে। পুরোটা লিখলেও হবে। কালারস্কিম স্থায়ীভাবে সেট করতে চাইলে .vimrc ফাইলের শেষে নিচের লাইনটি যোগ করতে হবে –

colorscheme blue

এখানে যদিও মাত্র কয়েকটি কালারস্কিম রয়েছে, ইন্টারনেট থেকে আরো অনেক কালারস্কিম ডাউনলোড করে নেওয়া যায়। কালারস্কিম ফাইল ~/.vim/colors ফোল্ডারে রেখে .vimrc ফাইলে ওপরের মতো করে colorscheme <name> লিখে দিলেই হলো। কালারস্কিম প্লাগইন হিসেবেও ডাউনলোড করা যায়।

ভিমের কার্যক্ষমতা বৃদ্ধি করতে শত শত প্লাগইন গিটহাবে রয়েছে। কিন্তু এগুলো নিজে নিজে ডাউনলোড করে ম্যানেজ করা কঠিন। সেজন্য একটি প্লাগইন ম্যানেজার ব্যবহার করা ভালো। ভিমের অনেকগুলো প্লাগইন ম্যানেজার রয়েছে। আমি এখানে Vundle (Vim bundle) ইনস্টল করা এবং এটি দিয়ে প্লাগইন ইনস্টল করার পদ্ধতি দেখাচ্ছি।

Vundle ইনস্টল করতে চলে যেতে পারেন এর গিটহাব পেজে। বুঝতে অসুবিধা হলে নিচের ধাপগুলো অনুসরণ করুন :

টার্মিনাল খুলে নিচের কমান্ডটি এক লাইনে লিখে (বা কপি করে) রান করুন –

$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

এবার .vimrc ফাইল খুলে ফাইলের একেবারে শুরুতে নিচের লাইনগুলো যোগ করুন –

set nocompatible
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'

call vundle#end()

লাইনগুলো অবশ্যই ফাইলের শুরুতে যোগ করতে হবে। ফাইলটি সেভ করে নতুন করে ভিমে প্রবেশ করুন। কমান্ড মোডে লিখুন :PluginInstall। দেখবেন নিচে Done লেখা এসেছে। তার মানে প্লাগইন ম্যানেজার সফলভাবে ইনস্টল হয়েছে। :qa লিখে ভিম থেকে বের হয়ে আসুন।

আপনি এখন চলে যেতে পারেন https://vimawesome.com/ সাইটে। এখানে প্রচুর প্লাগইন রয়েছে। মজার ব্যাপার হচ্ছে, সাইটটিতে ভিমের শর্টকাট ব্যবহার করে নেভিগেট করা যায়। যাহোক, আমি এখন gruvbox নামের একটি প্লাগইন ইনস্টল করে দেখাব। এটি মূলত একটি কালারস্কিম। একই পদ্ধতি অনুসরণ করে আপনি পরে যেকোনো প্লাগইন ইনস্টল করতে পারবেন।

.vimrc ফাইল ওপেন করে Plugin ‘VundleVim/Vundle.vim’ লাইনের পরে নিচের লাইনটি যোগ করুন (স্ক্রিনশট দেখুন) –

Plugin 'morhetz/gruvbox'

লাইনটি অবশ্যই call vundle#end() লাইনের আগে হবে। এরপর ফাইলের একদম শেষে নিচের লাইনটি যোগ করুন –

colorscheme gruvbox

এখন আবার ভিমে প্রবেশ করে :PluginInstall কমান্ড চালান। কিছুক্ষণের মধ্যে প্লাগইনটি ইনস্টল হয়ে Done লেখা আসবে। ভিম থেকে বের হয়ে যান। .vimrc ফাইলটি ভিম দিয়ে ওপেন করলে নতুন কালারস্কিমটি দেখতে পাবেন।

Vundle বিষয়ে বিস্তারিত জানতে এবং এর ব্যবহার শিখতে অবশ্যই এর গিটহাব পেজ থেকে রিডমি ফাইলটি পড়ে নেবেন। যেকোনো প্লাগইন ইনস্টলের জন্য প্লাগইনের গিটহাব পেজে চলে যেতে হবে, এবং ঠিকানা থেকে github.com/ অংশটি বাদ দিয়ে বাকি অংশ ওপরের পদ্ধতিতে .vimrc ফাইলে বসিয়ে দিতে হবে। বাকি কাজ Vundle করবে। যেমন : gruvbox-এর গিটহাব ঠিকানা হচ্ছে github.com/morhetz/gruvbox, আমরা তাই morhetz/gruvbox লিখেছি।

মোটামুটি এই ছিল আলোচনার বিষয়বস্তু। এখানে ভিমের অতি অল্প বিষয় নিয়েই আলোচনা করা হয়েছে। ভিমের যেকোনো সমস্যায় সাহায্য পাওয়া যাবে :help কমান্ড থেকে। যেমন : :help window লিখলে window সম্পর্কে সাহায্য দেখা যাবে, :help quit লিখে quit সম্পর্কে সাহায্য পাওয়া যাবে। টার্মিনালে vimtutor কমান্ড লিখলে ভিম ব্যবহারের প্রয়োজনীয় তথ্যসমৃদ্ধ একটি ম্যানুয়েল পাওয়া যায়। পুরোটা পড়তে মোটামুটি ঘণ্টাখানেক লাগে। পড়ার সময় অবশ্যই সাথে সাথে অনুশীলন করতে হবে। এছাড়া ইন্টারনেট তো আছেই সাহায্যের জন্য।

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

Solarized কালারস্কিম ও YouCompleteMe প্লাগইন ও JetBrains Mono ফন্টের সমন্বয়ে আমার বর্তমান ভিম।

—মোশারফ হোসেন

ভিম : সাধারণ লেখালেখি

প্রথম পর্বে আমাদের ভিমের সঙ্গে মোটামুটি পরিচয় হয়েছে। এই পর্বে বেশ কিছু বিষয় থাকবে, যা সাধারণ টেক্সট এডিটিং কিংবা প্রোগ্রামিংয়ের সময় কাজে লাগবে।

প্রথমেই দেখা যাক নেভিগেশন। ফাইলের মধ্যে ডানে-বাঁয়ে, ওপরে-নিচে যাওয়ার জন্য সাধারণভাবে অ্যারো কি ব্যবহার করা যায়। এছাড়া কমান্ড মোডে h (left), j (down), k (up), l (right) ব্যবহার করে নেভিগেট করা যায়। এগুলো যেহেতু সরাসরি হাতের নিচে থাকে, তাই অ্যারো কি-এর চেয়ে দ্রুত ব্যবহার করা যায়। প্রথম প্রথম এগুলো একটু ঝামেলার মনে হবে, কিছু সময় পর ঠিক হয়ে যাবে।

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

ফাইলের শুরুতে যেতে কমান্ড মোড থেকে টাইপ করতে হবে gg। ফাইলের শেষে যেতে চাইলে টাইপ করতে হবে G (অর্থাৎ Shift + g)। Shift + 4 ($) চাপলে কার্সর লাইনের শেষে চলে যাবে। Shift + 6 (^) চেপে যাওয়া যাবে লাইনের শুরুতে। এগুলো কিন্তু কেবল পড়ে গেলে হবে না। কোনো টেক্সট ফাইলে সবকিছু নিজে পরীক্ষা করে দেখতে হবে। শুধু পড়ে/ভিডিও দেখে কখনো শেখা যায় না, অনুশীলন করে করে শিখতে হয়।

নির্দিষ্ট কোনো লাইনে যেতে চাইলে প্রথমে ওই লাইন নম্বর লিখতে হবে, এরপর gg টাইপ করতে হবে। যেমন : ১২নং লাইনে যেতে চাইলে টাইপ করতে হবে 12gg। একদম সহজ, তাই না? আচ্ছা, এখানে একটু সমস্যা হচ্ছে বোধহয়। ভিমে লাইন নম্বর দেখা যাচ্ছে না (অনেক সিস্টেমে দেখা যেতেও পারে, বিশেষ করে ভিম প্রি-ইনস্টলড থাকলে)। লাইন নম্বর দেখা না গেলে কমান্ড মোড থেকে টাইপ করুন :set number

চমৎকার! বাঁ পাশে এখন লাইন নম্বর দেখা যাচ্ছে। ভিম থেকে একবার বেরিয়ে গেলে লাইন নম্বর আবার হারিয়ে যাবে। হারিয়ে যাওয়া কীভাবে রোধ করতে হয়, তা তৃতীয় পর্বের আলোচ্য বিষয়। ভিম থেকে না বেরিয়ে লাইন নম্বর সরিয়ে ফেলতে টাইপ করুন :set nonumber

অনেক সময় আমাদের শব্দ ধরে ধরে এগোতে হতে পারে, সাধারণ এডিটরে Ctrl + left/right arrow যা করা যায় আর কি। ভিমে সেটি আরো সহজে করা যায়। w চেপে সামনের দিকে, b চেপে পেছনের দিকে যাওয়া যায়।

ধরুন, বড় একটি ফাইলের কোথাও পরিবর্তন করেছেন, এরপর ফাইলের অন্য স্থানে গিয়ে দেখলেন আগের পরিবর্তনটি করা ঠিক হয়নি। `. (ব্যাকটিক + ডট) চেপে সরাসরি যেখানে পরিবর্তন করেছিলেন, সেখানে চলে যেতে পারেন।

অনাকাঙ্খিত পরিবর্তনের পর আনডু (undo) করতে কমান্ড মোড থেকে u চাপুন। একাধিকবার আনডু করার জন্য একাধিকবার u চাপুন। রিডু (redo) করার জন্য Ctrl + r চাপুন।

ভিমে কপি/পেস্ট বিভিন্ন রকম হতে পারে। ভিমের ভেতর থেকে কপি করে ভিমের ভেতর পেস্ট করার জন্য ভিজ্যুয়াল (VISUAL) মোডে যেতে হবে। যে জায়গা থেকে কপি করতে চান, প্রথমে সেখানে যান। এরপর কমান্ড মোড থেকে v চেপে ভিজ্যুয়াল মোডে যান। এবার সাধারণ নেভিগেশন কি (h, j, k, l, w, b, $, ^, gg, G ইত্যাদি সবই) ব্যবহার করে কাঙ্ক্ষিত টেক্সট সিলেক্ট করুন। সিলেক্ট করা হয়ে গেলে y চাপুন, টেক্সট কপি হয়ে যাবে। এখন এই টেক্সট ভিমের ভেতর যেকোনো জায়গায় পেস্ট করতে p চাপুন। লাইন ধরে সিলেক্ট করতে চাইলে Shift + v চাপুন। এতে VISUAL LINE মোড চালু হবে। Ctrl + v চেপে ভিজ্যুয়াল ব্লক মোডে যেতে পারেন। এই মোডে ব্লক আকারে টেক্সট সিলেক্ট করা যায়।

ভিমের ভেতর থেকে কপি করে বাইরে (যেমন : ব্রাউজারে) পেস্ট করার জন্য Shift চেপে ধরে মাউস দিয়ে কাঙ্ক্ষিত টেক্সট সিলেক্ট করে Ctrl + Shift + c চাপুন। উইন্ডোজে মাউস দিয়ে সরাসরি সিলেক্ট করে Ctrl + C চেপে কপি করা যাবে। এটি ভিমের নিজস্ব পদ্ধতি নয়, টার্মিনাল থেকে কপি করার পদ্ধতি। ভিমের নিজস্ব পদ্ধতি কিছু ক্ষেত্রে জটিল হতে পারে বলে এখানে এড়িয়ে যাওয়া হলো। বাইরে থেকে কপি করে ভিমে পেস্ট করতে টার্মিনালে পেস্ট করার শর্টকাট (সাধারণত Ctrl + Shift + v, উইন্ডোজে রাইট ক্লিক বা Ctrl + v) কাজ করবে। এছাড়া Shift + Insert চেপেও পেস্ট করা যায়।

ভিমে কাট (cut) আর ডিলিটের ধারণা একই। ভিমে যা কিছু ডিলিট করা হয়, তার সবই রেজিস্টারে থেকে যায়, যা পরে পেস্ট করা যায়। ভিজ্যুয়াল মোডে গিয়ে সিলেক্ট করে Delete কি বা x বা d চাপলে ডিলিট হবে। p চেপে টেক্সটকে এখন যেকোনো জায়গায় পেস্ট করা যাবে। কোনো লাইনে কার্সর রেখে dd চাপলে ওই লাইনটি ডিলিট হয়ে যাবে। কমান্ড মোডে d চাপলে ডিলিট অপারেশন শুরু হয়। এরপর নেভিগেশন কি ব্যবহার করে ডিলিট (তথা কাট) করা যায়। যেমন : লাইন ৫ থেকে লাইন ১০ পর্যন্ত কাট/ডিলিট করতে চাপতে হবে 5ggd10gg। দেখতে এটি হয়তো হিবিজিবি, কিন্তু ধারণা সহজ। 5gg চাপলে কার্সর চলে যাবে ৫নং লাইনে। এরপর d চাপলে ডিলিট অপারেশন শুরু হবে। 10gg টাইপ করার পর কার্সর চলে গেল ১০নং লাইন পর্যন্ত। মানে ৫ থেকে ১০ পর্যন্ত লাইনগুলো ডিলিট হয়ে গেল। কোনো শব্দের শুরুতে কার্সর নিয়ে dw লিখে শব্দটি ডিলিট করতে পারেন। শব্দের শেষ থেকে ডিলিট করতে db ব্যবহার করা যাবে।

কপি-পেস্ট নিয়ে মজার একটি ট্রিক বলি। যেকোনো জায়গা থেকে কোনো টেক্সট সিলেক্ট করে রেখে (কপি না করে) ভিমে এসে মাউসে মিডল ক্লিক (হুইলে চাপ দিন) করুন, সিলেক্ট করা টেক্সট পেস্ট হয়ে যাবে। এটি শুধু ভিম নয়, যেকোনো জায়গায় হবে। ভিমে যদি পেস্ট না হয়, তাহলে টার্মিনালের প্রিফারেন্স/সেটিংস ওপেন করে Middle click paste/Paste on middle click বা এ রকম কিছু চালু করে নিতে হবে। আধুনিক সব টার্মিনালে ডিফল্টভাবে এটি চালুই থাকে। উল্লেখ্য যে, এটি কেবল টার্মিনালে নয়, অন্যান্য সব জায়গায় কাজ করবে। টাচপ্যাডে তিন আঙুলে একসাথে ট্যাপ করলে মিডল ক্লিক হবে। উইন্ডোজে এটি কাজ করবে না।

এখন পর্যন্ত দেখলেন নেভিগেশন এবং কাট-কপি-পেস্ট। এবার সার্চ এবং রিপ্লেস দেখা যাক।

সার্চিংয়ের জন্য কমান্ড মোডে / (ফরওয়ার্ড সার্চ) বা ? (ব্যাকওয়ার্ড সার্চ) ব্যবহার করতে পারেন। ধরুন, আপনি hello শব্দটি খুঁজবেন। কমান্ড মোডে /hello লিখে এন্টার চাপুন। শব্দটি যেখানে প্রথম পাওয়া যাবে, কার্সর সেখানে চলে যাবে। যদি পাওয়া না যায়, তাহলে একটি এরর দেখা যাবে, Pattern not found। এখন শব্দটির পরের অবস্থানে যেতে n চাপুন। আগের অবস্থানে যেতে Shift + n চাপুন।

মনে করুন, আপনি search শব্দটিকে replace দিয়ে রিপ্লেস করবেন। কমান্ড মোড থেকে নিচের মতো টাইপ করুন,

:%s/search/replace/g

এতে search লেখাগুলো মুছে গিয়ে replace হয়ে যাবে। শেষের /g মানে হচ্ছে পুরো ডকুমেন্টে এই সার্চ এবং রিপ্লেসের ঘটনা ঘটবে। রিপ্লেস করার আগে কনফার্মেশনের জন্য c যোগ করে দেওয়া যায় –

:%s/replace/search/gc

এতে প্রতিবার রিপ্লেস করার আগে y/n দিয়ে নিশ্চিত করা যাবে।

এমন হতে পারে যে আপনি কোনো ফাইল ওপেন করেছেন, এতে কিছু পরিবর্তন করেছেন, কিন্তু সেভ না করেই বেরিয়ে যেতে চাইছেন। ভিম এক্ষেত্রে আপনাকে বাধা দেবে। জোর করে বেরিয়ে যেতে :q! ব্যবহার করুন। আবার ওপেন করা ফাইলটি হয়তো নতুন নামে সেভ করতে চাচ্ছেন (Save as-এর মতো), সেজন্য টাইপ করুন :w <filename>। এখন এই ফাইলে যা কিছু করবেন তার সবই <filename> ফাইলে সেভ হবে, মূল ফাইলটির কিছু হবে না।

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

ভিমে একটি ফাইল ওপেন করুন। Ctrl + w চেপে v চাপুন। এডিটর দুইভাগে ভাগ হয়ে যাবে। অনুভূমিকভাবে ভাগ করতে Ctrl + w চেপে s চাপুন। এখন কিছু একটা লেখার চেষ্টা করুন, দেখবেন সবগুলো অংশেই একসাথে পরিবর্তন হচ্ছে, যেহেতু একই ফাইল সবগুলো উইন্ডোতে ওপেন হয়েছে। Ctrl + w + w চেপে আপনি একে একে সবগুলো উইন্ডোতে যেতে পারেন। এছাড়া Ctrl + w + h/j/k/l ব্যবহার করে বাঁয়ে/ নিচে/ওপরে/ডানে যেতে পারবেন। কোনো উইন্ডোতে কোনো ফাইল ওপেন করতে চাইলে ওই উইন্ডোতে গিয়ে কমান্ড মোডে লিখুন :open <filename>

সাধারণভাবে উইন্ডোগুলো সমান দৈর্ঘ-প্রস্থের হবে। Ctrl + w চেপে <, >, -, + চাপলে উইন্ডোগুলোর আকার বিভিন্ন দিকে ছোট-বড় হবে। সেটি আপনি নিজে নিজে কিছুক্ষণ পরীক্ষা করে দেখে নিন। সবগুলো সমান করতে Ctrl + w চেপে = চাপুন।

কোনো নির্দিষ্ট উইন্ডো বন্ধ করতে সেখানে গিয়ে কমান্ড মোডে লিখুন :close। কোনো উইন্ডোতে :open <filename> ব্যবহার করে একাধিক ফাইল ওপেন করতে পারেন। পূর্বের ফাইলে ফিরে যেতে :bp, পরের ফাইলে যেতে :bn কমান্ড ব্যবহার করুন।

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

ভিমকে নিজের প্রয়োজন ও রুচি অনুসারে সাজিয়ে নেওয়া জরুরি। শেষ পর্বে এ নিয়ে কিছুটা লেখার চেষ্টা করেছি।

— মোশারফ হোসেন

ভিম : পরিচিতি

(যারা ভিমের সঙ্গে কিছুটা পরিচিত, তারা সরাসরি দ্বিতীয় পর্বে চলে যেতে পারেন।)

ভিম (Vim – Vi IMproved) হচ্ছে ইউনিক্সভিত্তিক এডিটর ভি (Vi)-এর একটি উন্নত সংস্করণ। এটি অত্যন্ত শক্তিশালী, সহজ (?), হাইলি কনফিগারেবল এডিটর। এই আর্টিকেল লেখা পর্যন্ত ভিমের সর্বশেষ সংস্করণ হচ্ছে ৮.২, আমি ৮.১ ব্যবহার করছি। আপনার সিস্টেমে অন্য কোনো সংস্করণ থাকলেও সমস্যা নেই। ভিম না থাকলে ইনস্টল করে নিতে হবে। ডেবিয়ান/উবুন্টুভিত্তিক ডিস্ট্রোগুলোতে sudo apt install vim, আর্চ/মানজারোতে sudo pacman -S vim কমান্ড দিয়ে ইনস্টল করা যাবে। উইন্ডোজের জন্য ডাউনলোড করা যাবে এখান থেকে – https://www.vim.org/download.php

কমান্ডলাইনভিত্তিক, শক্তিশালী, হালকাপাতলা, আধুনিক ফিচারসমৃদ্ধ হওয়ায় ভিম অত্যন্ত জনপ্রিয়। সার্ভার কম্পিউটার বা যেখানে গ্রাফিক্যাল ইউজার ইন্টারফেস নেই, বিশেষ ক্ষেত্রে পার্সোনাল কম্পিউটারে ছোট-বড় বিভিন্ন ফাইল এডিট করার জন্য ভিম অদ্বিতীয়। যদিও এসব কাজে ন্যানো (nano) ব্যবহার করা যায়, কিন্তু নামের মতো ফিচারেও এটি ন্যানো। প্রোগ্রামিং করার জন্যও এটি একটি অসাধারণ এডিটর। দ্রুত নেভিগেশনের জন্য, ভিজ্যুয়াল স্টুডিও কোড, জেটব্রেইনসের সব আইডিই, ইকলিপ‍্স ইত্যাদিতে ভিমের জন্য প্লাগইন কিংবা এক্সটেনশন রয়েছে।

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

প্রাথমিকভাবে এই সিরিজটি আমি তিন ভাগে লিখব বলে ভাবছি –

  1. এডিটর পরিচিতি
  2. সাধারণ এডিটিং
  3. কনফিগারেশন এবং কাস্টমাইজেশন

তো পরিচিতিটা সেরে নেওয়া যাক। টার্মিনাল খুলে vim লিখে এন্টার চাপলে নিচের মতো ইন্টারফেস দেখা যাবে –

এখানে বেশ কিছু তথ্য দেখা যাচ্ছে। যেহেতু কোনো close কিংবা quit বাটন দেখা যাচ্ছে না, তাই প্রথমে আমাদের জানতে হবে যে, এখান থেকে বের হওয়া যায় কীভাবে (অবশ্যই টার্মিনাল বন্ধ না করে)। আপনি নিশ্চয়ই একটি লাইন দেখতে পাচ্ছেন – type :q<Enter> to exit

অর্থাৎ :q লিখে এন্টার চাপলে আমরা এখান থেকে বের হতে পারব। এখানে q মানে quit; চাইলে :quit লিখেও বের হওয়া যায়।

অসাধারণ! আপনি ভিমে প্রবেশ করে বের হয়ে গেলেন! এই বের হওয়াটা অনেক কঠিন, এতই কঠিন যে এ নিয়ে শত শত মিম (meme) ইন্টারনেটে ঘুরছে। তো এত কঠিন যেহেতু, এটা শেখার দরকার কী? ভালো কথা, হোঁচট খাওয়ার ভয়ে হাঁটতে না শেখার মতো।

এবার তাহলে আসল কাজ শুরু করা যাক। ভিম ব্যবহার করে একটি ফাইলে ‘hello vim’ কথাটি লিখতে হবে। সে জন্য টার্মিনালে প্রথমে নিচের কমান্ড দিয়ে একটি ফাইল তৈরি করে নিন –

$ touch hello.txt

(কমান্ডের আগে $ চিহ্নের মানে হচ্ছে এটি শেল কমান্ড। অর্থাৎ একে টার্মিনালে চালাতে হবে। টার্মিনালে লেখার সময় $ চিহ্ন বর্জন করতে হবে। # চিহ্ন থাকলে বুঝতে হবে কমান্ডটি রুট প্রিভিলেজসহ চালাতে হবে, অর্থাৎ কমান্ডের আগে sudo যোগ করে নিতে হবে।)

এতে hello.txt নামের একটি খালি (Empty) ফাইল তৈরি হবে। এবার ফাইলটি ভিমে ওপেন করতে হবে। সেজন্য নিচের কমান্ডটি লিখুন –

$ vim hello.txt

আপনার ফাইলটি ভিমে ওপেন হয়ে গেল। একটি ফাঁকা উইন্ডো দেখবেন, যার একেবারে শেষে নিচের মতো একটি লাইন থাকবে।

এখানে বেশ কিছু তথ্য রয়েছে। একেবারে বাম দিকে আছে ফাইলের নাম। তারপরে আছে 0L, 0C, মানে ফাইলটিতে বর্তমানে 0টি লাইন, 0টি ক্যারেক্টার রয়েছে, অর্থাৎ কিছুই নেই। ডান দিকে আছে কার্সরের অবস্থান, এবং ফাইলটির কতটুকু অংশ এই উইন্ডোতে দেখা যাচ্ছে। এগুলো এখনই না বুঝলেও সমস্যা নেই। শেখার সবচেয়ে ভালো পদ্ধতি হচ্ছে “ব্যবহার করতে করতে শেখা”।

এবার আমরা আমাদের লেখালেখি শুরু করতে পারি। কিবোর্ড থেকে h চাপুন, কিছু দেখতে পাচ্ছেন? না। ভিমে অনেকগুলো মোড (mode) আছে। কোনো ফাইল ওপেন করলে শুরুতে ভিম থাকে কমান্ড মোডে (একে নরমাল মোডও বলা হয়)। অর্থাৎ এই মোডে বিভিন্ন কমান্ড চালানো যায়। লেখালেখি করার জন্য আমাদের দরকার ইনসার্ট মোড। ইনসার্ট মোডে যাওয়ার জন্য কিবোর্ড থেকে ‘i’ চাপতে হবে। ‘i’ চাপার সঙ্গে সঙ্গে টার্মিনালের নিচে দেখুন ছবির মতো -- INSERT -- লেখা উঠেছে –

এখন আমরা যা ইচ্ছা তাই লিখতে পারি। চটপট hello vim লিখে ফেলুন তাহলে। এবার লেখাটি সেভ করতে হবে। সেভ করার জন্য আবার কমান্ড মোডে ফিরে যেতে হবে। কমান্ড মোডে যাওয়ার জন্য চাপতে হবে Esc কি (F1-এর বাঁ পাশে)। এবার সেভ করার জন্য নিচের কমান্ডটি লিখুন –

:write

সামনের কোলন চিহ্নটি দিতে ভুলবেন না। এটি লিখে এন্টার চাপলেই ফাইলটি সেভ হয়ে যাবে। এবার তাহলে আমাদের ভিম থেকে বের হতে হবে। কীভাবে মনে আছে তো? :quit বা :q। টার্মিনালে cat hello.txt কমান্ড দিয়ে দেখতে পারেন যে সত্যিই ফাইলটি সেভ হয়েছে কি না।

এবার আমরা নতুন একটি ফাইল তৈরি করব। আগের মতো touch কমান্ড ব্যবহার করার দরকার নেই, সরাসরি ভিম ব্যবহার করেই ফাইল তৈরি করা যায়। ফাইল ওপেন করার যে পদ্ধতি, ফাইল তৈরি করারও সেই একই পদ্ধতি। তাহলে টার্মিনালে লিখে ফেলুন –

$ vim file.txt

এতে ভিম উইন্ডো খুলবে। উল্লেখ্য যে, ফাইলটি কিন্তু এখনো তৈরি হয়নি (আসলে একটি অস্থায়ী ফাইল তৈরি হয়েছে। তবে সেটি নিয়ে আমরা পরে মাথা ঘামাব), :write লিখে সেভ করলেই ফাইলটি তৈরি হবে। এবার i চেপে এতে ইচ্ছেমতো কিছু লিখুন। এরপর Esc চেপে লিখুন :wq। কী হলো? ফাইলটি সেভ হলো, ভিমও বন্ধ হলো। :write কমান্ডটিকে সংক্ষেপে :w লেখা যায়, আর :q-এর সঙ্গে তো আগে থেকেই পরিচিত। এই দুটি কমান্ডকে সংক্ষেপে একত্রে :wq লেখা যায়। এটি লেখা সহজ ও দ্রুততর। এখন থেকে আমরা এভাবেই লিখব।

ওপরের আলোচনার সারমর্ম হলো :

  • vim <filename> দিয়ে যেকোনো ফাইল খোলা/তৈরি করা যাবে
  • লেখালেখির আগে ইনসার্ট মোডে যেতে হবে
  • কমান্ড চালানোর জন্য (যেমন : ফাইল সেভ করা) কমান্ড মোডে যেতে হবে
  • i চেপে ইনসার্ট মোড, Esc চেপে কমান্ড মোডে যেতে হবে
  • :wq দিয়ে একইসঙ্গে সেভ করা এবং ভিম থেকে বের হওয়া যাবে

পরের পর্বে রয়েছে দৈনন্দিন লেখালেখির জন্য গুরুত্বপূর্ণ কিছু বিষয়।

—মোশারফ হোসেন

ক্রন জবের ধারণা ও ব্যবহার

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

ক্রন হচ্ছে একটি ডিমন (daemon)। ডিমন হচ্ছে এক ধরনের প্রোগ্রাম যা সবসময় ব্যাকগ্রাউন্ডে চলতে থাকে, যার ওপর সাধারণ ইউজারের সরাসরি নিয়ন্ত্রণ থাকে না। ক্রন প্রতি মিনিটে ক্রনট্যাব (crontab; cron table-এর সংক্ষিপ্ত নাম) নামক একটি ফাইল পরীক্ষা করে, এবং ওই মিনিটে কোনো জব থাকলে তা এক্সিকিউট করে। ক্রনট্যাবে যেসব প্রোগ্রাম বা কমান্ড লেখা থাকে, সেগুলোকে বলে ক্রন জব।

ক্রনট্যাব হচ্ছে একটি টেক্সট ফাইল। ক্রনট্যাব এডিট করার জন্য নিচের কমান্ডটি চালাতে হয় –

$ crontab -e

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

# m h  dom mon dow   command

এটি ক্রন জব লেখার ফরম্যাট। এখানে প্রথম পাঁচটি কলাম ক্রন জব চলার সময় নির্ধারণ করে। কলামগুলো হলো :

  • m – মিনিট (0–59)
  • h – ঘণ্টা (0–23; ২৪ ঘণ্টা ফরম্যাটে)
  • dom – তারিখ (1–31)
  • mon – মাস (1–12)
  • dow – বার (0–6; 0 হচ্ছে রবিবার)
  • command – যে কমান্ড বা প্রোগ্রামটি এক্সিকিউট হবে তার পাথ।

এখানে এই m h dom mon dow command ক্রম খুব গুরুত্বপূর্ণ। তাই ওপরের লাইনটি ক্রনট্যাব ফাইলে না থাকলে নিজে যোগ করে নিতে হবে। এতে ভবিষ্যতে কোনো ক্রন জব যোগ করতে সুবিধা হবে, কলামগুলোর ক্রম মুখস্ত করে রাখতে হবে না।

এবার তাহলে পরীক্ষার জন্য আমরা একটি ক্রন জব সেট করে দেখতে পারি। আমাদের এই ক্রন জবটি “hello” লেখাটিকে একটি ফাইলে সেভ করবে। সে জন্য টার্মিনালে crontab -e কমান্ড দিয়ে ক্রনট্যাব খুলুন (যদি না খোলা থাকে)। এরপর ফাইলের একেবারে শেষে গিয়ে নিচের লাইনটি যোগ করুন (প্রয়োজনে স্ক্রিনশট দেখুন) –

34   *    *    *    *    echo "hello cron" > ~/hello

এখানে 34-এর জায়গায় আপনার কম্পিউটারের সময় দেখে বর্তমান মিনিটের চেয়ে পাঁচ মিনিট পরের সময় দিন। এখন ফাইলটি সেভ করুন। পাঁচ মিনিট পর আপনার হোম ডিরেক্টরিতে hello নামের একটি ফাইল তৈরি হবে, যেখানে লেখা থাকবে hello cron।

ওপরে চারটি কলামে * চিহ্নের মানে হচ্ছে কলামগুলো সব সময় এক্সিকিউট হবে। ক্রন জবটি প্রতি ঘণ্টার 34তম মিনিটে এক্সিকিউট হবে। আমরা যদি চাই যে এপ্রিল মাসের 22 তারিখ রাত 11টা 20 মিনিটে একটি ক্রন জব চালাব, তাহলে ক্রনট্যাবে নিচের লাইনটি যোগ করতে হবে –

20    23    22    4    *    /path/to/job

এখানে সপ্তাহের দিন * দিয়েছি, এতে 22 তারিখ যে বারই হোক না কেন, জবটি চলবে। এবং এই জবটি ক্রনট্যাবে কয়েক বছর রেখে দিলে প্রতি বছর 22শে এপ্রিল 11টা 20 মিনিটে এক্সিকিউট হবে। উল্লেখ্য যে, 22শে এপ্রিল একেক বছর একেক বার হবে।

আবার আপনি হয়তো কোনো জব প্রতি 5 মিনিট পর পর চালাতে চাচ্ছেন। তাহলে ক্রনট্যাবে নিচের মতো করে জবটি যোগ করে নিন –

*/5   *    *    *    *    /path/to/job

এই ক্রন জবটি প্রতি 5 মিনিট পর পর চলতে থাকবে। আবার আপনি হয়তো কোনো জব প্রতি ঘণ্টায় 5, 17 ও 49 মিনিটে একবার করে চালাতে চাচ্ছেন। সেক্ষেত্রে নিচের মতো করে কমা দিয়ে মিনিট উল্লেখ করে দিন –

5,17,49  *    *    *    *    /path/to/job

একইভাবে দিন, মাস ইত্যাদিও ঠিক করে দেওয়া যায়। হাইফেন দিয়ে রেঞ্জ উল্লেখ করে দেওয়া যায় –

5    6-11   *    *    *    /path/to/job

এই ক্রন জবটি সকাল ৬টা থেকে ১১টা পর্যন্ত প্রতি ঘণ্টায় চলবে (৬টা ৫, ৭টা ৫, …, ১১টা ৫ মিনিটে)।

কোনো জব যদি প্রতি ঘণ্টা/সপ্তাহ/মাস/বছরে একবার করে চালানোর প্রয়োজন হয়, তাহলে ওপরের মতো * দিয়ে সব সিলেক্ট না করে কিছু বিশেষ স্ট্রিং-ও ব্যবহার করতে পারেন। যেমন : কোনো জব যদি প্রতিবার কম্পিউটার চালু হওয়ার পর এক্সিকিউট করার প্রয়োজন হয়, তাহলে @reboot স্ট্রিং ব্যবহার করতে পারেন।

@reboot    /path/to/job

এভাবে @hourly, @daily, @weekly, @monthly, @yearly ব্যবহার করে যেকোনো ক্রন জব সেট করা যায়।

রুট হিসেবে কোনো ক্রন জব সেট করতে চাইলে রুট ইউজার হিসেবে লগ ইন করে নিতে হবে। অথবা sudo crontab -e ব্যবহার করতে হবে। অন্য কোনো ইউজারের ক্রনট্যাব এডিট করতে চাইলে –

$ crontab -u <username> -e

তো ক্রন জবের মৌলিক বিষয়গুলো আমরা মোটামুটি শিখে ফেললাম। এবার একটি প্রজেক্ট করা যাক 😉

প্রতিদিন আমরা অনেক প্রকার ফাইল ইন্টারনেট থেকে ডাউনলোড করি। সেগুলো সাধারণত Downloads ডিরেক্টরিতে গিয়ে জমা হয়। এখন আমরা একটি সহজ ব্যাশ স্ক্রিপ্ট লিখব, স্ক্রিপ্টটি Downloads থেকে মিউজিক, ভিডিও, ছবি, ডকুমেন্ট যথাক্রমে Music, Videos, Pictures ও Documents ডিরেক্টরিতে, এবং বাকি ফাইলগুলো Others ডিরেক্টরিতে নিয়ে রাখবে। এতে আমাদের ফাইলগুলো গোছানো থাকবে, প্রয়োজনের সময় খুঁজে পেতে সুবিধা হবে। স্ক্রিপ্টটি আমরা ক্রনট্যাবে যোগ করে দেব, যাতে প্রতিবার কম্পিউটার অন করার পর Downloads ফোল্ডারটি পরিষ্কার হয়ে যায়।

#!/usr/bin/env bash

# redirect standard error to a black hole ;)
exec 2> /dev/null

# create Others directory, if not present
if [[ ! -d ~/Others/ ]]
then
    mkdir ~/Others/
fi

# move files to their destination
cd ~/Downloads/
mv *.jpg *.jpeg *.png *.gif *.svg  ~/Pictures/
mv *.mp4 *.mkv *.webm              ~/Videos/
mv *.mp3 *.wav *.aac *.m4a         ~/Music/
mv *.docx *.doc *.odt *.uot *.pdf  ~/Documents/

# move the rest to ~/Others
mv *                               ~/Others/

ওপরের স্ক্রিপ্টটি লিখে (বা কপি করে) ~/.my_scripts/ ডিরেক্টরিতে নিয়ে রাখুন। ফাইলের এক্সটেনশন হবে .sh। ধরি ফাইলটির নাম cleaner.sh। এখন ফাইলটিকে এক্সিকিউশন পারমিশন দিতে হবে –

$ chmod u+x ~/.my_scripts/cleaner.sh

এবার ক্রনট্যাব ওপেন করে (crontab -e) নিচের লাইনটি যোগ করুন (আগে যোগ করা ক্রন জবগুলো মুছে ফেলতে পারেন)।

@reboot    ~/.my_scripts/cleaner.sh

ফাইলটি সেভ করে নিন। এবার সারাদিনে যা কিছুই ডাউনলোড করুন না কেন, পরেরবার কম্পিউটার অন করার পরে Downloads ফোল্ডারটি পরিষ্কার হয়ে যাবে। এতে নতুন ডাউনলোড করা ফাইলগুলো সহজে খুঁজে পাবেন। যদি প্রতিবার রিবুটে ফাইলগুলো সরাতে না চান, তাহলে @reboot-এর পরিবর্তে @weekly সেট করতে পারেন। এতে প্রতি রবিবার ফাইলগুলো যার যার নির্ধারিত ফোল্ডারে চলে যাবে।

এবার আপনার কাজ হচ্ছে রবিবারের পরিবর্তে জবটি প্রতি শুক্রবারে সেট করা। যদি করতে পারেন, তাহলে ক্রন জবের ব্যবহার আপনার কাছে পরিষ্কার, না পারলে আর্টিকেলটি কিছুক্ষণ পর আবার পড়তে পারেন।

ক্রন নিয়ে আরো জানতে চাইলে উবুন্টুর কমিউনিটি হেল্প উইকি দেখতে পারেন – https://help.ubuntu.com/community/CronHowto

মোশারফ হোসেন

লিনাক্স কেন ব্যবহার করব?

কম্পিউটার সায়েন্স অ্যান্ড ইঞ্জিনিয়ারিং—অনেক ভারী তিনটি শব্দ। কম্পিউটার শব্দটিকে যদিও অনেকে ভারী বলতে চাইবেন না। দৈনন্দিন কাজের প্রায় সবকিছুতেই কম্পিউটার ব্যবহার করতে হচ্ছে। ফলে এটিকে আর বিশেষ কোনো যন্ত্র ভাবার সুযোগ নেই। আমরা কম্পিউটার ব্যবহার করি আমাদের দৈনন্দিন কাজকর্ম সহজ, দ্রুত এবং নির্ভুলভাবে সম্পন্ন করার জন্য। আমাদের কাছে কম্পিউটার হচ্ছে বিভিন্ন কাজ করার সাধারণ একটা ‘টুল’ মাত্র। কিন্তু কম্পিউটার সায়েন্সের একজন শিক্ষার্থীর কাছে কম্পিউটার শুধু সাধারণ কাজের একটি ‘টুল মাত্র’ হলে চলে না। তার কম্পিউটার সম্পর্কে সম্যক জ্ঞান থাকা আবশ্যক। এ জন্য তাকে কম্পিউটারকে বুঝতে হয়, জানতে হয় কম্পিউটার কোন কাজটি কীভাবে করে। হার্ডওয়্যার ও সফটওয়্যার সম্পর্কে তার থাকতে হয় গভীর ধারণা।

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

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

Tux, the Linux mascot.
টাক্স, লিনাক্সের মাসকট

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

নিরাপত্তা কথাটি আজকাল এতো বেশি শুনতে হয় যে এটা নিয়ে কিছু না বলে থাকা যায় না। ইন্টারনেটের এই যুগে প্রায়ই দেখা যায় বিশাল বিশাল তথ্য ফাঁস, তথ্য চুরিসহ ব্যক্তিগত নিরাপত্তা বিঘ্নিত হওয়ার অজস্র ঘটনা। নিজে কিছুটা সচেতন হলে হয়তো কিছুটা নিরাপদ থাকা যায়। কিন্তু আমরা মানুষ, তাই স্বভাবতই আজীবন সর্তক হয়ে থাকতে পারি না। উইন্ডোজে বিশাল বিশাল অঙ্কের টাকার বিনিময়ে বিশাল বিশাল নিরাপত্তা সফটওয়্যার পাওয়া যায় যেগুলো আবার কম্পিউটারের কার্যক্ষমতার বিশাল একটা অংশ দখল করে বসে থাকে। ফলে আপনার হাতির ক্ষমতাসম্পন্ন কম্পিউটারটি কাজ করতে পারে বলদের ক্ষমতায়। আবার সেই সফটওয়্যারটি হয়ত নতুন একটা ভাইরাস/ম্যালওয়্যারকে চিনতে পারে না। সুতরাং বলদ কম্পিউটারটিও যেকোনো সময় শুয়ে পড়তে পারে—নিরাপত্তা নিয়ে এমন একটা ভয় তো আছেই। লিনাক্সে সেই ভয়টি নেই। লিনাক্সে নিরাপত্তা আপডেটগুলো সব সময় চলমান থাকে। যেকোনো নিরাপত্তা-ত্রুটির জন্য প্যাচ (patch) পাওয়া যায় প্রায় সঙ্গে সঙ্গে। সে জন্য অ্যান্টিভাইরাস নামক অন্য এক দানব ভাইরাসের হাত থেকে রক্ষা পাওয়া যায়। সিস্টেমের ফাইল/প্রোগ্রামগুলো সামান্য পরিবর্তন করতে হলে লিনাক্সে পাসওয়ার্ড লাগে। কোনো ক্ষতিকর প্রোগ্রাম তাই চাইলেও সিস্টেমের কোনো ক্ষতি করতে পারে না।

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

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

বলা হয়ে থাকে যে লিনাক্স প্রোগ্রামারদের জন্য প্রোগ্রামারদের দ্বারা তৈরি। তাই প্রোগ্রামিং-সংক্রান্ত কাজগুলো লিনাক্সে খুব সহজ ও স্বাভাবিকভাবে করা যায়। সি/সি++ বা পাইথনের মতো ভাষায় কাজ করতে গেলে বিভিন্ন সময় বিভিন্ন লাইব্রেরি ব্যবহার করতে হয়। লিনাক্সে এগুলো ইনস্টল ও ব্যবহার করা একেবারে সহজ। লিনাক্স থেকে ওয়েব প্রযুক্তির সাথে সংশ্লিষ্ট সকল ধরনের অ্যাপ্লিকেশন ও সফটওয়্যার ব্যবহার করা তুলনামূলক সহজ। অপরদিকে উইন্ডোজে কোনো লাইব্রেরি ইনস্টল করা যেমন ঝামেলার, ব্যবহারও ঝামেলার (ব্যাপারটি অবশ্য আপেক্ষিক)।

লিনাক্সের অন্যতম বড় শক্তি হচ্ছে এর কমান্ডলাইন। এটা এর অন্যতম শক্তি হলেও, বেশিরভাগ মানুষ শুরুতে লিনাক্সকে ভয় পায় একমাত্র এই কমান্ডলাইনের কারণেই। তবে এখন দিন পাল্টেছে। একজন ব্যবহারকারী মাসের পর মাস কমান্ডলাইনে না গিয়ে শুধু গ্রাফিক্যাল ইউজার ইন্টারফেস দিয়েই তার সব কাজ চালিয়ে নিতে পারে। আগে লিনাক্স না ব্যবহার করার আরেকটি অজুহাত ছিল—লিনাক্সে প্রয়োজনীয় কাজের সফটওয়্যার পাওয়া যায় না। এখন এই অজুহাত মোটেই গ্রহণযোগ্য নয়। লিনাক্সে এখন ছবি সম্পাদনা থেকে শুরু করে সুপারহিট কমার্শিয়াল অ্যানিমেশন মুভি পর্যন্ত বানানো যায়। উদাহরণস্বরূপ, পিক্সার (Pixar Animation Studio) লিনাক্স ব্যবহার করে। ওপেনসোর্স অ্যানিমেশন তৈরির সফটওয়্যার ‘ব্লেন্ডার’ দিয়ে তারা চমৎকার সব অ্যানিমেশন মুভি উপহার দিচ্ছে। তবে কমান্ডলাইন যে কী জিনিস তা প্রত্যেক অভিজ্ঞ লিনাক্স ব্যবহারকারীই জানে। কমান্ডলাইনে এমন সব কাজ কয়েক সেকেন্ডে করে ফেলা যায় যেগুলো সাধারণভাবে করতে ঘণ্টার পর ঘণ্টা সময় লাগতে পারে। লিনাক্স শেল ও শেল স্ক্রিপ্টের সঙ্গে পরিচিত হয়ে গেলে যেকোনো কাজ অটোমেটিক করে ফেলা সম্ভব—যেগুলো নিজে নিজে করা যায়।

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

লিনাক্স ব্যবহারের আরেকটা কারণ হচ্ছে ছাত্র এবং পেশাগত জীবনে এর ব্যবহার। কম্পিউটার বিজ্ঞান ও প্রকৌশল পড়তে গেলে অপারেটিং সিস্টেম নামে এক বা একাধিক কোর্স থাকে। সেই কোর্সে একটা অপারেটিং সিস্টেমের মৌলিক খুঁটিনাটি শেখানো হয়। লিনাক্সের সোর্সকোড উন্মুক্ত বলে এই কোর্স লিনাক্স দিয়েই করানো হয়। পাশাপাশি অপারেটিং সিস্টেম তৈরি করার ইচ্ছা আছে যাদের, তাদের তো লিনাক্স কার্নেল ছাড়া গতি নেই। তাই লিনাক্স ব্যবহার এবং এর মৌলিক বিষয়গুলোর ওপর পরিষ্কার ধারণা থাকা আবশ্যক। প্রফেশনাল জীবনে যারা বড়সড় বা মাঝারি ধরনের কোম্পানিতে সফটওয়্যার ইঞ্জিনিয়ার হিসেবে কাজ করবে তাদের জন্য লিনাক্স জানা বাধ্যতামূলক। খুব দক্ষ হতে হবে এমন নয়, মৌলিক ধারণাগুলো—কমান্ডলাইন ব্যবহার, মৌলিক ও দৈনন্দিন ব্যবহার্য কমান্ডগুলো, কোনো একটা কমান্ডলাইন এডিটর (ভিম, ন্যানো, ইম্যাকস) ব্যবহার, কমান্ডলাইনে গিট (git) ব্যবহার ইত্যাদি জানতে হয়। যারা সিস্টেম অ্যাডমিনিস্ট্রেটর হবে বা সার্ভার নিয়ে কাজ করবে, ৯০% সম্ভাবনা আছে তাদের অবশ্যই লিনাক্স ব্যবহার করতে হবে। কারণ নিরাপত্তার জন্য ইতিমধ্যে বেশিরভাগ কোম্পানি লিনাক্স সার্ভার ব্যবহার করে। যারা করে না তাদের বড় একটা অংশও লিনাক্সে চলে যাচ্ছে বা যাওয়ার উদ্যোগ নিচ্ছে। খোদ মাইক্রোসফটও লিনাক্স সার্ভার ব্যবহার করে। আর লিনাক্স সার্ভারে কোনো গুই, অর্থাৎ গ্রাফিক্যাল ইউজার ইন্টারফেস নেই। সার্ভারের সব কাজ কমান্ডলাইনে করতে হয়। এটা শুনে (পড়ে) ভয় পাওয়ার কিছু নেই। কমান্ডলাইন ব্যবহার করা শুনতে যত কঠিন মনে হয় বাস্তবে ঠিক ততটাই সহজ ও মজার।

এমনিতে দেখা যায় লিনাক্স ব্যবহার করে যারা অভ্যস্ত, অন্যদের তুলনায় তারা অনেক এগিয়ে থাকে। লিনাক্সে প্রোগ্রামিং করতে গেলে দেখা যায় অনেক কিছু কমান্ড লিখে করতে হয় (আজকাল ভারী ভারী আইডিই থাকার কারণে হয়তো সব সময় এটা করতে হয় না, তবে শুরুতে করতে হয়)। এই কারণে তাদের অনেক কিছু জানতে হয়। একজন মোটামুটি নতুন লিনাক্স ব্যবহারকারী প্রোগ্রামার যা জানে, একজন উইন্ডোজ ব্যবহারকারী মোটামুটি অভিজ্ঞ প্রোগ্রামারও তা জানে না। লিনাক্স ব্যবহারকারীরা যেসব বিষয় জানে, সেসব বিষয় যে জানতে হয়—উইন্ডোজ ব্যবহারকারীরা সেটাই জানে না, সেসব জানবে তো দূর। এই কথার সত্যতা আপনারা নিজের ক্লাসমেটদের দিয়েই যাচাই করতে পারেন।

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

একজন প্রোগ্রাম প্রহরীর গল্প : ডোনাল্ড নুথ (Donald Knuth)

এই লিখাটার শিরোনামটি অদ্ভুত – প্রোগ্রাম প্রহরীর গল্প। হয়তো শিরনামটি দেখেই অনেকে নড়ে চড়ে বসেছেন, আবার অনেকেই হয়তো তার নিচের নামটি দেখেই বুঝে ফেলেছেন যে আজকের এই লেখাটি কাকে নিয়ে। এই লেখায় এমন একজনকে নিয়ে আজ কথা বলব যিনি কম্পিউটার প্রোগ্রামিংকে দিয়েছেন এক নতুন মাত্রা – সেই ব্যক্তিটির নাম হল ডোনাল্ড নুথ, যিনি অনেক কিছুই করেছেন এই প্রোগ্রামিং জগতের জন্য কিন্তু আমাদের মধ্যে অনেকেরই হয়তো তাঁর নামটি অজানা।

ডোনাল্ড নুথ

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

ডোনাল্ড নুথ এর পুরো নাম হচ্ছে ডোনাল্ড এরভিন নুথ। ১৯৩৮ সালের ১০ই জানুয়ারিতে আমেরিকাতে জন্মগ্রহন করেন তিনি। তিনি কেইস ইন্সটিটিউট হতে ব্যাচেলর ও মাস্টার্স ডিগ্রী লাভ করেন এবং ১৯৬৩ সালে ক্যালিফোর্নিয়া ইন্সটিটিউট থেকে পি.এইচ.ডি ডিগ্রী লাভ করেন এবং সেখানেই শিক্ষকতা শুরু করেন। ১৯৬৮  সালে তিনি স্ট্যানফোর্ড বিশ্ববিদ্যালয়ে যোগদান করেন এবং সেই সনেই তার রচিত বিখ্যাত বই “The Art of Programming” এর প্রথম খন্ড বের হয় । এই বইটি কম্পিউটার জগতের একটি উজ্জ্বল পথ-প্রদর্শক হিসেবে আজও স্মরণীয়। বইটি সংকলনের জন্য তিনি ACM(Association of Computing Machinery) কর্তৃক Turing Award লাভ করেন। নুথ এর আরও একটি  উল্লেখযোগ্য আবিষ্কার হল টেক্স নামক টাইপসেটিং সিস্টেম যা গাণিতিক ফর্মুলা দ্বারা নিয়ন্ত্রিত।

নুথ সম্পর্কে আরো একটি মজার তথ্য আছে – কোন ব্যাক্তি যদি নুথ এর বই-এ কোনো ভুল ধরিয়ে দেন, তাহলে নুথ ওই ব্যাক্তিকে $২.৫৬ পুরষ্কার দিয়ে থাকেন, আর কেউ যদি তাকে তার কাজ-সম্পর্কিত কোনধরনের সদুপদেশ দিয়ে থাকেন তিনি পান $০.৩২ । বাংলাদেশ থেকেও একাধিক ব্যক্তি নুথের বইয়ের ভুল ধরে পুরষ্কার পেয়েছেন।

আর একটি অবাক করা বিষয় হল -ডোনাল্ড নুথ এখন আর ই-মেইল ব্যবহার করেন না । কারো সাথে যোগাযোগের মাধ্যম এখন তাঁর জন্য ডাকচিঠি। কারন তাঁর ধারণা, তিনি তাঁর জীবনের খুব বড় একটি সময় এই ইমেইল ব্যবহারের পিছনে ব্যয় করে ফেলেছেন। উল্লেখ্য, নুথ ১৯৭৯ সালে আমেরিকার জাতীয় বিজ্ঞান এওয়্যার্ড লাভ করেন।

পরিচয়পর্ব আজ এই পর্যন্তই । আশা করি,আগামীতে ডোনাল্ড নুথের আবিষ্কৃত টেক্স ও তার সংকলিত বই “The Art of Programming” নিয়ে আরও বিস্তারিত আলোচনা করতে পারব । সবাই ভাল থাকুন আর প্রোগ্রামিং এর সাথেই থাকুন, প্রোগ্রামিং এর মাঝেই থাকুন। আল্লাহ হাফেজ ।

লেখক : মোহাম্মাদ দিদারুল ইসলাম রাব্বি (Mohammad Didarul Islam Rabbi)