শুরু করুন: লিখুন, পরীক্ষা করুন এবং আপনার প্রথম ফাংশন স্থাপন করুন


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

  • একটি "বার্তা যোগ করুন" ফাংশন যা একটি URL প্রকাশ করে যা একটি পাঠ্য মান গ্রহণ করে এবং এটি ক্লাউড ফায়ারস্টোরে লিখে।
  • একটি "মেক বড় হাতের" ফাংশন যা একটি ক্লাউড ফায়ারস্টোর লিখতে ট্রিগার করে এবং পাঠ্যটিকে বড় হাতের অক্ষরে রূপান্তরিত করে।

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

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

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

  1. Firebase কনসোলে , প্রজেক্ট যোগ করুন ক্লিক করুন।

    • একটি বিদ্যমান Google ক্লাউড প্রকল্পে Firebase সংস্থান যোগ করতে, এর প্রকল্পের নাম লিখুন বা ড্রপডাউন মেনু থেকে এটি নির্বাচন করুন৷

    • একটি নতুন প্রকল্প তৈরি করতে, পছন্দসই প্রকল্পের নাম লিখুন। এছাড়াও আপনি ঐচ্ছিকভাবে প্রকল্পের নামের নীচে প্রদর্শিত প্রকল্প ID সম্পাদনা করতে পারেন৷

  2. অনুরোধ করা হলে, Firebase শর্তাবলী পর্যালোচনা করুন এবং স্বীকার করুন।

  3. অবিরত ক্লিক করুন.

  4. (ঐচ্ছিক) আপনার প্রোজেক্টের জন্য Google Analytics সেট আপ করুন, যা আপনাকে নিম্নলিখিত Firebase পণ্যগুলির যেকোনো একটি ব্যবহার করে সর্বোত্তম অভিজ্ঞতা পেতে সক্ষম করে:

    হয় একটি বিদ্যমান Google Analytics অ্যাকাউন্ট নির্বাচন করুন বা একটি নতুন অ্যাকাউন্ট তৈরি করুন৷

    আপনি যদি একটি নতুন অ্যাকাউন্ট তৈরি করেন, আপনার অ্যানালিটিক্স রিপোর্টিং অবস্থান নির্বাচন করুন, তারপর আপনার প্রকল্পের জন্য ডেটা শেয়ারিং সেটিংস এবং Google Analytics শর্তাদি গ্রহণ করুন৷

  5. প্রোজেক্ট তৈরি করুন ক্লিক করুন (বা ফায়ারবেস যোগ করুন , যদি আপনি একটি বিদ্যমান Google ক্লাউড প্রকল্প ব্যবহার করেন)।

Firebase স্বয়ংক্রিয়ভাবে আপনার Firebase প্রকল্পের জন্য সংস্থান সরবরাহ করে। প্রক্রিয়াটি সম্পূর্ণ হলে, আপনাকে Firebase কনসোলে আপনার Firebase প্রকল্পের ওভারভিউ পৃষ্ঠায় নিয়ে যাওয়া হবে।

Node.js এবং Firebase CLI সেট আপ করুন

ফাংশন লিখতে আপনার একটি Node.js পরিবেশের প্রয়োজন হবে এবং ক্লাউড ফাংশন রানটাইমে ফাংশন স্থাপন করতে আপনার Firebase CLI প্রয়োজন হবে। Node.js এবং npm ইনস্টল করার জন্য, নোড সংস্করণ ম্যানেজার সুপারিশ করা হয়।

আপনার Node.js এবং npm ইনস্টল হয়ে গেলে, আপনার পছন্দের পদ্ধতির মাধ্যমে Firebase CLI ইনস্টল করুন । npm এর মাধ্যমে CLI ইনস্টল করতে, ব্যবহার করুন:

npm install -g firebase-tools

এটি বিশ্বব্যাপী উপলব্ধ ফায়ারবেস কমান্ড ইনস্টল করে। কমান্ড ব্যর্থ হলে, আপনাকে npm অনুমতি পরিবর্তন করতে হতে পারে। firebase-tools এর সর্বশেষ সংস্করণে আপডেট করতে, একই কমান্ড পুনরায় চালু করুন।

আপনার প্রকল্প শুরু করুন

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

আপনার প্রকল্প শুরু করতে:

  1. ব্রাউজারের মাধ্যমে লগ ইন করতে firebase login চালান এবং Firebase CLI প্রমাণীকরণ করুন।
  2. আপনার ফায়ারবেস প্রকল্প ডিরেক্টরিতে যান।
  3. firebase init firestore চালান। এই টিউটোরিয়ালের জন্য, Firestore নিয়ম এবং সূচী ফাইলের জন্য অনুরোধ করা হলে আপনি ডিফল্ট মানগুলি গ্রহণ করতে পারেন। আপনি যদি এখনও এই প্রকল্পে ক্লাউড ফায়ারস্টোর ব্যবহার না করে থাকেন, তবে আপনাকে ক্লাউড ফায়ারস্টোরের সাথে শুরু করুন- এ বর্ণিত Firestore-এর জন্য একটি শুরুর মোড এবং অবস্থান নির্বাচন করতে হবে।
  4. firebase init functions চালান। CLI আপনাকে একটি বিদ্যমান কোডবেস বেছে নিতে বা শুরু করতে এবং একটি নতুন নাম দিতে অনুরোধ করে। আপনি যখন সবে শুরু করছেন, ডিফল্ট অবস্থানে একটি একক কোডবেস পর্যাপ্ত; পরে, আপনার বাস্তবায়ন প্রসারিত হওয়ার সাথে সাথে আপনি কোডবেসে ফাংশন সংগঠিত করতে চাইতে পারেন।
  5. CLI আপনাকে ভাষা সমর্থনের জন্য দুটি বিকল্প দেয়:

    এই টিউটোরিয়ালের জন্য, JavaScript নির্বাচন করুন।

  6. CLI আপনাকে npm এর সাথে নির্ভরতা ইনস্টল করার একটি বিকল্প দেয়। আপনি যদি অন্য উপায়ে নির্ভরতা পরিচালনা করতে চান তবে প্রত্যাখ্যান করা নিরাপদ, যদিও আপনি যদি অস্বীকার করেন তবে আপনার ফাংশনগুলি অনুকরণ বা স্থাপন করার আগে আপনাকে npm install চালাতে হবে।

এই কমান্ডগুলি সফলভাবে সম্পূর্ণ হওয়ার পরে, আপনার প্রকল্পের কাঠামোটি এইরকম দেখায়:

myproject
 +- .firebaserc    # Hidden file that helps you quickly switch between
 |                 # projects with `firebase use`
 |
 +- firebase.json  # Describes properties for your project
 |
 +- functions/     # Directory containing all your functions code
      |
      +- .eslintrc.json  # Optional file containing rules for JavaScript linting.
      |
      +- package.json  # npm package file describing your Cloud Functions code
      |
      +- index.js      # main source file for your Cloud Functions code
      |
      +- node_modules/ # directory where your dependencies (declared in
                       # package.json) are installed

শুরু করার সময় তৈরি করা package.json ফাইলটিতে একটি গুরুত্বপূর্ণ কী রয়েছে: "engines": {"node": "16"} । এটি ফাংশন লেখা এবং স্থাপনের জন্য আপনার Node.js সংস্করণ নির্দিষ্ট করে। আপনি অন্যান্য সমর্থিত সংস্করণ নির্বাচন করতে পারেন।

প্রয়োজনীয় মডিউল আমদানি করুন এবং একটি অ্যাপ শুরু করুন

আপনি সেটআপের কাজগুলি সম্পন্ন করার পরে, আপনি উৎস ডিরেক্টরি খুলতে পারেন এবং নিম্নলিখিত বিভাগে বর্ণিত কোড যোগ করা শুরু করতে পারেন। এই নমুনার জন্য, আপনার প্রোজেক্টকে অবশ্যই ক্লাউড ফাংশন এবং অ্যাডমিন SDK মডিউল ব্যবহার করে নোডের require বিবৃতি আমদানি করতে হবে। আপনার index.js ফাইলে নিচের মত লাইন যোগ করুন:

// The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
const functions = require('firebase-functions/v1');

// The Firebase Admin SDK to access Firestore.
const admin = require("firebase-admin");
admin.initializeApp();

এই লাইনগুলি firebase-functions এবং firebase-admin মডিউলগুলিকে লোড করে এবং একটি admin অ্যাপ ইনস্ট্যান্স শুরু করে যেখান থেকে ক্লাউড ফায়ারস্টোর পরিবর্তন করা যেতে পারে। যেখানেই অ্যাডমিন SDK সমর্থন পাওয়া যায়, যেমন এটি FCM, প্রমাণীকরণ এবং Firebase রিয়েলটাইম ডেটাবেসের জন্য, এটি ক্লাউড ফাংশন ব্যবহার করে Firebase সংহত করার একটি শক্তিশালী উপায় প্রদান করে৷

আপনি যখন আপনার প্রকল্প শুরু করেন তখন Firebase CLI স্বয়ংক্রিয়ভাবে ক্লাউড ফাংশন নোড মডিউলগুলির জন্য Firebase এবং Firebase SDK ইনস্টল করে। আপনার প্রকল্পে 3য় পক্ষের লাইব্রেরি যোগ করতে, আপনি package.json পরিবর্তন করতে পারেন এবং npm install চালাতে পারেন। আরও তথ্যের জন্য, নির্ভরতা পরিচালনা করুন দেখুন।

addMessage() ফাংশন যোগ করুন

addMessage() ফাংশনের জন্য, এই লাইনগুলি index.js এ যোগ করুন:

// Take the text parameter passed to this HTTP endpoint and insert it into
// Firestore under the path /messages/:documentId/original
exports.addMessage = functions.https.onRequest(async (req, res) => {
  // Grab the text parameter.
  const original = req.query.text;
  // Push the new message into Firestore using the Firebase Admin SDK.
  const writeResult = await admin
    .firestore()
    .collection("messages")
    .add({ original: original });
  // Send back a message that we've successfully written the message
  res.json({ result: `Message with ID: ${writeResult.id} added.` });
});

addMessage() ফাংশনটি একটি HTTP এন্ডপয়েন্ট। এন্ডপয়েন্টের যেকোনো অনুরোধের ফলাফল এক্সপ্রেসজেএস-স্টাইলের রিকোয়েস্ট এবং রেসপন্স অবজেক্টে যা onRequest() কলব্যাকে পাস করা হয়।

HTTP ফাংশনগুলি সিঙ্ক্রোনাস ( কলযোগ্য ফাংশনগুলির অনুরূপ), তাই আপনার যত তাড়াতাড়ি সম্ভব একটি প্রতিক্রিয়া পাঠানো উচিত এবং ক্লাউড ফায়ারস্টোর ব্যবহার করে কাজ স্থগিত করা উচিত৷ addMessage() HTTP ফাংশন HTTP এন্ডপয়েন্টে একটি টেক্সট মান পাস করে এবং পাথ /messages/:documentId/original অধীনে ডাটাবেসে সন্নিবেশ করে।

makeUppercase() ফাংশন যোগ করুন

makeUppercase() ফাংশনের জন্য, এই লাইনগুলি index.js এ যোগ করুন:

// Listens for new messages added to /messages/:documentId/original and creates an
// uppercase version of the message to /messages/:documentId/uppercase
exports.makeUppercase = functions.firestore
  .document("/messages/{documentId}")
  .onCreate((snap, context) => {
    // Grab the current value of what was written to Firestore.
    const original = snap.data().original;

    // Access the parameter `{documentId}` with `context.params`
    functions.logger.log("Uppercasing", context.params.documentId, original);

    const uppercase = original.toUpperCase();

    // You must return a Promise when performing asynchronous tasks inside a Functions such as
    // writing to Firestore.
    // Setting an 'uppercase' field in Firestore document returns a Promise.
    return snap.ref.set({ uppercase }, { merge: true });
  });

