Меня зовут Маша, я выпускница «IT Школы Samsung». Хочу рассказать о своём проекте — мобильном приложении FreeSpace, которое объединяет новости о космосе, интерактивную карту и сообщество энтузиастов. Это не просто рассказ о коде, но и история моего пути в Android-разработке.

Как всё начиналось:

 В «IT Школу Samsung» я пришла с небольшим и довольно абстрактным опытом: знала основы ООП на C# и Python, решала учебные задачки, но не имела ни малейшего представления о мобильной разработке. Мне не хватало практики, и мой код часто представлял собой набор классов, написанных по принципу «главное, чтобы работало». Я не задумывалась о том, что будет, если потребуется что-то изменить или добавить новую функциональность.

Главной проблемой было отсутствие понимания того, как из этих отдельных классов собираются настоящие приложения. Как организовать взаимодействие между экранами, где хранить данные, как правильно работать с сетью.

Именно это желание — перейти от теории к созданию полноценного, живого продукта — и привело меня в «IT Школу Samsung». Мне нужна была структура и четкое руководство. Я понимала, что самостоятельно пройти этот путь без наставника будет очень сложно.

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

Рождение идеи: почему космос?

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

  • Сложные научные инструменты (например, симуляторы солнечной системы) — непонятные для обычных пользователей.

  • Простые новостные агрегаторы — без возможности обсуждения и создания своего контента.

Так родилась идея FreeSpace — приложения, которое закрывает этот пробел. Моей целью было сделать удобный сервис, где можно и читать свежие новости о космосе, и обсуждать их с другими пользователями, и даже изучать Вселенную через интерактивную карту.

Что такое FreeSpace?

FreeSpace — это мобильное приложение для любителей космоса, которое включает:

  1. Ленты новостей – подгрузка актуальных данных из API SpaceX (анонсы запусков, миссии).

  2. Сообщество – пользователи могут публиковать статьи, комментировать, ставить лайки и добавлять понравившиеся материалы в избранное.

  3. Интерактивную карту космоса – визуализацию планет.

Техническая реализация FreeSpace

Технически система состоит из двух основных частей: бэкенда на Spring Boot и Android-клиента. Давайте разберем каждую подробнее.

Серверная часть

Когда я начала делать серверную часть для своего приложения, передо мной встал выбор: использовать готовые облачные решения или писать всё с нуля. Я выбрала второй путь, потому что хотела полностью разобраться в backend-разработке.

Основу сервера составляет Spring Boot — фреймворк, который значительно упростил мне работу. Для сохранности данных я использовала встроенный Spring Security с JWT-аутентификацией.

Процесс работы выглядит так:

        1. Пользователь вводит логин и пароль

        2. Сервер проверяет их в базе данных

        3. Если данные верны, генерируется специальный токен (JWT)

        4. Этот токен прикрепляется ко всем последующим запросам

        5. Сервер проверяет токен перед выполнением любых операций

Для хранения данных была использована  H2 Database (встроена в Spring). Все статьи, комментарии и пользовательские профили аккуратно организованы в таблицах с четкими связями между ними.

Мобильное приложение

В проекте я использовала трехуровневую структуру, сочетающую принципы Clean Architecture и MVVM.

Data (Уровень данных)

Этот слой отвечает за получение и хранение информации.

Здесь работают:

  • Retrofit для сетевых запросов

  • Мапперы для преобразования DTO (Data Transfer Objects) в доменные модели

  • Кэширование данных

*DTO — это простые классы, точно отражающие структуру API. Они содержат только данные без какой-либо логики. Мапперы преобразуют эти DTO в доменные модели, добавляя валидацию и необходимые преобразования форматов.

Domain (Бизнес-логика)

Сердце приложения, где:

  • Определяются сущности (User, Article, Comment)

  • Прописываются правила работы приложения

  • Реализуются Use Cases (сценарии использования)

Use Cases инкапсулируют отдельные бизнес-процессы, например:

  • Получение списка статей

  • Добавление в избранное

  • Аутентификация пользователя

Этот слой полностью независим от платформы и фреймворков, что делает его:

  • Легко тестируемым

  • Переносимым (можно использовать в других проектах)

  • Устойчивым к изменениям

UI (Пользовательский интерфейс)

Реализует паттерн MVVM:

  • View: только отрисовка UI, автоматически обновляется при изменении LiveData

  • ViewModel: обработка событий и управление состоянием

  • State: четкие модели состояний (Loading, Success, Error)

Взаимодействие между слоями

  1. UI вызывает метод ViewModel

  2. ViewModel использует соответствующий UseCase

  3. UseCase обращается к Repository

  4. Данные проходят через мапперы и возвращаются в UI

Реализац��я 3D-карты Солнечной системы

Для создания интерактивной карты Солнечной системы в приложении FreeSpace была разработана система визуализации с использованием OpenGLES.

Основные компоненты системы

CelestialBody (Небесное тело)

Класс отвечает за отрисовку планет и других космических объектов. Каждое тело имеет:

  • Сферическую 3D-модель с настраиваемым радиусом

  • Текстуру поверхности

  • Свечение

  • Кастомные шейдеры для рендеринга

SolarSystemRenderer (Рендерер)

Ядро системы визуализации, которое:

  1. Управляет всей сценой

  2. Содержит коллекцию небесных тел

  3. Реализует фоновое звездное небо

  4. Управляет автоматическим вращением системы

  5. Обрабатывает пользовательские жесты

MapFragment (UI-компонент)

