ব্লগবাকুম!

মধুপাগলার খাতা

ডিজাইন প্যাটার্নের শুরু হোক বাংলায় – Facade

ডিজাইন প্যাটার্ন নিয়ে বকবক করার সিদ্ধান্ত নেয়ার পেছনে কারণ অনেক। অদ্ভুত হলেও সত্য সি.এস.ই. গ্র্যাজুয়েট দের এই বস্তুটা কারিকুলাম এ নাই। OOP শিখিয়ে এটা না শিখানো ঠিক কতটা যক্তিযুক্ত আমি জানিনা।
কথা নাই বার্তা নাই Facade নিয়ে হঠাং ব্লগবক শুরু করার যৌক্তিক কারণ না থাকলেও ঐতিহাসিক কারণ বিদ্যমান। জীবনে এক মহাপুরুষ (নাম বলা যাবেনা :P ) এর সাথে সাক্ষাৎ আমার হয়েছিলো। তার মুখেই প্রথম এটার নাম শোনা। তখনো বুঝিনাই উনি কি বলছিলেন। আজ বুঝলাম, তা্ই লিখতে বসা আর কি।
আমার এই টিউটোরিয়াল পড়ার আগে আপনার কি কি জানা দরকার দেখে নিন:

১. OOP এর উপর সাধারন ধারনা। ডিজাইন প্যাটার্ন কি তার সম্পর্কে হালকার উপর ঝাপসা থাকলেই চলবে। এগুলো এখন বলতে ইচ্ছুক নই। সি শার্পের গোড়া থেকে যে সিরিজটা শুরু করবো সেটায় চোখ রাখলেই হবে। :D

২. সি শার্প এর উপর কাজ চালানোর মতো জ্ঞান, অন্য কোন ল্যাংগুয়েজ জানলেই হবে। সিনট্যাক্স থেকে স্ট্রাকচার আন্দাজ করতে পারলেই চলবে।

৩. আমার ব্লগবক সহ্য করার ধৈর্য।

তো শুরু করা যাক। এই টিউটোরিয়াল সম্পূর্নই বাংলায় তার কারণ বাংলায় কোন কিছু বোঝা বাঙালির জন্যে সোজা। আর তেমন কোন কারণ নাই। আমার কোড গুলো নেট থেকেই সংগৃহীত। কপিরাইটে ফাঁসাবেন না ভাই..

আগে বলি কেন Facade দরকার। একটা টিমে একজন ক্যাপ্টেন থাকে যার কাজ বাকিরা কে কি করবে বলে দেয়া, সবার নিয়ন্ত্রণ রাখা, দায়ভার স্বীকার করা। মানে সহজ বাংলা কথায় সব শরীরে ঘাড়ের উপর একটা মাথা থাকবেই। যদি এমন কোন সিস্টেম দাঁড় করানো যায় যেটা সবার খেয়াল রাখবে। এমন একটা ক্লাস যেটা সবার খেয়াল রাখবে । সব সিস্টেমের মন ভালো করে দেবে (বেশি হয়ে গেলো রে :P )

Facade এ যেটা হয় সেটা হচ্ছে একটা class বাকি সব subsystem কে control করে। গুলিয়ে যাচ্ছে এই তো? আচ্ছা সহজ করে বলি। মনে করুন আপনার একটি ফুড শপ আছে। ফুড শপের তিনটি আলাদা টাইপের বার্গারের শেফ তিন জন (হে হে, মাথা খারাপ হইলে যা হয় আর কি)। আপনি বসে আছ্নে ফুড কোর্টের অর্ডার টার্মিনালে। লোকজন তাহলে অবশ্যই আপনার কাছে এসেই খাবার চাইবে। আপনি ভালো করেই জানেন কোন বার্গারের শেফ কে। সুতরাং আপনার জন্য খুবই সোজা ঠিক করা কোন অর্ডার কোন শেফের কাছে যাবে। এই সহজ ব্যাপারটুকু যদি আপনি বুঝে থাকেন জেনে রাখুন প্রোগ্রামিং জানুন আর নাই জানুন আপনি Facade ঠিকই বুঝে গেছেন। সেই হিসেবে আপনি এখানে Facade এবং আপনার তিন শেফ হচ্ছে আপনার Subsystem.

অনেক ব্লগবক করলাম। কাজের কথায় আসি। তাহলে কোড শুরু করা যাক।

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

তো একটা facade based system তৈরী করতে হলে আপনার লাগছে একটি Facade class এবং এক বা একাধিক Subsystem । আজকের উদাহরণের জন্য আমি ব্যবহার করছি একটি সি শার্প কনসোল অ্যাপ্লিকেশন। যেহেতু প্রথম টিটু লিখছি সি শার্পের জন্য আমি কিঞ্চিৎ অপ্রস্তুত। আশা করি পরবর্তীতে আরো ভালো উদাহরন উপহার দিতে পারবো। আজকের টিউটোরিয়ালের জন্য:

Facade : FoodShopManager

SubSystems: Chef_ChickenBurger, Chef_VegiBurger

প্রথমে আসুন সাবসিস্টেম গুলো চিনে নেই। মনে করুন আপনার ফুড শপে দুইজন Chef । একজন Chicken Burger এর জন্য আর অপরজন Vegi Burger এর জন্য। মনে করুন আপনার দুই শেফের জন্য দুইটি Subsystem তৈরী হয়েছে। এদের দুটি দেখতে নিচের মতো:

