লিনাক্স এর ওপর ফ্রি অনলাইন কোর্স

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

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

কোর্সের লিঙ্ক : https://www.edx.org/course/linuxfoundationx/linuxfoundationx-lfs101x-introduction-1621

পাইথন কী?

কম্পিউটারকে দিয়ে কাজ করাতে গেলে কম্পিউটার বুঝতে পারে, এমন ভাষায় তাকে নির্দেশ দিতে হয়। এরকম প্রোগ্রামিং ভাষা অনেক রয়েছে এবং নিত্যনতুন তৈরি হচ্ছে। তবে অল্প কয়েকটি প্রোগ্রামিং ভাষাই প্রোগ্রামারদের কাছে জনপ্রিয় হতে পেরেছে। তেমন একটি প্রোগ্রামিং ভাষা হচ্ছে পাইথন যেটি তৈরি করেন গুইডো ভন রুযাম (Guido van Rossum)। ১৯৮৯ সালের ডিসেম্বর মাসে ক্রিসমাসের ছুটিতে তিনি পাইথন তৈরি করা শুরু করেন। তবে পাইথন সবচেয়ে বেশি জনপ্রিয়তা পায় ২০০০ সালে তার ২.০ সংস্করণ চালু হওয়ার পরে। বর্তমানে পাইথনের ২.৭ এবং ৩.৪ এই দুটি সংস্করণ চালু রয়েছে।

Guido Van Rossum

পাইথন একটি উচ্চস্তরের প্রোগ্রামিং ভাষা। পাইথন স্ট্রাকচার্ড প্রোগ্রামিং এবং অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং করা যায়। এছাড়া ফাংশনাল প্রোগ্রামিংও করা যায় পাইথন দিয়ে। সাম্প্রতিক একটি জরিপে [১] দেখা যায় যে সারা পৃথিবীতে বর্তমানে জনপ্রিয়তার বিচারে পাইথনের স্থান চতুর্থ (শীর্ষ তিনটি হচ্ছে, জাভা, সি, সি প্লাস প্লাস), আর যুক্তরাষ্ট্রের শীর্ষ বিশ্ববিদ্যালয়গুলোর ৬৯% তার শিক্ষার্থীদের প্রোগ্রামিংয়ের সাথে পরিচয় করিয়ে দেয় পাইথন ব্যবহার করে [২]। এছাড়া বিশ্ববিখ্যাত প্রতিষ্ঠান গুগলের তিনটি অফিশিয়াল প্রোগ্রামিং ভাষার একটি হচ্ছে পাইথন।

পাইথনের এত জনপ্রিয় হওয়ার কারণ কী? পাইথন প্রোগ্রামাররা নিচের কারণগুলোকেই প্রধান মনে করেন:‌

  • পাইথন কোড সহজে পড়া যায়
  • কোড সি বা জাভার চেয়ে তুলনামূলক অনেক ছোট হয়
  • পাইথনে রয়েছে লিস্ট, ডিকশনারি ও সেটের মতো চমৎকার ডাটা স্ট্রাকচার
  • পাইথন বিভিন্ন প্ল্যাটফর্মে ব্যবহার করা যায়
  • বিশাল ও কার্যকর স্ট্যান্ডার্ড লাইব্রেরি রয়েছে
  • শক্তিশালী অনলাইন কমিউনিটি
  • চমৎকার ওয়েব ফ্রেমওয়ার্ক (জ্যাঙ্গো, ফ্লাস্ক ইত্যাদি)

মোটামুটি সব লিনাক্স ডিস্ট্রিবিউশন ও ম্যাক অপারেটিং সিস্টেমে পাইথন বিল্ট-ইন থাকে, আলাদাভাবে ইনস্টল করতে হয় না। উইন্ডোজে পাইথন আলাদা করে ইনস্টল করতে হয়, যা পাইথনের অফিয়াল ওয়েবসাইট [৩] থেকে ডাউনলোড করা যায়।

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

