Бессмертный полк онлайн
Пандемия коронавируса серьезно изменила жизнь людей по всему миру и привела к отмене или переносу массы событий. В частности, эпидемиологические условия не позволили провести шествия Бессмертного полка 9 мая. В связи с этим возникла идея разработать приложение mypolk.online, которое позволило бы провести это событие онлайн.
Ключевой особенностью приложения является возможность просматривать истории людей, воевавших в Великой Отечественной Войне, на карте, тем самым реализуя своеобразные шествия в рамках отдельных регионов и городов.
Для пользователей приложение представляет собой карту, на которой расположены стилизованные маркеры с агрегированными записями. При изменении масштаба карты маркеры изменяются на более или менее детализированные. При нажатии на маркер пользователь получает набор записей, сделанных области маркера. Помимо этого справа от карты расположена лента, на которой отображаются портреты солдат. При нажатии на портрет открывается запись с детальной информацией о человеке.
Приложение предусматривает три варианта для того, чтобы пользователи могли разместить фотографии своих близких на нашей карте:
1. Размещение поста в Instagram с геолокацией и хештегами #бессмертныйполкдома, #мойполкдома или #бессмертныйполк. Такие посты будут автоматически собраны приложением и после краткой модерации будут отображаться на карте.
2. Добавить уже существующий пост без геолокации, нажав на соответствующую кнопку в приложении и указав город, в котором живет автор.
3. Зайти в приложение, заполнить короткую форму, указать имя человека, его звание, годы жизни, боевой путь, приложить фотографию и опубликовать всю эту информацию непосредственно в приложении.
Внутри приложение состоит из четырех компонентов:
1. Первый — фронтенд системы, который представляет собой одностраничное веб-приложение (single page application), написанное на TypeScript с использованием фреймворка ReactJS. Для отрисовки карты применяется библиотека LeafletJS.
2. Второй компонент — бэкенд системы, который осуществляет взаимодействие фронтенда и базы данных, хранящих записи пользователей. Бэкенд разработан на языке Go.
3. Третий компонент — база данных. Для хранения пользовательских записей и агрегированных маркеров используется СУБД PostgreSQL с расширениями PostGIS (для эффективной работы с геопространственными данными) и TimescaleDB (для эффективной работы с временной составляющей данных). Агрегированные маркеры являются материализованными представлениями над таблицей с записями, что позволяет автоматически обновлять маркеры при загрузке новых данных.
4. Четвертый компонент — краулер данных. Его задача состоит в сборе данных из социальной сети Instagram по заданным хэштегам. Хэштеги указываются в конфигурационном файле перед запуском. Краулер разработан на языке Go и поддерживает многопоточный режим работы, когда несколько хэштегов собираются одновременно. Это позволяет достичь скорости работы, необходимой для сбора данных в режиме времени, близком к реальному.
Email для обратной связи: dnasonov@itmo.ru