এজাইল পদ্দতিতে সম্পাদিত (done) এর সংজ্ঞাঃ The definition of done for User Story, Iteration, and Release

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

 

ইউজার স্টোরি, পুনরাবৃত্তিক ধাপ ও রিলিজের ক্ষেত্রে সম্পাদিত (done) এর সংজ্ঞা নিচে দেয়া হল,

ইউজার স্টোরি

ইউজার স্টোরি হল এক ধরনের রিকোয়ারমেন্ট যা ব্যবহারকারীর সহজাত বর্ণনায় কয়েক লাইনে বিবৃত হয় ও একটি পুনরাবৃত্তিক ধাপে সম্পন্ন হয়। একটি ইউজার স্টোরি তখনই সম্পন্ন বা ডান(done) হবে যখন

  • সংশ্লিষ্ট সব কোড অন্তর্ভুক্ত হয়েছে,
  • সব ইউনিট টেস্ট কেস পার হয়েছে,
  • সব এক্সেপ্টেন্স টেস্ট কেস পার হয়েছে,
  • হেল্প টেক্সট লেখা হয়েছে,
  • প্রোডাক্ট ওনার স্টোরিটাকে গ্রহণ করেছে।

পুনরাবৃত্তিক ধাপ

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

  • প্রোডাক্ট ব্যাকআপ সম্পন্ন
  • পারফর্মেন্স পরীক্ষিত
  • ইউজার স্টোরিগুলো গৃহীত ও পরবর্তী ধাপে পাঠানো হয়ে গেছে
  • ত্রুটি  সারানো হয়ে গেছে অথবা পরবর্তী ধাপের জন্য স্থগিত করা হয়েছে

রিলিজ

রিলিজ একটি বড় মাইলস্টোন যা প্রকল্পের আভ্যন্তরীণ বা বাইরে উৎপাদন, টেস্টকৃত ভার্সন ইত্যাদি বোঝায়। একটি রিলিজ তখনি সম্পন্ন হবে যখন,

  • সিস্টেমে স্ট্রেস টেস্ট করা হয়ে গেছে,
  • পারফর্মেন্স যাচাই করা হয়েছে,
  • সিকিউরিটি ভ্যালিডেশন হয়ে গেছে,
  • দুর্যোগ ব্যবস্থাপনা পরিকল্পনা যাচাই করা হয়েছে।

 

ডিএনএন ৮.০ ডেভলপার কুইক স্টার্ট

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

 

ডিএনএন ৮.০ ডেভলপার একটি প্রক্রিয়াধীন বিষয় যেহেতু ৮.০.০ ভার্সনটি ২০১৫ এর নভেম্বরের আগে বাজারে আসছে না।

 

পরিকল্পনার অন্তর্ভুক্ত বিষয়

 

প্রধান সংস্করণ, এমভিসি মডিউলের উন্নতি, এইচটিএমএল সিঙ্গেল পেজ এপ্লিকেশন মডিউল(এসপিএ), ডাইনামিক কন্টেন্ট ক্রিয়েটর, ডট নেট ৪.৫ রিকোয়ারমেন্ট, প্লাটফর্ম ও ইউআই সেপারেশন।

 

ইস্যু লিঙ্ক

আলোচ্য ইস্যুর তালিকার লিঙ্ক নিচে দিয়ে দেয়া হল।

https://dnntracker.atlassian.net/browse/DNN-7725?jql=project%20%3D%20DNN%20AND%20fixVersion%20%3D%20%22Platform%208.0.0%22%20ORDER%20BY%20updated%20DESC%2C%20priority%20DESC%2C%20created%20ASC

 

অপরিহার্য যে বিষয়গুলোয় পরিবর্তন থাকতে পারে,

ডিএনএন ৮.০ এর জন্য ডট নেট ৪.৫ বা এরচেয়ে আধুনিক কোনও সংস্করণ লাগবে, কারণ এএসপি ডটনেট ওয়েব এপিআই ২.১.১ লাগবে এবং এমভিসি ৫.১.১ লাগবে কিছু ওয়েব এপিআই ভিত্তিক কাজের জন্য। মনে রাখতে হবে, newtownsoft.dll (json.net) ও ৪.৫.১১ তে উন্নীত হয়েছে।

 

ডিএনএন ৮.০ এর ব্রেকিং চেঞ্জ গুলো হলঃ

  • নিষ্কাশিত ও মুছে ফেলা মডিউল,
  • ন্যাভিগেশন প্রভাইডার
  • ইউআরএল রাউটিং মডিউল
  • সাইটকে ডব্লিওএসপি থেকে ডব্লিওএপিতে পরিবর্তন
  • লেগাসি এপসেটিং কানেকশন স্ট্রিং মুছে ফেলা

 

কমিউনিটি টেকনোলজি প্রিভিউ

সিটিপি ওয়ান ব্লগঃ http://www.dnnsoftware.com/community-blog/cid/155181/two-great-frameworks-that-work-great-together

সিটিপি থ্রী ব্লগঃ http://www.dnnsoftware.com/community-blog/cid/155256/dnn-800-ctp-3

সিটিপি ওয়ান ব্লগঃ http://www.dnnsoftware.com/community-blog/cid/155262/dnn-800-ctp-4

 

 

এসপিএ মডিউল

এসপিএ

এসপিএ বা সিঙ্গেল পেজ এপ্লিকেশন হল ওয়েব দুনিয়ার একটি অভিজাত বিষয়। এবিষয়ে জানতে পারেন এখান থেকে, http://www.dnnsoftware.com/community-blog/cid/155223/spa-a-dnn-first-class-citizen

ডিএনএন ৮.০ এ মডিউল ডেভলাপমেন্ট

১) এমভিসি মডিউলের সূচনাঃ ডিএনএন ৮.০ সিটিপি ব্যবহার করে। সিটিপি এএসপি ডট নেট এমভিসি ফ্রেমওয়ার্ক ব্যবহার করে তৈরিকৃত মডিউলের জন্য আপডেটকৃত সাপোর্ট ধারণ করে, যা এইচটিএমএল ৫ ভিত্তিক মডিউলের জন্যও সাপোর্ট হিসেবে ব্যবহৃত হয়। আরও বিস্তারিত জানতে দেখুন, http://www.dnnsoftware.com/community-blog/cid/155216/module-development-in-dnn-8-1-introduction-to-mvc-modules

ডিএনএন ৮.০ এ মডিউল ডেভলাপমেন্ট

২) প্রথম এমভিসি একশন/ ভিউ তৈরি করাঃ এমভিসি একশনে কোনও সাইটের কন্টাক্ট ম্যানেজের জন্য মডিউল তৈরি করা হয়। কোনও কন্টাক্টে পাঁচটি সাধারণ বৈশিষ্ট্য থাকে, ফার্স্ট নেম, লাস্ট নেম, ইমেইল এড্রেস, ফোন নাম্বার, টুইটার হ্যান্ডেল। এখান থেকে বিষয়টি জানা যেতে পারে, http://www.dnnsoftware.com/community-blog/cid/155219/module-development-in-dnn-8-2–creating-your-first-mvc-actionview

 

ডিএনএন ৮.০ এ মডিউল ডেভলাপমেন্ট

৩) এসপিএ মডিউলের সূচনাঃ ডিএনএন ৮.০ এএসপি ডট নেট এমভিসি মডিউলের সাথে এসপিএ বা সিঙ্গেল পেজ এপ্লিকেশন মডিউল সাপোর্ট করে,যা কিনা ওয়েব সার্ভারে এএসপি ডটনেট ওয়েব এপিআই ভিত্তিক ওয়েব সার্ভিসের সমন্বয়ে এইচটিএমএল, জাভাস্ক্রিপ্ট ও সিএসএসের মাধ্যমে ডেভলাপ করা হয়েছে।এবিষয়ে বিস্তারিত আছে এখানে, http://www.dnnsoftware.com/community-blog/cid/155221/module-development-in-dnn-8-3–introduction-to-spa-modules

 

ডিএনএন ৮.০ এ মডিউল ডেভলাপমেন্ট

৪) এমভিসি মডিউলের লোকালাইজেশন সাপোর্টঃ ডিএনএন ৮.০ এএসপি ডট নেট এমভিসি ৫.১ ভার্সন বা এর পরবর্তী ভার্সনগুলো দ্বারা মডিউল তৈরিতে সমর্থন করে।এখান থেকে বিষয়টি দেখে নেয়া যেতে পারে, http://www.dnnsoftware.com/community-blog/cid/155246/module-development-in-dnn-8-4–localization-support-for-mvc-modules

 

ডিএনএন ৮.০ এ মডিউল ডেভলাপমেন্ট

৫) পিওর এসপিএ তৈরিতে সাপোর্ট হিসেবে নিউ টোকেনঃ জাভাস্ক্রিপ্ট ও সিএসএস ফাইল রেজিস্টারের জন্য দুটি নতুন টোকেন যোগ করতে হয়েছে, যা পূর্বের টোকেন থেকে আলাদা।এখানে আরও বিস্তারিত জানার সুযোগ থাকছে, http://www.dnnsoftware.com/community-blog/cid/155247/module-development-in-dnn-8-5–new-tokens-to-support-building-pure-spa-modules

 

ডিএনএন ৮.০ এ মডিউল ডেভলাপমেন্ট

৬) এমভিসি ও এসপিএতে মডিউল একশন নিয়ন্ত্রণ করাঃ মডিউলএকশন এট্রিবিউট ও মডিউলএকশন আইটেমস এট্রিবিউট এদুটির সাহায্য নিয়ে এমভিসি ও এসপিএতে মডিউল একশন নিয়ন্ত্রণ করা হয়।

ডিএনএন ৮.০ এ মডিউল ডেভলাপমেন্টের ভিডিও দেখুন এখান থেকে, https://www.youtube.com/watch?v=UJ02-GTNGmI

 

এইচএমএসি

সার্ভিস ফ্রেমওয়ার্কের এগেইন্সটে রিমোটলি অথেনটিকেশনঃ সার্ভিস ফ্রেমওয়ার্কের এগেইন্সটে রিমোটলি অথেনটিকেশন সম্পর্কে বিস্তারিত দেখুন এখানে, http://dnn-connect.org/2015/all-sessions/details/mobile-authentication

 

ইনক্রিমেন্টাল আপগ্রেড

ডিএনএন প্লাটফর্ম 7.4.2 Beta ও প্লাটফর্ম 8.0 CTP 3 থেকে শুরু করে ডিএনএন ইনক্রিমেন্টাল আপগ্রেডের সক্ষমতাকে সমর্থন করে। এবিষয়ে বিস্তারিত জানতে দেখুন, http://www.dnnsoftware.com/community-blog/cid/155263/baby-steps

 

ডাইনামিক কন্টেন্ট ক্রিয়েটর

