ডট নেট নিউক ৬.১ ডেভলপার কুইক স্টার্ট (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 এর একটি নির্দিষ্ট স্থানে রাখে।

 

পাইথন প্রোগ্রামিং : তালিকা (Python Lists in Bangla)

1.11 Python Lists

Python এর সবচেয়ে বেসিক ডাটা স্ট্রাকচার হচ্ছে sequence. এর প্রতিটি উপাদান এর সাথে একটি নাম্বার assign করা থাকে, যা এর অবস্থান/ ইন্ডেক্স নির্দেশ করে। সর্ব প্রথম ইন্ডেক্স হচ্ছে ০, তারপরেরটা ১, তারপরেরটা ২… ইত্যাদি !

Python এ ৬ ধরনের built-in sequence আছে, তাদের মধ্যে সবচেয়ে প্রচলিত হচ্ছে lists আর tuples। sequence টাইপের সাহায্যে indexing, slicing, adding, multiplying, ও checking করা যায়। এছাড়াও Python এর বিল্ট-ইন ফাংশনের সাহায্যে যেকোনো sequence এর দৈর্ঘ্য হিসেব করা যায় যার সাহায্যে দীর্ঘতম ও ক্ষুদ্রতম প্রোসেস বের করা যায়।

 

Python Lists

List হচ্ছে Python এর সবচেয়ে বৈচিত্রপূর্ণ ডাটা টাইপ, যেটি থার্ড ব্র্যাকেট [ ] এর ভেতর কমার সাহায্যে উপাদান সহ প্রকাশ করা হয়। List এর উপাদানগুলো একরকম ডাটা টাইপ হবার প্রয়োজন নেই। যেমন,


list1 = ['physics', 'chemistry', 1997, 2000];
list2 = [1, 2, 3, 4, 5 ];
list3 = ["a", "b", "c", "d"];

 

স্ট্রিং এর মত, লিস্টের মান ০ থেকে শুরু হয়, এবং একে sliced, concatenated করা যায়।

 

Accessing Values in Lists

List এর মান print করতে [ ] ও ইনডেক্স নাম্বার (০, ১ ইত্যাদি) ব্যবহার করা হয়। যেমন,


#!/usr/bin/python

list1 = ['physics', 'chemistry', 1997, 2000];
list2 = [1, 2, 3, 4, 5, 6, 7 ];

print "list1[0]: ", list1[0]
print "list2[1:5]: ", list2[1:5]

 

উপরের প্রোগ্রামটির রেসাল্ট হবে,


list1[0]:  physics
list2[1:5]:  [2, 3, 4, 5]


 

Updating Lists

একটি list এর এক বা একাধিক উপাদান এর মান নিচের মত আপডেট করা যায়ঃ


#!/usr/bin/python

list = ['physics', 'chemistry', 1997, 2000];

print "Value available at index 2 : "
print list[2]
list[2] = 2001;
print "New value available at index 2 : "
print list[2]

 

এখানে list[2] মান দ্বিতীয় স্টেটমেন্ট এ আপডেট করা হয়েছে। উপরের কোডটি রান করালে নিচের ফলাফল আসবে।


Value available at index 2 :
1997
New value available at index 2 :
2001


 

Delete List Elements

del statement এর সাহায্যে একটি নির্দিষ্ট উপাদান ডিলেট করা যায়, remove() মেথডের সাহায্যে কোন অজানা উপাদান ডিলেট করা যায়, যেমনঃ


#!/usr/bin/python

list1 = ['physics', 'chemistry', 1997, 2000];

print list1
del list1[2];
print "After deleting value at index 2 : "
print list1

 

উপরের প্রোগ্রামটির রেসাল্ট হবে,


['physics', 'chemistry', 1997, 2000]
After deleting value at index 2 :
['physics', 'chemistry', 2000]

 

Basic List Operations

Python Expression Results Description
len([1, 2, 3]) 3 Length
[1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] Concatenation
[‘Hi!’] * 4 [‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’] Repetition
3 in [1, 2, 3] True Membership
for x in [1, 2, 3]: print x, 1 2 3 Iteration

 

Indexing, Slicing, and Matrixes

মনে করি,


L = ['spam', 'Spam', 'SPAM!']

 

 

Python Expression Results Description
L[2] ‘SPAM!’ Offsets start at zero
L[-2] ‘Spam’ Negative: count from the right
L[1:] [‘Spam’, ‘SPAM!’] Slicing fetches sections

 

Built-in List Functions & Methods:

Python এ নিচের List Functions গুলো ব্যবহৃত হয়ঃ

SN Function with Description
1 cmp(list1, list2)
Compares elements of both lists.
2 len(list)
Gives the total length of the list.
3 max(list)
Returns item from the list with max value.
4 min(list)
Returns item from the list with min value.
5 list(seq)
Converts a tuple into list.

 

Python নিচের list methods গুলো ব্যবহার করে।

SN Methods with Description
1 list.append(obj)
Appends object obj to list
2 list.count(obj)
Returns count of how many times obj occurs in list
3 list.extend(seq)
Appends the contents of seq to list
4 list.index(obj)
Returns the lowest index in list that obj appears
5 list.insert(index, obj)
Inserts object obj into list at offset index
6 list.pop(obj=list[-1])
Removes and returns last object or obj from list
7 list.remove(obj)
Removes object obj from list
8 list.reverse()
Reverses objects of list in place
9 list.sort([func])
Sorts objects of list, use compare func if given

 

পাইথন প্রোগ্রামিং : স্ট্রিং (Python Strings in Bangla)

1.10 Python Strings

Accessing Values in Strings

নিচের কোডটি লক্ষ্য করি,


#!/usr/bin/python

var1 = 'Hello World!'
var2 = "Python Programming"

print "var1[0]: ", var1[0]
print "var2[1:5]: ", var2[1:5]

 

উপরের কোডটি রান করালে নিচের ফলাফল প্রিন্ট হবে।


var1[0]:  H
var2[1:5]:  ytho

 

Updating Strings

অন্য একটি স্ট্রিং এর সাথে কোন ভেরিয়েবল এসাইন করে একটি স্ট্রিং কে আপডেট করা যায়। যেমনঃ


#!/usr/bin/python

var1 = 'Hello World!'

print "Updated String :- ", var1[:6] + 'Python'

 

উপরের কোডটি রান করালে নিচের ফলাফল আসবে।


Updated String :- Hello Python

 

Escape Characters

নিচের টেবিলে কিছু Escape Characters দেয়া হল, যেগুলো কখনো প্রোগ্রাম রেসাল্টের প্রিন্টে আসে না। এধরনের Escape Characters ব্যবহার করতে কিছু Backslash notation ব্যবহৃত হয়।

 

Backslash
notation
Hexadecimal
character
Description
\a 0x07 Bell or alert
\b 0x08 Backspace
\cx Control-x
\C-x Control-x
\e 0x1b Escape
\f 0x0c Formfeed
\M-\C-x Meta-Control-x
\n 0x0a Newline
\nnn Octal notation, where n is in the range 0.7
\r 0x0d Carriage return
\s 0x20 Space
\t 0x09 Tab
\v 0x0b Vertical tab
\x Character x
\xnn Hexadecimal notation, where n is in the range 0.9, a.f, or A.F

 

Triple Quotes

Python এ triple quote এর সাহায্যে একাধিক লাইনের স্টেটমেন্ট লেখা হয়। triple quote বোঝাতে তিনটি সিঙ্গেল (’’’) অথবা ডাবল কোটিং (”””) চিহ্ন ব্যবহৃত হয়।


#!/usr/bin/python

para_str = """this is a long string that is made up of
several lines and non-printable characters such as
TAB ( \t ) and they will show up that way when displayed.
NEWLINEs within the string, whether explicitly given like
this within the brackets [ \n ], or just a NEWLINE within
the variable assignment will also show up.
"""
print para_str

 

উপরের কোডটির রেসাল্ট হবে,


this is a long string that is made up of
several lines and non-printable characters such as
TAB (    ) and they will show up that way when displayed.
NEWLINEs within the string, whether explicitly given like
this within the brackets [
 ], or just a NEWLINE within
the variable assignment will also show up.

 

Raw strings ব্যবহার করলে backslash character গুলোর ব্যবহার হয় না। যেমন,


#!/usr/bin/python

print r'C:\\nowhere'

 

উপরের কোডটি চালালে নিচের রেসাল্ট আসবে।


C:\\nowhere


 

Unicode String

Normal strings গুলোকে Python 8-bit ASCII ফরম্যাটে স্টোর করে, কিন্তু Unicode strings গুলো 16-bit Unicode আকারে স্টোর হয়। এর ফলে একটু ভিন্ন ধরনের ক্যারেকটার ব্যবহার করা সম্ভব হয়।


#!/usr/bin/python

print u'Hello, world!'

 

উপরের কোডটি নিচের রেসাল্ট দিবে।


Hello, world!

 

Unicode strings এ prefix u ব্যবহৃত হয়, আর raw strings এ prefix r এর ব্যবহার হয়।

 

Built-in String Methods

Python নিচের বিল্ট−ইন মেথোডগুলোর সাহায্যে স্ট্রিং গুলোকে প্রভাবিত করতে পারে।

SN Methods with Description
1 capitalize()
Capitalizes first letter of string
2 center(width, fillchar)
Returns a space-padded string with the original string centered to a total of width columns.
3 count(str, beg= 0,end=len(string))
Counts how many times str occurs in string or in a substring of string if starting index beg and ending index end are given.
4 decode(encoding=’UTF-8′,errors=’strict’)
Decodes the string using the codec registered for encoding. encoding defaults to the default string encoding.
5 encode(encoding=’UTF-8′,errors=’strict’)
Returns encoded string version of string; on error, default is to raise a ValueError unless errors is given with ‘ignore’ or ‘replace’.
6 endswith(suffix, beg=0, end=len(string))
Determines if string or a substring of string (if starting index beg and ending index end are given) ends with suffix; returns true if so and false otherwise.
7 expandtabs(tabsize=8)
Expands tabs in string to multiple spaces; defaults to 8 spaces per tab if tabsize not provided.
8 find(str, beg=0 end=len(string))
Determine if str occurs in string or in a substring of string if starting index beg and ending index end are given returns index if found and -1 otherwise.
9 index(str, beg=0, end=len(string))
Same as find(), but raises an exception if str not found.
10 isalnum()
Returns true if string has at least 1 character and all characters are alphanumeric and false otherwise.
11 isalpha()
Returns true if string has at least 1 character and all characters are alphabetic and false otherwise.
12 isdigit()
Returns true if string contains only digits and false otherwise.
13 islower()
Returns true if string has at least 1 cased character and all cased characters are in lowercase and false otherwise.
14 isnumeric()
Returns true if a unicode string contains only numeric characters and false otherwise.
15 isspace()
Returns true if string contains only whitespace characters and false otherwise.
16 istitle()
Returns true if string is properly “titlecased” and false otherwise.
17 isupper()
Returns true if string has at least one cased character and all cased characters are in uppercase and false otherwise.
18 join(seq)
Merges (concatenates) the string representations of elements in sequence seq into a string, with separator string.
19 len(string)
Returns the length of the string
20 ljust(width[, fillchar])
Returns a space-padded string with the original string left-justified to a total of width columns.
21 lower()
Converts all uppercase letters in string to lowercase.
22 lstrip()
Removes all leading whitespace in string.
23 maketrans()
Returns a translation table to be used in translate function.
24 max(str)
Returns the max alphabetical character from the string str.
25 min(str)
Returns the min alphabetical character from the string str.
26 replace(old, new [, max])
Replaces all occurrences of old in string with new or at most max occurrences if max given.
27 rfind(str, beg=0,end=len(string))
Same as find(), but search backwards in string.
28 rindex( str, beg=0, end=len(string))
Same as index(), but search backwards in string.
29 rjust(width,[, fillchar])
Returns a space-padded string with the original string right-justified to a total of width columns.
30 rstrip()
Removes all trailing whitespace of string.
31 split(str=””, num=string.count(str))
Splits string according to delimiter str (space if not provided) and returns list of substrings; split into at most num substrings if given.
32 splitlines( num=string.count(‘\n’))
Splits string at all (or num) NEWLINEs and returns a list of each line with NEWLINEs removed.
33 startswith(str, beg=0,end=len(string))
Determines if string or a substring of string (if starting index beg and ending index end are given) starts with substring str; returns true if so and false otherwise.
34 strip([chars])
Performs both lstrip() and rstrip() on string
35 swapcase()
Inverts case for all letters in string.
36 title()
Returns “titlecased” version of string, that is, all words begin with uppercase and the rest are lowercase.
37 translate(table, deletechars=””)
Translates string according to translation table str(256 chars), removing those in the del string.
38 upper()
Converts lowercase letters in string to uppercase.
39 zfill (width)
Returns original string leftpadded with zeros to a total of width characters; intended for numbers, zfill() retains any sign given (less one zero).
40 isdecimal()
Returns true if a unicode string contains only decimal characters and false otherwise.

 

পাইথন প্রোগ্রামিং : নাম্বার (Python Numbers in bangla)

1.9 Python Numbers

Number ডাটা টাইপের সাহায্যে সংখ্যা স্টোর করা যায়। যখনই একটি number ডাটা টাইপের মান পরিবর্তন করা হবে তখন একটি নতুন অবজেক্ট তৈরি হবে।


var1 = 1
var2 = 10

 

del statement এর সাহায্যে number অবজেক্টের রেফারেন্স ডিলেট করা যায়। যেমন,


del var1[,var2[,var3[....,varN]]]]

 

