পাইথন(Python) ইনপুট, আউটপুট এবং ইম্পোর্ট

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

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

স্টান্ডার্ড ইনপুট এবং আউটপুটের জন্য যথাক্রমে input() এবং  print() ফাংশন ব্যবহৃত হয়। চলুন প্রথমেই আমরা আউটপুট সেকশনটি দেখে নেই।

 

print() ফাংশনের মাধ্যমে পাইথন আউটপুট

স্টান্ডার্ড আউটপুট ডিভাইসে(যেমন-স্ক্রিনে) আউটপুট নেওয়ার জন্য আমরা print() ফাংশন ব্যবহার করি।

এছাড়া আমরা ডাটা ফাইলেও আউটপুট নিতে পারি। পরিবর্তি অধ্যায়ে এটি সম্মন্ধে বিস্তারিত আলোচনা করা হবে।

উদাহরণস্বরূপঃ

print('This sentence will be displayed on the screen')
# Output: This sentence will be displayed on the screen

num= 10

print('The value of num is', num)
# Output: The value of num is 10

দ্বিতীয় print() স্টেটমেন্টে লক্ষ্য করলে দেখবেন স্ট্রিং(string) এবং ভ্যারিয়েবল num এর মধ্যে একটি স্পেস দেওয়া আছে এবং এটি ডিফল্টভাবে ব্যবহৃত হয়, কিন্তু আমরা ইচ্ছা করলে এটি পরিবর্তন করতে পারি।

print()  ফাংশনের প্রকৃত সিনট্যাক্স (syntax ) নিম্নরূপঃ


print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

 

সিনট্যাক্স এর ব্যাখ্যা

  • এখানে objects হচ্ছে ভ্যালু যা প্রিন্ট করতে হবে।
  •   sep সেপারেটর দুটি ভ্যালুর মধ্যে ব্যবহৃত হয়। এটার ডিফল্ট ভ্যালু হচ্ছে স্পেস ক্যারেক্টার।
  • সকল ভ্যালু প্রিন্ট হওয়ার পরে end  প্রিন্ট হয় যার ডিফল্ট ভ্যালু হলো নতুন লাইন(new line)।
  • file হলো অবজেক্ট যেখানে /যাতে ভ্যালু প্রিন্ট হয় এবং এটার ডিফল্ট ভ্যালু হলো sys.stdout(স্ক্রিন)। নিচের উদাহরণের সাহায্যে ব্যাখ্যা দেওয়া হলোঃ

print(1,2,3,4,5)
# Output: 1 2 3 4

print(1,2,3,4,sep='&')
# Output: 1&2&3&4&5

print(1,2,3,4,5,sep='#',end='&')
# Output: 1*2*3*4&

আউটপুট ফরম্যাটিং(Output formatting)

আউটপুটকে অধিক আকর্ষনীয় করে তোলার জন্য মাঝে মাঝে আমাদের আউটপুট বিন্যাস/ফরম্যাটিং এর প্রয়োজন হতে পারে। str.format() মেথড ব্যবহার করে এটি সম্পন্ন করা যায়। যেকোনো স্ট্রিং অবজেক্টে এই মেথডটি প্রয়োগ করা যায়।


>>> x = 3; y = 5
>>> print('The value of x is {} and y is {}'.format(x,y))
#Output: The value of x is 3 and y is 5

এখানে কারলি ব্রাকেট{} স্থানধারক(placeholder) হিসাবে ব্যবহৃত হয়েছে। আমরা নাম্বার(টাপল ইনডেক্স) ব্যবহার করে এগুলোর অর্ডার ঠিক করে দিতে পারি।

</pre>
print('We love {0} and {1}'.format('SATT','founder of SATT'))
# Output: We love SATT and founder of SATT

print('We love {1} and {0}'.format('SATT','founder of SATT'))
# Output: We love founder of SATT and SATT
<pre>

স্ট্রিং ফরম্যাটের জন্য আমরা আর্গুমেন্টও ব্যবহার করতে পারি।

উদাহরণস্বরূপঃ


>>> print('Hello {name}, {asking}'.format(asking = 'How are you?', name = 'Tamjid'))
#Output: Hello Tamjid How are you?

সি প্রোগ্রামিং ভাষায় ব্যবহৃত পুরাতন স্টাইল   sprintf() ফাংশন ব্যবহার করেও আমরা স্ট্রিং ফরম্যাট করতে পারি।

উদাহরণস্বরূপঃ


>>> num = 10.35623906
>>> print('The value of num is %3.2f' %x)
#Output: The value of num is 10.36
>>> print('The value of num is %3.4f' %x)
#Output: The value of num is 10.3562


<h2>পাইথন ইনপুট(Python Input)</h2>
এতক্ষণ পর্যন্ত আমাদের প্রোগ্রাম ছিল স্ট্যাটিক(static)। অর্থাৎ ভ্যারিয়েবল এর ভ্যালু সোর্স কোডে ডিফাইন্ড(Defined) করা ছিল অথবা আমরা বলতে পরে এটি ছিল হার্ড কোডেড(Hard coded)।

