ইএমআই / ইন্সটলমেন্ট / কিস্তি-এর সমস্যা: ০% হোক বা না হোক

সাধ্যের বাইরের জিনিস কেনার একটি জনপ্রিয় মাধ্যম হল ইন্সটলমেন্ট বা কিস্তি। অনেক শোরুমেই আজকাল ইন্সটলমেন্ট-এ বিভিন্ন পণ্য ক্রয় করা যায়। কিন্তু, ব্যাপারটা একবার খেয়াল করে দেখুন, “সাধ্যের বাইরে থাকা একটি জিনিস ক্রয় করা।” অর্থাৎ, যা আপনার ক্রয় করার কথা না, যা আদতেই আপনার বাজেটের সাথে যায় না, তা আপনি ক্রয় করতে পারছেন।

মন্দ কি?

সমস্যা কই? এতে তো সুবিধেই হয়, আস্তে আস্তে পাওনা টাকা পরিশোধ করে ফেলা যায়। আর 0% হলে তো অংক কষে দেখিয়ে দেবেন মশাই, কোন ক্ষতিই নেই।

মানসিকতা

সমস্যা হল আমাদের মানসিকতা। একটা জিনিস খেয়াল করেছেন কি, বড় বড় দোকানে সব পণ্যের দাম ৯৯৯৯ টাকা কিংবা ১২৯৯৯৯ টাকা? এক টাকা কমিয়ে লেখা হয় কেন? যদিও আপনি সচেতনভাবেই জানেন ৯৯৯৯ টাকা হল ১০০০০ টাকার থেকে মাত্র ১ টাকা কম, কিন্তু অবচেতনভাবে আপনি শুরুর ৯ টাকেই দেখছেন। অবচেতন মনে ভাবছেন, বাহ! ৯০০০ টাকা, মন্দ কি!

ভিন্ন উদাহরণ টানার জন্য দুঃখিত। এবার আসল কথায় আসি। যখন আপনি ১,৩০,০০০ টাকার একটি ফ্রিজ কিনতে যাচ্ছেন, এককালীন পরিশোধ করতে গেলে 99% বাঙালি সরে আসবেন। পাগল! পানি আর খাবার ঠান্ডা রাখতে দেড় লাখ টাকা কে খরচ করবে! কিন্তু যখন আপনাকে কিস্তিতে ভেঙ্গে দেখাবে, “স্যার, মাসে মাত্র ৫৪০০ টাকা কিস্তি দিতে হবে” – তখন অবচেতন মনে কিন্তু ৫৪০০ ই ঘুরবে। ১,৩০,০০০ এর কথা আর মাথায় থাকবে না।

দুই বছর পরে কিস্তি শোধ হয়ে যাবার পর, আপনার মনে হবে, কিই বা আর! মাসে মাত্র সাড়ে পাঁচ হাজার টাকাই দিলাম। এমন কি! কিন্তু আপনি তো দিয়ে দিয়েছেন ১,৩০,০০০ টাকা। ওই টাকাটা আপনার মিউচুয়াল ফান্ডে বা কোন ইনভেস্টমেন্ট অ্যাকাউন্টে থাকতে পারত; অথবা অত কিছু ধরলাম না, সেভিংসেই থাকত না হয়!

মূল্যস্ফীতি

এখন একটা প্রশ্ন মাথায় আসতে পারে, মূল্যস্ফীতি হলে তো আমার জমানো ১,৩০,০০০ হাজার টাকার মান কমে যায়! সেক্ষেত্রে আপনার মাথার জন্য পাল্টা প্রশ্ন, আপনার ফ্রিজ যে দামে কিনেছেন, তার চেয়ে বেশি দামে বেচঁতে পারবেন? বা যে দামে কিনেছেন সে দামে? তার কাছাকাছি দামে?

৩০,০০০ টাকার ফ্রিজ আপনাকে যে সার্ভিস দিত, এইটা কি আহামরি বেশি সার্ভিস দিয়েছে?

সামর্থ্য

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

কিস্তির ফাঁদ হল একটি মানসিক ফাঁদ। আপনি নিজেই নিজেকে ফাঁদে ফেলে দিয়ে থাকেন। কোন পণ্যের দামকে হঠাৎ করেই ১২ ভাগের এক ১ ভাগ মনে করে ফেলেন! এটি আপনার দোষ নয়। এটি মানুষ হিসেবে আমাদের থাকা কিছু ত্রুটির একটি; এজন্য লজ্জিত বা রাগাণ্বিত হবার কিছুই নেই।

শেষ কথা

শোরুমের প্রয়োজন পণ্য বিক্রি করা, ব্যাংকের প্রয়োজন আপনাকে খরচ করানো, আপনার প্রয়োজন অনিয়ন্ত্রিত খরচ পরিহার করা; সচেতনভাবে আপনার অর্থ-সম্পদ ব্যবহার করা। সবাইকেই সবার কাজ করতে হবে। ইএমআই বেআইনি করে ফেলা হোক, বা যারা ইএমআই করে তারা বোকা – এ কথা বলছি না। তবে ইন্সটলমেন্ট / বাকি / কিস্তি – এসব ব্যাপারে মোট দাম / টোটাল কস্ট হিসেব করাটা জরুরি – মাসিক কিস্তি নয়! কারণ, আপনার মন নানাভাবে আপনার সাথে কারসাজি করতে পারে! সাবধান।

“ভাই, কাজ শিখব”

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

এক্সপেরিমেন্ট করুন, নিজের সুপারপাওয়ারকে চিনুন

এক্সপেরিমেন্টের কোন বিকল্প নেই। আপনার যদি ইচ্ছে হয় টেকনোলজি নিয়ে কাজ করতে, তার মানে এই না আপনাকে প্রোগ্রামার হতে হবে। আজকাল প্রযুক্তির জগতে প্রোগ্রামারের পাশাপাশি অনিবার্য হল UI/UX ডিজাইনার, QA (Quality Assurance) টেস্টার, অ্যানালিস্ট (সিস্টেম / বিজনেস) ও অন্যান্য – দের অবদান। আমরা প্রায়ই একটা ভুল করি, ভাবি যে সিএসই পড়লে আমাকে প্রোগ্রামারই হতে হবে – এমন কোন কথা নেই। নিজের ভালোলাগা আগে।

Don’t let the noise of others’ opinions drown out your own inner voice. – Steve Jobs

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

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

আমার প্রথম চাকুরী ছিল প্রিয়.কম-এ। জাকারিয়া স্বপন ভাইয়ের তত্ত্বাবধানে ড্রুপালে কাজ করতাম (পিএইচপিতে)। কিন্তু আমার প্যাশন ছিল পাইথনে, বাসায় ঠিকই পাইথন নিয়ে গুঁতাগুঁতি করেছি। ধীরে ধীরে ওখান থেকে এক পর্যায়ে পাইথন নিয়ে কাজ করার সুযোগ হয় P1 এ।

অতএব, প্যাশন ফেলে দেওয়া ঠিক না, আবার প্যাশনের জন্য ক্যারিয়ারকে Pause করে রাখাও অনুচিৎ বলে আমি মনে করি। বিশেষ করে প্রোগ্রামারদের কিন্তু একাধিক ল্যাঙ্গুয়েজ জানা থাকা একদম এসেন্সিয়াল। যতদিন নিজের পছন্দের ফিল্ডে কাজ করার সুযোগ না আসে, দাঁত কামড়ে কাজ করে যান – আর প্যাশনকে জীবিত রাখুন।

শিখা ফেলসি মামা – উঁহু

একটা ছুড়ি দীর্ঘদিন ফেলে রাখলে কি হয় জানেন?** জং ধরে যায়**, আর কিছু কাটা যায় না ওটা দিয়ে। অব্যবহার্য হতে পড়ে। আমার মস্তিষ্কও সেরকম। চলমান চর্চার বা প্র্যাক্টিসের মধ্যে না থাকলে কিন্তু ভুলে যাবেন যা জানতেন। মাঝেমধ্যেই একটু মস্তিষ্ক ঝালাই করা অনিবার্য। তাই অবসর সময় নষ্ট না করে উচিৎ জানা জিনিসগুলো চর্চা করা – সবচেয়ে ভালো উপায় হচ্ছে কোন ছোটখাট প্রজেক্ট বানানো।

The more man learned, the more he realized he didn’t know – Dan Brown, The Lost Symbol

একটা ল্যাঙ্গুয়েজ জানেন? আপনার জানা ল্যাঙ্গুয়েজের তালিকায় আরও কিছু ল্যাঙ্গুয়েজ যোগ করুন! শিখুন। আপনাকে হয়ত আপনার সহকর্মী ডেভেলপারকে সাহায্য করতে হতে পারে, সেক্ষেত্রে আপনার অতিরিক্ত জ্ঞান আপনাকে অনেক সাহায্য করবে।

সম্প্রতি নতুন কি কি অগ্রগতি হচ্ছে খোঁজখবর রাখুন। আমি একসময় ওয়েবসাইট বানাতে পারতাম, কয়েকদিন আগেই দেখি অফিসের ডেভেলপাররা Webpack, Browserify, React – কীসব লাইব্রেরি নিয়ে কথা বলছে আমার কোন ধারণাই নেই! টেকনোলজি ইন্ডাস্ট্রি** খুবই দ্রুতগতিতে** আগায়। ধীরে ধীরে আগালে পেছনে পড়ে যাবেন আপনি।

বাংলাদেশে অনেক ডেভেলপার গ্রুপ আছে – phpXperts, PyCharmers, Rubyists কিংবা আপনার কলেজ / বিশ্ববিদ্যালয়ের ক্লাব-সংগঠন, এদের সাথে যুক্ত থাকার চেষ্টা করুন। কমিউনিটিগুলোর সঙ্গে যুক্ত থাকলে কাজ করার উৎসাহ পাবেন তাদের কাজ দেখে। মানুষের সঙ্গে, তাদের কাজের সঙ্গে পরিচিত হোন। অস্থির মানুষদের অনুসরণ করার চেষ্টা করুন, দেখুন তারা কি করে!

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

নিজের মার্কেটিং (বোনাস)

সেলফ মার্কেটিং করতে পারা ক্যারিয়ারের জন্য গুরুত্বপূর্ণ। নিজের কাজকে শোকেস করতে হবে। এজন্য নিজের স্কিলের বা যোগ্যতার সাহায্যে প্রজেক্টকরার বিকল্প নেই। হোক একটা সাইট, লাইব্রেরি, মডিউল, ফ্রেমোওয়ার্ক কিংবা কোন ওপেন সোর্স প্রজেক্টে কন্ট্রিবিউশন – নিজের যোগ্যতার প্রমাণ তৈরি করুন। গিটহাবে বা কোন কোন হোস্টিং সাইটে রাখুন। ব্লগিং করুন।

Works at বাপের হোটেল, Studies at I don’t need University I have Google লিখে রাখাটাও কিন্তু প্রফেশনালিজমের পরিচয় দেয় না। নিজেকে একজন প্রফেশনাল হিসেবে উপস্থাপন করুন।

ধৈর্য

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

চামচে তুলে খাওয়ার আবদার করা নিষিদ্ধ, যদি কেউ শিখতে চায় – তার জন্য। চামচ ধরে খাওয়া শিখতে হবে। অন্যের হাতে খেয়ে কতদিন? সমস্যার নিজের সমাধানের চেষ্টা করতে হবে, নিজের সল্যুশন বের করার চেষ্টা করতে হবে। আগেই নিজেকে অক্ষম বানিয়ে রাখলে চলবে কিভাবে?

আজ প্রায় ছয়-সাত বছর হল আমি গুঁতাগুঁতি করছি। অধৈর্য হয়ে, লাফালাফি করে, রাগ করে পরে ঠিকই ফিরে এসে আবার, বার বার চেষ্টা করে চলেছি। গুঁতাগুঁতির ধৈর্য টিকে থাক আপনার, আমার সকলের 🙂

তরুণ প্রোগ্রামাদের জন্য নর্থ সাউথ ইউনিভার্সিটি!

নর্থ সাউথ ইউনিভার্সিটির পরিচয়ের অনেকাংশ জুড়ে রয়েছে আমাদের অসাধারণ ব্যবসায় শিক্ষা অনুষদের বিস্তৃতি। কিন্তু, অনেকেই জানেন না যে, বিশ্বমানের পড়াশোনার পাশাপাশি প্রতি সেমিস্টারে প্রোগ্রামিং প্রতিযোগিতা, সেরা প্রোগ্রামারদের জন্য ১০০% পর্যন্ত স্কলারশিপ, কম্পেটিটিভ প্রোগ্রামিংয়ের জন্য সাপ্তাহিক ক্লাস, বিভিন্ন স্টুডেন্ট কমিউনিটি – মিলিয়ে নর্থ সাউথ ইউনিভার্সিটি তরুণ প্রোগ্রামাদের জন্য দেশের অন্যতম সেরা বিশ্ববিদ্যালয়!

Intra NSU Programming Contests

প্রোগ্রামিংয়ে শিক্ষার্থীদের আগ্রহ বাড়াতে বিশ্ববিদ্যালয়ের অভ্যন্তরে এখন প্রতি সেমিস্টারে আয়োজিত হচ্ছে INPC বা Intra NSU Programming Contest। পূর্বে সনদ ও ক্রেস্ট দিয়ে পুরস্কৃত করা হত। কিন্তু Summer 2016 সেমিস্টার থেকে ঘোষিত হয়েছে বিজয়ীদের জন্য ১০০% পর্যন্ত স্কলারশিপ!

র‍্যাংকিংয়ে প্রথম ১ম-৫ম ১০০%
পরবর্তী ৬-১০ তম পাবে ৭৫%
পরবর্তী ১১-১৫ তম পাবে ৫০%
এবং পরবর্তী ১৬-২০ তম স্থানের অধিকারীরা পাবে ২৫% স্কলারশিপ 

(তবে, প্রোগ্রামিং করতে করতে করতে, পড়ালেখা ভুলে, ফেল করে, প্রবেশন খেয়ে বসলে কিন্তু আর স্কলারশিপ পাবে না।)

নর্থ সাউথ প্রবলেম সলভার্স কমিউনিটি

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

ওয়ার্ক-স্টাডি প্রোগ্রাম

পড়াশোনার পাশাপাশি ইন্ডাস্ট্রির জন্য তৈরি হতে দরকার সফটওয়্যার ডেভেলপমেন্ট স্কিল; এর জন্য নর্থ সাউথের আইটি ডিপার্টমেন্ট, অফিস অফ অ্যাডমিশনসের মত অন্যান্য অফিস প্রায়ই প্রোগ্রামার / ডেভেলপার হিসেবে শিক্ষার্থীদের নিয়োগ দেয়। এখানে Java EE, PHP, Database Systems সহ অনেককিছু নিয়ে কাজ করার সুযোগ মিলবে তরুণ শিক্ষার্থীদের। পাশাপাশি, বিশ্ববিদ্যালয়ের খরচ ও পকেটমানিও মিলবে!

বিভিন্ন ক্লাব ও কমিউনিটি

বিশ্ববিদ্যালয়ে রয়েছে বিভিন্ন ক্লাব ও কমিউনিটির কার্যক্রম: NSU CEC (Computer and Engineering Club), INSB (IEEE NSU Student Branch), NSU MSP (NSU Microsoft Student Partners), NSUFC (Firefox Community) যার মধ্যে অন্যতম। বছড়জুরে এসকল কমিউনিটির কার্যক্রম চলতেই থাকে, যার মধ্যে বিভিন্ন সেমিনার, ওয়ার্কশপ, প্রতিযোগিতাও রয়েছে। রোবট বিশেষজ্ঞ থেকে অপারেটিং সিস্টেম আর্কিটেক্ট – সব রকম শিক্ষার্থীর সঙ্গে কাজ করার সুযোগ মিলবে এসব স্টুডেন্ট কমিউনিটিতে।

গবেষণার সুযোগ

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

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

হাতে-কলমে পাইথন: পর্ব ৭ (কোন শব্দ কয়বার?, শেষ পোস্ট)

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

পাইথনে একটা বিশেষ টাইপ আছে, dict বা ডিকশনারী। ডিকশনারী হল একটা হ্যাশমাপ বা কি-ভ্যালু স্টোরের মত ব্যাপার। উদাহরণ,

আশা করি ব্যাপারটা ক্লিয়ার হয়েছে! এখানে aniruddhaalimrayhaniftekhar হল key আর 011010e9 হল value। আপনারা নিজে ডিকশনারী বানিয়ে একটু গুতাগুতি করে দেখুন তো!

কোন শব্দ কতবার

এই গণনা করার জন্য আমরা ডিকশনারী ব্যবহার করতে পারি। ডিকশনারীতে ওই শব্দের কী এর জন্য ভ্যালু 0 থেকে শুরু করে প্রতিটা অকারেন্সের জন্য +1 করে বাড়াতে পারে। আর স্ট্রিং থেকে শব্দ আলাদা করার জন্যও ফাংশন আছে, split()। জোস, শুরু করি।

১। এবার আমাদের আসল প্রোগ্রামের মধ্যে একই কায়দায় একটা headline_words ভ্যারিয়েবল তৈরি করুন তো লুপের মধ্যে, আর হেডলাইনের টেক্সট স্প্লিট করার ভ্যালু অ্যাসাইন করুন! headline_words = …

২। তারপর, headline_words এর প্রতিটা ওয়ার্ড নিয়ে কাজ করার জন্য একটি লুপ তৈরি করুন।

আমাদের লুপটির চেহারা এখন,

এবার আমাদের লুপের বাইরেলুপ চালানোর আগে একটি ডিকশনারী বানান, আমি নাম পছন্দ করলাম word_count

এবার আমাদের দ্বিতীয় লুপটির মধ্যে চেক করব যে ডিকশনারীতে আমাদের বর্তমান শব্দটি আছে কিনা, থাকলে তার মান +1 করা হবে, নতুবা তার মান 1 হিসেবে সেট করা হবে।

আহ, শেষমেষ লুপের চেহারা দাঁড়ালো:

dictionary.keys() ফাংশনটির সাহায্যে ডিকশনারির সকল key কে list আকারে একত্রে পাওয়া যায়।

এরপর সবার শেষে word_count কে প্রিন্ট করি।

সুন্দর লাগছে দেখতে, বড়ই গোছানো আর রিডেবল কোড। এবার আউটপুটে চোখ বুলাই, যা চাচ্ছিলাম তাইই এসেছে মনে হচ্ছে!

দেখতে বড়ই ক্ষ্যাত লাগিতেছে আউটপুট, লুপ করে সুন্দরমত প্রিন্ট করি।

format এর রহস্য আমি খোলাসা করব না। ইন্টারনেটে বুঝে নিন 😉

হুম, এবার আউটপুট ভালোমতই পড়া যাচ্ছে দেখা যায়।

শেষ কিছু কথা

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

আমি বিশ্বাস করি কেউ কাউকে শেখাতে পারে না, বড়জোড় শেখানোর জন্য উৎসাহী বা আগ্রহী করে তুলতে পারে। শেখার কাজটা যার যার নিজেকেই করতে হয়। চামচে তুলে খাইয়ে দিলে ১ দিন খাবেন, ২ দিন খাবেন – ৩ দিনের দিন চামচওয়ালা গায়েব হলে আপনার খাওয়া বন্ধ। স্বাবলম্বী খুবই গুরুতপূর্ণ – শেখার জন্য।

যাদের জন্য সিরিজটির অস্তিত্ব আছে

নর্থ সাউথ ইউনিভার্সিটির উৎসাহী একদল শিক্ষার্থীর জন্য আপনারা এই সিরিজটি পেয়েছেন। বিশ্ববিদ্যালয়ে আয়োজিত দুইটি পাইথন ওয়ার্কশপের এক্সপেরিমেন্টাল ট্রেনিং মেথডটি কাজ করায় এই আঙ্গিকে অ্যাপ্লিকেশন-ফার্স্ট অ্যাপ্রোচ নেওয়া হয়েছিল। এজন্য অংশগ্রহণকারী শিক্ষার্থীদের সবাইকে অনেক অনেক ধন্যবাদ জানাচ্ছি। (ওনাদের কোন ছবি তোলা হয়নি 🙁 )

