তথ্য গুদামজাত করা ও ব্যবসা ইন্টেলিজেন্স

তথ্য গুদামজাত করা ও ব্যবসা ইন্টেলিজেন্স

By: Amirul Islam Arif

 

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

 

 

এই সকল বিষয় গুলো প্রশমিত করতে, আধুনিক ব্যবসার নেতৃস্থানীয় যেমনঃ লস আলামোস ন্যাশনাল ল্যাবস, এম আই টি লিঙ্কন ল্যাব, কক্স কমনিকেশন, এবং আরও অনেকে তাদের ক্রমবর্ধমান তথ্যগুদাম পরিকাঠামোর ক্ষমতাবৃদ্ধি করতে বেছে নিয়েছে মাইএসকিউএল।

 

মাইএসকিউএল সহজে হ্যান্ডেল করতে স্বতন্ত্র ডিজাইন করা হয়েছে । সবচেয়ে সাধারণ তথ্যগুদাম ব্যবহারের ক্ষেত্রে:

  • Data Marts তথ্য মার্কেট
  • Traditional Data Warehouses গতানুগতিক তথ্যগুদাম
  • Large Historical/Archive Data Warehouses বৃহৎ ঐতিহাসিক/সংরক্ষাণাগার তথ্যগুদাম
  • Real Time Data Warehouses রিয়েল টাইম ডেটা ওয়ারহাউস

 

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

এর মধ্যে রয়েছে:

 

  • Data/Index partitioning (range, hash, key, list, composite) in MySQL 5.1 and above ডেটা / সূচক পার্টিশন প্রণালী (পরিসীমা, হ্যাশ, কী, তালিকা, যৌগিক) মাইএসকিউএল 5.1 এবং এর উপরে ।
  • No practical storage limits with automatic storage management স্বয়ংক্রিয় স্টোরেজ পরিচালনার সঙ্গে কোন ব্যবহারিক স্টোরেজ সীমা নেই।
  • Built-in Replication বিল্ট ইন রেপ্লিকেশন।
  • Strong indexing support (B-tree, fulltext, clustered, hash, GIS)   স্ট্রং ইন্ডেক্স সাপোর্ট (বি ট্রি, ফুলটেক্সট, ক্লাস্টার, হ্যাশ, জিআইএস)
  • Multiple, configurable data/index caches একাধিক কনফিগার তথ্য/সূচক ক্যাশেশ
  • Pre-loading of data into caches প্রিলোডেড অফ ডাটা ইনটু ক্যাশেশ
  • Unique query cache (caches result set + query; not just data) স্বতন্ত্র কুয়ারি ক্যাশেশ
  • Parallel data load সমান্তরাল তথ্য লোড
  • Multi-insert DML      মাল্টি সন্নিবেশ DML
  • Read-only tables শুধুমাত্র পাঠযোগ্য টেবিল
  • Cost-based optimizer কস্ট-বেজ অপ্টিমাইজার
  • Wide platform support   ওয়াইড প্ল্যাটফর্ম সমর্থন

 

 

স্থানীয় স্টোরেজ ইঞ্জিন

মাইএসকিউএল বর্তমানে তার নিজস্ব কিছু সংখ্যক স্থানীয় সংগ্রহস্থল ইঞ্জিন প্রদান করা হয়:

  • InnoDB
  • MyISAM
  • Cluster
  • Federated
  • Archive
  • Merge
  • Memory
  • CSV
  • Blackhole

 

MongoDB PHP. MongoDB পিএইচপি

MongoDB পিএইচপি

নয়ন চন্দ্র দত্ত

 

পিএইচপি এর সঙ্গে MongoDB ব্যবহার করার জন্য আপনাকে MongoDB পিএইচপি ড্রাইভার ব্যবহার করতে হবে। নিচের লিঙ্ক থেকে ড্রাইভারটি ডাউনলোড করে নিনঃ
https://s3.amazonaws.com/drivers.mongodb.org/php/index.html
সর্বশেষ রিলিজ ডাউনলোড করতে ভুলবেন না। এখন আর্কাইভটি আনজিপ করুন এবং আপনার পিএইচপি এক্সটেনশন ডিরেক্টরির (“ext” ডিফল্টভাবে) মধ্যে php_mongo.dll এ এবং নিচের লাইন্টি php.ini এ স্থাপন করুনঃ

extension=php_mongo.dll

একটি সংযোগ তৈ্রী করুন এবং একটি ডাটাবেস নির্বাচন করুন। একটি সংযোগ করতে আপনাকে ডাটাবেসের নাম নির্দিষ্ট করতে হবে, যদি ডেটাবেস উপস্থিত না থাকে তাহলে MongoDB স্বয়ংক্রিয়ভাবে এটি তৈরি করবে।
ডেটাবেসের সাথে সংযোগ করার জন্য কোড স্নিপেট নিম্নরূপ হবেঃ

php
// connect to mongodb
$m = new MongoClient();
echo “Connection to database successfully”;
// select a database
$db = $m->mydb;
echo “Database mydb selected”;
?>

যখন প্রোগ্রাম নিষ্পন্ন হয় তখন তার ফলাফল নিম্নরূপ হবেঃ

Connection to database successfully
Database mydb selected

কালেকশন তৈরি করা
একটি কালেকশন তৈরি করার জন্য কোড স্নিপেট নিম্নরূপ হবেঃ

php
// connect to mongodb
$m = new MongoClient();
echo “Connection to database successfully”;
// select a database
$db = $m->mydb;
echo “Database mydb selected”;
$collection = $db->createCollection(“mycol”);
echo “Collection created succsessfully”;
?>

যখন প্রোগ্রাম নিষ্পন্ন হয় তখন তার ফলাফল নিম্নরূপ হবেঃ

Connection to database successfully
Database mydb selected
Collection created succsessfully

ডকুমেন্ট প্রবেশ করান

MongoDB তে একটি ডকুমেন্ট প্রবেশ করাতে হলে insert() পদ্ধতি ব্যবহৃত হয়।
ডকুমেন্ট প্রবেশ করানোর জন্য কোড স্নিপেট নিম্নরূপ হবেঃ

php
// connect to mongodb
$m = new MongoClient();
echo “Connection to database successfully”;
// select a database
$db = $m->mydb;
echo “Database mydb selected”;
$collection = $db->mycol;
echo “Collection selected succsessfully”;
$document = array(
“title” => “MongoDB”,
“description” => “database”,
“likes” => 100,
“url” => “http://www.tutorialspoint.com/mongodb/”,
“by”, “tutorials point”
);
$collection->insert($document);
echo “Document inserted successfully”;
?>

যখন প্রোগ্রাম নিষ্পন্ন হয় তখন তার ফলাফল নিম্নরূপ হবেঃ

