DeepSpace - приложение для любителей космоса

1.

07.08.2021
1

2.

DeepSpace – приложение для любителей
космоса
DeepSpace — приложение, которое позволит любителям космоса
общаться, следить за космическими новостями, лайкать и комментировать их,
писать собственные статьи, использовать «астероид-радар» для
отслеживания потенциально опасных астероидов, смотреть фотографии с
Марса, в режиме реального времени узнавать расположение планет и МКС с
помощью «Космического навигатора», а также устанавливать уведомления на
грядущие запуски SpaceX, чтобы не пропускать трансляции и обсуждения этих
событий
Авторы постарались сделать приложение максимально удобным в
использовании, создать приятный для пользователя дизайн, удобную
навигацию.
Зачем?
KotlinBerserkers
Популяризация космоса и науки
Возможность обсудить последние события и пообщаться с единомышленниками
Удобный инструмент для установления напоминаний о ближайших запусках
SpaceX
Космический навигатор позволит навести телефон в нужную сторону и узнать,
какие планеты там расположены
Астероид радар позволит развеять все фейковые новости о приближающейся к
Земле угрозе
Быстрый доступ к техническим характеристикам кораблей SpaceX
2

3.

Разработчики
Яна Гладких
Самуил Налисин Владимир Абубакиров
Часть работы:
Идея приложения, план
разработки
Клиент-серверная часть,
подключение к api
получение данных
Space Navigator
UI для SpaceX
Часть работы:
Архитектура
приложения (MVVM)
UI для лайков и
комментариев
Вкладка Home
Blogs
Технологии:
Retrofit, Json
Maps SDK
RecyclerView
OpenGL
Sensors
Android Lifecycle
Android navigation
Технологии:
Compose
RecyclerView +
ListViewAdapter
Retrofit, Json
Hilt
Android lifecycle
Часть работы:
Поддержка бд
FireBase
Написание бэкенда
для социальной части
приложения
Отправка
уведомлений
Технологии:
FireBase, Json
SharedPreferences
FireBase Storage
FireBase authentication
Realtime database
Sentry
Android lifecycle
Денис Баров
Данил Хайрулин
Часть работы:
Создание единого
дизайна UI/UX
Астероид-радар
Раздел фото с Марса
Часть работы:
Кэширование данных
в Room
Дизайн
Dependency injection
About и сontact
Технологии:
Material design +
material motion
Анимации
Airbnb Epoxy
WallpaperManager
Glide
Технологии:
Room db
Material design
Android navigation
Hilt
Корутины
Приложение создано в кратчайшие сроки для Samsung Kotlin Bootcamp, разработка началась 19 июля, сразу после открытия буткемпа.
Работаем на разных ветках в нашем репозитории на GitHub: https://github.com/BrightOS/NASA_Bootcamp
На данный момент совершено более 500 коммитов и мержей, написано порядка 40 тысяч строк кода
Kotlin Berserkers
3

4.

Разработка приложения
Приложение написано на
Из предыдущего слайда можно сказать, что в ходе разработки приложения использовались : MVVM архитектура, android lifecycle
components, android navigation, retrofit, gson , material design, анимации, recyclerView, epoxy, openGL, Compose, FireBase, Room db, di с
помощью hilt, glide, WallpaperManager, Maps Sdk, Sensors, корутины, многопоточность (Threads, ReentrantLock), Sentry
MVVM архитектура
Kotlin Berserkers
4

5.

