Como ser feliz em
 apenas 3 passos
      O Segredo!
O que aprendi e quero
   passar adiante
   Lucas Húngaro - @lucashungaro
          http://busk.com
Parte 1 - Dicas e Truques
Serviços


• Hoptoad
• New Relic
Dicas


• Master/Slave
• Resque pwns Delayed_Job
• Fuja da Amazon (produção)
Plugins e Gems
• kasket
• resque
• oink + hodel_3000_compliant_logger
• bullet
• query_reviewer
• rails_indexes
Plugins e Gems
       • oink + hodel_3000_compliant_logger

Aug 12 11:31:15 Iron-Man rails[9541]: Memory usage: 101938 | P...
Caching

• Negligenciado
• Difícil em um nível “realista”
• “There are only two hard things in
  Computer Science: cache i...
Caching


• Muleta (otimize primeiro)
• Para começar: kasket, cache-money etc
• Se é difícil invalidar, #comofas?
Caching

• Não invalidar!
• Ask for the thing you want
• O Segredo é a chave!
• Ou a chave é o Segredo?
Caching


• Demo
• Smart keys
Parte II - Evoluindo


• Frameworks induzem um bom início
• Comunidade “anêmica”
• Maturidade
Cargo Culting


• Filosofia e relacionamentos na equipe
• Código
Filosofia

• Pressão
• Hype
• Participar de um grupo
• Cool
Pressão

• “Se não usar X, não está fazendo direito”
• A ferramenta certa para o trabalho
• Para quem?
• Ex: Cucumber/Steak
Pressão

• Faca ruim ou técnica ruim?
• Ruim para a equipe
• Eu faço debugging com puts
• “It’s tempting for people to obs...
“The tone is in your
      fingers”
Código

• Entender o problema
• Não tente resolver o que não te incomoda
• Solução emergente
• “The worst misstep one can ...
Atacando o “problema”
       errado

• Demeter: chamar um acessor em outro
  objeto é o verdadeiro problema?
• NullDB: ace...
Atacando o “problema”
       errado

• Demeter
 •   Replica funcionalidade do delegate (stdlib)

 •   Problema real é expo...
Atacando o “problema”
       errado
• NullDB
 •   Problema real é acoplamento da lógica à
     persistência

 •   Deve ser...
Atacando o problema
       errado


• Soluções não-eficientes se tornam padrões
It’s evolution baby!

• Fat Controllers
• Skinny Controllers, Fat Models
• Skinny Controllers, Sexy Models, Flexible
  Ser...
Fat Models

• Negócios + Persistência
• Quebra SRP
• CRUD básico: OK
• Excesso de callbacks
• Esconde o domínio
• Falta: fl...
Camadas   Tudo junto e misturado
Conceitos

• Muito difícil ensinar
• Maturidade através da experiência
• Acoplamento
• Coesão
• “Conascência” (conascence)
Mantra

Se é difícil de testar em isolamento, está mal
                    projetado
Acoplamento

• Serviços
• Inversão de controle
• Injeção de dependência
• Não, não estamos falando de Java! ;)
Acoplamento


• Demo
• ActivityService
• SearchService
Acoplamento
• SOLID, DDD
• Sandi Metz, Jim Weirich, Pat Maddox, James
  Golick, Cassio Marques
• “Parametrização”
• SRP! S...
Conclusão
• Repense “Fat Models”
• Domínios complexos exigem flexibilidade
• Lógica importante deve:
 • ser explícita
 • te...
Links

•   The Building Blocks of Modularity (ou Grand Unified Theory of Software Design) - http://is.gd/egHfv

•   SOLID R...
Obrigado
O que aprendi e quero passar adiante - Dev in Sampa 2010
Upcoming SlideShare
Loading in …5
×

O que aprendi e quero passar adiante - Dev in Sampa 2010

1,524 views

Published on

Apresento nessa palestra técnicas, dicas e truques que aprendi durante mais de 2 anos trabalhando com aplicações Ruby e Rails em produção.

Published in: Technology

O que aprendi e quero passar adiante - Dev in Sampa 2010

  1. 1. Como ser feliz em apenas 3 passos O Segredo!
  2. 2. O que aprendi e quero passar adiante Lucas Húngaro - @lucashungaro http://busk.com
  3. 3. Parte 1 - Dicas e Truques
  4. 4. Serviços • Hoptoad • New Relic
  5. 5. Dicas • Master/Slave • Resque pwns Delayed_Job • Fuja da Amazon (produção)
  6. 6. Plugins e Gems • kasket • resque • oink + hodel_3000_compliant_logger • bullet • query_reviewer • rails_indexes
  7. 7. Plugins e Gems • oink + hodel_3000_compliant_logger Aug 12 11:31:15 Iron-Man rails[9541]: Memory usage: 101938 | PID: 9541 Aug 12 11:31:15 Iron-Man rails[9541]: Instantiation Breakdown: Total: 39 | User: 20 | FeedItem: 10 | Tag: 9
  8. 8. Caching • Negligenciado • Difícil em um nível “realista” • “There are only two hard things in Computer Science: cache invalidation and naming things”
  9. 9. Caching • Muleta (otimize primeiro) • Para começar: kasket, cache-money etc • Se é difícil invalidar, #comofas?
  10. 10. Caching • Não invalidar! • Ask for the thing you want • O Segredo é a chave! • Ou a chave é o Segredo?
  11. 11. Caching • Demo • Smart keys
  12. 12. Parte II - Evoluindo • Frameworks induzem um bom início • Comunidade “anêmica” • Maturidade
  13. 13. Cargo Culting • Filosofia e relacionamentos na equipe • Código
  14. 14. Filosofia • Pressão • Hype • Participar de um grupo • Cool
  15. 15. Pressão • “Se não usar X, não está fazendo direito” • A ferramenta certa para o trabalho • Para quem? • Ex: Cucumber/Steak
  16. 16. Pressão • Faca ruim ou técnica ruim? • Ruim para a equipe • Eu faço debugging com puts • “It’s tempting for people to obsess over tools instead of what they’re going to do with those tools”
  17. 17. “The tone is in your fingers”
  18. 18. Código • Entender o problema • Não tente resolver o que não te incomoda • Solução emergente • “The worst misstep one can make in design is to solve the wrong problem.” – John Carroll
  19. 19. Atacando o “problema” errado • Demeter: chamar um acessor em outro objeto é o verdadeiro problema? • NullDB: acessar BD em teste é o verdadeiro problema?
  20. 20. Atacando o “problema” errado • Demeter • Replica funcionalidade do delegate (stdlib) • Problema real é exposição indevida de comportamento
  21. 21. Atacando o “problema” errado • NullDB • Problema real é acoplamento da lógica à persistência • Deve ser possível testar lógica independente da persistência por design
  22. 22. Atacando o problema errado • Soluções não-eficientes se tornam padrões
  23. 23. It’s evolution baby! • Fat Controllers • Skinny Controllers, Fat Models • Skinny Controllers, Sexy Models, Flexible Services ;) • Domain-Driven Rails?
  24. 24. Fat Models • Negócios + Persistência • Quebra SRP • CRUD básico: OK • Excesso de callbacks • Esconde o domínio • Falta: flexibilidade, isolamento
  25. 25. Camadas Tudo junto e misturado
  26. 26. Conceitos • Muito difícil ensinar • Maturidade através da experiência • Acoplamento • Coesão • “Conascência” (conascence)
  27. 27. Mantra Se é difícil de testar em isolamento, está mal projetado
  28. 28. Acoplamento • Serviços • Inversão de controle • Injeção de dependência • Não, não estamos falando de Java! ;)
  29. 29. Acoplamento • Demo • ActivityService • SearchService
  30. 30. Acoplamento • SOLID, DDD • Sandi Metz, Jim Weirich, Pat Maddox, James Golick, Cassio Marques • “Parametrização” • SRP! SRP! SRP! SRP! SRP! SRP! • Think about concerns
  31. 31. Conclusão • Repense “Fat Models” • Domínios complexos exigem flexibilidade • Lógica importante deve: • ser explícita • ter um nome • ter uma localização clara
  32. 32. Links • The Building Blocks of Modularity (ou Grand Unified Theory of Software Design) - http://is.gd/egHfv • SOLID Ruby - http://is.gd/eeyDn • Demeter is for Encapsulation - http://is.gd/eeyLx • Opinionated Modular Code - http://is.gd/eeyXm • Scaling to Hundreds of Millions of Requests - http://vimeo.com/12814529
  33. 33. Obrigado

×