Thursday, December 4, 2014

Point of Existence

থাকা আর না থাকার মধ্যে পার্থক্য কোথায়? এই এতো মানুষ, প্রতিদিনই কত শত হাজার নতুন আসছে পৃথিবীতে , যাচ্ছেও সেরকম। এই যাওয়া আসার জন্যে কত-শত আয়োজন, কোলাহল, কত আরম্ভরতা।

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

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

সব কিছুই যেন ছোটন্ত ঘোড়া। ছুটে চলার আনন্দেই চলা। কেন এই ছুটে চলা, যার কোন মানে নেই। ছুটে চলার মাঝে কি আনন্দ আছে? আনন্দই বা কি? মস্তিস্কের অনুরণন?

এও হতে পারে এই সব যা দেখছি তার কোন কিছুই সত্যি নয়, শুধুই কারো ভাবনা ?

Monday, September 22, 2014

জাভা কীভাবে কাজ করে এবং কীভাবে ভাল পারফর্ম করে

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


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


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

মজার ব্যপার হচ্ছে, জাভা ভার্চুয়াল মেশিন কিন্তু খুব-ই ইন্টেলিজেন্ট এনভায়রনমেন্ট এবং JIT নিজেও খুব-ই ইন্টেলিজেন্ট কম্পাইলার। উদাহরণস্বরূপ- JVM জানে যেকোনো মেথড কতবার কল করা হচ্ছে, কারণ JVM মেথড কল কাউণ্ট করে । যখন এই কাউন্ট একটি নির্দিষ্ট থ্রেসহোল্ডের বাইরে চলে যায়, তখন সেই মেথড-এর মেশিন কোডJVM রেখে দেয়, পরের বার আবার কল করা হলে, সেটি আর সেই মেথডকে ইন্টারপ্রেট না করে সরসরি সেই রেখে দেওয়া মেশিন কোড-কে দিয়ে দেয় যা কিনা বারবার বাইটকোড থেকে মেশিনকোড-এ ট্রান্সলেশান করার কস্ট কমিয়ে দেয়। আরও মজার ব্যাপার হচ্ছে, JIT কম্পাইলার, যে সব কোড খুব বেশিবার ব্যবহার করা হয়, সেগুলোকে অপটিমাইজ করে। JIT নানা ধররণের স্ট্যাটিসটিক্স কালেক্ট করে থাকে। রিসার্সে দেখা গেছে যে, 80% সময়ে আসলে মোট কোডবেইস এর 20% কোড এক্সিকিউট করা হয়। সুতরাং এই 20% কোড গুলো যদি আলাদা করা যায়, এবং এদেরকে অপটিমাইজ করা যায়, তাহলে কিন্তু হিউজ পারফরমেন্স গেইন করা যাবে। মজার ব্যপার হচ্ছে JIT আসলে তাই করে। এটি (hotcode) এই 20% কোড কে আলাদা করতে পারে এবং এদেরকে অপটিমাইজ করতে পারে। ওরাকলের জাভা ভার্চুয়াল মেশিন হটস্পট (hotspot)-এরf নাম হয়তো অনেকেই জানি, এটির নামকরণ করা হয়েছে এই জন্য যে, এটি এই হট স্পট গুলোকে আলাদা করতে পারে। জাভা যেহেতু JVM এর জন্য লেখা হয়, এবং JIT সেটিকে মেশিন কোড এ রূপান্তরিত করে, এটি কিন্তু রানটাইমে হার্ডওয়্যার এর ইনফরমেশন একসেস করতে পারে এবং তার উপর ভিত্তি করে অপটিমাইজ মেশিন কোড তৈরি করে পারে, যা কিনা C/C++ এর ক্ষেত্রে অনেক সময়ই সম্ভব হয়ে উঠে না।


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

Wednesday, March 26, 2014

স্বাধীনতা দিবসের শুভেচ্ছা

যারা জন্ম থেকেই স্বাধীন তাদের কাছে স্বাধীনতার গুরুত্ব খুব সহজ একটা ব্যাপার। সেটা খুব বেশি করে উপলব্ধি করার মতো অবস্থা মনে হয় স্বাধীনতা উত্তর অর্থাৎ আমাদের প্রজন্মের খুব বেশি হয় নি। কারণ পরিবেশ, সময়ের ব্যাপ্তিতে একটা খুব গুরুত্বপূর্ণ ব্যাপারও হালকা হয়ে আসে যদি সেটা নিয়ে অনুশীলনের ঘাটতি থাকে। আমাদের অনুশীলনের যে ঘাটতি রয়ে গেছে সেটা বোধহয় কাউকে আঙ্গুল দিয়ে দেখিয়ে দেওয়ার কিছু নেই। সবাই বুঝতে পারে। আমরা যারা নিজেদের স্বাধীন এবং আধুনিক মানুষ মনে করি, তাদের অনুশীলন গুলো যে দায়িত্বপূর্ণ হবে সেটাই স্বাভাবিক হওয়ার কথা ছিল। দেশ ব্যাপারটি উপলব্ধির ব্যাপার। আমরা যেমন প্রতিদিন নিয়মিত গোসল করে নিজেদের পরিষ্কার রাখি, এই পরিষ্কার রাখার প্রক্রিয়াটা কিন্তু একটা কাজ, সেটা নিজের জন্যে করি, আলস্য কিংবা অন্য কোন অজুহাত এসে বাধা দেয় না। ঠিক তেমনি দেশকে নিজের অংশ মনে করে নিলে মনে হয় অজুহাত দেওয়ার অংশগুলো কমে যাবে। দেশ আমাদের পরিচর্যা (Serve) করবে না, বরং আমরা দেশকে পরিচর্যা করবো, এমনটাই হওয়ার কথা। কিন্তু তারপরেও আমরা প্রতিনিয়ত নানা রকম অজুহাত বা যুক্তি তৈরি করে গালা গালি করি, এই দেশ আমাদের কি দিয়েছে বা দেয়নি তার হিসেব-নিকেষে বসে যাই, তুচ্ছ তাচ্ছিল্য করে থাকি। হিসেবটা বোধহয় উল্টাটা হওয়াই উচিৎ ছিল।

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

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

এর সাথে স্বাধীনতা দিবস নিয়ে অনেক ছোট বেলার লেখা একটা কবিতাও দিয়ে দিলাম।


তিক্ত ২৫ মুক্ত ২৬

আরক্ত পৃথিবী, আতিক্ত মানব
তমিস্র হিংস্রতায় অবগাহন;
আজ স্মরণে ব্যাথার স্মৃতি সব।
সুখ ও কৃষ্ণতায় উত্থিত মন, মনন।

ক্লান্ত দেহ, অবসন্ন মন, নিশুতি আকাশ
সুখনিদ্রা, ক্রমশ গভীর হতে রাত্রি
হঠাৎ শব্দ, মাতিল উগ্র গন্ধে বাতাস,
সেদিন; তীব্র ভয়, বাঁচিবার আর্তি।

কঠিন আচরে বাংলার ভূমি, অগ্নিদাহ্য নক্ত,
হা হা কার। করুণ আকুতি, চক্ষুষ্মান রক্তবন্যা।
সজ্জিত হানাদার মাতাল মন করছে সিক্ত
তারপর; চারদিকে ঘোষিত রব, আন বাংলার স্বাধীনতা।