এসো নিজে করি – এঞ্জিনএক্সের সাথে পিএইচপি এফপিএম ফাস্টসিজিআই মডিউল ইন্টিগ্রেশন

The Storyteller

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

গত পর্বের শেষে আমাদের ডিফল্ট সার্ভার ব্লক ফাইলটি (/etc/nginx/sites-available/default) দেখতে ছিল নিচের মত। আমরা আজকেও এই ফাইলটি নিয়ে কাজ করব।

গত পর্বের শেষে আমাদের ডিফল্ট সার্ভার ব্লক ফাইলটি (/etc/nginx/sites-available/default) দেখতে ছিল নিচের মত। আমরা আজকেও এই ফাইলটি নিয়ে কাজ করব। তবে সার্ভার ব্লক নিয়ে কাজ করার আগে চলুন পিএইচপির ফাস্টসিজিআই মডিউল ইনস্টল করে ফেলি।

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

উপরের কমান্ডটি ফেল করলে আমাদের ম্যানুয়ালী এপিটির সোর্স লিস্ট ফাইল এডিট করতে হবে।

ডেবিয়ান ৭ এর ক্ষেত্রে

ডেবিয়ান ৬ এর ক্ষেত্রে

এবার /etc/apt/sources.list ফাইলটি সেভ করে টার্মিনালে চলে আসুন। এখন যেটা করতে হবে সেটা…

View original post 379 more words

Advertisements

এসো নিজে করি – ডেবিয়ানে এঞ্জিনএক্স ইনস্টলেশন এবং কনফিগারেশন

The Storyteller

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

এঞ্জিনএক্স ইনস্টল করা

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

এবার আমরা নিচের কমান্ড দিয়ে এঞ্জিনএক্স ইনস্টল করব। কমান্ড দেয়ার কিছুক্ষনের মাঝেই দেখতে পাবেন এঞ্জিনএক্স ইনস্টল হয়ে গেছে

ইনস্টল হয়ে গেলে চলুন এঞ্জিনএক্স কে…

View original post 500 more words

থিমফরেস্টে ওয়ার্ডপ্রেস থিম পাবলিশ করার আগে একটা প্রয়োজনীয় চেকলিস্ট

The Storyteller

checklist

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

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

View original post 311 more words

সোর্স থেকে লিনাক্স কার্নেল কম্পাইলেশন ও ইনস্টল

Originally posted on : Rashedul Kabir’s Blog

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

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

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

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

apt-get install kernel-package libncurses5-dev fakeroot
apt-get install build-essential udev

বিস্তারিত পড়ুন

পাই ! রাসবেরি পাই ! ভূমিকা

Originally posted on : Rashedul Kabir’s Blog

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

কেউ যদি আপনাকে বলে একটা কম্পিউটার যেটায় প্রসেসর, র্যাম, ইথারনেট পোর্ট, এইচডিএমআই পোর্ট, অডিও জ্যাক, এসডি কার্ড স্লট, আরসিএ পোর্ট (টিভি/ভিডিও), মাইক্রোইউএসবি স্লট সবই আছে, আর কম্পিউটারটা আপনার হাতের তালুতে এঁটে যাবে তাহলে কি আপনি বিশ্বাস করবেন? বিশ্বাস করুন আর নাই করুন, রাসবেরি পাই দেখলে আপনি অবাক হতে বাধ্য। উপরে যায় বললাম সবকিছু সহ একটা কম্পিউটার, আর সাইজ? ওই যে হাতের তলুর সমান ! দাম ? রাসবেরি পাই এর দাম হাস্যকর রকমের কম (৩৫-৪৫ ডলার) ।

RaspberryPi

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

এরপর? এরপর আর কি ! মিডোরি ব্রাউজার দিয়ে কিছুক্ষন নেট ব্রাউজ করলাম। এমপ্লেয়ার ইনস্টল করে টার্মিনালে গান বাজিয়ে স্পীকার দিয়ে শুনলাম (লাইক অ্যা বস!) । গেম ও খেললাম (স্টুপিড গেম, কাঠবিড়ালি দিয়ে আরেক কাঠবিড়ালি খাওয়া লাগে, কাঠবিড়ালি দিয়ে কাঠবিড়ালি কেন খেতে হবে বুঝি নাই। তবে মজা পাইছি :P)।

rasberry-pi-on-300x225

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

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

Share this:
More

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

The Storyteller

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

০. আমরা ধরে নেই আমরা একটা ছোট দল, যেখানে নদু_ডেভ, যদু_ডেভ এবং গেদু_ডেভ ডেভেলপার হিসেবে কাজ করছে। এই দলের…

View original post 390 more words

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

The Storyteller

Screen Shot 2014-07-02 at 7.01.57 PM

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

View original post 768 more words

