Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Na minha máquina funciona!

Na minha máquina funciona!

Nesta palestra eu comento um pouco sobre esta famosíssima frase que nos encontra de vez em quando neste mundão do desenvolvimento de Software.

More Decks by Rafael Henrique da Silva Correia

Other Decks in Technology

Transcript

  1. Rafael Henrique da Silva Correia @rafaelhenrique http://blog.abraseucodigo.com.br - Desenvolvedor Python

    na CargoBR - Membro do GruPy-SP - Aspirante a Mestre em Ciências da Computação - Viciado em World of Warcraft (for the horde!) - Palestrante/instrutor nas horas que sobram Eu
  2. 1. Pessoas que não entendem o meu código são muito

    burras pra trabalhar comigo! 2. Se eu trabalhasse sozinho seria muito mais rápido! 3. Nenhum design pattern pode ser aplicado ao meu problema pois ele é único! 4. Fico motivado quando meu código faz truques e magias! 5. Fico entediado quando o assunto é respeitar regras, boa arquitetura, documentação testes e disciplina! 6. O código das outras pessoas é sempre ruim, mas o meu não o meu é perfeito! 7. Por ser perfeito eu nem preciso testar direito, eu já rodei tudo aqui na minha cabeça! 8. Por ser perfeito se ele quebrar por receber input no formato errado é culpa do usuário! 9. Não preciso mais ler coisa sobre programação e nem ler código de outras pessoas! 10. Na minha máquina funciona!
  3. Na minha máquina funciona! Frase de um amigo (a qual

    já me deixou puto um dia) Então manda sua máquina por sedex para a Amazon e pede para eles instalarem ela lá como um servidor de produção!
  4. Sistema operacional E seus devopeiros zuados • Cenário muito comum:

    Existe algo modificado manualmente em um servidor de produção • Possivelmente na sua máquina esta modificação não estará com o mesmo estado que no sistema operacional de produção/homologação/sandbox/staging, cuidado com isso!
  5. Banco de dados (SGBD) Inconsistência! :-o • Cenário muito comum:

    Na sua máquina e nos seus testes você usa SQLite e em produção é usado PostgreSQL • Os ORMs por abstraírem a complexidade das bases de dados pode acontecer de “por baixo dos panos” rolar uma incompatibilidade e você demorar muito pra descobrir isso
  6. Versão dos sistemas Celery, Redis, Banco de dados e etc...

    • Cenário muito comum: Celery na sua máquina está em uma versão e o Celery em produção está em outra versão • Você erroneamente poderá implementar coisas no seu código que não rodam em produção pois a versão do sistema que está em produção é diferente da sua rodando localmente
  7. Versão das bibliotecas Conhece pip, setup.py ou requirements.txt? • Cenário

    muito comum: Existe algum pacote muito importante nos seus requisitos que não tem versão específica ao instalar/atualizar alguma coisa em produção instala uma versão mais recente e QUEBRA TUDO! • Cuidado com a versão das bibliotecas!
  8. Servidores everywhere Homologação/Sandbox/Stage/PQP/Whatever • Cenário muito comum: Tenho muitos servidores

    para realizar homologar/testes/builds etc • Se estes servidores não estiverem “idênticos” ao seu ambiente de produção essa aplicação poderá ser testada e retestada e nada vai adiantar, pois cada ambiente tem uma característica e provavelmente quando o software for para produção você terá problemas
  9. Soluções No mundo perfeito • Na dúvida sempre pergunte ao

    responsável pelos ambientes de produção o que realmente está rodando em produção: ◦ Versões de bibliotecas ◦ Versões de sistemas ◦ Customizações do Sistema operacional ◦ Banco de dados • E pelo menos TENTE que seus ambientes de teste sejam o mais similar a infra de produção
  10. Falando sobre seu querido código Aquele que você desenvolveu com

    tanto carinho <3 (cuidado com amor demais, isso é ruim!)
  11. Meu lindo código Com race condition Referência: https://speakerdeck.com/andrewgodwin/concurrency-to-channels Thread 1

    Thread 2 {conta_1: 20, conta_2: 0} tempo X {conta_1: 20, conta_2: 0} tempo X {conta_1: 0, conta_2: 20} tempo Y {conta_1: -20, conta_2: 40} tempo Y
  12. Meu lindo código Com race condition Referência: https://speakerdeck.com/andrewgodwin/concurrency-to-channels Thread 1

    Thread 2 {conta_1: 20, conta_2: 0} tempo X {conta_1: 20, conta_2: 0} tempo X {conta_1: 0, conta_2: 20} tempo Y {conta_1: -20, conta_2: 40} tempo Y Transferi mais dinheiro do que eu precisava e deixei a conta_1 negativa ao término da Thread 2!
  13. Meu lindo código Com race condition Soluções: - https://stackoverflow.com/questions/30407352/how-to-prevent-a-race-co ndition-when-multiple-processes-attempt-to-write-to-and

    - http://www.c-oreills.com/2015/03/01/testing-race-conditions-in-python.ht ml - https://stackoverflow.com/questions/3653592/how-do-you-avoid-this-rac e-condition-in-python-django-mysql - https://stackoverflow.com/questions/320096/django-how-can-i-protect-a gainst-concurrent-modification-of-database-entries
  14. Meu lindo código Que você nunca saberá o que aconteceu

    (Magic!) Se falhar em produção como vou saber?
  15. Solução Que você nunca saberá o que aconteceu (Magic!) •

    https://medium.com/@rafaelhenrique/a-import%C3%A2ncia-de-um-log-dc a533da9c1d • http://blog.abraseucodigo.com.br/a-importancia-de-um-log.html
  16. Perguntas que você deve se fazer... • Meus testes são

    seguros? • Se for para produção o código desse jeito é fácil fazer rollback? • Qual a cobertura de testes do meu código? • Qual a qualidade do meu código? • Qual o tamanho da merda se isso parar de funcionar? • O tempo de resposta está adequado? • Será que isso vai demorar mais para responder em produção?