Categories
Bangla Python

পাইথনে সিঙ্গলটন প্যাটার্ন

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

পাইথনে সিঙ্গলটন প্যাটার্নটা বেশ কয়েকভাবে করা যায় । তবে সবচাইতে গ্রহনযোগ্য উপায় হচ্ছে ডেকোরেটর ব্যবহার করা । আমরা প্রথমেই কোড দেখে নেই –

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

এর মানে দাড়াবে অনেকটা এরকম –

তো এই জিনিসটিই আমরা সিঙ্গলটন প্যাটার্ন তৈরি করতে ব্যবহার করছি । প্রথমে আমরা একটি ক্লাস বেইজড ডেকোরেটর ডিফাইন করলাম এবং তারপর আমাদের Person ক্লাসে ডেকোরেটর এ্যাপ্লাই করলাম । আসলে কি ঘটছে এখানে? ব্যাপারটা আসলে অনেকটা এরকম –

হয়ে যাচ্ছে –

আমরা আর চাইলেও Person ইনস্ট্যান্স তৈরি করতে পারবো না । তাই বাধ্য হয়ে আমরা Instance() কল করবো । আসলে আমাদের কলটি হবে অনেকটা এরকম –

singleton ক্লাস টি __init__ করার সময়ই আদি এবং অকৃত্রিম Person ক্লাসটি পাস করে দেওয়া হয় যেটি self._decorated এ থেকে যায় । এরপর Instance() মেথডের কাজ বেশ সহজ সরল । সে দেখে আগেই ইনস্ট্যান্স তৈরি করা আছে কিনা । না থাকলে self._decorated এ থাকা মূল ক্লাস থেকে একটি ইনস্ট্যান্স করে রিটার্ন করে এবং নিজের কাছে self._instance এ সেইভ করে ।

ক্লাস বেইজড ডেকোরেটর বুঝতে সমস্যা হলে এভাবে এক্সপেরিমেন্ট করে দেখা যায় –

Categories
Linux

Building a FM Radio Transmitter with Raspberry Pi

DISCLAIMER: Building FM transmitters and transmitting on FM frequency requires government permissions in many countries/regions. I am posting this for educational purposes and I strongly recommend not to use this for any other purposes. I shall not be liable for any use of the contents of this post.


I have owned a Raspberry Pi for a while now but haven’t really done anything significant with it other than installing a LAMP server and running some random Python codes on it. Today, while reading Rasp Pi related articles on the internet, I came across a reddit thread where a guy posted about his home made raspberry pi based FM transmitter which he used to relay random messages from inside his car to the surprise of other people on the street. I’m sure he had so much fun doing that though that was illegal! 😀

It was such an inspiration for me, specially because I needed no extra hardware! The Pi hardware itself is capable of transmitting in really short range (~10cm). I started googling on how I can do the same and soon I found enough resources. In fact I found the source code and a precompiled binary to do this. I couldn’t wait to test! I plugged in my Pi and transferred the source code to the device and turned the radio on with the provided sample clip. Then browsed for the default station on my android phone. Voila, it was working!

It is really really simple!

# Grab the application package – Download.

# Turn on and SSH into your Raspberry Pi. Unzip the package and transfer the directory to the Pi.

# cd into the directory and run:

Please note that you need root access for the transmitter to work. So make sure you used “sudo”. You can replace the sound.wav with any file that is 16 bit 44.1kHz Mono format.

By default the transmitter will transmit on FM 103.3 MHz frequency. You can pass the frequency as an additional parameter to the application. Eg.

The transmitter range can be extended up to ~100m by connecting wires to the GPIO pins. I’m going to try that tomorrow and see how it goes.

The application package also contains a python module that provides an API to programmatically run sounds.

So what’s next? I’m going to look for a decent sound conversion tool to convert my mp3s into mono wav. And I might write a small program to rotate the tracks on it.

Categories
Bangla PHP Screencast

cURL Basics – Bangla Screencast

cURL Basics from Abu Ashraf Masnun on Vimeo.