প্রোগ্রামকে সহজ এবং ডাইনামিক করে তোলার জন্য আমাদেরকে অবশ্যই ইউজারদের কাছ থেকে ইনপুট নিতে হবে। পাইথনে এই কাজটি সম্পন্ন করতে <strong>input()</strong> ফাংশন ব্যবহৃত হয়। <strong>input()</strong>ফাংশনের সিনট্যাক্স নিম্নরূপঃ



input([prompt])

যেখানে prompt হচ্ছে স্ট্রিং যা স্ক্রিনে প্রদর্শিত হয় এবং যার মাধ্যমে ইউজারকে নির্দেশনা দেওয়া হয়। এটি ঐচ্ছিক(optional)।

উদাহরণস্বরূপঃ


>>> num = input('Enter a number: ')
Enter a number: 10
>>> num
#Output: '10'

এখানে আমরা 10 যে ভ্যালুটি দেখছি তা নাম্বার নয় বরং স্ট্রিং। এটাকে নাম্বারে রূপান্তর(convert) করার জন্য আমরা int() অথবা float() ফাংশন ব্যবহার করতে পারি।


>>> int('10')
#Output: 10
>>> float('10')
#Output: 10.0

একই কাজ আমরা eval() ফাংশনের মাধ্যমেও সম্পন্ন করতে পারি। বরং এটার সুযোগ-সুবিধা আরও বেশী। যদি ইনপুট ভ্যালু স্ট্রিং হয় তাহলে এটি এক্সপ্রেশন(expression) কেও নির্ণয়(evaluate) করতে পারে।


>>> int('3+7')
Traceback (most recent call last):
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '3+7'
>>> eval('3+7')
#Output: 10

পাইথন ইম্পোর্ট(Python Import)

যখন আমাদের প্রোগ্রাম অনেক বড় হতে থাকে তখন সবচেয়ে ভালো বুদ্ধি হলো প্রোগ্রামের বিভিন্ন অংশকে বিভিন্ন মডিউল(module)-এ বিভক্ত করা।

মডিউল হচ্ছে পাইথন এর বিভন্ন সংজ্ঞা এং স্টেটমেন্ট সম্বলিত একটি ফাইল। পাইথন মডিউলের একটি ফাইল নাম থাকে এবং এটি .py এক্সটেনশন এর মাধ্যমে শেষ হয়।

পাইথনে এক মডিউলে থাকা সংজ্ঞা(কোড) অন্য মডিউলে ইম্পোর্ট করা যায়। এটি করার জন্য আমরা import কীওয়ার্ড ব্যবহার করি।

উদাহরণস্বরূপ, import math এর মাধ্যমে আমারা math মডিউলকে ইম্পোর্ট করতে পারি।


import math
print(math.pi)

এখন math মডিউলে থাকা সমস্ত সংজ্ঞা(কোড) আমাদের স্কোপেও বিদ্যমান অর্থাৎ আমরা এর সমস্ত কোড ব্যবহার করতে পারি। এছাড়া আমরা চাইলে   from কীওয়ার্ড ব্যবহার করে কোনো মডিউলের নির্দিষ্ট কোনো সংজ্ঞাকেও ইম্পোর্ট করতে পারি।

উদাহরণস্বরূপঃ


>>> from math import pi
>>> pi
#Output: 3.141592653589793

যখন একটি মডিউলকে ইম্পোর্ট করা হয় তখন এটি sys.path এ নির্ধারিত বিভিন্ন স্থানে খোঁজ করে। নিম্নে ডিরেক্টরি লোকেশন এর তালিকা তুলে ধরা হলোঃ


>>> import sys
>>> sys.path
['',
'C:\\Python36\\Lib\\idlelib',
'C:\\Windows\\system32\\python36.zip',
'C:\\Python36\\DLLs',
'C:\\Python36\\lib',
'C:\\Python36',
'C:\\Python36\\lib\\site-packages']

আপনি চাইলে আপনার নিজস্ব লোকেশনকেও এই তালিকায় যুক্ত করতে পারেন।

সি-প্রোগ্রামিং (পর্ব ০১) – প্রাথমিক ধারনা

সি সাধারণ উদ্দেশ্যে(general-purpose) ব্যবহৃত একটি শক্তিশালী(powerfull) প্রোগ্রামিং ভাষা যা দ্রুততর(faster), বহনযোগ্য(portable) এবং সব ধরণের প্লাটফর্মেই উপযোগী।

আপনি যদি প্রোগ্রামিং এ নতুন হোন, তাহলে সি দিয়ে প্রোগ্রামিং এ যাত্রা শুরু হবে আপনার জন্য দারুণ এক পছন্দের বিষয়।

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

সি প্রোগ্রামিং কি?

সি প্রোগ্রামিং শেখা শুরু করার পূর্বে চলুন সি প্রোগ্রামিং ভাষাটির সঙ্গে পরিচিত হয়ে নিই।

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

সি একটি অত্যন্ত কার্যকরী(highly efficient) প্রোগ্রামিং ভাষা । প্রায় ৪৪ বছরেরও বেশি সময় ধরে জনপ্রিয় থাকার এটাই হয়ত মূল কারণ।

স্টান্ডার্ড সি প্রোগ্রাম বহনযোগ্য(portable)। একটি সিস্টেমের জন্য লিখিত কোড কোনো ধরণের পরিবর্তন ছাড়াই অন্য অপারেটিং সিস্টেমে কাজ করে।

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

