RubyConf Brasil 2012

Começar. É Gratuito
ou inscrever-se com seu endereço de e-mail
RubyConf Brasil 2012 por Mind Map: RubyConf Brasil 2012

1. Como Não Escrever o 
 Projeto Lixo do Futuro

1.1. Conheça os pontos negativos

1.2. Domine a API

1.3. Use a melhor ferramenta para o problema

2. Micro Cloud Foundry (PaaS)

2.1. @pmenglund, [email protected]

2.2. Promotion code: RubyConfBrazil

2.3. Also works in VirtualBox

2.4. Bosh

2.4.1. More than chef or puppet

3. Uma Restrospectiva sobre 
Projetos Problemáticos

3.1. rails best practices gem

3.2. Dreyfus Model

3.3. Testar o necessário

3.4. Práticas sem contexto são dogmas

3.5. Presenters

3.6. @danielvlopes, @jeffrydegrande

4. Vamos falar sobre concorrência

4.1. @josevalim

4.2. Haskell

4.3. ruby: #curry

4.4. Técnicas de gerenciamento de estado

4.4.1. Locks

4.4.1.1. Ruby

4.4.2. Transactional memory

4.4.2.1. Clojure

4.4.3. Message passing

4.4.3.1. Go

4.4.3.2. Erlang

4.5. Referências

4.5.1. Celluloid

4.5.2. Elixir

4.5.3. Book: Seven languages in seven weeks

5. Por que nosso código cheira mal

5.1. @bkeepers, github.com/bkeepers

5.2. Referências

5.2.1. Book: Refactoring

5.2.2. Book: Grow OO Software, Using Tests

5.2.3. Video: Fast Test, Slow Test

5.2.4. Video: Fast Rails Test

5.3. #1 Unit Tests are Complex

5.3.1. When objects are tighly copled

5.3.2. When objects are doing too much

5.3.3. Too much setup needed

5.4. #2 Unit Tests are Slow

5.4.1. When interact with slow components

5.4.2. When don't test object by isolation

5.4.3. When bootstrap heavy frameworks

5.5. #3 Tests tightly coupled to a framework

6. Aplicações mais simples

6.1. Watch

7. Conheçendo as entranhas do Rails

7.1. @rafaelfranca, github.com/rafaelfranca

7.2. rails-api

7.3. Mailer assíncrono

7.4. Notificações

8. Escalabilidade com JRuby e TorqueBox

8.1. TorqueBox

8.1.1. Rack

8.1.2. Schecule Jobs

8.1.3. Background Processing

8.1.4. Long-running daemons

8.1.5. Caching

8.1.6. Messaging

8.1.7. Websockets

8.1.8. Clustering

8.2. Many services in one (easy to config and maintain)

8.3. Applications

8.3.1. immutant.org

8.3.2. dyn.js

8.3.3. escalante.io

9. Boas e Más Práticas de App Rails em Ambiente Corporativo

9.1. Explosão de código

9.1.1. Abuso de monkey-patch

9.1.2. Forks pessoais

9.1.3. Deixar upgrades para depois

9.1.4. Forçar o Rails além do seu limite

9.1.5. The Rails Way is the only way

9.2. Como evitar

9.2.1. Teste seus monkey-patches

9.2.2. Extraia gemas para facilitar a manutenção

9.2.3. Pense além do model/view/controller/helper

9.2.4. Limite o número de pontos de integração

9.2.5. Bom design OO

9.3. Estratégias de teste

9.3.1. Gerenciar testes funcionais por estória

9.3.2. Abuso no uso de mocks

9.3.2.1. Re-testar o framework

9.3.2.2. Mockar o objeto sendo testado

9.3.3. Ter um time separado cuidando dos testes

9.3.4. Investir em automação de teste de UI

9.3.5. Testes só rodam em determinado ambiente

9.4. Desejável

9.4.1. Testes funcionais de user journeys e não por estória

9.4.2. Muito mais testes unitários que testes funcionais

9.4.3. Todo mundo é dono dos testes

9.4.4. Código de testes também é código

9.4.5. Evite acoplar testes com determinado ambiente

9.5. Deployment e Problemas em ambiente de produção

9.6. O que não fazer ao lidar com dados

9.6.1. ActiveRecord num schema que vc não controla

9.6.2. Usar vários BDs na mesma aplicação

9.6.3. SqlServer

9.6.4. Usar NoSQL como RDBMS

9.7. Desejável

9.7.1. Divida em aplicação/serviços menores