Connection to database successfully
Database mydb selected
Collection selected succsessfully
Document inserted successfully

সব ডকুমেন্ট খুজে পেতে

কালেকশন থেকে সব ডকুমেন্ট সিলেক্ট করতে find() পদ্ধতি ব্যবহৃত হয়।
সব ডকুমেন্ট সিলেক্ট করার জন্য কোড স্নিপেট নিম্নরূপ হবেঃ

<?php
// connect to mongodb
$m = new MongoClient();
echo “Connection to database successfully”;
// select a database
$db = $m->mydb;
echo “Database mydb selected”;
$collection = $db->mycol;
echo “Collection selected succsessfully”;

$cursor = $collection->find();
// iterate cursor to display title of documents
foreach ($cursor as $document) {
echo $document[“title”] . “\n”;
}
?>

যখন প্রোগ্রাম নিষ্পন্ন হয় তখন তার ফলাফল নিম্নরূপ হবেঃ

Connection to database successfully
Database mydb selected
Collection selected succsessfully
{
“title”: “MongoDB”
}

ডকুমেন্ট আপডেট করা

ডকুমেন্ট আপডেট করার জন্য update() পদ্ধতি ব্যবহার করতে হবে।
নিচে দেওয়া উদাহরণে আমরা প্রবেশিত ডকুমেন্টের টাইটেল MongoDB Tutorial এ আপডেট করব।
ডকুমেন্ট আপডেট করার জন্য কোড স্নিপেট নিম্নরূপ হবেঃ

<?php
// connect to mongodb
$m = new MongoClient();
echo “Connection to database successfully”;
// select a database
$db = $m->mydb;
echo “Database mydb selected”;
$collection = $db->mycol;
echo “Collection selected succsessfully”;

// now update the document
$collection->update(array(“title”=>”MongoDB”), array(‘$set’=>array(“title”=>”MongoDB Tutorial”)));
echo “Document updated successfully”;
// now display the updated document
$cursor = $collection->find();
// iterate cursor to display title of documents
echo “Updated document”;
foreach ($cursor as $document) {
echo $document[“title”] . “\n”;
}
?>

যখন প্রোগ্রাম নিষ্পন্ন হয় তখন তার ফলাফল নিম্নরূপ হবেঃ

Connection to database successfully
Database mydb selected
Collection selected succsessfully
Document updated successfully
Updated document
{
“title”: “MongoDB Tutorial”
}

ডকুমেন্ট ডিলিট করা বা মুছে ফেলা

একটি ডকুমেন্ট ডিলিট করতে হলে remove() পদ্ধতি ব্যবহার করতে হবে।
নিচে দেওয়া উদাহরণে আমরা MongoDB Tutorial টাইটেলের ডকুমেন্ট ডিলিট করব।
ডকুমেন্ট ডিলিট করার জন্য কোড স্নিপেট নিম্নরূপ হবেঃ

<?php
// connect to mongodb
$m = new MongoClient();
echo “Connection to database successfully”;
// select a database
$db = $m->mydb;
echo “Database mydb selected”;
$collection = $db->mycol;
echo “Collection selected succsessfully”;

// now remove the document
$collection->remove(array(“title”=>”MongoDB Tutorial”),false);
echo “Documents deleted successfully”;

// now display the available documents
$cursor = $collection->find();
// iterate cursor to display title of documents
echo “Updated document”;
foreach ($cursor as $document) {
echo $document[“title”] . “\n”;
}
?>

যখন প্রোগ্রাম নিষ্পন্ন হয় তখন তার ফলাফল নিম্নরূপ হবেঃ

Connection to database successfully
Database mydb selected
Collection selected succsessfully
Documents deleted successfully

উপরের দেওয়া উদাহরণে দ্বিতীয় প্যারামিটার বুলিয়ান টাইপের এবং remove() পদ্ধতিতে justOne এর জন্য ব্যবহৃত হয়েছে।
MongoDB পদ্ধতির অবশিষ্ট findOne(), save(), limit(), skip(), sort() ইত্যাদি একইরকম কাজ করে যা উপরের উদাহণে ব্যাখ্যা করা হয়েছে।

MongoDB Create Backup. MongoDB ব্যাকআপ তৈরি করা

MongoDB ব্যাকআপ তৈরি করা

নয়ন চন্দ্র দত্ত

 

কি খবর সবার? আশা করছি সবাই ভাল আছেন। আজ আমি হাজির হয়েছি একটি নতুন টিউটোরিয়াল নিয়ে। আজ আমরা দেখব কীভাবে MongoDB ব্যাকআপ তৈরি করা যায়। তাহলে
আর কথা না বাড়িয়ে আজকের টিউটোরিয়াল শুরু করি।

MongoDB তথ্য ডাম্প

MongoDB তে ডেটাবেসের ব্যাকআপ তৈরি করতে আপনাকে mongodump কমান্ড ব্যবহার করতে হবে। এই কমান্ড ডাম্প ডিরেক্টরির মধ্যে আপনার সার্ভারের সব তথ্য ডাম্প করবে।
এখানে অনেক অপশন আছে যা দ্বারা আপনি তথ্যের পরিমাণ সীমাবদ্ধ বা আপনার দূরবর্তী সার্ভারে ব্যাকআপ তৈরি করতে পারেন।

সিনট্যাক্স

mongodump কমান্ড মৌলিক বাক্য গঠন নিম্নরূপঃ
>mongodump

উদাহরণ
আপনার mongod সার্ভার আরম্ভ করুন। অনুমেয় যে আপনার mongod সার্ভার এ লোকালহোস্ট চলমান। এবং পোর্ট 27017 । এখন একটি কমান্ড প্রম্পট খুলুন এবং উদাহরণস্বরূপ আপনার
MongoDB বিন ডিরেক্টরিতে যান এবং mongodump কমান্ড টাইপ করুন। নিম্নলিখিতভাবে mycol collectioin বিবেচনা করুনঃ
>mongodump

কমান্ড 127.0.0.1 এ চলমান সার্ভারের সাথে এবং পোর্ট 27017 সংযোগ করবে এবং ডিরেক্টরিতে আপনার সার্ভারে সব তথ্য ফিরিয়ে আনুন।
এখানে অনেক available অপশন আছে যা Mongodump কমান্ড এর সাথে ব্যবহার করা যেতে পারে। শুধুমাত্র নির্দিষ্ট ডেটাবেসের নির্দিষ্ট পথে এই কমান্ড এ ব্যাকআপ হবে ।

সিনট্যাক্সঃ mongodump –host HOST_NAME –port PORT_NUMBER
বর্ণনাঃ এই কমান্ড উদাহরণস্বরূপ mongod এর সব ডেটাবেস ব্যাকআপ করবে
উদাহরণঃ mongodump –host tutorialspoint.com –port 27017