এক্ষেত্রে কাজ করতে এডমিন মেন্যু থেকে ডাইনামিক কন্টেন্ট টাইপ ম্যানেজার এরিয়াতে যেতে হয়। এই লিঙ্ক থেকে বিষয়টি সম্পর্কে আরও ভালমত জানা যাবে। http://www.dnnsoftware.com/community-blog/cid/155270/announcing-the-dynamic-content-creator

 

Node.js – সার্বজনীন অবজেক্ট (Global Objects)

মোহাম্মদ আব্দুল্লাহ

Node.js এর গ্লোবাল অবজেক্টগুলো সাধারনত সকল মোডিউল থেকে সরাসরি একসেস করা যায় । তাই এই গ্লোবাল অবজেক্টগুলোকে কোন অ্যাপ থেকে অন্তর্ভূক্ত করতে হয় না । এই গ্লোবাল অবজেক্টগুলো সাধারনত মোডিউল, ফাংশন, স্ট্রীং অথবা অবজেক্টও হয়ে থাকে যা নিম্নে ব্যাখ্যা করা হয়েছে ।

__filename

__filename, যেই ফাইল থেকে কোড রান করা হচ্ছে সেই ফাইলের নাম প্রকাশ করে থাকে । এটি কোড ফাইলের সম্পূর্ণ পথ প্রিন্ট করে থাকে ।

উদাহরণ
একটি javascript (main.js) এ নিম্নের কোড copy/paste করে দিন


console.log( __filename );

 

এখন main.js ফাইলটি রান করান


$ node main.js

 

আপনার প্রোগ্রামের সঠিক অবস্থান অনুযায়ী নিম্নের ফাইল নাম প্রকাশ করবেঃ


/web/com/1427091028_21099/main.js

 

__dirname

__dirname সাধারনত যেই ডিরেক্টরী থেকে স্ক্রীপ্ট রান করা হচ্ছে ওই ডিরেক্টরীর নাম প্রকাশ করে থাকে ।

উদাহরণ
একটি javascript (main.js) এ নিম্নের কোড copy/paste করে দিন


console.log( __dirname );

 

এখন main.js ফাইলটি রান করান


$ node main.js

 

আপনার প্রোগ্রামের সঠিক অবস্থান অনুযায়ী নিম্নের ডিরেক্টরীর নাম প্রকাশ করবেঃ


/web/com/1427091028_21099

 

 

setTimeout(cb, ms)

setTimeout(cb, ms) গ্লোবাল ফাংশন দিয়ে অন্তত ‘ ms ‘ মিলিসেকেন্ড বিলম্বে কলব্যাক ফাংশন ‘ cb ‘ কে কল করা হয়ে থাকে । এই বিলম্ব কিছু বাহ্যিক ফাক্টর এর উপর নির্ভরশীল উদাহারন স্বরুপ OS timer granularity এবং system load । একটি টাইমারের ব্যাপ্তি ২৪.৮ দিনের বেশী হতে পারবে না ।

উদাহরণ
একটি javascript (main.js) এ নিম্নের কোড copy/paste করে দিন


function printHello(){
     console.log( "Hello, World!");
 }
 // Now call above function after 2 seconds
 setTimeout(printHello, 2000);

 

এখন main.js ফাইলটি রান করান


$ node main.js

 

যাচাই করে দেখুন আউটপুট কিছুটা বিলম্বে আসছে কিনা


Hello, World!

 

clearTimeout(t)

clearTimeout( t ) গ্লোবাল ফাংশন দিয়ে পূর্বে setTimeout(cb, ms) দিয়ে যেই টাইমার সেট করা হয়েছে তা বন্ধ করতে ব্যবহার করা হয় ।

উদাহরণ
একটি javascript (main.js) এ নিম্নের কোড copy/paste করে দিন


function printHello(){
       console.log( "Hello, World!");
 }
 // Now call above function after 2 seconds
 var t = setTimeout(printHello, 2000);
 // Now clear the timer

 

clearTimeout(t)

এখন main.js ফাইলটি রান করান


$ node main.js

যাচাই করে দেখুন আউটপুটে কিছু প্রিন্ট করছে কিনা

 

setInterval(cb, ms)

setInterval(cb, ms) দিয়ে অন্তত ‘ ms ‘ মিলিসেকেন্ড বিলম্বে বারবার কলব্যাক ফাংশন ‘ cb ‘ কে কল করতে থাকে । এই বিলম্ব কিছু বাহ্যিক ফাক্টর এর উপর নির্ভরশীল উদাহারন স্বরুপ OS timer granularity এবং system load । একটি টাইমারের ব্যাপ্তি ২৪.৮ দিনের বেশী হতে পারবে না ।

একটি javascript (main.js) এ নিম্নের কোড copy/paste করে দিন


function printHello(){
     console.log( "Hello, World!");
 }
 // Now call above function after 2 seconds
 setInterval(printHello, 2000);

 

এখন main.js ফাইলটি রান করান


$ node main.js


উপরের প্রোগ্রামটি প্রতি ২ সেকেন্ড পরপর printHello() ফাংশন কে কল করতে থাকবে ।

 

পিএইচপিঃ ইন্টারভিউয়ের প্রশ্নাবলী এবং উত্তরসমূহ। PHP Interview Questions and Answers

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

 

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

যে প্রশ্নগুলো সাধারণত আলোচনায় এসে থাকে সেগুলো হল,

পিএইচপি কী?

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

 

পিএইচপির সাধারণ ব্যবহারগুলি কি কি?

পিএইচপি যে ধরনের কাজ সাধারণত করে থাকে সেগুলো হল,

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

 

কতগুলো উপায়ে আপনি এইচটিএমএল পেজে পিএইচপি কোড এমবেড করতে পারেন?

তিনটি মার্কআপ ট্যাগ আছে যা পিএইচপি পারসার অনুমোদিত, সমস্ত পিএইচপি কোড অবশ্যই এদের যেকোন একটির মাধ্যমে অন্তর্ভুক্ত হবে।


<?php PHP code goes here ?>
<?    PHP code goes here ?>
<script language="php"> PHP code goes here </script>
Most common tag is the <?php...?>

সবচেয়ে কমন ট্যাগ হল<?php…?>।

 

php.ini  ফাইলের উদ্দেশ্য কী?

এটি  পিএইচপি কনফিগারেশন ফাইল, পিএইচপির ফাংশনালিটিতে প্রভাব বিস্তারের চূড়ান্ত ও সবচেয়ে কার্যকর পদ্ধতি। অন্য ওয়ার্ডে পিএইচপি শুরু হওয়ার সময়, মডিউল ভার্সনের জন্য httpd রিস্টার্টের সময়, অথবা CGI ভার্সনের জন্য স্ক্রিপ্ট সম্পাদনের সময় php.ini ফাইল পড়া হয়। কাঙ্খিত পরিবর্তন দৃশ্যমান না হলে থেমে আবার httpd  রিস্টার্ট করতে হয়। এরপরও কাঙ্খিত পরিবর্তন দৃশ্যমান না হলে phpinfo() দ্বারা php.ini এর পাথ চেক করতে হবে।

 

এস্কেপিং টু পিএইচপি কী?

কোনও পেজের অন্যসব উপাদান থেকে পিএইচপি কোডকে আলাদা করার ক্ষেত্রে পিএইচপি পারসিং এঞ্জিনের একটি উপায় দরকার হয়। সেই কৌশলকে ‘এস্কেপিং টু পিএইচপি’ বলা হয়।

 

পিএইচপিকে হোয়াইটস্পেস ইনসেনসিটিভ বলা হয়, এবিষয়ে কি জানেন?

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

 

পিএইচপি কি কেস সেনসিটিভ ভাষা?

হ্যাঁ।

 

পিএইচপি ভেরিয়েবলের গুরুত্বপূর্ণ বৈশিষ্ট্য কী?

পিএইচপি ভেরিয়েবলকে লিডিং ডলার সাইন ($) দ্বারা প্রকাশ করা হয়, ভেরিয়েবলের মান হল সর্বশেষ এসাইনমেন্টের মান। ভেরিয়েবল = অপারেটর দ্বারা এসাইন থাকে।

 

বিভিন্ন ধরনের পিএইচপি ভেরিয়েবলগুলো কী কী?

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

 

পিএইচপি ভেরিয়েবলের নামকরণের নিয়ম কী?

ভেরিয়েবলের নাম লেটার বা আন্ডারস্কোর দিয়ে শুরু হবে, ভেরিয়েবলের নামের মধ্যে লেটার, আন্ডারস্কোর বা নাম্বার থাকতে পারে কিন্তু + , – , % , ( , ) . &, এসব চিহ্ন থাকতে পারবে না।

 

কোনও ভেরিয়েবল বুলিয়ান টাইপের না- এর সত্যতা  নিশ্চিত হতে কী নিয়ম আছে?

যদি এর মান সংখ্যা হয় তবে শূন্যের সমান  হলে মিথ্যা, অন্য আরকিছু হলে সত্য হবে। এর মান স্ট্রিং হয় তবে এটি খালি হলে অর্থাৎ স্ট্রিং “0” হলে মিথ্যা, অন্য আরকিছু হলে সত্য হবে। নাল টাইপের ভ্যালু সব সময় মিথ্যা। যদি এর মান অ্যারি হয় তবে অন্য কোনও মান বহন না করলে মিথ্যা, নতুবা সত্য হবে। অবজেক্টের ক্ষেত্রে তবে অন্য কোনও মান বহন করা মানে সদস্য ভেরিয়েবল থাকা যা কিনা কোনও মান বিবৃত করে। ভ্যালিড রিসোর্স সত্য। ডাবলসকে বুলিয়ান হিসেবে ব্যবহার করা যাবে না।

 

নাল কী?

নাল একটি বিশেষ শ্রেণীর ভেরিয়েবল যার মাত্র একটি মান থাকে।

 

পিএইচপিতে  ধ্রুবককে কীভাবে বিবৃত করবেন?

define() ফাংশন ব্যবহার করে পিএইচপিতে  কোনও ধ্রুবককে বিবৃত করা যায়, পুনরায় কোনও মানকে ফিরিয়ে আনতে এর নাম স্পেসিফাই করতে হয়।

 

constant() ফাংশনের কাজ কী?

এটি ধ্রুবকের মান ফিরিয়ে আনে। পুনরায় কোনও মানকে ফিরিয়ে আনার ক্ষেত্রে নাম না জানা থাকলে এই ফাংশন কাজে লাগে।

 

constant() ফাংশনের উদাহরণ দিন।


<?php
define(“MINSIZE”, 50);
echo MINSIZE;
echo constant(“MINSIZE”); // same thing as the previous line
?>


ধ্রুবকে কেবল স্কেলার ডাটা থাকতে পারে।

 

পিএইচপি ধ্রুবক ও চলকের মধ্যে পার্থক্য কী?

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

 

পিএইচপি ম্যাজিক কন্সটেন্ট কী?

