Fun driven development com Ruby

504 views

Published on

My presentation about Ruby at TDC2011 - The developers conference

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
504
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Fun driven development com Ruby

  1. 1. Fun Driven Development com Ruby @tomas_stefano https://github.com/tomas-stefano http://rubycasts.com.br/sábado, 9 de julho de 2011
  2. 2. Objetivo - VOCÊ IRÁ APRENDER UMA COISA NOVA DE RUBY. OU VOCÊ IRÁ APRENDER UMA COISA NOVA.sábado, 9 de julho de 2011
  3. 3. Era uma vez ... OBS.: Tirada de uma apresentação do Ryan Davissábado, 9 de julho de 2011
  4. 4. Mesa de trabalhosábado, 9 de julho de 2011
  5. 5. Lendo o Códigosábado, 9 de julho de 2011
  6. 6. Ninho de Ratosábado, 9 de julho de 2011
  7. 7. Ficou nervoso ...sábado, 9 de julho de 2011
  8. 8. Atirou em todo mundosábado, 9 de julho de 2011
  9. 9. Foi preso!sábado, 9 de julho de 2011
  10. 10. SEGUNDA VERSÃO! OU:sábado, 9 de julho de 2011
  11. 11. Novo trabalho!sábado, 9 de julho de 2011
  12. 12. Mesa de trabalhosábado, 9 de julho de 2011
  13. 13. Lendo o Códigosábado, 9 de julho de 2011
  14. 14. Ninho de Ratosábado, 9 de julho de 2011
  15. 15. Ficou nervoso ...sábado, 9 de julho de 2011
  16. 16. Seus conhecimentossábado, 9 de julho de 2011
  17. 17. Resolveu o problema (um por um)sábado, 9 de julho de 2011
  18. 18. Mostrou quem manda!sábado, 9 de julho de 2011
  19. 19. Moral da históriasábado, 9 de julho de 2011
  20. 20. Pessoas vão te incriminar se você machucá-las!sábado, 9 de julho de 2011
  21. 21. O código não! :)sábado, 9 de julho de 2011
  22. 22. O que é código legado? Muitos dizem: “Todo código, que você não escreveu, é legado”.sábado, 9 de julho de 2011
  23. 23. O que é código legado? Muitos dizem: “Todo código, que você não escreveu, é legado”. Outros dizem: “Todo código, que você não escreveu e não possui testes, é legado”.sábado, 9 de julho de 2011
  24. 24. O que é código legado? Muitos dizem: “Todo código, que você não escreveu, é legado”. Outros dizem: “Todo código, que você não escreveu e não possui testes, é legado”. Outros pensaram: “Mas até o meu próprio código que eu escrevo, que “apenas funciona” vira um legado depois de algumas semanas ...”.sábado, 9 de julho de 2011
  25. 25. Código Legadosábado, 9 de julho de 2011
  26. 26. O começo é díficil!sábado, 9 de julho de 2011
  27. 27. Lidando com a Complexidadesábado, 9 de julho de 2011
  28. 28. Alguma gem de Testessábado, 9 de julho de 2011
  29. 29. RSpec chunky_bacon.should be_awesomesábado, 9 de julho de 2011
  30. 30. Shoulda chunky_bacon_should_be :awesomesábado, 9 de julho de 2011
  31. 31. Test::Unit assert_equal(:awesome, chunky_bacon)sábado, 9 de julho de 2011
  32. 32. Fake Objectssábado, 9 de julho de 2011
  33. 33. Mocha bacon = stub(:awesome => true) bacon.expects(:taste).returns(good)sábado, 9 de julho de 2011
  34. 34. Flexmock bacon = flexmock(:awesome => true) bacon.should_receive(:taste).and_return(good)sábado, 9 de julho de 2011
  35. 35. RSpec Mocks e Stubs bacon.stub!(:awesome).and_return(true) bacon.should_receive(:taste).and_return(good)sábado, 9 de julho de 2011
  36. 36. RR stub(bacon).awesome{true} stub(bacon).taste{good}sábado, 9 de julho de 2011
  37. 37. Métricassábado, 9 de julho de 2011
  38. 38. Flog • 1 a 10: Parabéns! • 11 a 20: Não tão ruim assim ... • 21 a 40: Talvez precise refatorar • 41 a 60: Escreva de novo • 61 a 100: WTF are you trying to do?sábado, 9 de julho de 2011
  39. 39. Flog • 1 a 10: Parabéns! • 11 a 20: Não tão ruim assim ... • 21 a 40: Talvez precise refatorar • 41 a 60: Escreva de novo • 61 a 100: WTF are you trying to do?sábado, 9 de julho de 2011
  40. 40. Flog • 1 a 10: Parabéns! • 11 a 20: Não tão ruim assim ... • 21 a 40: Talvez precise refatorar • 41 a 60: Escreva de novo • 61 a 100: WTF are you trying to do?sábado, 9 de julho de 2011
  41. 41. Flog • 1 a 10: Parabéns! • 11 a 20: Não tão ruim assim ... • 21 a 40: Talvez precise refatorar • 41 a 60: Escreva de novo • 61 a 100: WTF are you trying to do?sábado, 9 de julho de 2011
  42. 42. Flog • 1 a 10: Parabéns! • 11 a 20: Não tão ruim assim ... • 21 a 40: Talvez precise refatorar • 41 a 60: Escreva de novo • 61 a 100: o.O - WTF are you trying to do?sábado, 9 de julho de 2011
  43. 43. Flogsábado, 9 de julho de 2011
  44. 44. Flaysábado, 9 de julho de 2011
  45. 45. SimpleCov Cobertura de Código: require simplecov SimpleCov.startsábado, 9 de julho de 2011
  46. 46. Simplecovsábado, 9 de julho de 2011
  47. 47. Simplecovsábado, 9 de julho de 2011
  48. 48. Roodi Problemas de design no seu códigosábado, 9 de julho de 2011
  49. 49. Repita Comigo • “Medir e analisar meu código, serve para conhecer o meu próprio código.” Brian Liles (TAFT - Test all the F* time)sábado, 9 de julho de 2011
  50. 50. Testes de Aceitação Steaksábado, 9 de julho de 2011
  51. 51. Cucumber Funcionalidade: Relatorio Completo Sendo cliente Quero o Relatório Completo com os dados dos meus clientes Para uma Analise de crédito de uma ou várias empresas Cenário: Identificação da Empresa Filial Dado que estou consultando um CNPJ de uma empresa "filial" Quando eu aperto "Consultar em uma Página" Então deverá trazer os dados da "matriz" vindos da receita federal E deverá trazer os dados da "filial" vindos da receita federalsábado, 9 de julho de 2011
  52. 52. Steak feature "Articles", %q{ In order to have an awesome blog As an author I want to create and manage articles } do scenario "Article index" do Article.create!(:title => One) Article.create!(:title => Two) visit article_index page.should have_content(One) page.should have_content(Two) end endsábado, 9 de julho de 2011
  53. 53. Benchmark class Integer def simple_prime? (2..Math.sqrt(self).floor).all? {|i| (self % i).nonzero? } end endsábado, 9 de julho de 2011
  54. 54. Benchmark require "benchmark" Benchmark.benchmark do |bench| bench.report("Simple Prime") do (2..10_000).each { |i| i.simple_prime? } end bench.report(Stdlib) do (2..10_000).each { |i| i.prime? } end endsábado, 9 de julho de 2011
  55. 55. Benchmark CPU Time SysCpu User+Sys ElapsedTimeSimple Prime 0.130000 0.000000 0.130000 ( 0.133931)Stdlib 0.230000 0.000000 0.230000 ( 0.230975)sábado, 9 de julho de 2011
  56. 56. Profiler require profile (2..10_000).each { |i| i.simple_prime? }sábado, 9 de julho de 2011
  57. 57. Benchmark e Profiler class Integer def fast_prime? return true if self.equal?(2) return false if self.even? 3.step(Math.sqrt(self).floor, 2).all? { |i| (self % i).nonzero? } end end CPU Time SysCpu User+Sys ElapsedTime Simple Prime 0.130000 0.000000 0.130000 ( 0.133931) Fast Prime 0.070000 0.000000 0.070000 ( 0.079083) Stdlib 0.230000 0.000000 0.230000 ( 0.230975)sábado, 9 de julho de 2011
  58. 58. Benchmark e Profiler require profile (2..10_000).each { |i| i.fast_prime? }sábado, 9 de julho de 2011
  59. 59. Extendendo Ruby com C 1) Ruby Inline 2) Normalsábado, 9 de julho de 2011
  60. 60. Ruby Inline class Factorial inline do |builder| builder.c " long factorial_c(int max) { int i=max, result=1; while (i >= 2) { result *= i--; } return result; }" end endsábado, 9 de julho de 2011
  61. 61. Extensão Nativa #ext/extconf.rb require mkmf dir_config(hello_world) create_makefile(hello_world)sábado, 9 de julho de 2011
  62. 62. Extensão Nativa /* hello_world.c */ #include <ruby.h> VALUE hello_world(VALUE self){ return rb_str_new2("Hello World!"); } VALUE class_Hello; void Init_hello_world(){ class_Hello = rb_define_class("HelloWorld", rb_cObject); rb_define_method(class_Hello, "hello_world", hello_world, 0); } # In Ruby hello = HelloWorld.new hello.hello_world # => “Hello World!”sábado, 9 de julho de 2011
  63. 63. Automatizando InfinityTest (To Infinity and beyond)sábado, 9 de julho de 2011
  64. 64. InfinityTest $ infinity_test --rspecsábado, 9 de julho de 2011
  65. 65. InfinityTest $ infinity_test --rspecsábado, 9 de julho de 2011
  66. 66. InfinityTest $ infinity_test --rspecsábado, 9 de julho de 2011
  67. 67. Ruby!sábado, 9 de julho de 2011
  68. 68. “Não Entendi nada!!”sábado, 9 de julho de 2011
  69. 69. RubyCastssábado, 9 de julho de 2011
  70. 70. Pra acabarsábado, 9 de julho de 2011
  71. 71. Você precisa se importar pelo código.sábado, 9 de julho de 2011
  72. 72. Ame-osábado, 9 de julho de 2011
  73. 73. Ou o odeiesábado, 9 de julho de 2011
  74. 74. Se você amar seu código:sábado, 9 de julho de 2011
  75. 75. Cuide!sábado, 9 de julho de 2011
  76. 76. Faça o crescersábado, 9 de julho de 2011
  77. 77. Se você o odiar:sábado, 9 de julho de 2011
  78. 78. Reescreva-o no seu tempo devido e da forma correta.sábado, 9 de julho de 2011
  79. 79. Seja apaixonado pelo que está trabalhando.sábado, 9 de julho de 2011
  80. 80. Caso contrário você está morto por dentro.sábado, 9 de julho de 2011
  81. 81. Assim como seu código.sábado, 9 de julho de 2011
  82. 82. Mas não esqueça antes de tudo:sábado, 9 de julho de 2011
  83. 83. Se divirta!sábado, 9 de julho de 2011
  84. 84. Obrigado! ;) @tomas_stefano https://github.com/tomas-stefano http://rubycasts.com.br/sábado, 9 de julho de 2011

×