Category: bangla

ভ্যাগর‍্যান্ট দিয়ে নিজের ইচ্ছামত ভার্চুয়াল সার্ভার কনফিগার ও ব্যবহার করা

Screen Shot 2014-07-02 at 7.01.57 PM

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

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

১. ভার্চুয়াল বক্স – যেটা আমরা ডাউনলোড করে নিতে পারি https://www.virtualbox.org/wiki/Downloads এখান থেকে
২. ভ্যাগর‍্যান্ট – যা ডাউনলোড করা যাবে http://www.vagrantup.com/downloads.html থেকে
৩. একটা লিনাক্স অপারেটিং সিস্টেম টেমপ্লেট

আপনি http://vagrantbox.es এখানে গেলে অনেক টেমপ্লেট দেখতে পাবেন। নামানোর সময় অবশ্যই খেয়াল রাখবেন ঠিক টেমপ্লেটটি যেন বাছাই করেন। ভার্চুয়ালাইজেশন টুল হিসেবে যেটার পাশে VirtualBox লেখা আছে সেগুলো থেকে নামাবেন। আপনার সুবিধার জন্য আমি প্রচলিত কয়েকটি টেমপ্লেটের ডাউনলোড লিংক দিয়ে দিলাম

  • ডেবিয়ান ৭.২ হুইজি ৬৪ বিট – https://dl.dropboxusercontent.com/u/197673519/debian-7.2.0.box
  • ডেবিয়ান ৭.৩ হুইজি ৩২ বিট – https://dl.dropboxusercontent.com/s/60pv9an852jx9y0/Debian-7.3.0-i386b.box?dl=1
  • উবুন্তু ১৪.০৪ ৬৪ বিট – https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box
  • উবুন্তু ১৪.০৪ ৩২ বিট – https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-i386-vagrant-disk1.box

আমি নিজে ডেবিয়ান ৭.২ এর ৬৪ বিট টেমপ্লেট টি ব্যবহার করি। এই আর্টিকেলেও আমি সেটাই ব্যবহার করে উদাহরণগুলো দেখাবো। তবে পুরো বিষয়টি একই রকম, যেই টেমপ্লেটই ব্যবহার করে থাকেন না কেন 🙂

আপনি যদি প্রথম লিংকটি থেকে ডেবিয়ান ৭.২ টেমপ্লেটটি নামিয়ে থাকেন তাহলে দেখবেন যে debian-7.2.0.box নামে একটা ফাইল সেভ হয়েছে। এটার সাইজ তেমন বেশী না, মাত্র ৩১০ মেগাবাইট। এবার আপনি প্রথমে ভার্চুয়ালবক্স ইনস্টল করুন এবং তারপর ভ্যাগর‍্য্যান্ট ইনস্টল করুন। ইনস্টলেশন টা একদম স্ট্রেইট ফরোয়ার্ড – শুধু নেক্সট নেক্সট ক্লিক করে গেলেই হয়ে যায়। ইনস্টলেশন হয়ে গেলে এবার আমাদের ডাউনলোড করা ডেবিয়ান টেমপ্লেটটি ভ্যাগর‍্যান্টে ইমপোর্ট করতে হবে। এজন্য আপনার টার্মিনাল ওপেন করুন এবং নিচের মত করে কমান্ড দিন

[sourcecode language=”shell”]
vagrant box add wheezy64 debian-7.2.0.box
[/sourcecode]

Screen Shot 2014-07-02 at 6.08.09 PM

এখানে নাম হিসেবে আমি দিয়েছি wheezy64, আপনি আপনার যা ইচ্ছা দিতে পারেন। তবে আমি সাজেস্ট করব প্রাসঙ্গিক নাম দেয়ার। এবার আমরা ভার্চুয়াল সার্ভার তৈরী করব আর সেজন্য কোথাও একটা নতুন ফোল্ডার তৈরী করুন। ধরে নিলাম আপনি ফোল্ডার তৈরি করেছেন যার পাথ হল /path/to/my/folder

এবার আপনার টার্মিনাল ওপেন করে নিচের কমান্ড গুলো দিন

[sourcecode language=”shell”]
cd /path/to/my/folder
vagrant init wheezy64
[/sourcecode]

Screen Shot 2014-07-02 at 6.12.56 PM

এবার নিচের কমান্ড দিন

[sourcecode language=”shell”]
vagrant up
[/sourcecode]

কিছুক্ষনের মাঝেই আপনার ভার্চুয়াল সার্ভার রেডী হয়ে যাবে 🙂

Screen Shot 2014-07-02 at 6.16.24 PM

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

[sourcecode language=”shell”]
vagrant ssh
[/sourcecode]

Screen Shot 2014-07-02 at 6.18.14 PM

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

Screen Shot 2014-07-02 at 6.21.25 PM