পিএইচপি যেকোনো স্ক্রিপ্টে পূর্বনির্ধারিত অনেক ধ্রুবক ব্যবহার করে। এদের পিএইচপি ম্যাজিক কন্সটেন্ট বলে।

 

_LINE_ কন্সটেন্টের কাজ কী?

এটি ফাইলের বর্তমান লাইনের অবস্থান নির্দেশ করে।

 

_FILE_ কন্সটেন্টের কাজ কী?

এটি ফাইলের ফুল পাথ ও ফাইলনেম নির্দেশ করে।

 

_FUNCTION_ কন্সটেন্টের কাজ কী?

এটি ফাইলের ফাংশন নেম নির্দেশ করে।

 

_CLASS_ কন্সটেন্টের কাজ কী?

এটি ফাইলের ক্লাস নেম নির্দেশ করে।

 

_METHOD_ কন্সটেন্টের কাজ কী?

এটি ফাইলের ক্লাস মেথডের  নেম নির্দেশ করে।

 

ব্রেক স্টেটমেন্টের কাজ কী?

ব্রেক ‘ফর লুপ’ ও সুইচ স্টেটমেন্টকেকে টারমিনেট করে।

 

কন্টিনিউ স্টেটমেন্টের কাজ কী?

কন্টিনিউ রিমাইন্ডার স্কিপ করার জন্য লুপ তৈরি করে এবং পুনরাবৃত্তির প্রেক্ষিতে এর কন্ডিশন নিরীক্ষণ করে।

 

‘foreach’ লুপের জন্য সিনট্যাক্স ব্যাখ্যা করুন?

‘foreach’ স্টেটমেন্ট অ্যারির মাধ্যমে লুপ তৈরি করে সহায়তা করে। এর সিনট্যাক্স হল,


foreach (array as value)
{
    code to be executed;
}

 

নিউমেরিক অ্যারি কী?

নিউমেরিক অ্যারি একধরনের অ্যারি যাতে নিউমেরিক ইনডেক্স আছে। লিনিয়ার ফ্যাশনে মান সংরক্ষণ ও এতে প্রবেশ করা যায়।

 

এসোসিয়েট অ্যারি কী?

এসোসিয়েট অ্যারি একধরনের অ্যারি যাতে ইনডেক্স হিসেবে স্ট্রিং ব্যবহৃত হয়। এটি মান সংশ্লিষ্ট উপাদানকে লিনিয়ার ইনডেক্স অর্ডারের পরিবর্তে কী-ভ্যালুর সমন্বয়ে সংরক্ষণ করে।

 

মাল্টিডাইমেন্সনাল অ্যারি কী?

এই অ্যারি একধরনের অ্যারি যাতে মাল্টিপল ইনডাইস ব্যবহার করে এক বা একাধিক অ্যারি ও মান অন্তর্ভুক্ত করা হয়।

 

পিএইচপিতে দুটি স্ট্রিংকে কীভাবে পরপর সমন্বয় করা যায়?

ডট অপারেটর (.) ব্যবহার করে এটি করা যায়,


<?php
$string1="Hello World";
$string2="1234";
echo $string1 . " " . $string2;
?>

যা থেকে আমরা এই ফলাফল পাব,

Hello World 1234

 

পিএইচপিতে কোনও স্ট্রিংএর লেন্থ বের করা যায় কীভাবে?

strlen() ফাংশন ব্যবহার করে আমরা এটি করতে পারি। যেমন “Hello world!” স্ট্রিংএর লেন্থ বের করা যাক,


<?php
echo strlen("Hello world!");
?>

যার ফলাফল পাব ১২।

 

পিএইচপিতে কোনও স্ট্রিংএর ভেতর অন্য কোনও স্ট্রিংএর অবস্থান কীভাবে সনাক্ত করা যাবে?

স্ট্রিংএর ভেতর অন্য কোনও স্ট্রিং বা ক্যারেক্টার খুঁজতে strpos() ফাংশন ব্যবহার করা হয়।


<?php
echo strpos("Hello world!","world");
?>

এটি ফলাফল দেখাবে, ৬।

 

পিএইচপিতে এনভায়রনমেন্ট ভেরিয়েবল কীভাবে পাবেন?

getenv() ফাংশন ব্যবহার করে আমরা পিএইচপিতে এনভায়রনমেন্ট ভেরিয়েবলের মান পাব।

 

পিএইচপিতে ব্রাউজারের ডিটেইল কীভাবে পাওয়া যাবে?

HTTP_USER_AGENT এই এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করে ব্রাউজারের ডিটেইল পাওয়া যাবে।

 

পিএইচপিতে রেনডম নাম্বার কীভাবে জেনারেট করা যায়?

rand()ফাংশন ব্যবহার করে রেনডম নাম্বার জেনারেট করা যায়।

 

$_PHP_SELF ভেরিয়েবলের কাজ কী?

এটি স্ক্রিপ্ট নেমের জন্য ব্যবহৃত হয়, এটি প্রয়োগের পর “submit” বাটনে চাপলে একই স্ক্রিপ্ট পাওয়া যাবে।

 

পিএইচপিতে কোনও পেজ রিডাইরেক্ট করতে হলে কী করতে হবে?

header() ফাংশন ব্যবহার করে এটি করা যায়, এটি ব্রাউজারে র(raw) এইচটিটিপি হিডার সাপ্লাই করে এটি করে।

 

পিএইচপি ব্যবহার করে ফাইল ডাউনলোড ডায়ালগ বক্স কীভাবে দেখাতে পারবেন?

এইচটিটিপি হিডার মূল হিডার থেকে আলাদা হবে যেখানে আমরা কন্টেন্ট টাইপ হিসেবে text/html\n\n পাঠাই। এক্ষেত্রে কন্টেন্ট টাইপ application/octet-stream ভিত্তিক হবে এবং মূল কন্টেন্ট নেম এর সাথে ক্রমানুসারে এরসাথে সংযুক্ত থাকবে। যেমন, কোনও লিঙ্ক থেকে ডাউনলোডের উপযোগী FileName নামের ফাইল তৈরি করতে চাইলে এর সিনট্যাক্স হবে,


#!/usr/bin/perl
# HTTP Header
print "Content-Type:application/octet-stream; name=\"FileName\"\r\n";
print "Content-Disposition: attachment; filename=\"FileName\"\r\n\n";
# Actual File Content
open( FILE, "<FileName" );
while(read(FILE, $buffer, 100) )
{
   print("$buffer");
}

 

পিএইচপিতে গেট মেথডে তথ্য পাওয়ার উপায় কী?

পিএইচপিতে $_GET এসোসিয়েটিভ  অ্যারি ব্যবহার করে গেট মেথডে তথ্য পাওয়া যায়।

 

পিএইচপিতে পোস্ট মেথডে তথ্য পাওয়ার উপায় কী?

পিএইচপিতে $_POST এসোসিয়েটিভ  অ্যারি ব্যবহার করে গেট মেথডে তথ্য পাওয়া যায়।

 

$_REQUEST ভেরিয়েবলের কাজ কী?

$_REQUEST ভেরিয়েবল $_GET, $_POST,ও $_COOKIE এই সবগুলি ভেরিয়েবলের উপাদান সংরক্ষণ করে।

 

অ্যারি তৈরি করতে কোন ফাংশন ব্যবহার করবেন?

array() − এর মাধ্যমে অ্যারি তৈরি করা যায়।

 

কোনও অ্যারি সর্ট করতে হলে কোন কোড ব্যবহার করতে হবে?

অ্যারি সর্ট করতে sort() ব্যবহার করতে হবে

 

সিঙ্গেল কোটেড স্ট্রিং আর ডাবল কোটেড স্ট্রিংএর মধ্যে পার্থক্য কী?

সিঙ্গেল কোটেড স্ট্রিং আক্ষরিক ভাবে প্রয়োগ হয় যেখানে ডাবল কোটেড স্ট্রিং তাদের মান দ্বারা চলককে প্রতিস্থাপিত করে। যেমন,


<?php
$variable = "name";
$literally = 'My $variable will not print!\\n';
print($literally);
print "<br />";
$literally = "My $variable will print!\\n";
print($literally);
?>

 

এটি যে ফলাফল দেখাবে তা হল,

My $variable will not print!\n

My name will print

 

দুটি স্ট্রিং কীভাবে সমন্বয় অর্থাৎ কনক্যাটেনেট করবেন?

দুটি স্ট্রিং চলককে কনক্যাটেনেট করতে ডট অপারেটর ব্যবহার করতে হবে, যেমন,


<?php
$string1="Hello World";
$string2="1234";
echo $string1 . " " . $string2;
?>

এটি যে ফলাফল দেখাবে তা হল,

Hello World 1234

 

$_REQUEST ভেরিয়েবলের ব্যবহার কী?

পিএইচপি $_REQUEST ভেরিয়েবল $_GET, $_POST, ও $_COOKIE এসবের উপাদানকে ধারণ করে।

 

একটি পিএইচপি ফাইলের কন্টেন্টকে কীভাবে অন্য একটি পিএইচপি ফাইলে অন্তর্ভুক্ত করা যাবে?

দুটি ফাংশন ব্যবহার করে একটি পিএইচপি ফাইলের কন্টেন্টকে অন্য একটি পিএইচপি ফাইলে অন্তর্ভুক্ত করা যাবে,

include() ফাংশন ও require() ফাংশন

 

include()ফাংশন ও require()ফাংশনের মধ্যে পার্থক্য কী?

কোনও ফাইল লোডের সময় সমস্যা হলে require() ফাংশন ফেটাল এরর দেখায় এবং স্ক্রিপ্ট সম্পাদন থামিয়ে দেয় কিন্তু include() ফাংশন ওয়ার্নিং দিলেও স্ক্রিপ্ট সম্পাদন চালিয়ে যায়।

 

রিড অনলি মোডে ফাইল ওপেন করতে হলে কী করতে হবে?

পিএইচপি fopen() ফাংশন ব্যবহার করে এটি করা যাবে।

 

পিএইচপিতে কোনও ফাইল পড়তে কী করতে হবে?

fopen() ফাংশন দ্বারা ওপেন করা কোনও পিএইচপি ফাইলকে fread() ফাংশন দ্বারা পড়া যাবে। এক্ষেত্রে দুটি আর্গুমেন্টের প্রয়োজন হয়, ফাইল পয়েন্টার থাকতে হয় এবং ফাইলের লেন্থ বাইটে প্রকাশ করা হতে হবে।

 

কোনও পিএইচপি ফাইলের আকার কীভাবে জানা যাবে?

filesize() ফাংশন ব্যবহার করে।

 

কোনও ফাইল আছে না নেই তা পিএইচপিতে কীভাবে জানা যাবে?

file_exist() ফাংশন ব্যবহার করে কোনও ফাইলের অস্তিত্ব সম্পর্কে নিশ্চিত হওয়া যাবে।

 

ফাংশন প্যারামিটারে কি ডিফল্ট ভ্যালু আরোপ করা যাবে?