Функциональность
Возможность создавать аккаунт ( Регистрация/вход, обновление фото профиля)
Авторизированные пользователи могут вести блоги, создавать свои посты, прикрепляя к ним изображения
Авторизированные пользователи могут лайкать и комментировать новости, либо посты других пользователей
Астероид радар, с помощью которого можно узнавать, какие астероиды были/будут близко к Земле по заданной дате, посмотреть их
характеристики (диаметр, потенциальная опасность и т.д.)
Фотографии роверов с Марса. Можно смотреть фотографии с Марса, устанавливать их на фон, читать когда и с помощью чего они были
сделаны, узнавать информацию о ровере, сделавшем фото
Большой подраздел SpaceX.
○ Здесь можно посмотреть список всех миссий компании прошлых лет, узнать были ли они успешными, какие космические корабли были
запущены. Можно узнать характеристики 1 и 2 ступени, двигателей, подлежали ли ступени повторному использованию и другое
○ Информация о компании. Тут можно узнать о руководителях компании, дате создания, расположении штаба и т.д. Также можно перейти на
вкладку "история" и во всех подробностях прочитать, через что прошла компания, чтобы стать такой, какой мы её сейчас знаем
○ Где сейчас Tesla Roadster Илона Маска? Здесь можно узнать её расположение, расстояние до Земли/Марса и другое
○ "Драконы". Тут можно почитать характеристики кораблей Dragon
○ Капсулы. Вся техническая информация о капсулах SpaceX
○ Cores. Вся информация о ракетных двигателях SpaceX
○ Launching и Landing pads. Отправные и посадочные точки SpaceX. Здесь можно узнать откуда полеты стартуют/куда происходит
приземление, почитать характеристики зон, а также посмотреть расположение на карте
Вкладка Home. Домашняя страничка. Здесь можно быстро переключаться по разделам, смотреть последние космические новости, картинку дня
НАСА (по нажатию можно прочитать описание)
SpaceNavigator. С его помощью можно узнавать расположение планет в данном времени, предварительно предоставив разрешение приложению
на доступ к геолокации
Sensors (подраздел навигатора). Здесь можно посмотреть показатели датчиков телефона. Показатели выделяются цветом в зависимости от того,
насколько хорошо работают
Upcoming events - предстоящие запуски SpaceX. Здесь пользователь может установить уведомление на дату запуска, чтобы не пропустить
событие
Во вкладках About/Contact можно почитать о приложении и связаться с разработчиками
5

6.

Архитектура приложения
● Как хотелось
● Как получилось
Самуил Налисин
6

7.

Jetpack Compose
Изображения домашнего экрана и раздела с новостями и блогами
Самуил Налисин
7

8.

Самуил Налисин
Jetpack Compose
Особенности:
● Весь код на Kotlin
● Декларативный подход
● Большая гибкость в
использовании
● Простые и оптимизированные
анимации
● Отсутствие лучших практик
● Множество экспериментальных
или отсутствующих функций
● Чувствительность к JIT
компиляциям
Самуил Налисин
8

9.

Space Navigator
Космический навигатор —
интересная возможность приложения. С его помощью пользователю достаточно навести
телефон в сторону неба, чтобы узнать, какие планеты там находятся. На данный момент можно узнать расположение всех
планет солнечной системы, Луны, Солнца и МКС.
Яна Гладких
9

10.

Вычисление расположения планет
Для того, чтобы определить расположение планет используются Орбитальные Элементы (Кеплеровы Элементы).
a(AU) - axis, большая полуось
e – eccentricity, эксцентриситет орбиты
i – inclination, наклонение
w – argument of periapsis (perihelion), аргумент перицентра
l – longitude of the ascending node, долгота восходящего узла
m – mean anomaly, средняя аномалия
v – true anomaly, истинная аномалия
E – eccentric anomaly, эксцентрическая аномалия
Официальный сайт НАСА предоставляет эти
данные
Яна Гладких
10

11.

Вычисление расположения планет
С помощью орбитальных элементов можно вычислить гелиоцентрические координаты планет. Зная эти координаты, можно найти Ra и
Dec ( Прямое восхождение и склонение), а зная их, уже можно вычислить геоцентрические координаты и расположить планеты на сетке
Для начала необходимо вычислить истинную аномалию. Согласно материалам НАСА, сделать это можно путем решения уравнения
Кеплера
То есть, решив уравнение, найдем эксцентричную аномалию. Для этого необходимо разложить ряд :
Истинная аномалия выражается из эксцентричной согласно формуле:
Яна Гладких
11

12.

Вычисление расположения планет
Для вычисления гелиоц координат еще необходимо найти радиус-вектор
Отлично, теперь, когда все необходимые величины найдены, вычислим координаты в соответствии с формулой:
Дальше вычисляем Ra и Dec
Ra:
Наконец, вычислим геоцентрические координаты
Dec:
Яна Гладких
12

13.

