আর্টিফিসিয়াল ইন্টিলিজেন্স

“আর্টিফিশিয়াল ইন্টিলিজেন্স” অথবা “কৃত্রিম বুদ্ধিমত্তা” ইদানিং এই ব্যাপারে প্রচুর লেখালেখি হচ্ছে। এই লেখালেখির অধিকাংশই হচ্ছে “ইন্টিলিজেন্ট মেশিন” এর কাছে আমরা কিভাবে হেরে যাব অথবা “ইন্টিলিজেন্ট মেশিন” আমাদের তুলনায় অনেক বুদ্ধিমান হবে এতে আমরা অবসলিট (বিলুপ্ত) হয়ে যাব ইত্যাদি।

“ইন্টিলিজেন্ট মেশিন” / “আর্টিফিশিয়াল ইন্টিলিজেন্স” বলতে আমরা কি বুঝি? অধিকাংশ মানুষের কাছে এটি হচ্ছে রোবট জাতীয় কিছু আবার অনেক কাছে এটি হচ্ছে মানুষের মত চিন্তা করতে সক্ষম কোন মেশিন অথবা প্রোগ্রাম আবার অনেকের কাছে “মানবীয় অনুভূতি” সম্পন্য মেশিন অথবা প্রোগ্রাম।

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

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

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

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

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

আমাদের জীবন সহজ করতে কোন আনপ্রেডিক্টেবল ইন্টেলিজেন্ট মেশিনের দরকার নেই আমাদের দরকার প্রেডিক্টেবল ইন্টেলিজেন্ট মেশিন। আনপ্রেডিক্টেবল ইন্টেলিজেন্ট মেশিন আমাদের জীবন সহজ করতে পারবে না কিন্তু প্রেডিক্টেবল ইন্টেলিজেন্ট মেশিন তা পারবে।

PPTP VPN Installation

Automatic: 

  1. Copy script using wget https://raw.githubusercontent.com/saaiful/PPTP-VPN/master/install.sh
  2. Run using sudo bash install.sh
  3. Script will ask for username and password for VPN, set them correctly
  4. Connect the VPN and Enjoy 🙂

https://github.com/saaiful/PPTP-VPN

Manual:

Install PPTP using the following command:

sudo apt-get install pptpd

Edit PPTP Configuration Using the following command:

sudo nano /etc/pptpd.conf

add the following lines

localip 10.0.0.1
remoteip 10.0.0.100-200

Edit PPTP Option to add DNS Server using the following command:

sudo nano /etc/ppp/pptpd-options

Add the following lines to add google public DNS

ms-dns 8.8.8.8
ms-dns 8.8.4.4

Add VPN User by Editing ‘chap-secrets’ using the following command:

sudo nano/etc/ppp/chap-secrets

Formate: username * password *

[username] [service] [password] [ip]

Example:

saiful * 12345678 *

Restart PPTP Service using the following command:

service pptpd restart

You need to enable IP forwarding on your PPTP server in order to make you VPN work (This will allow you to forward packets between public IP and private IPs that you setup with PPTP).Enable IP forwarding by using the following command

sudo nano /etc/sysctl.conf

Set`net.ipv4.ip_forward = 1` in the config file. Run the following command to make changes active

sudo sysctl -p

Apply NAT rule for “iptables” using the following commands:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE && iptables-save
iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
iptables -I INPUT -s 10.0.0.0/8 -i ppp0 -j ACCEPT
iptables --append FORWARD --in-interface eth0 -j ACCEPT

Now all you need is testing your VPN using any PPTP VPN Client.

সফটওয়্যার ডিজাইন প্যাটার্ন-১

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

এই পোস্টে মূলত পিএইচপি তে বহুল ব্যবহৃত ডিজাইন প্যাটার্ন গুলো নিয়ে আলোচনা করা হয়েচে।

ফ্যাক্টরি প্যাটার্ন

ফ্যাক্টরি প্যাটার্ন একটি বহুল ব্যবহৃত ডিজাইন প্যাটার্ন। এই প্যাটার্নে মূলত একটি ক্লাস ব্যবহারকারীর প্রয়োজনীয় অবজেক্ট তৈরি করে দেয়। নিচের ফ্যাক্টরি প্যাটার্নের একটি উদাহরণ দেওয়া হলঃ

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

factory_method_uml_class_diagram

ফ্যাক্টরি প্যাটার্ন এর আরেকটি পরিমার্জিত রুপ হচ্ছে ফাস্যাড প্যাটার্ন।

সিঙ্গেলটোন প্যাটার্ন

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

Singleton Pattern
Fig: Singleton Pattern

সাধারণত ওয়েব অপ্লিকেশন ডিজাইন করার সময় এই ডিজাইন প্যাটার্ন ব্যবহার যুকিযুক্ত মনে হয়। নিচের সিঙ্গেলটোন প্যাটার্নের একটি উদাহরণ দেওয়া হলঃ