হ্যাঁ। ডিফল্ট ভ্যালু পেতে প্যারামিটার সেট করা যাবে যদি ফাংশনের কলার এটিকে পাশ না করে।

 

পিএইচপি ব্যবহার করে কীভাবে কুকিজ সেট করা যায়?

setcookie() ফাংশন ব্যবহার করে পিএইচপিতে কুকিজ সেট করা যায়।

setcookie(name, value, expire, path, domain, security);

 

পিএইচপিতে কীভাবে কুকিজ পাওয়া যায়?

বিভিন্নভাবে পাওয়া যায়, সবচেয়ে সহজ উপায় হল $_COOKIE বা $HTTP_COOKIE_VARSচলক ব্যবহার করে।

 

কোনও কুকিজ সেট করা আছে না নেই তা পিএইচপিতে কীভাবে জানা যাবে?

isset() ফাংশন ব্যবহার করে কোনও কুকিজ সেট করা আছে না নেই তা জানা যাবে।

 

কুকিজ কীভাবে ডিলিট করবেন?

কুকিজ ডিলিট করতে নামের আর্গুমেন্ট সহ setcookie() ফাংশন কল করতে হবে।

 

পিএইচপিতে সেশন শুরু করে কীভাবে?

সেশন শুরুর জন্য session_start() ফাংশন ব্যবহার করে কল করতে হয়।

 

পিএইচপিতে সেশন চলকে প্রবেশের জন্য কী করতে হবে?

সেশন চলক $_SESSION[] নামক এসোসিয়েটিভ অ্যারিতে সঞ্চিত থাকে। কোনও সেশনের সক্রিয় কালে এই চলকে প্রবেশ করা সম্ভব।

 

সেশন চলক সেট করা আছে না নেই তা পিএইচপিতে কীভাবে জানা যাবে?

isset() ফাংশন ব্যবহার করে সেশন চলক সেট করা আছে না নেই তা জানা যাবে।

 

একক সেশন চলককে আনসেট করতে কী করতে হবে?

একক সেশন চলককে আনসেট করতে নিচের মত করে কোড ব্যবহার করতে হবে,


<?php
   unset($_SESSION['counter']);
?>

 

পিএইচপিতে সেশন ডেস্ট্রয় করতে কি করা লাগে?

session_destroy() ফাংশন ব্যবহার করে এটি করা যায়।

 

পিএইচপিতে কীভাবে ইমেইল করা যায়?

mail() ফাংশন ব্যবহার করে পিএইচপিতে ইমেইল করা যায়। উদাহরণ দেয়া যাক,


mail( to, subject, message, headers, parameters );

 

 

পিএইচপিতে $_FILES চলকের কাজ কী?

এটি একটি বৈশ্বিক চলক, এটি দ্বিমাত্রিক অ্যারি এবং আপলোডকৃত ফাইলের সব তথ্য সঞ্চিত রাখে।

 

পিএইচপিতে আপলোডকৃত ফাইলে প্রবেশ করা যায় কেমন করে?

$_FILES[‘file’][‘tmp_name’] ফাংশন ব্যবহার করে। এটি ওয়েব সার্ভারের টেম্পোরারি ডিরেক্টরিতে আপলোডকৃত ফাইলে প্রবেশের ব্যবস্থা করে দেয়।

 

পিএইচপিতে আপলোডকৃত ফাইলের প্রকৃত নামে প্রবেশ করা যায় কেমন করে?

$_FILES[‘file’][‘name’]ফাংশন ব্যবহার করে।

 

পিএইচপিতে আপলোডকৃত ফাইলের সাইজে প্রবেশ করা যায় কেমন করে?

$_FILES[‘file’][‘size’] ফাংশন ব্যবহার করে।

 

পিএইচপিতে আপলোডকৃত ফাইলের কন্টেন্ট টাইপে প্রবেশ করা যায় কেমন করে?

$_FILES[‘file’][‘type’] ফাংশন ব্যবহার করে।

 

পিএইচপিতে আপলোডকৃত ফাইলের এরর কোডে প্রবেশ করা যায় কেমন করে?

$_FILES[‘file’][‘error’] ফাংশন ব্যবহার করে।

 

পিএইচপিতে $GLOBALSচলকের কাজ কী?

এই চলক স্ক্রিপ্টের গ্লোবাল স্কোপে অবস্থিত সব চলকের রেফারেন্স নির্দেশ করে।

 

পিএইচপিতে $_SERVER চলকের কাজ কী?

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

 

পিএইচপিতে $_COOKIE চলকের কাজ কী?

এটি সেইসব চলকের এসোসিয়েটিভ অ্যারি যারা এইচটিটিপি কুকিজ হয়ে কারেন্ট স্ক্রিপ্টে আসে।

 

পিএইচপিতে $_SESSION চলকের কাজ কী?

এরা সেইসব এসোসিয়েটিভ অ্যারি যারা কারেন্ট স্ক্রিপ্টে থাকা সেশন ভেরিয়েবল ধারণ করে।

 

পিএইচপিতে $_PHP_SELF চলকের কাজ কী?

এটি একটি স্ট্রিং যা পিএইচপি স্ক্রিপ্ট ফাইল নেম ধারণ করে।

 

পিএইচপিতে $php_errormsgচলকের কাজ কী?

এটি একটি চলক যা সর্বশেষ এরর ম্যাসেজের টেক্সট ধারণ করে ।

 

ereg()ফাংশন কীভাবে কাজ করে?

ereg()ফাংশন একটি স্ট্রিং খোঁজে,যা প্যাটার্ন দ্বারা নির্ধারিত। প্যাটার্ন পাওয়া গেলে ট্রু আর অন্য কিছু হলে ফলস দেখায়।

 

eregi()ফাংশন কীভাবে কাজ করে?

eregi()ফাংশন একটি স্ট্রিং খোঁজে,যা প্যাটার্ন দ্বারা নির্ধারিত।এই সার্চ কেস সেন্সেটিভ নয়।

 

split()ফাংশন কীভাবে কাজ করে?

split()ফাংশন স্ট্রিংকে বিভিন্ন অংশে বিভক্ত করে, স্ট্রিঙে অকারেন্সের প্যাটার্নের উপর অংশগুলোর ধরণ নির্ভর করে।

 

preg_match()ফাংশন কীভাবে কাজ করে?

preg_match()ফাংশন স্ট্রিঙে প্যাটার্ন খোঁজে, কাঙ্খিত প্যাটার্ন থাকলে ট্রু আর না থাকলে ফলস দেখায়।

 

preg_split()ফাংশন কীভাবে কাজ করে?

preg_split()ফাংশন প্রায় split()ফাংশনের মতই কাজ করে,কেবল রেগুলার এক্সপ্রেশনগুলো প্যাটার্নের ইনপুট প্যারামিটার হিসেবে কাজ করে।

 

ভুল হলে এক্সেপ্সন ক্লাস ব্যবহার করে কীভাবে এরর ম্যাসেজ পুনরুদ্ধার করা যাবে?

getMessage() ব্যবহার করে।

 

ভুল হলে এক্সেপ্সন ক্লাস ব্যবহার করে কীভাবে কোড অফ এক্সেপ্সন পুনরুদ্ধার করা যাবে?

getCode()মেথড ব্যবহার করে।

 

ভুল হলে এক্সেপ্সন ক্লাস ব্যবহার করে কীভাবে সোর্স ফাইলনেম পুনরুদ্ধার করা যাবে?

getFile()মেথড ব্যবহার করে।

 

ভুল হলে এক্সেপ্সন ক্লাস ব্যবহার করে কীভাবে সোর্স লাইন পুনরুদ্ধার করা যাবে?

getLine()মেথড ব্যবহার করে।

 

ভুল হলে এক্সেপ্সন ক্লাস ব্যবহার করে কীভাবে স্টাক স্ট্রেস পুনরুদ্ধার করা যাবে?

getTrace()মেথড ব্যবহার করে।

 

ভুল হলে কীভাবে ফরম্যাটিং স্ট্রিং অফ স্ট্রেস পুনরুদ্ধার করা যাবে?

getTraceAsString()মেথড ব্যবহার করে এটি করা যাবে।

 

পিএইচপি ব্যবহার করে কীভাবে বর্তমান দিন ও সময় পাব?

time()ফাংশন ব্যবহার করে।

 

getdate() ফাংশনের কাজ কী?

এটি টাইম ষ্ট্যাম্প গ্রহণ করে তারিখ সম্পর্কিত এসসিয়েটিভ অ্যারি রিটার্ন করে।

 

date() ফাংশনের কাজ কী?

এটি ফরম্যাটিং স্ট্রিং রিটার্ন করে, যা ডেট হিসেবে পরিগনিত হয়।

 

পিএইচপি ব্যবহার করে কীভাবে মাইএসকিউএল ডাটাবেস কানেক্ট করবেন?

ডাটাবেস কানেকশন খোলার জন্য mysql_connect ফাংশন ব্যবহার করা যাবে।


connection mysql_connect(server,user,passwd,new_link,client_flag);

 

পিএইচপি ব্যবহার করে কীভাবে মাইএসকিউএল ডাটাবেস তৈরি করবেন?

mysql_queryফাংশন ব্যবহার করে। এই ফাংশন দুটি প্যারামিটার ব্যবহার করে।


bool mysql_query( sql, connection );

 

পিএইচপি ব্যবহার করে কীভাবে মাইএসকিউএল ডাটাবেস বন্ধ করবেন?

mysql_close ফাংশন ব্যবহার করে।


bool mysql_close ( resource $link_identifier );

 

পিএইচপি ব্যবহার করে কীভাবে এক্সএমএল ডকুমেন্ট বিশ্লেষণ করবেন?

পিএইচপি৫ এর নতুন SimpleXML মডিউল ব্যবহার করে এটি করা যায়।

 

পিএইচপিতে কি ক্লাস তৈরি করা সম্ভব?

হ্যাঁ!

 

পিএইচপি ক্লাসে কন্সট্রাকটর ফাংশন কীভাবে সংযুক্ত করবেন?

__construct() ফাংশন ব্যবহার করে।

 

পিএইচপি ক্লাসে ডিসট্রাকটর ফাংশন কীভাবে সংযুক্ত করবেন?

__destruct()ফাংশন ব্যবহার করে।

 

পিএইচপিতে একই অবজেক্টের ভেতরে থাকা কোনও অবজেক্টের ক্ষেত্রে সেই অবজেক্টের রেফারেন্সে প্রবেশ করবেন কীভাবে?

$thisএকটি বিশেষ চলক, এটি সেই অবজেক্ট( অবজেক্ট নিজে) বোঝায়, এর মাধ্যমে সেই অবজেক্টের রেফারেন্সে প্রবেশ  করা যাবে।

 

পিএইচপিতে অবজেক্ট তৈরি করা যাবে কীভাবে?