Class Chef_ChickenBurger হবে এরকম:


internal class Chef_ChickenBurger
 {
 internal string OrderRecieved()
 {
 return "Order recieved of Chicken Burger\n";
 }

internal string MakeBunsReady()
 {
 return "Making Buns Ready\n";
 }

internal string HereGoesTheChicken()
 {
 return "Chicken is in, awesomeness inside\n";
 }

internal string PerpareDressings()
 {
 return "The burger looks beautiful\n";
 }

internal string ReadyToServe()
 {
 return "Chicken burger is ready to serve\n";
 }
 }

আসলেই হাস্যকর, যাই হোক বুঝতে পারলেই হলো। মেথডগুলো শুধুমাত্র কাজ বোঝানোর জন্যই। তাহলে Chef_VegiBurger  হবে দেখতে এরকম:

 internal class Chef_VegiBurger
 {
 internal string OrderRecieved()
 {
 return "Order recieved of Vegitable Burger\n";
 }

internal string SliceAndDiceTomatoes()
 {
 return "Slicing and Dicing Tomatoes\n";
 }

internal string PrepareTheVegi()
 {
 return "The Vegi burger is on the way...blah blah\n";
 }

 internal string ReadyToServe()
 {
 return "Vegi Burger is ready to serve\n";
 }
 }

দুটো Subsystem তাহলে আমাদের পাওয়া শেষ। এবার আসি Facade এ। আগেই বলেছি ফুডশপের ম্যানেজার ই হচ্ছেন Facade। তাহলে..

public static class FoodShopManager
 {
 static Chef_ChickenBurger chef_ChickenBurger=new Chef_ChickenBurger();
 static Chef_VegiBurger chef_VegiBurger=new Chef_VegiBurger();

public static void OrderChickenBurger()
 {
 Console.WriteLine(chef_ChickenBurger.OrderRecieved() +
 chef_ChickenBurger.MakeBunsReady() +
 chef_ChickenBurger.HereGoesTheChicken() +
 chef_ChickenBurger.PerpareDressings()+
 chef_ChickenBurger.ReadyToServe());

}

public static void OrderVegiBurger()
 {
 Console.WriteLine(chef_VegiBurger.OrderRecieved() +
 chef_VegiBurger.SliceAndDiceTomatoes() +
 chef_VegiBurger.PrepareTheVegi() +
 chef_VegiBurger.ReadyToServe());
 }
 }

আসল কথাগুলো এখানেই, লক্ষ্য করে দেখুন, Facade Class টিতে আপনার দুজন শেফ এর ই দুটি Static Object তৈরী করা হয়েছে। এটি অবশ্য জরুরী নয়, পুরোটাই অনেকাংশে আপনার উপর নির্ভর করছে কি করে Structure টা দাঁড় করাবেন, মূল বিষয় ঠিক থাকাই বাঞ্ছনীয়।

আমরা এখানে দুটো ডামি মেথড দাঁড় করিয়েছি। একটি OrderChickenBurger এবং অপরটি OrderVegiBurger। দুটো মেথডের নামই আপনাকে বলে দেবে এদের কাজ। (আমার মতো একটু আধটু খেতে ভালোবাসলে আর কিছুই বলা লাগবেনা)।

খেয়াল করে দেখুন, Facade ক্লাসটি নিজেই তার Subsystem এর অবজেক্টগুলোর (chef_VegiBurger এবং chef_ChickenBurger ) মেথড নিজের মেথডের ভেতর থেকে Invoke করেছে। Subsystem গুলোকে আলাদা কোন Control দেয়নি। অবশ্য একটি Subsystem কে আপনি আবার অন্য একটি Subsystem গ্রুপের Facade হিসেবে ব্যবহার করতে পারেন।

তাহলে একটি Facade ই যখন Subsystem গুলোর সবকিছু দেখছে তখন Main এ শুধুমাত্র Facade এর মেথড গুলো Invoke করলেই আশা করি ঝামেলা মিটে যাবে। আসলেই তাই!


static void Main(string[] args)
{
FoodShopManager.OrderChickenBurger();
FoodShopManager.OrderVegiBurger();

Console.ReadKey();
}

দেখতেই পাচ্ছেন Main এ শুধুমাত্র Facade ক্লাসটির মেথড দুটিই Invoke করা হয়েছে। একটি Facade ক্লাসই সকল Subsystem এর সবকিছু নিয়ন্ত্রন করছে।

আজ তাহলে এটুকুই। Facade নিয়ে আরো একদিন লিখবো ঠিক করলাম মাত্র। আর ভালো কথা, চাইলে ঘুরে আসতে পারেন আমার ভালো বন্ধু অমিতের ব্লগ – Singleton Pattern এর আইডিয়া যদি পেতে চান।

সাধারন একটি গল্প

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

আজকে যা লিখতে বসেছি তা শুরু করবার আগে ঢং করে বলে ফেলি –  ”বেশি কথা বলবোনা” (আসলে ঘটনা উল্টো)।

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

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

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

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

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

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

ওয়েব ডিজাইনের শুরু – পর্ব ২ (CSS Layer Styling)

