در این نوشته تجربم رو از نوشتن برنامه COVID-19 Tracker که اخیرا در گیتهاب منتشر کردم، به اشتراک میگذارم.
این برنامه آمار مبتلاهای کووید ۱۹ در سراسر جهان رو ارائه میکنه. البته باید بگم هدفم از این پروژه ارائه یک اپلیکیشن الزاما کاربردی نبود. هدف صرفا تمرین با Google Map API، RxJava، کتابخانههای نمایش چارت، و کاتلین بود. سعی کردم تا حد ممکن، یوزر اینترفیس قابل قبولی هم داشته باشه.
لینک ریپازیتوری:
این دومین ریپازیتوری بود که با کاتلین نوشتم و مثل دفعه قبل کار باهاش لذت بخش بود. با وجود اینکه خیلی تلاش کردم تا به کاتلین مهاجرت نکنم الان بعد از دو تجربه کوچک، بعید بدونم به این زودیها برای نوشتن برنامه اندرویدی به جاوا برگردم. ویژگیهایی مثل data classes, extension function, null safety, smart casting و کم شدن محسوس boilerplate code ها و خیلی چیزهای دیگه در کنار سادگی زبان کار هر برنامه نویسی رو آسون میکنند.
برای نمایش چارتها از کتابخونه قدرتمند MPAndroidChart استفاده کردم. تقریبا هر چارتی با استفاده از این کتابخونه قابل پیادهسازیه. اگر مشکلی هم در حین پیادهسازی داشته باشید با مطالعه issue های مرتبط و یا پروژه Example کتابخونه به جوابتون میرسید.
برای گرفتن دیتای مبتلاهای کرونا ویروس در روزای اول از اِیپیآی ExpDev07/coronavirus-tracker-api استفاده میکردم. اون موقع خیلی خوب کار میکرد ولی بعدا بخاطر مشکلاتی که پیدا کرد به Novel COVID API مهاجرت کردم.
اگه بخوام مختصرا تجربم رو از کار با این دو API بگم، Novel COVID امکانات بیشتری رو در اختیارتون میذاره، کامیونیتی فعالتری داره ولی در کنار این امکانات از دو مشکل کوچک هم رنج میبره: ۱. آمار لحظهای برخی از کشورها با آمار روزهای قبل تطابق ندارد. (چیزی کمتر از ۲٪ کشورها) ۲. امکان دسترسی به تایم لاین روزانه مناطق خود مختار وجود ندارد. ( مثلا Isle Of Man). البته که اینها مشکلات بزرگی نیستند و میشه ازشون چشم پوشی کرد.
در مورد coronavirus-tracker باید بگم در این API از ساختار مناسبی استفاده میشه، عدم تطابق در دیتاها وجود ندارد، دسترسی به اطلاعات تایم لاین همه مناطق و کشورها ممکنه ولی متاسفانه اخیرا در ورژن ۲ API، دیتای مربوط به مبتلاهای بهبود یافتهها منتشر نمیشه. ورژن ۱ دیتای بهبود یافتهها رو نمایش میده ولی response time نسبتا بدی داره. ضمنا امکانات کمی هم در اختیارتون میذاره.
به عنوان مثال برای نمایش تایم لاین روزانه در سراسر جهان باید با یک رکوئست، تایم لاین تمام کشورها رو دریافت میکردم (response time این رکوئست گاهی حتی به ۱۵ ثانیه هم میرسید) و با پیمایش تایم لاین همه کشورها، تایم لاین جهانی ساخته میشد. اینکارو در این کامیت انجام دادم هرچند بعد از سوئیچ به Novel API دیگه نیازی به این تکه کد نبود.
مطمئنا ریپازیتوری نهایی به بهترین و بهینه ترین روش ممکن نوشته نشده، پس اگر ایرادی در پروژه مشاهده میکنید با مشارکت در پروژه و یا حتی با باز کردن Issue به بهبود اون کمک کنید. از هر کمک شما استقبال میشه (:
اگه سوال، انتقاد یا پیشنهادی دارید میتونید یا زیر همین پست مطرح کنید یا از طریق توئیتر و تلگرام با من در تماس باشید.