উপরের ছবিটা থেকে আমরা দেখতে পারছি যে আমাদের এই সার্ভারে ২৫৬ মেগাবাইট র‍্য্যাম এবং হার্ডডিস্কে ১০ গিগাবাইট স্পেস অ্যালোকেটেড হয়েছে। আপনি এখন এখানে apt-get দিয়ে নিজের ইচ্ছামত প্রয়োজনীয় প্যাকেজ ইনস্টল করে নিতে পারেন। এছাড়াও আমরা চাইলেই এসব রিসোর্স অ্যালোকেশন বাড়াতে পারি। হার্ডডিস্কের স্পেস বাড়ানোর দরকার নাই কারন এটা প্রয়োজনের উপর ভিত্তি করে নিজে থেকে এক্সপ্যান্ড করবে। চলুন আমরা দেখি কিভাবে মেমোরী বাড়াবো এবং কিভাবে আমাদের এই সার্ভারে একটা স্ট্যাটিক আইপি অ্যাড্রেস অ্যাসাইন করবো। এজন্য আগে আমাদের দরকার এই মেশিন থেকে লগআউট করে আমরা যেই ফোল্ডারে ছিলাম সেখানে যাওয়া।

ভ্যাগর‍্য্যান্ট এর যেকোন ভার্চুয়াল এনভায়রনমেন্ট থেকে লগ আউট করতে লিখবেন exit, আর ভার্চুয়াল মেশিন কে স্লিপ মোডে নিতে লগ আউট করার পর লিখবেন vagrant suspend, আর শাটডাউন করাতে চাইলে লগ আউট করার পর লিখবেন vagrant halt ।

আমরা আপাতত লগ আউট করি exit লিখে

Screen Shot 2014-07-02 at 6.28.19 PM

এবার এই ফোল্ডারে আপনি দেখবেন Vagrantfile নামে একটা ফাইল রয়েছে। এই ফাইলটি ওপেন করে “IP” দিয়ে সার্চ করুন, দেখবেন নিচের মত একটা লাইন কমেন্ট করা আছে # দিয়ে। এই লাইনটি আন কমেন্ট করুন # মুছে দিয়ে। উল্লেখ্য যে এখানে আপনার পছন্দ মত যেকোন প্রাইভেট আইপি দিতে পারেন

config.vm.network “private_network”, ip: “192.168.33.10”

ফাইলটি সেভ করে টার্মিনালে কমান্ড দিন vagrant reload এবং পিং করে দেখুন যে মেশিনে আপনার অ্যাসাইন করা আইপি অ্যাড্রেসটি রিজলভ হয়েছে কিনা। আমার মেশিনে আমি আইপি অ্যাড্রেস দিয়েছিলাম ১৯২.১৬৮.৩৩.১১ – বাই দ্য ওয়ে, আপনি আইপি অ্যাড্রেস অ্যাসাইন করার পর আপনার ভার্চুয়াল মেশিনে লগইন করে অ্যাপাচি/এনজিনএক্স সেটআপ করার পরে আপনার ব্রাউজারের অ্যাড্রেস বারে সেই আইপি অ্যাড্রেস দিলেই দেখবেন আপনার ভার্চুয়াল মেশিনের অ্যাপাচি/এনজিনএক্সের ডিফল্ট স্ক্রিন। কত সহজ পুরো বিষয়টিই, তাই না?

Screen Shot 2014-07-02 at 6.34.40 PM

ঠিক একই ভাবে মেমোরী অ্যালোকেশন বাড়াতে চাইলে Vagrantfile এ নিচের লাইন টি খুঁজে বের করুন আর আনকমেন্ট করে ১০২৪ এর জায়গায় নিজের পছন্দ মত ভ্যালু বসিয়ে vagrant reload করুন

vb.customize [“modifyvm”, :id, “–memory”, “1024”]

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

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

[sourcecode language=”shell”]
vagrant destroy
[/sourcecode]

আশাকরি ভ্যাগর‍্যান্ট নিয়ে এই আর্টিকেলটি আপনাদের ভালো লেগেছে। তারপরেও কমেন্টে জানালে খুশি হব। আর কোন প্রশ্ন থাকলে আমাকে টুইটারে জিজ্ঞেস করতে পারেন যেকোন সময়, আমার টুইটার আইডি হল @hasin 🙂

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

সহজ বাংলায় ডিজাইন প্যাটার্ন – সিংগেলটন (Singleton)

singleton

এই সিরিজে এর আগে আমরা আলোচনা করেছি ফ্যাসাড এবং ফ্যাক্টরি প্যাটার্ন নিয়ে, আর আজ আলোচনা করব সিংগেলটন প্যাটার্ন নিয়ে।

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

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

প্রোগ্রামিংয়ের সময় সিংগেলটন প্যাটার্ন অনেকভাবে অ্যাপ্লাই করা যায়, যেমন নিচের কোডে একটি কমন কনটেইনার অবজেক্ট সবাইকে আরেকটি অবজেক্ট সিংগেলটন প্যাটার্নের মাধ্যমে রিটার্ন করছে, বার বার নতুন অবজেক্ট তৈরী না করে। আপনারা এই কোড টি দেখতে পারেন, পিএইচপি তে লেখা https://gist.github.com/hasinhayder/7487898b7d38aefe3179 ।

https://gist.github.com/hasinhayder/7487898b7d38aefe3179

এই কোডে RentACar একটি কনটেইনার অবজেক্ট যে কিনা দুইজন প্যাসেঞ্জার কে একই কার দিচ্ছে (ধরে নেন যে একজন প্যাসেঞ্জার কে নামিয়ে দিয়ে আরেকজন প্যাসেঞ্জার কে একই কার পাঠিয়ে দিয়েছে, হে হে)। কোড রান করালে দেখবেন দুজন প্যাসেঞ্জারই যে গাড়িটি ব্যবহার করেছে তার নাম্বার প্লেট একই 🙂 আমি খুব সহজে বোঝানোর জন্য স্ট্যাটিক অবজেক্ট দিয়ে উদাহরন টি করে দেখালাম আর কি

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

সহজ বাংলায় ডিজাইন প্যাটার্ন – ফ্যাক্টরি (Factory)

steering2

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

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

[sourcecode language=”php”]
$db = new DbManager();
$userTable = $db->getTable("users");
//now $userTable object can interact with ‘users’ table in the db, like $userTable->insert()
[/sourcecode]

এখানে DbManager একটা ফ্যাক্টরি ক্লাস যেটা তার getTable() ফ্যাক্টরি মেথডের সাহায্যে একটা টেবিল অবজেক্ট তৈরী করে রিটার্ন করছে যার মাধ্যমে আপনি ডেটাবেজের টেবিল গুলোর সাথে কাজ করতে পারছেন, কিন্তু আপনাকে জানতে হচ্ছে না যে এই টেবিল অবজেক্ট টা কিভাবে তৈরী হয়েছে । খেয়াল করলে দেখবেন আপনার প্রজেক্টে এরকম অসংখ্য মেথড কল করা আছে যেখানে একটা অবজেক্ট এর মেথড কল করে আরেকটা নতুন অবজেক্ট পাওয়া যায়। এই পুরো ঘটনাটাকেই অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ে বলে ফ্যাক্টরি ডিজাইন প্যাটার্ন 🙂

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

ডেভেলপমেন্টের সময় গিট ব্যবহারের সহজ ওয়ার্ক-ফ্লো

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

০. আমরা ধরে নেই আমরা একটা ছোট দল, যেখানে নদু_ডেভ, যদু_ডেভ এবং গেদু_ডেভ ডেভেলপার হিসেবে কাজ করছে। এই দলের লিড বা কোড মেইনটেইনার হিসেবে কাজ করছে হালুম_লিড।
১. প্রজেক্টে গিট ব্যবহার করা হচ্ছে শুরু থেকেই। গিটে develop এবং master নামে দুটো ব্রাঞ্চ আছে
২. নদু, গেদু এবং যদু প্রজেক্টের develop ব্রাঞ্চ নিয়ে কাজ করছে। তাদের যার যার টাস্ক তারা এই develop ব্রাঞ্চে কমিট (git commit) দিবে এবং পুশ করবে। এছাড়াও তাদের নিজেদের কোড অন্যদের সাথে হালনাগাদ রাখার জন্য তারা সবসময় develop ব্রাঞ্চ থেকে পুল (git pull) নিবে। পুশ (git push) দেয়ার সময়ে তারা খেয়াল রাখবে যেন ব্রোকেন বা ইন-কমপ্লিট কোন কোড পুশ না হয়ে যায়।
৩. এখন মনে করি হালুম_লিড প্রজেক্টের একটা ফিচার নিয়ে নদুকে কাজ করতে দিয়েছে, ফিচার টার নাম “সহজ_ফিচার”। একই সাথে গেদুকে দেয়া হয়েছে অপেক্ষাকৃত ঝামেলার “মাঝারী_ফিচার”। যদুও পেয়েছে “ঝামেলা_ফিচার” তার ভাগে।
৪. যেহেতু অপেক্ষাকৃত সহজ এবং ছোট কাজ, নদু সরাসরি develop ব্রাঞ্চেই কাজ করতে পারে। কাজ শেষে সে কমিট এবং পুশ করবে develop ব্রাঞ্চে।
৫. একটু সময় বেশী লাগবে এবং পরীক্ষা নিরিক্ষা বেশী করা লাগবে দেখে গেদু তার মেশিনে develop ব্রাঞ্চ থেকে নতুন একটা ব্রাঞ্চ করে নিবে – ধরে নেই তার নাম “মাঝারী_ব্রাঞ্চ”। যদুও একই ভাবে কাজ করার সময় সরাসরি develop ব্রাঞ্চে কাজ না করে develop ব্রাঞ্চ থেকে নিজের মেশিনে একটা নতুন ব্রাঞ্চ করে নিবে “ঝামেলা_ব্রাঞ্চ” নামে। এই দুটি ব্রাঞ্চে তারা কমিট দিবে কিন্তু তারা কেউ এই ব্রাঞ্চদুটো পুশ করবে না।
৬. গেদুর কাজ হয়ে গেলে সে develop ব্রাঞ্চের সাথে তার মাঝারী_ব্রাঞ্চ মার্জ (git merge) করে দিবে। এক্ষেত্রে মার্জ করার আগে সে ড্রাই রান করে দেখে নিতে পারে যে কোন কনফ্লিক্ট হতে পারে কিনা। মার্জ করার পরে কনফ্লিক্ট হলে সে কনফ্লিক্ট রিসলভ (conflict resolve) করে আবার develop ব্রাঞ্চ কমিট এবং পুশ দিবে।
৭. যদুও তার কাজ হয়ে গেলে সে তার ঝামেলা_ব্রাঞ্চ একই ভাবে ডেভেলপ ব্রাঞ্চের সাথে মার্জ করে দিবে।
৮. develop ব্রাঞ্চের সাথে সফল ভাবে মার্জ হয়ে গেলে যদু এবং গেদু তাদের লোকাল ব্রাঞ্চ দুটো ডিলেট করে দিবে, কারন সেগুলোর আর প্রয়োজন নেই
৯. হালুম_লিড এখন চেক করবে যে develop ব্রাঞ্চের সব কিছু ঠিক আছে কিনা। যদি ঠিক থাকে তাহলে সে develop ব্রাঞ্চ master ব্রাঞ্চের সাথে মার্জ করে দিবে। এই মাস্টার ব্রাঞ্চে মার্জ কখনোই নদু_ডেভ, গেদু_ডেভ বা যদু_ডেভ করবে না।
১০. প্রোডাকশন সার্ভারে ডেপ্লয় করার সময় এলে হালুম_লিড দেখবে যে master ব্রাঞ্চের সব কোড ঠিকমত টেস্ট (ইউনিট টেস্ট) পাশ করছে কিনা। যদি টেস্ট পাশের হার অ্যাক্সেপ্টেবল হয় তাহলে সে সার্ভারে কোড ডেপ্লয় করে দিবে

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

বাংলা স্ক্রিপ্ট গুলোর রিফ্যাক্টরিং এর কাজ শুরু করলাম – সাহায্য দরকার আপনাদের থেকে

প্রথম স্ক্রিপ্ট টি লিখেছিলাম সেই ২০০৪ সালে, আসকি মোডে বাংলা এক্সপ্রেসে বিজয় ইন্টারফেসে লেখার সুবিধা দিতে। এরপর মেজর রিফ্যাক্টরিং হয়েছিল ২০০৬ সালে সামহোয়্যারইন ব্লগ ইউনিকোড করার সময় (ইউনিজয়) । তারপর এসেছে ফোনেটিক, ২০০৬ সালের জুলাইয়ে।

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

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

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

এখন আমি চাইছি ফিক্স হগুলো একসাথে করতে এবং আপনাদের পরামর্শ অনুযায়ী স্প্রিপ্ট গুলো আপডেট করতে। সেজন্য আপনার যদি আমাকে আপনাদের পরামর্শগুলো জানান আমি চেষ্টা করব সে অনুযায়ী একটা রিলিজ প্ল্যান করতে। তাতে আশাকরি সবার জন্যই স্ক্রিপ্ট গুলো আরো বেশী করে কাজে আসবে (কারন এখন অলমোস্ট ৯০% বাংলা ওয়েব অ্যাপগুলোতে এই স্ক্রিপ্ট গুলো ব্যবহার করা হয়)

আমাকে পরামর্শগুলো জানান [email protected] এই ইমেইলে। কারো যদি সচলায়তন বা আমার ব্লগ বা প্রথম আলোতে অ্যাকা্উন্ট থেকে থাকে অনুগ্রহ করে সেখানে একটা ডুপ্লি পোস্ট করবেন কি?

বাংলা কম্পিউটিং সহজ হোক সবার জন্য – আরো সহজ হোক দিন দিন – এই কামনায়। আমি আশা করব আপনারা যারা প্রোগ্রামিং জানেন (বা জানেন না) এগিয়ে আসবেন ওপেন সোর্স বাংলা কম্পিউটিং কে সমৃদ্ধ করতে, সামর্থ্য অনুযায়ী।

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