<div> এর কাজ কি করে খুব সহজেই করে যায় তা আগের পর্বেই মোটামুটি গুছিয়ে বলার চেষ্টা করেছি। আজকের বিষয়টা খুবই ছোট। খুব বেশি লিখবনা তাই। লেয়ার স্টাইলিং তখন ই আপনার লাগবে যখন আপনি একটি HTML element এর উপর অন্য একটি element রাখতে যাবেন।

ব্যাপারটা ছোট হলেও ভেঙে বলাটা জরূরী। কেননা, ব্যবহার না জানলে আসলে কোন ভালো কিছু ও কোনোদিন কাজে আসেনা। মনে করুন আপনি একটি ওয়েবসাইটের লে আউট তৈরী করেছেন এরকম:

খেয়াল করে দেখুন, যদি আপনি Header এর স্থানটি ভাগ করে ডানদিকে এমন একটি ছবি বসাতে যান যেটি আপনার content (green) এবং navigation (pink) দুটো অংশই আংশিক ঢেকে রাখবে এবং ওই দুটির অবস্থান পরিবর্তন না করে তাদের উপর ভেসে থাকবে তাহলে কি করবেন?

মনে করুন আপনি header এর width কমিয়ে এটিরে পাশে আরো একটি ছবি বসাবেন। প্রথমে, হেডার এর width কমিয়ে একটু জায়গা খালি করে নিন। খেয়াল রাখবেন যেনো জায়গা খালি করার ফলে আপনার ফাঁকা জায়গায় navigation (pink) অংশটি উঠে না যায়। এজন্য চাইলে আপনি ফাঁকা জায়গাটিতে ফাঁকা <div> বসিয়ে রাখতে পারেন। যদি আপনি আমার কথা না বুঝে থাকেন, এখান থেকে ঘুরে আসুন! এখানে আমরা একটি <div> এ একটি ছবি রাখবো। ছবির অংশটি পরবর্তীতে কালো বর্ডার দিয়ে দেখানো হয়েছে।

কালো অংশটি যদি আপনার ছবি হয় তাহলে দেখুন এর height এর জন্য আপনার navigation (pink) অংশটি নিচে সরে এসেছে। যদি আপনি চান এই কালো অংশটি navigation pane এর উপরে ভাসবে অর্থাৎ এর কিছু অংশ ঢেকে রেখে ভাসবে তাহলে বদলে ফেলুন এর CSS অংশটি। সাধারণত CSS এ লেয়ার বলে দেয়া হয় z-index দিয়ে। z-index একটি integer (পূর্ণ সংখ্যা) value হিসেবে নেয়। আপনি যে যে html element একই লেয়ারে বা একই স্তরে রাখতে চান সেগুলোকে একই z-index দিয়ে প্রকাশ করতে হবে। ব্যাপারটা অনেকটাই ফটোশপের লেয়ার এর মতো।

এখন , কালো অংশটির CSS id যদি হয় pic তাহলে লিখুন:


#pic
{
width:475px
(আপনার মাপ মতো);
height:225px (আপনার মাপ মতো);
float:left;
position:relative;
z-index:2;
}

এটির সাইজ আপনি আপনার মতো করে সাজিয়ে নিতে পারেন। আমি কেবল মান বসানোর স্বার্থে কিছু বসিয়েছি। মনে করুন আপনার navigation pane টির CSS id নিচের মতো:


#nav
{
width:332px;
float:left;
margin-left:20px;
margin-top:245px;
margin-right:30px;

z-index:1;

position:relative;

}

খেয়াল করে দেখুন আমি আলাদা করে দিয়েছি দুটো parameter লাল রং দিয়ে। এই দুটি parameter আপনার লেয়ার স্টাইল বলে দিচ্ছে। যেটি উপরে তার z-index আমি 2 বলে দিয়েছি এবং যেটি নিচে তার z-index আমি বলে দিয়েছি 1 ।  এখন যেসকল HTML element এর z-index হবে 2 তারা সবগুলো থাকবে একই লেয়ারে ।এবং সবচেয়ে গুরুত্বপূর্ন ব্যাপার হচ্ছে আপনাকে অবশ্যই দুটার position: relative করে দিতে হবে। নতুবা, আপনার মনের মতো হবেনা আপনার সাইটটি। যদি CSS positioning সম্পর্কে আপনার idea না থাকে ঘুরে আসতে পারেন এখান থেকে।

আশা করি আপনার সাইটটি দেখতে এরকম হবে। দেখুন কালো অংশটি navigation pane এর উপরে ভেসে আছে। CSS layer styling ব্যবহার করে এই কাজটিই খুব সহজে করা যায়।

আমি আগেও বলেছি, এখনো বলছি টিউটোরিয়াল গুলো net এ ছড়িয়ে আছে। আপনি অন্য কোথাও যদি পড়ে থাকেন তাহলে বলছি এগুলো বাংলায় আবার লেখার কারন একটিই-সহজবোধ্যতা।  HTML basic শেখার পরও একটি ওয়েবসাইট ডিজাইন কি করে করতে হয় তা  সম্পর্কে অনেকের ধারণাই স্পষ্ট হয়না। তাই  আমার এই চেষ্টা । আমি পরবর্তীতে CSS দিয়ে কি করে সহজেই একটি navigation bar বানানো যায় সেটি নিয়ে লিখবো আর পারলে CSS 4 নিয়ে লেখার ইচ্ছে আছে। আপাতত ASP.net শিখছি। শেখা হলে বসে পড়বো কিবোর্ড নিয়ে :D

 

 

 

