
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.
Docker, Kubernetes & Openshift
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)
Introdução a Worker
Palestra de Sérgio Siqueira.
- Job = tarefa
- Message Queue = fila, gerenciamento das tarefas
- Worker = executa as tarefas
Integração Contínua
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.
Let's Log!
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.
A revolução dos Middlewares
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 do Pokemao
Stand-up de Rodrigo Wanderley
Microservices e RabbitMQ
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.
Torne-se um Jedi com streams
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.
Flexbox, uma visão geral
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.
Entendendo JavaScript
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.
Pure Functions no JavaScript
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.
Reduxing your sadness
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.
O poder da linha de comando
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.
Por que você deveria usar IONIC
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.).
Componentes CSS
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.
HTML 5
Palestra de Yoseph Santos
- Infelizmente tive que fugir para pegar o ônibus e não assisti essa palestra 🙁