কিভাবে পাইথনের বেসিকস শিখবো?

বেসিক থেকে ইন্টারমিডিয়েট লেভেলের পাইথন প্রোগ্রামার হিসেবে নিজেকে গড়ে তোলা

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

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

পাইথন প্রোগ্রামিং জগতে আপনাকে স্বাগতম!

পাইথন নিঃসন্দেহে অসাধারণ একটি প্রোগ্রামিং ল্যাঙ্গুয়েজ। শিখতেও যেমন মজা তেমন কাজ করেও আরাম। আমার অত্যন্ত প্রিয় এই প্রোগ্রামিং ল্যাঙ্গুয়েজ কর্মক্ষেত্রেও আমার প্রাইমারী ল্যাঙ্গুয়েজ! 🙂 পাইথন সারাবিশ্বের অন্যতম জনপ্রিয় এবং বেস্ট পেইড প্রোগ্রামিং ল্যাঙ্গুয়েজ

পাইথন শিখতে আগ্রহী কিন্তু কিভাবে শুরু করবো? 

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

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

আর্টিকেল

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

যদি ইংরেজীতে সাছন্দ্য বোধ করেন তবে, মিডিয়ামে প্রকাশিত এই আর্টিকেলটি আপনার জন্যে রিকমেন্ডেডঃ

পি ডি এফ/অনলাইন বুকস

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

  • Automate the Boring Stuff with Python: Practical Programming for Total Beginners
    এই বইটি আমার খুবই ভালো লাগে। কারণ, বইয়ের উদাহরণগুলো প্রজেক্ট এর মতোই! ফলে, একটা একটা স্টেপ বা, প্রজেেেক্ট শেষ করেই প্রাপ্তির স্বাদ পাওয়া যায়। যেমন, স্ক্রিপ্ট এর মাধ্যমে বিভিন্ন ওয়েবসাইট ভিজিট করা ও ওয়েবসাইট এর বিভিন্ন এলেমেন্ট এর সাথে ইন্টারেক্ট করা ইত্যাদি ।
  • Fluent Python
    এই বইটির বিশেষত্ব হলো পাইথনের স্পেশাল ফিচার গুলো কে খুব ভালোভাবেই কভার করেছে। পাইথনিক ভাবে কোড লেখার উপরে গুরুত্ব দেয়ার কারণে বইটি আরও আকর্ষণীয় হয়ে উঠেছে। ফলে, আপনার যদি অন্য প্রোগ্রামিং ল্যাঙ্গুয়েজ থেকে শেখা প্যাটার্ন গুলো ভুলে গিয়ে সুন্দর পাইথনিক কোড লিখার নিয়মাবলী জানতে পারবেন।
  • Python Cookbook
    এই বইটা রেসাইপে ভরপুর। কি নেই এই বইয়ে? প্রজেক্ট বেইজড এই বইয়ে সকল মৌলিক বিষয়গুলোর সাথে সাথে, সচরাচর করা কাজগুলো যেমন ডাটা প্রসেসিং বা নেটওয়ার্ক প্রোগ্রামিং সহ নানাবিদ টপিকসে আলোচনা করা হয়েছে। এডভান্সড লেভেলের টপিক যেমন মেটা প্রোগ্রামিং ও কভার করার কারণে বলা চলে, আগের বইগুলো থেকে এটা একটু এডভান্সড বৈকি। তবে নিঃসন্দেহে বিগিনার জন্যে অনেক কিছুই শেখার আছে এই বইয়ে!
  • Pro Python
    আরেকটা এডভান্সড বই। পাইথনের বেস্ট প্র্যাক্টিস জানার জন্যে এই বইয়ের বিকল্প আরেকটি বই খুঁজে পাওয়া দুস্কর। আপনার পাইথন স্কিলকে প্রফেশনাল লেভেলে নিতে চাইলে, বইটি পড়ে ফেলুুুন। 

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

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

এছাড়াও স্মার্ট ফোনে পি ডি এফ ডাউনলোড করে রাখলে সেটা, বিভিন্ন অবসরে কিংবা ট্রাফিক জ্যামে বই পড়তে কাজে লাগে! 
 

চর্চা 

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

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

Classic 2048 - 4x4 Board Game

Classic 2048 Game Tips & Tricks

ক্ল্যাসিক ২০৪৮ গেইম টিপস ও ট্রিকস 

আজকে আমি ২০৪৮ গেইম এর এন্ড্রয়েড সংস্করণ এর প্রথম ভার্সন রিলিজ দিয়েছি নাম – CLASSIC 2048

Image result for get it on google play

২০৪৮ গেইম – মূলতঃ  ৪ x ৪ বোর্ডের একটি গেইম যেটা জোড় সংখ্যার যোগফলের উপর ভিত্তি করে তৈরি করা হয়েছে। খেলার শুরুতে টাইলসের নাম্বার থাকে ২ পরবর্তীতে একই সংখ্যার টাইলস গুলো কে একত্র করে করে বড় বেজোড় সংখ্যা গুলো তৈরি করা যায়। তবে একত্র করার রুল কিন্তু একটাই শুধুমাত্র সেইম নাম্বার এর টাইলসকেই একত্র করা যাবে। এরকম একত্র করে করে ২০৪৮ সংখ্যার একটি টাইলস বানাতে পারলেই কেল্লাফতে!

তবে, আমার রিলিজ করা গেইমটি ২০৪৮ টাইলস এর পরেও খেলা চালিয়ে যাওয়ার ব্যবস্থা রেখেছি। আর মুভ ফিরিয়ে নেয়ার কোন ব্যবস্থা রাখা হচ্ছে না। যাতে করে স্কোরের স্বচ্ছতা বজায় থাকে। ২০৪৮ গেইম এর হিস্টোরি কিন্তু বেশীদিনের না। ইতালির একজন গেইম ডেভেলপার এইতো সেদিন( ২০১৪ সালের দিকে) এই গেইমটি আবিষ্কার করেন। তিনি জাভাস্ক্রিপট আর সি এস এস দিয়েই গেইম এর ডেমো বানিয়ে সবাই কে তাক লাগিয়ে দেন!

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

কর্নার গেইম!

Screenshot from 2018-11-11 01-54-44যে কোন একটি কর্নারকে টার্গেট করে, ওই কর্নারে বোর্ডের সবচেয়ে বড় টাইলসকে মুভ করে এই স্ট্রাটেজি কাজে লাগাতে পারেন। আমি সাধারণত নিচের যে কোন একটা কর্নারকে টার্গেট করে এর পরে ছোট থেকে বড় ক্রমানুসারে সাজানোর চেষ্টা করি। এইটা খুবই কাজে দেয় তবে, একটা জিনিস মাথায় রাখতে হবে তা হলো কোন ক্রমেই যাতে সবচেয়ে বড় সংখ্যার টাইলসটি যাতে কর্নার থেকে সরে না যায়। গেলে মহা বিপদ এবং বেশীর ভাগ ক্ষেত্রে রিকোভার করা আর পসিবল হয় না

তাই, ‘সবসময় চেষ্টা করতে হবে একদম কর্নারের টাইলস এ সবচেয়ে বড় সংখ্যাটি যেন স্থির থাকে।’ 

প্রটেক্ট কর্নার

আগেই যেটা বললাম শুধু মাত্র এদিক ঐদিকে সোয়াইপ করে আপনি হয়ত হাইয়েস্ট ২৫৬ রিচ করতে পারবেন। কিন্তু ২০৪৮ রিচ করা অনেক কঠিন হবে। কর্নার টাইলসের হাইয়েস্ট ভ্যালু এর টাইলস কে প্রটেক্ট করার আরেকটা টেকনিক হলো এর আশে পাশের টাইলস গুলোকে ও বড় করে তোলা। তখন, ওই কর্নার পিসের মুভ করার পসিবলিটি কমে যায়।

তাড়াহুড়ো না করা

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

শেষ রো ফিলাপ করে রাখা

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

বড় নাম্বার কে তাড়া না করা

সবসময় বড় নাম্বার কে তাড়া করে বেশিদূর জাওয়া পসিবল না। আপনাকে অবশ্যই সামগ্রিকভাবে চিন্তা করতে হবে। একটু প্ল্যানিং করে খেললেই খুব সহজেই ১০২৪ + স্কোর করে এমনকি ২০৪৮ রিচ করে ফেলতে পারেন। তাই, বড় নাম্বার কে তাড়া না করে সুন্দর ভাবে গেইম প্ল্যান সেটআপ করে নিবেন।

এক সাথে অনেক গুলো টাইলস মিলানো

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

এছাড়াও, আপনার যদি কোন টিপস বা ট্রিকস থাকে তাহলে কমেন্টে জানাতে পারেন। 😉

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

https://play.google.com/store/apps/details?id=com.wasi0013.classic2048

 

Classic 2048 – Game Play (Winning Strategy)

How to take Password input in Python

Did you know? There is a python module in Python Standard Library called getpass. The purpose of this library is to securely take input from user!

The module is very handy for sensitive inputs such as passwords / keys or any kind of credentials.

