১. শুরু করার আগে
সিনেমা বা রেস্তোরাঁর সুপারিশ করা থেকে শুরু করে বিনোদনমূলক ভিডিও তুলে ধরা পর্যন্ত, রিকমেন্ডেশন ইঞ্জিন, যা রিকমেন্ডার নামেও পরিচিত, মেশিন লার্নিংয়ের একটি অত্যন্ত গুরুত্বপূর্ণ প্রয়োগ। রিকমেন্ডারগুলো আপনার ব্যবহারকারীদের জন্য বিপুল সংখ্যক সম্ভাব্য কন্টেন্টের ভান্ডার থেকে আকর্ষণীয় বিষয়বস্তু তুলে ধরতে সাহায্য করে। উদাহরণস্বরূপ, গুগল প্লে স্টোরে ইনস্টল করার জন্য লক্ষ লক্ষ অ্যাপ রয়েছে, অন্যদিকে ইউটিউবে দেখার জন্য রয়েছে শত শত কোটি ভিডিও। এবং প্রতিদিন আরও নতুন নতুন অ্যাপ ও ভিডিও যুক্ত হচ্ছে।
এই কোডল্যাবে, আপনি নিম্নলিখিতগুলি ব্যবহার করে একটি ফুলস্ট্যাক রিকমেন্ডার তৈরি করতে শিখবেন:
- মুভি সুপারিশের জন্য একটি রিট্রিভাল এবং একটি র্যাঙ্কিং মডেলকে প্রশিক্ষণ দিতে TensorFlow Recommenders ব্যবহার করা হয়।
- TensorFlow মডেলগুলি পরিবেশন করার জন্য ব্যবহৃত হয়।
- ফ্লাটার ব্যবহার করে সুপারিশকৃত সিনেমা দেখানোর জন্য একটি ক্রস-প্ল্যাটফর্ম অ্যাপ তৈরি করুন।
পূর্বশর্ত
- ডার্ট সহ ফ্লাটার ডেভেলপমেন্টের প্রাথমিক জ্ঞান
- TensorFlow ব্যবহার করে মেশিন লার্নিং-এর প্রাথমিক জ্ঞান, যেমন ট্রেনিং এবং ডেপ্লয়মেন্ট।
- সুপারিশ সিস্টেম সম্পর্কে প্রাথমিক পরিচিতি
- পাইথন, টার্মিনাল ও ডকার সম্পর্কে প্রাথমিক জ্ঞান।
আপনি যা শিখবেন
- TensorFlow Recommenders ব্যবহার করে কীভাবে রিট্রিভাল এবং র্যাঙ্কিং মডেল প্রশিক্ষণ দেওয়া যায়
- TensorFlow Serving ব্যবহার করে প্রশিক্ষিত সুপারিশ মডেলগুলি কীভাবে পরিবেশন করবেন
- সুপারিশকৃত আইটেমগুলো দেখানোর জন্য কীভাবে একটি ক্রস-প্ল্যাটফর্ম ফ্লাটার অ্যাপ তৈরি করবেন
আপনার যা যা লাগবে
- ফ্লাটার এসডিকে
- ফ্লাটারের জন্য অ্যান্ড্রয়েড এবং আইওএস সেটআপ
- ফ্লাটারের জন্য ডেস্কটপ সেটআপ
- ফ্লাটারের জন্য ওয়েব সেটআপ
- ফ্লাটার এবং ডার্টের জন্য ভিজ্যুয়াল স্টুডিও কোড (ভিএস কোড) সেটআপ
- ডকার
- ব্যাশ
- পাইথন ৩.৭+
- কোলাবে প্রবেশাধিকার
২. আপনার ফ্লাটার ডেভেলপমেন্ট পরিবেশ সেট আপ করুন।
ফ্লাটার ডেভেলপমেন্টের জন্য এই কোডল্যাবটি সম্পন্ন করতে আপনার দুটি সফটওয়্যার প্রয়োজন— ফ্লাটার এসডিকে এবং একটি এডিটর ।
আপনি এই ডিভাইসগুলোর যেকোনো একটি ব্যবহার করে কোডল্যাবের ফ্রন্টএন্ড চালাতে পারেন:
- iOS সিমুলেটর (এর জন্য Xcode টুলস ইনস্টল করা প্রয়োজন)।
- অ্যান্ড্রয়েড এমুলেটর (অ্যান্ড্রয়েড স্টুডিওতে সেটআপ করা প্রয়োজন)।
- একটি ব্রাউজার (ডিবাগিংয়ের জন্য ক্রোম আবশ্যক)।
- একটি Windows , Linux , বা macOS ডেস্কটপ অ্যাপ্লিকেশন হিসেবে, আপনাকে অবশ্যই সেই প্ল্যাটফর্মে ডেভেলপ করতে হবে যেখানে আপনি এটি ডেপ্লয় করার পরিকল্পনা করছেন। সুতরাং, আপনি যদি একটি Windows ডেস্কটপ অ্যাপ ডেভেলপ করতে চান, তবে উপযুক্ত বিল্ড চেইন অ্যাক্সেস করার জন্য আপনাকে অবশ্যই Windows-এই ডেভেলপ করতে হবে। অপারেটিং সিস্টেম-ভিত্তিক কিছু নির্দিষ্ট আবশ্যকতা রয়েছে, যা docs.flutter.dev/desktop- এ বিস্তারিতভাবে আলোচনা করা হয়েছে।
ব্যাকএন্ডের জন্য আপনার প্রয়োজন হবে:
- একটি লিনাক্স মেশিন অথবা একটি ইন্টেল-ভিত্তিক ম্যাক।
৩. প্রস্তুত হন
এই কোডল্যাবের কোড ডাউনলোড করতে:
- এই কোডল্যাবটির গিটহাব রিপোজিটরিতে যান।
- এই কোডল্যাবের সমস্ত কোড ডাউনলোড করতে কোড > জিপ ডাউনলোড-এ ক্লিক করুন।

