Сделай Сам: Как Мы Сделали «Живое» Расписание Codefest X

В конце марта в Новосибирске отгремел 10-летний юбилей КодФест .

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

Хочу поделиться историей о том, как мы запустили альтернативная версия расписания Codefest ( Лучше смотреть с мобильного телефона ): от идеи до конечного результата.



Сделай сам: Как мы сделали «живое» расписание Codefest X



Идея

Я посещаю Codefest с 2010 года, и в этом году это была моя девятая конференция.

Для меня Codefest — это традиция, и в этот раз мне захотелось сделать что-то полезное.

Перед мероприятием, читая чат конференции, я понял, что расписание точно можно улучшить.

Codefest — это насыщенное мероприятие, от которого каждый хочет получить максимум удовольствия, поэтому я решил помочь составить альтернативное индивидуальное расписание.

Были намечены следующие цели:

  • Для посетителей — предоставить возможность получать более актуальную информацию о текущих событиях и создать собственную ленту по интересам.

    Плюс ко всему, все посетители конференции имели возможность прийти к нам на стенд и исправить недостающую функцию или исправить ошибку;

  • Для Кодфеста — это дополнительный канал распространения «народной» программы;
  • Для нас как компании – это, конечно, дополнительный плюс для бренда Работодателя.



Сделай сам: Как мы сделали «живое» расписание Codefest X

Идея «накачанного» графика пришлась по душе организаторам Codefest. Я поделился идеей в Wrike и быстро нашел единомышленников, готовых принять участие.

Мы начали с исследования, просмотрев веб-сайты конференций и мобильные приложения.

В общем, мы запустили обычное процесс продукта в Райке.

В результате работы по бэклогу было определено, что требуемый функционал следующий:

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

Были задачи с более низким приоритетом:
  • Обсуждения отчета, чтобы авторизованные пользователи могли обмениваться мнениями и обсуждать;
  • Лайки и популярные рейтинги отчетов;
  • Карта, потому что CodeFest большой и навигация очень важна.

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

Выполнение

В качестве стека для проекта мы решили взять то, что используем при разработке нашего продукта, чтобы дать нам возможность увидеть, как строится фронтенд в Wrike. Мы пишем Дарт ( и мы уже рассказали почему: Здесь И Здесь ) И ПОКА для больших веб-проектов вроде нашего есть только Angular ( Здесь 5 минут вдохновения от бунопус ).

Репозиторий нашего проекта можно найти здесь.

github.com/wrike/codefestx .

В нашем приложении к Angular мы добавили Редукс .

Для Dart существует несколько реализаций: мы взяли Redux.dart И Редукс Эпики для эффектов.

В нашем проекте код, связанный с Redux, находится здесь.

github.com/wrike/codefestx/tree/master/lib/src/redux .

Для работы с неизменяемыми состояниями ( неизменное состояние ) мы взяли посылки встроенное_значение И встроенная_коллекция , что значительно упрощает работу.

Например, мы создаем класс для состояния нашего приложения — CodefestState , и пакеты генерируются строитель .

Для соединения Angular и Redux используется простой прием ( в основном компоненте - github.com/wrike/codefestx/blob/master/lib/app_comComponent.dart ):

И соединяем их между собой через стандартный дротик Транслировать :

_dispatcher.onAction.listen((action) => _store.dispatch(action)), _store.onChange.listen((_) => _zone.run(_cdr.markForCheck)),

То есть при создании действия в менеджере( они все расположены здесь ), он попадает в репозиторий Redux. Он обрабатывается, и его состояние меняется, что вызывает цикл обнаружения угловых изменений.

Для отправки уведомлений мы сделали 2 механизма: для уведомлений о возникновении событий, т. к.

это важно, интегрировано с ПушВуш и получил системный push ( к сожалению, нет поддержки браузера на iOS ).

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

сокет_io_client .



Сделай сам: Как мы сделали «живое» расписание Codefest X

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

Если у вас есть вопросы, мы можем обсудить конкретные решения в комментариях или на github.

Инфраструктура

В современном мире, чтобы опубликовать JS-файл в публичное пользование, без к8с недостаточно.

А если серьезно, то одна из возможностей нашего сервиса - это его доработка прямо на самой конференции( которым пользовались несколько Дартизанов среди посетителей и нет, они не из Wrike :) ).



Сделай сам: Как мы сделали «живое» расписание Codefest X

Поэтому мы решили сделать честный КИ.

Мы рассмотрели возможности интеграции, которые у нас есть.

GitHub и нашел там Облачная сборка Google : Поскольку мы используем продукты Google, нам не следует сходить с этого пути.

Интеграция работает следующим образом: любая фиксация в репозитории запускает сборку.

CloudBuild.yaml .

Мы пошли по пути сборки Docker-контейнера с готовым приложением ( к счастью есть шаблон для дротика - Hub.docker.com/r/google/dart ), а потом запускаем в к8с, чтобы можно было откатить релизы, масштабировать и предусмотреть другие гипотетические ситуации.

Чего не хватало из коробки, так это возможности делать различное поведение в зависимости от ветки, в которой мы коммитим, то есть для мастера билд проходил бы и разворачивался в бой, а для остальных веток выполнялись бы минимальные шаги, без участие k8s. На эту тему идет активное обсуждение здесь , и мы использовали решение из этого обсуждения.

CI работал отлично и ни разу не подвел.



Ложка дегтя

Помимо наших успехов, конечно, есть вещи, которые можно было сделать по-другому.

Например, не заставляйте людей авторизоваться при голосовании за отчеты - некоторым это не нравится( особенно в краткосрочных услугах ).

В итоге мы не получили много лайков за доклады, но, тем не менее, поздравили спикеров-чемпионов.



Сделай сам: Как мы сделали «живое» расписание Codefest X

В увлечении веб-разработкой мы также забыли о жестких ограничениях iOS и так далее.

нет возможности сделать веб-пуш .

Оказалось, что почти половина пользователей нашего сервиса были с айфонов.

К сожалению, нам не удалось отправить им уведомление.

А что еще расстроило команду, как я уже сказал, так это то, что им не удалось сделать все запланированное.

Часть функционала выкатили прямо на конференции, а часть до сих пор живет в бэклоге.



Результаты

Спасибо организаторам за добавление ссылки на расписание в памятку участника конференции.

За время конференции сервисом воспользовались более 1100 пользователей.

К основной программе из ~120 мероприятий мы добавили ещё ~50 «народных» мероприятий.

Примерно 75% сессий проходило на мобильных устройствах, мы отправили более 500 push-уведомлений, выпустили 3 релиза во время самой конференции и получили массу удовольствия от процесса и результата.



Сделай сам: Как мы сделали «живое» расписание Codefest X

Это был отличный опыт, и мы продолжим развивать проект, по крайней мере, для внутренних мероприятий и конференций Wrike. Если вы были на Codefest и воспользовались нашим расписанием, мы будем рады вашим отзывам в комментариях.

Теги: #codefest #dart #разработка #push-уведомления #Конференции #wrike #wriketechclub #angular #Разработка сайтов #программирование #dart #Конференции

Вместе с данным постом часто просматривают: