Category: Bangla Computing

সহজ বাংলায় ডিজাইন প্যাটার্ন – সিংগেলটন (Singleton)

singleton

এই সিরিজে এর আগে আমরা আলোচনা করেছি ফ্যাসাড এবং ফ্যাক্টরি প্যাটার্ন নিয়ে, আর আজ আলোচনা করব সিংগেলটন প্যাটার্ন নিয়ে।

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

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

প্রোগ্রামিংয়ের সময় সিংগেলটন প্যাটার্ন অনেকভাবে অ্যাপ্লাই করা যায়, যেমন নিচের কোডে একটি কমন কনটেইনার অবজেক্ট সবাইকে আরেকটি অবজেক্ট সিংগেলটন প্যাটার্নের মাধ্যমে রিটার্ন করছে, বার বার নতুন অবজেক্ট তৈরী না করে। আপনারা এই কোড টি দেখতে পারেন, পিএইচপি তে লেখা https://gist.github.com/hasinhayder/7487898b7d38aefe3179 ।

https://gist.github.com/hasinhayder/7487898b7d38aefe3179

এই কোডে RentACar একটি কনটেইনার অবজেক্ট যে কিনা দুইজন প্যাসেঞ্জার কে একই কার দিচ্ছে (ধরে নেন যে একজন প্যাসেঞ্জার কে নামিয়ে দিয়ে আরেকজন প্যাসেঞ্জার কে একই কার পাঠিয়ে দিয়েছে, হে হে)। কোড রান করালে দেখবেন দুজন প্যাসেঞ্জারই যে গাড়িটি ব্যবহার করেছে তার নাম্বার প্লেট একই 🙂 আমি খুব সহজে বোঝানোর জন্য স্ট্যাটিক অবজেক্ট দিয়ে উদাহরন টি করে দেখালাম আর কি

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

সহজ বাংলায় ডিজাইন প্যাটার্ন – ফ্যাক্টরি (Factory)

steering2

এর আগেরবার আমরা ফ্যাসাড ডিজাইন প্যাটার্ন নিয়ে আলোচনা করেছিলাম, আজকে তারই ধারাবাহিকতায় আলোচনা করব ফ্যাক্টরি নামের এই ডিজাইন প্যাটার্ন নিয়ে। ফ্যাক্টরি বা কারখানায় কি হয় বলেন তো? কোন একটা বা একাধিক রকমের জিনিসপত্র তৈরী করা হয়। আপনি যদি কখনো সাবানের কারখানায় যান তাহলে আপনি কি চাইবেন? “সাবান” চাইবেন, তাই না? – কারখানায় আপনাকে তৈরী করা সাবান দিয়ে দিবে যা আপনি তখনই ব্যবহার করতে পারবেন। এখন যদি সাবানের কারখানা বা ফ্যাক্টরি না থাকত তাহলে আপনাকে কত কষ্ট করে বাসায় বসে বসে চর্বি জ্বাল দিয়ে তারপর গ্লিসারিন মিশিয়ে সাবান বানাতে হত। কিন্তু সেটা কষ্টকর বলে আমরা তা কখনোই করি না। আমরা কারখানায় থেকে সরাসরি ব্যবহারযোগ্য তৈরী পন্য পেয়ে যাই – আমাদেরকে জানতে বা বুঝতে হয় না যে পন্য/অবজেক্ট টি কিভাবে বা কি প্রক্রিয়ায় তৈরী হল।

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

[sourcecode language=”php”]
$db = new DbManager();
$userTable = $db->getTable("users");
//now $userTable object can interact with ‘users’ table in the db, like $userTable->insert()
[/sourcecode]

এখানে DbManager একটা ফ্যাক্টরি ক্লাস যেটা তার getTable() ফ্যাক্টরি মেথডের সাহায্যে একটা টেবিল অবজেক্ট তৈরী করে রিটার্ন করছে যার মাধ্যমে আপনি ডেটাবেজের টেবিল গুলোর সাথে কাজ করতে পারছেন, কিন্তু আপনাকে জানতে হচ্ছে না যে এই টেবিল অবজেক্ট টা কিভাবে তৈরী হয়েছে । খেয়াল করলে দেখবেন আপনার প্রজেক্টে এরকম অসংখ্য মেথড কল করা আছে যেখানে একটা অবজেক্ট এর মেথড কল করে আরেকটা নতুন অবজেক্ট পাওয়া যায়। এই পুরো ঘটনাটাকেই অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ে বলে ফ্যাক্টরি ডিজাইন প্যাটার্ন 🙂

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