সাজিয়ে নিন আপনার ওয়েবসাইট!

 

 

ওয়েব ডিজাইনের শুরু – পর্ব ১

সাধারনত ওয়েব ডিজাইন শেখানোর শুরুতেই যে কোন ওয়েব টিউটোরিয়াল (আদর্শ উদাহরণ w3schools ) সাইটেই HTML টিউটোরিয়ারে অনুসরণের কথা বলা হয়। বলাটাও স্বাভাবিক, HTML শেখার কয়েকটা প্রাথমিক বিষয়ের মধ্যে একটি হচ্ছে টেবিল। সাধারণত এই টেবিল ই ব্যবহৃত হয় একটি সাধারণ ওয়েবসাইটের ডিজাইন তৈরী করার সময়। কিন্তু SEO (Search Engine Optimization) সহ আরো হাজারো কারনে Table based layout এখন আধুনিক ওয়েবসাইট ডিজাইনাররা এড়িয়ে চলতে চান। ওয়েবে হাজারো টিউটোরিয়াল ছড়িয়ে আছে সেটা আমার জানা। কিন্তু তবুও ওয়েব ঘেটে আর নিজের শেখার পর মনে হলো বাংলা কিছু টিউটোরিয়াল থাকলে হয়তো অনেক সহজেই শেখা যেত।

ওয়েব ডিজাইন নিয়ে এহেন ভয়াবহ খটমট, দাঁতভাঙা কথা বলার মতো জ্ঞান আমার মাথায় নেই আপাতত। এখানে শুধুমাত্র টেবিলের পরিবর্তে <div> tag ব্যবহার করে এবং CSS এর মাধ্যমে কি করে সহজেই  একটি ওয়েবসাইট ডিজাইন করা যায় তার কথাই বলা। আগেই বলেছি টিউটোরিয়াল টি ওয়েব ঘেটে বানানো। কপিরাইটের মামলায় ফাঁসাবেননা যেন। শুধু শেখার সুবিধার্থেই নিজের জানাটুকু সবাইকে বলা আর কি।  এখানে দেখানো হয়েছে কি করে খুব সহজেই একটি table based design কে অনেক সহজেই <div> দ্বারা তৈরী করা যায়।

মনে করুন , আপনি টেবিল দিয়ে নিচে আঁকা একটি ওয়েবসাইটের layout তৈরীর চিন্তা করছেন।

header image
content column links column

এখন যদি আমি এই layout টি <div> ট্যাগ দ্বারা তৈরী করতে চাই, তাহলে প্রথমেই পরপর তিনটি <div> ট্যাগ লেখার ইচ্ছা হওয়াটাই স্বাভাবিক। যদি তাই করেন আপনি দেখতে পারেন নিচের মতো কোন কিছু। নিচের লেখাটি notepad বা অন্য কোন editor (Microsoft Expression Studio , Adobe Dreamweaver) এ paste করে দেখুন।


<div>
<div>Header</div>
<div>Content</div>
<div>links</div>
</div>

আমি ব্যবহার করি Microsoft Expression Web । চাইলে ব্যবহার করে দেখতে পারেন।

যাই হোক আপনি দেখবেন আপনার টেবিলের মতো কিছু হচ্ছেনা। <div> ট্যাগ তিনটি পরপর বসে গিয়েছে। কোনোমতেই আপনি একটি <div> ট্যাগের পাশে আরেকটিকে বসাতে পারবেননা (টাইনা হ্যাঁচড়ায়াও পারবেননা)।  এর সমাধান কি? এবার ভাইজান আপনার দরকার CSS .

CSS based layout এর একটি গুরুত্বপূর্ন অংশ হলো float এর ব্যবহার। এই float শব্দটিই আপনার সকল সমস্যার সমাধান দাতা।  শব্দটির সাধারণ অর্থ ভেসে থাকা। আসলেও এটি কাজ করে একই ভাবে। যখনই CSS ব্যবহার করে আপনি কোন <div> এ এই parameter টি ব্যবহার করবেন, এটি তার নির্দিষ্ট direction অনুযায়ী সর্বোচ্চ উচ্চতায় ভেসে উঠবে। আমার কথা দুবোর্ধ্য মনে হলে দেখতে পারেন নিচের ছবিটি!

example_float_1কোডের কথা বলার আগে সহজ কথা বলি। এখানে <div> ট্যাগ ব্যবহৃত হয়েছে। নীল রঙের বর্ডার দেয়া <div> টিতে float এর direction এ left দেয়ায় এটি বড়  body এর বামদিকে ভেসে উপরে উঠে এসেছে। এবার আসি কোডে।

প্রথমে আমরা তৈরী করবো এই container div যেটি অন্যান্য div গুলোকে ধরে রাখবে। নিচের কোডটি খেয়াল করেন।

<body>
<div id="container">

</div>
</body>