del statement এর সাহায্যে এক বা একাধিক স্টেটমেন্ট ডিলেট করা যায়। যেমন,


del var
del var_a, var_b

 

Python চার ধরনের number টাইপ সমর্থন করে। যেমনঃ

  • int = পূর্ণ সংখ্যা
  • long = আনলিমিটেড সাইজের পূর্ণসংখ্যা, এদেরকে integers এর মতই লেখা হয়, তবে শেষে একটি ছোট কিংবা বড় হাতের L থাকে। বড় হাতের L লেখার সুবিধা হচ্ছে সেটার সাথে ১ এর মিল থাকে না।
  • float = বাস্তব সংখ্যা। Float লিখার সময় অনেক ক্ষেত্রে E বা e ব্যবহৃত হয়, যা দিয়ে ১০ এর পাওয়ার বোঝায় (2.5e2 = 2.5 x 102= 250)।
  • complex = জটিল সংখ্যা, এরা a + bJ, যেখানে a এবং b হচ্ছে float এবং J এর মানে -১ এর বর্গমূল থাকে। Python প্রোগ্রামিং এ complex number এর তেমন একটা ব্যবহার নেই।

 

উদাহরনঃ

int long float complex
10 51924361L 0.0 3.14j
100 -0x19323L 15.20 45.j
-786 0122L -21.9 9.322e-36j
080 0xDEFABCECBDAECBFBAEL 32.3+e18 .876j
-0490 535633629843L -90. -.6545+0J
-0x260 -052318172735L -32.54e100 3e+26J
0x69 -4721885298529L 70.2-E12 4.53e-7j

 

Mathematical Functions

Python নিচের ফাংশনগুলোর সাহায্যে গাণিতিক হিসাব নিকাশ করে থাকে।

Function Returns ( description )
abs(x) The absolute value of x: the (positive) distance between x and zero.
ceil(x) The ceiling of x: the smallest integer not less than x
cmp(x, y) -1 if x < y, 0 if x == y, or 1 if x > y
exp(x) The exponential of x: ex
fabs(x) The absolute value of x.
floor(x) The floor of x: the largest integer not greater than x
log(x) The natural logarithm of x, for x> 0
log10(x) The base-10 logarithm of x for x> 0 .
max(x1, x2,…) The largest of its arguments: the value closest to positive infinity
min(x1, x2,…) The smallest of its arguments: the value closest to negative infinity
modf(x) The fractional and integer parts of x in a two-item tuple. Both parts have the same sign as x. The integer part is returned as a float.
pow(x, y) The value of x**y.
round(x [,n]) x rounded to n digits from the decimal point. Python rounds away from zero as a tie-breaker: round(0.5) is 1.0 and round(-0.5) is -1.0.
sqrt(x) The square root of x for x > 0

 

Random Number Functions

Random numbers গেমস, সিমুলেশন, টেস্টিং, সিকিউরিটি ইত্যাদি এপ্লিকেশনে ব্যবহৃত হয়। Python নিচের ফাংশনগুলো প্রতিনিয়ত ব্যবহার করে।

Function Description
choice(seq) A random item from a list, tuple, or string.
randrange ([start,] stop [,step]) A randomly selected element from range(start, stop, step)
random() A random float r, such that 0 is less than or equal to r and r is less than 1
seed([x]) Sets the integer starting value used in generating random numbers. Call this function before calling any other random module function. Returns None.
shuffle(lst) Randomizes the items of a list in place. Returns None.
uniform(x, y) A random float r, such that x is less than or equal to r and r is less than y

 

Trigonometric Functions

Python নিচের ফাংশনগুলোর সাহায্যে ত্রিকোণমিতৃক হিসেব-নিকাশ করে থাকে।

Function Description
acos(x) Return the arc cosine of x, in radians.
asin(x) Return the arc sine of x, in radians.
atan(x) Return the arc tangent of x, in radians.
atan2(y, x) Return atan(y / x), in radians.
cos(x) Return the cosine of x radians.
hypot(x, y) Return the Euclidean norm, sqrt(x*x + y*y).
sin(x) Return the sine of x radians.
tan(x) Return the tangent of x radians.
degrees(x) Converts angle x from radians to degrees.
radians(x) Converts angle x from degrees to radians.

Mathematical Constants

Python এ pi এবং e ধ্রুবক গুলোর ব্যবহার রয়েছে।

