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