পাইথন ডেকোরেটর: পর্ব - ১

পাইথন ডেকোরেটর: পর্ব - ১
২১ জুন, সোমবার, ২০২১

বেসিক পাইথন আমি মোটামুটি জানি। টুকটাক কাজও করেছি। কিন্তু পাইথনের এডভান্সড জিনিসপত্র শিখবো শিখবো করেও শেখা হচ্ছিল না। বেসিক পাইথনের আমি যতটুকু জানি, তার কমবেশি আমার "সহজ বাংলায় পাইথন" আর "সহজ বাংলায় পাইথনে ডেটা স্ট্রাকচার" ইউটিউব ভিডিও সিরিজের ভিডিওগুলোতে আলোচনা করেছি। এই ভিডিও গুলোর একটা সুবিধা হচ্ছে, অনেকেই অনেক সময় কমেন্ট করে নতুন কোনো টপিকের উপর ভিডিও বানানোর অনুরোধ করেন। সেইরকম একটা অনুরোধ ছিল এই পাইথন ডেকোরেটর। কাজেই বুঝতে পারছেন, আমি নিজে শিখে আজকে কিছু লেখার চেষ্টা করছি। কোত্থেকে শিখছি সেটার সম্পর্কেও একটু বলি। আমাদের ডিপার্টমেন্টের জুনিয়র, ফরহাদ নাঈমের কাছ থেকে পাইথনের উপর লুসিয়ানো রামালহো-র লেখা 'ফ্লুয়েন্ট পাইথন' বইটার নাম জেনেছিলাম। ফরহাদ খুবই কাজের একটা ছেলে, ওর টেকনোলজির উপর দখল অনেক ভালো। ওর কথাতেই বইটা একটু ঘাঁটাঘাঁটি করে দেখে আমি মুগ্ধ। খুবই ভালো বই। আজকের পুরো লেখাটাই এই বইয়ের 'Function Decorators and Closures' - চ্যাপ্টারের প্রথম অংশ থেকে নেয়া - নিজের মতো করে লেখার চেষ্টা করছি।    

পাইথন ডেকোরেটর বোঝার জন্য কয়েকটা জিনিস জানতে হবে: সবগুলোই এক এক করে উদাহরণ দিয়ে পরিষ্কার করার চেষ্ঠা করছি: 

  • ১. পাইথন 'ফার্স্ট ক্লাস' ফাঙ্কশন সাপোর্ট করে  - অর্থাৎ, পাইথনে ফাঙ্কশন একটা অবজেক্ট। 

একটা ফাঙ্কশনকে কোনো ভ্যারিয়বলে -এ এসাইন করা, অন্য ফাঙ্কশনে প্যারামিটার হিসাবে পাস্ করা, অন্য ফাঙ্কশন থেকে রিটার্ন করা, কোনো ডেটা স্ট্রাকচার (যেমন, পাইথন লিস্ট, ডিকশনারী, সেট ইত্যাদি) -এ স্টোর করা যায়। নিচের ছবি ১ ও ২ খেয়াল করলে প্রথম দুইটা ব্যাপার পরিষ্কার হবে। 


ছবি ১: একটা ফাঙ্কশনকে অন্য ভেরিএবলে এসাইন করিয়ে, সেটা দিয়ে অন্য নামে কল করা যায় 


ছবি - ২ -, লাইন ১৪ তে  bar() ফাঙ্কশন foo ফাঙ্কশনকে প্যারামিটার হিসাবে নিলো, নিজে 'Inside bar  ...' প্রিন্ট করে তারপর foo ফাঙ্কশন কল করলো, যেটা 'Inside foo  ...' প্রিন্ট করলো।       

ছবি ২: একটা ফাঙ্কশন অন্য ফাঙ্কশনকে প্যারামিটার হিসাবে নিয়ে কল করতে পারে 

  • ২. দুটো ফাঙ্কশন মাথায় রাখতে হবে, প্রথমটা হচ্ছে টার্গেট ফাঙ্কশন - যেটাকে ডেকোরেট (বা সাজানো) হবে, আর দ্বিতীয়টা হচ্ছে ডেকোরেটর ফাঙ্কশন, যেটা কিনা টার্গেট মেথডকে ডেকোরেট করবে বা সাজাবে।

আর এজন্য টার্গেট মেথডের শুরুতে '@' চিহ্ন ব্যবহার করে ডেকোরেটর মেথডের নাম লিখে দিতে হয়। এযেন টার্গেটের কানে দুল পরিয়ে সাজিয়ে দেয়া 😀। আসলে ডেকোরেটর মেথড টার্গেট মেথডকে প্যারামিটার হিসাবে নেয়। ডেকোরেটর মেথড নিজের মধ্যে অন্য কিছু করতে পারে, তারপর পাস্ হওয়া টার্গেট মেথড কল করতে পারে। সব কাজ শেষ হলে, রিটার্ন করতে পারে অরিজিনাল টার্গেট মেথড, অথবা অন্য inner মেথড (এ ব্যাপারে পরে বলছি)।   

ছবি ৩: ডেকোরেটর  মেথড টার্গেট মেথডকে প্যারামিটার হিসাবে নেয় 

  • ৩. ডেকোরেটর ফাঙ্কশন যে মডিউল-এ ডিফাইন করা আছে, সেই মডিউল লোড হওয়ার সময়ই, অর্থাৎ ইম্পোর্ট করার সময় (import time) ডেকোরেটর ফাঙ্কশন আপনা-আপনি 'কল' হয়ে যায়।
ছবি -৩ খেয়াল করলে দেখবেন, কেউ কিন্তু টার্গেট কিংবা ডেকোরেটর কোনো মেথডকেই কল করে নাই, কোনো কিছু প্রিন্ট করে নাই। কিন্তু তারপরও আউটপুট দেখলে দেখবেন 'Inside decorator  ...' প্রিন্ট হয়ে বসে আছে।  তার কারণ, কোড লোড হওয়া মাত্রই সব ডেকোরেটের মেথড আপনা-আপনি কল হয়ে যায়।  আর একারণেই আমরা দেখছি, 'Inside decorator ...' প্রিন্ট আছে।  

  • ৪. পাইথন ডেকোরেটর আর কিছুই না, সূত্র আকারে মনে রাখতে চাইলে:  টার্গেট = ডেকোরেটর(টার্গেট). 

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

রামালহোর বইয়ের স্ক্রিনশট: এক কথায় পাইথন ডেকোরেটরের ব্যাখ্যা  


ছবি ৪: ডেকোরেটর মেথডের মাধম্যে টার্গেট মেথড কল করা 

উপরের ছবি ৪ দেখে ব্যাপারটা আরেকটু বুঝিয়ে বলা যাক। খেয়াল করুন, লাইন ২৫ -এ যখন আমরা target() কল করছি, তার আগে কিন্তু 'target' ভ্যারিয়েবলে ডেকোরেটর মেথড থেকে রিটার্ন করা func রেফারেন্স করিয়ে নিচ্ছি। অর্থাৎ, target() কল করলেও আসলে কিন্তু func() ফাঙ্কশন কল হচ্ছে। আর এক্ষেত্রে দুটো একই 'target' ফাঙ্কশন হওয়ায় আউটপুট একই হবে, কিন্তু চাইলেই ডেকোরেটর মেথড থেকে আমরা অন্য inner মেথড রিটার্ন করিয়ে নিয়ে সম্পূর্ণ ভিন্ন কিছু আউটপুট দিতে পারতাম। যেমন নিচের ছবিতে (ছবি ৫), মূল টার্গেট মেথডকে সম্পূর্ণ সরিয়ে দিয়ে 'Inside inner  ...' প্রিন্ট করিয়ে নিচ্ছি:

  

ছবি ৫: টার্গেট মেথডের ব্যবহার (behavior) ডেকোরেটরের inner মেথড দিয়ে পাল্টিয়ে দিলাম 


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

ছবি ৬: ইন্ডিরেক্টলি বা ঘুরিয়ে ডেকোরেটর ফাঙ্কশন কল করা হচ্ছে 

আচ্ছা, কিন্তু এই ঘুরিয়ে কাজ করার দরকার বা উপকারিতাটা কি? ডেকোরেটরের পুরো শক্তি বা উপকারিতা একটা ব্লগ পোস্টে লিখে বোঝাতে গেলে লম্বা হয়ে যাবে। আজকের পোস্টে তাই inner ফাঙ্কশন ব্যবহার না করে, অর্থাৎ মূল টার্গেট মেথড ঠিক রেখে (ছবি ৩- এর মতো) কিভাবে ডেকোরেটর ব্যবহার করে একটা ডিজাইন প্রবলেম সল্ভ করা যায়, সেটা লিখছি। পরে কোনো একদিন বাকি গুলো নিয়ে লিখবো, ইনশাআল্লাহ। 