পাইথন শেখার জন্য পাইথনের অফিশিয়াল টিউটোরিয়াল রয়েছে [৪]। এছাড়া অনলাইনে রয়েছে বিভিন্ন বই ও অনলাইন কোর্স। তবে বাংলা ভাষায়ও পাইথন শেখার সুযোগ রয়েছে অনলাইনে। একেবারে নতুনদের জন্য আছে ‘হুকুশ পাকুশের প্রোগ্রামিং শিক্ষা’ [৫] যেটি তৈরি করেছেন ইকরাম মাহমুদ। আর ‘পাইথন পরিচিতি’ [৬] নামে ধারাবাহিক ভিডিও লেকচার রয়েছে যা পাইথন শেখার জন্য বেশ কার্যকর। সম্প্রতি দ্বিমিক কম্পিউটিং স্কুল [৭], বাংলাদেশ পাইথন ইউজার গ্রুপ [৮] ও বাংলাদেশ ওপেন সোর্স নেটওয়ার্ক মিলে প্রথমবারের মতো আয়োজন করে ‘পাইকন ঢাকা ২০১৪’ যা পাইথনের উপর বাংলাদেশে প্রথম আন্তর্জাতিক সম্মেলন।

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

লিঙ্কঃ
১) http://goo.gl/DiWrtA
২) http://goo.gl/eDyqM0
৩) http://python.org
৪) http://goo.gl/QTfyY1
৫) http://hukush-pakush.appspot.com
৬) http://pyvideo.subeen.com
৭) http://dimikcomputing.com
৮) http://pycharmers.net

লেখাটি প্রথম আলোতে প্রকাশিত হয় ২৫-০৭-২০১৪ তারিখে।

অনলাইন সংস্করণ: http://www.prothom-alo.com/technology/article/276553

ই-প্রথম আলো: http://epaper.prothom-alo.com/index.php?opt=view&page=28&date=2014-07-25

কম্পিউটারের মেমোরি

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

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

১ম বিট

২য় বিট

0

0

0

1

1

0

1

1

তাহলে দুটি বিট পাশাপাশি রাখলে চারটি আলাদা জিনিস রাখা যায়, 00, 01, 10 11। এবারে তোমার জন্য কাজ। খাতাকলম নিয়ে বসে পরো এবং তিনটি ও চারটি বিটের ক্ষেত্রে কতটি করে আলাদা জিনিস রাখা সম্ভব সেটি বের করো। উত্তর হবে যথাক্রমে 8 16। তাহলে দাঁড়াচ্ছে 2, 3 4টি করে বিটের ক্ষেত্রে যথাক্রমে 4, 8 16টি পৃথক জিনিস রাখা যায়। তাহলে তোমাদের যেহেতু বুদ্ধিশুদ্ধি বেশি, তোমরা সহজেই বলে দিতে পারবে, 5টি বিটের জন্য 32, 6টি বিটের জন্য 64, 7টি বিটের জন্য 128টি পৃথক জিনিস রাখা সম্ভব। তাহলে 8টি বিটের জন্য কত? উত্তর হবে 256। আর যাদের সামান্য একটু গাণিতিক বুদ্ধি আছে, তারা কিন্তু এতক্ষণে মনে মনে একটি সূত্র বের করে ফেলেছো। nটি বিট থাকলে 2n টি পৃথক জিনিস রাখা সম্ভব।

বাইট শব্দটি নিশ্চয়ই তোমরা শুনেছ? ইংরেজিতে byte। তবে এই শব্দের মানে কিন্তু কামড় নয়, সেটির ইংরেজি bite। আটটি বিট পাশাপাশি রেখে তৈরি হয় একটি বাইট। তাহলে এক বাইটে কতটি আলাদা জিনিস রাখা যায়? আমি জানি তোমরা চট্ করে বলে দিতে পারবে, 256টি।

তোমরা সবাই ক্যারেক্টার টাইপের (char) ভেরিয়েবলের সাথে পরিচিত। তাহলে এখন তোমরা নিশ্চয়ই বুঝতে পারছ যে একটি ক্যারেক্টার টাইপের ভেরিয়েবলে 256টি আলাদা জিনিস রাখা সম্ভব। এজন্যই আমরা বিভিন্ন অক্ষর, সংখ্যা, চিহ্ন এগুলোকে ক্যারেক্টার টাইপের ভেরিয়েবলের মধ্যে রাখি। প্রতিটি অক্ষরের একটি মান রয়েছে যাকে সংখ্যা দিয়ে প্রকাশ করা যায়। যেমন a-এর মান 97, b-এর মান 98, c-এর মান 99, এভাবে z-এর মান 122। আবার A-এর মান 65, B-এর মান 66, C-এর মান 67, এভাবে Z-এর মান 90, 0 থেকে 9 পর্যন্ত চিহ্নগুলোর মান যথাক্রমে 48 থেকে 57। এই মানগুলোকে বলে ASCII মান। ASCII হচ্ছে American Standard Code for Information Interchange-এর সংক্ষিপ্তরূপ। ইংরেজি সমস্ত অক্ষর, চিহ্ন সবগুলোরই ASCII মান রয়েছে। এখন তোমার মনে প্রশ্ন জাগতে পারে, পৃথিবীর বাকী ভাষাগুলো কী দোষ করল? তাদের সব অক্ষরের জন্য ASCII মান নেই কেন? আসলে 8 বিটে আমরা তো মোটে 256টি জিনিস রাখতে পারি, তাই সবার জায়গা দেওয়া সম্ভব হয় নি। অন্য সব ভাষার জন্য রয়েছে Unicode

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