Обеспечивает связь между пользователем и 3D-сценой через:

  • GLSurfaceView для отображения графики

  • Обработку жестов (масштабирование, вращение)

  • Индикатор загрузки

  • Интеграцию с основной навигацией приложения

Чем FreeSpace отличается от других космических приложений

Главное и ключевое отличие FreeSpace от большинства существующих аналогов — это комбинация трех основных функций, которые редко встречаются вместе в одном приложении:

        1. Прямая работа с реальными космическими данными

В отличие от многих приложений, где информация подается через пересказ администраторов или модераторов, FreeSpace получает данные напрямую из API SpaceX, обеспечивая:

  • Актуальность информации

  • Отсутствие искажений и редакторской правки

  • Возможность мгновенного обновления при появлении новых данных

        2. Интерактивная 3D-карта Солнечной системы

Большинство приложений ограничиваются статичными изображениями или простыми моделями. 

        3. Сообщество энтузиастов с системой публикаций

В отличие от простых новостных агрегаторов, FreeSpace предлагает:

  • Возможность создавать собственные статьи

  • Систему комментирования

  • Лайки и добавление в избранное

  • Персональные профили пользователей

Сложности в ходе разработки

Создание интерактивной карты стало настоящим вызовом. Готовых решений «из коробки» для моих задач не было, поэтому пришлось погружаться в OpenGLES и писать рендерер практически с нуля. Было и несколько забавных фейлов, которые отлично меня научили дебаггингу.

Один из самых запомнившихся: я наложила на сферы текстуры планет, но вместо красивых изображений Юпитера и Сатурна получала черные полосы, будто планеты были разрезаны. Я потратила почти два дня, проверяя шейдеры, код загрузки текстур, координаты и атрибуты вершин. Я была уже почти уверена, что где-то есть фундаментальная ошибка в понимании того, как OpenGL работает с развертками.

И только потом, совершенно случайно, я увеличила исходное изображение текстуры и поняла в чем дело! Оказалось, я использовала «неквадратные» текстуры (например, 1000x500 пикселей), а OpenGLES для некоторых форматов и параметров фильтрации требует текстуры, у которых стороны являются степенями двойки (1024x512, 2048x2048 и т.д.). Из-за этого он неправильно использовал пиксели при наложении на сферу, что и вызывало эти сбои в виде черных линий.

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

Каждая такая проблема заставляла глубоко разбираться в том, как всё устроено внутри, и учиться не просто чинить код, а сразу делать его более надежным и продуманным. Этот опыт научил меня видеть приложение как единое целое, где все части должны работать согласованно.

Буткемп

Отдельным и невероятно полезным этапом в процессе обучения и работы над приложением стал буткемп от IT Школы. Это была интенсивная практика, где мы работали над проектами. Сначала мы занимались онлайн, осваивая теорию и выполняя задания, а затем встретились офлайн для финального спринта. Именно на буткемпе я по-настоящему научилась писать свой сервер. Мы разбирали архитектуру веб-приложений, подключали базы данных и настраивали аутентификацию. Преподаватели были на связи практически круглосуточно, помогая разобраться с любыми трудностями — от ошибок в конфигурации Spring Boot до тонкостей работы с JWT-токенами. Этот опыт дал мне уверенность в своих силах и стал прочным фундаментом для моего финального проекта.

Что в итоге

Разработка FreeSpace стала для меня ценным опытом, где я смогла применить знания из IT Школы на практике. Я научилась не просто писать код, а выстраивать архитектуру приложения, работать с разными технологиями и не бросать работу при возникновении трудностей. Этот проект показал, что главное — не избегать сложных задач, а последовательно искать решения. Даже небольшие шаги вперёд со временем приводят к результатам.

Немного обо мне

Меня зовут Мария Абубакирова, я ученица 11 класса лицея 1533 и выпускница «IT Школы Samsung». Год назад я пришла на курс с базовыми знаниями Python и C# и огромным желанием научиться создавать что-то настоящее. Теперь я могу с гордостью сказать, что разработала свое первое мобильное приложение — FreeSpace! Этот опыт не только познакомил меня с Java и Android Studio, но и помог определиться с будущим. Обучение в IT Школе Samsung дало уверенность в своих силах и четкое понимание своего карьерного пути.

Ссылка на Github


Еще чуть больше 2-х недель (до 14 сентября) открыта возможность поступить на программу «IT Школа Samsung» детям из России и стран СНГ, где работают порядка полусотни площадок. С момента старта программы в 2014 году более 5 тысяч школьников прошли курс и получили сертификаты выпускников!

Комментарии (3)


  1. riv2
    04.09.2025 12:13

    Молодец (͡°͜ʖ͡°)


  1. YanaGlad12
    04.09.2025 12:13

    :)


  1. AndreyPMI
    04.09.2025 12:13

    Чтоб, хотелось бы увидеть само приложение, поскольку в маркете, с таким названием, совсем другой продукт. Из того что я вижу, приложение совсем не простое, в отличии от описания, которое включает лишь общие понятия, с небольшими противоречиями. При этом вчерашний школьник освоил по быстрому спринг, чтобы Бек построить (ну а чего готовые решения использовать?), по быстрому 3д визуализации и, под конец андроид приложение, где самая большая проблема заняла два! дня. Видимо это очень хорошая школа, не зря же ей большую часть статьи посвятили.

    Если мои замечания не по теме, и человек реально настолько талантливый, то я готов принести свои искренние извинения, вы только апк апкх дайте, глянуть одним глазом.