Skip navigation EPAM

Solution Architect EPAM выпустил приложение для дайверов и сделал 33 погружения по всему миру

Наш коллега Павел Голуб уже почти 14 лет работает в EPAM и занимается разработкой в свободное время. Его любимым хобби-проектом стало Android-приложение для дайверов Diveboard. Это электронный дневник погружений, который умеет собирать статистику, работать в оффлайне и не только. Такой выбор не случаен: Павел с детства увлекался плаванием, а затем получил международный сертификат и уже более 8 лет занимается дайвингом. В его копилке – 33 погружения в 6 странах мира и 21 дайв-сайт (специальное место).

Павел рассказал о реализации своих идей в приложении, с какими трудностями столкнулся и как их преодолел, а также о тонкостях дайвинга и впечатлениях от погружений.

Зарождение идеи

Как и все дайверы, Павел постоянно вел log book – дневник погружений. Сначала отмечал детали в бумажном дневнике, но со временем захотел всегда иметь эту информацию под рукой и видеть статистику. Существующие мобильные приложения для этих целей не подошли. По мнению героя, все они не дотягивали по функциональности и дизайну. Разрабатывать свое тоже не хотелось, так как на стартап уходит слишком много времени. Однако нашлась альтернатива: в процессе поисков инженеру повстречался open source сервис для дайверов Diveboard.com. Команда еще в 2017 выложила открытый исходный код проекта на GitHab, чтобы развивать его мог любой желающий. Подключиться к процессу решил и Павел: начал с доработки Android-приложения, но в итоге полностью переделал его.

«По работе я в основном занимаюсь бэкендом, а тут выдалась возможность попробовать себя в Android-разработке. Для этого проект подошел идеально: у ребят был достаточно неплохой бэкенд и широкий функционал. Мотивировало и то, что пишу приложение, которым активно пользуюсь сам и которое, надеюсь, будет полезно для других дайверов».

От дополнительной фичи до нового дизайна и кода

Первым делом Павел добавил в приложение недостающий функционал – статистику погружений по различным параметрам. Однако, работая над фичей, инженер заметил, что юзабилити приложения низкое, код устарел и написан в спагетти-стиле, а процент дублирования в нем зашкаливает. В итоге Павел загорелся идеей исправить ситуацию, начать решил с дизайна. Опыта в этом направлении у инженера не было, поэтому навык пришлось осваивать. Павел изучил все доступные UI/UX гайдлайны, документацию и наработки комьюнити по Android-дизайну, в том числе ресурсы от Google. В итоге нарисовал макет нового приложения в Adobe XD. Сначала показал наработку UI/UX дизайнерам из EPAM, а после ревью внес правки и презентовал обновленную версию основателю сервиса и команде Diveboard. Все остались довольны результатом и дали добро на реализацию. Павла даже добавили в Slack канал, где команда постоянно общается и обсуждает улучшение сервиса.

Инженер сразу же приступил к работе и решил делать дизайн приложения, используя существующую базу кода. Однако после нескольких дней попыток привести ее в порядок понял, что будет проще построить приложение с нуля. Поэтому, прежде чем менять дизайн и расширять функциональность, Павел написал новый код. В итоге в финальной версии приложения количество строчек кода составило треть от изначального варианта, но при этом, по мнению Павла, оно стало выигрывать по функционалу и юзабилити. С новым кодом удалось реализовать идею с дизайном.

«Я только осваивал дизайн и поэтому достаточно много времени потратил, чтобы его нарисовать. Но хочется верить, что дизайн, который мне удалось создать, является некой киллер фичей с точки зрения юзабилити. Теперь приложением удобно пользоваться: информация структурирована, экраны не перегружены и при этом пользователю доступен весь необходимый функционал и возможности».

Разработка: челленджи и функциональность

С выбором стека вопросов не было. Павел использовал классические для Android-разработки технологии: Android X Jetpack и сервисы от Google (Crashlytics и Firebase Analytics), SQLite для оффлайн-работы. Но сам процесс затянулся примерно на год: не всегда удавалось уделять приложению достаточно времени, а челленджей на пути хватало.

«Для меня, как для нового человека на Android поприще, было сложно разобраться в совместимостях по сборкам и SDK, понять их философию. Например, ты можешь разрабатывать приложение для таргет-платформы версии 29, минимальная платформа у тебя версии 19, а компилишь ты под третьей версией. Очень помогло то, что Google обновил библиотеки Android X, теперь они по максимуму предоставляют обратную совместимость».

Сейчас приложение по сути является портативным дневником погружений, где пользователь может:

  • отмечать и редактировать детали погружения: дату, страну, место, продолжительность, глубину, температуру воды, течение, параметры баллонов и тип газа
  • делать собственные заметки и загружать фотографии (свой профиль и галерею можно при желании пошарить со всеми или с выбранными пользователями)
  • указывать дайв-центр, гида для погружения и дайвера-напарника

«Погружаться в одиночку запрещается, всегда должен быть дайвер-напарник, который при необходимости поможет, поделится воздухом и т. д. Но это скорее мера предосторожности. За 5 лет в моей практике не было экстренных ситуаций, даже несмотря на то, что я погружался на глубину до 50 м. Кстати говоря, по статистике, дайвинг менее травмоопасный, чем боулинг. Со мной в группе на международный сертификат даже занимался мужчина с одной рукой и с погружениями справлялся самостоятельно. Но некоторые дайвы, особенно в новых или опасных местах, проходят под сопровождением: нырять без гида там запрещено, даже если есть дайвер-напарник.

