Anotações do SC Dev Summit 2016

O SC Dev Summit foi um seminário sobre desenvolvimento de software que ocorreu em Joinville, Santa Catarina, nos dias 20 e 21 de maio de 2016. Ele foi dividido em duas partes: o dia do back-end e o dia do front-end. Apesar dessa divisão, parece que isso mais uniu do que dividiu o público.

A seguir eu listei os tópicos das informações que achei mais importantes e reuni todos os slides que consegui encontrar.

Palestra de Mateus Caruccio

  • Apresentou uma introdução a essas tecnologias.
  • Docker = containers. Kubernetes = deploy e escala desses containers
  • Rolling deployment = levanta as novas imagens conforme as antigas deixam de ser usadas e vão sendo derrubadas (ou seja, não dá kill all pra levantar as imagens novas).
  • Usuário acessa um router/balanceador que aponta pro serviço (composto por vários containers), que por sua vez se comunica com outros serviços.
  • Microserviços atômicos, centrados em APIs e que usam HTTP.
  • 12factor.net
  • Log centralizado com ELK (ElasticSearch, Logstash, Kibana)

Palestra de Sérgio Siqueira.

  • Job = tarefa
  • Message Queue = fila, gerenciamento das tarefas
  • Worker = executa as tarefas

Palestra de Thiago Paes

  • Apresentou e comparou algumas ferramentas de CI: Travis, Codeship, Buildkite, PHPCI, Jenkins. Citou AWS Code Pipeline.
  • Programação orientada a tapa na cara: merge somente com Pull Request e build verde. Tudo passa por code review.
  • Testes? Obrigatório senão o merge não rola. Estilo? Acusa os problemas, mas não impede o merge.
  • Mesmo trabalhando sozinho, ele cria Pull Requests pra si mesmo pra passar pelo CI.

Palestra de Elton Minetto

  • Para rastreabilidade, ele cria um ID único para rastrear uma mesma requisição ao longo de múltiplos microserviços.
  • Importante pensar: quem vê? O que precisa saber? Quando expira?
  • Hoje fica fácil trocar de componente de log com o padrão PSR-3 (interfaces de logger).
  • Monolog foi criado pelo criador do Composer. Ele possui: handlers (filtra o conteúdo), processors (adiciona informações adicionais) e o logger.
  • Existem diversas faixas de níveis de erro, importadas do modelo de logs do Linux.
  • Monolog-viewer para ver os logs locais com uma interface maneira.

Palestra de Paulo Rezende

  • Zend Expressive + PSR-7 (interfaces de Request/Response)
  • É uma espécie de “pipe” onde um middleware passa pro próximo da fila até que algum retorne.

Stand-up de Rodrigo Wanderley

Palestra de Leandro Lugaresi

  • Dá uma introdução ao RabbitMQ e seu modelo de troca de mensagem (Publisher, Exchange, Queue, Consumer). Explica alguns tipos de Exchanges.
  • Sugere usar UUIDs ao invés de sequências para as mensagens, para evitar colisão de IDs.
  • Usar um "Correlation ID", para rastrear uma requisição ao longo de múltiplos microserviços.
  • Cuidado com mensagens duplicadas, pois de vez em quando podem aparecer e o sistema tem que estar preparado pra isso.
  • É importante monitorar as filas. Ver se não estão muito cheias e começando a travar (existe uma quantidade de mensagens após a qual o RabbitMQ começa a ficar lento).
  • Perguntei sobre o que fazer quando preciso de uma informação de outro microserviço para gerar um relatório (exemplo: quero a descrição de produto no microserviço de vendas e no de estoque também). Ele sugeriu duas alternativas: PrestoDb (uma ferramenta de SQL em múltiplas bases que o Facebook desenvolveu) ou a duplicação. Me parece que dada a redução de complexidade, a duplicação não é uma alternativa tão ruim assim.