তৎকালীন তড়িৎ ও কম্পিউটার প্রকৌশল বিভাগের চেয়ারম্যান ড. আরশাদ এম চৌধুরী স্যারের অবদান ও অনুমতি ছাড়া ওই ওয়ার্কশপগুলো কন্ডাক্ট করা সম্ভব হত না। বিশ্ববিদ্যালয়ের একই বিভাগের লেকচারার ও এক্স-NSUer, মিস সিলভিয়া আহমেদই আমাদের ওয়ার্কশপগুলোর পরিকল্পনায় অংশ নিয়েছেন, দেখভাল করেছেন এবং ডিপার্টমেন্টের অনুমতি যোগাড়ে মূখ্য ভূমিকা পালন করেছেন!

এবং সবচেয়ে গুরুত্বপূর্ণ অবদান হল আপনার; পাঠক হিসেবে। ব্লগ পোস্টগুলো আপনারা পড়েছেন দেখেই আমি লেখার উৎসাহ পেয়েছি। সকলকে ধন্যবাদ জানাচ্ছি 🙂

রক অন পাইথন।

লিংক

ধন্যবাদ পড়ার জন্য!

হাতে-কলমে পাইথন: পর্ব ৬ (ফাঁকা লাইনের রহস্য ও ফেলুদা)

পর্ব-৫ এ আমরা দেখেছিলাম কিভাবে ফাইলে প্রোগ্রাম সেভ করে রাখতে হয়; এখন থেকে আমাদের আর কষ্ট করে বার বার একই কোড টাইপ করতে হবেনা! যাই হউক, এবার আমাদের লেখা ফাইলটাকে Spyder এ ওপেন কর। এবার খেয়াল করে দেখুন Spyder এর নিচে, ডান/বাম পাশে একটি IPython Console আছে 😀 ওখানে headlines লিখে দেখি তো আমাদের headlinesভ্যারিয়েবলকে পাওয়া যায় কিনা! হাজার হোক ওর ঠিক পাশেই আমাদের প্রোগ্রামের কোড – অতএব…।

কি বলে headlines not defined! আমরা স্পষ্ট দেখতে পাচ্ছি যে, কোডে সুন্দরমত headlines ডিফাইন করা আছে :/ ঘটনা কি হল এখানে? একটু দুই মিনিট সময় নিয়ে ভেবে দেখবেন কি? চিন্তার সময় শুরু হল… এখন! 119, 118, 117, 116, 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0। সময় শেষ।

আর হ্যাঁ, আমি এত বড় নাম্বারের সিকোয়েন্স আমি হাতে লিখিনি নিশ্চয়ই :/ এজন্য পাইথন আমাকে সাহায্য করেছে। পাইথনকে বলেছিলাম range(0,120)[::-1] আর পাইথন এত্তগুলা ভালো ইন্টারপ্রেটারের মত আমাকে সুন্দর একটা লিস্টি বানিয়ে দিয়েছে!

হুম, এবার তাহলে ঘটনা কি ঘটল? আসলে আমাদের এডিটরের কোড কিন্তু এডিটরেই রয়ে গেছে। আমরা যে iPython শেলে লিখছিলাম, সেখানে ওই কোড এক্সিকিউট হয়নি! যার ফলে headlines নামের কোন ভ্যারিয়েবল আদৌ তৈরিই হয়নি। পাইথন তো ঠিক কথাই বলেছে আমাদের; বেচারাকে দোষ দিয়েন না। 🙁

এবার আসুন দেখি কিভাবে আমাদের পুরো কোড আইপাইথন শেলে এক্সিকিউট করাবো! গতকালকের মতই ওই রেঞ্চওয়ালা রান বাটনে চাপ দিন। (মনে না থাকলে আগের ব্লগ পোস্ট দ্রষ্টব্য) এরপর নতুন উইন্ডোটি থেকে Execute in current Python or IPython console সিলেক্ট করে Run বাটনে চাপ দিন।

যথারীতি গতকালকের মত আউটপুট দেখাবে। এবার আপনি IPython কনসোলটিতে লিখে দেখুন headlines, ভ্যালু দেখাবে!

ইয়েস! এবার আরামসে এক্সপেরিমেন্ট করা যাবে। এবার এক কাজ করি, আজকের প্রথম হেডলাইনটি নিয়ে কাজ করি। প্রথম বা 0-তম হেডলাইন পাওয়ার জন্য করণীয় headlines[0], এবং ওই হেডলাইনের লেখা পাওয়ার জন্য করণীয় headlines[0].text। খুব দ্রুত dir(headlines[0].text)দিয়ে দেখি তো এই স্ট্রিং কি করা যায়!

দুষ্টু স্ট্রিংদের লাইনে আনা

এবার ছোট্ট একটা উদাহরণ। ধরুন আপনার কাছে একটা স্ট্রিং আছে,

খেয়াল করে দেখুন লাইনটির শেষে ৭টি স্পেস আছে, এবং শুরুতে ২টি! এখন এই অদ্ভুত স্ট্রিংকে প্রিন্ট করলে দেখা যাবে কেমন একটা পচা পচাভাবে দেখা যাবে, কনসোলের সাথে aligned থাকবে না। 🙁

ছিঃ কি রকম বিশ্রি দেখাচ্ছে 😐 এমন কুৎসিত্য (!) সহ্য করা সম্ভব নয়। এর একটা বিহীত করা দরকার; শুরু ও শেষে থেকে পচা পচা অতিরিক্ত স্পেসগুলো সরিয়ে ফেলতে হবে। এজন্য পাইথনে… ধরে ফেলেছেন! বিল্ট-ইন ফাংশন আছে। strip()। এজন্য আমাদের ছোট্ট একটু কাজ করতে হবে,

ইয়ে! ক্লিন হয়ে গেছে! নিশ্চিত হওয়ার জন্য আমরা len() ফাংশনটির সাহায্য বলে দিতে পারি। ও হচ্ছে পাইথনের মাপামাপির লোক; প্রায় যেকোন কিছুর length বলে দিতে পারে! (list, string….!) অস্থির এক ফাংশন বটে।

হুম, আসলেই দুষ্টু স্পেসগুলো গায়েবুন! বিয়োগের ব্যাপারটা নিয়ে একটু চিন্তা করে দেখুন; অস্থির না?

এসো নিজে করি && নিজে না করে যাবেন না: শুধুমাত্র একগাদা স্পেস নিয়ে একটা স্ট্রিং বানিয়ে দেখুন তো সেটাকে স্ট্রিপ করলে কি হয় 😀

শর্ত প্রযোজ্য