সিনট্যাক্সঃ mongodump –dbpath DB_PATH –out BACKUP_DIRECTORY
উদাহরণঃ mongodump –dbpath /data/db/ –out /data/backup/

সিনট্যাক্সঃ mongodump –collection COLLECTION –db DB_NAME
বর্ণনাঃ এই কমান্ড উদাহরণস্বরূপ mongod এর সব ডেটাবেস ব্যাকআপ করবে
উদাহরণঃ mongodump –collection mycol –db test

Restore বা তথ্য পুনরুদ্ধার

ব্যাকআপ করতে MongoDB এর mongorestore কমান্ড ব্যবহার করা হয় । এই কমান্ড ব্যাক আপ ডিরেক্টরি থেকে সমস্ত তথ্য পুনরুদ্ধার করবে। Mongorestore এর বেসিক সিনট্যাক্স বা বাক্য
গঠন এর জন্য কমান্ড হচ্ছে-
>mongorestore

আশা করছি সবার ভাল লেগেছে আজকের টিউটোরিয়াল। পরবর্তিতে MongoDB বিষয়ক আরো টিউটোরিয়াল নিয়ে হাজির হব। আজকের মত এই পর্যন্তই আর কোন সমস্যা হলে নিশ্চই কমেন্ট করবেন ।
http://Bangla.SaLearningSchool.com

MongoDB Sharding শেয়ার্ডিং

MongoDB Sharding শেয়ার্ডিং

-পায়েল চৌধুরী

 

শেয়ার্ডিং হল একাধিক মেশিন জুড়ে তথ্য রেকর্ড সংরক্ষণ করার একটি প্রক্রিয়া এবং এটি তথ্য বৃদ্ধির চাহিদা পূরণের করতে MongoDB এর একটি পন্থা. তথ্যের আকার বৃদ্ধির কারণে তথ্য সংরক্ষণের জন্য শুধু এএকক মেশিনে তথ্য সংরক্ষণ করা যেমন হয়তো গ্রহণযোগ্য না হতে পারে, তেমনি মেশিন কতৃক তথ্য পঠন এবং লিখন প্র্রক্রিয়ার হারও পর্যাপ্ত নাও হতে পারে. হরাইজেন্টাল স্কেলিং এর দ্বারা শেয়ার্ডিং এই সমস্যার সমাধান করে, তথ্যের পরিমাণ বৃদ্ধি পেলে মেশিনের সংখ্যা বাড়ানোর মাধ্যমে লিখন এবং পঠন কার্যক্রমের চাহিদা শেয়ার্ডিং এর দ্বারা পূরণ করা যায়.

শেয়ার্ডিং কেন?

• প্র্রতিলিপির জন্য সকল লিখন মাস্টার নড এ যায়
• বিলম্ব সংবেদনশীল প্রশ্ন(Latency sensitive queries) এখনও মাস্টার এ যায়
• একক প্রতিরূপ সেট এ 12 নোড এর সীমাবদ্ধতা আছে
• সক্রিয় ডেটা সেটটি বড় যখন মেমোরির আকার বড় করা সম্ভব না
• স্থানীয় ডিস্ক যথেষ্ট বড় না বা পর্যাপ্ত নয়
• উল্লম্ব আরোহী(Vertical scaling) অত্যন্ত ব্যয়বহুল

মংগোডিবিতে শেয়ার্ডিং (Sharding in MongoDB)

নীচে চিত্র তে sharded ক্লাস্টার ব্যবহার করে মংগোডিবিতে শেয়ার্ডিং দেখানো হল-

উপরে দেওয়া চিত্রে তিনটি প্রধান উপাদান আছে যাদের বর্ণণা নীচে দেয়া হল:

Shards: Shards তথ্য ধারণ করার জন্য ব্যবহার করা হয়.এটা তথ্য প্রাপ্তি ও মানের ব্যাপারে উচ্চ মান বজায় রাখে. উৎপাদন পরিবেশে প্রত্যেক শেয়ার্ডস( Shards) পৃথক একটি রেপ্লিকা সেট হিসাবে কাজ করে.

কনফিগ সার্ভারস: কনফিগ সার্ভারস ক্লাস্টারস এর মেটাডাটা সংরক্ষণ করে.শেয়ার্ডস এ রক্ষিত ক্লাস্টার ডাটা সেট এর ম্যাপিং এ ডাটা ধারণ করে. ক্যোয়ারী রাউটার নির্দিষ্ট Shards অপারেশন লক্ষ্য করে এই মেটাডাটা ব্যবহার করে. উৎপাদন পরিবেশে sharded ক্লাস্টার ঠিক 3টি কনফিগ সার্ভার আছে.

কোয়েরি রাউটার (Query Routers): কোয়েরি রাউটার মূলত মংগোস ইন্সস্ট্যান্স হয়,যা গ্রাহকের এপ্লিকেশনের সঙ্গে ইন্টারফেস হিসাবে কাজ করে এবং যথাযথ শেয়ার্ডস এ প্রত্যক্ষ ভাবে কাজ করে. কোয়েরি রাউটার কার্যক্রম চালানোর জন্য শেয়ার্ডস নির্দিষ্ট করে দেয় এবং ডাটা প্রক্রিয়াজাত করে,তারপর গ্রাহকদের ফলাফল ফেরত প্রদান করে.ক্লায়েন্ট অনুরোধ লোডকে বিভক্ত করার জন্য একটি sharded ক্লাস্টার এ একাধিক কোয়েরি রাউটার ধারণ করতে পারে.

C – Constants and Literals. সি প্রোগ্রামিঙে লিটারেল ও ধ্রুবক

সি প্রোগ্রামিঙে লিটারেল ও ধ্রুবক

রিদওয়ান বিন শামীম

 

ধ্রুবকের মান কোন প্রোগ্রামে সব সময়েই একই থাকে, একে লিটারেলও বলে। ধ্রুবক যে কোন মৌলিক ডাটা টাইপের হতে পারে যেমন পূর্ণ সংখ্যা ধ্রুবক, ফ্লোটিং ধ্রুবক, ক্যারেকটার ধ্রুবক, স্ট্রিং ধ্রুবক ইত্যাদি। এগুলো সাংখ্যিক ধ্রুবকও হতে পারে। ধ্রুবক অন্যান্য চলকের মতই ব্যবহৃত হয় কেবল ধ্রুবক হিসেবে সংজ্ঞায়িত হওয়ার পর এদের মানের কোন পরিবর্তন হবে না।
পূর্ণসংখ্যা ধ্রুবকঃ পূর্ণ সংখ্যা ধ্রুবক দশমিক, অকট্যাল, হেক্সাডেসিমেল ইত্যাদি রকমের হতে পারে। এক্ষেত্রে উপসর্গ ভিত্তি নিশ্চিত করে, হেক্সাডেসিমেলের জন্য 0x অথবা 0X , অকট্যালের জন্য 0, এবং দশমিকের জন্য কিছুই না। পূর্ণ সংখ্যা ধ্রুবকে সাফিক্সও থাকতে পারে যা মূলত U ও L এর সমন্বয় যা unsigned ও long নির্দেশ করে, সাফিক্স ছোট হাতের বা বড় হাতের, এবং যেকোনভাবে সজ্জিত হতে পারে।পূর্ণসংখ্যা ধ্রুবকের কয়েকটি উদাহরণ