উপরের কোডে সিঙ্গেলটোন প্যাটার্ন ইমপ্লিমেন্ট করে দেখানো হয়েছে। স্টাটিক getInstance() মেথড দিয়ে Singleton ক্লাসের ইন্সট্যান্স তৈরি করা হয়েছে। Singleton ক্লাসে setName(), showName() নামের দুইটি মেথড আছে। উপরের কোডের শেষের অংশে SingletonChild নামে একটি ক্লাস লেখা হয়েছে যা Singleton ক্লাসকে এক্সটেন্ড করে। উদাহরণের কোডে দেখতে পাবেন $singleton এ Singleton এর ইন্সট্যান্স রাখা হয়েছে। এরপর setName() মেথড দিয়ে name অবজেক্টে 'Saiful' সেট করা হয়েছে এবং showName() মেথড দিয়ে name অবজেক্টের ভ্যালু দেখানো হয়েছে। এরপর $child এ SingletonChild  ইন্সট্যান্স কল করা হয়েছে, যা মূলত পূর্বে তৈরিকৃত Singleton ক্লাসের ইন্সট্যান্স রিটার্ন করেছে, যে কারনে ( $child->showName();setName() মেথড কল করায় পুর্বে সংরক্ষিত name অবজেক্টের ভ্যালু দেখিয়েছে, অর্থাৎ নতুন ইন্সট্যান্স তৈরি হয়ন

…চলবে

 

 

MySQL JOIN

MySQL এ দুই বা ততোধিক টেবিলের রো একসাথে যুক্ত করতে JOIN ব্যবহার করা হয়। MySQL এ JOIN মোট ৪ প্রকারের।

INNER JOIN

INNER JOIN কীওয়ার্ড দিয়ে দুই বা ততোধিক টেবিলের রো একসাথে যুক্ত করতে হলে বাম ও ডান কলামের মান সমান হতে হয়।

SQL INNER JOIN সিনট্যাক্স

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;

অথবা,

SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;

উদাহরনঃ

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;

LEFT JOIN

LEFT JOIN কীওয়ার্ড দিয়ে দুই বা ততোধিক টেবিলের রো একসাথে যুক্ত করতে হলে বাম কলামের রো এর ডাটার সাথে ডান কলামের রো এর ডাটা তুলনা করা হয় । যেসব স্থানে উভয় কলামের রো এর ডাটা সমান নয় সেসকল ক্ষেত্রে শুধুমাত্র বাম কলামের ডাটা সিলেক্ট করা হয় , আর যেসব স্থানে উভয় কলামের রো এর ডাটা সমান সে ক্ষেত্রে উভয় কলামের রো এর ডাটা সিলেক্ট করা হয়।

SQL LEFT JOIN সিনট্যাক্স


SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;

অথবা,

SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;

উদাহরনঃ

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;

RIGHT JOIN

RIGHT JOIN কীওয়ার্ড দিয়ে দুই বা ততোধিক টেবিলের রো একসাথে যুক্ত করতে হলে বাম কলামের রো এর ডাটার সাথে ডান কলামের রো এর ডাটা তুলনা করা হয় । যেসব স্থানে উভয় কলামের রো এর ডাটা সমান নয় সেসকল ক্ষেত্রে শুধুমাত্র ডান কলামের ডাটা সিলেক্ট করা হয় , আর যেসব স্থানে উভয় কলামের রো এর ডাটা সমান সে ক্ষেত্রে উভয় কলামের রো এর ডাটা সিলেক্ট করা হয়। এটিLEFT JOIN এর বিপরীত।

SQL RIGHT JOIN সিনট্যাক্স

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;

অথবা,

SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;

উদাহরনঃ

SELECT Orders.OrderID, Employees.FirstName
FROM Orders
RIGHT JOIN Employees
ON Orders.EmployeeID=Employees.EmployeeID
ORDER BY Orders.OrderID;

FULL JOIN

FULL JOIN মুলত LEFT JOIN এবং RIGHT JOIN এর ফলাফল একসাথে যুক্ত করে প্রকাশ করে।

SQL FULL OUTER JOIN সিনট্যাক্স

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;

উদাহরনঃ

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;

LAMP সার্ভার যেভাবে সেটাপ করবেন

এ্যপাচি ওয়েব সার্ভার ইন্সটলেশনঃ

sudo apt-get update কমান্ড দিয়ে অপারেটিং সিস্টেমের প্যাকেজ রিপোজিটরি আপডেট / হালনাগাদ করে নিন। নিচের কমান্ড দিয়ে এ্যপাচি ওয়েব সার্ভার ইন্সটল করুন।

sudo apt-get install apache2

MySQL ইন্সটলেশনঃ

MySQL সার্ভার ইন্সটল করার জন্য নিচের কমান্ড দিন। নিচের কমান্ডে MySQL সার্ভার এর সাথে পিএইচপি এর MySQL এক্সটেনশন এবং এ্যপাচির auth-mysql মড ইন্সটল করা হয়েছে।

sudo apt-get install mysql-server libapache2-mod-auth-mysql php5-mysql

PHP ইন্সটলেশনঃ

PHP , PHP এর Mcrypt, PHP এর Curl এক্সটেনশন এবং এ্যপাচির php মড ইন্সটল করতে নিচের কমান্ড দিন।

sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt php5-curl

ইন্সটলেশন শেষে সার্ভারের রুট ডিরেক্টরিতে (/var/www) একটি পিএইচপি ফাইল তৈরি করুন এবং এর ভেতরে নিচের কোড লিখুন এবং ব্রাউজার থেকে ফাইলটি এক্সেস করুন।

<?php
phpinfo();
?>