Palestra de Matheus Marabesi

  • Streams são correntes de dados. Usamos muito para ler/escrever em arquivos (embora o wrapper file:// na maioria das vezes esteja implícito)
  • Existem vários wrappers: php://, file://, http://, ftp://, compress.zlib://, glob://, dataL//, etc.
  • Podemos criar wrappers personalizados estendendo uma classe StreamWrapper.
  • Ao invés de ter que aprender várias funções (biblioteca zlib, biblioteca FTP, biblioteca CURL, etc.) posso simplesmente usar o fopen ou file_get_contents.
  • Precisa fazer um post? Não precisa de CURL, dá pra criar o contexto com stream_context_create e passar pro fopen/file_get_contents
  • É possível encadear wrappers: ftp + zlib, por exemplo.

Palestra do Maujor

  • Flexbox substitui a porcaria dos problemas com float, clear, etc. Float não é natural, a gente sempre precisa de hacks (gambiarras) para ajustar.
  • Flexbox serve para componentes da página. Para o layout em si, há outra coisa chamada Grid Layout que ainda está em fase de rascunho na W3C.
  • O IE 11 suporta parcialmente. Existem polyfills pros browsers antigos.

Palestra de Diego Faria

  • Você pode ter duas variáveis com o mesmo nome, uma no contexto global e outra no local. Isso pode causar confusão.
  • Tipos primitivos são passados por cópia, objetos são passados por referência nos argumentos de um método.

Palestra de Rafael Cianci

  • Existem três tipos de funções: mapping (saída baseada na entrada), procedure (sequência de passos) e I/O (se comunica com o resto do sistema).
  • Funções puras sempre retornam o mesmo resultado para os mesmos parâmetros e não causam efeitos colaterais.

Palestra de Rodolfo Pereira

  • Deram o exemplo do Mpjme sobre os problemas da herança e como resolver com composição.
  • Falaram sobre um framework próprio que tinham, mas que a documentação não era boa e ficava na cabeça das pessoas.
  • Começaram a usar React, porque tiveram uma experiência ruim com Angular.
  • Começaram a usar Flux para gerenciar o estado entre componentes. O fluxo é unidirecional (não é 2-way como no Angular). Documentação ruim e difícil gerir múltiplas stores.
  • Acharam a felicidade no Redux. Tem uma documentação ótima (Dan Abramov) e resolve problema das múltiplas stores.

Palestra de Aurélio Jargas

  • Falou sobre a Unix Philosophy (que acho que dá pra aplicar a microserviços muito bem)
  • Podemos executar pelo terminal muitas tarefas repetitivas que na IDE não conseguimos fazer.
  • Tudo é texto. Cada comando faz uma única coisa, muito bem e muito rápido. Encadeamentos tudo para fazer operações complexas.
  • >> faz um append, > zera o arquivo.
  • pbcopy copia pra área de transferência no MacOSX.

Palestra de Daniel Jesus

  • Antigamente os celulares tinham pouca RAM, disco e CPU. Os sistemas operacionais eram completamente diferentes. Hoje muitos celulares são até melhores que VMs que usamos no trabalho.
  • O ganho de performance de fazer aplicativo nativo pode não compensar a perda de produtividade em relação a um aplicativo híbrido.
  • Antigamente era difícil, pois só havia Phonegap + Sencha + jQuery Mobile.
  • Hoje temos o Ionic, que une Gulp + Sass + Angular + Cordova. Ele é um conjunto de diretivas pro Angular que abstrai o Cordova.
  • Alguma ferramentas legais: Ionic Creator (criar views clicando e arrastando), Ionic Lab (hub de aplicativos), Ionic Push (push notifications), Ionic View (ver e testar aplicações sem compilar o .apk/.ipa), Ionic Deploy.
  • A versão 2.0 suportará Angular 2 e a Internet das coisas (iBeacons, relógios, etc.).

Palestra de Luiz Rodrigues

  • A web roda em todos os lugares (sonho do Java). As principais empresas de TI têm produtos para a web (Twitter, Facebook, Google, etc.)
  • Princípios do CSS: especificidade (1º estilos do usuário, 2º estilos da página, 3º estilo padrão do navegador), efeito cascata (peso do seletor de acordo com importância, origem, etc.) e herança (regras do elemento pai passam pro filho, exceto width/height/margin/padding).
  • Explicou como se formam as gambiarras os componentes CSS (melhor ver os slides para ver o exemplo).
  • Componentes precisam ser autossuficientes, encapsular sua função e ter uma API de acesso.
  • Pré-processadores (SASS, LESS, etc.) permitem o uso de coisas que não existem no CSS, como mix-ins e extends.
  • CSS Modules encapsula bem, mas é meio gambiarra. Gera IDs únicos para nomes de classes CSS.
  • Existem metodologias sobre como organizar os componentes, como a BEM e a SMACSS.
  • PostCSS permite usar recursos de CSS que ainda não foram homologados. Espécie de polyfill.

Palestra de Yoseph Santos

  • Infelizmente tive que fugir para pegar o ônibus e não assisti essa palestra 🙁

Software development nerd. In 💙 with Ruby, PHP, JavaScript, Crystal, and other techy stuff.

Software development nerd. In 💙 with Ruby, PHP, JavaScript, Crystal, and other techy stuff.