সি প্রোগ্রামিং এর ইতিহাস

ইউনিক্স অপারেটিং সিস্টেমের সাথে সি প্রোগ্রামিং অত্যন্ত সম্পর্কযুক্ত।

ইউনিক্স সিস্টেম ডেভেলপমেন্ট

ইউনিক্স সিস্টেমের ভার্সন-PDP-11 এসেম্বলি ল্যাঙ্গুয়েজ দিয়ে লেখা। এসেম্বলি ল্যাঙ্গুয়েজ হলো লো-লেভেল(low-level) প্রোগ্রামিং ল্যাঙ্গুয়েজ। যা শুধু নির্দিষ্ট কোনো প্লাটফর্মের জন্য লেখা হয়। ইহা লেখা এবং বুঝাও অনেক কঠিন।

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

১৯৭২ সালে ইউনিক্স সিস্টেম PDP-11-এ সি এর ডেভেলপমেন্ট শুরু হয়। তখন উনিক্স এর বিশাল অংশ পূনরায় সি দিয়ে লেখা হয়েছিল। ১৯৭৩ সালে ইউনিক্স কার্নেলে সি যথেষ্ট শক্তিশালি ভাষা হিসাবে ব্যবহৃত হয়েছিল। ডেনিশ রিচি এবং স্টেফেন সি. জনশন ভাষাটিকে ইউনিক্স অপারেটিং সিস্টেমে বহনযোগ্য করে তোলার জন্য কয়েক বছর ধরে ইহাতে আরোও কিছু পরিবর্তন এনেছিলেন।

সি প্রোগ্রামিং এর প্রথম বই

১৯৭৮ সালে সি প্রোগ্রামিং এর প্রথম বই “The C Programming Language” প্রকাশিত হয়েছিল। বইটির প্রথম সংস্করণ প্রোগ্রামারদের কাছে অনেক বছর যাবৎ ভাষাটির সাধারণ বর্ণনা সর্বরাহ করেছিল। ব্রায়ান কার্নিংহাম এবং ডেনিশ রিচি কর্তৃক লেখা এই বইটি “K&R” নামে অনেক জনপ্রিয়।

আনসি(ANSI) সি

সি ল্যাঙ্গুয়েজ কয়েক বছরের মধ্যেই দ্রুত বৃদ্ধি পাওয়ায় ভাষাটির জন্য কিছু নিয়ম(standard) ঠিক করে দেওয়ার প্রয়োজন হয়েছিল।

C89: ১৯৮৯ সালে আমেরিকান ন্যাশন্যাল স্টান্ডার্ড ইন্সটিটিউট(ANSI) কর্তৃক সি এর প্রথম স্টান্ডার্ড প্রকাশিত হয়েছিল। সি এর এই ভার্সনটি প্রোগ্রামারদের কাছে C89 নামে জনপ্রিয় ছিল।

C99:   ১৯৯৯ সালে সি স্টান্ডার্ডে আরো নতুন কিছু বৈশিষ্ট্য যেমন- নতুন ইনলাইন ফাংশন, নতুন ডাটাটাইপ ইত্যাদি সংযুক্ত করা হয়েছিল। ইহা প্রোগ্রামারদের কাছে C99 নামে পরিচিত ছিল।

C11: C11 এ নতুন কিছু বৈশিষ্ট্য যেমন- টাইপ জেনেরিক ম্যাক্রো,অটোমিক অপারেশন এবং এনোনিমাস স্ট্রাকচার যোগ করা হয়েছে যেগুলো C99 এ ছিল না।

এই সবগুলো স্টান্ডার্ড আনসি সি নামেও পরিচিত।

“স্টান্ডার্ড সি প্রোগ্রাম বহযোগ্য”. ইহার অর্থ হচ্ছে, আনসি সি অনুসরণ করে লেখা প্রোগ্রাম অপারেটিং সিস্টেম গুলোর মধ্যে স্থানান্তরযোগ্য।

আপনি যদি সি প্রোগ্রামিং এ নতুন হয়ে থাকেন তাহলে আমদের পরামর্শ হলো আনসি সি অনুসরণ করে প্রোগ্রামিং লেখার যা সকল ক্ষেত্রেই গ্রহণযোগ্য। ইহা আপনাকে ভাষাটি লেখার উদ্দ্যেশ্য বুঝতে সহায়তা করবে।

সি প্রোগ্রামিং ল্যাঙ্গুয়েজের বৈশিষ্ট্যসমুহ

একটি প্রোসিডিউরাল ল্যাঙ্গুয়েজ

সি এর মত প্রোসিডিউরাল(procedural) ল্যাঙ্গুয়েজে পূর্বনির্ধারিত কিছু ইন্সট্রাকশন ধাপে ধাপে সম্পন্ন হয়। একটি কাজ সম্পন্ন করার জন্য একটি আদর্শ সি প্রোগ্রামে এক বা একের অধিক প্রোসিডিউর বা ফাংশন থাকতে পারে। আপনি যদি প্রোগ্রামিং এ নতুন হয়ে থাকেন, তাহলে আপনি ভাবতে পারেন যে, এটাই একমাত্র পদ্ধতি যে পদ্ধতিতে সকল প্রোগ্রামিং ল্যাঙ্গুয়েজ কাজ করে।