- ডাউনলোড করা জিপ ফাইলটি আনজিপ করলে
codelabs-mainনামের একটি রুট ফোল্ডার পাওয়া যাবে, যেখানে আপনার প্রয়োজনীয় সমস্ত রিসোর্স রয়েছে।
এই কোডল্যাবের জন্য আপনার শুধু রিপোজিটরির tfrs-flutter/ সাবডিরেক্টরিতে থাকা ফাইলগুলো প্রয়োজন, যেটিতে একাধিক ফোল্ডার রয়েছে:
-
step0থেকেstep5ফোল্ডারগুলিতে সেই প্রারম্ভিক কোড রয়েছে, যার উপর ভিত্তি করে আপনি এই কোডল্যাবের প্রতিটি ধাপ তৈরি করবেন। -
finishedফোল্ডারটিতে সম্পূর্ণ নমুনা অ্যাপটির সম্পূর্ণ কোড রয়েছে। - প্রতিটি ফোল্ডারে একটি
backendসাবফোল্ডার থাকে, যেখানে রিকমেন্ডেশন ইঞ্জিনের ব্যাকএন্ড কোড থাকে, এবং একটিfrontendসাবফোল্ডার থাকে, যেখানে ফ্লাটার ফ্রন্টএন্ড কোড থাকে।
৪. প্রজেক্টটির জন্য প্রয়োজনীয় উপাদানগুলো ডাউনলোড করুন।
ব্যাকএন্ড
আমরা আমাদের ব্যাকএন্ড তৈরি করতে ফ্লাস্ক (Flask) ব্যবহার করব। আপনার টার্মিনাল খুলুন এবং নিম্নলিখিত কমান্ডটি চালান:
pip install Flask flask-cors requests numpy
ফ্রন্টএন্ড
- VS Code-এ, File > Open folder-এ ক্লিক করুন এবং তারপরে আপনার আগে ডাউনলোড করা সোর্স কোড থেকে
step0ফোল্ডারটি নির্বাচন করুন। -
step0/frontend/lib/main.dartফাইলটি খুলুন। যদি VS Code-এর কোনো ডায়ালগ বক্স আসে যা আপনাকে স্টার্টার অ্যাপের জন্য প্রয়োজনীয় প্যাকেজগুলো ডাউনলোড করতে বলে, তাহলে 'Get packages'-এ ক্লিক করুন। - যদি আপনি এই ডায়ালগ বক্সটি দেখতে না পান, তাহলে আপনার টার্মিনাল খুলুন এবং
step0/frontendফোল্ডারেflutter pub getকমান্ডটি চালান।