আমাদের প্রথম প্রোগ্রামঃ

#include <stdio.h>

int main()

{

    int i;

    for (i = 33; i <= 126; i++) {

        printf(“ASCII code for %c is %dn”, i, i);

    }

    return 0;

}

আমাদের দ্বিতীয় প্রোগ্রামঃ

#include <stdio.h>

int main()

{

    char small_letter, capital_letter;

    printf(“Please enter a small letter: “);

    small_letter = getchar();

    capital_letter = small_letter – 32;

    printf(“The capital letter is: %cn”, capital_letter);

    return 0;

}

এখন তোমার কাজ হবে একটি ফাংশন লেখা, যেটি প্যারামিটার হিসেবে একটি ক্যারেক্টার টাইপের ভেরিয়েবল নিবে এবং সেটি যদি কোনো অঙ্ক (digit) হয়ে, তবে 1রিটার্ণ করবে, আর না হলে 0 রিটার্ণ করবে। কাজ শেষ হলে চলো, আমরা মেমোরি নিয়ে আলাপআলোচনায় ফেরত যাই।

ইন্টিজার টাইপের ভেরিয়েবলের আকার হচ্ছে চার বাইট, মানে 32 বিট। এই 32 বিটে আমরা 232টি বা 4294967296টি সংখ্যা রাখতে পারি। এখন আমরা যদি কেবল ধনাত্মক সংখ্যা রাখতে চাই, তাহলে 0 থেকে 4294967295 পর্যন্ত রাখা যাবে। এ ধরণের ভেরিয়েবলকে বলে unsigned ভেরিয়েবল। আর যেসব ভেরিয়েবলে ধনাত্মক ও ঋনাত্মক – উভয় প্রকারের সংখ্যা রাখা যায়, তাকে বলে signed ভেরিয়েবল, তবে এক্ষেত্রে আলাদাভাবে সেটির উল্লেখ থাকে না। তাহলে আমরা বুঝতে পারলাম কেনো int টাইপের ভেরিয়েবলে -2147483648 থেকে 2147483647 পর্যন্ত সংখ্যা রাখা যায় আর কেনো unsigned int টাইপের ভেরিয়েবলে 0 থেকে 4294967295 পর্যন্ত সংখ্যা রাখা যায়।

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

100

101

102

103

104

105

106

107

108

109

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

এবারে নিচের প্রোগ্রামটা ঝটপট টাইপ করে রান করো। কম্পাইল করার সময় ওয়ার্নিং দেখাবে, সেটিকে এড়িয়ে যাবে এবং প্রোগ্রামটি রান করবে।

#include <stdio.h>

int main()

{

    char ch1 = ‘A’, ch2 = ‘B’;

    int n1 = 100, n2 = 100000;

    unsigned int address1 = &ch1;

    unsigned int address2 = &ch2;

    unsigned int address3 = &n1;

    unsigned int address4 = &n2;

    printf(“%c, %un”, ch1, address1);

    printf(“%c, %un”, ch2, address2);

    printf(“%d, %un”, n1, address3);

    printf(“%d, %un”, n2, address4);

    return 0;

}

আউটপুট কী? একেক জনের আউটপুট একেক রকম হবে, কারণ মেমোরির কোন জায়গায় কোন ভেরিয়েবল থাকবে, তার কোনো ঠিক নেই। এখন তোমরা লক্ষ করো, কোনো ভেরিয়েবল যদি n হয়, তবে তার এড্রেস হচ্ছে &n। একারণের আমরা scanf ফাংশন ব্যবহার করে কোনো ভেরিয়েবল ইনপুট নেওয়ার জন্য ভেরিয়েবলের নামের আগে & চিহ্ন ব্যবহার করি। কিন্তু অ্যারের বেলাতে সেটি করতে হয় না, কারণ অ্যারের নামটিতেই অ্যারের শুরুর এড্রেসটি থাকে। অর্থাৎ কোনো অ্যারে যদি হয় int ara[10], সেখানে ara-এর মান প্রিন্ট করলেই অ্যারের এড্রেস পাওয়া যায়।

এখন তুমি নিচের প্রোগ্রামটিও আগের মতো রান করবে (ওয়ার্নিং দেখালে পাত্তা দেওয়ার দরকার নেই)

#include <stdio.h>

int main()

{

    int ara[5] = {50, 60, 70, 80, 90};

    printf(“%d, %d, %d, %d, %dn”, ara[0], ara[1], ara[2], ara[3], ara[4]);

    printf(“%un”, ara);

    printf(“%un”, &ara[0]);

    printf(“%un”, &ara[1]);

    return 0;

}

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

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

#include <stdio.h>

int main()

{

    int num;

    char ch;

    double d_num;

    float f_num;

    printf(“%lun”, sizeof(int));

    printf(“Size of int: %dn”, sizeof(num));

    printf(“Size of char: %dn”, sizeof(ch));

    printf(“Size of double: %dn”, sizeof(d_num));

    printf(“Size of float: %dn”, sizeof(f_num));

    return 0;

}

এখন চলো জেনে নিই, কম্পিউটারে কয় ধরনের মেমোরি আছে।

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

কম্পিউটারের প্রসেসরের মধ্যেও কিন্তু মেমোরি আছে, প্রসেসরের সবচেয়ে কাছে থাকে রেজিস্টার, আর তার পরেই থাকে ক্যাশ মেমোরি। সি ল্যাঙ্গুয়েজে আমরা চাইলে কোনো ভেরিয়েবলকে রেজিস্টারে রাখার জন্য এভাবে ডিক্লেয়ার করতে পারি: register int number;। সেসব ভেরিয়েবলকেই আমরা রেজিস্টারে রাখার চেষ্টা করবো যেগুলো প্রোগ্রামের ভেতরে সবচেয়ে বেশি ব্যবহার করা হয়। তবে আজকাল রেজিস্টারে এভাবে না রাখলেও চলে, কম্পাইলারগুলো নিজেরাই বুঝে নেয় কোন ভেরিয়েবল কোথায় রাখতে হবে। রেজিস্টারের চেয়ে ক্যাশ মেমোরির আকার বড়, মানে বেশি তথ্য ধারণ করতে পারে, তবে গতি একটু কম। তারপরে আসে RAMRAM প্রসেসরের বাইরে মাদারবোর্ডে সংযুক্ত থাকে। ক্যাশের তুলনায় RAM-এর আকার বেশ বড়, তবে গতিও কম। এখন তোমরা প্রশ্ন করতে পারো, রেজিস্টার আর ক্যাশের আকার আরো বেশি হলে কী সমস্যা ছিল? শুধু শুধু RAM-এর ব্যবহার কেন করছি? আসলে রেজিস্টার মেমোরি তৈরিতে খরচ সবচেয়ে বেশি, তারপরে ক্যাশ মেমোরি। RAM তাদের তুলনায় বেশ সস্তা। RAM-এর পরে আসে ভার্চুয়াল মেমোরি। RAM-এ যখন জায়গা হয় না, তখন হার্ডডিস্কের একটা অংশকে কম্পিউটারের অপারেটিং সিস্টেম মেমোরি হিসেবে ব্যবহার করতে দেয় প্রোগ্রামগুলোকে। সেটা অবশ্যই RAM-এর তুলনায় ধীর গতির। নিচের ছবিটির দিকে একবার চোখ বুলিয়ে নাওঃ

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

 

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

উদ্যোক্তা বিষয়ক সাক্ষাৎকার – সুবিন

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

দীপঃ প্রথমে আপনি এবং আপনার প্রতিষ্ঠান সম্পর্কে কিছু বলুন?
সুবিনঃ আমি তামিম শাহ্‍‍রিয়ার। তবে পরিচিতজনেরা আমাকে সুবিন (ডাকনাম) নামেই ডাকে। পেশায় সফটওয়্যার প্রকৌশলী। আমি শাহজালাল বিজ্ঞান ও প্রযুক্তি বিশ্ববিদ্যালয়ের কম্পিউটার সায়েন্স ও ইঞ্জিনিয়ারিং বিভাগ থেকে স্নাতক সম্পন্ন করি ২০০৬ সালে। বর্তমানে আমি কাজ করছি আমার নিজের প্রতিষ্ঠান মুক্ত সফটওয়্যার লিমিটেড-এ। মুক্ত সফটওয়্যার প্রতিষ্ঠিত হয় ২০০৯ সালে। আমার সাথে সহপ্রতিষ্ঠাতা ছিলেন মোহাম্মাদ মাহমুদুর রহমান যিনি বর্তমানে মুক্ত সফটের চেয়্যারম্যান ও প্রধান কারিগরি কর্মকর্তার দায়িত্ব পালন করছেন।

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

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

দীপঃ শুরুটা কেমন? মূলধন কি রকম এবং কতজন পেশাদার নিয়ে শুরু হয়েছিলো “মুক্ত সফটওয়্যার”?
সুবিনঃ তখন রেন্টএকোডার ডট কম (rentacoder.com) নামের একটি সাইটে আমি মাঝে মাঝে কাজ করতাম। সেখানে আমার রেটিং বেশ ভালো ছিল। সেটাকেই মূলত আমাদের ব্যবসার মূলধন হিসেবে ধরতে পারেন। আর টাকা বিনিয়োগ করতে হয়েছে ছয়-সাত লাখের মতো। সেই টাকা এসেছিল আমাদের নিজেদের জমানো টাকা থেকে। এ ছাড়া আমি ব্যাংক থেকে পার্সোনাল লোন নিয়েছিলাম। শুরুর সময় আমি যেহেতু চাকরি করতাম, মাহমুদ-ই কোম্পানী দেখাশোনা করত। ২০১০ এর জুন মাসে আমি চাকরি ছেড়ে পুরোপুরি নিজের প্রতিষ্ঠানে চলে আসি। ২০০৯ সাথে আমাদের কোম্পানিতে ফুলটাইম পেশাদার ছিল ৩ জন, আর ২০১২ সালে সেটি এসে দাঁড়ায় ১২ জনে।

দীপ: লোন পেতে কোনো সমস্যা হয় নি?
সুবিন: না, কারণ তখন আমি ভালো বেতনের চাকরি করতাম। তাই ব্যাংক খুশিমনেই আমাকে লোন দিয়েছে। তবে এখন মনে হয় দিবে না।

দীপঃ আপনার প্রতিষ্ঠান থেকে কি ধরনের সার্ভিস দেয়া হয়ে থাকে বা কি ধরনের প্রজেক্ট আপনারা নিয়ে থাকেন?
সুবিনঃ আমরা মূলত কাস্টমাইজড সফটওয়্যার তৈরি করি। আমাদের কাজের প্লাটফর্মে বেশ বৈচিত্র আছে। আমরা রিচ ইন্টারনেট অ্যাপ্লিকেশন (RIA – Rich Internet Application), সোশ্যাল মিডিয়া ভিত্তিক অ্যাপ্লিকেশন এবং মোবাইল অ্যাপ্লিকেশন ও গেমস (আইফোন, অ্যান্ড্রয়েড, ব্লাকবেরি ও জাভা এম ই) তৈরি করি। তবে সম্প্রতি আমরা ইআরপি (ERP – Enterprise Resource Planner) সফটওয়্যার তৈরি করছি এবং সেই সাথে বিগ ডাটা ও মেশিন লার্নিং নিয়ে কাজ করছি।

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

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

দীপঃ প্রতিষ্ঠান ব্যবস্থাপনার জন্য আলাদা কোন ব্যবস্থাপনা টিম/বিভাগ কি রয়েছে?
সুবিনঃ ব্যবস্থাপনার কাজ আমি আর মাহমুদ মিলেই করি। ভবিষ্যতে আলাদা ব্যবস্থাপনা বিভাগ খোলার পরিকল্পনা আছে।

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

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

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

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

দীপঃ আইটি উদ্যোক্তা হতে কি কি প্রয়োজন?
সুবিনঃ

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

——-আইটি উদ্যোক্তা হওয়ার জন্য তামিম শাহরিয়ারের কিছু টিপস——–

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