পেপার খুলে যখনই দেখি মোবাইল কোম্পানি বিজ্ঞাপন, তখন নিচে একদম ছোট্ট করে লেখা থাকে, শর্ত প্রযোজ্য, আসলে ১০ পয়সা না, বিল হল ২৫ পয়সা… ইত্যাদি। পাইথন শর্ত নিয়ে এত ডিসেপ্টিভ না; পাইথন একজন সৎ, সত্যবাদী ও ন্যায়পন্থী ইন্টারপ্রেটার। বিশ্বাস না হলে নিজেই টেস্ট করে দেখুন! আইপাইথন কনসোলে লিখুন 2 > 5। পাইথন উত্তরে কি বলল? 😉

একজন সত্যবাদী পাইথন! মনে আছে? আমরা শুরু দিকের একটি পর্বে notব্যবহার করেছিলাম? ওইটা দিয়ে আরেকটু এক্সপেরিমেন্ট করে দেখুন তো নিজে নিজে :p আমরা যে আউটপুটগুলো পেলাম, এগুলোকে ইউনিভার্সিটির ফ্যাকাল্টি গাম্ভীর্যের সঙ্গে বলেন Truth value এবং প্রোগ্রামাররা ভাব নিয়ে বলেন Boolean value। বিশ্বাস না হলে পাইথনকেই জিজ্ঞেস করুন।

আরেকটা ছোট্ট উদাহরণ দিলে আপনার মাথায় এই রহস্য সমাধানের আরেকটি প্রি-রেক্যুইজিট ইন্সটল হয়ে যাবে।

(ট্যাবের, ইন্ডেন্টেশনের কথা ভুললে চলবে না, পাইথনে কোডের ব্লক ডিফাইন হয় ইন্ডেন্টেশন দিয়ে, সেকেন্ড ব্র্যাকেটের বেইল নাই)

রহস্য সমাধান

মিশন: সব নিউজ প্রিন্ট করলে কেন ফাঁকা লাইন আসে বের করা। ফাঁকা লাইনের কালপ্রিটকে পুলিশে ধরিয়ে দেওয়া।

আমাদের হাতে কয়েকটি গুরুত্বপূর্ণ ক্লু আছে। ১। স্ট্রিংয়ের লেংথ বা দৈর্ঘ্য বের করা সম্ভব। ২। স্ট্রিংকে স্ট্রিপ করলে সকল অবাঞ্চিত স্পেস গায়েবুন হয়ে যায়। ৩। খালি স্পেসই আছে, এমন স্ট্রিংকে স্ট্রিপ করলে স্ট্রিং ফাঁকা হয়ে যায়, তখন লেংথ হয় 0.

তার মানে যেসকল strip() করা স্ট্রিং এর লেংথ ১ বা তার বেশি, তারা নিষ্পাপ ভালো হেডলাইন! অতএব এক অর্থে বলা যায়,

এবার আমাদের আগের পাইথন প্রোগ্রামে হাত দেই, জায়গামত লজিকটি বসিয়ে দিলে…

এবার রান করলে একদম মোক্ষম রেজাল্ট পাওয়া যাবে! (কিছু ইনকনসিস্টেনসি আছে, কিন্তু এটি ওয়েব স্ক্র্যাপিং এর টিউটোরিয়াল নয়, পাইথন শেখার টিউটোরিয়াল বলে সেগুলোকে স্কিপ করছি।) আগামী পর্বই আমাদের শেষ পর্ব হবে, এবং সেখানে আমরা গুণে দেখব কোন ইংরেজি শব্দ কতবার করে ব্যবহার হয়েছে। ততক্ষণ এক্সপ্লোর করুন!

হাতে-কলমে পাইথন: পর্ব ৫ (এক্সপেরিমেন্টকে প্রোগ্রামে রুপান্তর)

আশা করি আমরা পর্ব-৪ এ অনেককিছু আবিষ্কার করেছি! এবার দেখার পালা কিভাবে আমাদের লেখা iPython এক্সপেরিমেন্টকে একটা পরিপূর্ণ প্রোগ্রাম বানাবো ফাইলে সেভ করে। পাইথন কোড লেখার জন্য সাধারণ টেক্সট এডিটরই যথেষ্ঠ। কিন্তু আমরা সিমপ্লিসিটির জন্য Spyder IDE ব্যবহার করব; যা Anaconda এর সাথে ইন্সটল হয়ে আসে। এখন আমরা আমাদের ডেইলি স্টার প্রোগ্রামটিকে অন্যান্য ল্যাঙ্গুয়েজের মত ফাইলে রাখব।

আপনার Start Menu / Application Launcher থেকে Spyder চালু করুন; একটু সময় নিয়ে চালু হবে। এবার File > New তে গিয়ে নতুন পাইথন ফাইল তৈরি করুন; এবং File > Save As এ গিয়ে আপনার পছন্দমত জায়গায় পছন্দমত নামে (স্পেস ছাড়া) সেভ করুন।

ফাইলে কোড ট্রান্সফার

এবার আমাদের লেখা iPython কোড লাইন -লাইন ধরে Spyder এর এডিটরে লিখব বা পেস্ট করব। আর Spyder নিজে নিজে যে লাইনগুলো লিখে দিয়েছে; ওগুলোকে মুছার দরকার নেই। ওগুলোর নিচ থেকে শুরু করুন। আগের ব্লগ পোস্টগুলিতে পাঠিয়ে আপনাদেরকে কষ্ট দেব না; এই যে সম্পূর্ণ কোড একসাথে:

কোডে নতুন বলতে তেমন কিছু নাই; আগে যা আমরা লিখেছি ঠিক তাইই – একসঙ্গে। এবার এই কোড রান করি। রেঞ্চ চিহ্নিত রান বাটনে চাপ দিয়ে Run এ চাপ দিলে আউটপুট দেখতে পারবেন।

আউটপুট:

enter image description here

ইয়ে ইয়ে ইয়ে ইয়ে! কাজ করেছে! আর আমরা অনেকেই আগের পর্বগুলিতে UnicodeDecodeError পাচ্ছিলাম; এখন কিন্তু সেটা গায়েব। সেটার সাথে লাইন #১ এর কি কোন সম্পর্ক আছে বলে আপনার মনে হয়? (-*- coding: utf-8 -*-)

আউটপুট দেখলে খেয়াল করবেন যে অনেকগুলো ফাঁকা লাইন আছে। আগামী পর্বে আমরা দেখব কিভাবে ফাঁকা লাইনগুলিকে সরানো যায়। খুবই ছোট পর্বটির জন্য দুঃখিত 🙁

হাতে-কলমে পাইথন: পর্ব ৪ (লুপ লুপ, সব খবর একসাথে)

আশা করি আপনারা পর্ব-৩ এ একটি একটি করে নিউজ বের করে হেডলাইন দেখতে পেরেছেন পাইথনের সাহায্যে! এই পর্বে আমরা সবগুলো খবর দেখাবো! আগের পর্বে যা করেছিলাম, তা অনেকটা এরকম:

এরপর আমরা একেকটা হেডলাইনকে ইনডেক্স নাম্বার ধরে বের করেছি!

হুম… (আমাদের যদি পূর্বের প্রোগ্রামিংয়ের অভিজ্ঞতা থাকে, তাহলে আমরা নিশ্চয়ই জানি লুপের কথা!) এখন আমাদের দরকার সবগুলো হেডলাইনকে এভাবে ধরে প্রিন্ট করা। এখন দেখি পাইথনের for loop এর চেহারা কেমন!

প্রিয় প্রোগ্রামিং জানা পাঠক, পাইথনে {} (সেকেন্ড ব্র্যাকেট বা কার্লি ব্রেসেস) দিয়ে কোড ব্লক বুঝায় না! for loop এর ভেতর যেসকল লাইন কোড লুপ করতে থাকবে বা বার বার কাজ করতে থাকবে, সেগুলোকে Tab দিয়ে আলাদা করতে হয়!

হুম, এবার তাহলে আমাদের ডেইলি স্টারের headlines এর উপর একই ভাবে চেষ্টা করি।

for headline in headlines লিখে এন্টার চাপার পর iPython নিজে নিজেই বুদ্ধিমানের মত তার পরের লাইনকে ট্যাব মেরে সরিয়ে দেবে। print(headline.txt) লেখার পর দুইবার এন্টার চাপলে এই কোডের ব্লক থেকে বের হয়ে পাইথন কোড এক্সিকিউট করবে। ম্যাজিক!

এইখানে কাহিনী কি হল শেষ পর্যন্ত? আমরা headlines লিস্ট এর সকল এলিমেন্টকে headline হিসেবে চিহ্নিত করেছি প্রথম লাইনে। দ্বিতীয় লাইনে প্রত্যেকটা headline এর text প্রোপার্টি প্রিন্ট করেছি headline.text – এভাবে। আপনি যদি আমাদের লেখা লাইন দুইটি ইংরেজি হিসেবে পড়েন, কোডটি বোঝা কিন্তু অনেক সহজ!

নিজেদের লিস্ট

এতক্ষণ আমরা ডেইলি স্টারের খবরের লিস্ট নিয়ে গুতোগুতি করলাম। এবার আসুন নিজেরা একটা লিস্ট বানাই!

একইভাবে আমরা প্রত্যেককে একে একে..,

এবং সবাইকে একসাথে প্রিন্ট করতে গেলে…

চিন্তা করুন তো, কেন person.text লিখলাম না? dir(favorite_people[0]) এর সাহায্য নেওয়া যেতে পারে। ব্যাপারটা এমন হতে পারে, favorite_people এর প্রতিটা এলিমেন্ট নিজেই text, আলাদা করে text বের করার দরকার নেই।

কোন টাইপের জিনিস রে ভাই!

লাইনগুলো এক্সিকিউট করে আউটপুট পর্যবেক্ষণ করুন তো!

এই পর্বে আর বেশি জটিলতায় দিকে আগালাম না আজকের মত। লুপ চালিয়ে একটু মজা করুন, বিভিন্ন জিনিসের type পর্যবেক্ষণ করুন। আবার, হেডলাইনগুলো বের করতে গেলে খেয়াল করে দেখবেন, কিছু ফাঁকা লাইনও প্রিন্ট হচ্ছে কমান্ড-লাইন কনসোলে। আন্দাজ করার চেষ্টা করুন তো কেন হচ্ছে? আগামী পর্বে এই বিষয়ে আলোচনা চলবে।

আজকের হোমওয়ার্ক,

  1. headline এর পরিবর্তে x বা যেকোন ভ্যারিয়েবল দিয়ে চেষ্টা করুন তো! (headlines নয়, headline। headline কে আমরা যেকোন নামে ডাকতে পারি, আমাদের ইচ্ছে। কিন্তু headlines কিন্তু আগেই ডিক্লেয়ার করেছিলাম। ব্যাপারটা নিয়ে একটু ভাবুন সময় নিয়ে)
  2. গুগল বা বিং সার্চ ইঞ্জিনে পাইথনের ফর লুপ নিয়ে একটু পড়াশুনো করে দেখুন তো!
  3. নিজে গবেষণা চালিয়ে যান

হাতে-কলমে পাইথন: পর্ব ৩ (খবর এক এক করে বের করা)

আগের পর্ব-২ এ আমরা দেখেছি কিভাবে পাইথনে বিভিন্ন অবজেক্ট নিয়ে গুতাগুতি করতে হয়; এবং এই জ্ঞান থেকে আমরা ওয়েবপেজের HTML মার্কআপ বের করে ফেলেছি। এবার সেটি parse করে হেডলাইন বের করে আনার পালা!

স্যুপ মানেই সৌন্দর্য্য

এক কাজ করি, iPython এ ডেইলি স্টারের পেজটা আবারও লোড করি।

এবার আরেকটা মডিউল import করতে হবে, BeautifulSoup। (পাইথন প্রোগ্রামারদের আসলে সেন্স অফ হিউমার অসাধারণ, HTML পার্স করার মডিউলের নাম বিউটিফুল সুপ!)

এবার আমাদের ডেইলি স্টারের পেজের HTML মার্কআপ কোডকে parseকরি; একটু হালকা মনে করে দেখি তো আগের পর্বে কিভাবে HTMLদেখেছিলাম? হ্যাঁ, daily_star.text

lxml কেন লিখলাম মাথায় ঘুরছে তো? আপাতত এই পর্বের জন্য প্লিইইজ প্রশ্নটা চেপে যাই? 😀 যাই হউক, এবার parsed_html এর ভ্যালু দেখার চেষ্টা করুন তো, আমরা যেভাবে আগে daily_star এর ভ্যালু দেখেছিলাম ঠিক সেইভাবে। আগের মতই দেখবেন স্ক্রীণে এক বালতি লেখা উঠে আসবে :/ এবার আসুন আমাদের parsed_html নিয়ে একটু কাজ করি; কয়েকটি হেডলাইন বের করি তো।

h5 দিয়ে HTML এর ভাষায় বুঝায় হেডিং। h1 থেকে h6 পর্যন্ত হেডিং আছে। কিন্তু আমরা এই সিরিজে এইচটিএমএল শিখছি না; তাই বিস্তারিত আলোচনা করলাম না এ ব্যাপারে। মনযোগটা পাইথনে দেই।

এবার headlines এর ভ্যালু দেখুন তো, ঠিক আগের মত করেই। ভালো করে দেখুন তো, কি আছে? 😀