৫. ধাপ ০: স্টার্টার অ্যাপটি চালান
- VS Code-এ
step0/frontend/lib/main.dartফাইলটি খুলুন এবং নিশ্চিত করুন যে Android Emulator অথবা iOS Simulator সঠিকভাবে সেট আপ করা আছে ও স্ট্যাটাস বারে দেখা যাচ্ছে।
উদাহরণস্বরূপ, অ্যান্ড্রয়েড এমুলেটরের সাথে পিক্সেল ৫ ব্যবহার করলে আপনি যা দেখতে পান তা এখানে দেওয়া হলো:

আইওএস সিমুলেটরের সাথে আইফোন ১৩ ব্যবহার করলে আপনি যা দেখতে পাবেন তা এখানে দেওয়া হলো:

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


আপনি এখন ‘Recommend’-এ ক্লিক করলে কিছুই হবে না, কারণ অ্যাপটি এখনও ব্যাকএন্ডের সাথে যোগাযোগ করতে পারছে না।
৬. ধাপ ১: সুপারিশ ইঞ্জিনের জন্য তথ্য পুনরুদ্ধার এবং র্যাঙ্কিং মডেল তৈরি করুন
বাস্তব জগতের সুপারিশ ইঞ্জিনগুলো প্রায়শই একাধিক পর্যায় নিয়ে গঠিত হয়:
- পুনরুদ্ধার পর্যায়টি সমস্ত সম্ভাব্য প্রার্থী থেকে শত শত প্রার্থীর একটি প্রাথমিক সেট নির্বাচন করার জন্য দায়ী। এই মডেলের প্রধান উদ্দেশ্য হলো ব্যবহারকারীর অনাগ্রহী সমস্ত প্রার্থীকে দক্ষতার সাথে বাদ দেওয়া। যেহেতু পুনরুদ্ধার মডেলটি লক্ষ লক্ষ প্রার্থী নিয়ে কাজ করতে পারে, তাই এটিকে গণনাগতভাবে দক্ষ হতে হয়।
- র্যাঙ্কিং পর্যায়টি রিট্রিভাল মডেলের আউটপুটগুলো গ্রহণ করে এবং সেগুলোকে সূক্ষ্মভাবে পরিমার্জন করে সম্ভাব্য সেরা কয়েকটি সুপারিশ নির্বাচন করে। এর কাজ হলো ব্যবহারকারীর আগ্রহের বিষয়গুলোর সেটকে সংকুচিত করে সম্ভাব্য প্রার্থীদের একটি সংক্ষিপ্ত তালিকা তৈরি করা, যা সংখ্যায় কয়েকশ'র মতো হবে।
- র্যাঙ্কিং-পরবর্তী পর্যায়টি বৈচিত্র্য, নতুনত্ব এবং ন্যায্যতা নিশ্চিত করতে সাহায্য করে এবং প্রার্থী আইটেমগুলোকে পুনর্বিন্যাস করে কয়েক ডজনের মতো একগুচ্ছ কার্যকর সুপারিশে পরিণত করে।

এই কোডল্যাবে, আপনি জনপ্রিয় মুভিলেন্স ডেটাসেট ব্যবহার করে একটি রিট্রিভাল মডেল এবং একটি র্যাঙ্কিং মডেলকে প্রশিক্ষণ দেবেন। আপনি নিচের ট্রেনিং কোডটি কোলাবের মাধ্যমে খুলতে এবং নির্দেশাবলী অনুসরণ করতে পারেন:
৭. ধাপ ২: সুপারিশ ইঞ্জিনের ব্যাকএন্ড তৈরি করুন
এখন যেহেতু আপনি রিট্রিভাল এবং র্যাঙ্কিং মডেলগুলোকে প্রশিক্ষণ দিয়েছেন, আপনি সেগুলোকে ডিপ্লয় করতে এবং একটি ব্যাকএন্ড তৈরি করতে পারেন।
TensorFlow পরিবেশন শুরু করুন
যেহেতু প্রস্তাবিত সিনেমার তালিকা তৈরি করতে আপনার ডেটা পুনরুদ্ধার এবং র্যাঙ্কিং উভয় মডেলই ব্যবহার করতে হবে, তাই আপনি TensorFlow Serving ব্যবহার করে একই সাথে উভয় মডেলই স্থাপন করেন।
- আপনার টার্মিনালে, কম্পিউটারের
step2/backendফোল্ডারে যান এবং Docker-এর মাধ্যমে TensorFlow Serving চালু করুন:
docker run -t --rm -p 8501:8501 -p 8500:8500 -v "$(pwd)/:/models/" tensorflow/serving --model_config_file=/models/models.config
ডকার প্রথমে স্বয়ংক্রিয়ভাবে TensorFlow Serving ইমেজটি ডাউনলোড করে, যাতে এক মিনিট সময় লাগে। এরপর TensorFlow Serving চালু হওয়া উচিত। লগটি এই কোড স্নিপেটের মতো দেখতে হবে:
2022-04-24 09:32:06.461702: I tensorflow_serving/model_servers/server_core.cc:465] Adding/updating models.
2022-04-24 09:32:06.461843: I tensorflow_serving/model_servers/server_core.cc:591] (Re-)adding model: retrieval
2022-04-24 09:32:06.461907: I tensorflow_serving/model_servers/server_core.cc:591] (Re-)adding model: ranking
2022-04-24 09:32:06.576920: I tensorflow_serving/core/basic_manager.cc:740] Successfully reserved resources to load servable {name: retrieval version: 123}
2022-04-24 09:32:06.576993: I tensorflow_serving/core/loader_harness.cc:66] Approving load for servable version {name: retrieval version: 123}
2022-04-24 09:32:06.577011: I tensorflow_serving/core/loader_harness.cc:74] Loading servable version {name: retrieval version: 123}
2022-04-24 09:32:06.577848: I external/org_tensorflow/tensorflow/cc/saved_model/reader.cc:38] Reading SavedModel from: /models/retrieval/exported-retrieval/123
2022-04-24 09:32:06.583809: I external/org_tensorflow/tensorflow/cc/saved_model/reader.cc:90] Reading meta graph with tags { serve }
2022-04-24 09:32:06.583879: I external/org_tensorflow/tensorflow/cc/saved_model/reader.cc:132] Reading SavedModel debug info (if present) from: /models/retrieval/exported-retrieval/123
2022-04-24 09:32:06.584970: I external/org_tensorflow/tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX2 FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2022-04-24 09:32:06.629900: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:206] Restoring SavedModel bundle.
2022-04-24 09:32:06.634662: I external/org_tensorflow/tensorflow/core/platform/profile_utils/cpu_utils.cc:114] CPU Frequency: 2800000000 Hz
2022-04-24 09:32:06.672534: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:190] Running initialization op on SavedModel bundle at path: /models/retrieval/exported-retrieval/123
2022-04-24 09:32:06.673629: I tensorflow_serving/core/basic_manager.cc:740] Successfully reserved resources to load servable {name: ranking version: 123}
2022-04-24 09:32:06.673765: I tensorflow_serving/core/loader_harness.cc:66] Approving load for servable version {name: ranking version: 123}
2022-04-24 09:32:06.673786: I tensorflow_serving/core/loader_harness.cc:74] Loading servable version {name: ranking version: 123}
2022-04-24 09:32:06.674731: I external/org_tensorflow/tensorflow/cc/saved_model/reader.cc:38] Reading SavedModel from: /models/ranking/exported-ranking/123
2022-04-24 09:32:06.683557: I external/org_tensorflow/tensorflow/cc/saved_model/reader.cc:90] Reading meta graph with tags { serve }
2022-04-24 09:32:06.683601: I external/org_tensorflow/tensorflow/cc/saved_model/reader.cc:132] Reading SavedModel debug info (if present) from: /models/ranking/exported-ranking/123
2022-04-24 09:32:06.688665: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:277] SavedModel load for tags { serve }; Status: success: OK. Took 110815 microseconds.
2022-04-24 09:32:06.690019: I tensorflow_serving/servables/tensorflow/saved_model_warmup_util.cc:59] No warmup data file found at /models/retrieval/exported-retrieval/123/assets.extra/tf_serving_warmup_requests
2022-04-24 09:32:06.693025: I tensorflow_serving/core/loader_harness.cc:87] Successfully loaded servable version {name: retrieval version: 123}
2022-04-24 09:32:06.702594: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:206] Restoring SavedModel bundle.
2022-04-24 09:32:06.745361: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:190] Running initialization op on SavedModel bundle at path: /models/ranking/exported-ranking/123
2022-04-24 09:32:06.772363: I external/org_tensorflow/tensorflow/cc/saved_model/loader.cc:277] SavedModel load for tags { serve }; Status: success: OK. Took 97633 microseconds.
2022-04-24 09:32:06.774853: I tensorflow_serving/servables/tensorflow/saved_model_warmup_util.cc:59] No warmup data file found at /models/ranking/exported-ranking/123/assets.extra/tf_serving_warmup_requests
2022-04-24 09:32:06.777706: I tensorflow_serving/core/loader_harness.cc:87] Successfully loaded servable version {name: ranking version: 123}
2022-04-24 09:32:06.778969: I tensorflow_serving/model_servers/server_core.cc:486] Finished adding/updating models
2022-04-24 09:32:06.779030: I tensorflow_serving/model_servers/server.cc:367] Profiler service is enabled
2022-04-24 09:32:06.784217: I tensorflow_serving/model_servers/server.cc:393] Running gRPC ModelServer at 0.0.0.0:8500 ...
[warn] getaddrinfo: address family for nodename not supported
2022-04-24 09:32:06.785748: I tensorflow_serving/model_servers/server.cc:414] Exporting HTTP/REST API at:localhost:8501 ...
[evhttp_server.cc : 245] NET_LOG: Entering the event loop ...
একটি নতুন এন্ডপয়েন্ট তৈরি করুন
যেহেতু TensorFlow Serving একাধিক ধারাবাহিক মডেলকে 'চেইন' করা সমর্থন করে না, তাই আপনাকে একটি নতুন সার্ভিস তৈরি করতে হবে যা রিট্রিভাল এবং র্যাঙ্কিং মডেলগুলোকে সংযুক্ত করবে।
-
step2/backend/recommendations.pyফাইলেরget_recommendations()ফাংশনে এই কোডটি যোগ করুন:
user_id = request.get_json()["user_id"]
retrieval_request = json.dumps({"instances": [user_id]})
retrieval_response = requests.post(RETRIEVAL_URL, data=retrieval_request)
movie_candidates = retrieval_response.json()["predictions"][0]["output_2"]
ranking_queries = [
{"user_id": u, "movie_title": m}
for (u, m) in zip([user_id] * NUM_OF_CANDIDATES, movie_candidates)
]
ranking_request = json.dumps({"instances": ranking_queries})
ranking_response = requests.post(RANKING_URL, data=ranking_request)
movies_scores = list(np.squeeze(ranking_response.json()["predictions"]))
ranked_movies = [
m[1] for m in sorted(list(zip(movies_scores, movie_candidates)), reverse=True)
]
return make_response(jsonify({"movies": ranked_movies}), 200)
ফ্লাস্ক পরিষেবা শুরু করুন
এখন আপনি ফ্লাস্ক সার্ভিসটি চালু করতে পারেন।
- আপনার টার্মিনালে
step2/backend/ফোল্ডারে যান এবং নিম্নলিখিত কমান্ডটি চালান:
FLASK_APP=recommender.py FLASK_ENV=development flask run
Flask http://localhost:5000/recommend ঠিকানায় একটি নতুন এন্ডপয়েন্ট তৈরি করবে। আপনি নিচের মতো লগ দেখতে পাবেন:
* Serving Flask app 'recommender.py' (lazy loading) * Environment: development * Debug mode: on * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger PIN: 705-382-264 127.0.0.1 - - [25/Apr/2022 19:44:47] "POST /recommend HTTP/1.1" 200 -
এন্ডপয়েন্টটি প্রত্যাশা অনুযায়ী কাজ করছে কিনা তা নিশ্চিত করতে আপনি সেখানে একটি নমুনা অনুরোধ পাঠাতে পারেন:
curl -X POST -H "Content-Type: application/json" -d '{"user_id":"42"}' http://localhost:5000/recommend
এন্ডপয়েন্টটি ব্যবহারকারী 42 এর জন্য সুপারিশকৃত চলচ্চিত্রের একটি তালিকা ফেরত দেবে:
{
"movies": [
"While You Were Sleeping (1995)",
"Preacher's Wife, The (1996)",
"Michael (1996)",
"Lion King, The (1994)",
"Father of the Bride Part II (1995)",
"Sleepless in Seattle (1993)",
"101 Dalmatians (1996)",
"Bridges of Madison County, The (1995)",
"Rudy (1993)",
"Jack (1996)"
]
}
ব্যাস! আপনি সফলভাবে ইউজার আইডির উপর ভিত্তি করে মুভি সুপারিশ করার জন্য একটি ব্যাকএন্ড তৈরি করেছেন।
৮. ধাপ ৩: অ্যান্ড্রয়েড এবং আইওএস-এর জন্য ফ্লাটার অ্যাপ তৈরি করুন
ব্যাকএন্ড প্রস্তুত। আপনি ফ্লাটার অ্যাপ থেকে সিনেমার সুপারিশ জানতে এতে অনুরোধ পাঠানো শুরু করতে পারেন।
ফ্রন্টএন্ড অ্যাপটি বেশ সহজ। এতে শুধু একটি টেক্সটফিল্ড আছে, যা ইউজার আইডি গ্রহণ করে এবং আপনার তৈরি করা ব্যাকএন্ডে ( recommend() ফাংশনের মাধ্যমে) রিকোয়েস্ট পাঠায়। রেসপন্স পাওয়ার পর, অ্যাপের UI একটি ListView-তে রেকমেন্ড করা সিনেমাগুলো প্রদর্শন করে।
-
step3/frontend/lib/main.dartফাইলেরrecommend()ফাংশনে এই কোডটি যোগ করুন:
final response = await http.post(
Uri.parse('http://' + _server + ':5000/recommend'),
headers: <String, String>{
'Content-Type': 'application/json',
},
body: jsonEncode(<String, String>{
'user_id': _userIDController.text,
}),
);
অ্যাপটি ব্যাকএন্ড থেকে প্রতিক্রিয়া পাওয়ার পর, আপনি নির্দিষ্ট ব্যবহারকারীর জন্য প্রস্তাবিত চলচ্চিত্রের তালিকা প্রদর্শন করতে UI আপডেট করবেন।
- উপরের কোডটির ঠিক নিচে এই কোডটি যোগ করুন:
if (response.statusCode == 200) {
return List<String>.from(jsonDecode(response.body)['movies']);
} else {
throw Exception('Error response');
}
এটা চালান
- ক্লিক করুন
ডিবাগিং শুরু করুন এবং তারপর অ্যাপটি লোড হওয়ার জন্য অপেক্ষা করুন। - একটি ইউজার আইডি (যেমন, ৪২) প্রবেশ করান এবং তারপর ‘রেকমেন্ড’ নির্বাচন করুন।