ধরা যাক ডিজাইন প্রবলেমটা অনেকটা এই রকম : আপনি একটা সুপার স্টোরের চেকআউট সিস্টেম ডিজাইন আর ইমপ্লিমেন্ট করবেন। আইডিয়া হচ্ছে, আপনার স্টোরে কাস্টমারেরা একটা শপিং কার্ট-এ বাজার করে চেকআউট কাউন্টারে আসবে। সব আইটেম স্ক্যান করা হয়ে গেলে আপনি মোট দামের উপর কিছু ডিসকাউন্ট দিতে চান।  যেমন: আপনার 'বান্ধা' বা রেগুলার  কোনো কাস্টমারের জন্য ৫% রিওয়ার্ড ডিসকাউন্ট দিতে চান; কোনো কাস্টমার একই আইটেম ২০ টার বেশি কিনলে সেগুলোর উপর ১০% ডিসকাউন্ট দিতে চান, ইত্যাদি। কিন্তু শর্ত হচ্ছে, একবারে শুধু একটা ডিসকাউন্ট প্রযোজ্য। দুইয়ের বেশি কুপন থাকলে সবচেয়ে বেশি ডিসকাউন্ট যেই কুপনে পাওয়া যাবে, শুধু সেইটাই মূল মূল্যের উপর ছাড় হিসাবে প্রয়োগ হবে। আর আপনি চান, খুব সহজেই পুরোনো কোনো 'অফার' বাদ দিয়ে অন্য নতুন 'অফার' যোগ করবেন (যেমন ঈদে বা পূজা কিংবা বড়দিনের সময় ১০% ছাড়)। এই কোডটা খুব সহজেই পাইথন ডেকোরেটর দিয়ে করে ফেলা যাবে।  

খুব বেশি ব্যাখ্যা না করে সরাসরি 'Cutomer', 'Item' আর 'Cart' ক্লাস গুলো নিচে দিয়ে দিচ্ছি। সাধারণ আইডিয়া, একজন কাস্টমারের নাম, রিওয়ার্ড পয়েন্ট, আর শপিং কার্ট -এর রেফারেন্স থাকবে 'Customer' ক্লাসে।  বাজারের আইটেম-এর ডেসক্রিপশন, দাম, আর সংখ্যা (ডিফল্ট ১ টা) থাকবে 'Item' ক্লাসে।  আর 'Cart' ক্লাসে আইটেমে অবজেক্টের  একটা লিস্ট থাকবে। কাস্টমার বাজার নিয়ে চেকআউট-এ আসলে তার কার্টে থাকা আইটেম গুলোর দাম আর সংখ্যা গুণ করে মোট দাম হিসাব করা হবে।  

ছবি ৭ : সবগুলো ক্লাস একটা পাইথন ফাইলে লিখে রেখেছি 

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

ছবি ৮: ডিসকাউন্ট অফার হিসাব করার ফাঙ্কশনগুলো 

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

দুটো কাজই আসলে ডেকোরেটর দিয়ে করা যায়। একটা ডেকোরেটর ফাঙ্কশন ইমপ্লিমেন্ট করা যায়, যার কাজ হবে ফাঙ্কশনগুলোকে একটা লিস্টে অ্যাড করা।  আর প্রতিটি 'ডিসকাউন্ট' মেথডের শুরুতে @ চিহ্ন দিয়ে ওই ডেকোরেটরের নাম দিয়ে দিলেই হবে। মডিউল ইম্পোর্ট করার সময় (import time) আপনা-আপনি সবগুলো ডেকরেটর মেথড লিস্টে অ্যাড হয়ে যাবে। আর কোনো একটা 'অফার' বাদ দিতে চাইলে শুরুর @ চিহ্ন কমেন্ট আউট (comment out) করে দিলেই চলবে। তখন সেই অফার মেথড আর লিস্টে অ্যাড হবে না।  নিচের কোডে (ছবি ৯) খেয়াল করুন, যেহেতু ডেকোরেটর মেথড টার্গেট মেথড কল করছে না, শুধু রিটার্ন করছে, তাই টার্গেট মেথডের বিহেভিয়ার বা ব্যবহার বদলাচ্ছে না।   

ছবি ৯: ডেকোরেটর ব্যবহার করে promos লিস্টে ডিসকাউন্ট অফার মেথডগুলো যোগ করা হচ্ছে 

খেয়াল করুন, লাইন ২৬ - এ discount মেথড promos লিস্টে থাকা এক একটা ডিসকাউন্ট মেথড কল করবে আর শেষে সর্বোচ্চ ডিসকাউন্ট এমাউন্ট রিটার্ন করবে।  

এইবার, একটা ক্লায়েন্ট কোড লিখে কোডটা রান করা যাক। নিচের ছবি ১০-এ আমরা কয়েকটা আইটেম অবজেক্ট তৈরি করে নিলাম। তারপর একটা Cart অবজেক্ট তৈরি করে আইটেম গুলো অ্যাড করে নিচ্ছি।  এইবার লাইন ১২-তে একজন কাস্টমার 'জসিম' তৈরী করলাম, ধরে নেই উনার রিওয়ার্ড পয়েন্ট ১০০। এবার ডিসকাউন্ট বাদে মূল্য বের করলাম তারপর ডিসকাউন্ট এপ্লাই করলাম।   

ছবি ১০: ডেকোরেটর ব্যবহার করে সর্বোচ্চ ডিসকাউন্ট প্রয়োগ 

খেয়াল করুন, কোড রান করার শুরুতেই ডেকোরেটর গুলো আপনা-আপনি রান হয়ে যাচ্ছে, আর ডিসকাউন্ট প্রমোশন গুলো লিস্টে অ্যাড হয়ে যাচ্ছে।  সবশেষে, লাইন ১৭-তে যখন 'discount()' মেথড কল হচ্ছে, তখন সর্বোচ্চ যেই ডিসকাউন্ট সেটা প্রয়োগ হয়ে দাম দেখাচ্ছে। ব্যস, হয়ে গেলো!!

যাই হোক, আশা করি বুঝতে পেরেছেন। পুরো কোডের Repl.it লিংক নিচে দিয়ে দিচ্ছি।  কোড গুলো ক্লোন করে নিয়ে নিজেরা রান করলে আশাকরি আরো ভালোভাবে বুঝতে পারবেন।  

'ফার্স্ট ক্লাস' ফাঙ্কশন কনসেপ্ট -এর কোড: এই লিংকে 
ডিজাইন প্রবলেম -এর পুরো সল্যুশন কোড : এই লিংকে 

সবাইকে ধন্যবাদ !

ডাইক্স্ট্রা এলগোরিদম: ইমপ্লিমেন্ট করতে গিয়ে যা যা শিখলাম!

 ডাইক্স্ট্রা এলগোরিদম: ইমপ্লিমেন্ট করতে গিয়ে যা যা শিখলাম 
১১ মে, ২০২১, মঙ্গলবার 

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

ডাইক্স্ট্রা এলগোরিদম (Dijkstra Algorithm) - এলগোরিদম কোর্সে খুবই কমন একটা টপিক। গ্রাফে একটা নোড থেকে বাকি সব নোডে যাওয়ার সবচেয়ে ছোট (বা শর্টেস্ট) পথ খুঁজে বের করাই এই এলগোরিদমের কাজ। এর কিছু সীমাবদ্ধতা আছে (যেমন, নেগেটিভ এজ সামলাতে পারে না) - এসব বাদ দিলে খুবই কার্যকরী একটা এলগোরিদম।  'লোভী পদ্ধতির' বা 'Greedy Strategy' এলগোরিদম বোঝার জন্যও ডাইক্স্ট্রা এলগোরিদম উদাহরণ হিসাবে শেখা উচিত। যদিও আমি নিচে ব্যাখ্যা করছি, তবুও আপনার জানা না থাকলে, কিংবা এই মুহুর্তে ডাইক্স্ট্রা এলগোরিদমটা মনে না থাকলে চট করে শাফায়াত আশরাফের বাংলা ব্লগ পড়ে নিতে পারেন। শাফায়াত আমাদের ডিপার্টমেন্টের জুনিয়র। ওর সাথে আমার কোনোদিন দেখা হয় নাই। কিন্তু ওর সাথে ওর এই ব্লগের কল্যানেই যোগাযোগ আছে। ওর গ্রাফের উপর বাংলা বইটাও খুবই চমৎকার। আমি ক্লাসের প্রিপারেশন নেয়ার জন্য ওর বইটা ব্যবহার করেছি। মায়ের ভাষায় কোনো কিছু পড়লে অনেক সহজবোধ্য হয়।  কিন্তু শাফায়াতের এলগোরিদম আর গ্রাফের উপর জ্ঞান আর লেখার হাত দুটো ভালো বলেই বইটা আরো ভালো হয়েছে।  

যাই হোক, খুব সংক্ষেপে ডাইক্স্ট্রা এলগোরিদম মূল আইডিয়াটা লেখার চেষ্টা করছি। Breadth First Search বা BFS হচ্ছে এর মূল ইঞ্জিন। BFS আবার কি? একটা গ্রাফের একটা নোড থেকে তার সবগুলো প্রতিবেশী নোডকে এক এক করে visit বা ঘুরে তারপর অন্য নোডে যাওয়াটাই BFS। নতুন কোনো নোডে যাওয়া মাত্রই তাকে একটা চিহ্ন বা দাগ দিয়ে দিতে হয় (রং gray বা ছাই করে দিয়ে), যাতে পরবর্তীতে আর ভিসিট করা না লাগে। আর একটা নোডের সবগুলো প্রতিবেশী নোড দেখা শেষ হয়ে গেলে আরেকটা চিহ্ন (রং কালো করে দিয়ে) 'complete' করে দিতে হয়।  আর এই পুরা কাজটা একটা কিউ (Queue) ডাটা স্ট্রাকচার দিয়ে ইমপ্লিমেন্ট করা হয়।  নিচে কোরমানের বইয়ের আলগোরিদমের ছবি দিয়ে দিচ্ছি (এইখানে d হচ্ছে মূল বা সোর্স নোড থেকে দূরত্ব/ধাপ আর 'পাই' আগের নোডের হিসাব রাখে):

      

ছবি ১: কোরমানের বই থেকে নেয়া [১]: BFS এলগোরিদম 

প্রথম যেটা খেয়াল করতে হবে, BFS এলগোরিদমে গ্রাফের প্রতিবেশী নোডগুলোর মধ্যে দূরত্ব ধরা হয় ১, অর্থাৎ এজের weight বা দূরত্ব সমান। এলগোরিদম রান করা শেষে একটা নোড থেকে বাকি নোড গুলো কত 'ধাপ' দূরে আর প্রতি নোডে যেতে কোন পথে যেতে হবে সেটা বের হয়।  কিন্তু ডাইক্স্ট্রা এলগোরিদম-এ গ্রাফের প্রতিটা নোডের সাথে তার প্রতিবেশী নোড শুধু সংযুক্তই না, ভিন্ন weight বা দূরত্বও দেয়া থাকে। সবচেয়ে কম দূরত্বে (বা Shortest Path) কিভাবে যাওয়া যায় সেটাই এই এলগোরিদম বের করে।  

উপরের এলগোরিদমে লাইন ১৩-র মতো 'একটা নোড ইতিমধ্যেই দেখা বা visit করা শেষ (রং সাদা না), তাই আর ঘাঁটানোর দরকার নাই '  - এই আইডিয়া বাদ দিয়ে ডাইক্স্ট্রা এলগোরিদম আরেকটু কৌতুহলী হয়। একটা নোডে যদি আরো কম খরচে (দরকার হলে অন্য আরেকটা নোড ঘুরে, কম দূরত্বে) পৌঁছানো যায়, তখন সেইটাই ভালো পথ - মূলত এই আইডিয়াটাই ডাইক্স্ট্রা এলগোরিদম। এই আপডেটটা নিচের 'Relax' মেথডটা করে থাকে:

ছবি ২: কোরমানের বই থেকে নেয়া[১]: সোর্স থেকে কোনো নোডের দূরত্ব (v.d) যদি অন্য আরেকটা নোড (u) ঘুরে কম দূরত্বে পৌঁছানো যায়, তাহলে সেইটাই ভালো পথ। w(u, v) নোড দুটোর দূরত্ব দেয়।  

আরেকটা কাজ ডাইক্স্ট্রা এলগোরিদম করে থাকে, সাধারণ কিউ (regular queue) ব্যবহার না করে প্রায়োরিটি কিউ ব্যবহার করে। কারণ যেহেতু আমরা শর্টেস্ট বা সবচেয়ে কম দূরত্বে পৌঁছাতে চাই, তাই সোর্স নোড থেকে কম দূরত্বের ভিত্তিতে একটা প্রায়োরিটি কিউ বা মিন-হিপ ব্যবহার করে কাজ করলে একই নোড বার বার ভিসিট বা ঘুরে দেখতে হয় না। আরেকটু বুঝিয়ে বলি: নিজের নোডে পৌঁছাতে যেহেতু কোনো দূরত্ব যাওয়া লাগে না, তাই শুরুতে সোর্স নোডের দূরত্ব শূন্য করে দিয়ে বাকি সব গুলো নোডের দূরত্ব অসীম করে দিয়ে প্রায়োরিটি কিউ বা মিন-হিপ তৈরী করা হয়।  এখন প্রায়োরিটি কিউ তে যতক্ষণ নোড আছে, প্রতিবার সবচেয়ে কম দূরত্বে পৌঁছানো যায় এমন নোড বের করে নিয়ে (Extract-Min ) (শুরুতে সোর্স নোড নিজেই থাকবে) সবগুলো প্রতিবেশীকে 'Relax' করিয়ে নিলেই হলো - সব সময় কম দূরত্বের নোডই অগ্রাধিকার পাবে, আর তা একবারই পাবে। আর এভাবে 'লোভী' হয়ে সব সময় কম দূরত্বের নোডকে নিয়ে চলতে থাকলে একসময় সব গুলো নোডে পৌঁছানোর শর্টেস্ট বা সবচেয়ে কমদূরত্বের পথ বের করে ফেলা যাবে। ব্যস, এইটাই ডাইক্স্ট্রা এলগোরিদম। নিচে এলগোরিদমটা দিয়ে দিচ্ছি:

ছবি ৩: কোরমানের বই থেকে নেয়া[১]: প্রায়োরিটি কিউ (বা মিন-হিপ) আর relax ফাঙ্কশন ব্যবহার করে ডাইক্স্ট্রা এলগোরিদম  

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

ছবি ৪: নোড অথবা ভারটেক্স ক্লাস 


এবার যেহেতু প্রতিটা এজের weight  বা দূরত্ব হিসাবে নিতে হবে, তার জন্য একটা টেবিল তৈরী করতে হবে।  ধরা যাক, আমরা নোড u  আর v - এর মধ্যে এজ, u - v  এজের জন্য 'uv' স্ট্রিং কী (Key) আর weight বা দূরত্ব ইন্টিজার (Value)  হিসাবে হ্যাশ ম্যাপ -এ রাখলাম।  নিচের কোড গ্রাফের নোড গুলো কে একটা ArrayList -এ রাখবে, কিছু সাপোর্টিং ফাঙ্কশন থাকবে যেগুলো দিয়ে নোড গুলোর মধ্যে এজ আর weight যোগ করা যায়।  বলে রাখা ভালো, নোড গুলোকে নাম্বার দিয়ে নাম দিয়ে রাখছি, অর্থাৎ 'u', 'v' ইত্যাদি না বলে 1, 2 ইত্যাদি হিসাবে রাখছি।   

ছবি ৫: গ্রাফ ইমপ্লিমেন্টেশন

এবার গ্রাফ তৈরি করার জন্য সব কোড রেডি। যতগুলো নোডের গ্রাফ তৈরী করতে চাই, ধরা যাক, ৫ নোডের গ্রাফ, তাহলে main মেথডে Graph(5) কল করে প্রথমে নোডগুলো তৈরী করে নিয়ে, তারপর ম্যানুয়ালি বা ধরে ধরে এজ আর এজের weight যোগ করে দেয়া যাবে।    

এবার আসি, ডাইক্স্ট্রা এলগোরিদম ইম্প্লিমেন্টেশনে। প্রথমে relax ফাঙ্কশন। ছবি ২ -এর এলগোরিদম নিচের কোডে ইমপ্লিমেন্ট করলাম। Relax করলে true আর নাইলে false রিটার্ন করবে। কেন? একটু পরে বুঝিয়ে বলছি।  

ছবি ৬: Graph ক্লাসের ভেতরে প্রাইভেট relax ফাঙ্কশন 

 
এরপর ছবি ৩-এর ডাইক্স্ট্রা এলগোরিদম ইমপ্লিমেন্ট করার জন্য আমাদের প্রায়োরিটি কিউ (মিন-হিপ) লাগবে। গুগলে একটু ঘাঁটাঘাঁটি করে পেলাম যে জাভাতে util লাইব্রেরিতে প্রায়োরিটি কিউ (মিন-হিপ) আগে থেকেই ইমপ্লিমেন্ট করা আছে। কিন্তু যেহেতু আমাদের সোর্স নোড থেকে অন্য নোডের দূরত্বের ভিত্তিতে প্রায়োরিটি কিউ বানাতে হবে, তাই এই ব্যাপারটা একটু বলে দিতে হবে। আর এই কাজটা একটা ক্লাস যেটা Comparator ইন্টারফেস ইমপ্লিমেন্ট করে সেটা লিখে করতে হয়। এর পর শুধু প্রায়োরিটি কিউ-এর প্যারামিটার হিসাবে সেই ক্লাস তা পাস্ করে দিলে হয়ে যায়।  নিচের কোড:


ছবি ৭: Graph ক্লাসের ভেতরে Comparator ইন্টারফেস ইমপ্লিমেন্ট করা inner ক্লাস 


এবার শেষমেষ ডাইক্স্ট্রা এলগোরিদম ইমপ্লিমেন্টেশনের পালা। ছবি ৩ -এর কোড ধরে কোডটা ইমপ্লিমেন্ট করে দিলাম। খেয়াল করবেন, প্রায়োরিটি কিউ প্যারামিটার হিসাবে আমাদের Comparator ক্লাস নিচ্ছে। 


ছবি ৮: Graph ক্লাসের ভেতরে ডাইক্স্ট্রা মেথড। 

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

ঐদিন ক্লাস শেষে বেশ কিছুক্ষন ডিবাগ করে, ডকুমেন্টস, StackOverflow ঘেঁটে পরে বাগটা ধরতে পারলাম। আপনারা একটু চেষ্টা করে দেখবেন নাকি ধরতে পারেন কিনা? 

যাই হোক, এতক্ষন ধরে আসলে কনটেক্সট দেয়ার চেষ্টা করলাম। এইবার মূল ব্যাপারটা বলি। বাগটা হচ্ছে প্রায়োরিটি কিউ ব্যবহার করায়। কোনো প্রায়োরিটি কিউ তার প্রপার্টি -- আমাদের ক্ষেত্রে সোর্স নোড থেকে সবচেয়ে কম দূরত্বে থাকা নোড রুটে (root) থাকবে - এই ব্যাপারটা মেইনটেইন করবে কেবল শুরুতে যখন প্রায়োরিটি কিউ তৈরী করা হয় আর যখন কোনো অপারেশন করা হয়, যেমন poll (extract) কিংবা add ইত্যাদি কল করার পর। 

আমরা যখন ছবি ৬ -এ, 'relax' মেথড কল করে নোডের ভেতরে 'distance' বা দূরত্ব আপডেট করে দিচ্ছি, তখন ধরে নিচ্ছিলাম যে প্রায়োরিটি কিউ নিজে থেকে আপডেট হয়ে, স্ট্রাকচার বা কাঠামো বদলে সবচেয়ে কম দূরত্বের নোড কে উপরে বা রুটে (root) নিয়ে আসবে। এটা সম্পূর্ণ ভুল ধারণা। প্রায়োরিটি কিউ -এর ডকুমেন্টেশনে কোথাও সেটা বলা নাই।  

তাহলে উপায়? StackOverflow ঘেঁটে সল্যুশন বের করলাম। যখন 'relax' মেথড নোডের distance আপডেট করে true রিটার্ন করবে তখন ম্যানুয়ালি প্রায়োরিটি কিউতে একটা অপারেশন চালিয়ে - যেমন poll করে রুট বের করে নিয়ে আবার সেই একই রুট নোড add করে দিয়ে আমাদের প্রপার্টি 'force update' করে নিতে হবে, তবেই কাজ হবে। নিচে পরিবর্তিত কোড, হাইলাইট করে দিচ্ছি :

    
ছবি ৯: বাগ ফিক্স করা পরিবর্তিত ডাইক্স্ট্রা এলগোরিদম ইমপ্লিমেন্টেশন 

এখন আশা করি বুঝতে পারছেন, ছবি ৬ - এ কেন relax মেথডে true/false রিটার্ন করা জরুরি ছিল। আমি ভাবছিলাম এই ছোট কিন্তু খুব জরুরি বিষয়টা কেন পরিস্কারভাবে বলা হলো না? পরে আরেকটু ভালো করে পড়ার পর পেলাম কোরমানের বইয়ে 'relax' -এর সাথে Decrease-Key ফাঙ্কশনের সম্পর্ক বলা আছে - যেটা কিনা প্রায়োরিটি কিউয়ের নোডের key (আমাদের ক্ষেত্রে distance-ই key) কমিয়ে দিয়ে কিউ আপডেট করে। 

ছবি ১০: কোরমানের বই থেকে নেয়া[১]। ঘুরিয়ে বলা হয়েছে যে relax পরোক্ষভাবে অন্য ফাঙ্কশন কল করে প্রায়োরিটি কিউয়ের প্রপার্টি মেইনটেইন করবে   

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

সবাইকে ধন্যবাদ!
--ইশতিয়াক 

রেফারেন্স: 












গুগল কোল্যাব আর পাইথন এক্সেকিউটেবল চিটশীট:

গুগল কোল্যাব আর পাইথন এক্সেকিউটেবল চিটশীট:
২৭ জুন, শনিবার, 

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

গুগল কোল্যাব নিজেদের পরিচয় দেয় এইভাবে:

https://colab.research.google.com/notebooks/intro.ipynb

এটা ফ্রি! কারো গুগলে কিংবা জিমেইলে একাউন্ট থাকলেই হলো। গুগল ড্রাইভে গিয়ে নিচের ছবির মতো করে খুঁজে নিতে হয়। 

গুগল কোল্যাব যেভাবে খুঁজে নিতে হবে 


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

আমি কিছুদিন হলো হঠাৎ করেই YouTube -এ সহজ বাংলায় বেসিক পাইথনের উপর একটা ভিডিও সিরিজ বানাচ্ছি


পাইথনের উপর YouTube -এ একটা ভিডিও সিরিজ

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

Python Crash Course — বইটার চিটশীট

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

এই দুটো সবার সাথে শেয়ার করার জন্যই আজকের ছোট এই লেখা। দুটোই চেক করে দেখার অনুরোধ থাকলো। সবাইকে ধন্যবাদ।







 

আমেরিকার বিশ্ববিদ্যালয় গুলোতে ফ্যাকাল্টি বা শিক্ষক নিয়োগ পদ্ধতি

আমেরিকার বিশ্ববিদ্যালয় গুলোতে ফ্যাকাল্টি বা শিক্ষক নিয়োগ পদ্ধতি
৩০ এপ্রিল, ২০২০, বৃহস্পতিবার


রোজা মাস, করোনা ভাইরাসের কারণে ঘরবন্দি। ঘুমানো দরকার।  কিন্তু তাও কিছু একটা লিখতে ইচ্ছা করছে, তাই ভাবলাম, এই বিষয়টা নিয়ে সংক্ষেপে কিছু লিখি। লেখাটা সফটওয়্যার ইঞ্জিনিয়ারিং-এর সাথে কোনোভাবেই যায় না, তাও লিখছি।

শুরুতেই বলে নেই, আমেরিকার শিক্ষক নিয়োগ মূলত দুই ট্রাকে হয় - টেনিয়র ট্র্যাক (Tenure) আর নন-টেনিয়র ট্র্যাক (Non-tenure)। টেনিয়র ট্র্যাকের ফ্যাকাল্টি বা শিক্ষকরা মূলত গবেষণা -নির্ভর কাজ করেন, পাশাপাশি পড়ান, ইউনিভার্সিটিতে বিভিন্ন সার্ভিস দেন।  ৫-৬ বছর এভাবে চলার পর, যদি এই সময়ে ভালো বেশ কিছু সংখ্যক পেপার পাব্লিশ করতে পারেন, ক্ষেত্র বিশেষে গবেষণা ফান্ড আনতে পারেন, মোটামুটি ভালো পড়াতে পারেন - তাহলে শেষমেষ তাঁদের চাকরি স্থায়ী বা পার্মানেন্ট হয়। আর একবার পার্মানেন্ট হলেই হলো, তাঁদের আর নির্দিষ্ট কোনো রিটায়ারমেন্ট বয়স থাকে না!

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

যাই হোক, আজকে লেখায় টেনিয়র ট্র্যাকের ফ্যাকাল্টি নিয়োগ নিয়ে কিছু লিখবো।  কিন্তু আমার ধারণা, নন-টেনিয়র ট্র্যাকের হাইয়ারিং মোটামুটি একই রকম হয়।

মূলত ৩ ধাপে শিক্ষক বাছাই করে নিয়োগ দেয়া হয়।  আর প্রতিটা ধাপে যা করা উচিত, আর যা করা উচিত না, সেটাই নিজের অভিজ্ঞতা থেকে লিখছি।

ধাপ ১: রেসুমে ও অন্যান্য কাগজপত্র জমা দেয়া :

শিক্ষক নিয়োগ বিজ্ঞপ্তি ইউনিভার্সিটি গুলোর নিজস্ব ওয়েবসাইট ছাড়াও অন্যান্য জব সাইটে দেয়া হয়।  আমি নিজে https://www.higheredjobs.com/ এই ওয়েবসাইট থেকে বিজ্ঞাপন দেখে এপলাই করেছিলাম। এছাড়াও শুনেছি https://chroniclevitae.com/ বেশ ভালো ওয়েবসাইট। আরো অনেক ওয়েবসাইট নিশ্চই আছে। যেমন ঢাকা বিশ্ববিদ্যালয়ে আমার সিনিয়র, নাসিম ভাই একটা ওয়েবসাইটের নাম কমেন্টে খেয়াল করিয়ে দিলেন: www.cra.org - এটা মূলতঃ আমেরিকা আর ক্যানাডাতে কম্পিউটার সায়েন্সের উপর ফ্যাকাল্টি, পোস্টডক ইত্যাদি পজিশনের এডভার্টাইসমেন্ট দিয়ে থাকে। যাই হোক, সাধারণত: জব গুলোর জন্য, একাডেমিক রেসুমে, একটা কভার লেটার, রিসার্চ আর টিচিং ফিলোসফি, ৩ জন রিকোমেন্ডর-র নাম জমা দিতে হয়।

যা করা উচিত:

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



ধাপ ২: প্রথম স্কাইপ কিংবা জুম ইন্টারভিউ কল:

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

যা করা উচিত:

  • আপনার রেসুমে থেকে যেকোনো বিষয়ের উপর জিজ্ঞেস করতে পারে।  তাই প্রথমেই সবগুলো পয়েন্ট, বিশেষ করে আপনি কোথাও আগে পড়িয়ে থাকলে, সেটা সম্পর্কে প্রশ্নের জন্য রেডি থাকবেন। 
  • ক্লাসে পিছিয়ে পড়া ছাত্র-ছাত্রী, নকল করলে কি করবেন, বিভিন্ন জাতি-বর্ণের ছাত্র-ছাত্রী আপনি কিভাবে সামলাবেন, অনলাইনে পড়াতে হলে কি করবেন -- ইত্যাদি বিহেভিওরাল প্রশ্নের জন্য প্রস্তুতি নিতে পারেন। 
  • যদি আপনাকে নিয়োগ দেয়া হয়, তবে আপনি কি কি কোর্স পড়াতে চান বা পড়াতে পারবেন - এটাও একটা খুব কমন প্রশ্ন। 
  • সব প্রশ্নের উত্তর সংক্ষেপে, গুছিয়ে দেয়ার চেষ্টা করবেন। একজন প্রশ্ন করলো, তো আপনি ৫-৬ মিনিট ধরে একাই কথা বলে যাচ্ছেন - সেটা মোটেও ঠিক না।  চেষ্টা করবেন ২-৩ মিনিটের মধ্যে উত্তর দিয়ে দরকার হলে ডিসকাস করবেন - সার্চ কমিটি আরো ডিটেলস এ ব্যাপারে জানতে চান কিনা, জিজ্ঞেস করে নিতে পারেন।   
  • হাসি মুখে, যতটুকু সম্ভব রোবটের মতো না হয়ে উত্তর দিবেন।  মনে রাখবেন, সার্চ কমিটি আপনাকে তাঁদের কলিগ করবেন কিনা - মাথার পেছনে এই প্রশ্ন সব সময় রেখেছেন। সুতরাং, যতটুকু ফ্রেন্ডলি ভাবে উত্তর দিবেন। 
  • কোনো প্রশ্ন না বুঝলে, বিনীত ভাবে জিজ্ঞেস করাতে কোনো দোষ নেই। সার্চ কমিটিতে অনেকে দেশি মানুষ থাকেন, সবার কথার উচ্চারণ, বলার ধরন, গতি এক না - কাজেই কারো কথা না বুঝলে, 'দুঃখিত, আপনার কথা ঠিক ধরতে পারিনাই, আরেকবার বলবেন কি?" -  জিজ্ঞেস করে নিতেই পারেন। 
  • আপনি ক্লাসে শুধু পড়াবেনই না - ছাত্র-ছাত্রীদের কাছ থেকেও শিখতে চান, তাদের কাছ থেকে ফিডব্যাক নিয়ে নিজের পড়ানোর উন্নতি করতে চান, আপনি বিশ্বাস করেন শিক্ষাটা দ্বিমুখী -- এই কথাটা অনেকেই খুব পছন্দ করে দেখেছি। বলতে পারেন। 
  • ইউনিভার্সিটি, ডিপার্টমেন্ট ইত্যাদি সম্পর্কে আগেই জেনে রাখবেন।  ইন্টারভিউয়ের শেষের দিকে আপনার কোনো প্রশ্ন আছে কিনা - এটা জিজ্ঞেস করবেই।  তখন "না, আমার কোনো প্রশ্ন নাই" - বলাটা খুবই নেগেটিভ। তখন আপনি তাদের ইউনিভার্সিটি; ক্লাসে স্টুডেন্ট সংখ্যা কেমন; কোর্স লোড কি;  গবেষণা, পড়ানো, আর সার্ভিস - ইত্যাদির পার্সেন্টেজ কেমন ইত্যাদি জিজ্ঞেস করতে পারেন। 



ধাপ ৩: অন-সাইট ইন্টারভিউ, ক্যাম্পাস ভিসিট :
আপনার স্কাইপ বা জুম ইন্টারভিউ ভালো হলে, আপনি শর্ট লিস্টেড হলে ধাপ ৩ -এর জন্য ডাক পাবেন। ধাপ ৩ এ মূলত আপনি ওদের ক্যাম্পাসে মোটামুটি ৫-৬ ঘন্টার জন্য যাবেন। এই ধাপে সাধারণত আপনাকে একটা টিচিং আর আরেকটা রিসার্চ লেকচার দিতে হবে। লেকচারের বিষয় সচরাচর আপনি নিজেই ঠিক করতে পারবেন। তবে কিছু ক্ষেত্রে, যাতে তুলনা করতে সুবিধা হয়, সার্চ কমিটি আপনাকে একটা বিশেষ বিষয়ের উপর ছাত্র-ছাত্রীদেরকে একটা ৩০-৪০ মিনিটের টিচিং লেকচার দিতে বলতে পারে।  তবে, রিসার্চ লেকচার আপনি আপনার কাজের উপর দিতে পারবেন।

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

যা করা উচিত:

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




শেষ ধাপ, চাকরির অফার:

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

যা করা উচিত:

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

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



মাইক্রোসফট ওয়ার্ড (MS -Word) -র একটা না জানা, উপকারী ফিচার - মেইলিংস (Mailings)

মাইক্রোসফট ওয়ার্ড (MS -Word) -র একটা না জানা, উপকারী ফিচার - মেইলিংস (Mailings)
শনিবার, ২২ মার্চ, ২০২০

আজকের লেখা সফটওয়্যার ইঞ্জিনিয়ারিং -র কোনো বিষয়ের উপর না। মাইক্রোসফট ওয়ার্ডের একটা ফিচার  (Mailings) সম্পর্কে জানতে পারলাম। সবার সাথে শেয়ার করার জন্যই আজকে লিখছি।

আগে একটু ভূমিকা দিয়ে নেই: আমি যে  ইউনিভার্সিটিতে পড়াই, পেনসিলভানিয়া স্টেট ইউনিভার্সিটি - এবিংটন (Penn State University - Abington) সেটা মূলত একটা আন্ডারগ্রাজুয়েট ইউনিভার্সিটি -- মাস্টার্স বা পিএইচডি প্রোগ্রাম নাই। মূল Pennsylvania State University, যেটা Penn State নামেই বিখ্যাত - সেটার প্রায় ২০ টা ক্যাম্পাসের একটা এই এবিংটন। এবিংটন ক্যাম্পাসে কম্পিউটার সায়েন্সের ৪ বছরের ব্যাচেলরস ডিগ্রী এই কিছুদিন হলো মাত্র শুরু হয়েছে। বেশকিছু বাংলাদেশী স্টুডেন্টও আছে। নিজেদের জাহির করতে আর স্টুডেন্টদের প্রোগ্রামিংয়ে উৎসাহী করতে গত ২৯ ফেব্রুয়ারী, ২০২০ শনিবার ছুটির দিনে, প্রথমবারের মতো আমরা একটা প্রোগ্রামিং কন্টেস্টের আয়োজন করলাম। HackerRank.com ওয়েবসাইট ব্যবহার করে হোস্ট করা সেই কন্টেস্টে প্রতিযোগী বা কন্টেস্টেন্টদের সার্টিফিকেট প্রিন্ট করতে গিয়েই মাইক্রোসফট ওয়ার্ডের এই ফিচারটা, Mailings সম্পর্কে জানতে পারলাম।

"পিএইচডি প্রায় শেষ করে ফেলেছি, এরপর কী হবে?"

"পিএইচডি প্রায় শেষ করে ফেলেছি, এরপর কী হবে?"

ডিসেম্বর ২৬, বৃহস্পতিবার, ২০১৯

ডিপার্টমেন্টের জুনিয়র, আশীষ চন্দের সাথে একটা কাজে দেখা করতে গিয়েছিলাম। আশীষ ফিলাডেলফিয়ার টেম্পল ইউনিভার্সিটিতে পিএইচডি করছে।  কথা প্রসঙ্গে বলছিলো যে আমার ব্লগ পোস্টগুলা নাকি ও পড়ে।  আমিও বললাম যে, আমার এই ব্লগ লেখার পেছনে ওর ভূমিকা আছে।  শুরুতে Google Doc -এ নোট আকারে লিখে রাখতাম। আশীষ বলার পরেই ব্লগ পোস্ট আকারে লেখা শুরু করেছিলাম। আশীষ বলছিলো আমেরিকায় পিএইচডি করতে আসার আগে কিভাবে SOP লিখতে হয়, কিভাবে এপ্লাই করতে হয়, GRE /TOEFL স্কোর কেমন হওয়া লাগে -  ইত্যাদি নিয়ে অনেক জায়গায়ই বেশ লেখালেখি আছে, কিন্তু পিএইচডি শেষের দিকে কিংবা শেষ করার পর কিভাবে চাকরি খুঁজতে হবে, ভিসার ব্যাপার-স্যাপার কী - ইত্যাদি নিয়ে লেখা ওর চোখে পড়ে নাই। আমি লিখছিনা কেন - সেটাও জিজ্ঞেস করলো। ওর সাথে এসব নিয়ে অনেকক্ষন আলাপ করলাম, ভাবলাম নিজের অভিজ্ঞতা দিয়ে লিখেই ফেলি একটা ব্লগ পোস্ট।

সিম্পল ফ্যাক্টরি, ফ্যাক্টরি মেথড আর অ্যাবস্ট্রাক্ট ফ্যাক্টরি ডিসাইন প্যাটার্ন

অক্টোবর ১২, শনিবার লেখা শুরু করে আজকে নভেম্বর ৭, বৃহস্পতিবার।

যেকোনো ডিসাইন প্যাটার্ন বোঝার জন্য সেটা কী সমস্যার সমাধান করে সেটা খুব ভালো করে বোঝা জরুরি।

চলুন একটা কাল্পনিক ঘটনা বা গল্পের মাধ্যমে আজকের ডিসাইন প্যাটার্ন গুলোর উপযোগিতা বোঝার চেষ্টা করি।তার আগে বলে নেই: পুরো আইডিয়া আর কোড "Head First Design Patterns" বই থেকে নিয়ে আমি আমার মতো কিছু পরিবর্তন করে নিয়েছি। সুতরাং পুরো ক্রেডিটটাই ওই বইয়ের লেখকদের প্রাপ্য। আর লেখাটা একটু লম্বা, তাই ধৈর্য ধরে, সময় নিয়ে পড়ার অনুরোধ থাকলো।

পুরো সিম্পল ফ্যাক্টরির কোড, টেস্ট ড্রাইভ কোড সহ এই Repl.it লিংকে দিয়ে দিয়েছি। আর পুরো ফ্যাক্টরি মেথড ডিসাইন প্যাটার্নের কোড, টেস্ট ড্রাইভ কোড সহ এই Repl.it লিংকে দিয়ে দিয়েছি, দেখে নিতে পারেন। রেডি?

অবজার্ভার ডিসাইন প্যাটার্ন (Observer Design Pattern)

অবজার্ভার ডিসাইন প্যাটার্ন (Observer Design Pattern)
মঙ্গলবার, ১৭ সেপ্টেম্বর, ২০১৯। 

যেকোনো ডিসাইন প্যাটার্ন বোঝার জন্য সেটা কী সমস্যার সমাধান করে সেটা খুব ভালো করে বোঝা জরুরি।

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

ফগ কম্পিউটিং (Fog Computing) - সেটা আবার কী?

ফগ কম্পিউটিং (Fog Computing) - সেটা আবার কী?
২৯ জুলাই, সোমবার, ২০১৯


ক্লাউড কম্পিউটিং (Cloud Computing)  সম্পর্কে কম-বেশি কিছু শুনেছিলাম। কিছু ধারণাও হয়েছিল কিন্তু ফগ বা "কুয়াশা" কম্পিউটিং সম্পর্কে একেবারেই নতুন করে শুনলাম, জানলাম। আর সেটা শেয়ার করার জন্যই লিখছি। বরাবরের মতো প্রথমেই বলে নিচ্ছি, আমি এ ব্যাপারে মোটেও কোনো এক্সপার্ট না। শুধু একটা রিসার্চ পেপারে কিছু কাজ করার সুবাদে একটু শেখা, জানা হয়েছে - আর সেটাই শেয়ার করছি, হয়তো কারো উপকারে আসবে।

ICSE 2019 - ইন্টারন্যাশনাল কনফারেন্স অন সফটওয়্যার ইঞ্জিনিয়ারিং, মন্ট্রিয়েল, ক্যানাডা

ICSE 2019  - ইন্টারন্যাশনাল কনফারেন্স অন সফটওয়্যার ইঞ্জিনিয়ারিং, মন্ট্রিয়েল, ক্যানাডা
জুন ৩, সোমবার, ২০১৯।


এ বছর ইন্টারন্যাশনাল কনফারেন্স অন সফটওয়্যার ইঞ্জিনিয়ারিং (International Conference on Software Engineering সংক্ষেপে ICSE  - উচ্চারণ 'ইকসি ') -র ৪১তম আসর অনুষ্ঠিত হলো ক্যানাডার মন্ট্রিয়াল শহরে। শিক্ষক হিসাবে এই প্রথম গেলাম। আগে পিএইচডি ছাত্র হিসাবে প্রফেসরের সাথে একটা ছোট পেপার আর পোস্টার প্রেসেন্ট করতে ২০১০ -এ গিয়েছিলাম সাউথ আফ্রিকার কেপ টাউন শহরে। এইবার শুধু এটেন্ড করতে গিয়েছি, কোনো পেপার বা পোস্টার প্রেসেন্ট করতে না। সাথে প্রফেসরও নাই, সেইজন্যই বোধহয় খুব হালকা মেজাজে ছিলাম। খুব ভালো লেগেছে। নতুন অনেক কিছু শিখলাম, নেটওয়ার্কিং হলো - আর এইসব কিছু ব্যাপার শেয়ার করার জন্যই লিখছি।

কম্পোসিট ডিসাইন প্যাটার্ন (Composite Design Pattern)

কম্পোসিট ডিসাইন প্যাটার্ন (Composite Design Pattern)
১০ মে শুক্রবার, ২০১৯


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

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

সফটওয়্যার ডেভেলপমেন্টের কিছু বিখ্যাত সূত্র - মনে রাখার সহজ উপায়


সফটওয়্যার ডেভেলপমেন্টের কিছু বিখ্যাত সূত্র - মনে রাখার সহজ উপায়
"আজ রবিবার" - মার্চ ১০, ২০১৯: [উত্তর: ১৫-২১-৩৩-৪১১-৫২-৬৪-৭৮-৮১০-৯৯-১০৭-১১৬]

কিছুদিন আগে হটাৎ করেই একটা ওয়েবসাইটের খোঁজ পেলাম। টিম সোমার (Tim Sommer) নামের এক ভদ্রলোকের লেখা ব্লগ - Famous Laws of Software Development, অর্থাৎ: সফটওয়্যার ডেভেলপমেন্টের কিছু বিখ্যাত সূত্র। পড়লাম, তারপর অতি উৎসাহে ফেসবুকে শেয়ার করলাম। কিন্তু দুইদিন পরে ভেবে দেখি একটা সূত্রও মনে নাই। এমন কি সূত্র গুলোর লিস্ট যখন আবার দেখলাম, কোন সূত্র যে কী - সেটাও মনে করতে পারলাম না। ভাবছিলাম মনে রাখার উপায় কী? মুখস্থ করে ফেলবো?

আমেরিকায় উচ্চ শিক্ষায় আসার জন্য যত বাধা (?!)

আমেরিকায় উচ্চ শিক্ষায় আসার জন্য যত বাধা (?!)
১১ ফেব্রুয়ারি, সোমবার ২০১৯

[ডিসক্লেইমার - এই পোস্ট সফটওয়্যার ইঞ্জিনিয়ারিং -এর সাথে কোনোভাবেই সম্পৃক্ত না।]

আমার ব্লগ লেখালেখির পেছনে ডিপার্টমেন্টের জুনিয়ারদের অনেক ভূমিকা। কেউ বিশ্বাস করবে কিনা জানি না, জুনিয়ারদের সাথে আমার সফটওয়্যার ডেভেলপমেন্টের এক্সপেরিয়েন্স শেয়ার করার জন্যই ২০১৪ সালের ডিসেম্বরে প্রথম লিখি।আমি আক্ষরিক অর্থেই সফটওয়্যার ডেভেলপমেন্ট শূন্য থেকে শুরু করেছি। তাই নতুন কিছু শিখলে শেয়ার করার লোভ সামলাতে পারতাম না। প্রথমদিকে গুগল ডক-এ লিখে ডিপার্টমেন্টের ফেইসবুক পেজে তার লিংক শেয়ার করতাম।সবার লাইক আর কমেন্টে খুব উৎসাহ পেতাম (এখনো পাই)।  আশীষ চন্দের (এখন টেম্পল ইউনিভার্সিটিতে পিএইচডি করছে) পরামর্শে লেখাগুলোকে একটা ব্লগে পোস্ট আকারে পাবলিশ শুরু করি কিছুদিন পর। কায়সার সাবরিনের (এখন লিংকড-ইনে কাজ করছে) পরামর্শে ব্লগের নাম ঠিক করি। তারপর আসলে মাঝে মাঝে পোস্ট দিতাম - শুধুই ডিপার্টমেন্টের ফেইসবুক পেজে।  নিজের ফেসবুকে (হয়তো একবার ছাড়া) কখনোই কোনো পোস্ট শেয়ার করেছি বলে মনে পড়ে না। কিছুটা সংকোচ, অস্বস্থিবোধ, "লোক দেখানো হয়ে যাবে"  - এসব ভেবেই কখনো শেয়ার করি নাই। এই কিছুদিন হলো আহমেদ শামীম হাসান শাওনের (এখন 'পাঠাও' - এ কাজ করেছে) উৎসাহে ব্লগ পোস্ট গুলো নিজের ব্লগে পোস্ট করার পাশাপাশি Medium -এর প্রোগ্রামিং পাতা - তে শেয়ার করা শুরু করি।  ২০১৪ সালের ডিসেম্বরে শুরু করে ১০০, ২০০ করে এখন আমার এই ব্লগের হিট সংখ্যা ২২ হাজারের উপর! পাঠকদের অনেক ধন্যবাদ!

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

কী লিখবো ভাবছিলাম। ২০০৮-এর অগাস্টে প্রথম পড়তে আমেরিকায় আসি, এখন ২০১৯! নতুনদেরই তো আসলে এই বিষয়ে লেখার কথা। লিখছেও। গ্রুপে প্রায়ই দেখি "এই বছর আরো 'এতো জন' বাইরে এসেছে",   "অমুক প্রফেসর নতুন স্টুডেন্ট নিচ্ছেন, আগ্রহীরা যোগাযোগ করো" টাইপ পোস্ট। আর পোস্ট গুলো দেখতে আসলেই খুব ভালো লাগে। এর পর আর কী আর উৎসাহ দিবো?

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

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

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


৩. GRE, TOEFL এইগুলোর রেজিস্ট্রেশন করতে তো ক্রেডিট কার্ড লাগে। আমার নাই। এখন কী করার আছে?
২০০৭-২০০৮ সালে, আমাদের সময় তো দেশে কোনো ক্রেডিট কার্ডই বলতে গেলে ছিল না। দেশের বাইরের আত্মীয়-স্বজন কিংবা বড় ভাই, বন্ধুরাই ভরসা ছিল। ওঁদের ক্রেডিট কার্ড ব্যবহার করেছি, আর তার সমান পরিমাণ টাকা দেশে তাঁদের কাউকে দিয়ে দিয়েছি। এখন ডিপার্টমেন্টের সিনিয়ররাই কমপক্ষে ১০০ জন দেশের বাইরে আছে, যাঁরা প্রায়ই দেশে টাকা পাঠান। গ্রুপে একটা "হেল্প চাই" পোস্ট দিলে আমি গ্যারান্টি দিয়ে বলতে পারি, কেউ না কেউ রেজিস্ট্রেশনের ফি খুশি হয়েই ক্রেডিট কার্ড দিয়ে দিবে। টাকাটা তাদের কথামতো তাদের বাসায় গিয়ে দিয়ে আসলেই হয়ে যাবে।  বাকিতে বা ধীরে ধীরে শোধ করতে চাইলেও সম্ভব।  আওয়াজ দিয়েই দেখো না।

৪. আমার সিজিপিএ অনেক কম।  আমাকে কী এডমিশন দিবে?
ভাইরে! তোমাদের তো তাও সিজিপিএ আছে। আমাদের সময় ক্লাস সিস্টেম ছিলো, তাও আবার ৬০% + হলেই  ফার্স্ট ক্লাস। হাতে গোনা কয়েকজন বাদে কেউই ৮০% মার্ক্স্ পেতো না।  সিজিপিএ সিস্টেমে তো তা 'B' - ও না। আমার মনে আছে, হায়দার স্যার আমার জন্য লেখা তাঁর রেকমেন্ডেশন লেটারে ব্যাপারটা ব্যাখ্যা করে দিয়েছিলেন যাতে শুরুতেই বাদ না পড়ি। সুতরাং, সিজিপিএ অবশ্যই জরুরি, কিন্তু খারাপ হয়েছে বলেই যে এডমিশন হবে না - সেটা পুরোপুরিই ভুল ধারণা। GRE (ম্যাথ), TOEFL আর ভালো SOP (স্টেটমেন্ট অফ পারপাস) থাকলে এডমিশন হবে, চিন্তার কোনো কারণ নেই। 

৫. অনার্সে আমার কোনো রিসার্চ পাবলিকেশন নাই।  পিএইচডি তে কী আমাকে নিবে?
আমারও ছিল না। আমার পরিচিত আমাদের ব্যাচের যারাই পিএইচডি করতে আমেরিকায় আসছে (প্রায় ১৫-১৬ জন), ২-১ জন বস বাদে কারোরই আন্ডারগ্রেডে কোনো পাবলিকেশন ছিল না।  সুতরাং, পাবলিকেশন ছাড়া পিএইচডি এডমিশন হবে না - এইটা একটা ফালতু কথা।

৬. কোন কোন ইউনিভার্সিতে এপ্লাই করবো, ভাই? এতো ঝামেলা !
এইটা ভালো প্রশ্ন।  আমি মোট ৫ তা ইউনিভার্সিতে করেছিলাম। ২ টা টপ ইউনিভার্সিতে, ২ টা মিডিয়াম লেভেলের,  আরেকটা একদম নিচের রাঙ্কিং ইউনিভার্সিটিতে। ডিপার্টমেন্টের ৫ম ব্যাচের বড় ভাই,  শিশির ভাইয়ের (উনার ফেসবুক প্রোফাইল লিংক পাচ্ছি না!) কাছ থেকে পাওয়া আইডিয়াটা ছিল এই রকম:  টপ গুলোতে ভাগ্য ভালো থাকলে লেগে গেলে তো কথাই নেই, মিডিয়াম গুলোতে এডমিশন হওয়া উচিত। আর কোনোটাতে না হলে নিচের লেভেলেরটাতে হবেই।  আমার মোট ৪ টা ইউনিভার্সিতে পার্শিয়াল কিংবা ফুল ফান্ডিং সহ এডমিশন হয়েছিল।  আমি খুঁজে খুঁজে বাংলাদেশী আছে এমন ইউনিভার্সিটিতে এপ্লাই করেছিলাম। এখন তো ডিপার্মেন্টের ফেসবুক গ্রুপে একটা "কে কই আছেন ভাই?" - টাইপ হেল্প পোস্ট করলেই সব জানা যাবে।

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

৮. ডিপার্টমেন্ট থেকে পাস করেছি অনেক বছর হয়ে গেলো, অনেকদিনের গ্যাপ। এখন কী আর পিএইচডি করতে বাইরে আসার সময় আছে??
হুম। গ্যাপ বেশি হলে সমস্যা।  কিন্তু এই গ্যাপে যদি তুমি কম্পিউটার সায়েন্স রিলেটেড জব করে থাকো, তাইলে আসলে সমস্যা নাই।  ইন্ডাস্ট্রি তে কাজ করে পরে পিএইচডি তে এডমিশন নিয়ে ডিগ্রী করেছে, এমন লোক অনেক আছে।  আমাদের ব্যাচেরই এক ফ্রেন্ড পাশ করার প্রায় ৭-৮ বছর পর পিএইচডি করতে আমেরিকাতে (ফান্ডিং সহ) এই কয়েকদিন আগেই এসেছে।  পিএইচডি করার আসলে বয়স নাই।  ইচ্ছা আর খাটার সাহস থাকলেই হয়।  কারো কাছে একবার শুনেছিলাম, পিএইচডি করতে ১০% মেধা আর ৯০% খাটুনি করার প্রয়োজন। কথাটা আমি বিশ্বাস করি।

৯. অপ্প্লিকেশন থেকে শুরু করে এডমিশন - শুরু থেকে শেষ পর্যন্ত তো অনেক স্টেপস।  কোনটার পর যে কোনটা করবো বুঝতেসি না।  
২০০৯ -এর দিকে দেশে গিয়ে ফারহান ভাইয়ের রিকোয়েস্টে ডিপার্টেমেন্টে বাইরে পড়তে আসার উপর একটা ওয়ার্কশপ করেছিলাম।  স্টেপ-বাই-স্টেপ প্রসেসটার উপর একটা স্লাইড বানিয়েছিলাম। দেখতে পারো। এই লিংকে পাওয়া যাবে।

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

১১. আমি খুব সাধারণ মানের ছাত্র/ছাত্রী। আমি কী পারবো?

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

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

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

--ইশতিয়াক। ৭ম ব্যাচ, সি এস ই ডি ইউ
  

পাইথন চিট শিট: জাভা ডেভেলপারের চোখে পাইথন: তফাৎ, নতুন বৈশিষ্ট বা ফিচার - ২

পাইথন চিট শিট: জাভা ডেভেলপারের চোখে পাইথন: তফাৎ, নতুন বৈশিষ্ট বা ফিচার - ২
১৩ ডিসেম্বর, বৃহস্পতিবার, ২০১৮


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

Git ব্রাঞ্চ মডেল

Git ব্রাঞ্চ মডেল
বৃহস্পতিবার, ২৫ অক্টোবর, ২০১৮


আমার ক্লাসে ছাত্রছাত্রীরা Python প্রোগ্রামিং ল্যাঙ্গুয়েজে প্রজেক্ট করছে। IDE হিসাবে PyCharm ব্যবহার করছে।  প্রজেক্টের মার্কিং বা ইভালুয়েশন-এর একটা নির্ণায়ক হিসাবে (Criteria -র বাংলা ভেবে না পেয়ে Google ট্রান্সলেট -এ খুঁজে দেখি এই অনুবাদ দেখাচ্ছে, খারাপ না!) তাদেরকে বলেছিলাম যে তাদের কোড কোনো এক প্রকার ভার্সন কন্ট্রোল সিস্টেমে হোস্ট করতে হবে। উদাহরণ হিসাবে GitHub কিংবা Google Code ব্যবহার করতে বলেছিলাম। প্রজেক্টের প্রথম ইটারেশন প্রেসেন্টেশনের দিন দেখা গেলো ৬ টা টিমের মধ্যে শুধু একটা টীম তা করতে পেরেছে, বাকিরা নাকি অনেক চেষ্টা করেও GitHub -এ কোড হোস্ট করতে পারে নাই। একটা টীম তো বলেই বসলো যে খুব ভালো হয় তাদেরকে এই GitHub -এ কিভাবে কোড হোস্ট করতে হয় তার উপর যদি একটা টিউটোরিয়াল করাই!

জাভা ডেভেলপারের চোখে পাইথন: তফাৎ, নতুন বৈশিষ্ট বা ফিচার - ১

জাভা ডেভেলপারের চোখে পাইথন: তফাৎ, নতুন বৈশিষ্ট বা ফিচার - ১
৩১ অগাস্ট, ২০১৮, শুক্রবার

সফটওয়্যার ইঞ্জিনিয়ারের চাকরি ছেড়ে প্রায় ৩ সপ্তাহ হলো পেন স্টেট ইউনিভার্সিটি, এবিংটন (Penn State University at Abigton)  -এ শিক্ষক হিসেবে জয়েন করেছি। পড়াচ্ছি পাইথনের উপর ২ টি আন্ডারগ্রেড কোর্স। একটা একদম বেসিক কোর্স, আরেকটা একটু এডভান্স লেভেলের কোর্স - পাইথন দিয়ে ডাটা স্ট্রাকচার। পড়াচ্ছি বলতে আক্ষরিক অর্থেই শিখে শিখে পড়াচ্ছি। আমি সবসময়ই জাভা তে কোড করেছি - একটু আধটু সি কিংবা সি# -এ কাজ করলেও মূলতঃ জাভাতেই কাজ করেছি। আর তাই, নতুন করে শিখতে গিয়ে পাইথনের নতুন ফিচার বা জাভা থেকে আলাদা যেসব বৈশিষ্ট চোখে পড়ছে - তাই নোট করে রাখার উদ্দেশ্যেই আজকের লেখা, হয়তো কারো উপকারে আসবে। এখন পর্যন্ত যা চোখে পড়েছে তাই লিখছি, পরে আরো কিছু শিখলে/দেখলে লিখে রাখবো।

গিট: মার্জড ব্রাঞ্চ কে রিভার্ট করার সহজ উপায়

গিট: মার্জড ব্রাঞ্চ কে রিভার্ট করার সহজ উপায়
জুলাই ১৮, বুধবার, ২০১৮


অনেক সময় আপাত দৃষ্টিতে কঠিন একটা কাজের বা সমস্যার খুব সহজ সমাধান পাওয়া যায়।  Git/BitBucket, IntelliJ  নিয়ে পড়া এমন একটা কঠিন সমস্যার সহজ সমাধান পেয়ে শেয়ার করার লোভ সামলাতে পারলাম না। সমস্যায় কিভাবে পড়লাম সেটাও ইন্টারেষ্টিং।

ডাটাবেস: প্রি - আর পোস্ট -ডেপ্লয়মেন্ট স্ক্রিপ্টের চক্করে!

ডাটাবেস: প্রি - আর পোস্ট -ডেপ্লয়মেন্ট স্ক্রিপ্টের চক্করে!
এপ্রিল ১৮, বুধবার, ২০১৮


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

ডাটাবেস: ইনডেক্সিং নিয়ে কিছু কথা

ডাটাবেস: ইনডেক্সিং নিয়ে কিছু কথা
২৭ মার্চ ২০১৮, মঙ্গলবার

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

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

GDPR - ইউরোপিয়ান ইউনিয়ন জেনারেল ডাটা প্রটেকশন রেগুলেশন

ইউরোপিয়ান ইউনিয়ন জেনারেল ডাটা প্রটেকশন রেগুলেশন
২৬ ফেব্রূয়ারি, ২০১৮, সোমবার।



আর মাত্র ৮৭ দিন বাকি। এই ৮৭ দিনের মধ্যে অর্থাৎ ২৫ মে ২০১৮-এর মধ্যে GDPR ইমপ্লিমেন্ট করতে না পারলে কোম্পানি গুলোর ২০ মিলিয়ন ইউরো কিংবা বাৎসরিক লাভের ৪% - দুটোর মধ্যে যেটা বেশি, সেই পরিমাণ জরিমানা দিতে হতে পারে !!

এটা নিয়ে খুব বেশি হৈচৈ শোনা যাচ্ছে না।  কিন্তু কোম্পনি গুলোর এটা নিয়ে বেশ মাথা খারাপ অবস্থা।

কিন্তু কী এই GDPR?  এটা ইউরোপিয়ান ইউনিয়নের পাশ করা তার নাগরিকদের ব্যক্তিগত তথ্য ও তথ্য স্বাধীনতার জন্য করা আইন "জেনারেল ডাটা প্রটেকশন রেগুলেশন"।

লাঞ্চ এন্ড লার্ন - জাভা ৯

লাঞ্চ এন্ড লার্ন - জাভা ৯
নভেম্বর ১০, শুক্রবার, ২০১৭

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

POM or TAP design pattern for test automation using Selenium WebDriver


POM or TAP design pattern for test automation using Selenium WebDriver
August 21, Monday, 2017

I've written the same topic in Bangla in my previous blog post mainly as a note to myself and of course, to share the idea with my people (who speak the same language). Now, at work, we have an automation training going on and it seems that the same note in English would be helpful to the trainees as well. So, here's the translation in English.

আফসোস সমগ্র এবং ...

আফসোস সমগ্র এবং ...
অগাস্ট ১৭, ২০১৭, বৃহস্পতিবার


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

আমাজন কোম্পানির (আমার কাছে এতদিন) না-জানা কিছু তথ্য

আমাজন কোম্পানির (আমার কাছে এতদিন) না-জানা কিছু তথ্য
বুধবার, ১৭ মে ২০১৭


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

সিস্টেম ডিজাইনের উপর সম্ভাব্য ইন্টারভিউ প্রশ্নের জন্য যেভাবে প্রিপারেশন নিতে পারেন

সিস্টেম ডিজাইনের উপর সম্ভাব্য ইন্টারভিউ প্রশ্নের জন্য যেভাবে প্রিপারেশন নিতে পারেন
১৪ এপ্রিল, শুক্রবার, ২০১৭

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

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

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

জাভা ৮ - ল্যামডা এক্সপ্রেশন / ফাংশনাল প্রোগ্রামিং

জাভা ৮ - ল্যামডা এক্সপ্রেশন / ফাংশনাল প্রোগ্রামিং
১৭ মার্চ, ২০১৭, শুক্রবার

জাভা ৮ -এ ল্যামডা এক্সপ্রেশন ব্যবহার করা যায় শুনেছিলাম, তবে ল্যামডা এক্সপ্রেশন কিংবা ফাংশনাল প্রোগ্রামিং সম্পর্কে কিছুই জানি না। কয়েকটা টিউটরিয়াল শুরু করেও সুবিধা হয় নাই। 

জাভা ম্যাগাজিনের নভেম্বর-ডিসেম্বর ২০১৬ সংখ্যায় "Implementing Design Patterns with Lambdas" নামের একটা আর্টিকেল বের হয়েছিল। মূলতঃ জাভাতে কিভাবে জনপ্রিয় ডিজাইন প্যাটার্ন গুলো সহজে ইমপ্লিমেন্ট করা যায়, তার উপর একটা টিউটোরিয়াল। তবে Lambda Expression জানা না থাকার কারণে পুরো আর্টিকেল/টিউটোরিয়ালটাই  মাথার উপর দিয়ে গিয়েছিলো।    

আশার কথা হচ্ছে, জাভা ৮ -এ Lambda Expression-এর উপর কৌশিক শ্রিনিভাস নামের এই লোকটার ভিডিও টিউটরিয়াল গুলো খুব কাজের মনে হচ্ছে। দেখে মজা পাচ্ছি, বুঝছিও। পুরোটা শেষ করার আগেই শেয়ার করার লোভ সামলাতে পারলাম না।  

ওহ, আরেকটা কথা, আমার ব্লগের হিট সংখ্যা বা পড়ার সংখ্যা ১০ হাজার ছাড়িয়েছে।  এইটা জানানোর লোভটাও সামলাতে পারলাম না :) 

সবাইকে পড়ার জন্য ধন্যবাদ। 

--ইশতিয়াক 


গুগল টেস্ট অটোমেশন কনফারেন্স ২০১৬, নভেম্বর ১৫-১৬, সানিভেল, ক্যালিফর্নিয়া - দ্বিতীয় পর্ব

গুগল টেস্ট অটোমেশন কনফারেন্স ২০১৬, নভেম্বর ১৫-১৬, সানিভেল, ক্যালিফর্নিয়া -  দ্বিতীয় পর্ব
সোমবার, ডিসেম্বর ৫, ২০১৬

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

গুগল টেস্ট অটোমেশন কনফারেন্স ২০১৬, নভেম্বর ১৫-১৬, সানিভেল, ক্যালিফর্নিয়া - প্রথম পর্ব

গুগল টেস্ট অটোমেশন কনফারেন্স ২০১৬, নভেম্বর ১৫-১৬, সানিভেল, ক্যালিফর্নিয়া - প্রথম পর্ব
শুক্রবার, নভেম্বর ১৮, ২০১৬

গুগল টেস্ট অটোমেশন কনফারেন্স (GTAC) -এর কথা আমি সম্ভবতঃ ২-৩ বছর আগে প্রথম শুনি। ওদের টেস্টিং ব্লগে সাবস্ক্রাইব করার সুবাদে এইবার কনফারেন্সের খবর বেশ আগেই পেয়েছিলাম। এবছর জুন মাসে ওরা অংশগ্রহণে আগ্রহীদের এপ্লিকেশন অনলাইনে জমা নেয়া শুরু করে।  একটা ছোটোখাটো রচনা বা স্টেটমেন্ট -অফ-পারপাস লিখতে হয়েছিল যে আমি কেন অংশগ্রহণ করতে চাই, আর কেনই বা আমাকে তাদের  সুযোগ দেয়া উচিত!

বাইটকোড ইন্সট্রুমেন্টেশন (Bytecode instrumentation) এবং এর ব্যবহার

বাইটকোড ইন্সট্রুমেন্টেশন (Bytecode instrumentation)  এবং এর ব্যবহার:
১১ নভেম্বর, শুক্রবার, ২০১৬

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

কিন্তু এতে লাভটা কী?

#জাভা ৮, #ইন্টারফেস, #নতুন ফীচার, #ডিফল্ট মেথড, #স্ট্যাটিক মেথড

#জাভা ৮, #ইন্টারফেস,  #নতুন ফীচার, #ডিফল্ট মেথড,  #স্ট্যাটিক মেথড
৩ অক্টোবর, সোমবার ২০১৬


আজকের লেখা খুব ছোট হবে।  জাভা ৮ -এর ইন্টারফেস -এর একটা নতুন ফীচার নিয়ে শেখা আর্টিকেল শেয়ার করাই মূল উদ্দেশ্য।

VSCode -এ regEx ব্যবহার করে খুব গ্রুপ টেক্সট পরিবর্তনের উপায়

VSCode -এ regEx ব্যবহার করে খুব গ্রুপ টেক্সট পরিবর্তনের উপায়  ৪ জানুয়ারি, ২০২৫, শনিবার  কাজের জায়গায় regEX ব্যবহার করে একটা প্রবেলম সল্ভ করল...