একবার ক্লাস তৈরি হয়ে গেলে সেই ক্লাসের অধীনে যত খুশি অবজেক্ট তৈরি করা যাবে। যেমন,


$physics = new Books;
$maths = new Books;
$chemistry = new Books;

 

পিএইচপিতে ক্লাসের মেম্বার ফাংশনকে কীভাবে ডাকা যাবে?

অবজেক্ট তৈরির পরে সেই অবজেক্ট রিলেটেড মেম্বার ফাংশনকে ডাকা যাবে। যেমন,


$physics−>setTitle( "Physics for High School" );
$chemistry−>setTitle( "Advanced Chemistry" );
$maths−>setTitle( "Algebra" );
$physics−>setPrice( 10 );
$chemistry−>setPrice( 15 );
$maths−>setPrice( 7 );

 

ফাংশন ওভাররাইডিং কী?

শিশু শ্রেণীর ফাংশন ডেফিনিশন বড়দের ক্লাসে একই নামে ফাংশন ওভাররাইডিং হয়ে থাকে।

 

পিএইচপিতে ইন্টারফেস কী?

ইন্টারফেস ইমপ্লিমেন্টরের জন্য কমন ফাংশন নেমের ব্যবস্থা করে।

 

ফাইনাল কীওয়ার্ডের কাজ কী?

এটি পিএইচপি৫ এর নতুন সংযোজন, এটি কিছু ক্ষেত্রে শিশু শ্রেণীর ফাংশন ওভাররাইডিং প্রতিহত করে।

 

এরপরে কী?

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

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

 

এজাইল – পণ্য ব্যাকলগ (Agile Product Backlog)

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

পণ্য ব্যকলগ গুরুত্বপূর্ণ কেন?

  • এটি তৈরি করা হয় যাতে প্রত্যেকটি এবং সকল বৈশিষ্ট্য এর আনুমানিক হিসাব করা যায় ।
  • এটি পণ্যের রোডম্যাপ পরিকল্পনায় সাহায্য করে।
  • এটা বৈশিষ্ট্যসমূহের পুণরায় প্রাধান্য নির্ধারণ করতে সাহায্য করে, যাতে পণ্যের মান আরো বাড়ানো যায়।
  • এটি কোন বৈশিষ্ট্যটি প্রথম প্রাধান্য পাবে তা নির্ণয় করতে সাহায্য করে। সকল বৈশিষ্ট্য এর একসাথে র‌্যংক নির্ণয় করে এবং এরপরে মূল্য নির্ধারণ করে।

 

পণ্য ব্যাকলগের বৈশিষ্ট্য

  • প্রত্যেক পণ্যের একটি করে পণ্য ব্যকলগ থাকা উচিত যার বড় এবং আরো বড় বৈশিষ্টের সেট থাকতে পারে ।
  • একাধিক দল একটি ব্যাকলগ এর উপর কাজ করতে পারে।
  • ব্যবসায়িক মান, প্রযুক্তিগত মান, ঝুঁকি ব্যবস্থাপনা বা কৌশলগত ফিটনেস বৈশিষ্ট্যের উপর ভিত্তি করে পণ্যের র‌্যাঙ্ক নির্ণয় করা হয়।
  • উচ্চ র‌্যাংকিং সম্পন্ন  পণ্য রিলিজ পরিকল্পনা করার সময়ের ছোট ছোট ঘটনার উপর ভিত্তি করে এই পণ্যের পুনরাবৃত্তি করা হবে কিনা তা নির্ধারণ করে।

বাংলাদেশ এ তথ্য প্রযুক্তি এর ব্যবসার সুযোগ । IT Business Opportunities in Bangladesh

Chakri Khujbo na Debo Workshop on 2nd June, 2012 from Chakri Khujbo Na Chakri Debo on Vimeo.

ডট নেট নিউক ৬.১ ডেভলপার কুইক স্টার্ট (Dot Net Nuke (DNN) – 6.1 Quick Start Guide)

ডট নেট নিউক ৬.১ ডেভলপার কুইক স্টার্ট

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

 

ডিএনএন এর সর্বশেষ ভার্সন হচ্ছে ৭.xx

ডিএনএন ৬.১ ডেভলপার কুইক স্টার্ট পেজ এমন রিসোর্স হিসেবে ব্যবহৃত হয় যা কিনা ডিএনএন এক্সটেনশন ডেভলপারদের ডিএনএন ৬.১ এর সর্বশেষ সুবিধাদি পেতে সাহায্য করে। যদি কেউ ডট নেটের স্কিন অবজেক্ট, মডিউল বা প্রভাইডার ডেভলাপমেন্টে নতুন হয়ে থাকেন তাহলে তারা বিস্তারিত জানতে এই পেজ দেখতে পারেন, Module Development। ডিএনএন ৬.০তে নতুন এমন কিছু বিষয়ে রিভিউ দেখতে পারেন এই উইকি পেজ থেকে, DotNetNuke 6 Developer Quick Start

 

ক্লায়েন্ট রিসোর্স ম্যানেজমেন্ট

রিসোর্স

ব্লগ আর্টিকেল
Enhancements for working with JavaScript & CSS in 6.1

উইকি পেজ যা ডিএনএন ৬.১এর নতুন সংস্করণের বিস্তারিত তথ্য সংবলিত
Client Resource Managemen

এমন ব্লগ যা থার্ড পার্টি স্ক্রিপ্ট/জেএসএস ও ক্লায়েন্ট রিসোর্স ম্যানেজমেন্ট এপিআই এসব বিষয় নিয়ে আলোচনা ও সংশ্লিষ্ট সমস্যা সমাধানে সহায়তা করে।
DNN 6.1 JS/CSS File Combination: Potential Gotchas

এবং How to Enable Client Resource Management

 

মোবাইল এপিআইঃ ক্লায়েন্ট ক্যাপাবিলিটি ও ডিভাইস ডিটেকশন

এক্সেস কন্টেন্টে ব্যবহৃত ডিভাইসের ডিভাইস ক্যাপাবিলিটি বের করার জন্য ৬.১এর কিছু নতুন এপিআই আছে। ডিভাইস ডিটেকশন ব্রাউজার থেকে পাঠানো ইউজার এজেন্টের উপর নির্ভর করে।

  • Namespace: DotNetNuke.Services.ClientCapability namespace
  • IClientCapability device = ClientCapabilityProvider.CurrentClientCapability

IClientCapability এইচটিটিপি রিকোয়েস্টার (মোবাইল ডিভাইস, টিভি, ডেক্সটপ ইত্যাদি) সাপোর্টেড ক্যাপাবিলিটি দিয়ে থাকে। IclientCapabilityএর নিচের বৈশিষ্ট্যগুলো থেকে থাকে।

  • IsMobile-এটি মোবাইল ডিভাইস
  • IsTablet – এটি ট্যাবলেট দিভাইস
  • IsTouchScreen – এটি ক্লায়েন্টকে টাচ ক্যাপাবিলিটি দেয়
  • SupportsFlash – ক্লায়েন্টকে ফ্ল্যাশের সুবিধা দেয়
  • FacebookRequest – ক্লায়েন্টের ফেসবুক পেজ আছে কিনা। থাকলে ফেসবুক সংক্রান্ত তথ্য নিয়ে কাজ করে, যেমন ইউজার আইডি।
  • ScreenResolutionWidthInPixels – স্ক্রিনের প্রস্থ
  • ScreenResolutionHeightInPixels – স্ক্রিনের উচ্চতা
  • UserAgent – ক্লায়েন্টের ইউজার এজেন্ট
  • Capabilities – ক্লায়েন্ট সমর্থিত সব ক্যাপাবিলিটি সংবলিত একটি কী-ভ্যালু কালেকশন।

 

রিসোর্স

৬.১ এর মোবাইল এপিআই নিয়ে আলোচনা করে এমন ব্লগ আর্টিকেল
Mobile API’s in 6.1

মোবাইল এপিআইএর আভ্যন্তরীণ বিষয় নিয়ে আলোচনা করে এমন ব্লগ
Mobile Device Detection and Redirection – Under the Hood

এ সংশ্লিষ্ট একটি উইকি পেজ
IClientCapability interface

 

মোবাইল এপিআইঃ সাইট রিডাইরেকশন ম্যানেজমেন্ট

সাইট রিডাইরেকশন সেটিংএর জন্য ক্রুড(ক্রিয়েট রিড আপডেট ডিলিট) অপারেশন পারফর্মে এই এপিআইগুলো ব্যবহৃত হয়।

  • Namespace: DotNetNuke.Services.Mobile
  • Class: RedirectionController

নিচের প্রক্রিয়ায় ক্রুড অপারেশন সম্পন্ন হয়ে থাকে,

  • GetAllRedirections – সিস্টেমের সব পোর্টালের জন্য রিডাইরেকশন রুল নির্ধারণ
  • GetRedirectionsByPortal – একটি পোর্টালের জন্য রিডাইরেকশন রুল নির্ধারণ
  • GetRedirectionById – রুল আইডি অনুসারে রিডাইরেকশন রুল নির্ধারণ
  • Save – রিডাইরেকশন রুল সেভ(আপডেট বা ক্রিয়েট)করা।
  • Delete – রিডাইরেকশন রুল ডিলিট করা
  • DeleteRule – রুলের ম্যাচিং ক্রাইটেরিয়া ডিলিট করা
  • PurgeInvalidRedirections – সেইসব রিডাইরেকশন রুল ডিলিট করা যা সফট বা হার্ড ডিলিটেড পেজে সেট করা ছিল।

এই মেথড রুলসের ক্লিয়ার ব্যাড ডাটায় সাইট রিডাইরেকশন ইউআই লোডের আগে প্রয়োগ করা হয়।

 

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

  • GetRedirectUrl(string userAgent) – ইউজার এজেন্টের ভিত্তিতে রিডাইরেক্ট ইউআরএল গ্রহণ
  • GetRedirectUrl(string userAgent, int portalId, int currentTabId) – এইচটিটিপি কনটেক্সট ও পোর্টাল আইডির ভিত্তিতে রিডাইরেক্ট ইউআরএল গ্রহণ
  • GetFullSiteUrl – মোবাইল সাইটের কারেন্ট পেজের ভিত্তিতে সমতুল্য পূর্ণ সাইটের ইউআরএল গ্রহণ
  • GetFullSiteUrl(int portalId, int currentTabId) – মোবাইল সাইটের কারেন্ট পেজের ভিত্তিতে সমতুল্য পূর্ণ সাইটের ইউআরএল গ্রহণ
  • GetMobileSiteUrl – পূর্ণ সাইটের কারেন্ট পেজের ভিত্তিতে সমতুল্য মোবাইল সাইটের ইউআরএল গ্রহণ
  • GetMobileSiteUrl(int portalId, int currentTabId) – পূর্ণ সাইটের কারেন্ট পেজের ভিত্তিতে সমতুল্য মোবাইল সাইটের ইউআরএল গ্রহণ

 