212 /* Legal */
215u /* Legal */
0xFeeL /* Legal */
078 /* Illegal: 8 is not an octal digit */
032UU /* Illegal: cannot repeat a suffix */
আরও কয়েকটি ধরনের পূর্ণসংখ্যা ধ্রুবক হল,
85 /* decimal */
0213 /* octal */
0x4b /* hexadecimal */
30 /* int */
30u /* unsigned int */
30l /* long */
30ul /* unsigned long */

ফ্লোটিং ধ্রুবকঃ ফ্লোটিং ধ্রুবকে পূর্ণসংখ্যা অংশ,দশমিক অংশ, ভগ্নাংশ ও সূচক অংশ থাকে, এদেরকে সূচক বা দশমিক যেকোনো আকারে প্রকাশ করা যায়। দশমিক আকারে প্রকাশ করার সময় দশমিক বা সূচক, বা উভয়ই অন্তর্ভুক্ত করতে হবে, সূচক আকারে প্রকাশ করার সময় পূর্ণসংখ্যা বা ভগ্নাংশ, অথবা উভয়ই অন্তর্ভুক্ত করতে হবে। এই সূচক বা signed exponent কে e বা E দ্বারা প্রকাশ করা হয়। ফ্লোটিং ধ্রুবকের কয়েকটি উদাহরণ নিচে দেয়া হল।
3.14159 /* Legal */
314159E-5L /* Legal */
510E /* Illegal: incomplete exponent */
210f /* Illegal: no decimal or exponent */
.e55 /* Illegal: missing integer or fraction */

ক্যারেকটার ধ্রুবকঃ ক্যারেকটার ধ্রুবক সিঙ্গেল কোটের মধ্যে ‘x’ দ্বারা বোঝানো হয়,সাধারণ চলক রুপে
char type এ অন্তর্ভুক্ত হয়ে থাকে। ক্যারেকটার ধ্রুবক plain character (যেমন ‘x’),escape sequence (যেমন ‘\t’), অথবা universal character (যেমন’\u02C0′)হতে পারে। সি প্রোগ্রামিঙে কিছু নির্দিষ্ট ক্যারেকটার আছে যা backslash ব্যবহার করে প্রকাশ করা হয়, যারা ভিন্ন অর্থ প্রকাশ করে থাকে যেমন newline (\n) অথবা tab (\t)ইত্যাদি। এরকম কিছু escape sequence codes নিচে দেয়া হল।
Escape sequence Meaning
\\ \ character
\’ ‘ character
\” ” character
\? ? character
\a Alert or bell
\b Backspace
\f Form feed
\n Newline
\r Carriage return
\t Horizontal tab
\v Vertical tab
\ooo Octal number of one to three digits
\xhh . . . Hexadecimal number of one or more digits

escape sequence ক্যারেকটারের কিছু উদাহরণ দেয়া যাক,
#include <stdio.h>

int main()
{
printf(“Hello\tWorld\n\n”);

return 0;
}
কোডগুলো সঠিকভাবে লিখা হলে তা যে ফল দেখাবে তা হল,
Hello World

স্ট্রিং ধ্রুবকঃ স্ট্রিং ধ্রুবককে ডবল কোটের(“”) মাধ্যমে প্রকাশ করা হয়,এর ভিতরে সেই সব ক্যারেকটার রাখা হয় যারা মূলত ক্যারেকটার ধ্রুবকের সাথে সাদৃশ্যপূর্ণ, যেমন plain characters, escape sequences, এবং universal characters। স্ট্রিং ধ্রুবক ব্যবহার করে লম্বা লাইনকে ছোট ছোট লাইনে পরিনত করা যায়, এবং খালি জায়গা ব্যবহার করে এদের পৃথক করতে হয়। একই ধরনের তিনটি স্ট্রিং ধ্রুবক উদাহরণে দেখানো হল।
“hello, dear”

“hello, \

dear”

“hello, ” “d” “ear”
ধ্রুবক নির্দেশ করাঃ সি প্রোগ্রামিঙে দুটি সাধারণ উপায়ে ধ্রুবক নির্দেশ করা হয়, #define preprocessor ব্যবহার করে ও const keyword ব্যবহার করে।
#define preprocessor ব্যবহারঃ নিচের ফরমেটে এটি করা হয়,
#define identifier value
নিচের উদাহরণ দিয়ে বোঝানো যাক,
#include <stdio.h>

#define LENGTH 10
#define WIDTH 5
#define NEWLINE ‘\n’

int main()
{

int area;

area = LENGTH * WIDTH;
printf(“value of area : %d”, area);
printf(“%c”, NEWLINE);

return 0;
}
কোড ঠিকভাবে লেখা হলে ফলাফল আসবে,
value of area : 50

const keyword ব্যবহারঃ নির্দিষ্ট রকমের ধ্রুবক নির্দেশ করতে const prefix ব্যবহার করা হয়, const type variable = value;
নিচে একটি উদাহরণ দিয়ে বোঝানো যাক,
#include <stdio.h>

int main()
{
const int LENGTH = 10;
const int WIDTH = 5;
const char NEWLINE = ‘\n’;
int area;

area = LENGTH * WIDTH;
printf(“value of area : %d”, area);
printf(“%c”, NEWLINE);

return 0;
}

কোড ঠিকভাবে লেখা হলে ফলাফল আসবে,
value of area : 50
ধ্রুবককে বড় হাতের অক্ষর দ্বারা প্রকাশ করা প্রোগ্রামিঙের ক্ষেত্রে একটি ভাল চর্চা।

MongoDB Limit Records

MongoDB সীমাবদ্ধ রেকর্ডস

নয়ন চন্দ্র দত্ত

 

Limit() পদ্ধতি

MongoDB তে রেকর্ডকে সীমাবদ্ধ করতে হলে limit() মেথড বা পদ্ধতি ব্যবহার করতে হবে। Limit() পদ্ধতি এক নাম্বারের টাইপ সমর্থন করে যা ডকুমেন্টের নাম্বার এবং আপনি প্রদর্শন করতে চাইছেন।