Вычисление расположения планет
Теперь, когда мы знаем расположение планет, остается лишь расположить их на сетке.
Сетка создана с помощью 3D графики с применением OpenGL. Использовано два слоя : линии и планеты.
Но мало просто создать сетку, ведь она должна реагировать на движение телефона, перемещаться в соответствии с тем, куда
пользователь решил его направить. Для этого были использованы датчики телефона
Рассказывать о том, как все это работает можно долго, поэтому попытаюсь рассказать в общих чертах.
В трехмерном пространстве у устройства есть 3 оси. В коде эти оси представлены в виде векторов. С
помощью датчиков можно получить такое значение как ROTATION VECTOR, которое возвращает
положение устройства в пространстве в виде угла относительно оси. Из этого вектора можем получить
матрицу вращения с помощью функции getRotationMatrixFromVector библиотечного класса SensorManager
Для определения, куда направлен телефон, необходимо вычислить матрицу трансформации. У нас есть
матрица координат телефона и «магнитная» матрица с магнитными координатами. Перемножив их,
получим эту самую матрицу. Далее вычисляем векторы направления телефона и в активности будем
передавать их в поток, отвечающий за рендеринг карты
Яна Гладких
13

14.

Firebase
● Storage
○ Хранение аватарок пользователей
○ Хранение фотографий для блогов
● Realtime Database
○ Хранение блогов (комбинация из ссылок на картинки и
текста)
○ Лайки и комментарии
○ Хранение дополнительной информации о пользователях
● Authentication
Владимир Абубакиров
14

15.

Sentry
Владимир Абубакиров
15

16.

Кэширование
Большинстве современных приложение используют локальную базу для
хранения данных, но также она применяется для кэширования данных
полученных с удаленного источника. Именно с этой целью в проекте
используется библиотека Room для работы с sql запросами
Плюсами использования кэширования являются быстрота загрузки данных
и возможность просматривать ранее просмотренный контент без
подключения к сети
Данил Хайрулин
16

17.

Как происходит кэширование?
1) Когда открывается экран, первым делом загружаются данные с локальной базы данных
2) посылается запрос на сервер
3) после ответа сервера данные на экране еще раз обновляются и обновляется локальная БД
Такой подход обеспечивает лучший пользовательский опыт, так как не нужно каждый раз ждать загрузки информации с
сервера, что иногда может занимать немалое время
Данил Хайрулин
17

18.

Dependency injection
Dependency injection (DI) - это метод, широко используемый в программировании и рекомендуем Google для
написания андроид приложений. Следуя принципам DI, мы заложили основу для хорошей архитектуры
приложения.
Реализация внедрения зависимостей дает следующие преимущества:
-Возможность повторного использования кода
-Легкость рефакторинга
-Легкость тестирования
Данил Хайрулин
18

19.

UI приложения
Чтобы улучшить пользовательский опыт при работе с приложением, его было необходимо привести к единому внешнему виду, в
чём и заключалась цель моей работы. В итоге, мною был разработан полупрозрачный дизайн интерфейса с добавлением
цветных теней от объектов на тёмном фоне, вследствие чего могут появиться ассоциации с межзвёздными облаками, что
позволяет с большим интересом погрузиться в приложение. В том числе имеется единый дизайн процесса «загрузки» страничек.
Денис Баров
Денис Шайхльбарин
19

20.

Asteroid Radar
Отдельного внимания требует раздел «Asteroid Radar», где были использованы технологии
оптимизации отображения списков типажа RecyclerView, предоставляемые AirBnB Epoxy.
Данная технология позволяет максимально оптимизировать отображение и подгрузку
элементов, чтобы нагрузка на аппарат была минимальной, а анимации максимально
плавными. Данная технология в том числе позволяет использовать StickyHeader, с
помощью которого можно закреплять необходимые элементы в самом верху RecyclerView.
Денис Шайхльбарин
20

21.

Mars Rover Photos
Также смею упомянуть раздел с фотографиями, созданными
марсоходами с поверхности Марса. Особенность данного раздела
в том, что здесь имеется возможность поставить одну из
предложенных фотографий на обои, или же просто её скачать.
Денис Шайхльбарин
21

22.

Заключение
В заключение хочется сказать, что DeepSpace - одно из лучших приложений для людей интересующихся космической
тематикой или же только тех, кто хочет начать погружение в этот огромный космический мир.
За 3 недели работы над проектом, нашей команде удалось создать стабильно работающее приложение, поработать с
гитом, справиться с сотнями багов. Также многие из нас смогли открыть для себя что-то новое, работая в команде.
Перспективы разработки:
● Адаптация под разные языки
● Больше космических объектов на карте, например, звезды
● Возможность приближать карту
● Возможность установить картинку дня на фон
● Оптимизация кода
● Выставление в play market
22

23.

Как тебе такое, Илон Маск?!
08.08.2021
23
English     Русский Правила