BLOG SECTION

Git 2.10 has been released

READ MORE

Git 2.10 has been released with lots of new attractive and important features and bug fixes about 19 hours ago (from the time when I am writing this) from over 70 contributors. Following are some of the most interesting new features:

  • Progress reporting for pushes
  • Signature verification improvements
  • More color attributes

To check full release notes of this version, Click Here.

To fork the original git repository for git, Click Here

For details, Click Here

বুলিয়ানোলজি, বিড়ম্বনা ও শিক্ষা (Branching with if(condition) ; should have at lease one else statement)

READ MORE

আমার একটা বদঅভ্যাস আছে। যখন কোন কন্ডিশনাল ব্রাঞ্চিং এর মাধ্যমে কোন বুলিয়ান প্রোপার্টির ভ্যালু আপডেট করার কোড লিখি তখন শুরুতেই ওই প্রোপার্টির ভ্যালু ০ করে নেই। তারপর If() স্টেটমেন্টের মাধ্যমে প্রয়োজনীয় কন্ডিশনের উপর ভিত্তি করে প্রোপার্টির ভ্যালু আপডেট করি।
উদাহরনঃ

hasPlanToBeOut = false;

if(checkIfYouHavePlanToGoOut)
{
   hasPlanToBeOut = true;
}

এই অভ্যাসের বিড়ম্বনাঃ
আজকে বাসায় বসে বসে বিরক্ত হয়ে সন্ধ্যায় পর পর তিনজন কে মেসেজ দিলাম নিচের মত করেঃ
“বের হলে জানাইস”
উপরের কোডের মত যদি লেখি তাহলে দাড়ায়

if(jodiBerHos())
   callMe();

সবই ঠিক আছে। যখন বাইরে বের হবে তখন তারা কল দিয়ে জানাবে যে বাহির হচ্ছে। সমস্যা হয় যদি তাদের আজকে বের হওয়ার কোন প্লান না থাকে। সেক্ষেত্রে আমাকে অনন্ত কালের একটা ওয়েটিং লুপে পরে যেতে হয়। এখানেই বিড়ম্বনা। আমার ওই মেসেজ টা যদি একটু পরিবর্তন করি তাহলেই আমাকে আর এই ওয়েটিং এ পড়তে হয় না।
প্রশ্নঃ “আজকে বের হবি?”

if(jodiBerHos)
   callMe(YES);
else 
   callMe(NO);

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

//init
areaA = yellow;
areaB = yellow;


//get called in a one minute interval
if(someCondition())
   areaB = red;

কোডটিতে দেখা যাচ্ছে শুরুতেই দুইটা প্রোপার্টির ভ্যালু ইয়েলো রেখে তারপর কন্ডিশন চেক করে রেড করা হচ্ছে। অর্থাৎ যদি someCondition() এর ভ্যালু true হয় তাহলে areaB রেড হয়ে যাবে। এই কন্ডিশন চেকের কোডটুকু এক মিনিট ইন্টারভালে বার বার কল হতে থাকবে। একবার রেড হয়ে গেল। এরপর কোন সময় যদি someCondition() এর ভ্যালু true না হয়ে যদি false হয় তখন আর কিন্তু areaB এর ভ্যালু পরিবর্তন হবে না। রেড ই থেকে যাবে। এই জন্য এই কোড স্নিপেট এর সঠিক রুপ এরকম হওয়া উচিত ছিলঃ

//init
areaA = yellow;
areaB = yellow;


//get called in a one minute interval
if(someCondition())
   areaB = red;
else 
  areaB = yellow;

সারমর্মঃ যেকোন if() স্ট্যাটমেন্টে কমপক্ষে একটি else ব্রাঞ্চ থাকা উচিত।

প্যারালাল প্রসেসিং এর বাস্তব উদাহরন পাওয়া অসম্ভব (Parallel processing is quite impossible in real life)

READ MORE

প্যারালাল প্রসেসিং নিয়ে বকবকঃ (কম্পু রিলেটেড লোকজনই শুধু পড়েন, আর্টস, কমার্সের কেউ পড়লে মাথা ঘুরাইতে পারে।)