হেডলাইনের অনেক কাছাকাছি চলে গিয়েছি আমরা। এখন একটু সেলিব্রেট করা যেতেই পারে; মাগরিবের পরে যদি এই ব্লগ পোস্টটি পড়তে থাকেন, তবে এক গ্লাস পানি খেয়ে নিন! আমরা এখন কি করলাম? parsed_html তথা Daily Star থেকে সকল h5 ট্যাগওয়ালা হেডিং খুঁজে বের করে (find_all) এনে headlines ভ্যারিয়েবলে রেখেছি। পাইথন তো মানুষের ভাষার মতই ^_^

এখন একটা কাজ করুন তো,

কোনকিছুর কথা মনে পড়ছে? হারিয়ে যাওয়া ভালোবাসা array এর কথা? 😉 পাইথনে array বলে কিছু নেই, array এর কাছাকাছি যা আছে তা হলো list। headlines একটি লিস্ট বলে স্কয়ার ব্র্যাকেটের মধ্যে index নাম্বার লিখে একেকটা হেডলাইন বের করা যাচ্ছে। এবার ছোট কয়েকটা সংখ্যা নিজে বসিয়ে ট্রাই করুন তো! (1-20)

অস্থির তো! জোস কাজ করে ফেলেছি, এখন ট্যাগের ভেতরের থেকে লেখাটা বের করে আনতে পারলেই হত 🙁 সেটা কি কোনভাবে করা সম্ভব বলে আপনার মনে হয়? ওইযে পুরনো dir() ফাংশন বন্ধুটার কথা মনে আছে? ও কিন্তু বলে দিত প্রতিটা অবজেক্টে কি কি তথ্য আছে, বা তা দিয়ে কি কি কাজ করে নেওয়া যায়। dir(headlines[0]) চালিয়ে দেখব নাকি কোনভাবে লেখা বের করে আনার কোন কায়দা বের করা যায় কিনা?

কায়দা মনে হয় আছে। text বলে একটা জিনিস দৃশ্যমান। টেস্ট করে দেখা যেতেই পারে।

কাজ হয়েছে কি? একটু চালিয়ে দেখুন না!

ইয়েএএএএএ! কাজ হয়েছে! হেডলাইন একটা একটা করে দেখা যাচ্ছে!!!!!!!! আমরা পেরে গেছি। কিন্তু, u"..." এইভাবে উদ্ভটভাবে লেখা আসছে কেন? :/ আমরা সুন্দরভাবে দেখতে চাই। আসলেই এইটা দিয়ে পাইথন বুঝাচ্ছে যে এটি একটি unicode স্ট্রিং, অর্থাৎ এখানে যেকোন ভাষার লেখা রাখা নিয়ে কাজ করা যাবে। এটাকে আরেকটু সুন্দর করে দেখতে হলে আমরা print() ফাংশনটি ব্যবহার করতে পারি।

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

আমার ব্লগ পোস্টগুলো পেতে আমার ফেসবুক পেজে লাইক দিতে পারেন, এবং নোটিফিকেশনও অন করে রাখতে পারেন।

হাতে-কলমে পাইথন: পর্ব ২ (রিকোয়েস্টের পরে কি হল?)

পর্ব-১ এ আপনাদের হোমওয়ার্ক ছিল কিছু জিনিসপাতি নিয়ে নাড়াচাড়া করা; কারণ পাইথন শেখার সবচেয়ে গুরুত্বপূর্ণ ধাপ হল নিজে নিজে পাইথনের “ফিচারগুলো আবিষ্কার করা”। যাই হোক, এবার দেখি পর্ব-২ এর হোমওয়ার্কের স্টেটমেন্টগুলোর আউটপুটের অর্থ কি! daily_star লিখে এন্টার চাপামাত্রই আউটপুটে iPython আপনাকে daily_star এর ভ্যালু দেখাবে; যেটা হল <Response [200]>

iPython Shell

আমাদের সাধারণ ভাষার জ্ঞান প্রয়োগ করে বুঝা যাচ্ছে যে, requestsলাইব্রেরি দিয়ে ডেইলি স্টার পত্রিকার সার্ভারে যে get করার request করা হয়েছিল, তার উত্তরে একটি response বা উত্তর এসেছে। অতএব আমরা বলতে পারি, daily_star হল একটি Response। (প্রোগ্রামাররা অনেকসময় ভাব নেওয়ার জন্য বলে, Response হল একটি ক্লাস, আরdaily_star হল ওই ক্লাস থেকে বানানো অবজেক্ট)

এবার যদি আমরা dir(daily_star) স্টেটমেন্টটি এক্সিকিউট করি (লিখে এন্টার চাপি বলার ইশ্মার্ট ভার্সন), তাহলে দেখতে পারব নিচের মত একটি ইয়াআআআআআ বিশাল লম্বা list

dir daily_star

লেখাগুলি একটু পড়ার চেষ্টা করি। অনেকগুলো কিন্তু পরিচিত শব্দ দেখা যাচ্ছে! এই শব্দগুলো হল daily_star এ কি কি তথ্য আছে, এবং এটি দিয়ে কি কি কাজ করা যাবে – সেগুলো! আমাকে বিশ্বাস হচ্ছে না তো? আচ্ছা নিজের চোখেই দেখনু না হয়! আপনার iPython Shell এ এক্সিকিউট করুন (সোজা বাংলা – লিখে এন্টার চাপুন):

দেখলেন কি সুন্দর করে URLটি ছাপিয়ে দিল! আরও তো অনেকগুলো আছে, আরেকটা ট্রাই মারি!

অবিশ্বাস্য ব্যাপার! ডেইলি স্টার পত্রিকার ওয়েবসাইট লোড করা সংক্রান্ত অনেককিছুই আছে এখানে।

url, status_code কে এক হিসেবে daily_star এর property বলা যায়। এরকম পাইথন প্রত্যেকটি অবজেক্ট বা জিনিসের প্রোপার্টি থাকে – হোক সেটা 555 এর মত একটি সংখ্যা কিংবা “I hate studying giant books” এর মত লেখা কিংবা ডাটাবেজের সাথে কানেকশন। ব্যাপারটাকে এভাবে চিন্তা করুন, বাস্তব দুনিয়াতে সকল জিনিসেরই কিছু বৈশিষ্ট্য থাকে, যেমন mobile.colormobile.pricemobile.screen_size। আবার প্রত্যেক জিনিসেরই কিছু সংশ্লিষ্ট action বা কাজ থাকে, যেমন mobile.switch_on()mobile.switch_off()

সত্য মিথ্যে আর গুটিবাজি

আচ্ছা, এখন একটা কাজ করি তো, নিচের স্টেটমেন্টটা এক্সিকিউট করি!

দেখাচ্ছে, True । পাইথন বলতে চাচ্ছে daily_star লোড করা ok, মানে তো ঠিকঠাকই লোড হয়েছে! এখন এমনি একটা মজার কাজ করে দেখি তো, daily_star.ok এর আগে not লিখি!