WordPress Plugin for Bengali WordPressians (?)

Ah ya, let me call you WordPressian if you are a wordpress fan. Last night I developed a small plugin for bengali wordpress users. If you install this plugin you will be able to write in Unijoy, Phonetic and Plain English mode. You will get three buttons as shown here
editor.gif

Then you can type Unicode on se,ecting either UniJoy or Phonetic
editor2.gif

And you can write english anytime by clicking English button or pressing Control+C

editor3.gif

Thats it. I will release this plugin under Ekushey.org by Tomorrow

Golpo is on the way

I am working these days on my bangla chat portal ‘Golpo’. I am very ambitious about this project and I am trying to make it one of the most accessed website in near future (uh eh, I am overoptimistic, always).. I am adding some unique features which are not usually present in this kind of services. I have also a plan to release it’s desktop version.

I will run this project solely by me, no media or no parenting company, solely by me. Because I always feel comfort while there is no one over my head to report, a common symptom of all developers indeed. So How did I spend last couple of days? Last couple of days I was very bz with pageflakes. Its one of the best company I have ever seen in Bangladesh, really so cool.

I am currently seeking PHP developers for somewherein. Its getting hard day by day to find good developers around.

FCiCQ contributed some cool pathces in my wordpress4sqlite project. A severe bug fixed in one of my old projects. A new moderation panel has been developed for somewherein blog. I am also creating a bdjobs account for me, well, may be useless at all.

Now just finishing the book, hopefull it will release very soon. Ah, I am being a robot, a total robot.

A brand new day

Yesterday Dhaka was a hot city due to political strike of opposition party. I was in home with new idea and works. I wake up at 9PM and started writing the pending and last chapter of my wordpress book, “developing widgets and plugins”. Ayesha and Afif went to a relatives house so that I was all alone in home and my work ran on full throttle. I completed around 13 pages yesterday.

At night I started my long planned project “Golpo”, the Unicode based bangla group chat solution for netizens. I was working with the DAO and I almost finished it. I was planning for this project for a long time and DB schema was ready, just needed to start the work.

From now on, I will publish my upgrade regularly on this project. I know that I will be stuck with UI part because I am not a good designer.

Lets roll the project – It will be finished soon.

Dear God-Thanks for Giving me yesterday

Yesterday was a great day in my life. I completed my unicode based phonetic parser after dreaming for a long long time. It was not that much tough as I thought while planning. It works great. Finally at 11:30 PM Hasan suggested a nice change and I implemented it to ease the life of end-developers who will incorporate bangla unicode parsers in thier web apps. It was totally around 15 hours job including planning, learning and implementing.

Yesterday I also managed the data in systech digital and it worked fine.

I am releasing the unicode parser from Ekushey.org and Google open source community. From now on, i can use this project in my upcoming localized applications.

Thanks God for giving me yesterday and thanks for giving me the spirit to work.

Storing Bangla Unicode Text in MySQl Database

Well, If you just set the collation as “utf8-general-ci” that wont do all the things for storing and retrieving bangla unicode texts properly. There are something more to do. Last night while working for a project I just found the solution.

You must add these two lines just after selecting the database, i.e mysql_select_db() function.

mysql_query(‘SET CHARACTER SET utf8’);
mysql_query(“SET SESSION collation_connection =’utf8_general_ci'”);

After executing these two statements MySQL will handle the rest.

Give me a notepad – I will give you a community

People using internet spend most of their time in chatting, gossiping or communicating with friends, co workers and family members. Many of them also spend time on blogging (thats a kind of communication too!) and development works. When we planned for somewhereinblog, a common platform for people where they can start blogging, Emran and I suggested arild not to start another english blogging system, rather start a community where people can share their thoughts in bangla. Thats how somewherein bangla blog was created. Emran worked so hard to deploy the system and then I took control for over three months. Now emran is developing the blog again. Oh I forgot shahriar is also working in.

So why did I start a topic on this? Actually I want to share some idea, drawbacks and solutions from technical perspective as well as users point of view. I will also share some thoughts on building a greater community useful for all. When we finalized our planning – We decide to develop this application in PHP. Because only in PHP we can deliver such a huge application in such a short time. Though we are still spending time on it but it was really a very small amount of time to develop a version that works!!

Developing a system, specially an web application, is not so easy to develop as like as normal applications. From the very first time we wanted to avoid Unicode. People asked me so many times why did I do that. Well, if you look at the general non-tech users of a system where they can express themselves and would not bother about any configuration, what else can you expect except ascii? Most users of community sites are so non-tech that they really dont want to be bothered with lot of configuration for unicode. I agree that most of teh PCs today runs on windows xp. But in cyber cafe and other places you should not forget that these PCs are not unicode compliant (atleast indic script) just after installing winXP. You need to configure indic script options with administrative privileges and others which general users want to avoid indeed. So do I. I avoid unicode when my audience are general users. In the meantime I also agree that a hybrid system will work better. That means a bangla community site must be capable to render its content on both unicode and roman form, depending upon the choice of visitors.

One more complexity arises when you plan to take input in bangla form. In a blog, users should be able to input contents in bangla. Thats why I developed a bijoy compliant javascript code which hooks the keystrokes and display characters according to the key-mapping of bijoy. All you have to do is hook the keyPress method – my script will do the rest. I know that this script has a great potential if you want to develop bangla web applications, specially for web.

After a few days when one of my friend Foyzur, the developer of Shabdik, showed me his software and the style of transliteration he used in it, Arild was extremely surprised. Since that time we tried to implement a solution where people can write bangla phonetically and in web. That was an extremely complex task and I aggree, I did a lot of RnD on that. Finally the phonetic version of my previous javascript code was released. You can check both of this script in somewhere in bangla blog.

Now the main point of this article, A blog site can’t fulfill all the increasing requirement of community sites. If you look here and there, you will find some great community apps like Flickr, Craigslist, Meetup, Hi5, Orkut, MSN Spaces, My Yahoo, Opera Community, 43People, 43 Things, Chat Applications and a lot… – So what can we develop to make a complete and rich bangla community? I plan for the followings

1. Definitely a solution where people can chat. A desktop application, specially a hybrid one which can connect with YM and MSN messaging protocol or Jabber protocol (or using simple xmmp) we must have a chat client where people can chat in bangla. We can develop an webbased solution (like meebo) or an web based IRC client if we really cant provide a huge backbone. But developing a chat application is must.

2. A resource sharing solution – This could be an application where people can share their resources, like photos, music, documents but everything will be in Bangla. Creating a simple bangla interface for a comple photo gallery is not a big job. If we want to avoid the hassle of storage or others, we can even develop a simple interface to Flickr.

3. A job site – Really, a job site in bangla will blow up peoples mind because a huge percentage of people in Bangladesh are very poor in english. If you just think about high-class jobs like Telecoms, Banking or IT, no – thats really a very small part of the jobs in Bangladesh. For participatory job management, a site in Bangla will be a great idea.

4. Blogging – Thats what somewherein blog does. It has a huge on growing community of bloggers who started their blogging life with this beautiful tool . The most successful part of this story is in somewherein blog people share themselves – they feel themselves and really they are empathetic, something even more that just sympathy. They buildup a greater community where they are helping each of them. You cant feel the real flavour unless you are a member of this community.

5. Bangla Forum: Beside blog a forum is a very popular application where people can debate. A forum in bangla will be a great addition in the bangla computing sector where there are only a few applications are available. I developed a bangla forum which will be up soon.

6. Bangla Emailing: BanglaExpress is the first and largest bangla emailing solution. The most surpring part of bangla express is that it works totally independent of font. No matter where you are mailing, No attachment, no font, nothin – Just mail as usually and the receiver can see the mail. Currently BanglaExpress has more than 46000 registered users, thats a big number.

7. Bangla Operating system: Now the most interesting part. There are several developers in bangladesh working for a bangla operatign system. They converted a knoppix distro into bangla and run that project under the title “Ankur”. This group is also working for localizing open source office solutions like openoffice, dictionaries and so forths.

So, How about building a bigger community just for Bangla? How about spreading the word “Bangla” to every bangali? Lets come and work together, We will be able to deliver a better one than it is currently.

BDBlogs.net – The first Bangla Blog Aggregator

Recently I have visited a site www.bdblogs.net which aggregates the posts from various bangla bloggers website. The service is really cool. The display all the posts in this page. When someone clicks over any post, it will redirect to the original blog. I like this service very much. But I suggest some modifications

1. Lets display more than 10 posts per page
2. Lets display the authors name under each post

Today I have subscribed to their RSS and you will find all their latest posts in my blog, at the lower right corner.

Thanks for developing such a service.