৯. ধাপ ৪: ডেস্কটপ প্ল্যাটফর্মগুলিতে ফ্লাটার অ্যাপটি চালান।
অ্যান্ড্রয়েড এবং আইওএস ছাড়াও ফ্লাটার লিনাক্স, ম্যাক এবং উইন্ডোজ সহ বিভিন্ন ডেস্কটপ প্ল্যাটফর্ম সমর্থন করে।
লিনাক্স
- নিশ্চিত করুন যে টার্গেট ডিভাইসটি সেট করা আছে
VSCode-এর স্ট্যাটাস বারে। - ক্লিক করুন
ডিবাগিং শুরু করুন এবং তারপর অ্যাপটি লোড হওয়ার জন্য অপেক্ষা করুন। - একটি ইউজার আইডি (যেমন, ৪২) প্রবেশ করান এবং তারপর ‘রেকমেন্ড’ নির্বাচন করুন।

ম্যাক
- ম্যাকের জন্য, আপনাকে যথাযথ এনটাইটেলমেন্ট সেট আপ করতে হবে, কারণ অ্যাপটি ব্যাকএন্ডে HTTP রিকোয়েস্ট পাঠাবে। আরও বিস্তারিত জানতে অনুগ্রহ করে এনটাইটেলমেন্ট এবং অ্যাপ স্যান্ডবক্স দেখুন।
এই কোডটি যথাক্রমে step4/frontend/macOS/Runner/DebugProfile.entitlements এবং step4/frontend/macOS/Runner/Release.entitlements ফাইলে যোগ করুন:
<key>com.apple.security.network.client</key>
<true/>
- নিশ্চিত করুন যে টার্গেট ডিভাইসটি সেট করা আছে
VSCode-এর স্ট্যাটাস বারে। - ক্লিক করুন
ডিবাগিং শুরু করুন এবং তারপর অ্যাপটি লোড হওয়ার জন্য অপেক্ষা করুন। - একটি ইউজার আইডি (যেমন, ৪২) প্রবেশ করান এবং তারপর ‘রেকমেন্ড’ নির্বাচন করুন।