উচ্চ মাধ্যমিক সিলেবাস অনুযায়ী একাদশ-দ্বাদশ শ্রেণীর বইসমূহের পাঠ্যক্রম (কারিকুলাম)

উচ্চ মাধ্যমিক স্তরের শিক্ষাক্রম

সিএসএস৩ বর্ডার ইমেজ (CSS3 Border Images in Bangla)

সিএসএস৩ border-image প্রোপার্টি

সিএসএস৩ border-image প্রোপার্টি দিয়ে একটি এলিমেন্ট এর চারদিকে বর্ডার সেট করতে পারেন।

 

ব্রাউজার সাপর্ট

টেবিলে উল্লেখিত সংখ্যা ব্রাউজার এর প্রথম ভার্সন যা এই প্রোপার্টি সম্পূর্ণভাবে সাপর্ট করে তা বোঝায়।

-webkit- বা -moz- দ্বারা প্রথম প্রিফিক্স ভার্সন বুঝায় যা এই প্রোপার্টি সাপর্ট করে।

Property  Internet Explorer  Google Chrome  Mozila Firefox  Safari  Opera
border-image 11.0 16.0
4.0 -webkit-
15.0
3.5 -moz-
6.0
3.1 -webkit-
15.0
11.0 -o-

 

সিএসএস৩ border-image প্রোপার্টি

সিএসএস৩ border-image প্রোপার্টি যেকোন এলিমেন্ট এর চারিদিকে বর্ডার দিয়ার জন্য ব্যবহার করা হয়।

প্রোপার্টিটি নিম্নোক্ত তিনভাবে অংশগ্রহণ করে:

  1. ইমেজ বর্ডার হিসেবে
  2. ইমেজ এর যেখানে স্লাইস/ভাগ থাকে
  3. মাঝ অংশ যেখানে পুনরাবৃত্তি বা প্রসারিত হবে তা নির্দিষ্ট করে

আমরা নিম্নোক্ত ইমেজটি ব্যবহার করবো (border.png)

বর্ডার