সিনট্যাক্সঃ
limit() এর বেসিক সিনট্যাক্স নিম্নরূপঃ

>db.COLLECTION_NAME.find().limit(NUMBER)

উদাহরণঃ
নিম্নলিখিত তথ্যের সাথে myycol কালেকশনটি বিবেচনা করুনঃ

{ “_id” : ObjectId(5983548781331adf45ec5), “title”:”MongoDB Overview”}
{ “_id” : ObjectId(5983548781331adf45ec6), “title”:”NoSQL Overview”}
{ “_id” : ObjectId(5983548781331adf45ec7), “title”:”Tutorials Point Overview”}

ডকুমেন্ট quering এর সময় নিচের উদাহরণটি কেবলমাত্র ২টি ডকুমেন্ট প্রদর্শন করবেঃ

>db.mycol.find({},{“title”:1,_id:0}).limit(2)
{“title”:”MongoDB Overview”}
{“title”:”NoSQL Overview”}
>

যদি আপনি Limit() পদ্ধতিতে ডকুমেন্টের নাম্বার উল্লেখ না করেন তাহলে এটি কালেকশনের সকল ডকুমেন্ট প্রদর্শন করবে।

MongoDB Skip() পদ্ধতি

এছাড়াও limit() পদ্ধতি ছাড়া আরও একটি পদ্ধতি skip() আছে যা ডকুমেন্টের সংখ্যার টাইপ সমর্থন করে এবং সেই নাম্বারের ডকুমেন্ট এড়িয়ে(skip) চলে।

সিনট্যাক্সঃ
skip() এর বেসিক সিনট্যাক্স নিম্নরূপঃ

>db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

উদাহরণঃ
নিম্নলিখিত উদাহণটি শুধু দ্বিতীয় ডকুমেন্ট প্রদর্শন করবেঃ

>db.mycol.find({},{“title”:1,_id:0}).limit(1).skip(1)
{“title”:”NoSQL Overview”}
>

অনুগ্রহ করে লক্ষ্য করুন- skip() পদ্ধতিতে ডিফল্ট মান ০ ।

জাবাস্ক্রিপ্ট আউটপুট (JavaScript Output)

JavaScript Output

অনুবাদ করেছেন AbuJubair Mahin

 

জাভাস্ক্রিপ্ট কোনো বিল্ট ইন প্রিন্ট অথবা ডিসপ্লে ফাংশন নেই।

JavaScript Display প্রোপার্টিস

জাভাস্ক্রিপ্ট বিভিন্ন উপায়ে তথ্য “প্রদর্শন” করতে পারে:

* window.alert() ব্যবহার করে সতর্কতা বক্সে লেখা ।
* document.write() ব্যবহার করে HTML আউটপুট মধ্যে লেখা ।
* innerHTMLব্যবহার করে একটি HTML উপাদান মধ্যে লেখা ।
* console.log() ব্যবহার করে ব্রাউজার কনসোল মধ্যে লেখা ।

window.alert() ব্যবহার

আপনি তথ্য প্রদর্শন করার জন্য একটি সতর্কতা বাক্স ব্যবহার করতে পারেন :.

উদাহরনঃ


<!DOCTYPE html>
<html>
<body>
<h1>My First Web Page</h1>
<p>My first paragraph.</p>
<script>
window.alert(5 + 6);
</script>
</body>
</html>


document.write() ব্যবহার

document.write() পরীক্ষার উদ্দেশ্যে এটি ব্যবহার করা সুবিধাজনকঃ

উদাহরনঃ


<!DOCTYPE html>
<html>
<body>
<h1>My First Web Page</h1>
<p>My first paragraph.</p>
<script>
document.write(5 + 6);
</script>
</body>
</html>

 

HTML ডকুমেন্ট সম্পূর্ণরূপে লোড করার পরে document.write () ব্যবহার করে, সব বিদ্যমান HTML মুছে ফেলা হবে:

উদাহরনঃ


<!DOCTYPE html>
<html>
<body>
<h1>My First Web Page</h1>
<p>My first paragraph.</p>
<button onclick="document.write(5 + 6)">Try it</button>
</body>
</html>

 

সতর্কতাঃ Document.write () মেথড শুধুমাত্র পরীক্ষার জন্য ব্যবহার করা উচিত।

innerHTML ব্যবহার

একটি HTML উপাদান অ্যাক্সেস করার জন্য, জাভাস্ক্রিপ্ট document.getElementById (ID) পদ্ধতি ব্যবহার করতে পারেন.
আইডি অ্যাট্রিবিউট HTML উপাদান সংজ্ঞায়িত করে. InnerHTML property,  HTML সামগ্রী সংজ্ঞায়িত করেঃ

উদাহরনঃ


<!DOCTYPE html>
<html>
<body>

<h1>My First Web Page</h1>
<p>My First Paragraph</p>

<p id=”demo”></p>

<script>
document.getElementById(“demo”).innerHTML = 5 + 6;
</script>

</body>
</html>


 

আমাদের সকল উদাহরণে, আমরা প্রায়ই (একটি HTML উপাদান মধ্যে লেখা) innerHTML পদ্ধতি ব্যবহার করেছি ।

console.log() ব্যবহার

আপনার ব্রাউজারে, আপনি তথ্য প্রদর্শন console.log () পদ্ধতি ব্যবহার করতে পারেন.

ব্রাউজার এ F12 press করে কনসোল, সক্রিয় এবং মেনু “কনসোল” নির্বাচন করুন।

উদাহরনঃ


<!DOCTYPE html>
<html>
<body>

<h1>My First Web Page</h1>
<p>My first paragraph.</p>

<script>
console.log(5 + 6);
</script>

</body>
</html>


 

 

ধন্যবাদ, আশা করি বিষয়টি সকলেই বুঝতে পেরেছেন 🙂

জাভাস্ক্রিপ্ট ফাংশন (JavaScript Functions)

জাভাস্ক্রিপ্ট ফাংশন (JavaScript Functions)

শেখ আবুল হাশিম

 

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

 

01.<html>

02.<head>

03.<script type=”text/javascript”>

04.function popup() {

05.alert(“Hello Webcoachbd”)

06.}

07.</script>

08.</head>

09.<body>

10.<input type=”button” onclick=”popup()” value=”popup”>

11.</body>

12.</html>

 

এখন বাটনে ক্লিক করলেই popup() ফাংশনটি কল হবে এবং এর ভিতর সেকেন্ড ব্রাকেটের মধ্যে থাকা কোডটুকু এক্সিকিউট হবে। onclick হচ্ছে ইভেন্ট।ইভেন্ট এর বিষয়ে এরপরের টিউটোরিয়ালে আলোচনা আছে।

