В конце марта в Новосибирске отгремел 10-летний юбилей КодФест .
Как, наверное, любая конференция, CodeFestX оставил у участников кучу разных впечатлений от «я сюда больше не ступлю» до «как купить пожизненную подпискуЭ» Не буду описывать как это было, отзывы имеет уже и я думаю, что их будет больше.
Хочу поделиться историей о том, как мы запустили альтернативная версия расписания Codefest ( Лучше смотреть с мобильного телефона ): от идеи до конечного результата.
Идея
Я посещаю Codefest с 2010 года, и в этом году это была моя девятая конференция.Для меня Codefest — это традиция, и в этот раз мне захотелось сделать что-то полезное.
Перед мероприятием, читая чат конференции, я понял, что расписание точно можно улучшить.
Codefest — это насыщенное мероприятие, от которого каждый хочет получить максимум удовольствия, поэтому я решил помочь составить альтернативное индивидуальное расписание.
Были намечены следующие цели:
- Для посетителей — предоставить возможность получать более актуальную информацию о текущих событиях и создать собственную ленту по интересам.
Плюс ко всему, все посетители конференции имели возможность прийти к нам на стенд и исправить недостающую функцию или исправить ошибку;
- Для Кодфеста — это дополнительный канал распространения «народной» программы;
- Для нас как компании – это, конечно, дополнительный плюс для бренда Работодателя.
Идея «накачанного» графика пришлась по душе организаторам Codefest. Я поделился идеей в Wrike и быстро нашел единомышленников, готовых принять участие.
Мы начали с исследования, просмотрев веб-сайты конференций и мобильные приложения.
В общем, мы запустили обычное процесс продукта в Райке.
В результате работы по бэклогу было определено, что требуемый функционал следующий:
- Основное расписание конференций с возможностью фильтрации докладов и поиска;
- Избранное и уведомления о приближении выбранных событий;
- Народная программа, с тем же функционалом, что и основная, а также возможностью для партнеров и активистов добавлять мероприятия в эту программу.
- Обсуждения отчета, чтобы авторизованные пользователи могли обмениваться мнениями и обсуждать;
- Лайки и популярные рейтинги отчетов;
- Карта, потому что CodeFest большой и навигация очень важна.
Выполнение
В качестве стека для проекта мы решили взять то, что используем при разработке нашего продукта, чтобы дать нам возможность увидеть, как строится фронтенд в Wrike. Мы пишем Дарт ( и мы уже рассказали почему: Здесь И Здесь ) И ПОКА для больших веб-проектов вроде нашего есть только Angular ( Здесь 5 минут вдохновения от бунопус ).Репозиторий нашего проекта можно найти здесь.
В нашем приложении к 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 ):
- ChangeDetectorRef — стандартный механизм обновления отображения Angular ( документация Здесь )
- Стандартный магазин Redux ( документация Здесь )
- Наш простой диспетчер - github.com/wrike/codefestx/blob/master/lib/src/redux/services/dispatcher.dart
_dispatcher.onAction.listen((action) => _store.dispatch(action)),
_store.onChange.listen((_) => _zone.run(_cdr.markForCheck)),
То есть при создании действия в менеджере( они все расположены здесь ), он попадает в репозиторий Redux. Он обрабатывается, и его состояние меняется, что вызывает цикл обнаружения угловых изменений.
Для отправки уведомлений мы сделали 2 механизма: для уведомлений о возникновении событий, т. к.
это важно, интегрировано с ПушВуш и получил системный push ( к сожалению, нет поддержки браузера на iOS ).
Для менее критичных событий, например выхода новой версии, мы поднимали сокет и использовали его на клиенте.
В целом структура приложения проста и, на мой взгляд, понятна.
Если у вас есть вопросы, мы можем обсудить конкретные решения в комментариях или на github.
Инфраструктура
В современном мире, чтобы опубликовать JS-файл в публичное пользование, без к8с недостаточно.А если серьезно, то одна из возможностей нашего сервиса - это его доработка прямо на самой конференции( которым пользовались несколько Дартизанов среди посетителей и нет, они не из Wrike :) ).
Поэтому мы решили сделать честный КИ.
Мы рассмотрели возможности интеграции, которые у нас есть.
GitHub и нашел там Облачная сборка Google : Поскольку мы используем продукты Google, нам не следует сходить с этого пути.
Интеграция работает следующим образом: любая фиксация в репозитории запускает сборку.
Мы пошли по пути сборки Docker-контейнера с готовым приложением ( к счастью есть шаблон для дротика - Hub.docker.com/r/google/dart ), а потом запускаем в к8с, чтобы можно было откатить релизы, масштабировать и предусмотреть другие гипотетические ситуации.
Чего не хватало из коробки, так это возможности делать различное поведение в зависимости от ветки, в которой мы коммитим, то есть для мастера билд проходил бы и разворачивался в бой, а для остальных веток выполнялись бы минимальные шаги, без участие k8s. На эту тему идет активное обсуждение здесь , и мы использовали решение из этого обсуждения.
CI работал отлично и ни разу не подвел.
Ложка дегтя
Помимо наших успехов, конечно, есть вещи, которые можно было сделать по-другому.Например, не заставляйте людей авторизоваться при голосовании за отчеты - некоторым это не нравится( особенно в краткосрочных услугах ).
В итоге мы не получили много лайков за доклады, но, тем не менее, поздравили спикеров-чемпионов.
В увлечении веб-разработкой мы также забыли о жестких ограничениях iOS и так далее.
нет возможности сделать веб-пуш .
Оказалось, что почти половина пользователей нашего сервиса были с айфонов.
К сожалению, нам не удалось отправить им уведомление.
А что еще расстроило команду, как я уже сказал, так это то, что им не удалось сделать все запланированное.
Часть функционала выкатили прямо на конференции, а часть до сих пор живет в бэклоге.
Результаты
Спасибо организаторам за добавление ссылки на расписание в памятку участника конференции.За время конференции сервисом воспользовались более 1100 пользователей.
К основной программе из ~120 мероприятий мы добавили ещё ~50 «народных» мероприятий.
Примерно 75% сессий проходило на мобильных устройствах, мы отправили более 500 push-уведомлений, выпустили 3 релиза во время самой конференции и получили массу удовольствия от процесса и результата.
Это был отличный опыт, и мы продолжим развивать проект, по крайней мере, для внутренних мероприятий и конференций Wrike. Если вы были на Codefest и воспользовались нашим расписанием, мы будем рады вашим отзывам в комментариях.
Теги: #codefest #dart #разработка #push-уведомления #Конференции #wrike #wriketechclub #angular #Разработка сайтов #программирование #dart #Конференции
-
Картвельские Языки
19 Oct, 24 -
Бионический Человек
19 Oct, 24 -
Биткойн И Ии. Победа Неизбежна
19 Oct, 24 -
Фотошоп + Горячие Клавиши На Русском Языке
19 Oct, 24 -
К-Мелеон Приветствует Хабражителя
19 Oct, 24