Одно из таких мест – сеноты в Мексике. Это пещеры, которые распространяются на сотни километров по полуострову Юкатан. Пещерные ходы там сильно переплетаются и почти везде царит полная темнота: без фонаря не обойтись. Есть сеноты, например, Angelita, где на глубине около 30 метров начинается слой воды, насыщенный сероводородом, и все как в тумане. Ныряя туда, мы упустили из вида гида и в итоге в его поисках провели под водой лишних 3–5 минут, а это опасно: после долгого нахождения на большой глубине нужно проходить декомпрессию (т. е. в течение нескольких минут висеть на определенной глубине). А учитывая, что из-за высокого давления кислород расходуется в разы быстрее, воздуха до всплытия могло бы не хватить. Но, к счастью, все обошлось».

Появились в приложении и другие значимые для дайверов функции:

  • возможность видеть статистику: сколько было погружений за весь период и по годам, в каких странах и местах нырял пользователь и как часто, в какой самой холодный/теплой воде, какая максимальная глубина, продолжительность погружения и т. д.
  • опция добавления фото сертификата в приложение, чтобы его можно было по требованию предоставить сотрудникам дайв-центров по всему миру

«Когда приезжаешь в какую-то страну и хочешь погрузиться, первым делом обращаешься в дайв-центр. Там обязательно попросят показать сертификат, поскольку от его уровня зависит, баллоны с какими смесями газа ты получишь, на какую максимальную глубину сможешь погрузиться и пустят ли тебя вообще на сложный дайв-сайт.  

Лично я получил в Минске международный сертификат PADI, level 2. Обучение длилось пару месяцев, а погружаться учились в бассейне ДВС: там есть глубокая часть. Отрабатывали правильное дыхание, поддержание плавучести, поведение в нештатных ситуациях: например, как снять и надеть маску или баллоны на глубине, дать свою дыхательную трубку напарнику, если у него проблемы с воздухом, выполнить экстренное всплытие (казалось бы, что может быть проще – всплыть в надувном жилете, но есть свои жизненно важные нюансы, которые помогут легким остаться целыми при таком всплытии). Заключительный экзамен сдавали на озере Глубокое. Там все оказалось значительно сложнее, чем в бассейне. Например, махнул неудачно ластами, поднял облако ила и плаваешь в тумане – на вытянутую руку ничего не видно. В этом плане на море значительно проще».

Работа в оффлайне

Среди плюсов приложения – умение работать без Интернета. Это очень важно, потому что дайвы часто происходят в местах, где нет сети. Пользователь может добавлять новые дайвы и вносить изменения в оффлайне, а когда Интернет появляется, эта информация синхронизируется с сервером. В отличие от аналогичных приложений и сервисов данные о сотнях дайвов хранятся не только на телефоне, но и на бэкенде, создавать бэкапы данных вручную не нужно. В случае если телефон разобьется или потеряется, все сохранится.

Однако, чтобы обеспечить работу программы в гибридном оффлайн-онлайн режиме и все протестировать, ушло много времени. С одной стороны, нужно было правильно настроить data access layer, с другой – обеспечить работу по поиску дайв-сайтов на интерактивной карте или по названию, когда Интернета нет. Для этого Павел интегрировал базу на SQLite с собственным индексом, которая скачивается, когда приложение подключается к сети, и затем доступна в оффлайне.  

«В моем опыте были 33 погружения и 21 дайв-сайт. Помимо уже упомянутых мексиканских сенот особенно запомнились еще несколько:

  • Кипр, огромное затонувшее судно Зенобия. Поплавать по каютам, коридорам, столовой было очень захватывающе. На этом судне, к счастью, никто не погиб. Оно перевернулось довольно близко к берегу, поэтому всех успели спасти.
  • Калифорния, Тихий океан. Невероятные по несколько десятков метров в высоту бурые водоросли келпы, а также большие крабы, похожие на Камчатских, морские котики и кораллы.
  • Египет, дайв-сафари длительностью в неделю. Все это время находились на яхте, не возвращаясь на берег. Погрузились в десятке дайв-сайтов, плавали со стаей дельфинов из пары сотен особей (без преувеличения), а также с белопёрыми акулами. Запомнились и ночные погружения, во время которых увидели светящийся планктон.
  • Бали и Нуса Пенида. Здесь плавал с мантами (гигантскими скатами с размахом «крыльев» в 4 метра), а также открыл новый для меня мир микроорганизмов: рачков, моллюсков, креветок, кораллов. Это настоящий рай для дайверов, которые занимаются макросъемкой. Запомнились и диско-моллюски: они отражают свет фонаря так, что начинает казаться, будто они производят электричество».
Бета-тестирование

Тестировщиков в Diveboard комьюнити нет, поэтому Павел решил пойти по пути бета-тестирования и использовал Crashlytics от Google. Все падения приложения логировались на сервере, благодаря этому было легко поймать момент краша и увидеть, что надо исправить.

В стадии бета приложение пробыло около полугода, за это время Павел его дошлифовал и пару месяцев назад выпустил основную версию.

Что дальше?

В планах у Павла – поддержка и развитие приложения: устранение багов и реализация нового функционала. Например, появилась задумка добавить рейтинг погружения, чтобы дайвер мог оценивать впечатления и при желании делиться оценкой с пользователями. Среди других идей – ввести интерактивную карту дайвов, где точками-кластерами будет отмечено, на каких материках и сколько раз погружался пользователь. При приближении будет отображаться аналогичная статистика по конкретной стране, области, побережью и т. д. Есть и целый бэклог из задач в открытом исходном коде на GitHab, разбитый по категориям: новая фича, баг, good first issue (несложные задачи для новых участников, которые помогут влиться в проект).