কিভাবে জিও-ডিএনএস ব্যবহার করে ওয়েব কনটেন্ট দ্রুত সার্ভ করবেন

The Storyteller

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

View original post 504 more words

অবজেক্টিভ-সি (Objective-C) নাকি সুইফ্ট (Swift), কোনটা শিখবো?

Nuhil Mehdy

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

ভূমিকাঃ
আপনি যদি Apple এর WWDC (Worldwide Developer’s Conference) সম্পর্কে মোটা মুটি অবগত থাকেন অথবা ইনফরমেশন টেকনোলজি সম্পর্কিত  আন্তর্জাতিক খবর গুলো খেয়াল করে থাকেন, তাহলে জেনে থাকবেন যে Apple তাদের WWDC 2014 ইভেন্টে সবচেয়ে চমকপ্রদ যে আবিষ্কারটির ঘোষণা দিয়েছে তা হচ্ছে তাদের তৈরি সম্পূর্ণ নতুন একটি প্রোগ্রামিং ল্যাঙ্গুয়েজের খবর। যার নাম Swift. তারা চায় তাদের ভবিষ্যৎ iOS এবং OSX অ্যাপ্লিকেশন গুলো এই ল্যাঙ্গুয়েজ দিয়েই ডেভেলপ করা হোক যাতে করে এই প্ল্যাটফর্মের অ্যাপ গুলোর পারফরমেন্স আরও ভালো হয়।
এটাকে তারা বলছে, দ্রুতগতি সম্পন্ন, আধুনিক, নিরাপদ ও ইন্টার‌অ্যাক্টিভ একটি ল্যাঙ্গুয়েজ। অন্যান্য ল্যাঙ্গুয়েজের মত অনেক অনেক জনপ্রিয় ফিচার এই ল্যাঙ্গুয়েজে যুক্ত আছে। এর ডিজাইন এমন ভাবে করা হয়েছে যাতে সিনট্যাক্স আরও সহজ হয় এবং iOS ও OSX ডেভেলপমেন্ট শুরু করতে নতুনদের বাধা…

View original post 556 more words

ব্রেইনফাক প্রোগ্রামিং ল্যাঙ্গুয়েজ টিউটোরিয়াল

Originally posted on : Wasi’s github page

ব্রেইনফাক প্রোগ্রামিং ল্যাঙ্গুয়েজ এর সাথে পরিচয় বেশি দিন আগে থেকে নয়। SPOJ এ প্রোগ্রামিং প্র্যাকটিস করতে গিয়ে এই সুন্দর ল্যাঙ্গুয়েজ সম্পর্কে জানতে পারি। এখন আমি এই ল্যাঙ্গুয়েজ সম্পর্কে তোমাদের একটু ধারণা দিতে চাই।
ব্রেইনফাক প্রোগ্রামিং ল্যাঙ্গুয়েজের জন্ম ১৯৯৩ সালে এবং এর আবিষ্কারক হলেন Urban Müller(আরবান মুলার)। এই ল্যাঙ্গুয়েজ এর সবচেয়ে মজার দিক হল এর কম্পাইলার এর সাইজ! ব্রেইনফাক কম্পাইলার এর সাইজ আধা কিলোবাইট এর থেকেও কম!!
আর একটি ব্যাপার হল এই ল্যাঙ্গুয়েজ এ মাত্র আটটি কমান্ড রয়েছে! তাই এটি শেখা খুবই সহজ। যারা C,C++ ইত্যাদি ল্যাঙ্গুয়েজ জানো তাদেরতো মজার শেষ নেই, ব্রেইনফাক ল্যাঙ্গুয়েজটা তোমাদের জন্য একটা pointer নিয়ে খেলা করার মতই বিষয়! এবার চল ব্রেইনফাক ল্যাঙ্গুয়েজ নিয়ে খেলাধুলা শুরু করা যাক।

বেসিক আইডিয়াঃ

ব্রেইনফাক এর কমান্ড গুলো হলঃ

> < [ ] , . + -

ব্রেইনফাক ল্যাঙ্গুয়েজটা আসলে তোমাকে একটা 30000 byte সাইজ এর array দিয়ে থাকে কম্পাইলার অথবা ইন্টারপ্রেটার ভেদে এই সাইজ কম বেশী হতে পারে। কিন্তু, standard ব্রেইনফাক কম্পাইলার ৩০০০০ বাইট সাইজ এর array এর ব্যবস্থা করে থাকে।

উপরে দেওয়া আটটি কমান্ড এর মাধ্যমে তুমি এই array টাকে যেমন ইচ্ছা manipulate করতে পারবে। এই চিহ্নগুলয়র
আসল কেরামতি নিচে দেওয়া হলঃ

>

পয়েন্টার এক ব্লক সামনে নিয়ে যাবে

<

পয়েন্টার এক ব্লক পিছনে নিবে