ক্লাউড ফায়ারস্টোরে লেখা হলে makeUppercase() ফাংশনটি কার্যকর হয়। ref.set ফাংশনটি শোনার জন্য নথিটিকে সংজ্ঞায়িত করে। কর্মক্ষমতা কারণে, আপনি যতটা সম্ভব নির্দিষ্ট হতে হবে.

ধনুর্বন্ধনী—উদাহরণস্বরূপ, {documentId} — "প্যারামিটার", ওয়াইল্ডকার্ডগুলিকে ঘিরে থাকে যা কলব্যাকে তাদের মিলিত ডেটা প্রকাশ করে৷

ক্লাউড ফায়ারস্টোর যখনই নতুন বার্তা যোগ করা হয় তখন onCreate() কলব্যাক ট্রিগার করে।

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

আপনার ফাংশন সঞ্চালন অনুকরণ

ফায়ারবেস লোকাল এমুলেটর স্যুট আপনাকে ফায়ারবেস প্রোজেক্টে স্থাপন করার পরিবর্তে আপনার স্থানীয় মেশিনে অ্যাপ তৈরি এবং পরীক্ষা করার অনুমতি দেয়। উন্নয়নের সময় স্থানীয় পরীক্ষার দৃঢ়ভাবে সুপারিশ করা হয়, কারণ এটি কোডিং ত্রুটির ঝুঁকি কমায় যা উৎপাদন পরিবেশে সম্ভাব্য খরচ বহন করতে পারে (উদাহরণস্বরূপ, একটি অসীম লুপ)।

আপনার ফাংশন অনুকরণ করতে:

  1. firebase emulators:start এবং পরীক্ষা করুন। এটি স্থানীয় হোস্টে ডিফল্ট: 4000 , কিন্তু আপনার মেশিনে একটি ভিন্ন পোর্টে হোস্ট করা হতে পারে। এমুলেটর স্যুট UI খুলতে আপনার ব্রাউজারে সেই URLটি লিখুন।

  2. HTTP ফাংশন addMessage() এর URL-এর জন্য firebase emulators:start কমান্ডের আউটপুট পরীক্ষা করুন। এটি দেখতে http://localhost:5001/MY_PROJECT/us-central1/addMessage এর মত হবে, তা ছাড়া:

    1. MY_PROJECT আপনার প্রকল্প আইডি দিয়ে প্রতিস্থাপিত হবে।
    2. আপনার স্থানীয় মেশিনে পোর্ট ভিন্ন হতে পারে।
  3. ফাংশনের URL-এর শেষে প্রশ্ন স্ট্রিং ?text=uppercaseme যোগ করুন। এটির মতো দেখতে হবে: http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme ঐচ্ছিকভাবে, আপনি "বড় হাতের অক্ষর" বার্তাটিকে একটি কাস্টম বার্তাতে পরিবর্তন করতে পারেন৷

  4. আপনার ব্রাউজারে একটি নতুন ট্যাবে URLটি খুলে একটি নতুন বার্তা তৈরি করুন৷

  5. এমুলেটর স্যুট UI-তে ফাংশনগুলির প্রভাবগুলি দেখুন:

    1. লগ ট্যাবে, আপনি নতুন লগগুলি দেখতে পাবেন যা নির্দেশ করে যে ফাংশন addMessage() এবং makeUppercase() রান করেছে:

      i functions: Beginning execution of "addMessage"

      i functions: Beginning execution of "makeUppercase"

    2. Firestore ট্যাবে, আপনি একটি নথি দেখতে পাবেন যেখানে আপনার আসল বার্তার পাশাপাশি আপনার বার্তার বড় হাতের সংস্করণ রয়েছে (যদি এটি মূলত "বড় হাতের অক্ষর" হয় তবে আপনি "UPPERCASEME" দেখতে পাবেন)।

একটি উত্পাদন পরিবেশে ফাংশন স্থাপন

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