অনেকের মধ্যেই একটা ভুল ধারনা আছে। অনেকেই মনে করে যে আধুনিক কম্পিউটারে প্যারালেলিজম সম্ভব। এর পক্ষে যুক্তি দেখানো হয় মাল্টি থ্রেডিং নিয়ে। একটা অ্যাপ্লিকেশনে ৫ টা থ্রেড চালু করা হয় যার প্রত্যেকটি থ্রেড ৫ সেকেন্ড করে সময় নেয়। তাহলে সবগুলা থ্রেড কমপ্লিট হতে ৫ * ৫ = ২৫ সেকেন্ড লাগার কথা। নিচের এই লিঙ্কটিতে এরকম ই উদাহরন দিয়ে মাল্টি থ্রেডের মাধ্যমে দেখিয়েছেন যে পাচটি থ্রেড আসলে ৫ সেকেন্ডেই শেষ হচ্ছে। এটাকেই তারা বলেছেন প্যারালাল প্রসেসিং।

https://howtoprogramwithjava.com/java-multithreading/?hc_location=ufi

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

এবার প্রসেস নিয়ে কথা বলি। ধরে নেই, কোর আই X প্রসেসরে ৫ টা কোর (মাইক্রো প্রসেসর) থাকে। আসলে ব্যপারটা এমন যে এই কম্পিউটারের মুল প্রসেসর ৫ টা যারা আসলেই টাস্ক প্রসেস করে। আর আমরা যেটাকে প্রসেসর বলি সেটি আসলে একটা কন্টেইনার যার ভেতর সেই মুল ৫ টা কোর প্রসেসর গুলো থাকে। এই কন্টেইনার প্রসেসরের কাজ হল যখন কোন টাস্ক আসবে তার কাছে তখন সে অ্যালগরিদমের উপর নির্ভর করে ওই সময়ের পটেনশিয়াল কোর প্রসেসরকে টাস্কটা অ্যাসাইন করবে। এখন আপনি ৫ টা প্রসেস (প্রত্যেক প্রসেস কম্প্লিট হতে সময় লাগে ৫ মিনিট)একি সময়ে স্টার্ট করলেন। প্রত্যেক কোর প্রসেসর কে একটা করে টাস্ক অ্যাসাইন করা হল। তাহলে একি সাথে সবগুলো প্রসেস কম্প্লিট হবে ৫ মিনিটেই যেখানে ৫ * ৫ = ২৫ মিনিট লাগার কথা ছিল। হ্যা, আপনার মনে হতে পারে যে এখানে প্যারালাল প্রসেসিং হল।
এটা কি সবসময় ৫ মিনিটেই হবে? ভেবে দেখুন তো। ধরেন আপনার ৫ টা কোরের মধ্যে এই মুহুর্তে ৪ টা ফ্রি আর একটা ব্যাস্ত আছে। তখন এই ৫ টা প্রসেস কম্প্লিট হতে ১০ মিনিটের বেশী সময় লাগবে ( প্রথম ৪ টা টাস্ক শেষ হবে ৫ মিনিটে। তারপর যখন কোন প্রসেসর ফ্রি হবে তখন ৫ নম্বর টাস্ক টা শুরু হবে এবং এটা শেষ হতে আরও ৫ মিনিট সময় লাগবে)। ধরেন, এখন ৪ টা কোর ই ব্যস্ত। আপনার জন্য শুধু একটা কোরই ফ্রি আছে। তখন সময় লাগবে ২৫ মিনিট।

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

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

ভাষাগত ভুল ত্রুটি ক্ষমাসুন্দর দৃষ্টিতে দেখবেন।

রেগুলার এক্সপ্রেশনঃ উপকারিতা ও ব্যবহারিক প্রয়োগ (Importance and practical use of Regular Expression)

READ MORE

রেগুলার এক্সপ্রেশনঃ
নাম থেকেই বোঝা যাচ্ছে যে, রেগুলার এক্সপ্রেশন (রেজেক্স বা RegEx) আসলে কতগুলো সুনির্দিষ্ট ক্যারেকটারের (Char) সমষ্টি। এই একগুচ্ছ ক্যারেকটারের সমষ্টি একত্রে কোন নির্দিষ্ট প্যাটার্ন প্রকাশ করে যা দিয়ে কোন বিশাল প্যারাগ্রাফ থেকে কোন নির্দিষ্ট প্যাটার্নের অংশ খুঁজে বের করতে পারে। একটি সহজ উদাহরন দেখে নেওয়া যাক। যেমন ধরি, একটি ৫০০ শব্দের প্যারাগ্রাফ থেকে এমন সব শব্দ খুঁজে বের করতে হবে যেগুলোর প্রথম অক্ষর ‘N’, শেষের অক্ষর ‘L’ এবং মাঝে কমপক্ষে একটি ‘H’ থাকবে। যদি ট্র্যাডিশনাল প্রোগ্রামিং দিয়ে এ কাজটি করতে চাই তাহলে কি কি করতে হবে তা নিচে লেখা হলঃ

ধাপ ১ঃ প্যারাগ্রাফ এর প্রথম ক্যারেকটার থেকে শুরু করে একটা একটা করে সামনে আগাতে হবে।
ধাপ ২ঃ কোন শব্দের প্রথম অক্ষর যদি ‘N’ হয় তাহলে এই ইনডেক্সে একটি পয়েন্টার রাখতে হবে। এরপর এই ইনডেক্স থেকে আবার সামনে আগাতে হবে। যদি শব্দটির শেষ অক্ষরে পৌছানোর আগে ‘H’ পাওয়া যায় এবং শেষ অক্ষরটি যদি ‘L’ হয় তাহলে এটা একটি কাঙ্খিত শব্দ। এই শব্দটি কে একটি স্ট্রিং টাইপ অ্যারে তে স্টোর করে রাখি।
ধাপ ৩ঃ যদি এমন হয় যে আমরা শব্দটির শেষ অক্ষরে পৌছে গেছি কিন্তু উপরের দেওয়া প্যাটার্ন ম্যাচ করেনি তাহলে আবার ‘N’ দিয়ে শুরু হওয়া নতুন শব্দ না পাওয়া পর্যন্ত সামনে আগাতে হবে। যদি কোন শব্দের প্রথম অক্ষর ‘N’ হয় তাহলে ধাপ ২ এ ফিরতে হবে।
ধাপ ৪ঃ প্যারাগ্রাফটির শেষ অক্ষর ভিজিট হয়ে গেলে প্রোগ্রামটি বন্ধ হয়ে যাবে।

অবশেষে একটি স্ট্রিং টাইপ অ্যারেতে ওই নির্দিষ্ট প্যাটার্নের সকল শব্দ জমা হবে। উপরে অ্যালগোরিদমটির সংক্ষেপ বর্ননা দেওয়া হল। কিন্তু এই অ্যালগরিদমটির ইমপ্লিমেন্টেশন টা করতে গেলে যাযা লাগবে তা নিচে দেওয়া হলঃ
১। কমপক্ষে ৩ টি ভ্যারিয়েবল যা ফ্ল্যাগ হিসেবে ব্যবহার করা হবে বিভিন্ন ইনডেক্স স্টোর করে রাখার জন্য।
২। একটি For লুপ।
৩। অসংখ্য if-else ব্রাঞ্চিং।
৩। একটি ক্যারেকটার টাইপ স্ট্রিং যেটাতে খুজে পাওয়া কাঙ্খিত সকল শব্দ থাকবে।

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

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

রেজেক্সওয়ান ডট কম থেকে মাত্র এক থেকে দুই ঘন্টা দেখলেই রেগুলার এক্সপ্রেশন সহজে শেখা যাবে। ছোট ছোট সাইজের লেসন এর সাথেই রয়েছে সরাসরি প্র্যাকটিস করার সুযোগ।

রেজেক্সওয়ানিজরোওয়ান ডট কম একটি অনলাইন টুল যা ব্যবহার করে খুব সহজেই কাঙ্খিত রেগুলার এক্সপ্রেশনটি জেনারেট করা যায়।

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

সমস্যাঃ
তাহলে লেটেস্ট ভার্সনে file_url_thumb ফাঁকা। আমাকে file_url থেকেই রিসাইজড ইমেজের পাথ জেনারেট করতে হবে। নিচে মুল ইমেজের পাথ ও রিসাইজড ইমেজের পাথ কেমন হবে তার একটি উদাহরন দেওয়া হলঃ

মুল ইমেজ ঃ /images/stories/virtuemart/product/product_photo.jpg
রিসাইজড ইমেজঃ /images/stories/virtuemart/product/resized/product_photo_200x200.jpg

রিসাইজড ইমেজের বোল্ড করা অংশটুকু দেখেই পার্থক্য বোঝা যাচ্ছে। অর্থাৎ আমাকে এখন এমন একটি রেগুলার এক্সপ্রেশন বানাতে হবে যেটা দিয়ে মুল ইমেজ পাথকে ৩ টা ভাগে ভাগ করা যায়। ভাগ গুলো নিম্নরুপঃ
প্রথম অংশ ঃ /images/stories/virtuemart/product/
দ্বিতীয় অংশঃ product_photo
তৃতীয় অংশঃ .jpg
রেজেক্স ইন্জিন কে যদি এই রেগুলার এক্সপ্রেশন ও মুল ইমেজ পাথ টা দেই তাহলে ইন্জিনটি আমাদের কে উপরের মত করে তিনটা আলাদা স্ট্রিং রিটার্ন করবে। এরপর আমরা নিচের মত করে রিসাইজড ইমেজ পাথ জেনারেট করব।
[string1]resized/[string2]_200*200[string3]

তাহলে এখন আমরা এমন একটি মেথড লিখব যা ইনপুট হিসেবে মুল ইমেজের পাথ নিবে এবং রিসাইজড ইমেজের পাথ রিটার্ন করবে।

/**
* @param $media String file_url of product image of virtuemart
* @return $thumb_url string automatically generated thumb url
*/
function generateThumbUrl($media = false){
$thumb_url = preg_replace("/(((w+)/)+)(.+)(.jpg)/i", "$1resized/$4_200x200$5", $media);
return $thumb_url;
}

এই কোডটিতে “(((w+)/)+)(.+)(.jpg)” করা অংশটুকুই একটি রেগুলার এক্সপ্রেশন যে একটা ইমেজ পাথ কে পুর্বের নিয়ম অনুযায়ী তিনটি গ্রুপে ভাগ করবে। preg_replace একটি PHP মেথড যা তিনটি প্যারামিটার ইনপুট হিসেবে নেয়। প্রথমটি হবে রেগুলার এক্সপ্রেশন, দ্বিতীয়টি নতুন স্ট্রিং টির প্যাটার্ন এবং তৃতীয়টিতে মুল স্ট্রিং যেটা থেকে নতুন স্ট্রিং জেনারেট করতে হবে। উপরের কোডটিতে preg_replace মেথডটি $media এর উপর রেগুলার এক্সপ্রেশন (((w+)/)+)(.+)(.jpg) এক্সিকিউট করে অনেকগুলো নেস্টেড ভাগে ভাগ করে যেখানে $1 এ থাকে মুল ইমেজের প্রথম অংশ, $4 এ থাকে দ্বিতীয় অংশ এবং $5 এ থাকবে শেষ অংশ। তাহলে আমাদের নতুন স্ট্রিংটির প্যাটার্ন হবে $1resized/$4_200x200$5

regex101.com এর টুলটি ব্যবহার করে সরাসরি নির্দিষ্ট প্যাটার্নের জন্য রেগুলার এক্সপ্রেশন জেনারেট করা যায়।

এই পোস্টটিতে শুধুমাত্র রেগুলার এক্সপ্রেশনের সম্পর্কে ধারনা দেওয়া হল। বিস্তারিত জানতে উপরে উল্লিখিত সাইটে যেতে হবে।