ওমা! এ তো বেমালুম গুটিবাজি, এক্কেবারে False হয়ে গেল। অবশ্য বেচারা পাইথন দোষ আর কি, not True মানে তো False ই। যাই হোক, মজা যথেষ্ট নেওয়া হয়েছে বেচারা পাইথনের সঙ্গে, এবার একটু মনে মনে ভেবে দেখুন তো আমরা আসলে কি করলাম 😉

কমে যাউক মোবাইলের বিল 🙁

এবার দেখি daily_star.text এক্সিকিউট করলে কি হয়!ভয় পাওয়ার কিছু নাই, আপনার কম্পিউটারের মাথা নষ্ট হয়ে যায়নি, ডেইলি স্টারের পেজে আসলেই এমন একগাদা Markup কোড রয়েছে। এই মার্কআপ কোডের মাঝেই লুকিয়ে আছে আমাদের কাঙ্খিত লেখা।

মার্কআপ কোডের সাহায্যে ওয়েবপেজের স্টাইল স্ট্রাকচার ইত্যাদি নির্দিষ্ট করা হয়, হেডিং, বডি টেক্সট, প্যারাগ্রাফ ইত্যাদি নির্ধারণ করে দেওয়া হয়। ওয়েবসাইটগুলোতে HTML নামের মার্কআপ ল্যাঙ্গুয়েজে কোড লেখা হয়।

কিন্তু এখন কথা হচ্ছে, এই এক বস্তা লেখা থেকে আমাদের হেডলাইনগুলো বের করব কিভাবে? সরাসরি ওই লেখা বের করতে পারার জন্য আমাদেরকে HTML Parse করতে হবে। আর নিশ্চয়ই এতক্ষণে বুঝে ফেলেছেন, পার্সিং এর কাজ করার জন্য আরও একদল বুদ্ধিমান প্রোগ্রামার কোন না কোন মডিউল বানিয়ে রেখেছে; ঠিক যেমন ইন্টারনেট থেকে ডাটা লোড করার জন্য আরেকদল কুউল প্রোগ্রামার requests লাইব্রেরি বানিয়েছিল। সেই কাজ আগামী পর্বে শুরু করব আশা করি! 😀

হাতে-কলমে পাইথন: পর্ব ১

তাহলে আমি ধরে নিয়েছি আপনি পর্ব-০ দেখে Anaconda ইন্সটল করে নিয়েছেন! তাহলে আপনার Start Menu / Application Launcher এ গিয়ে IPython (আই-পাইথন নাম হইলেও ইহা কোন অ্যাপল প্রোডাক্ট নহে) চালু করুন। চালু করলে একটা টার্মিনাল / কমান্ড প্রম্পটে দেখবেন একটা প্রোগ্রাম চালু হবে।

IPython Window

আচ্ছা পাইথনে কোডব্লকস বা এক্লিপসের মত কিছু নাই? ভিজ্যুয়াল স্টুডিও টাইপ কিছু?

অবশ্যই আছে। কিন্তু আপাতত আমরা একটি REPL ব্যবহার করব। এতে লাইন বাই লাইন কোড লিখে চালিয়ে দেখা যায়, আর কোড নিয়ে ইচ্ছেমত পরীক্ষা-নিরীক্ষা করা যায়। শেখার জন্য, বা টেস্টিং এর জন্য এক্কেবারে মোক্ষম। কিছুক্ষণ পরেই আমরা ফাইলে আমাদের প্রোগ্রাম সেভ করা শিখব। ইয়ে!

এখন ডেইলি স্টারের খবর জানতে হলে আমাদেরকে আগে ডেইলি স্টারের ওয়েবপেজটাকে লাগবে। ওয়েবপেজ লোড করেই তো খবর আনতে হবে নাকি! তো এরপর, গুগল মামাকে জিজ্ঞেস করে আমি জানতে পারলাম যে, ডেইলি স্টার পত্রিকার ঠিকানা হল:

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

কম্পান্ড প্রম্পট / টার্মিনাল উইন্ডো / কালা উইন্ডোটিতে একটা নিচের দুইটা লাইন লিখি।

iPython Window

দুই নাম্বার লাইনটি লেখার পর আপনাকে কয়েক সেকেন্ড অপেক্ষা করতে হবে, কারণ পাইথন তখন ইন্টারনেট থেকে পেজটি লোড করতে ব্যস্ত! ততক্ষণে বুঝে নিই আমরা কি করে ফেললাম! import requests লিখে আমরা একটি পাইথন মডিউলকে লোড করেছি, যার নাম requests এবং কাজ হল ইন্টারনেট থেকে জিনিসপাতি আনা বা পাঠানো।

যখন বুদ্ধিমান প্রোগ্রামাররা পাইথন দিয়ে বড়সড় সফটওয়্যার বানানো শুরু করল, তখন তারা দেখল যে,

“আরে বাবা, ইন্টারনেট থেকে তো বার বার পেজ লোড করার জন্য আমাকে একই কোড বার বার লিখতে হচ্ছে। এক কাজ করি, সবগুলো ইন্টারনেটে কাজ করার কোড এক জায়গায় রেখে বান্ডল করে রাখি!”

ব্যস! তখনই তারা সব ইন্টারনেটে কাজ করার কোড একত্র করে বানিয়ে ফেলল একটা module এবং আমাদের সকলের ব্যবহারের জন্য রিলিজ করে দিল! আর সেই মডিউল ব্যবহার করে আমরা ডেইলি স্টারের পেজটি ওপেন করছি! এবার আসি দ্বিতীয় লাইনে।

লোড করা পাইথন মডিউলটিকে আমরা অবশেষে ব্যবহার করলাম। কোড থেকেই বোঝা যাচ্ছে, requests.get(...)। অর্থাৎ ইন্টারনেট থেকে ওয়েবপেজ আনা-নেওয়ার ব্যাপারস্যাপার ঘটছে এই জায়গায়। এই get() হল একটা ফাংশন, আর এই ফাংশনগুলো হল ওইসব বুদ্ধিমান প্রোগ্রামারদের লেখা কোড ব্যবহারের উপায়। এই ফাংশনে একটি URL দিয়ে দিলেই পেজ লোড করে ফেলে! রকেট সায়েন্স! daily_star = ... লিখে আমরা বুঝালাম, = চিহ্নের ডান দিকের যে ডাটা বা তথ্য আছে ( এক্ষেত্রে ডেইলি স্টারের পেজ ) সেটাকে daily_star নাম দিয়ে মেমরিতে সেভ করে রাখা। (হ্যাঁ, ভ্যারিয়েবল ডিক্লেয়ার করে ভ্যালু অ্যাসাইন করেছি!

এবার আপনার জন্য একটি হোমওয়ার্ক।

  • daily_star লিখে এন্টার চেপে দেখুন, ভ্যারিয়েবলের ভ্যালু কি।
  • dir(daily_star) লিখে দেখুন কি হয়।
  • daily_star.text লিখলে কি হয়?