যাইহোক ফাংশন লেখার সময় প্রথমে function এই শব্দটি এরপর ফাংশনের যেকোন নাম যেমন আমি দিয়েছি popup(). ফাংশনের নাম দেয়ার সময় আপনি ইচ্ছেমত যেকোন নাম দিতে পারেন। আপনি ইচ্ছে করলেই করতে পারেন তার মানে এই নয় যে আপনার এমনই করা উচিৎ। বরং ফাংশনের নাম দেয়ার সময় প্রাসঙ্গিক নাম দেয়া ভাল। যেমন ধরুন দুটি সংখ্যার যোগফল এর মান বের করার জন্য একটা ফাংশন লিখলেন এটার নাম হতে পারে getAddition(). জাভাস্ক্রিপ্টের কিছু সংরক্ষিত নাম আছে, এসব নাম বা শব্দগুলি ফাংশনের নাম কিংবা ভেরিয়েবলের নাম হিসেবে ব্যবহার করা যাবেনা।

ফাংশনে প্যারামিটার ব্যবহার করা

আপনি যখন ফাংশন লিখবেন তখন এখানে প্যারামিটার ব্যবহার করতে পারেন।এই প্যারামিটার প্রথম ব্রাকেটের ভিতর রাখতে হবে,এগুলি একধরনের ভেরিয়েবল।যদি কোন প্যারামিটার না থাকে তাহলে প্রথম ব্রাকেটের ভিতর কিছু থাকবেনা। যেমন popup() ফাংশনটি দেখুন এখানে কোন প্যারামিটার নেই।প্যারামিটার সহ একটি ফাংশন

01. <html>

03. <head>

05. <script type=”text/javascript”>

07. function getAddition(firstNumber,secondNumber){

09. var result;

11. result = firstNumber + secondNumber;

13. return result;

15. }

17. var myResult = getAddition(10,20);

19. alert(myResult);

21. </script>

23. </head>

25. <body>

27. </body>

29. </html>

ব্যাখ্যাঃএখানে ফাংশনটিতে দুটি প্যারামিটার আছে firstNumber এবং secondNumber.এরপর একটা ভেরিয়েবল ডিক্লেয়ার করেছি যার নাম result এবং এই ভেরিয়েবলে প্যারামিটার দুটি যোগ করেছি।সবশেষে result রিটার্ন করেছি।এটা ফাংশনের একটা গুরত্বপূর্ন বৈশিষ্ট্য যে আপনি শুধু একটা মান ফেরৎ (রিটার্ন) পাঠাতে পারেন। return স্টেটমেন্ট ব্যবহার করে এটা করা যায়।

একটা জিনিস মনে রাখতে হবে যে যখন return স্টেটমেন্ট ব্যবহার করবেন তখন এই স্টেটমেন্টের পর আর কোন কোড কাজ করবেনা।একটা ফাংশন return স্টেটমেন্ট দেখলেই সে সংশ্লিষ্ট মান টি রিটার্ন করে কোড পড়া বন্ধ করে দেয়।

যাইহোক এরপর ১৭ নম্বর লাইনে দেখুন ফাংশনটিকে কিভাবে কল করেছি।return স্টেটমেন্ট দিয়ে পাঠানো মান এভাবে একটা ভেরিয়েবল ডিক্লেয়ার করে ধরতে হয়।যেমন আমি var myResult দিয়ে করেছি।এরপর alert() ফাংশন দিয়ে আউটপুট এনেছি।যদি alert(result) দেন তাহলে হবেনা।কারন তো বললামই যে রিটার্নকৃত মান ভেরিয়েবল দিয়ে ধরতে হয়।

সবশেষে getAddition এ দুটি আর্গুমেন্ট পাঠিয়েছি ১০ এবং ২০ কারন প্যারামিটার দুটি আছে।যতগুলি প্যারামিটার আছে ফাংশনটি কল করার সময় ততগুলি আর্গুমেন্ট পাঠাতে হবে।

*ফাংশনের ভিতরে কোন প্যারামিটার বা ভেরিয়েবল ব্যবহার করলে সেই ভেরিয়েবলের প্রভাব বাইরে থাকবেনা।এমনকি একই নামের একটা ভেরিয়েবল যদি ফাংশনের বাইরে থাকে তারপরেও ভেরিয়েবল দুটি সম্পূর্ন আলাদা।

সফটওয়ার ডেভলাপমেন্ট লাইফসাইকেল . Software Development Life Cycle

সফটওয়ার ডেভলাপমেন্ট লাইফসাইকেল

রিদওয়ান বিন শামীম

 

সফটওয়ার ডেভলাপমেন্ট লাইফসাইকেল বা সংক্ষেপে SDLC হল সফটওয়ার প্রকৌশলে কাঙ্খিত পণ্য উৎপাদনের সুপরিচিত ও সুগঠিত কার্যক্রমের ধাপসমূহ।

SDLCএর কার্যক্রমঃ SDLC কাঙ্খিত পণ্য বা সফটওয়ার ডিজাইন ও ডেভেলাপের জন্য কয়েকটি ধাপ নিশ্চিত করে, SDLC ফ্রেমওয়ার্কে কয়েকটি ধাপ থাকে যেগুলো হল,

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

চাহিদা সংবদ্ধ করাঃ সফটওয়ার ডেভেলপার টিমের জন্য এটি প্রথম কাজ, ডেভেলপার টিম গ্রাহকের সাথে যত বেশি সম্ভব সমস্যা নিয়ে কথা বলে তাদের চাহিদাটা বুঝতে চান, মূলত গ্রাহক চাহিদা, সিস্টেমের চাহিদা ও ফাংশনাল চাহিদা এসব ধরনের চাহিদা থেকে থাকে। চাহিদাগুলো কয়েকটি নিয়ম মেনে সংবদ্ধ করা হয়,

• অপ্রচলিত বা বিদ্যমান সিস্টেম ও সফটওয়ার নিরীক্ষণ করে,
• ডেভেলপার ও গ্রাহকের সাক্ষাৎকার নিয়ে,
• ডাটাবেসের সাহায্য নিয়ে,
• উদ্ভূত প্রশ্নের সমাধান করে।

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

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

সফটওয়ার ডিজাইনঃ এরপর সমস্ত তথ্য ও শর্তাবলী একসাথে করে সফটওয়ারটি ডিজাইন করতে হয়। গ্রাহক চাহিদা, শর্তাবলী ও প্রয়োজনীয় তথ্য যা চাহিদা সংবদ্ধ করার সময় পাওয়া গিয়েছিল সেগুলোই এই ধাপে ইনপুট। আউটপুট দুটি ধাপে আসবে, লজিকাল ডিজাইন ও ফিজিকাল ডিজাইন। প্রকৌশলীরা কিছু মেটা ডাটা, ডাটা ডিকশনারি, লজিকাল ডায়াগ্রাম, ডাটা ফ্লো ডায়াগ্রাম এবং কিছু কেসে কিছু সিডো কোড(pseudo codes) প্রস্তুত করেন।

