DOU Labs: як у MacPaw створили застосунок для зручного сортування сміття
У рубриці DOU Labs ми запрошуємо IT-компанії ділитись досвідом власних цікавих розробок та внутрішніх технологічних ініціатив. Питання і заявки на участь надсилайте на Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. .
Привіт, мене звати Ксенія, я спеціаліст із комунікацій у MacPaw. Трохи більше року тому в компанії почали роботу над екозастосунком, що допоміг би зробити сортування сміття легким та приємним. Про ідею створення застосунку, процес розробки та результати роботи я розповім у цій статті.
Ідея
У рамках проекту MacPaw Labs кожну другу п’ятницю місяця, співробітники компанії можуть присвячувати власним проектам. Один з них, Project Green, функціонує вже протягом року. Завдяки цьому проекту в MacPaw встановили спеціальні сортувальні баки, організували серію прибирань #CleanMyCity та замінили пластикові стаканчики на скляні.
Останнє досягнення проекту — мобільний застосунок «Сортуй», що спрощує сортування. Застосунок підкаже, яке сміття переробляється, а яке ні, та покаже маршрут до найближчих пунктів прийому вторсировини.
Спочатку ніхто і не думав про створення програми. Ми із командою просто хотіли почати сортувати в офісі. Знайшли підрядника, який би вивозив сміття, створили документ із правилами сортування, розмістили над баками мотиваційні плакати та короткі інструкції. Однак усе це не допомагало та навіть відлякувало людей. Хтось плутався і боявся закинути сміття до неправильного контейнера, а хтось ішов на іншу кухню, де баків для сортування не було.
Тоді дуже багато людей замріяно казали: «От якби серед нас був професіональний сортувальник або навіть застосунок, який би розповідав, як сортувати...». Минулої весни, в рамках внутрішнього хакатону, команда активістів почала цю ідею втілювати в життя.
Коли ми спробували знайти подібні застосунки, то виявилося, що вони існують, однак лише для якихось окремих станцій сортування. І розповсюджені вони у США та Європі. Також є ігри для дітей, що показують, який вид сміття до якого ящика кидати. «Іграшки-сортери», іншими словами. До аналогів «Сортуй» в Україні можна віднести мапи на кшталт «Епохи», у яких зібрані мережі та пункти прийому вторсировини, або Львівський проект Garbage31, який розповідає про способи сортування речей, які ми використовуємо щодня.
Перша версія «Сортуй» була створена лише для внутрішнього використання в офісі компанії. Хоча гості та відвідувачі просили поділитися досвідом чи програмою, ми розуміли, що продукт не готовий для широкого загалу. Так виникла ідея створити застосунок, що міг би допомогти із сортуванням глобально.
На розробку пішло більше 7 місяців. Складно підрахувати усіх, хто брав участь у створенні «Сортуй». У проекті задіяні четверо розробників (двоє на Android, двоє на iOS), два дизайнери, люди, які займаються наповненням бази, тестуванням, а також усі небайдужі до проблем сортування.
Команда, що працювала над проектом
Реалізація
Android-версія
Android-версію писали на мові Kotlin, а для побудови архітектури обрали шаблон проектування MVVM — цей підхід активно підтримує Google. Він дозволяє зв’язувати елементи View із властивостями та подіями абстракції представлення ViewModel. Характерною рисою шаблону є двостороння комунікація із View.
Не обійшлося без складнощів із узгодженням структури бази даних із iOS-розробниками, тому ми вирішили розділити наші бази даних. Спочатку використовували JSON-файл, згодом база почала рости, додавалися нові види сміття та пункти прийому. У майбутньому ми із iOS-командою хочемо знову об’єднатися, щоб не було необхідності підтримувати дві бази даних. Ми вже домовилися про формат, що влаштує обидві команди і наразі працюємо над АРІ.
У поточній реалізації в нас немає анімованих переходів між екранами. У майбутньому теж плануємо їх додати.
Під час розробки ми використовували такі засоби:
- Android Architecture Components — Live Data, ViewModel та Room Persistence Library від Google (для роботи із базою даних SQLite);
- Retrofit — для запитів та роботи з HTTP;
- Anko — з цією бібліотекою код виглядає більш декларативно;
- Mixpanel — для збору аналітики про поведінку користувача в застосунку;
- Fabric — для збору аналітики про поведінку самого застосунку: можна дізнатися, скільки нових користувачів, активних користувачів, визначити retention та crash’і;
- Для збору зворотного зв’язку використовували звичайну відправку по email та HockeyApp. Їхня feedback-форма дуже гнучка в кастомізації.
Ідея додати до функціональності мапу виникла під час розробки. У «Сортуй» мапа, на якій відмічені найближчі пункти прийому вторсировини, реалізована з допомогою Google Maps JavaScript API та роздається для обох мобільних платформ із одного сайту. Такий підхід дозволив нам зекономити купу часу на розробку мапи. До того ж він дає можливість оновлювати дані, не оновлюючи сам «Сортуй». Незалежно від того, поставив користувач оновлення чи ні, актуальна мапа завжди буде у застосунку. Звичайно, на більш старих пристроях швидкість роботи не зовсім задовільна: можуть з’являтися помітні підторможування, оскільки браузерна версія Google Maps не так добре оптимізована для мобільних пристроїв, як Google Maps SDK для iOS/Android. Цілком можливо, що згодом ми перейдемо на використання цих засобів.
Для тестування використовували стандартні засоби Google Play та Espresso. Спочатку тестували друзі та колеги у закритій альфі. Далі був короткий етап бета-тестування і реліз.
Зараз у нас два канали поширення — публічний канал та бета-канал, на який користувачу дозволяє підписатися Google Play. У нашому бета-каналі наразі 89 тестувальників. Вони готові до нестабільних версій, тому ми можемо спочатку протестувати оновлення в цьому каналі, а вже потім випускати його публічно.
iOS-версія
На початку розробки ми чітко виділили модельні об’єкти та UI-елементи. Оскільки програма невелика, підійшов класичний MVC. У подальшому це нам дозволило модифікувати структуру бази даних, підправивши лише кілька модельних класів, без впливу на основний інтерфейс.
Сама база даних зберігається у вигляді JSON-файлів. Це дає змогу легко її читати і правити, якщо потрібно. Одна копія БД зберігається всередині застосунка, який розповсюджується через AppStore. Іншу копію час від часу викачуємо з інтернету. Серед даних бази також зберігається її поточна версія та версія сумісності. Версія сумісності потрібна для того, щоб програма знала, чи зможе вона безболісно (без падінь) розпарсити дані. Для зберігання онлайн-копії бази використали системний кеш (NSURLCache клас), який вміє зберігати відповідь сервера на той чи інший запит. Тому логіка роботи з онлайн-базою є простою.
У потрібний момент йде запит на сервер:
- якщо виникла проблема з доступом до інтернету або сервер відповів кодом 304 (Not Modified), використовуємо раніше закешовані дані;
- якщо отримали нові дані, зберігаємо їх для цього запиту.
Усі динамічні ілюстрації, які використовуються в програмі (іконка вигляду сміття, іконка контейнера), зберігаються всередині програми, проте також передбачена можливість завантаження їх з онлайн-ресурсів. Для цього база містить поле iconURL.
Майже вся програма написана на Swift, за виключенням тих Objective-C файлів, які були втягнуті як вже винайдений велосипед, з інших власних або third-party проектів. Для аналітики, збору крешів, фідбеків і т. д. обрали Mixpanel та HockeyApp, оскільки вони підтримують iOS + Android, а також є безкоштовними (хоча б для невеликої кількості даних), оскільки цей проект є некомерційним.
Результати
Наразі «Сортуй» містить правила прийому вторсировини таких операторів, як «Україна без сміття», «Київміськвторресурси» і ТОВ «ВТОРМА ЮА». Їхні пункти розміщені у Києві, Львові, Миколаєві, Херсоні, Чернігові, Білій Церкві, Броварах, Ніжині та Прилуках. Також у застосунку є універсальні правила сортування сміття.
Серед подальших планів:
- додавання нових пунктів прийому вторсировини;
- масштабування на інші міста України;
- наповнення бази новими видами відходів;
- розробка сканеру штрих-кодів.
Завантажуйте застосунок на Apple Store та Google Play.