01732487334
01731582032
Jul 26
Jul 25
রিদওয়ান বিন শামীম
টিসিপি/আইপি প্রটোকল স্যুইটের সরলতম ট্রান্সপোর্ট লেয়ার কমিউনিকেশন প্রটোকল হল ইউজার ডায়াগ্রাম প্রটোকল । এটিতে কম সংখ্যক যোগাযোগ কৌশল প্রয়োগ করা হয়। ইউজার ডায়াগ্রাম প্রটোকলকে অনির্ভরযোগ্য যোগাযোগ প্রটোকল বলা হলেও এটি আইপি সার্ভিস ব্যবহার করে যেটিতে সেরা সরবরাহ কৌশল ব্যবহৃত হয়।
ইউজার ডায়াগ্রাম প্রটোকলে ডাটা প্যাকেট গ্রহণকারী কোনোরূপ প্রাপ্তি সংবাদ পাঠায় না , ডাটা প্যাকেট প্রেরণকারীও কোনও ধরণের প্রাপ্তি সংবাদ আশা করে না। এই বিষয়টিই এই প্রক্রিয়াকে একই সাথে সহজ কিন্তু অনির্ভরযোগ্য করেছে।
ইউজার ডায়াগ্রাম প্রটোকলের রিকোয়ারমেন্টঃ একটি প্রশ্ন উঠতে পারে, অনির্ভরযোগ্য প্রটোকল ব্যবহার করে ডাটা ট্রান্সফারের দরকার কি? আমরা ইউজার ডায়াগ্রাম প্রটোকল তখন ব্যবহার করি যেসব ক্ষেত্রে একনলেজমেন্ট প্যাকেট মূল ডাটার সাথে প্রচুর পরিমান ব্যান্ডউইথ শেয়ার করে। যেমন, ভিডিও স্ট্রিমিংএর সময় এর ব্যবহারকারীর দিকে হাজার হাজার ডাটা প্যাকেটকে ফরোয়ার্ড করা হয়। এসব ডাটা প্যাকেটের সবগুলোর জন্য একনলেজমেন্ট অর্থাৎ প্রাপ্তি সংবাদ ব্যবস্থা করা কঠিন ও তা প্রচুর ব্যান্ডউইথ অপচয় করবে। অন্তর্নিহিত আইপি প্রটোকলের সেরা সরবরাহ কৌশল ডাটা সরবরাহের সর্বোচ্চ সম্ভবনা নিশ্চিত করে। এমনকি ভিডিও স্ট্রিমিংএর সময় অল্প কিছু ডাটা প্যাকেট হারিয়ে গেলেও তা আর তেমন প্রভাব রাখবে না। ভিডিও বা ভয়েজ ট্র্যাফিকের সময় হারানো ডাটা প্যাকেট তেমন প্রভাব রাখে না।
ইউজার ডায়াগ্রাম প্রটোকলের হিডার(header) চারটি মূল প্যারামিটার ব্যবহার করে,
যেসব এপ্লিকেশনে ডাটা ট্রান্সফারের জন্য ইউজার ডায়াগ্রাম প্রটোকল ব্যবহৃত হয়,
Jul 25
রিদওয়ান বিন শামীম
ইউনিক্স অপারেটিং সিস্টেম ও এর বেসিক কম্যান্ড সম্পর্কে আপনাদের নিশ্চয়ই কিছু ধারণা হয়েছে, এই টিউটোরিয়ালে এর এমন কিছু বেসিক ইউটিলিটি নিয়ে কাজ করা হবে যা আমাদের দৈনন্দিন জীবনে অনেক কাজে লাগে।
ইউনিক্স সিস্টেমে ফাইল প্রিন্ট করার আগে আমরা মার্জিন, কোনও লাইন হাইলাইট করার থাকলে তা করা ইত্যাদি সমন্বয় করে রিফর্ম করে নিব। বেশিরভাগ ফাইল কোনও রিফরমিং ছাড়াই প্রিন্টআউট করা সম্ভব তবে তা দেখতে অতটা সুন্দর নাও হতে পারে।
ইউনিক্সের অনেক ভার্সন nroff এবং troff দুটি শক্তিশালী টেক্সট ফরম্যাটার ব্যবহার করতে দেয়, আমরা এখানে এগুলো সম্পর্কে আলোচনা না করলেও ইন্টারনেটে এদের নিয়ে অনেক টিউটোরিয়াল পাওয়া যায়, সেগুলো অনেক হেল্পফুলএসব ইউটিলিটির জন্য।
pr কম্যান্ড টার্মিনাল স্ক্রিন বা প্রিন্টারের জন্য ছোটখাটো ফরম্যাটিং করে থাকে, যেমন যদি কোনও ফাইলে নামের লম্বা লিস্ট থেকে থাকে তাহলে আমরা স্ক্রিনে সেগুলোকে দুই বা ততোধিক কলামে ভাগ করে দিতে পারি।
pr কম্যান্ডের সিনট্যাক্স নিচে দেয়া হল,
pr option(s) filename(s)
pr কম্যান্ড স্ক্রিনে বা প্রিন্টেড কপিতে পরিবর্তন ও ফরম্যাটিং করে থাকে, এটি মূল ফাইলে কোনও পরিবর্তন সাধন করে না।
কিছু pr কম্যান্ড অপশন নিচের ছকে দেখানো হল।
| অপশন | বর্ণনা |
| -k | আউটপুটে k কলাম গঠন করে |
| -d | আউটপুটে ডবল স্পেস(সবpr ভার্সনে নয়) |
| -h “header” | পরবর্তী আইটেমকে রিপোর্টার হিডার হিসেবে নেয় |
| -t | টপ ও বটম মার্জিন ও হিডার বাদ দেয় |
| -l PAGE_LENGTH | পেজলেন্থ নির্ধারণ করে PAGE_LENGTH (66) lines. টেক্সটের ডিফল্ট লাইন নাম্বার ৫৬ |
| -o MARGIN | মার্জিন স্পেস দ্বারা প্রতি লাইনকে অফসেট করানো। |
| -w PAGE_WIDTH | পেজের উইডথ নির্ধারণ করে PAGE_WIDTH (72) characters মাল্টিপল টেক্সট কলাম আউটপুটের জন্য |
উদাহরণস্বরূপ, food নামের একটি স্যাম্পল ফাইলের জন্য,
$cat food
Sweet Tooth
Bangkok Wok
Mandalay
Afghani Cuisine
Isle of Java
Big Apple Deli
Sushi and Sashimi
Tio Pepe's Peppers
........
$
Restaurants হিডারে pr কম্যান্ড ব্যবহার করে দুই কলামে রিপোর্ট লিখলে,
$pr -2 -h "Restaurants" food Nov 7 9:58 1997 Restaurants Page 1
Sweet Tooth Isle of Java Bangkok Wok Big Apple Deli Mandalay Sushi and Sashimi Afghani Cuisine Tio Pepe's Peppers ........ $
lp বা lpr কমান্ড কোনও ফাইল স্ক্রিনের পরিবর্তে কাগজে প্রিন্টের জন্য ব্যবহৃত হয়। ডিফল্ট প্রিন্টারে কোনও নির্দিষ্ট ফাইল প্রিন্ট করার জন্য lp বা lpr কমান্ড ব্যবহার করতে হয় যেমন food নামের স্যাম্পল ফাইলের জন্য
$lp food request id is laserp-525 (1 file) $
lpstat কম্যান্ড নির্দেশ করে প্রিন্টারে কোন কোন ডাটা সারিবদ্ধ আছে যেমন রিকুয়েস্ট আইডি, ওউনার, ফাইল সাইজ এসব। নিজের আউটপুট রিকোয়েস্ট ছাড়া অন্য সব রিকোয়েস্ট দেখতে lpstat –o কম্যান্ড ব্যবহার করা যায়।
$lpstat -o laserp-573 john 128865 Nov 7 11:27 on laserp laserp-574 grace 82744 Nov 7 11:28 laserp-575 john 23347 Nov 7 11:35 $
lpq, lpstat –o থেকে একটু ভিন্ন ধরণের তথ্য দেয়,
$lpq laserp is ready and printing Rank Owner Job Files Total Size active john 573 report.ps 128865 bytes 1st grace 574 ch03.ps ch04.ps 82744 bytes 2nd john 575 standard input 23347 bytes $
এখানে প্রথম লাইন প্রিন্টার স্ট্যাটাস বুঝায়, প্রিন্টার অকেজো বা কাগজ না থাকলে প্রথম লাইনে অন্য ম্যাসেজ আসবে।
cancel কম্যান্ড lp কম্যান্ড থেকে প্রিন্টিং রিকোয়েস্ট বাদ দেয়, lprm lpr রিকোয়েস্ট বাদ দেয়।
$cancel laserp-575 request "laserp-575" cancelled $
প্রিন্ট হচ্ছে এমন রিকোয়েস্ট বাতিল করতে শুধু নিচের কোড প্রবেশ করাতে হবে,
$cancel laserp request "laserp-573" cancelled $
Lprm কম্যান্ড চলমান রিকোয়েস্ট বাতিলের জন্য প্রয়োগ করা হয়,
$lprm 575 dfA575diamond dequeued cfA575diamond dequeued $
ইমেইল প্রেরণের সিনট্যাক্স হল,
$mail[-s subject][-c cc-addr][-b bcc-addr] to-addr
| অপশন | বর্ণনা |
| -s | কম্যান্ড লাইনে বিষয় নির্ধারণ |
| -c | ইউজার লিস্ট কার্বন কপি করা। কমা দ্বারা আলাদা করা তালিকা হতে হবে |
| -b | লিস্টে ব্লাইন্ড কার্বন কপি প্রেরণ করা। কমা দ্বারা আলাদা করা তালিকা হতে হবে |
যেমন, admin@yahoo.com তে টেস্ট ম্যাসেজ পাঠাতে কোড,
$mail-s"Test Message" admin@yahoo.com
লাইনের শুরুতে “control-D” ব্যবহার করে ম্যাসেজ লিখতে হবে, এটি বন্ধ করতে শুধু dot (.) নিচের মত করে লিখতে হবে,
Hi, This is a test . Cc:
নিচের কোড ব্যবহার করে সম্পূর্ণ ফাইল প্রেরণ করা যায়,
$mail-s"Report 05/06/07" admin@yahoo.com< demo.txt
ইনকামিং মেইল চেক করতে ইউনিক্স সিস্টেমে নিচের কোড ব্যবহার করতে হয়,
$mail no email
Jul 25
রিদওয়ান বিন শামীম
নড জেএস একক থ্রেড এপ্লিকেশন কিন্তু এটি ইভেন্ট ও কলব্যাকের সমন্বয়ের ধারনায় সমর্থন করে। যেহেতু নড জেএসের প্রতিটি এপিআই অসমন্বিত ও একক থ্রেডের, তাই এরা ফাংশন কল ব্যবহার করে সমন্বয় সাধনের জন্য। নড অবজারভার প্যাটার্ন ব্যবহার করে। নড থ্রেড ইভেন্ট লুপ রাখে, যখন কোনও টাস্ক সম্পন্ন হয় এটি সংশ্লিষ্ট ইভেন্টকে বাতিল করে দেয় যা কিনা ইভেন্ট লিসনার ফাংশনকে টাস্ক সম্পাদনের সিগন্যাল পাঠায়।
নড জেএস প্রচুর ইভেন্ট ব্যবহার করে আর এজন্যই এজাতীয় অন্যান্য প্রযুক্তির চেয়ে এটি অনেক বেশি দ্রুত। নড এর সার্ভার শুরু করার সাথে সাথে এর চলকও শুরু হয়ে যায়, ফাংশন ঘোষণা করে এবং ইভেন্ট সম্পন্ন হওয়ার জন্য অপেক্ষা করে।
ইভেন্টভিত্তিক এপ্লিকেশনে একটি মেইন লুপ থাকে যা ইভেন্টের সন্ধান করে, পাওয়া গেলে তাকে কলব্যাক ফাংশনের সাথে সমন্বয় করিয়ে দেয়।

ইভেন্টকে কলব্যাকের সমতুল্য মনে হতে পারে, মূলত পার্থক্য হল, অসমন্বিত ফাংশনের ফলাফল ফেরত আসলে কলব্যাক ফাংশন কাজ করে, আর ইভেন্ট অবজারভার প্যাটার্নে কাজ করে। যেসব ফাংশন ইভেন্টকে শোনে তারা অবজারভাররূপে কাজ করে। কোনও ইভেন্ট বাদ পরলে তার লিসনার ফাংশন সম্পাদন শুরু করে।
নড জেএসের অনেকগুলি বিল্ট ইন ইভেন্ট আছে যা events মডিউলের মাধ্যমে পাওয়া যায় এবং EventEmitter ক্লাস ইভেন্ট ও ইভেন্ট লিসনারের মধ্যে সমন্বয় সাধন করে।
// Import events module
var events = require('events');
// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();
নিচের সিনট্যাক্স ইভেন্ট ও ইভেন্ট হ্যান্ডলারের মধ্যে সমন্বয় সাধন করে,
// Bind event and even handler as follows
eventEmitter.on('eventName', eventHandler);
প্রোগ্রামিঙের মাধ্যমে কোনও ইভেন্ট বাদ দিতে,
// Fire an event
eventEmitter.emit('eventName');
উদাহরণ,
main.js নামের জেএস ফাইল তৈরি করি যাতে নিচের কোড থাকবে,
// Import events module
var events = require('events');
// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();
// Create an event handler as follows
var connectHandler = function connected() {
console.log('connection succesful.');
// Fire the data_received event
eventEmitter.emit('data_received');
}
// Bind the connection event with the handler
eventEmitter.on('connection', connectHandler);
// Bind the data_received event with the anonymous function
eventEmitter.on('data_received', function(){
console.log('data received succesfully.');
});
// Fire the connection event
eventEmitter.emit('connection');
console.log("Program Ended.");
প্রোগ্রামটি রান করিয়ে আউটপুট পাব,
$ mnode main.js
এটি যে ফলাফল দেখাবে,
connection succesful. data received succesfully. Program Ended.
যেভাবে নড এপ্লিকেশন কাজ করেঃ অসমন্বিত ফাংশন শেষ প্যারামিটাররূপে কলব্যাককে গ্রহণ করে, কলব্যাক এররকে প্রথম প্যারামিটাররূপে গ্রহণ করে। পূর্বের উদাহরণের মাধ্যমে আবার দেখা যাক, input.txt নামে একটি ফাইল তৈরি করি, যাতে নিচের কোড থাকবে।
Tutorials Point is giving self learning content to teach the world in simple and easy way!!!!!
main.js নামের ফাইল তৈরি করি যাতে নিচের কোড থাকবে।
var fs = require("fs");
fs.readFile('input.txt', function (err, data) {
if (err){
console.log(err.stack);
return;
}
console.log(data.toString());
});
console.log("Program Ended");
এখানে fs.readFile() অসমন্বিত ফাংশন যার কাজ হল ফাইল পড়া। এক্ষেত্রে ভুল হলে err অবজেক্ট দ্বারা সেটি readFile এর মাধ্যমে কলব্যাক ফাংশনে যাবে।
Program Ended Tutorials Point is giving self learning content to teach the world in simple and easy way!!!!!
Jul 25
রিদওয়ান বিন শামীম
নড জেএসের মাধ্যমে ‘হ্যালো ওয়ার্ল্ড’ তৈরির আগে নড জেএসের এপ্লিকেশনের অংশগুলো দেখে নেয়া যাক, এর তিনটি খুব গুরুত্বপূর্ণ অংশ আছে,
আমরা require ডিরেকটিভ ব্যবহার করব এইচটিটিপি মডিউল লোড করতে, আর রিটার্নড এইচটিটিপি ইন্সটেন্সকে এইচটিটিপি ভেরিয়েবলে নিচের মত করে স্টোর করব,
var http = require("http");
পরবর্তী ধাপে আমরা তৈরি করা এইচটিটিপি ইন্সটেন্স ব্যবহার করি ও http.createServer() তে কল করা হয় সার্ভার ইনটেন্স তৈরি করতে। এরপরlisten মেথড ব্যবহার করে আমরা একে port 8081এর সাথে সংযুক্ত করি। একটি ফাংশনকে প্যারামিটার রিকোয়েস্ট ও রেসপন্সসহ পাস করানো হয়। নিচের ব্যবহারিক প্রয়োগ ‘হ্যালো ওয়ার্ল্ড’ ফলাফল দেখাবে।
http.createServer(function (request, response) {
// Send the HTTP header
// HTTP Status: 200 : OK
// Content Type: text/plain
response.writeHead(200, {'Content-Type': 'text/plain'});
// Send the response body as "Hello World"
response.end('Hello World\n');
}).listen(8081);
// Console will print the message
console.log('Server running at http://127.0.0.1:8081/');
উপরের কোড এমন এইচটিটিপি সার্ভার তৈরির জন্য যথেষ্ট যা লোকাল মেশিনের 8081 portএর সাথে সমন্বয় সাধন করে।
main.js ফাইলে পূর্বে উল্লেখিত দুটি ধাপের সমন্বয় করে নিচের নত করে এইচটিটিপি সার্ভার চালু করতে হয়,
var http = require("http");
http.createServer(function (request, response) {
// Send the HTTP header
// HTTP Status: 200 : OK
// Content Type: text/plain
response.writeHead(200, {'Content-Type': 'text/plain'});
// Send the response body as "Hello World"
response.end('Hello World\n');
}).listen(8081);
// Console will print the message
console.log('Server running at http://127.0.0.1:8081/');
এখন সার্ভার চালুর জন্য main.jsকে সম্পাদন করতে হয় নিচের মত করে,
$ node main.js
আউটপুট ভেরিফাই করলে দেখব, সার্ভার চালু হয়ে গেছে।
Server running at http://127.0.0.1:8081/
যেকোনো ব্রাউজারে http://127.0.0.1:8081/ ওপেন করে রেজাল্ট দেখব, ‘হ্যালো ওয়ার্ল্ড’ ।