9.7.2. Defina quem tem posse dos dados

9.7.3. Representantes do negócio em decisões arquiteturais

9.7.4. Considerre usar processos ETL

9.7.5. Teste!

9.8. Problemas com capistrano

9.8.1. Encoraja deployments fora da integração contínua e direto do controle de versão

9.8.2. Branches para ajustes de produção

9.8.3. Ciclo de vida complicado

9.8.4. Processos dif[iceis de auditar

9.9. Desejável

9.9.1. Não usar o ciclo de vida padrão

9.9.2. Empacotar aplicação usando rpm, deb, etc.

9.9.3. Use capistrano para instalar os pacotes nos ambientes

10. StartupDEV

10.1. startupdev.com.br

10.1.1. Foco: Startups que desejam um protótipo

10.1.2. Sistema inicial em 48h

10.2. Visão Lean

10.2.1. Menos linhas de código

10.2.2. Escopo limitado pela pontuação de features (timebox)

10.2.3. Não criar barreiras

10.2.4. Comunicação clara

10.3. Técnicas

10.3.1. Requisitos: mockup em papel

10.3.2. Delivery => Done (o que está entregue não precisa ser revisto)

10.3.3. TDD

10.3.3.1. 100% de cobertura

10.3.3.2. test/code ratio ~ 3,5

10.3.4. Integração contínua

10.3.5. Deploy contínuo

10.3.5.1. Heroku

10.3.6. Rails Template

10.3.7. Refactory

10.3.8. Gem integration

10.4. Ferramentas

10.4.1. Typus / ActiveAdmin*

10.4.2. Postgresql / MongoDB

10.4.3. DelayedJob / Sidekiq*

10.4.4. Devise / Omniauth*

11. Infiltrating Telecoms using Ruby

11.1. Speakers

11.1.1. Ben Klang @bklang

11.1.2. Ben Langfeld @benlangfeld

11.1.3. MojoLingo

11.2. Examples

11.2.1. Integration between text and voice

11.2.2. Verbalizeit (online translation)

11.3. Sample app: 3958 8592

11.4. Adhearsion

11.4.1. Check it!

12. Poderosas Interfaces Rails

12.1. Os três filtros das interfaces

12.1.1. #1 Os métodos devem implementar o que seus nomes dizem fazer

12.1.2. #2 Deve ser eficiente (unix like)

12.1.3. #3 Avisar o cliente caso haja algum erro

12.2. Idéia: não utilizar models AR nos controllers

12.2.1. Models AR devem se preocupar somente em se persistir.

12.2.2. Deveriam ser chamados por outros models não AR.

12.3. Design by Contract

12.4. Presenters

13. Travis CI

14. Quem precisa de WebSockets?

15. Reunindo Ruby, Java e uma Arquitetura Orientada a Serviços

15.1. Case: projeto grande em Rails 2 com uma equipe inchada

15.1.1. Testes lentos

15.1.2. Usava o banco como fila

15.1.3. Longos períodos de QA

15.2. Separação em aplicações diferentes

15.2.1. Compartilhamento de código via gems

15.2.2. Podem utilizar tecnologias diferentes

15.2.3. Integração através do resque

15.2.4. API REST com json para comunicação

15.2.5. Não existe banco compartilhado

15.3. As duas aplicações passaram e evoluir independentemente

15.4. Falhas

15.4.1. Problemas de comunicação entre equipes

15.4.2. Documentação

15.4.3. API pública e API privada deve estar separadas

15.5. foreman gem

15.6. Conclusões

15.6.1. Construa aplicações pequenas e focadas em algum trabalho

15.6.2. Só compartilhe dados pela API, não pelo banco de dados

15.6.3. API privada deve ser mínima

15.6.4. Não misture a representação de saída com seus models

15.6.5. Separe fontes/bancos de dados

15.6.6. Rails Engines não é solução para isso

16. Testes de interface com JRuby e Sikuli UI

16.1. Book: The Rails View

16.2. Bot baseado em reconhecimento de imagens e entradas através de emulação de teclado e mouse

16.3. Aplicação: Testes de aceitação em emuladores

17. Addicted to Stable

17.1. Automated tests

17.2. Automate backup and restore

17.2.1. Test it regularly

17.3. Redudant servers

17.4. Archive data

17.5. Automate deployment

17.6. Collect and fix exceptions

17.7. Collect and graph metrics

17.8. Email, push and sms alerts

17.9. Automate failover

17.10. Stable your team

17.11. Few words: automate, fail, empower, celebrate