বিটোর্সভ '১৯ অ্যাপটি কীভাবে বাস্তবায়ন হয়েছিল
পটভূমি: প্যানথিয়ন '১৭ ⏪
প্রায় দু বছর আগে, সেপ্টেম্বর ২০১৭-এ, একজন বন্ধু অশঙ্ক আনশুমান আমাকে আমাদের ইনস্টিটিউটের টেক ফেস্টের জন্য একটি অ্যাপে কাজ করতে 확신 করাল। আমরা প্রায় দু সপ্তাহ দিন-রাত কাজ করেছি, ঠিক ফেস্টের সময়ে রিলিজের জন্য প্রস্তুত করতে। যদিও আমরা ক্লান্ত হয়ে গেছিলাম, এটি একটি চমৎকার অনুভূতি ছিল, কিছু 'বাহিরে' পাওয়া, প্রোডাকশনে, যা মানুষ আসলে ব্যবহার করল! এটি তার উদ্দেশ্য সম্পূর্ণ সফলভাবে পূরণ করেছিল, অর্গানাইজারদের সহজে সবকিছু পার্টিসিপ্যান্টদের যেতে সাহায্য করে।
প্যানথিয়ন '১৭ - Google Play-এ অ্যাপস
তরুণদের প্রযুক্তিগত দক্ষতা প্রদর্শনের জন্য একটি জাতীয় প্ল্যাটফর্ম প্রদান করার উদ্দেশ্যে…play.google.com
এটি ১২০টি রিভিউয়ের সাথে ৪.৯ রেটিং পেয়েছিল, যা Google-এর বটস किन्हीं কারণে সরিয়ে দিল, কিন্তু তা অন্য সময়ের কথা। আমাদের কোড শেয়ার করার কিছু অনুরোধ পেয়েছিলাম, কিন্তু আমরা অস্বীকার করলাম, অনেক কারণ দ্বারা—বিশেষ করে কারণ আমরা কোডটি নিয়ে, বিশেষ করে শেষ সময়ে হড়বড়িতে করা অংশগুলো নিয়ে, সন্তুষ্ট نبودাম। আমাদের কাছে মানুষদের শেখার বা ব্যবহার করার জন্য যথেষ্ট ভালো কোড লিখতে পর্যাপ্ত সময় ও অভিজ্ঞতা ছিল না।
এবার আবার! ?
নভেম্বর ২০১৮-এ দ্রুত ফরওয়ার্ড: অঙ্কিত আগ্রওয়াল (সে 'ফেস্ট গাই') আমাকে বিটোর্সভ, আমাদের বার্ষিক সোসিও-কালচারাল ফেস্টের টিমে যোগ দিতে বলল, যা আমি মেনে নিলাম কারণ আমি অ্যান্ড্রয়েডে ফিরে যাওয়ার কোনো বহানা খুঁজছিলাম। এই বার আমি অশঙ্ককে (অনেক متأললে!) অ্যাপে কাজ করার জন্য রাজি করলাম।
ডিসেম্বর-এ আমরা অনেক কিছু করিনি, কিন্তু আমি আর্কিটেকচার কম্পোনেন্টস, অ্যান্ড্রয়েডএক্স, জেটপ্যাক ইত্যাদি সম্পর্কে পড়তে শুরু করলাম। আমি গত কয়েক মাসে কোটলিনের সাথে পরিচিত হচ্ছিলাম, যেখানে দুটি কোর্স খুব সহায়ক ছিল: হাদি হারিরির দুই-ভাগের কোর্স এবং একটি আরও সাম্প্রতিক কোর্স স্বেতলানা ইসাকোভার এবং আন্দ্রে ব্রেসলাভের (যা কোটলিনকনফ ২০১৮-এ পরিচয় করाया गया)। কোটলিন সুতরাং অ্যাপের জন্য স্বভাবিক পছন্দ ছিল।
Introduction to Kotlin Programming
Kotlin 1.0 was released in February 2016, and since that time it's been embraced by developers around the world…shop.oreilly.com
Kotlin for Java Developers | Coursera
Kotlin for Java Developers from JetBrains. The Kotlin programming language is a modern language that gives you more…www.coursera.org
সিদ্ধান্ত ?
জানুয়ারির প্রথম অর্ধেকও কোনো কোড না লিখে কাটল, কারণ আমি ব্যস্ত ছিলাম এবং ১৬ জানুয়ারি পর্যন্ত কলেজে পৌঁছাতে পারিনি। তবে, আমরা কিছু বড় সিদ্ধান্ত নিয়েছিলাম:
- শুধু কোটলিন ব্যবহার করব
- ফিচার-ভিত্তিক প্যাকেজিং ব্যবহার করব
- অ্যান্ড্রয়েডএক্স সহ জেটপ্যাক আর্কিটেকচার কম্পোনেন্টস ব্যবহার করব
- API 21 ক্যո Min API (API 22 ভালো হতে পারত)
- Android Studio Canary ব্যবহার করব
- Git Flow & SemVer ব্যবহার করব
- ফেস্টের পর কোড পাবলিক করার যোগ্য লিখব ?

মোটামুটি, ২০১৭-এ অ্যাপ ডেভেলপমেন্টের অভিজ্ঞতা থেকে ২০১৯-এ ব্লিডিং এজে একটি হার্ড রিসেট। এটিwirklich excitating ছিল, কিন্তু বড় চ্যালেঞ্জও ছিল।
কোড কোড কোড! ?
আমরা সিদ্ধান্ত নিয়েছিলাম যে অশঙ্ক অ্যাপের ব্যাকএন্ড দেখব (DB এবং নেটওয়ার্কিং, FCM সহ নোটিফিকেশন, ব্যাকগ্রাউন্ড প্রসেসিং) এবং আমি ফ্রন্টএন্ড এবং ইন্টিগ্রেশন দেখব, প্যানথিয়ন '১৭-এর মতো। কাজ শুরু করার সময় এবং কাজ করার সময় অনেক রিসোর্স কাজে লেগেছে, কিন্তু সবচেয়ে ভালো ছিল Google-এর এই অসাধারণ কোডল্যাবগুলো:
- Room with a View - Kotlin (ViewModel, LiveData & Room with Coroutines)
- Using Kotlin Coroutines in your Android App
- Data Binding Codelab
- Navigation Codelab: (Navigation Architecture Component)
- Background Work with WorkManager
Google Codelabs
Google Developers Codelabs একটি গাইডেড, টিউটোরিয়াল, হ্যান্ডস-অন কোডিং অভিজ্ঞতা প্রদান করে। অধিকাংশ কোডল্যাব ধাপে ধাপে…codelabs.developers.google.com
এছাড়া, Google-এর Sunflower এবং Google IO 18 অ্যাপগুলো রেফারেন্স কোডবেস হিসেবে আদর্শ ছিল। অ্যান্ড্রয়েড ডেভ সমিট অ্যাপও ভালো রেফারেন্স হতো, যদি আমি আগে জানতাম!
googlesamples/android-sunflower
A gardening app illustrating Android development best practices with Android Jetpack. - googlesamples/android-sunflowergithub.com
এই অস্ত্রাগার लेकर আমরা কোডিং শুরু করলাম। আমি নেভিগেশন আর্কিটেকচার কম্পোনেন্ট একটি সিঙ্গেল-অ্যাক্টিভিটি অ্যাপ আর্কিটেকচার ইমপ্লিমেন্ট করতে সিদ্ধান্ত নিয়েছিলাম। অশঙ্ক Room এবং FCM-এ শুরু করলেন। আমি Koin IoC-এর জন্য ব্যবহার করার কথা ভাবছিলাম, কিন্তু নিশ্চিত ছিলাম না।
সুযোগবশত, জো বার্চ ঠিক তখন caster.io-এ একটি Koin কোর্স লঞ্চ করলেন (পেশাদাররা দ্বারা ছোট, টু-দ-পয়েন্ট কোর্স, লঞ্চে প্রতিটি এক সপ্তাহ ফ্রি!), এবং আমি সেটা সিলেক্ট করলাম। কোনো পশ്ചাত্তাপ নেই! সিরিয়াসলি, অ্যান্ড্রয়েড সাপোর্ট চমৎকার এবং ডকুমেন্টেশন ফ্যাবুলাস ❤️
Koin
In this course, we'll be learning about a dependency injection framework known as Koin by building a fully functional…caster.io
Navigation এবং Koin সেটআপ হয়ে গেলে, আমি UI-তে শুরু করলাম, ম্যাটেরিয়াল ডিজাইন কম্পোনেন্টস এক্সক্লুসিভলি UI-এর জন্য ব্যবহার করার সিদ্ধান্ত নিয়ে, যার জন্য গাইডলাইন এবং ডক্স খুব কাজে লাগল। এছাড়া, আমি অবশ্যই Data Binding ব্যবহার করতে বাধ্য হয়েছিলাম কারণ আমি এটা ভালোবাসি! একই সাথে অশঙ্ক WorkManager ইমপ্লিমেন্ট করলেন, যা আমরা Firebase Job Dispatcher-এর পরিবর্তে ব্যবহার করব সিদ্ধান্ত নিয়েছিলাম, পুরো জেটপ্যাক-এ যাওয়ার জন্য!
আমি যা প্রথম ডেভেলপ করলাম সেটা ছিল Schedule UI, যা আর্কিটেকচার কম্পোনেন্টসের সাথে আমাকে কামফরটেবল করল। সেটা হয়ে গেলে, আমি রেজিস্ট্রেশন-ফ্লো UI-তে চলে গেলাম, সম্ভবত অ্যাপটির সবচেয়ে জটিল অংশ, যেখানে LiveData এবং Navigation-এর অ্যাডভান্সড ব্যবহার নিয়ে তিনটি ধাপে লাইভ-ভ্যালিডেটেড ফর্ম ইমপ্লিমেন্ট করা হয়েছিল (এটা নিজে একটা ব্লগ পোস্টের যোগ্য, শীঘ্রই আসছে?!). এতে আমার এই কম্পোনেন্টসে আত্মবিশ্বাস অনেক বেড়ে গেল, এবং সেটার পর থেকে যাত্রা суmooth ছিল। আমরা পরিকল্পিত ফিচারগুলো সম্পন্ন করলাম, কিছু gotcha আবিষ্কার করলাম, কিছু বাগ ফিক্স করলাম।
লঞ্চ ?
প্রধান ফিচারগুলো ইমপ্লিমেন্ট হয়ে গেলে, আমরা কিছু UI ব্রাশ-আপ করলাম, শেষের কিছু TODO পুরা করলাম, এবং লঞ্চের জন্য প্রস্তুত! ফাইনিশিং টাচ হিসেবে, আমি কিছুটা যোগ করলাম যা আমি সব ধাপে প্ল্যান করেছিলাম:
প্রতিটি কনফিগারেশন চেঞ্জে আলাদা কালার থিম! এটি ফেস্টের থিমকে কোম্প্লিমেন্ট করার জন্য করা হয়েছিল: "এশিয়ার রং"
অ্যাপটি Feb 11, 2019-এ প্লে স্টোরে লাইভ হয়েছে! ??
Bitotsav '19 - Google Play-এ অ্যাপস
বিটোর্সভ '১৯, বির্লা ইনস্টিটিউট অফ টেকনোলজি, মেসরার ২৯তম সংস্করণ বার্ষিক সোসিও-কালচারাল ফেস্ট আয়োজনের জন্য সম্পূর্ণ প্রস্তুত…play.google.com

ফিক্স এবং আপডেটস
লঞ্চের بضع ঘন্টার মধ্যে আমরা (এমাত্র!) দুটি বাগের মুখোমুখি হলাম, যা আমরা অবিলম্বে ফিক্স করলাম। প্রথমটি DAO মেথডগুলো suspend চিহ্নিত रहने से সম্পর্কিত, কিন্তু আমি এখনো ১০০% নিশ্চিত নই কেন এটি ঘটছিল ?। দ্বিতীয়টি অবফাসকেশন সিরিয়ালাইজেশন ফেইলার করে, যা সহজে একটি Keep annotation-এ ফিক্স করা যায়।
তারপর আমি পরবর্তী আপডেটে কাজ শুরু করলাম, যেখানে আমি ফিডে লিডারবোর্ড এবং শিডিউলে ফেস্টের রাত্রির ইভেন্টগুলো যোগ করলাম, সাথে কিছু অন্যান্য পরিবর্তন। একটি তৃতীয় আপডেটে আরও কিছু মাইনর ফিচার যোগ করা হলো।
ফেস্টটি খুব ভালোভাবে সম্পন্ন হলো, এবং অ্যাপটি ১০০০+ পার্টিসিপ্যান্ট ব্যবহার করলো!
আমাদের বন্ধু সুশান্ত গুপ্ত সার্ভারে ভুল DB এন্ট্রি দিয়ে একটি মাইনর সমস্যা তৈরি করলেন, যিনি পরে এ সম্পর্কে একটি ড্রাম্যাটিক ব্লগ পোস্ট লিখলেন।
Bitotsav '19 ওয়েবসাইটে DDoS আক্রমণ
This is not a technical write up. This is a story that I want to share which might be a lesson for several Web & App…cs.sonudoo.com
ফেস্টের পর, আমরা একটি চূড়ান্ত আপডেট রিলিজ করলাম, ইভেন্ট ডিটেইলস, ফিড ইত্যাদি JSON হিসেবে অ্যাপের অংশ হিসেবে স্টোর করলাম এবং গোপনীয়তার জন্য অর্গানাইজারদের কন্টাক্ট নম্বর রিড্যাক্ট করলাম।
পাবলিক করা!
কোড ওপেন সোর্স করার সময় আসল! এই বার আমরা বুঝতে পারা কোড লিখতে যত্ন নেয়েছিলাম, এবং এটি বিশ্বের জন্য প্রস্তুত ছিল। আমি একটি স্লিক README প্রস্তুত করলাম, এবং রিপোজিটরির ইতিহাস থেকে কন্টাক্ট নম্বর সরাতে আমরা অসাধারণ BFG Repo Cleaner টুল ব্যবহার করলাম।
Bitotsav '19 অ্যাপের কোড এখন পাবলিক, যেউেঁ কেউ রিভিউ, রেফার, শিখতে বা ব্যবহার করতে পারে! চেক আউট করুন এবং একটি ⭐ দেয়া ভুলবেন না ?
aksh1618/Bitotsav-19
Bitotsav '19-এর অফিসিয়াল অ্যাপ। GitHub-এ অ্যাকাউন্ট তৈরি করে aksh1618/Bitotsav-19 ডেভেলপমেন্টে অবদান রাখুন।github.com
চ্যালেঞ্জ ?
ডেভেলপমেন্টের সময় আমরা কিছু চ্যালেঞ্জের মুখোমুখি হলাম:
- সময় সীমাবদ্ধতা: প্রধান চ্যালেঞ্জ ছিল খুব কম সময়ে খুব নতুন কনসেপ্ট শিখে সেকোদের মানুষ ব্যবহার করবে এমন একটি অ্যাপ তৈরি করা। এই সময় সীমাবদ্ধতার কারণে অনেক घন্টা লাগাতর কাজ করতে হয়েছিল, যা স্ট্রেস এবং ক্লান্তি আনল, কিন্তু আমরা দম রেখে ডেলিভার করলাম!
- WorkManager with Coroutines: টেকনিক্যাল পার্শ্বে, WorkManager এবং Coroutines-এর সাথে কিছু মাইনর চ্যালেঞ্জের মুখোমুখি হলাম, কিন্তু সেগুলো ওভারকাম করলাম। আশা করি Android SDK-এ Coroutines-এর আরও ভালো সাপোর্ট আসবে ?।
- API 21: আমরা min API 21 সিলেক্ট করলাম পুরনো ভার্সনে আডাপ্ট করার ঝামেলা থেকে বাঁচতে, কারণ অধিকাংশ অ্যান্ড্রয়েড ডিভাইস API 21 এবং তার উপরে। কিন্তু আশ্চর্য, কিছু জিনিস API 21-এ কাজ করত না, বিশেষ করে ভিউ ব্যাকগ্রাউন্ড। এটি খুব ফ্রাস্ট্রেটিং ছিল, আমাকে ইচ্ছা করল API 22 সেট করতে, আরো বেশি যখন পেলাম অ্যাপটি শুধু দুটি API 21 ডিভাইসে ইনস্টল हुआ: যেগুলো আমরা টেস্ট করেছিলাম ?।
- ডিভাইস অভাব: আমরা পর্যাপ্ত ডিভাইস টেস্ট করার জন্য পাইনি। প্যানথিয়ন '১৭-এ, আমাদের पास ~২০০ মানুষের একটি হোস্টেল ছিল, তাই টেস্টিং সহজ ছিল। এই বার অধিকাংশ মানুষ ইন্টার্নশিপে গিয়ে ছিল, তাই আমরা কোডে আত্মবিশ্বাসে নির্ভর করতাম!
- কোড রিভিউয়ার নেই: আমরা যা ব্যবহার করলাম 그중 অনেক নতুন ছিল আমাদের জন্য, এবং আমরা সঠিকভাবে সব কিছু করছি কিনা তা নিশ্চিত করার চেষ্টা করলাম। কিন্তু একটি রিভিউয়ার থাকলে খুব সহায়তা হত। এখনও, আপনি যদি অ্যাপের কোডে একটি কুইক রিভিউ দিতে চান, আমরা খুব কৃতজ্ঞ হব!
- The Apocalypse: আমরা সেই ' DDoS ' সমস্যারও মুখোমুখি হলাম, উপরের সুশান্তের ব্লগ পোস্ট পড়ুন, আপনি পশ্চাত্তাপ করবেন না!
শিক্ষা ✅
- Kotlin + Jetpack = ❤️ : প্রধান শিক্ষা হল অ্যান্ড্রয়েড ডেভেলপমেন্ট অনেক आगे এসেছে এবং কোটলিন এবং জেটপ্যাকের সাথে, এটি zdecydotypicভাবে অনেক বেশি মজাদার এবং সম্পূর্ণ আনন্দদায়ক! সিরিয়াসলি, কোডিং প্রসেসে একাধিক orgasmic মুহূর্ত ছিল!
- কিছুই অসম্ভব নয়: একটু ক্লিশে হলেও সত্য: আপনার যদি কঠোর পরিশ্রম করার ইচ্ছা থাকে, আপনি কিছুই করতে পারেন, কতই কঠিন কেন না। অবশ্যই স্ট্রেসফুল ফেজ থাকবে, তবে চলতে থাকুন। নিজের ওপর বিশ্বাস রাখুন!
পশ্চাত্তাপ ?
- No Instant App / App Bundles: আমরা এটি সম্পূর্ণ মিস করলাম। এเรื่องে চিন্তা করলাম না। ঠিক আছে, পরবর্তী বার হয়তো।
- No tests: আমি জানি, এটি বড় একটি ব্যাপার! সঠিক টেস্ট থাকলে আমাদের খুব সাহায্য হত, কিন্তু সময় সীমাবদ্ধতার কারণে আমরা 'পরে' টেস্ট লিখব সিদ্ধান্ত নিয়েছিলাম, যা এখনো আসেনি ?।
TL;DR. ?
২০১৯-এ একটি অ্যাপ শুরু করছেন?
Kotlin এবং Coroutines ব্যবহার করুন
- Kotlin শিখুন এবং এক্সক্লুসিভলি ব্যবহার করুন!
- Android-এ Coroutines ব্যবহার শিখুন।
AndroidX সহ Jetpack কম্পোনেন্টস ব্যবহার করুন
- Single-Activity Architecture-এর জন্য Navigation Component ব্যবহার শিখুন।
- UI-এর জন্য Lifecycle Components এবং persistence-এর জন্য Room ব্যবহার শিখুন।
- নিজের উপকারে Data Binding ব্যবহার করুন!
- ব্যাকগ্রাউন্ড প্রসেসিং-এর জন্য WorkManager ব্যবহার শিখুন।
Material Components ব্যবহার করুন
- Material Components Guidelines
- Material Components Android Docs
টেস্ট লিখুন!
আমরা পারিনি কিন্তু আপনি অবশ্যই করবেন! টেস্ট বাদ দেবেন না।
সোর্স কোড রেফার করুন
.. যেসব অ্যাপ এই কাজগুলো করে: Sunflower App, IO App, Dev Summit App বা অবশ্যই Bitotsav '19 App! (এবং একটি ⭐ দিন ?)
আপ টু ডেট থাকুন
ব্লগ এবং নিউজলেটার সাবস্ক্রাইব করুন আপ টু ডেট থাকতে! শুরু করার জন্য কিছু: Android Weekly, ProAndroidDev, AndroidPub, Kotlin Weekly. অভিভূত? Huyen Tue Dao-এর এই চমৎকার টক চেক করুন:
Be Like Water: Keeping up with Android
If you enjoy talks from 360 AnDev, please support the conference via Patreon! The one constant of working in mobile is…academy.realm.io
বাস, এটা ছিল। এটি অ্যান্ড্রয়েড ডেভেলপমেন্টের জন্য একটা চমৎকার সময়, তাই আপনার নতুন অ্যাপে শুরু করুন, এবং কাজ করার সময় মজা করা ভুলবেন না!
আপনি যদি কিছু শিখেন, একটি কমেন্ট দিন। কনস্ট্রাক্টিভ κριটিসিজম স্বাগত ?
Twitter ? , LinkedIn ? বা GitHub ??-এ আমাকে খুঁজুন
পরবর্তীবার পর্যন্ত ??