যাইহোক, এছাড়া প্রোগ্রামিং এর অন্যান্য কৌশলও(paradigm) রয়েছে। এদের মধ্যে সচারচর ব্যবহৃত একটি কৌশল হলো অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং(OOP) যা কোনো কার্য সম্পাদনের জন্য ডেভেলপারদেরকে অবজেক্ট তৈরিতে অনুমতি দেয়।

সি প্রোগ্রাম দ্রুততর

সি এর তুলনায় নতুন ল্যাঙ্গুয়েজ জাভা এবং পাইথন অনেক ধরণের বৈশিষ্ট্য যেমন- গার্বেজ কালেকশন(garbage collection) এবং ডাইনামিক টাইপিং(dynamic typing) অফার করে। ইহা প্রোগ্রামারদের জন্য প্রোগ্রাম লেখাও সহজ করে দেয়। যাইহোক, অতিরিক্ত প্রোসেসিং এর কারণে সি এর তুলনায় এদের পারফর্মেন্স কম।

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

স্টান্ডার্ড সি প্রোগ্রাম বহনযোগ্য

“একবার লিখে সকল প্লাটফর্মে কম্পাইল করা যায়”। আনসি স্টান্ডার্ডে ভালভাবে লেখা সি প্রোগ্রাম বহনযোগ্য(portable), এই কথার অর্থ হলো, এক সিস্টেম(যেমন- উইন্ডোজ)-এর জন্য লেখা প্রোগ্রাম কোনো ধরণের পরিবর্তন ছাড়াই অন্য প্লাটফর্ম(যেমন- লিন্যাক্স)-এ কম্পাইল করা যায়।

মডিউলার(Modular)-এর ব্যবহার

আপনি সি প্রোগ্রামকে ভিন্ন ভিন্ন সেকশন বা ফাংশনে ভাগ করে লাইব্রেরীর মধ্যে রাখতে পারেন। প্রোগ্রামিং এর এই ধারনা মডিউলারিটি(modularity) নামে পরিচিত।

সি নিজে নিজে খুবই ছোট্ট একটি ভাষা। কিন্তু সি এর আসল শক্তি হলো এর বিশাল লাইব্রেরী আছে। সি এর কিছু স্টান্ডার্ড লাইব্রেরী আছে যা দিয়ে সাধারণ সমস্যাসমূহ সমাধান করা যায়। ধরুন, আপনি স্ক্রিনে কিছু প্রদর্শন করাতে চাচ্ছেন, তাহলে আপনি আপনার প্রোগ্রামে “stdio.h” লাইব্রেরী সংযোগ করতে পারেন যা আপনাকে স্ক্রিনে কিছু প্রদর্শনের জন্য printf() ফাংশন ব্যবহারের অনুমতি দেয়।

স্টাটিক্যালি টাইপ ল্যাঙ্গুয়েজ

সি একটি স্টাটিক্যালি টাইপ ল্যাঙ্গুয়েজ(statically typed language)। এর অর্থ হলো, ভ্যারিয়েবলের টাইপ রান টাইমে নয় বরং কম্পাইল টাইমে চেক হয়। ইহা সফটওয়্যার ডেভেলপমেন্ট সাইকেলের সময় error খুঁজতে সহায়তা করে। এছাড়া ডাইনামিক্যালি টাইপ ল্যাঙ্গুয়েজের তুলনায় স্টাটিক্যালি টাইপ ল্যাঙ্গুয়েজ সাধারণত দ্রুততর হয়।

সাধারণ উদ্দেশ্যে(General purpose)

পূর্ববর্তী বিষয়সমূহ ছাড়াও বিভিন্ন ধরণের এপ্লিকেশন যেমন- সিস্টেম সফটওয়্যার থেকে শুরু করে ফটো এডিটিং সফটওয়ারেও সি ল্যাঙ্গুয়েজ ব্যবহৃত হয়। সি ল্যাঙ্গুয়েজ ব্যবহৃত কিছু এপ্লিকেশন নিম্নে তুলে ধরা হলোঃ

  • এমবেডেড সিস্টেম(Embedded System)
  • অপারেটিং সিস্টেম – উইন্ডোজ, লিন্যাক্স, ওএস এক্স, এন্ড্রোয়েড, আইওএস
  • ডাটাবেজ – মাইএসকিউএল, অরাকল, এমএস এসকিউএল সার্ভার, পোস্টগ্রিএসকিউউএল
  • অন্যান্য ব্যবহার -নেটওয়ার্ক ড্রাইভার, কম্পাইলার, প্রিন্ট স্পুলার

কেন সি প্রোগ্রামিং শিখবেন?

যদি শুধুমাত্র হ্যাঁ অথবা না দ্বারা এই প্রশ্নের উত্তর দেওয়া সম্ভব হত! দুর্ভাগ্যবশত, এই প্রশ্নের উত্তর দেওয়া খুব সহজ নয় কারণ ইহা ব্যক্তি থেকে ব্যক্তিতে ভিন্ন হয়।

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

সি শেখার মাধ্যমে আপনি কি অর্জন করবেন?

আপনি যদি সি প্রোগ্রামিং না জানেন, তাহলে প্রোগ্রামার হিসাবে আপনি কি করছেন তাই জানবেন না। । আপনার এপ্লিকেশন খুব সুন্দরভাবে এবং সব ধরণের কাজ করবে ঠিকই। কিন্তু আপনি যদি বলতে না পারেন কেন ইহা