বাংলায় অবজেক্টিভ-সি, সুইফ্ট এবং আইওএস অ্যাপ ও গেম ডেভেলপমেন্ট

READ MORE

বাংলায় অবজেক্টিভ-সি এর ধারনা ভাগা-ভাগি মূলক সিরিজ পোস্ট পুরোদমে চলছে। আশা করি এই সিরিজের ১০ চ্যাপ্টার শেষে আরেকটি সিরিজ শুরু হবে “রিয়াল আইফোন অ্যাপ্লিকেশন ডেভেলপমেন্ট উইথ ইউজার ইন্টারফেস – ১০ চ্যাপ্টার”
কেউ এই মাল্টি সিরিজের লেখক হয়ে দুই একটি চ্যাপ্টার নিয়ে লিখতে চাইলে যোগাযোগ করতে পারেন কমেন্টে।
গরম থাকতে থাকতেই ৪টি ম্যাজর সেকশন (Obj-C, iOS-GUI, Game, Publish&Marketing) সম্বলিত একটি পূর্ণ বাংলা কাগুজে বই আসতে পারে। যত বেশি Crowd Authors ততো কম ভুল এবং সঠিক তথ্যের শেয়ারিং

সেকশন ১ঃ অবজেকটিভ সি এর বেসিক ধারনা

UploaDrop [A Dropbox based File Uploading Solution of large files]

READ MORE

What is it?
UploaDrop is a dropbox based upload script which is used for uploading files and folders to dropbox instead of server storage.

Motivation
Most of the time, we, the developers, must have to manipulate large files on the website like videos, audios or other documents. If the unit size of files is small, then its okey. There is no big deal to handle these files of small size. But when the application requires to upload files of large size like 5GB on each upload, we need to consider the reliablity of the upload script. We need to consider the maximum size of files which can be uploaded. We need to consider the maximum bandwidth we can use at a time. We have to take the burden of server optimization.

To get rid of these headache, we can handle this file manipulation tasks to other 3rd party who is already established with the service of file manipulation.

Dropbox is cloud based file hosting server in which users can upload their files and can download when needed. Dropbox has provided lots of features including large file uploading with optimized way.

Dropbox has also provided an api which is highly user-friendly so that any developer can use that.

Objective
To develop a script in which visitors/users of the application can upload file via drag drop or choosing. Instead of the hosting space, these files will be uploaded on dropbox space of the owner of the application. Then these files can be used for different purposes.

Features
1. Multiple files uploading at a time
2. File uploading to owner’s dropbox storage
3. No need to have headache about file manipulation, storage, bandwidth of file uploading.
4. Recrsively finds every files from all folders and uploads to dropbox

Acknowledgements
First of all I would like to thank the Dropbox Team for providing this awesome service.

Then I thank Mr. Nuhil Mehdy (nuhil.net) to give me the idea.

Lets start the development of an simple application called UploaDrop by which end user will upload something to your website, and instead of your host, it will be uploaded on dropbox.

When you are a Developer
The first task is to create an app on your Dropbox account using developer account.

1. Go to https://www.dropbox.com/developers/apps and Click on “Create app” button.

2. Fill these given fields as the picture shows.

3. After completing the creation of your app you will see the details of your app by going https://www.dropbox.com/developers/apps and click on the App Name ‘UploaDrop’.

See the rounded area which provides app key and app secret. These two key defines the access of your dropbox account for uploading from outside.

4. Now open composer.json for editing and set these keys on this like the picture shows.

5. OK, In this step you are all set. Now lets get the access key. Execute getAccesskey.php on the browser which returns a url like

https://www.dropbox.com/1/oauth2/authorize?locale=&client_id=12ab34vd&response_type=code

6. Copy this url and paste on the browser. It will ask for permission to create a folder named app name on the dropbox account.

Click on “Allow”

7. An access key will be displayed like the given screenshot.

Save the Access key on some secured place.

8. Open index.php and and edit the $accesskey field on line 10.