Simplest example of getpass could be this:

import getpass
password = getpass.getpass("enter password:")

The code is pretty straight forward! This password prompt will act similarly to unix password prompt, and it won’t echo user inputs (i.e. the key presses) hence, the password you type won’t be visible to end users. The best thing about this module is it is cross platform. So, you can use it on Windows, Linux or Mac.

There are only two functions listed in  The official documentation.
These are:

  •  getpass() – password prompt
  • getuser() – collects username from different environment variables

But, there are more than that, let me show you 😉

>>> import getpass
>>> dir(getpass)
['GetPassWarning', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_raw_input', 'contextlib', 'fallback_getpass', 'getpass', 'getuser', 'io', 'os', 'sys', 'termios', 'unix_getpass', 'warnings', 'win_getpass']

If you inspect carefully you will notice there are two more functions listed in the __dir__

  • unix_getpass( )
    unix_getpass(prompt='Password: ', stream=None)
     Prompt for a password, with echo turned off.
     
     Args:
     prompt: Written on stream to ask for the input. Default: 'Password: '
     stream: A writable file object to display the prompt. Defaults to
     the tty. If no tty is available defaults to sys.stderr.
     Returns:
     The seKr3t input.
     Raises:
     EOFError: If our input tty or stdin was closed.
     GetPassWarning: When we were unable to turn echo off on the input.
     
     Always restores terminal settings before returning.
  • win_getpass( )
    Help on function win_getpass in module getpass:
    
    win_getpass(prompt='Password: ', stream=None)
     Prompt for password with echo off, using Windows getch().

The docstring of these functions tells it all doesn’t it? 🙂

Note that, the win_getpass function uses the Windows getch() so, it requires the msvcrt module.

 

 

When to use Abstract Class in Python?

In this article, I would like to answer a common question that pops up in mind whenever we start to learn Object Oriented Programming in Python.  But before we begin exploring the use case, first lets briefly discuss about what really is an abstract class in python:

abstract_base_class_python

Abstract Class

Abstract Class is a class that contains one or more abstract methods. These abstract methods are  methods without any implementation!

Sounds weird right?  Actually it is true for most of the Object Oriented Programming Language. Abstract method has no implementation in other words no function body! Sub classes implement these abstract methods to fulfill their needs.
But, Python’s abstract method is somewhat different as it is possible to create abstract method with body in python! To know more about python’s abstract class checkout this tutorial 

Now, lets move on to our original question when to use abstract class?

Use of Abstract Class

Abstract class is useful when we want to define many different classes with similar class structure e.g. with same method signatures. Now I will try to explain it with an example. Lets say we want to create classes for different shapes such as Triangle, Rectangle, Pentagon, Hexagon and so on…

In this case, you will find a lot of attributes that are common in each shape but, require different implementation.
For example, consider the attribute area, for all these shapes you will need different formulas to calculate area. Hence, for each classes of Triangle, Rectangle and other shapes there will always be a method called area which will calculate area but, the implementation of this method ‘area’ will vary from one to another.
Like the area attribute there are tons of different attributes that are common in each shape but requires different implementation for each classes. These common properties will be pretty cumbersome to handle if we don’t group them.
Thus, it opens up an opportunity to abstract things little bit so that we can maintain them in a better way.

We can simply create an Abstract class and name it say as `Polygon` with all the common attribute/properties of shapes and, use it to create rest of the classes for different shapes.

from abc import ABC, abstractmethod


class Polygon(ABC):
    @abstractmethod
    def area(self):
        pass
    @abstractmethod
    def perimeter(self):
        pass

The plus point is, abstract class can’t be instantiated. So, object creation by instantiating the Abstract Class Polygon won’t be possible.

If you try to instantiate the Polygon object like below:

obj = Polygon()

It will raise an Exception

TypeError: Can't instantiate abstract class Polygon with abstract methods area

Now that we have our abstract base class for different shapes we can create different sub classes for these shapes just like below:


P.S. Whenever you find a situation where many of your classes has a common structure but require different implementations you can use abstract class to construct a Base Class for abstraction. 

Why Abstract Class is necessary?

Abstract class offer many things such as semantic contract between clients & class implementations, also provides protection from missing implementations of must needed methods of sub classes. It means rather than getting an AttributeError at run time just to know that you forgot to implement something really important, the abstract class will let you know straight at initialization that you have forgotten to implement an important method(abstract)!

By making sure at instantiation time  that the sub classes implement some particular methods while maintaining class hierarchy Python’s Abstract Base class saves you from bugs and overheads.

I would recommend reading this stack overflow question and answers for the in depth discussion on the above question.