border-image প্রোপার্টি ছবিটিকে নিয়ে একে নয়টি অংশে স্লাইস/ভাগ করে । ইটি চারটি কর্ণারে বসে এবং এবং মধ্যবর্তী অংশ আপনি যেভাবে চান সেই অনুযায়ী – পুনরাবৃত্তি বা প্রসারিত হয়।

নোট: border-image প্রোপার্টি কাজ করার জন্য এলিমেন্টটির বর্ডার প্রোপার্টি সেট প্রয়োজন হবে।

এখানে ইমেজ এর মধ্যবর্তী অংশের পুণরাবৃত্তি ঘটেছে:

Here, the middle sections of the image are repeated to create the border.

এর কোড হচ্ছে


#borderimg {
    border: 10px solid transparent;
    padding: 15px;
    -webkit-border-image: url(border.png) 30 round; /* Safari 3.1-5 */
    -o-border-image: url(border.png) 30 round; /* Opera 11-12.1 */
    border-image: url(border.png) 30 round;
}

 

এখানে মধ্যবর্তী অংশ প্রসারিত হয়েছে:

Here, the middle sections of the image are stretched to create the border.

এর কোড হচ্ছে:


#borderimg {
    border: 10px solid transparent;
    padding: 15px;
    -webkit-border-image: url(border.png) 30 stretch; /* Safari 3.1-5 */
    -o-border-image: url(border.png) 30 stretch; /* Opera 11-12.1 */
    border-image: url(border.png) 30 stretch;
}

 

সিএসএস৩ border-image – বিভিন্ন স্লাইস মান

স্লাইস এর বিভিন্ন মান বর্ডার এর চেহারা পাল্টে দেয়

উদাহরণ 01:

border-image: url(border.png) 50 round;

 

উদাহরণ 02:

border-image: url(‘http://www.w3schools.com/css/border.png’) 20% round;

 

উদাহরণ 03:

border-image: url(border.png) 30% round;

 

এর কোড হচ্ছে:


#borderimg1 {
    border: 10px solid transparent;
    padding: 15px;
    -webkit-border-image: url(border.png) 50 round; /* Safari 3.1-5 */
    -o-border-image: url(border.png) 50 round; /* Opera 11-12.1 */
    border-image: url(border.png) 50 round;
}

#borderimg2 {
    border: 10px solid transparent;
    padding: 15px;
    -webkit-border-image: url(border.png) 20% round; /* Safari 3.1-5 */
    -o-border-image: url(border.png) 20% round; /* Opera 11-12.1 */
    border-image: url(border.png) 20% round;
}

#borderimg3 {
    border: 10px solid transparent;
    padding: 15px;
    -webkit-border-image: url(border.png) 30% round; /* Safari 3.1-5 */
    -o-border-image: url(border.png) 30% round; /* Opera 11-12.1 */
    border-image: url(border.png) 30% round;
}

 

পাইথন প্রোগ্রামিং : লুপ (Python Loops)

1.8 Python Loops

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

Loop

Python প্রোগ্রামিং ল্যাঙ্গুয়েজে নিচের লুপ গুলো প্রচলিত

.

Loop Type Description
while loop Repeats a statement or group of statements while a given condition is TRUE. It tests the condition before executing the loop body.
for loop Executes a sequence of statements multiple times and abbreviates the code that manages the loop variable.
nested loops You can use one or more loop inside any another while, for or do..while loop.

 

Loop Control Statements

কোডিং এর সময় সাধারণ নিয়মের/ সিরিয়ালের পরিবর্তন বোঝাতে Loop control statements এর প্রয়োজন হয়। যখন একটি নির্দিষ্ট লুপের পরিসীমার বাইরের কোড রান হয় তখন ঐ পরিসীমার সকল অবজেক্ট ধ্বংস হয়ে যায়। Python নিচের কন্ট্রোল স্টেটমেন্ট গুলো সাপোর্ট করে।

 

Control Statement Description
break statement Terminates the loop statement and transfers execution to the statement immediately following the loop.
continue statement Causes the loop to skip the remainder of its body and immediately retest its condition prior to reiterating.
pass statement The pass statement in Python is used when a statement is required syntactically but you do not want any command or code to execute.