[

একটা লুপ শুরু করবে যা ততক্ষণ চলবে যতক্ষণ না ঐ ব্লকের মান শুন্য হয়

]

যদি বর্তমান ব্লকের মান শুন্য না হয় তাহলে পুনরায় [ এই স্থানে ফিরে যাও

,

কনসোলের থেকে একটা ইনপুট নাও

.

কনসোলে বর্তমান পয়েন্টার এর সমতুল্য ভেল্যুর ASCII chars প্রিন্ট কর

কিছু কাহিনীঃ

1.ব্রেইনফাক ল্যাঙ্গুয়েজ এর ক্ষেত্রে, শুধু মাত্র এই আটটি কম্যান্ডই প্রযোজ্য। এ ছাড়া বাকি সব কিছুই comment হিসেবে বিবেচনা করা হয়।
2. ব্রেইনফাক এর array এর প্রতিটি ব্লক এর মান শুরুতে 0 থাকে।
3. বিভিন্ন ল্যাঙ্গুয়েজ এর নেস্টেড লুপ কনসেপ্ট ব্রেইনফাক এর ক্ষেত্রে ও একই রকম কাজ এ দেয়। এখানেও চাইলে একাধিক নেস্টেড লুপ ব্যবহার করতে পারবে।

অনেক কাহিনী বললাম। এবার চল একটা প্রোগ্রাম করা যাক!

[-]

তোমার জীবনের প্রথম ব্রেইনফাক প্রোগ্রাম !!
যদিও এইটা তেমন মজার কিছু না জাস্ট একটা লুপ যা শুধু ব্লকের মান কমাতে থাকে যতক্ষণ না মান ০ হয়। কিন্তু, মজার ব্যাপার হল এখানে লুপটি রান ই হবে না! কারণ?
কারণ, আমরা শুরুতেই বলেছি, ব্রেইনফাকের array এর মান শুরুতে শুন্য থাকে তাই লুপ এর কন্ডিশন false
তাহলে চল কন্ডিশন ট্রু করে দেখি কি হয়
আরেকটা প্রোগ্রাম দেখা যাক

+++[-]

দেখ কি সুন্দর! আমরা প্রথম ব্লকের মান ৩ করে দিলাম । এইবার কন্ডিশন ট্রু তাই লুপ এ ঢুকবে , এবং লুপের মাধ্যমে আমরা প্রতি বার এক এক করে বিয়োগ করতে লাগলাম যতক্ষণ না শুন্য হয়
তো এবার বল তো লুপটা কয়বার চলবে?
ঠিক বলেছ! মাত্র তিন বার

হুম, দেখলে কিন্তু মজা পেলে না?
ঠিক আছে আরো মজার উদাহরণ দেখি চল

>+++++++++
[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]
>++++++++[<++++>-] <.>+++++++++++[<++++++++>-]<-.--------.+++
.------.--------.[-]>++++++++[<++++>- ]<+.[-]++++++++++.

ওরে বাপরে! এইসব কি? আসলে দোষের কিছু নাই কোডের স্টাইল দেখে ভয় পাওয়া স্বাভাবিক
একটু খেয়াল কর দেখ ব্যাপারটা কতই সহজ

>+++++++++

এইখানে আমরা জানি > মেমরি পয়েন্টার এক ঘর সামনে নেয় তারপর ভেল্যু যোগ করে আমরা পাই ৯
দেখ

[০][৯]
[<++++++++>-]<.

[ এইটা দেখেই বুঝে গেলা লুপ, কিন্তু লুপ এর কন্ডিশন কি? আমরা কিছুক্ষণ আগেই দেখলাম ওই পয়েন্টার পজিশনের মান নয় (৯) তাই লুপ চলবে ।
< এইটার মাধ্যমে আমরা বুঝে গেলাম পয়েন্টার আবার এক ব্লক পিছনে নেয়া হল
তাহলে আমরা এখন ঠিক প্রথম ব্লকে আসলাম ।
এবং ++++++++ এর সাহায্যে এই ব্লকের মানের সাথে আট (৮) যোগ করলাম
> এইটার সাহায্যে আগের মত পয়েন্টার এক ব্লক সামনে অর্থাৎ আবার ৯ কে পয়েন্ট করলাম।
এবং - তাই ব্লকের মান এক কমালাম তাই এর মান এখন হবে ৮।
অনেকটা এই রকম [৮][৯] ==> [৮][৮]
এইবার ] শুরুতেই বলেছি এইটা বর্তমান মেমরি ব্লকের মান চেক করবে যদি ০ হয় তাহলে পরবর্তী কমান্ডে যাবে না হয় পুনরায় [ এই পজিশনে চলে যাবে এবং আবার একই ভাবে লুপ চলবে।
সুতরাং আবার পয়েন্টার সামনের ব্লককে পয়েন্ট করবে এবং ৮ যোগ করবে। তারপর, আবার ২য় ব্লকে আসবে এবং এক বিয়োগ করবে। এখন যদি আমরা array টাকে দেখি দেখব
[১৬][৭] এই লুপটা শেষ হবে যখন দ্বিতীয় ব্লকের মান শুন্য হয়। শেষে পয়েন্টার ১ম ব্লককে পয়েন্ট করবে। এখন, বল প্রথম ব্লকের মান কত হবে?
হুম, আমরা প্রতি লুপে প্রথম ব্লকের মান ৮ করে বাড়িয়েছি এবং লুপটা ৯ বার চলেছে, সুতরাং মান হবে ৮*৯=৭২
এরপর আছে . এবং আমরা আগেই বলেছি এই কমান্ডের মাধ্যমে বর্তমান ব্লকের মান stdout এ দেখায়, সোজা বাংলায় এই কমান্ডের মাধ্যমে আমরা প্রিন্ট করি। খেয়াল রাখতে হবে যে, আমরা কিন্তু ৭২ আউটপুট পাব না। আমরা দেখব, এর ascii ফরম্যাট। ৭২ হল ‘H’ এর মান তাই আমরা আউটপুটে ‘H’ দেখতে পাব

কি বুঝলা? ভাবছ একটা char প্রিন্ট করতে এত কাহিনী করা লাগে? আরে, এইটাই তো মজা।
এইবার দেখি ঝটপট পুরো প্রোগ্রাম এর আউটপুট কি হবে বলত?
না! এই বার আমি বলব না এটা তুমি বের করবে।

ধৈর্য ধরতে না পারলে এই অনলাইন ইন্টারপ্রেটার এ গিয়ে উপরের কোডব্লকটা কপি করে রান করে দেখতে পারো।

ইনপুট/ আউটপুটঃ

আগেই বলেছি, ব্রেইনফাকে ইনপুট নেয়া হয় ‘,’ এর মাধ্যমে। এখানে আসলে ইনপুট হিসেবে যা ই দেয়া হয় না কেন ব্রেইনফাক এটার ascii মান এর ডেসিমেল মানটি ওই মেমরী পজিশনে সংরক্ষণ করে রাখে। তো আমরা যদি ‘০’ কে ইনপুট হিসেবে দিই তাহলে কিন্তু ওই মেমরী পজিশনের মান ০ হবে না!
আসলে ওই পজিশনের মান হবে ৪৮।

 , . 

এই দুই বাইটের কোডটি একটি ইনপুট নিবে এবং এর সমমানের ascii char প্রিন্ট করবে।

চল আরেকটু মজাদার কোড দেখি,

>,[>,]<[<]>[.>]

দেখ, এটা UNIX cat কমান্ড এর ব্রেইনফাক সংস্করণ!
এটা আসলে STDIN থেকে যা ই ইনপুট নিবে তা ই STDOUT এ আউটপুট দিবে।

চল কোডটার ব্যবচ্ছেদ করি

>,[>,]

হুম কি বুঝলা? আমরা দ্বিতীয় ব্লকে প্রথম ইনপুটটাকে সংরক্ষণ করলাম, প্রথম ব্লকের মান ০ থাকবে কিন্তু কেন এটা করলাম?
ধৈর্য ধর! আগে লুপে ঢুকি , এখানে আমরা প্রতিবার ব্লক পরিবর্তন করে প্রতি মেমরী ব্লক পজিশনে ascii মান এর ডেসিমেল মান সেইভ বা সংরক্ষণ করতে লাগলাম।
তোমরা তো জানই যে, \0 হল null char এর ascii মান হল 0
তাই এই লুপটির শেষ হবে যখন আমরা null char ইনপুট দিব অর্থাৎ আমরা ০ মানের ascii char ইনপুট দিব।
এইবার দেখ ওই যে প্রথম ব্লক খালি রাখার মূল কারণ

<[<]

আমরা ইনপুট নেয়ার সময় শেষ ব্লকে ০ নিয়েছিলাম কিছুক্ষণ আগেই দেখেছ তাই ওইটাকে এড়িয়ে যাওয়ার জন্যই < এইটা ব্যবহার করলাম।
এখন আমরা নতুন একটা লুপ দেখতে পাচ্ছি যেটা আমাদের কে প্রথম মেমরী ব্লকে নিয়ে যাবে!
কারণ, এই ক্ষেত্রে প্রথম ব্লকের শুন্য মানটি এই লুপটিকে শেষ করতে ব্যবহৃত হবে ।

>[.>]

বাকি কোডটা খুবি সহজ, এটা প্রতি ব্লকের মানগুলো আউটপুট হিসেবে দিবে যতক্ষণ না সে null char এ পৌঁছে।

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