কোডিংঃ এই ধাপও প্রোগ্রামিং ধাপ হিসেবে ধরা হয়। সঠিকভাবে উপযুক্ত প্রোগ্রামিং ভাষায় নির্ভুলভাবে প্রোগ্রাম কোড লেখার মাধ্যমে সফটওয়ার ডিজাইনের কার্যক্রম বাস্তব রূপ লাভ করে।

নিরীক্ষণঃ একটি সমীক্ষায় দেখা গেছে, ৫০ % সফটওয়ার ডেভলাপমেন্ট নিরীক্ষণ করা হয়। সামান্য ভুলের জন্য সফটওয়ারের ক্ষতি এমনকি বাতিলও হতে পারে। ডেভলপাররা কোডিঙের সময় মডিউল টেস্টিং, প্রোগ্রাম টেস্টিং, অভ্যন্তরীণ টেস্টিং, গ্রাহক ভিত্তিক টেস্টিং ইত্যাদি নিরীক্ষণ করেন, প্রারম্ভিক পর্যায়ে ভুল ধরা পরা নির্ভরযোগ্য সফটওয়ারের জন্য দরকারি।

মৌলিকতাঃ লাইব্রেরী, ডাটাবেস ও অন্যান্য প্রোগ্রামের ক্ষেত্রে সফটওয়ারের মৌলিকতা থাকতে হবে। SDLC এর এই বৈশিষ্ট্যই বিশ্ব বাজারে এর স্বাতন্ত্র্য নিশ্চিত করবে।
প্রয়োগঃ গ্রাহকের যন্ত্রে সফটওয়ার ইন্সটল করতে হবে, ইন্সটল করার পরে কনফিগার করতে হয়, এরপর বহনযোগ্যতা, অভিযোজন ও মৌলিকতা নির্ণয় করে দেখা হয়।

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

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

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

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

ডেভলাপার একই ধরনের সফটওয়ারে পূর্বে কাজ করেছে এরকম ক্ষেত্রে ওয়াটারফল মডেল অনুসরণ করা যায় কারণ এটির সব ধরনের ডোমেইন সম্পর্কে তার ধারণা থাকে।

পুনরাবৃত্তিক মডেলঃ SDLC প্রক্রিয়ার ধাপগুলো পুনরাবৃত্তিক ভাবে চাক্রিকভাবে সম্পন্ন হয়, প্রথমে সফটওয়ারটি ক্ষুদ্র পরিসরে তৈরি করা হয়, এবং যৌক্তিক সকল পন্থা অনুসরণ করা হয়, এরপর পরবর্তী সকল চক্রে নতুন অনেক ফিচার ও মডিউলকে ডিজাইন, কোড ও টেস্ট করা হয়, তারপর সফটওয়ারে যোগ করা হয়।

প্রতি চক্রের পরে ব্যবস্থাপনা টিম ঝুঁকি ব্যবস্থাপনা ও পরবর্তী চক্রের জন্য তৈরি হতে পারে, যেহেতু প্রতিটি চক্র ছোট ছোট অনেক ভাগে বিভক্ত তাই ব্যবস্থাপনা প্রক্রিয়া অপেক্ষাকৃত সহজ, যদিও বেশি রিসোর্সের প্রয়োজন হয়।

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

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

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

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

সফটওয়ার ইঞ্জিনিয়ারিংঃ সারসংক্ষেপ (What is Software Engineering)

সফটওয়ার ইঞ্জিনিয়ারিং

সারসংক্ষেপ

রিদওয়ান বিন শামীম

 

সফটওয়ার ইঞ্জিনিয়ারিং শব্দটি দুটি শব্দ মিলে হয়েছে, সফটওয়ার ও ইঞ্জিনিয়ারিং।

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

অন্যদিকে প্রকৌশল হল সংজ্ঞায়িত ও বৈজ্ঞানিক সুত্রে ও পন্থায় পণ্যের মান বৃদ্ধি করা।

সফটওয়ার ইঞ্জিনিয়ারিং হল তেমনই একটি প্রকৌশল উপশাখা যেখানে বৈজ্ঞানিক সুত্রে,পরিকল্পনায় ও পন্থায় সফটওয়ার জাতীয় পণ্যের উন্নয়ন করা হয়। কার্যকর ও নির্ভরযোগ্য সফটওয়ার জাতীয় পণ্যের উৎপাদনই সফটওয়ার ইঞ্জিনিয়ারিংএর মূল উদ্দেশ্য।

IEEE সফটওয়ার ইঞ্জিনিয়ারিংকে যেভাবে প্রকাশ করেছে তা হল, সফটওয়ার উন্নয়ন পরিকল্পনা ও ব্যবস্থাপনার জন্য নিয়মতান্ত্রিক, পরিকল্পনাপ্রসুত কার্যপ্রণালী বা এপ্লিকেশন যা প্রকৌশল এপ্লিকেশন, এবং সফটওয়ার উন্নয়ন নিশ্চিত করে এই প্রক্রিয়া সাধনের প্রবণতাই সফটওয়ার ইঞ্জিনিয়ারিং।

Fritz Bauer নামক জার্মান কম্পিউটার প্রকৌশলী সফটওয়ার ইঞ্জিনিয়ারিংকে যেভাবে প্রকাশ করেছেন তা হল, সফটওয়ার ইঞ্জিনিয়ারিং হল একপ্রকার প্রকৌশল সংস্থাপন যেখানে বাণিজ্যিকভাবে এমন সফটওয়ার উৎপাদন নিশ্চিত করা হয় যা বাস্তব যন্ত্রকাঠামোয় নির্ভরযোগ্য এবং সফলভাবে কাজ করতে সক্ষম।

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

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

সফটওয়ার বিবর্তন আইনঃ লেম্যানের(Lehman) দেয়া সফটওয়ার বিবর্তন সূত্র আছে। লেম্যান সফটওয়ারকে তিন ভাগে ভাগ করেন,

S-type (static-type) নির্ধারিত স্পেসিফিকেসন ও সমাধান অনুসারে কাজ করে। কোডিঙের আগে স্পেসিফিকেসন ও সমাধান ঠিক করে দিতে হয়। সরল ধরনের এবং ক্ষুদ্র পরিবর্তনেও সংবেদনশীল, যেমন গাণিতিক গননা করার প্রোগ্রাম।