রিসোর্স

৬.১ এর মোবাইল এপিআই নিয়ে আলোচনা করে এমন ব্লগ আর্টিকেল
Mobile API’s in 6.1

মোবাইল এপিআইএর আভ্যন্তরীণ বিষয় নিয়ে আলোচনা করে এমন ব্লগ
Mobile Device Detection and Redirection – Under the Hood

 

মোবাইল এপিআইঃ ডিভাইস প্রিভিউ ম্যানেজমেন্ট

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

  • Namespace: DotNetNuke.Services.Mobile
  • Class: PreviewProfileController

নিচের প্রক্রিয়ায় ক্রুড অপারেশন সম্পন্ন হয়ে থাকে,

  • GetProfilesByPortal – কোনও পোর্টালের জন্য প্রিভিউ প্রোফাইলের লিস্ট করে
  • GetProfileById – আইডি অনুসারে প্রিভিউ প্রোফাইল করে
  • Save – প্রিভিউ প্রোফাইল সেভ(আপডেট/ক্রিয়েট) করে
  • Delete – প্রিভিউ প্রোফাইল ডিলিট করে।

 

রিসোর্স

৬.১ এর মোবাইল এপিআই নিয়ে আলোচনা করে এমন ব্লগ আর্টিকেল
Mobile API’s in 6.1

মোবাইল এপিআইএর আভ্যন্তরীণ বিষয় নিয়ে আলোচনা করে এমন ব্লগ
Mobile Device Detection and Redirection – Under the Hood

 

মোবাইল এপিআইঃ ফেসবুক ফ্যান পেজ

IclientCapabilityএর ফেসবুক রিকোয়েস্ট প্রপার্টি ফেসবুককে সংশ্লিষ্ট তথ্য দেয় যদি কারেন্ট পেজ ফেসবুক ফ্যান পেজকে সার্ভ করতে থাকে। FacebookRequest এর বৈশিষ্ট্যগুলো দেখায় যা এখান থেকে জেনে নেয়া যেতে পারে, https://developers.facebook.com/docs/authentication/signed_request/. সবচেয়ে গুরুত্বপূর্ণ বৈশিষ্ট্য হল পেজলাইকড। ফেসবুক রিকোয়েস্টের নিচের বৈশিষ্ট্যগুলো থেকে থাকে,

  • PageLiked – ইউজার পেজে লাইক দিয়েছে কিনা
  • Algorithm – রিকোয়েস্ট সাইনের কৌশল
  • OauthToken – Graph API বা Legacy REST API তে পাশ করে দেয়া যাবে এমন টোকেন
  • Expires – oauth_token এক্সপায়ার করার ক্ষণতারিখ
  • IssuedAt – রিকোয়েস্ট সাইনড হওয়ার ক্ষণতারিখ
  • UserID – কারেন্ট ইউজারের ফেসবুক ইউজার আইডেন্টিফায়ার(এটি ইউজার আইডি নয়)
  • UserLocale – ইউজারের লোকাল
  • UserCountry – ইউজারের দেশ
  • UserMinAge – ইউজারের সর্বনিম্ন বয়সসীমা
  • UserMaxAge – ইউজারের সর্বোচ্চ বয়সসীমা
  • PageId – পেজের আইডি
  • PageUserAdmin – ব্যবহারকারী কি পেজের এডমিন কিনা
  • ProfileId – পেজ আইডি, যদি অ্যাপ লোড করা হয়ে থাকে
  • AppData – কোয়েরি স্ট্রিং প্যারামিটারের কন্টেন্ট, app_data নামে ডাকা হয়
  • RawSignedRequest – ফেসবুক ইন পেজ থেকে আসা র-সাইন রিকোয়েস্ট
  • IsValid – এটি হল ভ্যালিড ফেসবুক রিকোয়েস্ট

 

মোবাইল স্কিন অবজেক্ট

ডেক্সটপ ও মোবাইল সাইটের সংশ্লিষ্ট লিঙ্ক প্রভাইড করে এমন নতুন দুটি স্কিন অবজেক্ট আছে,

  • LinkToFullSite – মোবাইল সাইটের স্কিন ফুটারে যুক্ত হওয়া দুটি স্কিন অবজেক্ট
  • LinkToMobileSite – ডেক্সটপ সাইটের স্কিন ফুটারে যুক্ত হওয়া দুটি স্কিন অবজেক্ট

LinkToFullSite স্কিন অবজেক্ট ব্যবহার করে কোনও ব্যবহারকারী মোবাইল সাইট থেকে মূল সাইটে গেলে ব্রাউজার ক্লোজ বা ইউজার লগ আউট করার আগ পর্যন্ত কোনও রিডাইরেকশন হবে না।

স্কিন অবজেক্ট \Website\admin\skins ফোল্ডারে থাকে।

 

সাইট গ্রুপ

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

 

DNN মডিউল তৈরীর সরঞ্জাম (Tools to develop Modules for DNN)

DNN এর পূর্ন রুপ হচ্ছে ডটনেট নিঊক।

DNN এর মডিউল তৈরী  করা যেতে পারে অনেক গুলো সরঞ্জাম দিয়ে। এবং তার মধ্যে সব থেকে সাধারন সরঞ্জাম/Tool হচ্ছে ভিজুয়াল স্টুডিও ২০১০ এবং ২০১২।

মডিউল তৈরী করার প্রথম ধাপ হলো মডিউল তৈরীর সবরকম পরিবেশ প্রস্তত করে রাখা। সে জন্য আপনাকে মডিউল তৈরীর টেমপ্লেট ইনস্টল করতে হবে। এবং এটা ইনস্টলের মাধ্যমে আপনি একটা মডিউল প্রকল্প/project তৈরি প্রক্রিয়ার মধ্যে যেতে পারেন।

এটা একটা খুব ই সাধারন ঘটনা যে মডিউল কিছু বাছাই করা SQL স্ক্রিপ্ট সরবরাহ করে ডাটা রাখার জন্য, তাই সাধারন ভাবেই মডিউলের থাকতে হয় নিজস্ব টেবিল যেখানে ডাটা স্টোর করে রাখা হয়।

মডিউল উন্নয়নের/তৈরীর  জন্য দ্বিতীয় ধাপে আপনার যে সকল সফটওয়্যার লাগবে তা নিম্ন দেওয়া হলো

  1. ভিজুয়াল স্টুডিও
  2. SQL Server
  3. IIS
  4. ReShaper
  5. Core API Help File

 

ভিজুয়াল স্টুডিও

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

SQL Server

SQL Server হলো মাক্রোসফটের ডাটাবেজ সফটওয়্যার ।এটা ও একটি সফটওয়্যার যেটি মডিউল উন্নয়নের
জন্য  ব্যবহার করা হয়।SQL Server ডাটাকে স্টোর করে রাখার জন্য ও ব্যবহার করা হয়।
এটা সত্য যে আপনি SQL সরাসরি যোগাযোগ না করে ও মডিউল উন্নয়ন করতে পারবেন

IIS

IIS এর পূর্ন রুপ হচ্ছে ইন্টারনেট ইনফরমেশন সারভিসেস।সাধারনত উইন্ডোজ চালিত কম্পিউটারে IIS. সফটওয়্যার ইনস্টল দেওয়া থাকে মাইক্রোসফট উইন্ডোজ ব্যবহার কারীদের ইন্টারনেট ভিত্তিক সেবা প্রদান করার জন্য।

ReShaper

ReShaper একটি সফটওয়্যার  যেটা ভিজুয়াল স্টুডিও এর সাথে  ব্যবহার করা হয় । এটা খুব দরকারি নয় যে মডিউল উন্নয়নের জন্য ReShaper ব্যবহার করতেই হবে।তবে মডিউল উন্নয়নের/তৈরীর বিশেষ সাহায্যকারী রুপে ব্যবহার করা হয় ReShaper।

Core API Help File

API এর পূর্ন রুপ হচ্ছে Application Programming Interface. সব সময় DNN এর একটি নতুন সংস্করণ এর সাথে একটি নতুন কোর এপিআই এবং একটি হেল্প ফাইল প্রকাশিত হয় কোডপ্লেক্সে।

কোর এপি আই ফাইলের একটি সার্চ ফিচার আছে।

 

C এর সাথে Python প্রোগ্রামিং এক্সটেনশন (Python Extension Programming with C)

C এর সাথে Python প্রোগ্রামিং এক্সটেনশন

C, C++ অথবা Java প্রোগ্রামিং এর যেকোন কোড Python script এর সাথে ইন্টেগ্রেট/ রূপান্তর করা যায়, যাকে Python এক্সটেনশন বলে। Python এক্সটেনশন ফাইলগুলো স্বাভাবিক C লাইব্রেরীর মত, Unix অপারেটিং সিস্টেম এ .so ফরম্যাট ও Windows মেশিনে.dll ফরম্যাটের হয়।

 

এক্সটেনশন লেখার পূর্বশর্ত

Python এক্সটেনশন লিখতে হলে Python হেডার ফাইল এর দরকার পড়ে Unix মেশিনে এসব ক্ষেত্রে python2.5-dev নামক একটি প্যাকেজ ইনস্টল করার দরকার হয়। Windows মেশিনে অবশ্য এই হেডার ফাইল গুলো বাইনারি Python ইনস্টলার প্যাকেজের সাথেই থাকে।

প্রথম দিকে Python extension মোডিউল তৈরি করতে হলে কোডটিতে চার ধরনের ফাইল সাজাতে হবে। যেমন,

  • হেডার ফাইলh.
  • C ফাংশন functions (যেগুলো মোডিউল এর ইন্টারফেস হিসেবে ব্যবহৃত হবে)।
  • ফাংশনের একটি টেবিল (Python developer দের জন্য দরকার)
  • একটি ইনিশিয়ালাইজেশন ফাংশন

 

হেডার ফাইল Python.h

Python API এ ঢোকার জন্য Python.h হেডার ফাইলটিকে C সোর্স ফাইল এর অন্তর্গত করে Python ইন্টারপ্রেটার এর সাথে এক্সটেনশন মোডিউল ইন্টেগ্রেট করতে হবে। C ফাংশনগুলো নিচের তিন রকমের হতে পারে।


static PyObject *MyFunction( PyObject *self, PyObject *args );

static PyObject *MyFunctionWithKeywords(PyObject *self,
                                 PyObject *args,
                                 PyObject *kw);

static PyObject *MyFunctionWithNoArgs( PyObject *self );

 

প্রতিটি স্টেটমেন্টই ফলাফল হিসেবে একটি Python object দিবে। Python এ C এর মত কোন ভয়েড ফাংশন নেই। ভয়েড এর ক্ষেত্রে, Python এর Nonevalue’র সমতুল্য C value পাওয়া যাবে। Python headers গুলো এই কাজ করার জন্য Py_RETURN_NONE নামের ম্যাক্রো ফাইল ঠিক করে।

