wifi: 01761550675
@.7-9.sio.pys.3-9
--------------------------------------
GSS
UNDERSTAND THE BIG PICTURE OF FRONTEND APPLICATION
কোনো একটা অ্যালগরিদম/প্রোগ্রামে টাইম কমপ্লিক্সিটির(complexity) মতো স্পেস কমপ্লিক্সিটি(complexity)ও গুরুত্বপূর্ণ বিষয় । স্পেস কমপ্লিক্সিটি(complexity) এবং টাইম কমপ্লিক্সিটি(complexity) প্রায়ই একই কারণ তারা একটি অ্যালগরিদমের ইনপুট পরিমাণের সাথে সম্পর্কিত। যেখানে টাইম কমপ্লিক্সিটি(complexity) একটি অ্যালগরিদমে অপারেশনের পরিমাণের সাথে সম্পর্কিত, এবং স্পেস কমপ্লিক্সিটি(complexity) অ্যালগরিদম সম্পন্ন করার জন্য প্রয়োজনীয় মোট জায়গার সাথে সম্পর্কিত।
সহজভাবে বললে, একটি অ্যালগরিদম বা প্রোগ্রাম সম্পন্ন করার জন্য ঠিক কতটুকু জায়গা বা মেমরি নিলো তাকেই স্পেস কমপ্লিক্সিটি(complexity) বলে। কোনো অ্যালগরিদম বা প্রোগ্রামের জন্য আমাদের নির্দিষ্ট পরিমাণ মেমরি ব্যাবহার করতে হয়। কিন্তু আমরা যদি স্পেস কমপ্লিক্সিটির(complexity) হিসেব-নিকেশ বুঝি তাহলে সহজেই বলে দিতে পারবো যে একটি প্রোগ্রাম কার্যকর করার জন্য ঠিক কতটুকু মেমরি ব্যাবহার করতে হবে।
একটি অ্যালগরিদম/প্রোগ্রামের স্পেস কমপ্লিক্সিটি(complexity) বের করতে প্রোগ্রামে ব্যবহৃত ভেরিয়েবল দ্বারা দখলকৃত স্থান গণনা করা যথেষ্ট।
একটি অ্যালগরিদমে যদি টাইম কমপ্লিক্সিটি(complexity) অনেক বেশিও হয়ে যায় তবুও কিন্তু প্রোগ্রাম দেরিতে হলেও রান হবে বা চলবে । কিন্তু যদি সেই অ্যালগরিদম/প্রোগ্রামের বরাদ্দকৃত মেমরি অতিক্রম করে অর্থাৎ বরাদ্দকৃত মেমরি থেকে বেশি মেমরি ব্যাবহার করা হয়, তাহলে এটি চলবে না। তাই কোনো অ্যালগরিদম রচনা করার সময় আমাদের খেয়াল রাখা দরকার যে ব্যবহৃত মেমরি যাতে বরাদ্দকৃত মেমরির মধ্যে সীমাবদ্ধ থাকে ।
জাভাস্ক্রিপ্ট প্রোগ্রামিং ভাষাতে, একটি নাম্বার মেমরিতে জায়গা নেয় 64 বিটস(bits) যাকে বাইটে কনভার্ট করলে হয় 8(আট) বাইটস(bytes) । এখন উপরোক্ত Add ফাংশনে লক্ষ্য করলে দেখবেন যে, প্রথমে এটি ২টা নাম্বার প্যাঁরামিটার হিসেবে নিচ্ছে এবং তাদের যোগফলকে sum নামের একটি ভ্যারিয়েবলে স্টোর করতেছে যা একটি নাম্বার ।
এই ফাংশনে মেমরি স্পেস হবে n1,n2,এবং sum তিনটি নাম্বার ভেরিয়েবলের ওপর নির্ভর করে । হিসাব করলে হয় 3*8 = 24 বাইটস(bytes) এখানে n1,n2 এর মান যতই হোক নাহ কেনো প্রত্যেকটার জন্য 8(আট) বাইটস(bytes) করেই মেমরি নিবে এবং তা sum ভেরিয়েবলে স্টোর হবে । তাহলে উপরোক্ত প্রোগ্রামে যেকোনো পরিস্থিতিতে n1,n2,এবং sum তিনটি নাম্বার ভেরিয়েবলের মেমরি খরচ করে ফেলবে যা একটি কন্সটেন্ট(Constant) নাম্বার । এখন বলতে পারি উপরোক্ত প্রোগ্রামের স্পেস কমপ্লিক্সিটি(complexity) অর্ডার অব ওয়ান O(1) ।
অনেকের মনে প্রশ্ন আসতে পারে যে ভাই, আমরা উপরে যে sum কে রিটার্ন এবং ফাংশনকে কল করলাম এগুলোর জন্য কি মেমরি নেয় নাহ ? উত্তর হবে হ্যাঁ নেয় কিন্তু সেগুলো অস্থায়ী(temporary) যা কাউন্ট করা হয় নাহ এসব মেমরিকে বলা হয় অক্সিলারি মেমরি(Auxiliary Space) ।
অক্সিলারি মেমরি(Auxiliary Space) হলো অতিরিক্ত বা অস্থায়ী(temporary) মেমরি যা প্রোগ্রাম এক্সিকিউশনের(Execution) সময় ব্যাবহার হয় এবং এটিকে ইনপুট মেমরিতে কাউন্ট করা হয় নাহ । উপরোক্ত ফাংশনে n1,n2,এবং sum তিনটি নাম্বার ভেরিয়েবলের মেমরিই হলো ইনপুট মেমরি ।
এই ফাংশনে মেমরি স্পেস হবে sum এবং i দুইটি নাম্বার ভেরিয়েবলের ওপর নির্ভর করে যাকে আমরা ইনপুট মেমরিও বলতে পারি । তাছাড়াও উপরোক্ত প্রোগ্রামে রিটার্ন স্টেটমেন্ট, ফাংশন কল, এবং ফর লুপ আছে যারা অক্সিলারি মেমরি(Auxiliary Space) এর অন্তর্ভুক্ত । এখন তাহলে এই প্রোগ্রামের স্পেস কমপ্লিক্সিটি(complexity) নির্ণয় করা যাক -
দেখতে পাচ্ছি, ফাংশনটি একটি অ্যারে(Array) প্যাঁরামিটার হিসেবে নিচ্ছে যার নির্দিষ্ট কোনো সাইজ বলে দেওয়া নেই যখন ফাংশনকে কল করা হবে তখন যেকোন সাইজের অ্যারে(Array) প্যাঁরামিটার হিসেবে পাস করতে পারি ।
যদি প্রথমে ৫ সাইজের একটি অ্যারেকে প্যাঁরামিটার হিসেবে পাস করি, তাহলে ফর লুপটি ৫ বার চলবে এবং sum এর সাথে অ্যারে এলিমেন্টের যোগ হবে অর্থাৎ প্রত্যেক এক্সিকিউশনে i এর মান ১ করে বাড়াবে এবং sum কে আপডেট করে ফেলবে । এখানে কিন্তু অ্যারের সবগুলো মান হবে নাম্বার ডাটা-টাইপ যা প্রত্যেকে মেমরিতে ৮ বাইটস করে নেয় -
এখন মেমরিতে জায়গা নিচ্ছে ৯৬ বাইটস । এখানে কিন্তু এই প্রোগ্রামের মেমরি অ্যারের সাইজের উপর নির্ভর করেতেছে যা লিনিয়ার । তাহলে এখন খুব সহজেই বলতে পারি যে, এই প্রোগ্রামের স্পেস কমপ্লিক্সিটি(complexity) অর্ডার অব এন O(n) ।
আজকের পর্ব শেষ করার পূর্বে, চলুন জেনে নেওয়া যাক জাভাস্ক্রিপ্টে কিছু ডাটা-টাইপের স্পেস কমপ্লিক্সিটি(complexity) -
--------------------------------------------------------------------------------------------
উয়ানিসঃ বয়ুক সেলজুক বা
(সেলজুকদের জাগরণ)
উয়ানিস বুয়ুক সেলজুক
সিজনঃ ১ সকল ভলিউম একসাথে
🔴উয়ানিস বয়ুক সেলজুক সিজন-০১ লিংকঃ
বুয়ুক সেলজুক
সিজন-১ এর সবগুলো ভলিউম একসাথে
°°°°°°°°°°°°°°°°°°°°°°°°
°°°°°°°°°°°°°°°°°°°°°°°°
°°°°°°°°°°°°°°°°°°°°°°°°
°°°°°°°°°°°°°°°°°°°°°°°°
°°°°°°°°°°°°°°°°°°°°°°°°
°°°°°°°°°°°°°°°°°°°°°°°°
°°°°°°°°°°°°°°°°°°°°°°°°
°°°°°°°°°°°°°°°°°°°°°°°°
🔹সিজন ১ সমাপ্ত🔸
আজকে আমরা আলোচনা করব API কি?(what is API)। ইপিআই(API) অর্থ হচ্ছে application programming interface.
API কি সেটা বোঝার আগে একটি উদাহরণ দেওয়া যাক। ধরুন আপনি একটা কোম্পানি চালান। সেই কোম্পানির জন্য একটি ওয়েবসাইট তৈরি করলেন। ওয়েবসাইটি তৈরি করার পর আপনি খেয়াল করলেন যে আপনার বেশিভাগ কাস্টমার ওয়েবসাইট ব্যবহার করতে পছন্দ করে না। তাদের একটি মোবাইল অ্যাপ্লিকেশন দরকার ।
তো আপনি একটি মোবাইল অ্যাপ্লিকেশন বানাতে গেলেন। আপনার কোম্পানির মে ডাটাগুলো আছে সেগুলো দিয়ে একটি মোবাইল অ্যাপ্লিকেশন তৈরি করবে। আপনার server-side এর যে লজিক আছে সেগুলো দিয়ে একটি মোবাইল অ্যাপ্লিকেশন বানাবেন।
কিন্তু ওই একই সার্ভার এবং একই ডাঁটা দিয়ে মোবাইল অ্যাপ্লিকেশন বানাইতে গেলেন। তখন কি হলো আপনার মোবাইলেও সার্ভারের এইচটিএমএল জাভাস্ক্রিপ্ট সিএসএস রিটার্ন করে। অর্থাৎ যখন আপনি সার্ভারে রিকুয়েস্ট পাঠান তখনই সার্ভার HTML JavaScript CSS ডাটা পাঠায়। কিন্তু এগুলো তো আপনার দরকার না। এগুলো দিয়ে আপনি মোবাইল ফোনে কি করব।
আবার আরেকটা বিষয় চিন্তা করেন যে আপনার কোম্পানি অনেক বড় হয়ে গেল। আর আপনার কোম্পানী থেকে অনেকগুলো সাব কোম্পানি তৈরি হলো।
এই সাব কোম্পানিগুলোতে আপনার কাস্টমারদের কিছু কিছু ডাটা এক্সেস দিবেন। যে, যদি উনি আমার কাস্টমার হয় আপনি উনাকে এত শতাংশ করে ছাড় দিবেন। কিন্তু এটার জন্য তো আপনার কাস্টমারের ইনফর্মেশন ওদেরকে দিতে হবে। সেটাই বা আপনি কিভাবে দিবেন।
এই দুইটা সমস্যার সমাধান আমরা একটা মাধ্যমে দিতে পারেন। সেটা হচ্ছে API(application programming interface). কিন্তু কিভাবে? ওকে আমি ভেঙ্গে বলি।
ওয়েবসাইট বানানোর ক্ষেত্রে সার্ভার থেকে আমরা কী করি। সার্ভার মূলত আমাদের HTML JavaScript CSS ফাইল তৈরি করে দে। কিন্তু আমরা যদি এইচটিএমএল জাভাস্ক্রিপ্ট সিএসএস এর পুরো ফাইলটা না নিয়ে সার্ভার থেকে শুধু এইটুকুই ডাটা নেই যেটুকু ডাটা আমাদের দরকার, তাহলে কেমন হয়?
মনে করুন প্রোফাইল পেজের জন্য ইমেজ লাগবে তাহলে শুধু ইমেজের লিংকট নিব। নাম লাগবে তাহলে শুধু নামটা নিব কয়জন ফ্রেন্ড আছে শুধু ফ্রেন্ডলিস্ট নিব। এই অল্প কিছু ডাটা লাগবে এগুলাই শূধু নিব।। পুরো এইচটিএমএল সিএসএস জাভাস্ক্রিপ্ট ফাইল না নিয়ে শুধুমাত্র যে যে কনটেন্টগুলো আমার লাগবে সেগুলোর ডাটা নিব।
যখন একটা সার্ভার এরকম ভাবে শুধু প্রয়োজনীয় কনটেন্ট গুলো শেয়ার করবে তখন শেয়ার করার এই পুরো প্রক্রিয়াটাকে বলা হয় API।
এখন চিন্তা করেন যে আপনার একটা সার্ভার আছে। যেটাতে একটা এপিআই জেনারেট করা যায়। আরেকটা সার্ভার আছে যেখানে ওয়েবসাইট আছে। ওয়েবসাইটা আপনি নরমালি ডিজাইন করলেন। ডিজাইন করার পরে এই যে ডাটা গুলো আপনার সার্ভার থেকে আসছে সেই সার্ভার ডাটা গুলো দিয়ে আপনি ওয়েবসাইটা ফিলাপ করে দিলেন। অর্থাৎ যেখানে নাম দরকার সেখানে নাম বসিয়ে দিলেন। যেখানে ইমেজ দরকার সেখানে ইমেজ বাসায় দিলেন। যেখানে যা যা দরকার সেখানে আপনি তা তা বসিয়ে দিলেন।
ঠিক একই ডাটা ব্যবহার করে আপনি আপনার মোবাইল ফোনের অ্যাপ্লিকেশন তৈরি করে ফেললেন। তখন আর এইচটিএমএল জাভাস্ক্রিপ্ট সিএসএস আসছে না। আপনার যা যা দরকার যেই ডাটা গুলো দরকার ছিল সেগুলোই আসছে।
আবার যখন আপনার সাব কোম্পানিগুলো আপনার কাছ থেকে ইনফরমেশনটা চাইলো। তখন আপনি এই একই এপিআই একই লিনক তাদেরকে দিয়ে বললেন যে আপনারা এই লিঙ্কটি ব্যবহার করেন তাহলে আমার প্রয়োজনীয় সব ডাটা পেয়ে যাবেন।
ঠিক যতটুকু আপনার এক্সেস দেওয়া দরকার ঠিক ততটুকুই আপনি এক্সেস দিলেন। যে মনে করুন আপনি তাদেরকে নির্দিষ্ট কোন পেইজ অ্যাক্সিস দিবেন। এক জায়গায় দিলেন গেজেট পোস্ট এক জায়গায় রিভিউ পোস্ট।
এর বেশি আপনি কিছু পাবেন না। আপনি এই জায়গা থেকে গেট রিকোয়েস্ট করতে পারবেন এই এই জায়গায় পোস্ট রিকোয়েস্ট করতে পারবা। আপনি চাইলেও কখনো আপনার পাসওয়ার্ড চেঞ্জ করতে পারবেন বা আপনার ইমেইল চেঞ্জ করতে পারবেন না কিন্তু আপনার নাম চেঞ্জ করতে পারবেন। এরকম অ্যাক্সেস দিতে পারবেন। আপনি যতটা চান প্রাইভেসি আপনি তা আপনার পেইজে দিতে পারেন।
যদি আমি এখন real-world এক্সাম্পল এর কথা বলি। তাহলে প্রথম যেই এক্সাম্পল টা মাথায় আসবে সেটা হচ্ছে আপনারা বিভিন্ন ওয়েবসাইটে গেলেই দেখবেন যে সাইনআপ করতে বলে অথবা সাইন ইন উইথ গুগোল সাইন ইন উইডথ ফেইসবুক ইত্যাদি।
ধরুন আমি কোথাও একটি ওয়েবসাইটে অ্যাকাউন্ট খুলতে চাচ্ছি । কিন্তু সেখানে বলতেছে you can log in with Facebook account . এখন আমার যদি একটি ফেসবুক অ্যাকাউন্ট থাকেই এবং সে একাউন্ট দিয়ে তাদের ওখানের লগইন করি তাহলে তাদের কি লাভ? কোন কি আদৌ লাভ আছে?
অবশ্যই আছে। আসলে এই ব্যবহারটা তৈরি করা হয়েছে ইউজারদের কে প্যারা মুক্ত করার জন্য। দুনিয়ার যতগুলো ওয়েবসাইট আছে সব ওয়েবসাইটগুলোতে যাব, রেজিস্ট্রেশন করব ইমেইল পাসওয়ার্ড মাথায় রাখবো, তারপর ভেরিফিকেশন করতে হবে মোবাইল ভেরিফিকেশন ইমেইল ভেরিফিকেশন ইত্যাদি ইত্যাদি।
সব মাথায় রাখ, কোন ইমেইল দিয়ে কোন একাউন্ট খুলছিলাম কোন নাম্বার দিয়েছিলাম কি পাসওয়ার্ড দিছিলাম। এত কিছু যেন মনে রাখতে না লাগে তার জন্যই এই ব্যবস্থাটা করা হয়েছে।
আপনার যদি ফেসবুকের অ্যাকাউন্ট থাকে তাহলে অবশ্যই ফেসবুক অ্যাকাউন্ট খোলার সময় আপনার ভেরিফিকেশন নিয়েছে। তো এখন ওই একই ইনফর্মেশন তারা ব্যবহার করে আপনার অ্যাকাউন্ট তৈরি করবে।
কিন্তু ফেসবুকে এই ইনফর্মেশন গুলো কেন দিবে। ফেসবুক দিবে কারণ ফেসবুকের ও এখানে একটা বিজনেস আছে। ফেসবুকের প্রচার বাড়তেছে। তখন ফেসবুক কি করলো তারা একটা API তৈরি করে দিল। এবং তাদের এই API ব্যবহার করে ফেসবুকের ইউজার দের কিছু ইনফরমেশন এক্সেস নিয়ে থাকে।
সেক্ষেত্রে ফেসবুক বলে দে যে যদি ইউজারের কাছে পারমিশন পান সে ক্ষেত্রে কিছু কিছু তথ্য পাইতে পারেন যেমন ফেসবুক প্রোফাইল পিক কভার ফটো এরকম কিছু কিছু ইনফরমেশন ফেসবুকের কাছ থেকে নিতে পারবে। এর থেকে বেশি কিছু পাবেনা।
যে ইনফরমেশনগুলো ফেসবুক তাদেরকে অ্যাক্সিস দিচ্ছে সেই ইনফরমেশন গুলো সেই ওয়েবসাইট গুলোর জন্যে যথেষ্ট।
একটা ওয়েবসাইটের একাউন্ট করার জন্য সাধারণত কি দরকার? একটা নাম দরকার একটা প্রোফাইল পিক ইমেইল দরকার জন্মতারিখ দরকার, এগুলো তারা ফেসবুক থেকেই নিয়ে নিচ্ছে।
ফলে আপনাকে আবার নতুন করে তাদের ওয়েবসাইটে রেজিস্ট্রেশন করতে হচ্ছে না। যখন ওয়েবসাইটটি ফেসবুক থেকেই ডাটাগুলো পেয়ে গেল তখন তারা তাদের ডাটাবেজে ইনফরমেশনগুলো যুক্ত করবে। যাতে পরবর্তীতে আমি যখন তাদের ওয়েবসাইটে লগইন করবো তখন নতুন করে আবার যেন একাউন্টস না খুলতে হয়। এই হচ্ছে প্রধানত এপিআই এর কাজ।
01) Menja by Caleb Millerhttps://codepen.io/MillerTime/pen/BexBbE02) Snake Game by Fariathttps://codepen.io/fariati/pen/mdRpEYP03) Color Blast By Nate Wileyhttps://codepen.io/natewiley/pen/EGyiF04) Bullseye Game By Elliot Genohttps://codepen.io/pyrografix/pen/qrqpJN05) Tower Blocks by Steve Gardnerhttps://codepen.io/ste-vg/full/ppLQNW
06) Pure CSS Tic-tac-toe By Žiga Mikličhttps://codepen.io/ziga-miklic/pen/Fagmh07) Javascript Planet Defence Game By Marc Lópezhttps://codepen.io/Loopez10/full/dMaVdQ08) Flip - card memory game By Codrin Pavelhttps://codepen.io/zerospree/pen/bNWbvW09) COLORON GAME By Greg Hovanesyanhttps://codepen.io/gregh/full/yVLOyO10) A generic Infinite Runner game By Eduardo Lopeshttps://codepen.io/EduardoLopes/pen/IJnAr
wifi: 01761550675 @.7-9.sio.pys.3-9 -------------------------------------- GSS