id define  করার জন্য আপনার html পেইজ এর CSS এ নিম্নোক্ত পরিবর্তন আনতে হবে। CSS সম্পর্কে না জানলে জেনে নিন এই লিংক থেকে।

body {
text-align: center;
}


#container {
margin: 35px auto;
width: 500px;
text-align: left;
}

এখানে container এর জন্য একটি id define করা হয়েছে। যেখানে প্রয়োজনীয় parameter গুলো ব্যবহার করে এর properties বলে দেয়া হয়েছে। width, margin, text align দিয়ে এই div টির properties বলে দেয়া হয়েছে এখানে।

খেয়াল করে দেখুন, পুরোটা লেখার পর আপনার পেজটির চেহারা হবে অনেকটাই এরকম।

tut_2

খেয়াল করে দেখুন, আপনার বানানো container div টির position পরিবর্তন হয়েছে। মনে করে দেখুন আমাদের বানানো প্রথম টেবিলটিতে cell ছিলো ৩ টি। তো আমাদের ৩টি div তৈরী করতে হবে এই container div এর ভিতর । ধরে নিন, তিনটি div এর id আমরা দিলাম header, content , sidebar. চলে যাই কোড এ।

<body>
<div id="container">

<div id="header">    </div>

<div id="content">  content  </div>

<div id="sidebar">  links  </div>

</div>
</body>

মনে করুন আমরা তিনটি div এর জন্য CSS এ id define করলাম নিচের মতো করে:

#container {
margin: 35px auto;
width: 500px;
}
#header {
width: auto;
}
#content {
width: 380px;
}
#sidebar {
width: 120px;
}

যদিও আমরা আমাদের প্রয়োজন অনুযায়ী তিনটি div define করলাম কিন্তু খেয়াল করে দেখবেন আপনার পেজটা এখন দেখাবে অনেকটা নিচের মতো:

tut_3

খেয়াল করে দেখুন, তিনটি div define করা সত্ত্বেও টেবিলটির মতো layout আমরা দাঁড় করাতে পারিনি। এইবার আমরা যদি  link div(pink) কে float এর মাধ্যমে content div এর পাশে বসাতে পারি তাহলে আমাদের টেবিল লে-আউটটির মতো লে-আউট হয়ে যাবে। তাই  আপনার CSS কে পরিবর্তন করুন আবার:

#content {
float: left;
width: 380px;
}
#sidebar {
float: right;
width: 120px;
}

খেয়াল করে দেখুন float ব্যবহারের ফলে link div (pink) টি content div (green) এর পাশে উঠে এসেছে । খেয়াল রাখবেন পাশাপাশি যতগুলো div ব্যবার করুননা কেন, তাদের width এর যোগফল যেন container div এর width এর সমান হয়। নাহলে আপনার ডিজাইনটি আপনার মনমতো হবেনা। আশা করি এবার আপনার HTML পেজটি নিচের মতো হবে:

tut_4

আমি আগেই বলেছি, ওয়েব থেকে সংগ্রহ করে এই টিউটোরিয়ালটি লেখা। শুধুমাত্র সবার বোঝার সুবিধার্থে বাংলা করা। পরবর্তীতে CSS layer styling সহ আরে অনেক কিছু নিয়ে লেখার চেষ্টা করবো। আমাকেও তো শিখতে হবে, নাহলে লিখবো কি? আর তো কিছু জানিনা!  :D

চাইলে যোগাযোগ করতে পারেন আমার সাথে : Swagata.Prateek(at)msptechrep.com

F# programming resources

F# is one of the new efficient, expressive programming language on .Net framework published by Microsoft. As the language is quiet new to the people, resources regarding this language is quiet hard to find. Although MSDN is providing elementary resources in their site but a comprehensive resource materials is what developers look for.

F# originates from Microsoft Research, Cambridge, and the MSR F# team, led by Don Syme, continues as partners with the Microsoft Developer Divsion.

to know more, check out.

 

http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/default.aspx

http://www.fsharp.net/

As resources are hard to find, here’s two official books that featured F# …. ..You’re surely gonna love it….

1. Programming F# – Chris Smith (O’Reilly)

Download link:

http://www.mediafire.com/file/j5h43aiac8c23c5/ProF_3.rar

2. Expert F# 2.0 – Don Syme, Adam Granicz and Antonio Cisternino (Apress)

http://free-files-download.net/showfile-12/ebook_expert_fsharp_2.zip

Swagata Prateek

Microsoft Student Partners

পাক্কা আড়াই মাসের খাটুনি এবং একটি হাজারো বাগ সহ ডিজিটাল লজিক সার্কিট সিমুলেটর!

উপরের শিরোনাম খুব সহজেই এটা ভাবাতে সমর্থ এ নির্ঘাত ঘরে বন্দী এক কুপমন্ডুকের  হঠাৎ “দুর্ঘটনাক্রমে” পেয়ে যাওয়া কোনো কিছুর বড়াই মাত্র। ঘটনা যে আসলেই তা না সেটা বলার “দুঃসাহস” আমি দেখাবনা। সত্যি কথা আসলে অনেকটা তাই। কিন্তু পুরোটাই যে তাই সেটা কিন্তু মানবোনা। ;)

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

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