P-type (practical-type) এ ধরনের সফটওয়ারে নির্ধারিত প্রক্রিয়া অনুসারে কাজ করে, কয়েকটি প্রক্রিয়া ঠিক করে দেয়া থাকে। প্রারম্ভিক শর্তাবলী নির্ণীত কিন্তু ফলাফল সবসময় পুঙ্খানুপুঙ্খ নাও হতে পারে। যেমন, গেমিং সফটওয়ার।

E-type (embedded-type) বাস্তব ক্ষেত্রে প্রয়োগবান্ধব সফটওয়ার, আইন, শুল্ক ইত্যাদি ছাড়াও অন্যান্য আরও অনেক কারণে দ্রুত পরিবর্তিত হয়, যেমন, অনলাইন বাণিজ্য সফটওয়ার।

E-type (embedded-type) সফটওয়ারের বিবর্তনঃ লেম্যান E-type সফটওয়ারের বিবর্তনে আটটি আইন বা নিয়ম বর্ণনা করেছেন,
নিয়ত পরিবর্তনশীলতাঃ সময়ের সাথে এই ধরনের সফটওয়ারের পরিবর্তন হয়, না হলে এগুলো সর্বাধিক কার্যক্ষমতা ধরে রাখতে পারবে না।

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

মানের নিম্নমুখিতাঃ যেহেতু পরিবর্তনশীল প্রেক্ষাপটে কাজ করতে হচ্ছে তাই অনেক ক্ষেত্রে মানের সাথে আপোষ করতে হয় E-type সফটওয়ারের।

ফিডব্যাক সিস্টেমসঃ E-type সফটওয়ার মাল্টিলেভেল ও মাল্টিলুপ ফিডব্যাক সিস্টেম অনুসরণ করে এবং তা অনুসারে সফলভাবে পরিবর্তন বা উন্নয়ন নিশ্চিত করে।
স্ব-প্রবিধান অর্থাৎ নিজের রেগুলেসন নিয়ন্ত্রণ করাঃ E-type সফটওয়ারের বিবর্তন নিজের রেগুলেসন নিয়ন্ত্রণ করে ও পণ্যের বণ্টন ও প্রক্রিয়া স্বাভাবিকের কাছাকাছি রাখার চেষ্টা করে।

সাংগঠনিক স্থিতিঃ বিশ্বব্যপী কার্যক্রমের হার E-type সফটওয়ারের বিবর্তনের ক্ষেত্রে পণ্যের লাইফটাইমের সাথে সাথে পরিবর্তিত হয়।

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

সফটওয়ার ডেভলপমেন্ট মডেলঃ এটি সফটওয়ার ডেভলপমেন্টের প্রকৌশল মডেল হিসেবেও ধরা যায় কারণ এতে প্রকৌশলগত ধারনাও প্রয়োগ করা হয়। এতে বিভিন্ন গবেষণা ও শর্ত আরোপিত থাকে সফটওয়ার পণ্য উৎপাদনের জন্য, যেগুলো মূলত নিম্নরূপ,

• শর্ত আরোপণ
• সফটওয়ার ডিজাইন
• প্রোগ্রামিং

সফটওয়ার ডিজাইন মডেলঃ এটি সফটওয়ার ডেভলপমেন্টের একটি অংশ, এটিতে যে অংশগুলো থাকে তা হল,

• ডিজাইন
• রক্ষণাবেক্ষণ
• প্রোগ্রামিং

প্রোগ্রামিং মডেলঃ এই অংশটি প্রোগ্রামিং এর সাথে তুলনামুলকভাবে বেশি জড়িত, এতে থাকে,

• কোডিং
• টেস্টিং
• ইন্টিগ্রেশন

সফটওয়ার প্রকৌশলের প্রয়োজনীয়তাঃ সফটওয়ার প্রকৌশলের প্রয়োজনীয়তা বৃদ্ধি পেয়েছে এর উপযুক্ত পরিবেশ গ্রাহক চাহিদা পরিবর্তন ও কার্যকর ক্ষেত্রের বৃদ্ধি পাওয়ার ফলে।

বৃহৎ সফটওয়ারঃ বাড়ি তৈরির আগে তার দেয়াল তৈরি সুবিধাজনক, একই ভাবে সফটওয়ারের আকার বাড়লে তাতে বিজ্ঞানভিত্তিক প্রক্রিয়া প্রয়োগের সুযোগ বাড়ে।

কর্মপরিধিঃ বিজ্ঞানভিত্তিক প্রক্রিয়া ব্যবহার না করলে অন্য কোনও মডেলের অনুকরণে নতুন সফটওয়ার তৈরি করা যায়।

মূল্যঃ হার্ডওয়ার কোম্পানির দক্ষতা ও উৎপাদন বৃদ্ধির ফলে কম্পিউটারের দাম কমলেও সঠিক প্রক্রিয়া মেনে না চললে সফটওয়ারের মূল্য বেশিই থাকে।

গতিশীল প্রবণতাঃ ব্যবহারকারীদের কাজের পরিবেশের সাথে সফটওয়ারের ব্যবহার প্রবণতা ও পরিবর্তন নির্ভর করে, যদি সফটওয়ারের প্রচুর পরিবর্তন সাধিত হয় তবে তা পূর্বের ভার্সনের সাথে সাযুজ্য রেখেই পরিবর্তন করতে হবে, আর এক্ষেত্রেই সফটওয়ার প্রকৌশলের গুরুত্ব বেড়ে যাচ্ছে।

মান নিয়ন্ত্রণঃ মান নিয়ন্ত্রণ ভাল হলে উৎপাদন ও সেবা মানসম্মত হবে।

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

• কর্মক্ষমতা,
• পরিবর্তনযোগ্যতা ও
• রক্ষণাবেক্ষণ

সঠিক প্রকৌশলগত ও আদর্শ সফটওয়ারে নিচের বৈশিষ্ট্যগুলো থাকা উচিৎ,

কর্মক্ষমতাঃ কাজের ক্ষেত্রে সফটওয়ারটি কতটুকু ভাল তা নির্দেশ করে, এক্ষেত্রে যে বৈশিষ্ট্যগুলো থাকে তা হল,

• বাজেট,
• ব্যবহারযোগ্যতা,
• দক্ষতা,
• নির্ভুলতা,
• ফাংশনালিটি,
• নির্ভরতা,
• প্রতিরক্ষা,
• নিরাপত্তা

পরিবর্তনযোগ্যতাঃ সফটওয়ারটি এক প্লাটফর্ম থেকে অন্য প্লাটফর্মে চালানোর ক্ষেত্রে এই বিষয়টি কাজে লাগে। এর অন্তর্গত বিষয় হল,

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

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