কম্পিউটার জগত  দেশের শীর্ষস্থানীয় বাংলা কম্পিউটার ম্যাগাজিন। তারা ২০১৩ সাল থেকে দেশের তরুণ আইটি উদ্যোক্তাদের উপর একটি নিয়মিত ফিচার শুরু করে। সেই ফিচার সিরিজের জন্য প্রথম ইন্টারভিউ নিয়েছিলেন মৃণাল কান্তি রয় (দীপ)। সেটি ২০১৩ সালের জানুয়ারি মাসের সংখ্যায় প্রকাশিত হয়: http://www.comjagat.com/home/articles/morearticles/6654। 

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

উবুন্টুতে ফ্লাস্ক ইনস্টল করার প্রক্রিয়া

সাধারণ ছোটোখাটো প্রজেক্ট থেকে মাঝারি সাইজের প্রজেক্টের জন্য ফ্লাস্ক (Flask) একটি চমৎকার পাইথন ফ্রেমওয়ার্ক। আমি রেস্টফুল এপিআই তৈরির জন্য ফ্লাস্ক রেস্টফুল (Flask-RESTful) ব্যবহার করি। ডেভেলাপমেন্টের জন্য আমি ম্যাক ও উবুন্টু (Ubuntu) দুটোই ব্যবহার করি, আর সার্ভারে উবুন্টু। এখানে আমি উবুন্টুতে ফ্লাস্ক প্রজেক্ট ডেপ্লয় করার জন্য যা যা দরকার, সেগুলো লিখে রাখবো, যাতে পরবর্তি সময়ে আমার কিংবা অন্যদের সুবিধা হয়। কমান্ডগুলো উবুন্টু ১৪.০৪ ব্যবহার করে পরীক্ষা করা হয়েছে।

প্রথমে চেক করতে হবে কম্পিউটারে উবুন্টুর সব প্যাকেজ হালনাগাদ করা হয়েছে কী না। না হলে আপডেট করে নিতে হবে। এর জন্য সহজ কমান্ড হচ্ছে :
sudo apt-get update && sudo apt-get upgrade

এখন পাইথন ও পিপ (pip) ইনস্টল করবো :

sudo apt-get install build-essential python-dev python-pip

তারপরের কাজ হচ্ছে ভার্চুয়াল এনভারনমেন্ট ইনস্টল করা।
sudo pip install virtualenv

এটি দরকারি এজন্য যে একেক প্রজেক্ট একেক সময়ে করা হয়, তাই সেই প্রজেক্টের জন্য দরকার মডিউল আলাদা করে ফেলা উচিত, যাতে পরবর্তি সময়ে অন্য প্রজেক্টে কাজ করার সময় কনফ্লিক্ট তৈরি না হয়।

এখন যেই ডিরেক্টরিতে অ্যাপ্লিকেশনটি রাখা হবে, সেটি তৈরি করে ফেলা যাক :

sudo mkdir -p /var/www/myapp

এখন পারমিশন পরিবর্তন করতে হবে। আমার ক্ষেত্রে ইউজার আইডি হচ্ছে www-data, ইউজার গ্রুপও হচ্ছে www-data। আপনার ক্ষেত্রে সেটি অন্যরকম হতে পারে। লক্ষ্য রাখতে হবে যে অনেক সময় ফাইল পরিবর্তন করলে সেটি রুট বা অন্য ইউজার-এর হয়ে যায়, তাই পরীক্ষা করতে হবে যে myapp ডিরেক্টরির সব ফাইল এবং সাব-ডিরেক্টরির পারমিশন ঠিক আছে কী না।
sudo chown -R www-data:www-data /var/www/myapp
cd /var/www/myapp

এখন ভার্চুয়াল এনভারমেন্ট তৈরি করি।
virtualenv venv --no-site-packages

ভার্চুয়াল এনভারমেন্ট একটিভেট করে সেখানে ফ্লাস্ক ইনস্টল করি।
source venv/bin/activate
pip install flask

এখানে আমরা আমাদের ফ্লাস্ক অ্যাপটি রাখবো।

লক্ষ্য রাখতে হবে যে হোস্ট সেট করতে হবে 0.0.0.0 তে (127.0.0.1-এ নয়)। আর অ্যাপ্লিকেশনের শুরুটা রাখতে হবে if __name__ == ‘__main__’: ব্লকের ভিতরে।

এরপরের কাজ হচ্ছে ওয়েব সার্ভার ইনস্টল করা (যদি ইনস্টল করা না থাকে)। আমি সাধারণত ইঞ্জিন-এক্স ব্যবহার করি। আর ইনস্টল করার আগে ভার্চুয়াল এনভারমেন্ট ডিএকটিভেট করে নিতে হবে এই কমান্ড দিয়ে :
deactivate
sudo apt-get install nginx

এখন আমি uwsgi ইনস্টল করবো, এটি ইঞ্জিনএক্স ও আমার ফ্লাস্ক অ্যাপ্লিকেশনের মধ্যে একটি যোগসূত্র তৈরি করে দিবে, মানে এটিই আমার ফ্লাস্ক অ্যাপ্লিকেশনকে চালাবে। এর ব্যবহার বাধ্যতামূলক নয়, তবে ব্যবহার করলে ভালো। 🙂

sudo apt-get install uwsgi uwsgi-plugin-python

এখন একটা সকেট ফাইল তৈরি করা লাগবে যার মাধ্যমে ইঞ্জিনএক্স, uwsgi-এর সাথে যোগাযোগ করবে।
cd /tmp/
touch mapp.sock

ফাইলের পারমিশন পরিবর্তন করতে হবে যাতে ইঞ্জিনএক্স সেটি চালাতে পারে।
sudo chown www-data:www-data myapp.sock

এরপর ইঞ্জিনএক্সের কনফিগারেশন ফাইল তৈরি করতে হবে। এর জন্য প্রথমে /etc/nginx/sites-available ডিরেক্টরিতে যেতে হবে নিচের কমান্ড দিয়ে :
cd /etc/nginx/sites-available

তারপরে ডিফল্ট যেই কনফিগারেশন ফাইল আছে, সেটি মুছে ফেলতে হবে বা সরিয়ে রাখতে হবে।
sudo mv default _default

এবারে নতুন কনফিগারেশন ফাইল তৈরির জন্য আমরা নিচের কমান্ড ব্যবহার করতে পারি :
sudo vi myapp
এটি vi এডিটর দিয়ে খুলবে, চাইলে অন্য এডিটরও ব্যবহার করা যায়।

এখন নতুন ফাইলে নিচের জিনিসগুলো পেস্ট করতে হবে :

server {
    listen 80;
    server_tokens off;
    server_name myapp.com;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/tmp/myapp.sock;
    }

    location /static {
        alias /var/www/myapp/static;
    }
}

এখানে লক্ষ্যণীয় যে static ফাইলগুলো রাখার জন্য /var/www/myapp/static ডিরেক্টরি ব্যবহার করা হয়েছে। আপনি আপনার প্রয়োজনমতো ডিরেক্টরি তৈরি করে সেই লোকেশন এখানে লিখবেন।

যেই কনফিগারেশন ফাইলটি তৈরি করলাম, তার একটি লিঙ্ক তৈরি করতে হবে /etc/nginx/sites-enabled ডিরেক্টরিতে। এর জন্য নিচের কমান্ড দিতে হবে :
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/myapp

এবারে uwsgi এর জন্যও একটি কনফিগারেশন ফাইল তৈরি করা লাগবে, লোকোশনসহ ফাইলটি হচ্ছে /etc/uwsgi/apps-available/myapp.ini

ফাইলে নিচের জিনিসগুলো লিখতে হবে:

[uwsgi]
vhost = true
socket = /tmp/myapp.sock
venv = /var/www/myapp/venv
chdir = /var/www/myapp
module = api
callable = app

মডিউল হচ্ছে পাইথন স্ক্রিপ্ট যেই ফাইলে আছে তার নাম আর কলেবল হচ্ছে ওই স্ক্রিপ্টে যেই ফ্লাস্ক অবজেক্ট তৈরি করা হয়েছে। উদাহরণস্বরূপ নিচের স্ক্রিপ্টটি আমরা দেখি:

from flask import flask
app = Flask(__name__)

@my_app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run(host='0.0.0.0')

এটি যদি api.py নামের ফাইলে সেভ করা হয়, তাহলে কনফিগারেশন ফাইলে module = api এবং callable = app লিখতে হবে।

তারপর নিচের কমান্ড দিয়ে লিঙ্ক করতে হবে:
sudo ln -s /etc/uwsgi/apps-available/myapp.ini /etc/uwsgi/apps-enabled/myapp.ini

সবশেষে nginx ও uwsgi আবার চালু করতে হবে।
sudo service nginx restart
sudo service uwsgi restart

সবকিছু ঠিকঠাক হয়ে থাকলে ফ্লাস্ক অ্যাপ্লিকেশনটি এখন কাজ করবে।