নাফি সাধ ভাই, ইরতেজা ভাই, জুনায়েদ ভাই, শাওন ভাই,  মেসি ভাই , ইকবাল ভাই, (লম্বা) সিয়াম ভাই, সাকিব ভাই, রাজিব ভাই আপনাদের অসংখ্য ধন্যবাদ আমাকে এহেন সাপোর্ট দেবার জন্য!

এবং যার কথা না বললেই নয়, “তানবিন ইসলাম সিয়াম”- একগাদা ধন্যবাদ আপনাকে দেবো কিনা বুঝছিনা, বড় ভাই হয়েও যা করেছেন, তাতে আপনাকে আর কিছু বলার নেই। ধন্যবাদ দিলে দুরত্বটা বেড়ে যাবে। কমই থাক, কি বলেন? আপনার কাছে কাজ শিখে যাচ্ছি, যাবো!

অবাক হয়ে গেলাম সহপাঠী “প্রজেক্ট পার্টনারের” আচরণে। একটি লাইনের কোডও আমি বের করতে সমর্থ হইনি। বলতে পারেন আজ “আজান দিয়ে” এই কথা বলার মানে কি? হয়তো একটু আক্রমণাত্মকও হয়ে যাচ্ছে কথাগুলো। কিন্তু সত্যি এটাই অনেক অসুস্থতা আর নির্ঘুম রাত কাটিয়ে যতটুকু করেছি সেটা বলার মতো কিছু না হলেও আমি চেষ্টা করেছি। আজও প্রতি রাতে চার ঘন্টা ঘুমিয়ে একটু একটু করে চেষ্টা করে যাচ্ছি। সাহায্য এখন অবশ্য পাচ্ছি। তবে সেটা কেবলই এই প্রায় ১৫০০ লাইনের কোড গোড়া থেকে কাউকে বুঝিয়ে দেয়ার খাতিরে।

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

সবশেষে যে সকল সহপাঠী আমার অতিরিক্ত ভাব সহ্য করেও আমাকে উৎসাহ দিয়ে গেছে, তাদের প্রতি- অসংখ্য ধন্যবাদ!

দ্বার বদ্ধ করে ভ্রমটাকে রুখি: প্রসঙ্গ কুয়েট

যে কথাগুলো বলতে এই বকবকানি শুরু করা তা মোটেও কোনো সুখকর অনুভুতি থেকে নয় এইটুকু বলতে পারি। দুপুরের ঘুমটা যখন আজ তেমন একটা জমে উঠলোনা আমার অগাধ অর্থহীন সময়ের কিছুটা আজ CCC (Central Computer Centre) এ কাটাতে ইচ্ছে করলো। অনেকদিন যাওয়া হয়না। হাতে কতগুলো নেটবই (ebook) আসা দরকার তাই  তক্কে তক্কে পুরনো দিনের মতো পৌছে গেলাম CCC তে।এই সময়টায় এমনিতেই CCC ভরা থাকে। আজ হঠাৎ খালি দেখে মনে হলো যাক্ বাবা আজ কপালটা বোধহয় ভালো। কিন্তু কতটুকু ভুল ভেবেছিলাম সেটার প্রমাণ পেলাম ঠিক একটু পর।

CCC এর চেহারা আগের থেকে ভালো হয়েছে দেখে মনটা আরো ভালো হয়ে গেলো। সোজা বসে পড়লাম এক কোনায়। গত কয়েকদিন ধরেই বেশ কিছু টিউটোরিয়াল ঘাটাঘাটি করছিলাম । আজ সুযোগ পেযে ভাবলাম Autodesk Maya 2009 এর ভিডিও টিউটোরিয়াল গুলোর এক দুইটা অন্তত নামিয়েই ফেলি। কিন্তু বিধি বাম।hotfile, rapidhshare, megaupload কোনো লিংক এই আমাকে ” মি: এডমিনিস্ট্রেটর” প্রবেশের অনুমতি দিলেননা!

ঘটনাচক্রে এক বড় ভাই জানালেন বিচিত্র এক কাহিনী! এখানে এখন আর video files, .rar extensions এছাড়া আরো অনেক extension এর ফাইল ডাউনলোড করতে দেয়া হয়না! কারণটা আরো হাস্যকর! এগুলো চালু থাকলে নাকি ছেলেপেলে পড়ার জিনিস বাদ দিয়ে অন্য জিনিস বেশী ডাউনলোড করে! হঠাৎ করে বর্তমান “ডিজিটাল” সরকারের ফেসবুক বন্ধ করার কাহিনী মনে পড়ে গেলো। এ কি বিচিত্র মিল!   “Academic” জিনিষ কি উক্ত type এর ফাইলগুলোতে থাকতে পারেনা???

“যদি নাই থাকে দয়া করে এই মূর্খ মানবকে জানাবেন কি ঠিক কোন ধরনের ফাইলগুলোতে তা থাকে????”

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

আমরা সামনে এগিয়ে যাবার কথা বলি। গাল ফুলানো, মন ভোলানো একগাদা প্রতিশ্রুতি শুনি প্রতি বছর। প্রতিশ্রুতি ই রয়ে যায় এগুলো। মাঝে এহেন “প্রশংসনীয়” সিদ্ধান্তে বিষিয়ে ওঠে সাধারণ ছাত্রদের জীবন।

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

আজ যখন শাহজালাল প্রযুক্তি বিশ্ববিদ্যালয়ের মতো অন্যান্য বিশ্ববিদ্যালয়ের নতুন সিদ্ধান্তসমূহের প্রশংসা করে এর শিক্ষার্থীরা, কি করবে কুয়েটের শিক্ষার্থীরা? প্রশংসার বদলে কি হতাশাই ঝরে পড়বেনা তাদের কণ্ঠে? পড়ুক!

“কারা পিছিয়ে যাবে? কর্তৃপক্ষ না ছাত্ররা?”

উত্তরের অপেক্ষায় রইলামনা। জানি, এ প্রশ্নের উত্তর দেয়ার “ধৃষ্টতা” তাদের নেই!

বাংলা ইউনিকোড ফন্টের প্রসার চাই

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

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

অভ্র বনাম বিজয় শীর্ষক এযাবৎকালের বাংলাদেশের সর্ববৃহৎ অনলাইন যুদ্ধটা শুরু হবার পর অভ্রের ব্যাপারে এই একটা অনুযোগই বেশী শোনা গেছে – “প্রিন্ট মিডিয়াতে অভ্র ব্যবহার কষ্টসাধ্য” । অনুযোগ শোনা গেছে স্যান্স সেরিফ ইউনিকোড ফন্টগুলোকে নিয়েও। কিন্তু কতটুকু ব্যবহার করেছি আমরা এই ফন্টগুলো?

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

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

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

কালপুরুষসহ সকল ইউনিকোড বাংলা ফন্টের প্রচার ও প্রসারের দাবি জানাচ্ছি!

Implementation of “Image Mapping” technique in my project

Image mapping is frequently used in many cases where an image needs to be processed under certain rules. In case of designing a breadboard (I’m designing a digital logic circuit simulator in JAVA) I used a previously made image. Then using image mapping I made the program to detect each and every hole of the breadboard. So the code is given below.

import java.awt.BorderLayout;

import java.awt.Graphics;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import javax.swing.ImageIcon;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;
public class BreadBoard extends JFrame

{
private static JLabel statusText;

private ImageIcon breadBoard;

private int upperPanel[][];

private int lowerPanel[][];

private int midPanel1[][];

private int midPanel2[][];
public BreadBoard()

{

super("Checking Breadboard");

setLayout(new BorderLayout());
BreadPanel breadPanel=new BreadPanel();

add(breadPanel,BorderLayout.CENTER);
statusText=new JLabel("This is status bar");

add(statusText, BorderLayout.SOUTH);
upperPanel=new int [4][30];

lowerPanel= new int [4][30];

midPanel1=new int [60][10];

midPanel2=new int [60][10];
pointInitiator();
MouseHandler handler=new MouseHandler();

breadPanel.addMouseListener(handler);
}
public void pointInitiator()

{

int init=30;

int end=42;

//assining x values for upper and lower panel

for(int i=0; i<30 ;i++ )

{

upperPanel[0][i]=init;

upperPanel[1][i]=end;

lowerPanel[0][i]=init;

lowerPanel[1][i]=end;

init=init+32;

end=end+32;

}
//assihning y values for upper and lower panel

init=30;

end=42;

for(int i=0; i<30; i++)

{

upperPanel[2][i]=init;

upperPanel[3][i]=end;

lowerPanel[2][i]=init+472; //adding 472 to access the lower panel

lowerPanel[3][i]=end+472;

}
//assigning values to mid panel1

//asssigning y values

//the whole composition has been designed as per the arrangements in breadboard
init=102; //initial avalue for y co-ordiante

end= 114; //end value for y co-ordinate
for(int i=1; i<60;)

{

init=102;

end=114;

for(int j=0; j<10;)

{

midPanel1[i][j]=init;

midPanel1[i][j+1]=end;

init=init+32;

end=end+32;

j=j+2;

}
i=i+2;

}
//assigning x values

init=30;

end=42;
for(int i=0; i<=58;)

{
for(int j=0; j<=8;)

{

midPanel1[i][j]=init;

midPanel1[i][j+1]=end;

j=j+2;

}

init=init+32;

end=end+32;

i=i+2;

}
//priniting the array for checking the input strategy

/*  for(int i=0; i<60; i++)

{

for(int j=0; j<10; j++)

System.out.printf("%d ", midPanel1[i][j]);

System.out.println();

}

*/
//assigning values to mid panel2

//asssigning y values

//the whole composition has been designed as per the arrangements in breadboard
init=302; //initial avalue for y co-ordiante

end= 314; //end value for y co-ordinate
for(int i=1; i<60;)

{

init=302;

end=314;

for(int j=0; j<10;)

{

midPanel2[i][j]=init;

midPanel2[i][j+1]=end;

init=init+32;

end=end+32;

j=j+2;

}
i=i+2;

}
//assigning x values

init=30;

end=42;
for(int i=0; i<=58;)

{
for(int j=0; j<=8;)

{

midPanel2[i][j]=init;

midPanel2[i][j+1]=end;

j=j+2;

}

init=init+32;

end=end+32;

i=i+2;

}
//priniting the array for checking the input strategy

/*  for(int i=0; i<60; i++)

{

for(int j=0; j<10; j++)

System.out.printf("%d ", midPanel1[i][j]);

System.out.println();

}

*/
}
private class MouseHandler extends MouseAdapter

{

@Override

public void mouseClicked(MouseEvent event)

{

int x, y;

x=event.getX();

y=event.getY();
//checking upper panel

if(y>30&&y<42)

{

for(int i=0; i<30; i++)

{

if(x>=upperPanel[0][i]&&x<=upperPanel[1][i])

{

JOptionPane.showMessageDialog(new BreadBoard(), String.format("found"));

break;

}
}

}
//checking lower panel
if(y>502&&y<514)

{

for(int i=0; i<30; i++)

{

if(x>=lowerPanel[0][i]&&x<=lowerPanel[1][i])

{

JOptionPane.showMessageDialog(new BreadBoard(), String.format("found"));

break;

}
}

}
//checking mid panel 1 and mid panel 2
for(int i=0; i<60; )

{

for(int j=0; j<10; )

{

if(x>midPanel1[i][j]&&x<midPanel1[i][j+1])

{

if(y>midPanel1[i+1][j]&&y<midPanel1[i+1][j+1])

{

JOptionPane.showMessageDialog(new BreadBoard(), String.format("found"));

break;

}

}
if (x>midPanel2[i][j]&&x<midPanel2[i][j+1])

{

if(y>midPanel2[i+1][j]&&y<midPanel2[i+1][j+1])

{

JOptionPane.showMessageDialog(new BreadBoard(), String.format("found"));

break;

}
}

j=j+2;

}

i=i+2;

}
//checking mid panel2
}

@Override

public void mouseExited(MouseEvent event)

{

statusText.setText("Mouse outside panel");

}
@Override

public void mouseEntered(MouseEvent event)

{

statusText.setText("Mouse inside panel");
}

}
//the original breadboard
private class BreadPanel extends JPanel

{
public BreadPanel()

{

breadBoard=new ImageIcon("E:/JPG’s/breadboard final copy.png");

}
@Override

public void paintComponent(Graphics g)

{

super.paintComponent(g);

breadBoard.paintIcon(this, g, 0, 0);

}

}
}

here the main class is name “class BreadBoard“.  A method named point initiator() initiates all the co-ordinates necessary for recognizing the points in the breadboard image. As the image is 1000X544 pixels in dimensions and every hole is exactly 32 pixels far from each other, I used 4 different arrays to define the four layers of the breadboard.  And I used inner class BreadPanel to load the image of the breadboard. And the rest is done by Mouse Adaptors. So, here’s the code that executes the application.

<pre>import javax.swing.JFrame;

public class BreadBoardExec

{

public static void main(String args[])

{

BreadBoard breadBoard=new BreadBoard();

breadBoard.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

breadBoard.setSize(1020, 600); breadBoard.setVisible(true);

}

}

and here’s the screen shot of this program.


Screenshot

Screenshot of the program

This porgram shows a dialogue box with a string in it named “found” every time user

clicks on  a hole by mouse. A lot more details n works are coming afterward……Promise.

আমার প্রথম প্রজেক্ট – নিজের লেখা প্রথম JAVA Class

প্রথমে ভেবেছিলাম ইংরেজি তেই লিখব। পরে ভাবলাম বাংলা তেই লিখি। আগেই বলেছি আমার প্রথম প্রজেক্ট এর বিবরণ। তো virtually যদি আমাকে একটা breadboard simulate করতে হয় তবে প্রথমে যেটা প্রয়োজন সেটা হলো যুতসই একটা breadboard এর ছবি। সেটা আমাকে photoshop এই বানাতে হলো। তবে ততটা ভালো হয়নি। দায়সারা একটা কাজ চালিয়ে দিয়েছি। আর সাধারণ breadboard থেকে একটু ভিন্ন রকম করেছি কাজের ও এলগরিদমের সুবিধার্থে।

যাই হোক। এটাই আমার ব্যবহৃত breadboard এর ছবি…

ব্রেডবোর্ড

আমার ব্যবহৃত breadboard এর ছবি।

সীমাবদ্ধতা নিয়ে কাজ করতে হয়, হচ্ছে। দ্বিতীয় বর্ষে উঠেই কিছু ঠিকমতো না শিখেই কাজ করতে নামার দু:সাহস যখন দেখিয়েছি তখন এটা করতে আপত্তি কোথায়! যেহেতু  java কে একটা ছবির আলাদা আলাদা অংশসমূহ বোঝাতে image mapping technique ব্যবহার করতে হয়, সেহেতু আমাকেও এখানে তাই করতে হয়েছে। পুরো technique এর বিস্তারিত আমার পরবর্তী পোস্ট এ দিচ্ছি। কেননা যেহেতু এটি technical stuff সেহেতু ইংরেজি তে লেখাটাই সমীচিন। আমি এখনো কোনো IC বা chip ডিজাইন করতে পারিনাই। আশা করি আমি আমার পরবর্তী পোস্ট  কোনো chip বা IC ডিজাইন করে তারপর লিখবো।

ভালো লাগলে অনুগ্রহ করে জানাতে দ্বিথা করবেননা। ভালো না লাগলেো এক ই শর্ত প্রযোজ্য। :)

Post Navigation

Follow

Get every new post delivered to your Inbox.

Join 770 other followers