টিউটোরিয়াল সম্পূর্ণ করতে, আপনার ফাংশন স্থাপন করুন এবং তারপর makeUppercase() ট্রিগার করতে addMessage() চালান।

  1. আপনার ফাংশন স্থাপন করতে এই কমান্ডটি চালান:

     firebase deploy --only functions
     

    আপনি এই কমান্ডটি চালানোর পরে, Firebase CLI যেকোনো HTTP ফাংশন এন্ডপয়েন্টের জন্য URL আউটপুট করে। আপনার টার্মিনালে, আপনি নিম্নলিখিত মত একটি লাইন দেখতে হবে:

    Function URL (addMessage): https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage
    

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

    আপনি যদি অ্যাক্সেস ত্রুটির সম্মুখীন হন যেমন "প্রজেক্টে অ্যাক্সেস অনুমোদন করতে অক্ষম", আপনার প্রোজেক্ট এলিয়াসিং চেক করার চেষ্টা করুন৷

  2. CLI দ্বারা addMessage() URL আউটপুট ব্যবহার করে, একটি পাঠ্য ক্যোয়ারী প্যারামিটার যোগ করুন এবং এটি একটি ব্রাউজারে খুলুন:

    https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage?text=uppercasemetoo
    

    ফাংশনটি এক্সিকিউট করে এবং ব্রাউজারটিকে ফায়ারবেস কনসোলে ডাটাবেস অবস্থানে রিডাইরেক্ট করে যেখানে টেক্সট স্ট্রিং সংরক্ষণ করা হয়। এই লেখার ঘটনাটি makeUppercase() ট্রিগার করে, যা স্ট্রিংয়ের একটি বড় হাতের সংস্করণ লেখে।

ফাংশন স্থাপন এবং কার্যকর করার পরে, আপনি Google ক্লাউড কনসোলে লগ দেখতে পারেন। আপনি যদি ডেভেলপমেন্ট বা প্রোডাকশনে ফাংশন মুছে ফেলতে চান, তাহলে Firebase CLI ব্যবহার করুন।

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

সম্পূর্ণ নমুনা কোড পর্যালোচনা করুন

এখানে addMessage() এবং makeUppercase() ফাংশন ধারণকারী সম্পূর্ণ functions/index.js আছে। এই ফাংশনগুলি আপনাকে একটি HTTP এন্ডপয়েন্টে একটি প্যারামিটার পাস করতে দেয় যা ক্লাউড ফায়ারস্টোরে একটি মান লেখে এবং তারপর স্ট্রিংয়ের সমস্ত অক্ষরকে বড় করে রূপান্তর করে।

// The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
const functions = require('firebase-functions/v1');

// The Firebase Admin SDK to access Firestore.
const admin = require("firebase-admin");
admin.initializeApp();

// Take the text parameter passed to this HTTP endpoint and insert it into
// Firestore under the path /messages/:documentId/original
exports.addMessage = functions.https.onRequest(async (req, res) => {
  // Grab the text parameter.
  const original = req.query.text;
  // Push the new message into Firestore using the Firebase Admin SDK.
  const writeResult = await admin
    .firestore()
    .collection("messages")
    .add({ original: original });
  // Send back a message that we've successfully written the message
  res.json({ result: `Message with ID: ${writeResult.id} added.` });
});

// Listens for new messages added to /messages/:documentId/original and creates an
// uppercase version of the message to /messages/:documentId/uppercase
exports.makeUppercase = functions.firestore
  .document("/messages/{documentId}")
  .onCreate((snap, context) => {
    // Grab the current value of what was written to Firestore.
    const original = snap.data().original;

    // Access the parameter `{documentId}` with `context.params`
    functions.logger.log("Uppercasing", context.params.documentId, original);

    const uppercase = original.toUpperCase();

    // You must return a Promise when performing asynchronous tasks inside a Functions such as
    // writing to Firestore.
    // Setting an 'uppercase' field in Firestore document returns a Promise.
    return snap.ref.set({ uppercase }, { merge: true });
  });

পরবর্তী পদক্ষেপ

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

ক্লাউড ফাংশন সম্পর্কে আরও জানতে, আপনি নিম্নলিখিতগুলিও করতে পারেন: