Wednesday, July 8, 2015

ক্যাচাল

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

আশেপাশের মানুষজনও মাঝে মাঝে ক্যাচাল করত। এক বাসার মুরগী তার বাচ্চাকাচ্চা নিয়ে প্রায়ই পাশের বাসার উঠানে যায়। এটা নিয়ে দুই বাসার গৃহিণীদের মধ্যে ক্যাচাল। চাঁটগাইয়া ভাষায় সেসব ক্যাচাল শুনতে ভালই লাগত (আমার ছোটবেলা কেটেছে চট্রগ্রামের বিভিন্ন উপজেলায়)।

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

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

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

আড়িপাতা আসার পর বুঝলাম ক্যাচাল কত প্রকার ও কি কি। প্রথম প্রথম আড়িপাতা গ্রুপে ঢুকতাম মজার মজার ঘটনা পড়ার জন্য। কিছুদিন পর দেখলাম কিভাবে কিভাবে যেন কয়েকদিন পর পরই গ্রুপে কিসব ব্যাপার নিয়ে ক্যাচাল চলে। ২-৪ দিন পর আবার থেমেও যায়। আর এখন দেখি ক্যাচালের উপরেই গ্রুপটা বেঁচে আছে। আজকাল গ্রুপে একেবারেই কম ঢুকি, ঢুকলেও সেটা মূলত মানুষের তর্কাতর্কি দেখে মজা নেওয়ার জন্য। মাঝে মধ্যে হয়ত ২-১ টা মজার পোস্ট চোখে পড়ে।

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

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

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

যাইহোক, আশা করি ক্যাচাল করতে করতে বিরক্ত হয়ে মানুষ একসময় ক্যাচাল করা বন্ধ করবে। ক্যাচাল করলেও মানুষজন অন্তত কাজের কিছু নিয়ে ক্যাচাল করুক, এই প্রত্যাশাই করি। 

Friday, July 3, 2015

What your users hate most - application crash

If you are using an Android phone for a while, you should be familiar with this error message "The application (process com.some.name) has stopped unexpectedly". If you are an Android app developer, I bet you spent a significant of amount of time looking at this message and then thinking what the hell has gone wrong this time. This is the generic message shown by the Android system when an application crashes.

By the time you must be thinking about the title of this post "What your users hate most - application crash" - What do I really mean? No one likes crashes. Actually many users dump an application as soon as it crashes. So what this post is all about? Let me share my story.

I have a small application in Google play - Ridmik Bangla Dictionary. It is an open source English to Bangla dictionary. It doesn't have a good number of words compared to other English to Bangla dictionaries, but because of its open source nature some other dictionaries are built using its source code. A good number of people are already using it - by the time I'm writing this post it has been downloaded about 400k times.

I developed it during my term final examination in Level 2 term 2. It took me about three days to develop it. I was in a hurry because my Electrical & Electronics examination was approaching. After finishing the coding, I tested it on two of my friends' phone - it was working. I also tested it in two different Android emulators - working fine. Finally, I tested it in another emulator for Nexus 7 - this time it crashed on the first run. I tried again and again, but every time it crashed as soon as I opened the app. I tried debugging the problem by analyzing the error log - it seemed that there is something wrong with the database. I was using a pre-built SQLite database, and as Android by default doesn't pre-built databases I have to use some third party codes to do it. Seemingly some tables necessary for bookkeeping wasn't being created, so the application was crashing on its first run.

I spent hours to find out why those tables were not being created but failed. The same app was working other emulators, but it was crashing on that one specific emulator. At last I gave up trying, thinking that there was something wrong with the emulator itself. Shortly after I published the app.

After publishing the app, I found out the application is not working on some phones. I collected the crash log from Google Play developer console - the app is crashing for the same reason, some tables in the database weren't being created. I didn't know how to solve this. I estimated the application isn't working in around 5% of the phones, and 5% user wouldn't be a big deal. So I left it there. Unfortunately, things are not so simple. Those users started coming back and giving low ratings. They have a good reason to do so, they downloaded an app, opened it and it just crashed - they should be angry. So the rating of my app started decreasing. From around 4.4 in the start, it went down to 4.02 in about eight months. Now I started worrying. With the trend continuing it was obvious that the rating was going to fall below 4.0. Generally I don't download an application with below 4 rating, how could I expect my users to do so?

So I came up with a simple solution. I wrote an exception handler so that if the database doesn't work properly, instead of crashing, the app will show you a simple dialog box with this message "Sorry, your phone doesn't support pre-built databases". Of course, then you can do nothing but exiting the app.

Well, some might consider it cheating but it worked. Here is the rating graph from Google Play over the years.


The ash colored double circle is the time when I published that update. Right before that the rating was close to 4.0. But after making the update the number of negative ratings started to decrease. In about four months, the rating went over 4.3. Now my app has an almost consistent rating of 4.4.

So developers, if you are getting lots of crash reports every day, and if you don't have enough time to fix those, don't forget to try this!