অভিনন্দন! আমাদের প্রথম এইচটিটিপি সার্ভার তৈরি ও চালু হল যা port 8081 এর সকল এইচটিটিপি রিকোয়েস্টের সাড়া দেয়।
Jul 25
রিদওয়ান বিন শামীম
নড প্যাকেজ ম্যানেজার বা এনপিএম দুটি ফাংশনালিটির প্রবর্তন করে,
এনপিএম v0.6.3 এর পরবর্তী সংস্করণগুলোতে নড জেএস ইন্সটলেশন প্যাকেজের সাথে বাণ্ডিল আকারে আসে। ভেরিফাই করার জন্য কনসোল ওপেন করে নিচের কম্যান্ড লিখে দেখতে পারি,
$ npm --version 2.7.1
যদি এনপিএমের পুরনো সংস্করণ ব্যবহার করে থাকি তাহলে এটি আপডেট করা অনেক সহজ হবে, নিচের কম্যান্ড ব্যবহার করে আমরা এটি করতে পারি,
$ sudo npm install npm -g /usr/bin/npm -> /usr/lib/node_modules/npm/bin/npm-cli.js npm@2.7.1 /usr/lib/node_modules/npm
এজন্য একটি সহজ সিনট্যাক্স আমরা ব্যবহার করতে পারি,
$ npm install <Module Name>
যেমন, নিচের কম্যান্ড express নামের একটি পরিচিত নড জেএস ওয়েব ফ্রেমওয়ার্ক মডিউল ইন্সটলের জন্য ব্যবহৃত হতে পারে,
$ npm install express
এখন আমরা জেএস ফাইলে এই মডিউল ব্যবহার করতে পারব,
var express = require('express');
বাই ডিফল্ট এনপিএম যেকোনো ডিপেন্ডেন্সিকে লোকাল মোডে ইন্সটল করে। এখানে লোকাল মোড বলতে বোঝায় node_modules ডিরেক্টরিতে প্যাকেজ ইন্সটলেশন যা কিনা নড জেএস এপ্লিকেশন যে ফোল্ডারে আছে সেখানে বিদ্যমান। লোকাল মোডের প্যাকেজগুলো require() মেথডে প্রবেশযোগ্য। যেমন, এক্সপ্রেস মডিউল ইন্সটল করার সময় এটি কারেন্ট ডিরেক্টরিতে node_modules ডিরেক্টরি তৈরি করেছে।
$ ls -l total 0 drwxr-xr-x 3 root root 20 Mar 17 02:23 node_modules
অন্যভাবে, লোকালভাবে ইন্সটলড মডিউলকে আমরা npm ls কম্যান্ড ব্যবহার করে তালিকাবদ্ধ করতে পারি,
গ্লোবালভাবে ইন্সটলড প্যাকেজ বা ডিপেন্ডেন্সি সিস্টেম ডিরেক্টরিতে সংরক্ষিত থাকে। এসব ডিপেন্ডেন্সি যেকোনো নড জেএসের সিএলআই বা কম্যান্ড লাইন ইন্টারফেস ফাংশনে ব্যবহৃত হতে পারে কিন্তু require()ব্যবহার করে নড এপ্লিকেশনে সরাসরি ইমপোর্ট করা যায় না। গ্লোবাল ইন্সটলেশন ব্যবহার করে এক্সপ্রেস মডিউল ইন্সটল করা যাক,
$ npm install express -g
এটি একই ফলাফল দেবে কিন্তু মডিউল গ্লোবালি ইন্সটলড হবে। এখানে প্রথম লাইন মডিউলের ভার্সন ও ইন্সটলের লোকেশন নির্দেশ করবে।
express@4.12.2 /usr/lib/node_modules/express ├── merge-descriptors@1.0.0 ├── utils-merge@1.0.0 ├── cookie-signature@1.0.6 ├── methods@1.1.1 ├── fresh@0.2.4 ├── cookie@0.1.2 ├── escape-html@1.0.1 ├── range-parser@1.0.2 ├── content-type@1.0.1 ├── finalhandler@0.3.3 ├── vary@1.0.0 ├── parseurl@1.3.0 ├── content-disposition@0.5.0 ├── path-to-regexp@0.1.3 ├── depd@1.0.0 ├── qs@2.3.3 ├── on-finished@2.2.0 (ee-first@1.1.0) ├── etag@1.5.1 (crc@3.2.1) ├── debug@2.1.3 (ms@0.7.0) ├── proxy-addr@1.0.7 (forwarded@0.1.0, ipaddr.js@0.1.9) ├── send@0.12.1 (destroy@1.0.3, ms@0.7.0, mime@1.3.4) ├── serve-static@1.9.2 (send@0.12.2) ├── accepts@1.2.5 (negotiator@0.5.1, mime-types@2.0.10) └── type-is@1.6.1 (media-typer@0.3.0, mime-types@2.0.10)
গ্লোবালি ইন্সটলড সব মডিউল চেক করে দেখতে,
$ npm ls -g
package.jsonব্যবহারঃ package.json যেকোনো নড এপ্লিকেশন বা মডিউলের রুট ডিরেক্টরিতে থাকে এবং প্যাকেজের বৈশিষ্ট্য বিবৃত করে। node_modules/express/তে অবস্থিত এক্সপ্রেস প্যাকেজের package.json খুলে আমরা পাই,
{
"name": "express",
"description": "Fast, unopinionated, minimalist web framework",
"version": "4.11.2",
"author": {
"name": "TJ Holowaychuk",
"email": "tj@vision-media.ca"
},
"contributors": [
{
"name": "Aaron Heckmann",
"email": "aaron.heckmann+github@gmail.com"
},
{
"name": "Ciaran Jessup",
"email": "ciaranj@gmail.com"
},
{
"name": "Douglas Christopher Wilson",
"email": "doug@somethingdoug.com"
},
{
"name": "Guillermo Rauch",
"email": "rauchg@gmail.com"
},
{
"name": "Jonathan Ong",
"email": "me@jongleberry.com"
},
{
"name": "Roman Shtylman",
"email": "shtylman+expressjs@gmail.com"
},
{
"name": "Young Jae Sim",
"email": "hanul@hanul.me"
}
],
"license": "MIT",
"repository": {
"type": "git",
"url": "https://github.com/strongloop/express"
},
"homepage": "http://expressjs.com/",
"keywords": [
"express",
"framework",
"sinatra",
"web",
"rest",
"restful",
"router",
"app",
"api"
],
"dependencies": {
"accepts": "~1.2.3",
"content-disposition": "0.5.0",
"cookie-signature": "1.0.5",
"debug": "~2.1.1",
"depd": "~1.0.0",
"escape-html": "1.0.1",
"etag": "~1.5.1",
"finalhandler": "0.3.3",
"fresh": "0.2.4",
"media-typer": "0.3.0",
"methods": "~1.1.1",
"on-finished": "~2.2.0",
"parseurl": "~1.3.0",
"path-to-regexp": "0.1.3",
"proxy-addr": "~1.0.6",
"qs": "2.3.3",
"range-parser": "~1.0.2",
"send": "0.11.1",
"serve-static": "~1.8.1",
"type-is": "~1.5.6",
"vary": "~1.0.0",
"cookie": "0.1.2",
"merge-descriptors": "0.0.2",
"utils-merge": "1.0.0"
},
"devDependencies": {
"after": "0.8.1",
"ejs": "2.1.4",
"istanbul": "0.3.5",
"marked": "0.3.3",
"mocha": "~2.1.0",
"should": "~4.6.2",
"supertest": "~0.15.0",
"hjs": "~0.0.6",
"body-parser": "~1.11.0",
"connect-redis": "~2.2.0",
"cookie-parser": "~1.3.3",
"express-session": "~1.10.2",
"jade": "~1.9.1",
"method-override": "~2.3.1",
"morgan": "~1.5.1",
"multiparty": "~4.1.1",
"vhost": "~3.0.0"
},
"engines": {
"node": ">= 0.10.0"
},
"files": [
"LICENSE",
"History.md",
"Readme.md",
"index.js",
"lib/"
],
"scripts": {
"test": "mocha --require test/support/env --reporter spec --bail --check-leaks test/ test/acceptance/",
"test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/",
"test-tap": "mocha --require test/support/env --reporter tap --check-leaks test/ test/acceptance/",
"test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require test/support/env --reporter spec --check-leaks test/ test/acceptance/"
},
"gitHead": "63ab25579bda70b4927a179b580a9c580b6c7ada",
"bugs": {
"url": "https://github.com/strongloop/express/issues"
},
"_id": "express@4.11.2",
"_shasum": "8df3d5a9ac848585f00a0777601823faecd3b148",
"_from": "express@*",
"_npmVersion": "1.4.28",
"_npmUser": {
"name": "dougwilson",
"email": "doug@somethingdoug.com"
},
"maintainers": [
{
"name": "tjholowaychuk",
"email": "tj@vision-media.ca"
},
{
"name": "jongleberry",
"email": "jonathanrichardong@gmail.com"
},
{
"name": "shtylman",
"email": "shtylman@gmail.com"
},
{
"name": "dougwilson",
"email": "doug@somethingdoug.com"
},
{
"name": "aredridel",
"email": "aredridel@nbtsc.org"
},
{
"name": "strongloop",
"email": "callback@strongloop.com"
},
{
"name": "rfeng",
"email": "enjoyjava@gmail.com"
}
],
"dist": {
"shasum": "8df3d5a9ac848585f00a0777601823faecd3b148",
"tarball": "http://registry.npmjs.org/express/-/express-4.11.2.tgz"
},
"directories": {},
"_resolved": "https://registry.npmjs.org/express/-/express-4.11.2.tgz",
"readme": "ERROR: No README data found!"
}
এজন্য কম্যান্ড ব্যবহার করতে পারি,
$ npm uninstall express
আনইন্সটল করে of /node_modules/ ডিরেক্টরি থেকে অথবা নিচের কম্যান্ড ব্যবহার করে ভেরিফাই করতে পারি
$ npm ls
package.json আপডেট করে ডিপেন্ডেন্সি ভার্সন পরিবর্তন করে এই কম্যান্ড রান করাতে হয়,
$ npm update express
এনপিএম ব্যবহার করে প্যাকেজের নাম সার্চ করতে হয়।
$ npm search express
এনপিএম ব্যবহার করে package.json এর কাঠামো তৈরি করা হয়,
$ npm init This utility will walk you through creating a package.json file. It only covers the most common items, and tries to guess sane defaults.
See 'npm help json' for definitive documentation on these fields and exactly what they do.
Use 'npm install <pkg> --save' afterwards to install a package and save it as a dependency in the package.json file.
Press ^C at any time to quit. name: (webmaster)
ভ্যালিড ইমেইল এড্রেসসহ এনপিএম সংগ্রহস্থল সাইটে রেজিস্ট্রেশন করার জন্য কম্যান্ড,
$ npm adduser Username: mcmohd Password: Email: (this IS public) mcmohd@gmail.com
মডিউল পাবলিশ করতে যে কোড ব্যবহার করব,
$ npm publish
সবকিছু ঠিকঠাকভাবে সম্পন্ন হলে মডিউলটি পাবলিশ হয়ে যাবেএবং এনপিএমের মাধ্যমে ইন্সটলের যোগ্য হবে অন্যান্য নড জেএস মডিউলের মত।
Jul 25
রিদওয়ান বিন শামীম
নড জেএস এর পরিবেশ নতুন করে তৈরি করার কিছু নেই কারণ ইতোমধ্যেই অনলাইনে সেই পরিবেশ তৈরি হয়ে আছে, অনলাইনে প্রাপ্য সকল উদাহরণ আমরা থিওরি নিয়ে কাজ করার সময়েই সম্পাদন করতে পারব। এটি আমাদের এবিষয়ে পড়াশুনার সময় বিভিন্ন ফলাফলসহ পরীক্ষানিরীক্ষা করার আত্মবিশ্বাস দেবে।
নিচের কোডের সাথে Try it অপশন ব্যবহার করে এটি করা যায়,
/* Hello World! program in Node.js */
console.log("Hello World!");
আমাদের টিউটোরিয়ালের পরবর্তী অংশে Try it অপশন প্রচুর ব্যবহার করা হবে তাই এর ব্যবহার ভালভাবে জেনে নেয়া প্রয়োজন।
লোকাল এনভায়রন সেটআপ করতে চাইলে দুটি জিনিস কম্পিউটারে ইন্সটল করা থাকতে হবে, টেক্সট এডিটর আর নড জেএস বাইনারি ইন্সটলেবল।
টেক্সট এডিটরঃ প্রোগ্রাম টাইপ করার জন্য ব্যবহার করতে হয়। অপারেটিং সিস্টেমের উপর নির্ভর করে উইন্ডোজ নোটপ্যাড, অপারেটিং সিস্টেম এডিট কম্যান্ড ব্রিফ, এপ্সিলন, ইম্যাকস, ভিআইএম বা ভিআই ইত্যাদি টেক্সট এডিটর ব্যবহৃত হয়ে থাকে। এডিটরের মাধ্যমে সোর্স ফাইল তৈরি করা হয় যার মধ্যে প্রোগ্রাম সোর্স কোড থাকে। এর এক্সটেনশনে “.js” থাকে।
প্রোগ্রামিং শুরুর আগে একটি টেক্সট এডিটর ঠিক করে কোডিঙে কিছু অভিজ্ঞতা অর্জন করে একটি ফাইলে রেখে তা সম্পাদন করতে হয়।
সোর্স ফাইলে লেখা সোর্সকোড হল জাভাস্ক্রিপ্ট। সেই জাভাস্ক্রিপ্ট কোড ইন্টারপ্রিট ও সম্পাদন করতে নড জেএস ইন্টারপ্রিটার ব্যবহৃত হয়।
নড জেএস ডিস্ট্রিবিউশন সান ওএস, লিনাক্স, ম্যাক ওএস এক্স, এবং উইন্ডোজের জন্য ৩২ ও ৬৪ বিট এক্স৮৬ প্রসেসর আর্কিটেকচারে বাইনারি ইন্সটলেবলরূপে পাওয়া যায়।
এক্ষেত্রে নড জেএসএর সর্বশেষ আরকাইভ ভার্সন ডাউনলোড করে নিতে হয়, বিভিন্ন ওএসের জন্য প্রযোজ্য কিছু আরকাইভ ভার্সন নিচের ছকে দেয়া হল,
ওএস আরকাইভের নাম
Windows node-v0.12.0-x64.msi Linux node-v0.12.0-linux-x86.tar.gz Mac node-v0.12.0-darwin-x86.tar.gz SunOS node-v0.12.0-sunos-x86.tar.gz
ওএস আর্কিটেকচার অনুযায়ী /tmp তে node-v0.12.0-osname.tar.gz আরকাইভ ডাউনলোড ও এক্সট্রাক্ট করতে হয়। এরপর সেটিকে /usr/local/nodejs ডিরেক্টরিতে সরিয়ে রাখতে হয়।
$ cd /tmp $ wget http://nodejs.org/dist/v0.12.0/node-v0.12.0-linux-x64.tar.gz $ tar xvfz node-v0.12.0-linux-x64.tar.gz $ mkdir -p /usr/local/nodejs $ mv node-v0.12.0-linux-x64/* /usr/local/nodejs
পাথ এনভায়রনমেন্ট চলকে /usr/local/nodejs/bin যোগ করতে হয়,
ওএস আউটপুট Linux export PATH=$PATH:/usr/local/nodejs/bin Mac export PATH=$PATH:/usr/local/nodejs/bin FreeBSD export PATH=$PATH:/usr/local/nodejs/bin
এমএসআই ফাইল ব্যবহার করে নড জেএসের প্রম্পট ব্যবহার করতে হয়। বাই ডিফল্ট C:\Program Files\nodejs তে নড জেএস ডিস্ট্রিবিউশন ব্যবহার করে থাকে।ইন্সটলার উইন্ডোজের পাথ পরিবেশ চলকে C:\Program Files\nodejs\bin ডিরেক্টরি সেট করে। কম্যান্ড প্রম্পট সক্রিয় করতে রিস্টার্ট করতে হয়।
main.js নামের জেএস ফাইল তৈরি করতে হয় নিচের কোড সহ,
/* Hello, World! program in node.js */
console.log("Hello, World!"
নড জেএস ইন্টারপ্রিটার ব্যবহার করে main.js ফাইল সম্পাদন করে আমরা ফলাফল দেখতে পারি,
$ node main.js
ইন্সটলেশনের সবকিছু ঠিকঠাক থাকলে এটি যে ফলাফল দেখাবে তা হল,
Hello, World!
Jul 22
রিদওয়ান বিন শামীম
ইউনিক্স সিস্টেমের খুব শক্তিশালী ও স্থিতিস্থাপক লগিং সিস্টেম আছে যার মাধ্যমে আমাদের কল্পনাযোগ্য সব কিছুই আমরা রেকর্ড করে রাখতে ও পরবর্তীতে ব্যবহার করতে পারি।
ইউনিক্সের বেশিরভাগ ভার্সন syslog নামক জেনারেল পারপাস লগিং ফ্যাসিলিটি দিয়ে থাকে। স্বতন্ত্র প্রোগ্রাম যাদের তথ্য লগড অবস্থায় থাকতে হয় তারা এটিতে তথ্য প্রেরণ করে থাকে। এই সিস্টেম একটি কেন্দ্রীভূত সিস্টেম লগড প্রসেস ব্যবহার করে যা /etc/syslogd বা /etc/syslog নামক প্রোগ্রাম সম্পন্ন করে। প্রোগ্রাম তাদের লগ এন্ট্রিকে syslogd এ পাঠায় যা /etc/syslogd.conf বা /etc/syslog ফাইল কনফিগার সংক্রান্ত কাজগুলো করে। কোনও মিল পাওয়া গেলে কাঙ্খিত লগ ফাইলে লগ ম্যাসেজ লিখে রাখে।
মূলত চার ধরণের syslog টার্ম আছে,
| টার্ম | বর্ণনা |
| Facility | আইডেন্টিফাইয়ার লগ মেসেজে সাবমিট হওয়া এপ্লিকেশন বা প্রোগ্রামের বিবরণ দেয় |
| Priority | ম্যাসেজের গুরুত্বের পরিমাপক |
| Selector | এক বা একাধিক ফ্যাসিলিটি বা লেভেলের সমন্বয় |
| Action | ইনকামিং ম্যাসেজ যা সিলেক্টরের সাথে মিলে যায়, তার ক্ষেত্রে ঘটে। |
সিলেক্টরের জন্য প্রাপ্ত সুবিধাগুলো নিচে দেয়া হল, অবশ্য সব ইউনিক্স ভার্সন সবগুলো সুবিধা পায় না।
| প্রায়োরিটি | বর্ণনা |
| emerg | জরুরী অবস্থা |
| alert | সংশোধন করতে হবে এমন অবস্থা |
| crit | জটিল পরিস্থিতি, যেমন হার্ডওয়ারে ক্রুটি |
| err | সাধারণ এরর |
| warning | সতর্কবাণী |
| notice | এরর না, তবু সাবধানে কাজ করতে হবে |
| info | তথ্যমূলক ম্যাসেজ |
| debug | প্রোগ্রাম ডিবাগের ম্যাসেজ |
| none | নট টু লগ ম্যাসেজ নির্ধারণের জন্য সিউডো লেভেল ব্যবহার করা |
ম্যাসেজ লগড থাকার সময় এই ফাইল কন্ট্রোল করে।
*.err;kern.debug;auth.notice /dev/console daemon,auth.notice /var/log/messages lpr.info /var/log/lpr.log mail.* /var/log/mail.log ftp.* /var/log/ftp.log auth.* @prep.ai.mit.edu auth.* root,amrood netinfo.err /var/log/netinfo.log install.* /var/log/install.log *.emerg * *.alert |program_name mark.* /dev/console
ফাইলের প্রতিটা লাইনের দুটি করে অংশ আছে,
পাঁচটি একশনের যে কোনও একটি একশন ফিল্ডে প্রযোজ্য হবে,
লগার কম্যান্ডের ফরম্যাট হল,
logger [-i] [-f file] [-p priority] [-t tag] [message]...
এর প্যারামিটারগুলো এরকম,
প্যারামিটার
-f filename
-i
-p priority
-t tag
message
লগ রোটেশনের জন্য newsyslog বা logrotate টুল ব্যবহার করা যায়।
গুরুত্বপূর্ণ লগ লোকেশনঃ কিছু গুরুত্বপূর্ণ এপ্লিকেশন ও তাদের লগ ডিরেক্টরি নিচে দেয়া হল,
| এপ্লিকেশন | ডিরেক্টরি |
| httpd | /var/log/httpd |
| samba | /var/log/samba |
| cron | /var/log/ |
| /var/log/ | |
| mysql | /var/log/ |
Jul 22
রিদওয়ান বিন শামীম
ডটনেট নিউক ৬ ডেভেলপার কুইক স্টার্ট পেজ ডটনেট নিউক এক্সটেনশন ডেভেলপারদের সাহায্যার্থে ব্যবহৃত হতে পারে। স্কিন অবজেক্ট, মডিউল বা প্রভাইডার ডেভেলপমেন্টে নতুনরা মডিউল ডেভলাপমেন্ট পেজ দেখতে পারেন।
ডটনেট নিউক ৬এর সব সংস্করণ অ্যাজিউর ডেভলাপমেন্ট উপযোগী, যদিও সংশ্লিষ্ট কিছু কাজ করতে হয়।
রিবন বার নামক কন্ট্রোল প্যানেল যা ডটনেট নিউক ৫এ ছিল তা বর্তমান সংস্করণে আরও বেশি আপডেট করে আনা হয়েছে।
নতুন ইউজার ইন্টারফেসের জন্য ডিফল্ট সিএসএস ফাইল গুরুত্বপূর্ণ স্টাইল ডেফিনেশন সংরক্ষণ করে। সংশ্লিষ্ট ফর্ম প্যাটার্ন ও জেকুয়েরি প্লাগিন ডিফল্ট সিএসএস ফাইলের উপর নির্ভর করে।
ডিডিআর মেনু একটি ডিফল্ট মেনু যা ফ্রেমওয়ার্কের সাথে আসে।
এটি ডটনেট নিউক ৬ এর নতুন সংযোজন।
এটি কোর ফ্রেমওয়ার্কে নতুন সংস্করণ।
ডটনেট নিউক ৬তে ফাইল ও ফোল্ডার ব্যবস্থাপনার জন্য দুটি নতুন এপিআই সংযোজিত হয়েছে , ফাইল ম্যানেজার ও ফোল্ডার ম্যানেজার।
ডটনেট নিউক ৬তে ইউজার ইন্টারফেসের আপডেট ফর্ম প্যাটার্ন সংশ্লিষ্ট।
ফ্রেমওয়ার্কের আইকনে প্রবেশ্যতা পেতে একটি ইউনিফাইড এপিআই ব্যবহারের ব্যবস্থা করা হয়েছে।
ওয়েব কন্ট্রোলের কিছু নতুন আইকন কী প্রপার্টি থাকে ।
ডটনেট নিউক ৬ এর সব সংস্করণ জেকুয়েরি ও জেকুয়েরি ইউআই উপযোগী ও কোর এডমিন ও হোস্ট মডিউলের সব ইন্টারফেস দ্বারা ব্যবহৃত হয়।
ডটনেট নিউক ৬ ফ্রেমওয়ার্কের সব ভার্সনে লগ ফর নেট এসেম্বলি ( ভার্সন 1.2.10) সংযোজিত আছে।
আগের সংস্করণে এ সংক্রান্ত ফাইল ছিল কিন্তু এক্সটেনশন ডেভলপারদের জন্য কোনও অপশন বর্তমানে চালু নেই।
ডটনেট নিউক ৬ তে মডেল পপ আপের সাপোর্ট সংযোজিত হয়েছে।
বর্তমানে ডটনেট নিউক ৬ তে পূর্ববর্তী সংস্করণের মত মডিউল একশন প্রদর্শিত হয় না।
মডিউল ব্র্যান্ডিং ডেভেলপারদের এক্সটেনশন প্যাকেজের সাথে আইকন ব্যবহারের ব্যবস্থা করে দেয়।
এটি হোস্ট ইউজারকে মডিউল ক্যাটাগরাইজ করতে সাহায্য করে যাতে কন্ট্রোল প্যানেলে মডিউলকে সহজে খুঁজে পাওয়া যায়।
নতুন মডিউল, টেলিরিক ও আপডেট করা মডিউল ও প্রভাইডার ডটনেট নিউক ৬ এর অন্যতম অনুষঙ্গ।
Jul 22
রিদওয়ান বিন শামীম
ডটনেট নিউককে আপগ্রেড করা মূলত একটি সরল প্রক্রিয়া। নতুন সংস্করণের ফাইল পুরনো ইন্সটল করা সংস্করণে নিয়মমত কপি করে এপ্লিকেশনকে আপগ্রেড করা সংক্রান্ত নির্দেশনা দিতে দেয়া হয়।
সবসময় ব্যাকআপ ঠিক রাখতে হবে।
মনে রাখা দরকার, যদি default.css, portal.css বা menu.css পরিবর্তন করে সাইট আপগ্রেড করা হয় তবে আপগ্রেড প্যাকেজ কপির পরে এসব ফাইলকে ওয়েবসাইটের ফোল্ডারে কপি করতে হবে।
ডাটাবেস ও ওয়েবসাইটের সম্পূর্ণ ব্যাকআপ ছাড়া আপগ্রেড প্রক্রিয়া চালানো ঠিক নয়। এডভান্সড কৌশলের সাথে সংশ্লিষ্ট কিছু বিষয় হল,
APP_OFFLINE.HTM
SQL BACKUP TO APP_DATA
IN-PLACE UPGRADES
IIS ROOT FOLDER
আপগ্রেড সংক্রান্ত কিছু ভিডিও,
A Simple way to Upgrade DotNetNuke
Upgrading Via FTP
Upgrading DotNetNuke on WebMatrix
Customizing the App_Offline.htm File