এ ধরনের Python এক্সটেনশনে ব্যবহৃত C ফাংশন গুলোকে স্ট্যাটিক (স্থিতিশীল) ফাংশন বলে, কারন এক্সটেনশন মোডিউলের বাইরে এদের কোন ব্যবহার নেই। Python মোডিউল ও Python ফাংশন গুলোর নাম একত্রিত করে C ফাংশনের নামগুলো ঠিক করা হয়। নিচের উদাহরণটিক লক্ষ্য করি,


static PyObject *module_func(PyObject *self, PyObject *args) {
/* Do your stuff here. */
Py_RETURN_NONE;
}


 

এই Python ফাংশনটির নাম func,  এবং এটি module নামক মোডিউল এর ভেতর অবস্থিত।

 

Method Mapping Table (মেথড ম্যাপিং টেবিল)

মেথড টেবিল হচ্ছে নিচের PyMethodDef স্ট্রাকচারের একটি সাধারণ বিন্যাস (array)।

struct PyMethodDef {   char *ml_name;   PyCFunction ml_meth;   int ml_flags;   char *ml_doc;};

নিচে এই স্ট্রাকচারের সদস্য গুলোর বর্ননা দেয়া হলঃ

  • ml_name:Python ইন্টারপ্রেটার প্রোগ্রামে ব্যবহৃত হবার সময় যেই নাম ব্যবহার করে।
  • ml_meth:ফাংশনের লোকেশন।
  • ml_flags:এটা ইন্টারপ্রেটারকে ধারণা দেয় যে, ml_meth কোন সংকেতটি ব্যবহার করছে (METH_VARARGS, METH_KEYWORDS কিংবা METH_NOARGS)
  • ml_doc: ফাংশনের docstring, প্রোগ্রামার কোন কিছু না লেখলে এটা বাদ যাবে।

উপযুক্ত মেম্বারগুলোর জন্য, এই টেবিলটি একটি শূন্য মানের সেন্টিনেল (sentinel) এর সাহায্যে বাতিল করতে হবে। উদাহরন হিসেবে, উপরের ফাংশনের জন্য, নিচের মেথড ম্যাপিং টেবিলটি সম্ভবঃ


static PyMethodDef module_methods[] = {
   { "func", (PyCFunction)module_func, METH_NOARGS, NULL },
   { NULL, NULL, 0, NULL }
};

 

ইনিশিয়ালাইজেশন ফাংশনঃ

এক্সটেনশন মোডিউলের সর্বশেষ অংশ হচ্ছে ইনিশিয়ালাইজেশন ফাংশন। মোডিউল লোড হবার পড়ে Python ইন্টারপ্রেটার এই ফাংশনটি ব্যবহার করে। এই ফাংশনের নামকরন initModule আকারের হয় (Module হচ্ছে মোডিউলটির নাম)।।

আপনি যেই লাইব্রেরী তৈরি করবেন সেটা থেকেই ইনিশিয়ালাইজেশন ফাংশন এক্সপোর্ট করা হবে। Python হেডার ফাইল গুলো PyMODINIT_FUNC ফাংশনের সাহায্যে কম্পাইলেশনের সময় বিভিন্ন পরিস্থিতি অনুযায়ী এই এক্সপোর্টটি করে থাকে। সেক্ষেত্রে আপনাকে এটি ফাংশন সংজ্ঞায়িত করার সময় ব্যবহার করতে হবে। C ইনিশিয়াল ফাংশন সাধারণত নিচের কাঠামো অনুযায়ী হয়ঃ


PyMODINIT_FUNC initModule() {
   Py_InitModule3(func, module_methods, "docstring...");
}

 

এখানে, Py_InitModule3 ফাংশনের ৩টি মেম্বার হচ্ছে−

  • func: যে ফাংশনটি এক্সপোর্ট করা হবে।
  • module_methods:ম্যাপিং টেবিলের নাম।
  • docstring: এক্সটেনশনে ব্যবহৃত কমেন্ট।

যেমন,


#include <Python.h>

static PyObject *module_func(PyObject *self, PyObject *args) {
   /* Do your stuff here. */
   Py_RETURN_NONE;
}

static PyMethodDef module_methods[] = {
   { "func", (PyCFunction)module_func, METH_NOARGS, NULL },
   { NULL, NULL, 0, NULL }
};

PyMODINIT_FUNC initModule() {
   Py_InitModule3(func, module_methods, "docstring...");
}

 

নিচের উদাহরণটি উপরের কনসেপ্ট গুলোর আরেকটি প্রয়োগঃ


#include <Python.h>

static PyObject* helloworld(PyObject* self)
{
    return Py_BuildValue("s", "Hello, Python extensions!!");
}

static char helloworld_docs[] =
    "helloworld( ): Any message you want to put here!!\n";

static PyMethodDef helloworld_funcs[] = {
    {"helloworld", (PyCFunction)helloworld, 
     METH_NOARGS, helloworld_docs},
    {NULL}
};

void inithelloworld(void)
{
    Py_InitModule3("helloworld", helloworld_funcs,
                   "Extension module example!");
}

 

এখানে Py_BuildValue ফাংশনটি Python এর মান (value) তৈরি করে। উপরের কোডটি hello.c ফাইল এ সেভ করুন. এখন আমরা দেখবো কিভাবে Python script এর এই মোডিউলটিকে ইনস্টল ও কম্পাইল করা যায়।

 

এক্সটেনশন তৈরি ও ইন্সটল করাঃ

distutils প্যাকেজ এর সাহায্যে সহজেই Python এর অরিজিনাল মোডিউল ও এক্সটেনশন সঠিকভাবে বন্টন করা যায়। মোডিউল গুলো সোর্স আকারে ভাগ করা থাকে, এবং setup.py  এর সাহায্যে তৈরি ও ইন্সটল করা হয়। উপরের মোডিউলটির জন্য নিম্নোক্ত setup.py স্ক্রিপ্টটি তৈরি করতে হবে।


from distutils.core import setup, Extension
setup(name='helloworld', version='1.0',  \
      ext_modules=[Extension('helloworld', ['hello.c'])])

 

এখন নিচের কমান্ডটি প্রয়োগ করলে তা সঠিক কম্পাইলার, লিঙ্কার কমান্ড এবং ফ্ল্যাগ এর সাহায্যে প্রয়োজনীয় কম্পাইলেশন, সংযোজন করবে, ও সঠিক ডিরেক্টরিতে ফলাফলস্বরূপ ডাইনামিক লাইব্রেরী কপি করবে ।


$ python setup.py install

 

Unix সিস্টেমে আপনাকে রুট হিসেবে এই কমান্ডটি রান করাতে হবে যাতে করে সাইট-প্যাকেজ ডিরেক্টরি তে লেখার পারমিশন থাকে। Windows এর জন্য অবশ্য এটি কোন সমস্যা না।

 

Importing Extensions

একবার এক্সটেনশন ইন্সটল করা হলে, আপনি সেই এক্সটেনশন Python স্ক্রিপ্টে এভাবে ইম্পোর্ট করতে পারবেন।


#!/usr/bin/python
import helloworld

print helloworld.helloworld()

 

এই মডেলটি নিচের ফলাফল দিবে।


Hello, Python extensions!!

 

 

Passing Function Parameters

যেহেতু আপনি এমন ফাংশন চান যেটা আর্গুমেন্ট গ্রহণ করতে পারে, তাই নিচের যেকোনো C function ব্যবহার করতে পারেন। উদাহরণস্বরূপ, নিচের ফাংশনটি এমনভাবে সংজ্ঞায়িত করা যেতে পারে,


static PyObject *module_func(PyObject *self, PyObject *args) {
   /* Parse args and do something interesting here. */
   Py_RETURN_NONE;
}

 

নতুন ফাংশনের জায়গা সম্বলিত মেথড টেবিলটি এমন হবেঃ


static PyMethodDef module_methods[] = {
   { "func", (PyCFunction)module_func, METH_NOARGS, NULL },
   { "func", module_func, METH_VARARGS, NULL },
   { NULL, NULL, 0, NULL }
};

 

C ফাংশনের PyObject থেকে আর্গুমেন্ট এক্সট্রাক্ট করার জন্য API PyArg_ParseTuple ফাংশনটি ব্যবহার করতে পারেন। PyArg_ParseTuple এর প্রথম আর্গুমেন্টটি হচ্ছে args আর্গুমেন্ট। এই অবজেক্টটিকে আপনি parsing করবেন। দ্বিতীয় আর্গুমেন্টটি হবে এমন একটি ফরম্যাট স্ট্রিং যেটা আপনি যেভাবে আর্গুমেন্ট গুলো চান সেভাবে বর্ননা করবে। প্রতিটি আর্গুমেন্ট ফরম্যাট স্ট্রিং এর এক বা একাধিক ক্যারেক্টার দ্বারা প্রকাশিত।


static PyObject *module_func(PyObject *self, PyObject *args) {
   int i;
   double d;
   char *s;

   if (!PyArg_ParseTuple(args, "ids", &i, &d, &s)) {
      return NULL;
   }
   
   /* Do something interesting here. */
   Py_RETURN_NONE;
}

 

নতুন মোডিউলের ভার্সন কম্পাইল ও ইম্পোর্ট করলে নতুন ফাংশনে যেকোনো ধরনের যেকোনো সংখ্যক আর্গুমেন্ট সংযুক্ত করা যায়। যেমন,


module.func(1, s="three", d=2.0)
module.func(i=1, d=2.0, s="three")
module.func(s="three", d=2.0, i=1)


এখানে আপনি আপনার প্রয়োজন মত আরও বৈচিত্র আনতে পারেন।

PyArg_ParseTuple  ফাংশন

PyArg_ParseTuple ফাংশনের স্ট্যান্ডার্ড সিগ্নেচার হচ্ছেঃ


int PyArg_ParseTuple(PyObject* tuple,char* format,...)

 

এই ফাংশনটি ভুল হলে ০ মান আসবে, আর সঠিক হলে শূন্য ছাড়া অন্য কোন মান আসবে। এখানে tuple হচ্ছে PyObject*, যা C ফাংশনের দ্বিতীয় আর্গুমেন্ট, এবং format হচ্ছে একটি C স্ট্রিং, যা আবশ্যিক (mandatory) ও ঐচ্ছিক (optional) আর্গুমেন্ট গুলো বর্ননা করে।

নিচে PyArg_ParseTuple ফাংশনের ফরম্যাট কোড গুলো দেয়া হলঃ

Code C type Meaning
c char A Python string of length 1 becomes a C char.
d double A Python float becomes a C double.
f float A Python float becomes a C float.
i int A Python int becomes a C int.
l long A Python int becomes a C long.
L long long A Python int becomes a C long long
O PyObject* Gets non-NULL borrowed reference to Python argument.
s char* Python string without embedded nulls to C char*.
s# char*+int Any Python string to C address and length.
t# char*+int Read-only single-segment buffer to C address and length.
u Py_UNICODE* Python Unicode without embedded nulls to C.
u# Py_UNICODE*+int Any Python Unicode C address and length.
w# char*+int Read/write single-segment buffer to C address and length.
z char* Like s, also accepts None (sets C char* to NULL).
z# char*+int Like s#, also accepts None (sets C char* to NULL).
(…) as per … A Python sequence is treated as one argument per item.
| The following arguments are optional.
: Format end, followed by function name for error messages.
; Format end, followed by entire error message text.

Returning Values

Py_BuildValue অনেকটা PyArg_ParseTuple এর মত ফরম্যাট স্ট্রিং এ কাজ করে নতুন করে তৈরি মানের পরিবর্তে আসল মান দেয়। কিভাবে এড ফাংশন বাস্তবায়ন করতে হয় তার একটি উদাহরণ নিচে দেয়া হলঃ

static PyObject *foo_add(PyObject *self, PyObject *args) {   int a;   int b;    if (!PyArg_ParseTuple(args, “ii”, &a, &b)) {     return NULL;   }   return Py_BuildValue(“i”, a + b);}

Python এ করলে নিচের মত হবেঃ

def add(a, b):   return (a + b)

আপনি Python এর লিস্ট এর সাহায্যে ফাংশনটি থেকে দুই ধরনের ফলাফল দেখাতে পারেন, যেমনঃ


static PyObject *foo_add(PyObject *self, PyObject *args) {
   int a;
   int b;

   if (!PyArg_ParseTuple(args, "ii", &a, &b)) {
      return NULL;
   }
   return Py_BuildValue("i", a + b);
}

 

এই কোডটি Python এ করা হলে এরকম হবেঃ


def add(a, b):
   return (a + b)

 

Py_BuildValue ফাংশন

Py_BuildValue ফাংশনের স্ট্যান্ডার্ড সিগ্নেচার হচ্ছে −


PyObject* Py_BuildValue(char* format,...)

 

এখানে format একটি C স্ট্রিং যা কোন Python অবজেক্ট তৈরি হবে সেটার বর্ননা করে। নিচের Py_BuildValue আর্গুমেন্ট গুলো প্রকৃতপক্ষে C এর মান, যা থেকে প্রোগ্রামটির রেসাল্ট তৈরি হয়। PyObject* এর ফলাফল একটি নতুন ইন্টারফেস তৈরি করে। নিচের টেবিলে প্রচলিত কিছু কোড স্ট্রিং দেয়া হল, যার মধ্যে মাঝে মাঝে এক বা একাধিক কোড স্ট্রিং ফরম্যাট এ সংযুক্ত হয়।

Code C type Meaning
c char A C char becomes a Python string of length 1.
d double A C double becomes a Python float.
f float A C float becomes a Python float.
i int A C int becomes a Python int.
l long A C long becomes a Python int.
N PyObject* Passes a Python object and steals a reference.
O PyObject* Passes a Python object and INCREFs it as normal.
O& convert+void* Arbitrary conversion
s char* C 0-terminated char* to Python string, or NULL to None.
s# char*+int C char* and length to Python string, or NULL to None.
u Py_UNICODE* C-wide, null-terminated string to Python Unicode, or NULL to None.
u# Py_UNICODE*+int C-wide string and length to Python Unicode, or NULL to None.
w# char*+int Read/write single-segment buffer to C address and length.
z char* Like s, also accepts None (sets C char* to NULL).
z# char*+int Like s#, also accepts None (sets C char* to NULL).
(…) as per … Builds Python tuple from C values.
[…] as per … Builds Python list from C values.
{…} as per … Builds Python dictionary from C values, alternating keys and values.

{…} কোডটি C এর জোড় সংখ্যক মানের জন্য ডিকশনারি তৈরি করে, যেমন Py_BuildValue(“{issi}”,23,”zig”,”zag”,42) কোডটি Python এর মত এই ডিকশনারিটি তৈরি করেঃ {23:’zig’,’zag’:42}.

পাইথন গ্রাফিক্যাল ইউজার ইন্টারফেস প্রোগ্রামিং (Tkinter) (Python GUI Programming (Tkinter))

Python GUI Programming (Tkinter)

গ্রাফিকাল ইউসার ইন্টারফেস (GUIs) ডেভেলাপ করার জন্য Python বেশ কিছু অপশন দিয়ে থাকে। এদের মধ্যে সবচেয়ে গুরুত্বপূর্ন হল Tkinter (Python এর সাথে সরবরাহকৃত GUI toolkit এর ইন্টারফেস), wxPython (ওপেন-সোর্স Python ইনটারফেস, http://wxpython.org এ পাওয়া যাবে), এবং JPython (Java’র জন্য প্রচলিত Python পোর্ট, http://www.jython.org এ পাওয়া যাবে)। এছাড়াও আরও অনেক ইন্টারফেস আছে, যেগুলো ইন্টারনেটে পাওয়া যাবে।

 

Tkinter Programming

Tkinter হচ্ছে Python এর জন্য আদর্শ GUI লাইব্রেরী, এর সাথে Python কে সংযুক্ত করলে দ্রুত ও সহজেই GUI অ্যাপ্লিকেশন তৈরি করা যায়। Tkinter এর জন্য Tk GUI toolkit একটি শক্তিশালী object-oriented ইন্টারফেস দেয়।

Tkinter দিয়ে GUI application তৈরি করার স্টেপ গুলো হচ্ছেঃ

  • Tkinter মোডিউল ইম্পোর্ট করতে হবে।
  • মেইন উইন্ডো তে GUI অ্যাপ্লিকেশন ক্রিয়েট করতে হবে।
  • উপরের এক বা একাধিক widgets GUI অ্যাপ্লিকেশনে যোগ করতে হবে।
  • ইউসার এর ট্রিগার করা প্রতিটি ইভেন্ট অনুযায়ী কাজ করার জন্য মেইন ইভেন্ট লুপে এন্টার করুন ।

 

উদাহরণঃ


#!/usr/bin/python

import Tkinter
top = Tkinter.Tk()
# Code to add widgets will go here...
top.mainloop()

 

এর ফলে নিচের উইন্ডোটি তৈরি হবে।

Tkinter Widgets

Tkinter, GUI application এ ব্যবহৃত বিভিন্ন ধরনের কন্ট্রোল দিয়ে থাকে, যেমন বাটন, লেবেল, টেক্সট বক্স ইত্যাদি। এই কন্ট্রোল গুলোকে Widgets বলে। বর্তমানে Tkinter এ মোট ১৫ ধরনের widgets আছে। নিচে এদের বর্ননা দেয়া হল।

 

অপারেটর বর্ণনা
Button আপনার অ্যাপ্লিকেশন এ বাটন প্রদর্শনের জন্য ব্যবহৃত হয়।
Canvas আপনার অ্যাপ্লিকেশন এ বিভিন্ন আকৃতি অঙ্কনের জন্য ব্যবহৃত হয়। যেমন – লাইন, ovals, বহুভুজ এবং আয়তক্ষেত্র ইত্যাদি।
Checkbutton checkboxe হিসেবে অপশন প্রদর্শনের জন্য ব্যবহৃত হয়। ইউজার একইসাথে একাধিক অপশন নির্বাচন করতে পারে।
Entry ব্যবহারকারীর কাছ থেকে মান গ্রহণ করার ক্ষেত্রে সকল উইজেট এর জন্য এক লাইনের টেক্সট ফিল্ড প্রদর্শনর জন্য ব্যবহৃত হয়।
Frame একটি ধারক উইজেট হিসেবে অন্যান্য উইজেট সজ্জিত করার জন্য ব্যবহৃত হয়।
Label অন্যান্য উইজেট এর জন্য এক লাইনের ক্যাপশন দেয়ার জন্য ব্যবহৃত হয়। এটি ইমেজও ধারণ করতে পারে।
Listbox ব্যবহারকারীদের জন্য একটি তালিকা দেখানোর জন্য ব্যবহৃত হয়।
Menubutton আপনার অ্যাপ্লিকেশন এ মেনু প্রদর্শনের জন্য ব্যবহৃত হয়।
Menu The Menu widget is used to provide various commands to a user. These commands are contained inside Menubutton.
Message ব্যবহারকারীর কাছ থেকে মান গ্রহণ করার জন্য একাধিক লাইনের টেক্সট ফিল্ড প্রদর্শনে ব্যবহৃত হয়।
Radiobutton রেডিও বাটন হিসেবে অপশন প্রদর্শনের জন্য ব্যবহৃত হয়। ইউজার একটিমাত্র অপশন নির্বাচন করতে পারে।
Scale স্লাইডার উইজেট প্রদানের জন্য ব্যবহৃত হয়।
Scrollbar স্ক্রলবার উইজেট যেমন তালিকা বাক্স এ বিভিন্ন উইজেট এর স্ক্রলিং সামর্থ্য যোগ করার জন্য ব্যবহার করা হয়
Text টেক্সট উইজেটের একাধিক লাইনে লেখা দেখাতে ব্যবহার করা হয়
Toplevel একটি পৃথক উইন্ডো ধারক প্রদান করতে ব্যবহৃত হয়
Spinbox Spinbox widget অন্যান্য সাধারণ ফাঁকা উইজেট থেকে ভিন্নতর। এটি নির্দিষ্ট সংখ্যক মান হতে  একটি নির্বাচন করতে ব্যবহৃত হয়।
PanedWindow এটি একটি ধারক উইজেট যা অনুভূমিকভাবে বা উল্লম্বভাবে সাজিয়ে যেকোন সংখ্যক ফলক (panes) ধারণ করতে পারে।
LabelFrame labelframe একটি সহজ ধারক উইজেট। এর প্রাথমিক উদ্দেশ্য হল জটিল উইন্ডো বিন্যাস এর জন্য একটি spacer বা ধারক হিসেবে কাজ করা।
tkMessageBox এই মডিউলের সাহায্যে আপনি আপনার অ্যাপ্লিকেশনে মেসেজ বাক্সে প্রদর্শন করতে ব্যবহৃত হয়।

 

স্ট্যান্ডার্ড এট্রিবিউট

নিচে কিছু সাইজ, কালার, ফন্ট সহ কিছু স্ট্যান্ডার্ড এট্রিবিউট এর স্পেসিফিকেশন দেয়া হলঃ

 

Geometry Management

সব Tkinter widgets ই বিশেষ কিছু geometry management মেথড অনুসরণ করতে পারে, যেগুলো parent widget area এর সাহায্যে widgets সাজাতে পারে। Tkinter নিচের geometry manager মেথডগুলো তৈরি করে।

  • Pack()Method – widgets গুলোকে parent widget এ রাখার আগে ব্লক আকারে সাজিয়ে নেয়।
  • Grid()Method – widgets গুলোকে টেবিল আকারে সাজায়।
  • Place()Method – widgets গুলোকে parent widget এর একটি নির্দিষ্ট স্থানে রাখে।