DIY: Como fizemos uma programação ao vivo para o Codefest X

No final de março, em Novosibirsk, o décimo aniversário do CodeFest morreu . Como, provavelmente, em qualquer conferência, o CodeFestX deixou muitas impressões diferentes para os participantes, de “minhas pernas não estarão mais aqui” a “como comprar uma assinatura vitalícia?”. Não vou descrever como foi, já existem críticas e, acho, ainda aparecerão. Quero compartilhar a história de como lançamos uma versão alternativa para a programação do Codefest ( assista melhor a partir de um telefone celular ): da ideia ao resultado.



Idéia


Eu frequento o Codefest desde 2010, e este ano foi minha 9ª conferência. Para mim, o Codefest é uma tradição, e desta vez eu queria fazer algo útil. Antes do evento, lendo o bate-papo da conferência, percebi que a programação é algo que definitivamente pode ser melhorado. O Codefest é um evento agitado que todos gostariam de aproveitar ao máximo, então decidi ajudar a criar uma programação personalizada alternativa.

Os objetivos foram os seguintes:

  • Para visitantes - dê a oportunidade de obter informações mais relevantes sobre os eventos atuais e formar seu próprio feed de interesses. Além disso, todos os visitantes da conferência tiveram a oportunidade de vir ao nosso estande e registrar qualquer recurso que faltava ou corrigir um bug;
  • Para o Codefest , esse é um canal adicional para a distribuição de um programa "popular";
  • Para nós, como empresa , é claro que isso é uma vantagem adicional na marca Employer.




O conceito de um cronograma “bombeado” chegou aos organizadores do Codefest. Compartilhei a ideia no Wrike e rapidamente encontrei pessoas com a mesma opinião e dispostas a se conectar. Começamos com a pesquisa, analisamos os locais das conferências e os aplicativos móveis. Em geral, lançamos o processo de mercearia usual na Wrike.

Como resultado da elaboração do backlog, determinamos que a funcionalidade necessária é necessária assim:

  • A programação principal da conferência com a capacidade de filtrar relatórios e pesquisar;
  • Favoritos e notificações sobre a abordagem de eventos selecionados;
  • Um programa popular com a mesma funcionalidade do principal, bem como a oportunidade para parceiros e ativistas de adicionar eventos a este programa.

Havia tarefas de prioridade mais baixa:

  • Discussões sobre o relatório para que usuários autorizados possam trocar opiniões e discutir;
  • Gostos e relatórios de classificação populares;
  • Mapa, como O CodeFest é excelente e a navegação é muito importante.

Ainda havia tarefas com a terceira prioridade, onde ainda temos um monte de naves espaciais enterradas, mas acredito que chegará a hora deles.

Implementação


Decidimos usar o que usamos no desenvolvimento de nosso produto como uma pilha para o projeto, para dar uma oportunidade de ver como o frontend é construído no Wrike. Escrevemos no Dart ( e já dissemos o porquê: aqui e aqui ) e, por enquanto, para grandes projetos da web como o nosso, existe apenas o Angular ( aqui estão 5 minutos de inspiração do bunopus ). O repositório do nosso projeto pode ser encontrado aqui github.com/wrike/codefestx .

Em nosso aplicativo Angular, adicionamos Redux . Existem várias implementações para o Dart: usamos Redux.dart e Redux Epics para obter efeitos. Em nosso projeto, o código relacionado ao Redux está localizado aqui github.com/wrike/codefestx/tree/master/lib/src/redux .

Para trabalhar com o estado imutável, pegamos os pacotes built_value e built_collection , que simplificam o trabalho. Por exemplo, criamos uma classe para o estado de nosso aplicativo - CodefestState , e os pacotes geram um construtor .
Um truque simples é usado para comunicar Angular e Redux ( no componente principal - github.com/wrike/codefestx/blob/master/lib/app_component.dart ):


E nós os unimos por meio de um Stream gart padrão:

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

Ou seja, quando você cria uma ação no gerenciador ( todas estão aqui ), ela entra no repositório Redux. Ele está sendo processado e o estado está mudando, o que causa um ciclo de detecção angular de alterações.
Criamos 2 mecanismos para o envio de notificações: para notificações da ocorrência de eventos, porque isso é importante, integrado ao PushWoosh e recebeu um push do sistema ( infelizmente sem suporte para navegadores no iOS ). Para eventos menos críticos, por exemplo, o lançamento de uma nova versão, um soquete foi gerado e o socket_io_client foi usado no cliente.



Em geral, a estrutura do aplicativo é simples e, na minha opinião, compreensível. Se você tiver dúvidas, podemos discutir soluções específicas nos comentários ou no github.

A infraestrutura


No mundo moderno, para fazer upload de um arquivo JS para uso geral, o k8s é indispensável. Mas, falando sério, uma das características do nosso serviço é a revisão na própria conferência ( que vários dartizanos aproveitaram entre os visitantes e não, eles não são do Wrike :) ).



Portanto, decidimos fazer um IC honesto. Examinamos as oportunidades de integração que o GitHub tem e encontramos o Google Cloud Build lá : como usamos os produtos do Google, não devemos deixar essa trilha. A integração funciona assim: qualquer confirmação no repositório chama o assembly cloudbuild.yaml . Seguimos o caminho em que estamos montando um contêiner do Docker com um aplicativo pronto ( existe um modelo de hub para o dart - hub.docker.com/r/google/dart ) e, em seguida, o lançamos no k8s para que possamos reverter liberações, dimensionar e fornecer outras hipotéticas situação. Do que não foi suficiente, foi a capacidade de fazer um comportamento diferente, dependendo do ramo em que estamos comprometendo, ou seja, para o mestre construir e implantar na batalha, e para os demais ramos, etapas mínimas devem ser executadas sem os k8s. Há uma discussão ativa sobre esse tópico aqui , e aproveitamos a solução dessa discussão. O CI funcionou perfeitamente e nunca falhou.

Voar na pomada


Além dos nossos sucessos, é claro, há algo que poderia ser feito de maneira diferente. Por exemplo, não force as pessoas a fazer login ao votar em relatórios - algumas não gostam disso ( especialmente em serviços de curto prazo ). Como resultado, não recebemos muitas curtidas nos relatórios, mas, no entanto, parabenizamos os campeões do orador.



Também com a coragem do desenvolvimento da web esquecemos as limitações estritas do iOS e que não há como pressionar pela web . Aconteceu que quase metade dos usuários do nosso serviço estava com o iPhone. Infelizmente, não foi possível enviar um aviso a eles.
E o que mais perturbou a equipe, como eu já mencionei, - não conseguimos fazer todos os nossos planos. Algumas das funcionalidades foram lançadas na conferência e outras ainda estão em atraso.

Resultados


Graças aos organizadores, o link para a programação foi adicionado ao memorando do participante da conferência. Durante a conferência, mais de 1100 usuários usaram o serviço. Ao programa principal de ~ 120 eventos, adicionamos mais ~ 50 "folclore". Aproximadamente 75% das sessões foram em dispositivos móveis, enviamos mais de 500 notificações por push, emitimos três releases durante a própria conferência e recebemos muito prazer com o processo e o resultado.



Foi uma ótima experiência e continuaremos desenvolvendo o projeto, pelo menos para eventos internos e conferências Wrike. Se você esteve no Codefest e usou nossa programação, agradecemos seus comentários nos comentários.

Source: https://habr.com/ru/post/pt448610/


All Articles