(*s++ = *p++);

স্ট্রিং কপি করে, তাহলে আপনি অন্ধবিশ্বাসে প্রোগ্রামিং করেন।

১ । কম্পিউটার কিভাবে কাজ করে আপনি তা জানবেন

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

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

২। সি হলো প্রোগ্রামিং এর মিশ্র ভাষা(lingua franca)

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

৩। ওপেন সোর্স প্রোজেক্টে কাজ করার সুযোগ পাবেন যা লক্ষ লক্ষ মানুষকে প্রভাবিত করে।

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

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

কিছু বড় বড় ওপেন সোর্স প্রোজেক্ট (যেমন- এসকিউলাইট ডাটাবেজ, লিনাক্স কার্নেল, পাইথন ইন্টারপ্রেটার) রয়েছে যেগুলোতে সি প্রোগ্রামিং ব্যবহৃত হয়।

অন্য আরেকটি ভাষা আছে যা বড় বড় ওপেন সোর্স প্রোজেক্টে ব্যবহৃত হয় তা হলো সি++। আপনি যদি সি এবং সি++ জানেন, তাহলে আপনি অনেক ওপেন সোর্স প্রোজেক্টে অবদান রাখতে পারবেন যা লক্ষ লক্ষ মানুষকে প্রভাবিত করবে।

৪। আপনি সেরা প্রোগ্রাম লিখতে পারবেন

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

৫। অন্যান্য প্রোগ্রামিং ল্যাঙ্গুয়েজ শেখা সহজ হয়ে যাবে।

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

সি# এবং জাভা প্রোগ্রামিং সি এবং সি++ এর সাথে সম্পর্কযুক্ত। জাভাস্ক্রিপ্ট এবং পিএইচপি এর সিনট্যাক্স সি এর মতই।

আপনি যদি সি এবং সি++ প্রোগ্রামিং জানেন তাহলে অন্যন্য ভাষায় স্যুইচ করতে আপনাকে কোনো ধরণের বেগ পেতে হবে না।

সি প্রোগ্রামিং না শেখার কারণ

আপনি সি প্রোগ্রামিং না শিখেই অসাধারণ অসাধারণ সফটওয়্যার তৈরি করতে পারবেন। Stackoverflow.com এর প্রতিষ্ঠাতা জেফ আটওয়ার্ড মোটেও সি প্রোগ্রামিং জানতেন না। কিন্তু স্টেক অভারফ্লো নিঃসন্দেহে অনেক ভাল একটি ওয়েব এপ্লিকেশন।

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

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

সি প্রোগ্রামিং শিখবেন কি না সিদ্ধান্ত নিন!!

নতুনদের জন্যঃ

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

অভিজ্ঞ প্রোগ্রামারদের জন্যঃ

সি প্রোগ্রামিং শেখার অত্যন্ত প্রয়োজন নাই কিন্তু সি শেখার কিছু ভাল দিকও রয়েছে।

সি শেখার জন্য আপনি আপনার চলমান প্রোজেক্ট বন্ধ করে দিয়েন না। আমার বিশ্বাস, আপনি এটা করবেনও না। যদি আপনার ফ্রি সময় থাকে এবং প্রোগ্রামিং দক্ষতাকে সমৃদ্ধ করতে চান তাহলে আপনি সি শিখতে পারেন।

আমি বিশ্বাস করি, তাৎক্ষনিকভেবে এটা শেখার প্রয়োজন নাই। তবে কোনো না কোনোভাবে এটা আপনার শেখা উচিৎ।

ধন্যবাদ 🙂

জাভা ক্লাস(Class) এবং অবজেক্ট (Object)

জাভা ক্লাস :

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

  1. ফিল্ডস (fields)
  2. মেথডস (methods)
  3. কনস্ট্রাক্টরস (constructors)
  4. ব্লকস (blocks)
  5. নেস্টেড ক্লাস এবং ইন্টারফেস (nested class and interface)

ক্লাস ডিক্লেয়ার করার সিনটেক্সঃ

 
Access Modifier class ClassName {

    fields
    methods
}
public class ExampleClass {
 
}

জাভা ইন্সটেন্স ভেরিয়েবল:

একটি ভেরিয়েবল যা ক্লাসের ভিতর এবং মেথডের বাহিরে তৈরী বা ডিক্লেয়ার করা হয় তাকে ইন্সটেন্স ভেরিয়েবল বলে । ইন্সটেন্স ভেরিয়েবল, কম্পাইল টাইমে মেমরি পাওয়া যায় না । এই মেমোরি পাওয়া যায় রান-টাইমে যখন অবজেক্ট তৈরি করা হয় । এই কারণে একে ইন্সটেন্স ভেরিয়েবল বলে ।
জাভা অবজেক্ট:

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

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

সুতরাং আমরা জানলাম, অবজেক্ট এর দুইটা জিনিস থাকে, স্টেট ( অর্থাৎ নিজের সম্পর্কে ধারণা) এবং মেথড (সে কি কি কাজ করতে পারে)।
একটি অবজেক্টের ৩টি বৈশিষ্ট্য থাকে :

  1. স্টেট
  2. বিহেভিয়ার
  3. আইডেন্টিটি

স্টেট :

স্টেট হল কিছু তথ্য যা দিয়ে অনেকগুলো অবজেক্ট থেকে প্রত্যেককে আলাদা করা যায় । এর বর্তমান অবস্থা জানা যায় । একে ভেরিয়েবলও বলা হয়

বিহেভিয়ার :

একটি অবজেক্ট দিয়ে নির্দিষ্ট কিছু কাজ করানো যায় । এটাই হচ্ছে অবজেক্ট বিহেভিয়ার । একে মেথডও বলা হয় ।
৩ টি উপায়ে অবজেক্ট ইনিশিলায়াইজ করা যায় :

  • রেফারেন্স ভেরিয়াবল দ্বারা
  • মেথড দ্বারা
  • কনস্ট্রাক্টর দ্বারা

জাভা new কিওয়ার্ড :

রান টাইমে মেমোরি বরাদ্দ করার জন্য new কিওয়ার্ড ব্যবহার করা হয় । সব অবজেক্ট এর মেমোরি হ্যাপ মেমরি (Heap Memory ) এলাকা থেকে পাই ।

অবজেক্ট তৈরী করা :

নতুন অবজেক্ট তৈরী করার জন্য জাভাতে new কিওয়ার্ড ব্যবহার করা হয় । একটি ক্লাস থেকে একটি অবজেক্ট তৈরি করার তিনটি ধাপ আছে ঃ

  1. ডিক্লারেশন (Declaration )
  2. ইনস্ট্যান্স (Instantiation )
  3. ইনিশিয়ালিজেশন (Initialization )

ডিক্লারেশন :

A variable declaration with a variable name with an object type.

ইনস্ট্যান্স :

The ‘new’ keyword is used to create the object

ইনিশিয়ালিজেশন:

The ‘new’ keyword is followed by a call to a constructor. This call initializes the new object
সিনট্যাক্স :

 className objectName = new className();
 MyClass object = new MyClass()

বিভিন্ন উপায়ে জাভার অবজেক্ট তৈরী করা যায় :

৪টি উপায়ে জাভার অবজেক্ট তৈরী করা যায়

1. new কিওয়ার্ড ব্যবহার করে
This is the most common way to create an object in java. I read somewhere that almost 99% of objects are created in this way.

MyObject object = new MyObject();

2. Class.forName() ব্যবহার করে
If we know the name of the class & if it has a public default constructor we can create an object in this way.

Employee emp2 = (Employee) Class.forName("org.Employee")
.newInstance();

3. clone() ব্যবহার করে
The clone() can be used to create a copy of an existing object.

Employee emp4 = (Employee) emp3.clone();

4. object deserialization ব্যবহার করে
Object deserialization is nothing but creating an object from its serialized form.

ObjectInputStream inStream = new ObjectInputStream(anInputStream ); 
MyObject object = (MyObject) inStream.readObject();

Now you know how to create an object. But its advised to create objects only when it is necessary to do so.
ক্লাস এবং অবজেক্ট ব্যবহার করে একটি জাভা প্রোগ্রাম :



    public class SimpleClass {

    // this is constructor

    public SimpleClass() { }

    // this is method

    public void printMessage() {

    System.out.println(“Java Object Oriented Programming”);

    }

    public void printState() {

    int n=2;

    System.out.println(n*n);

    }

    public static void main(String[] args) {

    // create object

    SimpleClass object=new SimpleClass();

    object.printMessage();

    object.printState();

    }
    }

Handlebars Templates Using Cordova

Writing HTML fragments in JavaScript and programmatically inserting them into the DOM is tedious. It makes your application harder to write and harder to maintain. HTML templates address this issue by decoupling the UI definition (HTML markup) from your code. There are a number of great HTML template solutions, including Mustache.js, Handlebars.js, and Underscore.js to name a few.
In this module, we create two templates to streamline the code of the Employee Directory application. We use Handlebars.js but the same result can be achieved using the other HTML template solutions.

Step 1: Define the templates
Modify index.html as follows:

1.0 Add a script tag to include the handlebars.js library:

<script src="lib/handlebars.js"></script>

1.1 Add ratchet.css and styles.css to the head of index.html

<link href="assets/ratchet/css/ratchet.css" rel="stylesheet">
<link href="assets/css/styles.css" rel="stylesheet">

1.2 Create an HTML template to render the Home View. Add this script tag as the first child of the body tag:

<script id="home-tpl" type="text/template">
    <header class="bar bar-nav">
        <h1 class="title">Directory</h1>
    </header>
    <div class="bar bar-standard bar-header-secondary">
        <input class='search-key' type="search"/>
    </div>
    <div class="content"></div>
</script>

1.3 Create an HTML template to render the employee list. Add this script tag immediately after the previous one:

<script id="employee-list-tpl" type="text/template">
    <ul class="table-view">
        {{#each this}}
        <li class="table-view-cell media">
          <a href="#employees/{{ id }}">
              <img class="media-object pull-left" src="assets/pics/{{pic}}">
              <div class="media-body">
                  {{firstName}} {{lastName}}
                  <p>{{title}}</p>
              </div>
          </a>
        </li>
        {{/each}}
    </ul>
</script>

Step 2: Use the Templates

Modify the immediate function in app.js as follows:

2.0 Immediately before the service variable declaration, declare two variables that hold the compiled version of the templates defined above:

    var homeTpl = Handlebars.compile($("#home-tpl").html());
    var employeeListTpl = Handlebars.compile($("#employee-list-tpl").html());

2.1 Modify renderHomeView() to use the homeTpl template instead of the inline HTML:

function renderHomeView() {
    $('body').html(homeTpl());
    $('.search-key').on('keyup', findByName);
}

2.2 Modify findByName() to use the employeeListTpl template instead of the inline HTML:

function findByName() {
    service.findByName($('.search-key').val()).done(function (employees) {
        $('.content').html(employeeListTpl(employees));
    });
}

2.3 Test the application.

Step 3: Fixing the Status Bar Issue on iOS7

In iOS7, the status bar overlaps the application views. As a result, the status bar text may collide with the application’s header text as shown in the screenshot above. You can fix this issue using the statusbar plugin.
3.0 Add the status bar plugin:

cordova plugins add org.apache.cordova.statusbar

3.1 In app.js, add the following code at the top of the deviceready handler:

StatusBar.overlaysWebView( false );
StatusBar.backgroundColorByHexString('#ffffff');
StatusBar.styleDefault();

3.2 Finally, Build the application again and test your application in the iOS emulator or on an iOS device.

Camera API Using Cordova

You use the Cordova Camera API to provide the user with the ability to take a picture of an employee, and use that picture as the employee’s picture in the application. We do not persist that picture in this sample application.
The code below only works when running the application on your device as a Cordova app. In other words, you can’t test it in a browser on the desktop.

1. Add the camera plugin to your project:

cordova plugin add org.apache.cordova.camera

2. In index.html, add the following list item to the employee template: See this Template Tutorial


<li class="table-view-cell media">
  <a hre="#" class="push-right change-pic-btn">
      <span class="media-object pull-left"></span>
      <div class="media-body">
          Change Picture
      </div>
  </a>
</li>

3. In the initialize() function of EmployeeView, register an event listener for the click event of the Change Picture list item:

this.$el.on('click', '.change-pic-btn', this.changePicture);

4. In EmployeeView, define the changePicture event handler as follows:

this.changePicture = function(event) {
  event.preventDefault();
  if (!navigator.camera) {
      alert("Camera API not supported", "Error");
      return;
  }
  var options =   {   quality: 50,
                      destinationType: Camera.DestinationType.DATA_URL,
                      sourceType: 1,      // 0:Photo Library, 1=Camera, 2=Saved Album
                      encodingType: 0     // 0=JPG 1=PNG
                  };

  navigator.camera.getPicture(
      function(imgData) {
          $('.media-object', this.$el).attr('src', "data:image/jpeg;base64,"+imgData);
      },
      function() {
          alert('Error taking picture', 'Error');
      },
      options);

  return false;
};

5. Finally Test the Application 🙂

যেভাবে CLIFFS TOEFL পড়তে হবে

আচ্ছা, cliffs TOEFL নিয়ে হয়ত আপনারা হয়ত অনেক সমস্যার মুখোমুখি হচ্ছেন। এখানে আমি সম্পূর্ণ বইয়ের একটি সংক্ষিপ্ত আলোচনা করছি।
প্রথমে বইটি নিয়ে কিছু কথা বলে দিচ্ছি, তা হচ্ছে প্রথমত আপনি বইটি নিয়ে মাথা ব্যাথা করবেন না।

প্রথম অংশঃ

আপনি সরাসরি ৩৯-২৩৭ পেজের গ্রামার টা আগে শেষ করুন। প্রতিটি exercise হাতে কলমে বুঝে বুঝে শেষ করবেন। এগুলোর উত্তর দেয়া আছে ২৩৮-২৬২ পেজে।

তবে অনেকেই প্রশ্ন করে থাকেন কি ভাবে পড়ব? একেবারে ইংরেজি বই তো দাদা। চিন্তা করবেন না, আমি একটি পদ্ধটি দেখাচ্ছি। ধরুন আপনি ৮৪ পেজে আছে। দেখুন দুইটা টেবিল আছে। প্রথম টেবিল টি দেখুন বেশ কিছু শব্দ দেয়া আছে। এগুলো ছড়া বানিয়ে মুখস্ত করে নিন। মুলত দেখবেন এই টেবিলের নিচে বেশ কিছু উদাহরন দেয়া আছে। খেয়াল করুন আপনি যে শব্দ গুলো মুখস্ত করেছেন, সেগুলোর পড়ে to+ verb এর base form ব্যাবহার করা হচ্ছে। তার মানে হল আপনি যে টেবিল টি মুখস্ত করলেন এই শব্দের পর যদি কোন verb আসে, তবে তার base form ব্যাবহার করতে হবে। এবারে কাজ চালিয়ে যান। দেখবেন কাজ হয়ে যাবে।

দ্বিতীয় অংশঃ

এবার ২৬৪-২৭৬ পেজে কিছু problem and confusing word নিয়ে বেশ কিছু জিনিস দেয়া আছে, এগুলো মুখস্ত করে ফেলুন। এবং এদের যে exercise দেয়া আছে সমাধান করে ফেলুন। ২৭৬-২৮৪ পেজের প্রতিটি preposition মুখস্ত করে ফেলতে হবে। প্রশ্ন এখান থেকে কমন আসে। ২৮৪-২৮৯ এর verbal idiom গুলো গিলে ফেলতে হবে। দেখবেন কমন পাবেন। ২৮৯-২৯২ এ যা আছে তা একবার দেখে নেবেন, অনেক সময় কমন আসতে পারে।

এরপর দেখবে mini test 5 and mini test 6 আছে। সমাধান করে ফেলতে হবে। এখান থেকে প্রতি বছর এখান থেকে প্রশ্ন কমন এসছে।

আর এসবের উত্তর দেয়া আছে ২৬৭-২৯৯ পেজে।

তৃতীয় অংশঃ

এবার table of contents এ যাও। এবার তোমার কাজ হলো, এখানে দেখবে, ৩১৫ পেজ থেকে শুরু করে ৪৯১ পেজ পর্যন্ত মোট ৬ টি টেস্ট দেয়া আছে। এই টেস্ট গুলোর

প্রতিটি টেস্টে ৩ টি করে সেকশন আছে। সেকশন ১ বাদ দিন, লাগবে না। আপনাকে মুলত পড়তে হবে সেকশন ২ যেখানে ৪০ টি করে প্রশ্ন দেয়া আছে যেগুলো কিনা গ্রামার বেসড, আর সেকশন ৩ যেখানে ৫ টি করে রিডিং প্যাসেজ দেয়া আছে। প্রতিটি টেস্ট এর সেকশন ২ ও ৩ শেষ করেলেই কাজ শেষ। এই প্রশ্ন গুলোর উত্তর দেয়া আছে ৪৯৮ পেজ থেকে শুরু করে বইয়ের শেষ পর্যন্ত। একটু খেয়াল করলেই দেখবেন প্রথমে উত্তর ও এরপর এদের ব্যাখ্যা দেয়া আছে।

এর বাইরে এই বই থেকে আর কিছু পড়তে হবে না। মতামত জানাবেন।

Filter using for AngularJS

Filters are used in conjunction with arrays of data and also outside of loops. If you’re looping through data and want to filter out specific things, you’re in the right place, you can also use Filters for filtering what a user types inside an “input” field for example. There are a few ways to use Filters, inside Controllers or as a defined method. Here’s the method usage, which you can use globally:

myApp.filter('reverse', function () {
    return function (input, uppercase) {
        var out = '';
        for (var i = 0; i < input.length; i++) {
            out = input.charAt(i) + out;
        }
        if (uppercase) {
            out = out.toUpperCase();
        }
        return out;
    }
});

// Controller included to supply data
myApp.controller('MainCtrl', ['$scope', function ($scope) {
    $scope.greeting = 'Rasel Khan';
}]);

DOM usage:

<div ng-app="myApp">
    <div ng-controller="MainCtrl">
        <p>No filter: {{ greeting }}</p>
        <p>Reverse: {{ greeting | reverse }}</p>
    </div>
</div>

Output:

No filter:  Rasel Khan
Reverse:  nahK lesaR

How to fix qualified domain name

When you restart your apache server using the command

sudo /etc/init.d/apache2 restart

Someone get the following error:

Restarting web server apache2
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
... waiting apache2:
Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName

Let’s go fix this issue !

This is just a friendly warning and not really a problem (as in that something does not work).

If you insert a

ServerName localhost 

in either httpd.conf or

apache2.conf in /etc/apache2 

and restart apache the notice will disappear.

If you have a name inside

/etc/hostname

you can also use that name instead of

localhost

And it uses

127.0.1.1

if it is inside your

/etc/hosts
127.0.0.1 localhost
127.0.1.1 myhostname

Use a text editor such as “sudo nano” via command line or “gksudo gedit” on the desktop to create a new file,

sudo nano /etc/apache2/conf.d/fqdn 

or

gksu "gedit /etc/apache2/conf.d/fqdn" 

then add
ServerName localhost
to the file and save. This can all be done in a single command with the following:

echo "ServerName localhost" | sudo tee /etc/apache2/conf-available/fqdn.conf 
sudo a2enconf fqdn 

বিসিএস পরীক্ষা দিবেন- প্রস্তুতি নিন এখন থেকেই

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

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

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

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

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

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

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

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

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

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

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

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

আপনাদের জন্য শুভকামনা।

How to fix network service discovery disabled

It looks like avahi-daemon is started when the network connection is established (

/etc/network/if-up.d/avahi-daemon

). This notification is informing you that mDNS (Avahi) has been disabled. It’s only used for a small number of applications that only work on the local network, it won’t adversely affect your internet connection or DNS.

The most well known use for mDNS is sharing music with Rhythmbox (or iTunes) over your LAN. It’s an Apple technology, but it’s largely been ignored in favour of uPNP or DLNA.

To disable it, you must edit the file /etc/default/avahi-daemon as root:

sudo -i
gedit /etc/default/avahi-daemon

and add this line (or change it if already exists to):

AVAHI_DAEMON_DETECT_LOCAL=0

Better one:

In /etc/avahi/avahi-daemon.conf uncomment and change the line with domain name to

domain-name=.alocal

sudo gedit /etc/NetworkManager/NetworkManager.conf
sudo service network-manager restart