Open processupload.php and do the same task on line 5.

Here, developer’s work is finished. All configuration is finished.

Front End behavior
1. Hit “index.php” on the browser, the front end page will be arrived.

2. In the drag&drop area, user can drag&drop their files and folders. A progress bar will be shown for each of the files when uploading. After completation of uploading of all files click on “Finish Uploading”.

This is the simple app. Actually, It is a brief instruction of how to use Dropbox Core Api.

Future Works
1. In the top area, all existing files are being displayed in recursive structure which is coded by me. In dropbox core api, there are options to create download link of each files, Editing, Deleting etc. These 3 features can be achieved in future.

2. If any compressed file is drop on the drag&drop area, it doesnt extract the compressed file. In future, it can be an issue.

Source Code (Github)
Watch Demo

Review of basic Java Standard Edition (আস্তে আস্তে জাভা শিখি)

READ MORE

Here is a list of basics about Java what we must know.

  • Code Structure
    [public static void main(String a[]) , class name]
  • Difference between C, C++ and JAVA
  • Why Java is better than other programming languages?
  • What do you mean by OOP?
  • Does Java supports OOP?
  • Define these terms
    • inheritence
    • encapsulation
    • polymorphism
  • Access Specifiers
  • Friend function
  • Friend Class
  • Super class, Sub class
  • Difference between abstract class and interface
  • implement or extend
  • Virtual class, virtual function
  • Differences between Function Overloading & Operator overloading
  • String Manipulation

As per my knowledge, If we learn these things with practicing some code related to these topics, we can start for any kind of development or to take in part in java related exams.

I am sorry to say that I can’t share these things right now. But in near future, a brief of these topics will be here.

[polldaddy poll=7717806]

API vs Library vs SDK [Self Note]

READ MORE

A Library is a collection of code that we can call from our own code, to help us do things more quickly/easily. For example, Let there is a class for pagination, and we just call the method of that class which does the pagination work.

An API (application programming interface) is a term meaning the functions/methods in a library that we can call to ask it to do things for us – the interface to the library.

An SDK ( (software development kit) is a library (often with extra tool applications, data files and sample code) that aid us in developing code that uses a particular system (e.g. extension code for using features of an operating system (Windows SDK), drawing 3D graphics via a particular system (DirectX SDK), writing add-ins to extend other applications (Office SDK), or writing code to make a device like an Arduino or a mobile phone do what we want)

[Collected]

HAPPY NEW YEAR, 2014 :)

Installing PHP5 and Apache on Ubuntu of Amazon Web Server EC2

READ MORE

sudo apt-get install apache2

sudo apt-get install php5

sudo apt-get install libapache2-mod-php5

sudo /etc/init.d/apache2 restart

SELF NOTE

প্রতিক্রিয়া [আমি ও রুয়েট]

READ MORE

গত মঙ্গলবার (১৭ই সেপ্টেম্বর, ২০১৩) তারিখে আমার রুয়েট জীবনের শেষ ক্লাস, ক্লাসটেস্ট, ল্যাব, ল্যাব ফাইনাল, কুইজ , বোর্ড ভাইভা সব কিছুর পরিসমাপ্তি ঘটল।বাকি শুধু ফাইনাল পরীক্ষা আর থিসিস। এরপর থেকেই আমার ফেসবুকের ওয়াল ভরে আছে বন্ধু,ক্লাসমেট,রুমমেটদের দু:খভরা স্ট্যাটাস দিয়ে। তাই আমিও লিখতে বসলাম।তবে আমি লিখব সেইসব জিনিসের তালিকা যা আমি ঢাকা গিয়ে মিস করব।

খাবার-দাবার :

  • বৈশাখী হোটেলের ডালভাজি (সকালের নাস্তা, পরোটার জন্য না, ডালভাজির জন্য যেতাম)।
  • কাশেমের (k.f.c) হোটেলের আলুভাজি (শুধু আলুভাজি দিয়েই দুই প্লেট ভাত খেয়ে ফেলা সম্ভব)।
  • নর্দানের মোড়ের নাহিলের আম্মার (আমাদের খালা) বানানো ছোলা(প্রতিদিন বিকালে দুই বাটি) আর বেগুনি।
  • ডাইনিং এর পাতলা ডাল। আমার কিন্তু ভালই লাগে।খাওয়া শেষে একবাটি ডাল চুমুক দিয়ে খাওয়া ( পুরো মাখখখখখন)।

বন্ধু-বান্ধব ও অন্যান্য:

  • ডলারের সাথে সেন্স অব হিউমার এর প্র্যাকটিস।
  • সাদিয়া জামান এর সাথে রাত ১২ টার পর ফেসবুকে আড্ডা (3rd ও 4th সেমিস্টারে, সে যাবতীয় পড়াশুনা শেষ করে তারপর ফেবুতে আসত।)
  • প্রবালের একটু পর পর ফেবুতে নক করে “ওই, কি করস?” জিগ্গাসা।
  • রন্জুর ইংরেজী।
  • কারনে অকারনে শাহেদকে মারধোর করা।
  • অভির সাথে শেষ বেঞ্চে বসে সারা ক্লাস ধরে গল্প আর স্যারদের ঝাড়ি খাওয়া।
  • তাহমিদকে চুম্মা দিতে চাইলে ওর লজ্জাভরা মুখ দর্শন।
  • অনিকের সাথে গভীর রাতে মেসেন্জারে অহেতুক গেজানো। নেই কাজ তো খই ভাজ টাইপ
  • কিছু শুভাকাঙ্খী।
  • কিছু অশুভাকাঙখী।
  • সামাদের সাথে রোজ গভীর রাতে তালাইমারী যাওয়া
  • গভীর মনোযোগ দিয়ে স্যার / ম্যাডামের লেকটার শুনার সময় অহেতুক মিসকল দিয়ে অনন্যার মনোযোগ নষ্ট করা।
  • রুমে আই.বি খেলার আসরে রন্জুর “আর কোন পিট নেই” বলা।
  • রুমে আই.বি খেলার আসরে হারার সময় দেবুর নিজের পক্ষে নতুন নতুন নিয়ম আবিস্কার
  • কিছু বন্ধু যারা আমার সামনে আমার সমালোচনা করে। (আমার পছন্দের কাজ)
  • কিছু মানুষ যারা আমার পেছনে আমার সম্পর্কে কটুক্তি করে এবং আমার সামনে খুবই ভাল ভাব ধরে। (আমার অপছন্দের কাজ)
  • কিছু জুনিয়র যারা “দাদা দাদা” ডাকতে ডাকতে অস্থির করে ফেলে।
  • কিছু জুনিয়র যারা পাশ কেটে চলে যায় এবং মনে মনে গালি দেয়।
  • কিছু মানুষ যাদের কমন সেন্স এ আমি মুগ্ধ।
  • কিছু মানুষ যাদের কমন সেন্স আমার থেকেও কম (আমার কমন সেন্স এর মার্ক ১/১০০)।
  • কিছু বন্ধু-বান্ধব যারা আমার উপর খুবই রাগ সেই শুরু থেকে কিনতু আমি কারন জানি না।আমার সামনে প্রকাশ করে না কিনতু আমার অন্য এক বন্ধুর কাছে কটুক্তি করে। :)
  • কিছু প্রিয় বন্ধু-বান্ধব (প্রবাল, সাদিয়া জামান ,অভি)সময়ের ব্যবধানে যাদের সাথে দুরত্ব বেড়ে গেছে (দোষটা হয়ত আমারই)
  • ফয়সাল যাকে না দেখলে আমি বুঝতাম না যে আমার থেকেও নিশ্চিন্ত পোলাপান আছে।
  • কিছু শিক্ষক, কিছু সিনিয়র, কিছু সমবয়সী, কিছু জুনিয়র যাদের থেকে আমি সামনে আগানোর অনুপ্রেরণা পাই।

আরও আনেক কিছু আছে। এখন মনে পড়ছে না। মনে পড়লেই আপডেট হবে। :)