উইন্ডোজ
- নিশ্চিত করুন যে টার্গেট ডিভাইসটি সেট করা আছে
VSCode-এর স্ট্যাটাস বারে। - ক্লিক করুন
ডিবাগিং শুরু করুন এবং তারপর অ্যাপটি লোড হওয়ার জন্য অপেক্ষা করুন। - একটি ইউজার আইডি (যেমন, ৪২) প্রবেশ করান এবং তারপর ‘রেকমেন্ড’ নির্বাচন করুন।

১০. ধাপ ৫: ওয়েব প্ল্যাটফর্মে ফ্লাটার অ্যাপটি চালান
আরও একটি কাজ আপনি করতে পারেন, তা হলো ফ্লাটার অ্যাপে ওয়েব সাপোর্ট যোগ করা। ডিফল্টভাবে ফ্লাটার অ্যাপগুলোর জন্য ওয়েব প্ল্যাটফর্ম স্বয়ংক্রিয়ভাবে সক্রিয় থাকে, তাই আপনাকে শুধু এটি চালু করতে হবে।
- নিশ্চিত করুন যে টার্গেট ডিভাইসটি সেট করা আছে
VSCode-এর স্ট্যাটাস বারে। - ক্লিক করুন
ডিবাগিং শুরু করুন এবং তারপর ক্রোম ব্রাউজারে অ্যাপটি লোড হওয়ার জন্য অপেক্ষা করুন। - একটি ইউজার আইডি (যেমন, ৪২) প্রবেশ করান এবং তারপর ‘রেকমেন্ড’ নির্বাচন করুন।

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