Robb broome rubyconf x presentation for publication

72
Rubyconf X Thursday, November 18, 2010

description

Rubyconf overview

Transcript of Robb broome rubyconf x presentation for publication

Page 1: Robb broome rubyconf x presentation for publication

Rubyconf X

Thursday, November 18, 2010

Page 2: Robb broome rubyconf x presentation for publication

Thursday, November 18, 2010

Page 3: Robb broome rubyconf x presentation for publication

Chelimsky::Dry

Thursday, November 18, 2010

Page 4: Robb broome rubyconf x presentation for publication

Chelimsky::Dry

• every time you reduce duplication you increase coupling by introducing new dependencies

Thursday, November 18, 2010

Page 5: Robb broome rubyconf x presentation for publication

Chelimsky::Dry

• every time you reduce duplication you increase coupling by introducing new dependencies

• metaprogram only when you really do not know the conditions

Thursday, November 18, 2010

Page 6: Robb broome rubyconf x presentation for publication

Chelimsky::Dry

• every time you reduce duplication you increase coupling by introducing new dependencies

• metaprogram only when you really do not know the conditions

• DRY. What does it mean?

Thursday, November 18, 2010

Page 7: Robb broome rubyconf x presentation for publication

Chelimsky::Dry

Thursday, November 18, 2010

Page 8: Robb broome rubyconf x presentation for publication

• Does not mean: “don’t type anything twice”

Chelimsky::Dry

Thursday, November 18, 2010

Page 9: Robb broome rubyconf x presentation for publication

Chelimsky::Dry

Thursday, November 18, 2010

Page 10: Robb broome rubyconf x presentation for publication

Chelimsky::Dry

• Every piece of knowledge

Thursday, November 18, 2010

Page 11: Robb broome rubyconf x presentation for publication

Chelimsky::Dry

• Every piece of knowledge

• must have a

Thursday, November 18, 2010

Page 12: Robb broome rubyconf x presentation for publication

Chelimsky::Dry

• Every piece of knowledge

• must have a

• single,

Thursday, November 18, 2010

Page 13: Robb broome rubyconf x presentation for publication

Chelimsky::Dry

• Every piece of knowledge

• must have a

• single,

• unambiguous,

Thursday, November 18, 2010

Page 14: Robb broome rubyconf x presentation for publication

Chelimsky::Dry

• Every piece of knowledge

• must have a

• single,

• unambiguous,

• authoritative representation

Thursday, November 18, 2010

Page 15: Robb broome rubyconf x presentation for publication

Chelimsky::Dry

• Every piece of knowledge

• must have a

• single,

• unambiguous,

• authoritative representation

• within a system

Thursday, November 18, 2010

Page 16: Robb broome rubyconf x presentation for publication

Chelimsky::Dry

Thursday, November 18, 2010

Page 17: Robb broome rubyconf x presentation for publication

Chelimsky::Dry

• before filters for orthogonal stuff:

Thursday, November 18, 2010

Page 18: Robb broome rubyconf x presentation for publication

Chelimsky::Dry

• before filters for orthogonal stuff:

• authentication

Thursday, November 18, 2010

Page 19: Robb broome rubyconf x presentation for publication

Chelimsky::Dry

• before filters for orthogonal stuff:

• authentication

• logging

Thursday, November 18, 2010

Page 20: Robb broome rubyconf x presentation for publication

Chelimsky::Dry

• before filters for orthogonal stuff:

• authentication

• logging

• not for finding records

Thursday, November 18, 2010

Page 21: Robb broome rubyconf x presentation for publication

Katz

• rails3

• short branches (2days)

• change code or tests, not both

• or, refactor up a level

• deprecation isolation (compat module)

• check out tests on the depot app

Thursday, November 18, 2010

Page 22: Robb broome rubyconf x presentation for publication

Matz

Thursday, November 18, 2010

Page 23: Robb broome rubyconf x presentation for publication

Matz

• ruby 2.0

Thursday, November 18, 2010

Page 24: Robb broome rubyconf x presentation for publication

Matz

• ruby 2.0

• by christmas

Thursday, November 18, 2010

Page 25: Robb broome rubyconf x presentation for publication

Matz

• ruby 2.0

• by christmas

• whatever year

Thursday, November 18, 2010

Page 26: Robb broome rubyconf x presentation for publication

Matz

• ruby 2.0

• by christmas

• whatever year

• embedded ruby

Thursday, November 18, 2010

Page 27: Robb broome rubyconf x presentation for publication

opengovcodeforamerica

sunlight fdn• making gov data openly and freely available

• building apis with mongo db - eric mill, sunlight foundation / labs

• -> json view chrome extension

• sections argument , range arguments in url determine what’s returned

• different calls each map to dup'd data in the mongo db

• each call maps to a whole data structure in mongo

• crowdsourcing (guardian example). Needs a framework

Thursday, November 18, 2010

Page 28: Robb broome rubyconf x presentation for publication

aaron patterson@tenderlove

Thursday, November 18, 2010

Page 29: Robb broome rubyconf x presentation for publication

aaron patterson@tenderlove

• zomg

Thursday, November 18, 2010

Page 30: Robb broome rubyconf x presentation for publication

aaron patterson@tenderlove

• zomg

• rewrote arel

Thursday, November 18, 2010

Page 31: Robb broome rubyconf x presentation for publication

aaron patterson@tenderlove

• zomg

• rewrote arel

• superficial vs deep refactoring

Thursday, November 18, 2010

Page 32: Robb broome rubyconf x presentation for publication

aaron patterson@tenderlove

• zomg

• rewrote arel

• superficial vs deep refactoring

• 6 weeks

Thursday, November 18, 2010

Page 33: Robb broome rubyconf x presentation for publication

aaron patterson@tenderlove

• zomg

• rewrote arel

• superficial vs deep refactoring

• 6 weeks

• working on integ with mongo

Thursday, November 18, 2010

Page 34: Robb broome rubyconf x presentation for publication

aaron patterson@tenderlove

does ruby scale?

Thursday, November 18, 2010

Page 35: Robb broome rubyconf x presentation for publication

aaron patterson@tenderlove

• benchmark over time

Thursday, November 18, 2010

Page 36: Robb broome rubyconf x presentation for publication

aaron patterson@tenderlove

Thursday, November 18, 2010

Page 37: Robb broome rubyconf x presentation for publication

aaron patterson@tenderlove

• inject is way slower than hash & a map

• Hash.[@list.map{|val| ... }]

Thursday, November 18, 2010

Page 38: Robb broome rubyconf x presentation for publication

aaron patterson@tenderlove

• inject is way slower than hash & a map

• Hash.[@list.map{|val| ... }]

• class_eval is way faster than define_method because dm uses a proc activation

Thursday, November 18, 2010

Page 39: Robb broome rubyconf x presentation for publication

aaron patterson@tenderlove

• inject is way slower than hash & a map

• Hash.[@list.map{|val| ... }]

• class_eval is way faster than define_method because dm uses a proc activation

• attr_reader way faster than a method

Thursday, November 18, 2010

Page 40: Robb broome rubyconf x presentation for publication

jake scruggs

• Metric_fu

• The great thing about standards is that there are so many to choose from

• when to fix, when to refactor (flog>60)

• high churn objects desire better test cov

Thursday, November 18, 2010

Page 41: Robb broome rubyconf x presentation for publication

polite programmer’s guide

• testing private methods?

• monkey-patch. evil or not?

• fail if instance_methods.map.... include?(:mymethod)

• new method v existing

• delegate vertically if you own, horizontally if not

Thursday, November 18, 2010

Page 42: Robb broome rubyconf x presentation for publication

Scott Chacongithub

Thursday, November 18, 2010

Page 43: Robb broome rubyconf x presentation for publication

Scott Chacongithub$ git describe HEAD

Thursday, November 18, 2010

Page 44: Robb broome rubyconf x presentation for publication

Scott Chacongithub$ git describe HEAD

v0.2.4-25-g8a3f93b

Thursday, November 18, 2010

Page 45: Robb broome rubyconf x presentation for publication

Scott Chacongithub$ git describe HEAD

v0.2.4-25-g8a3f93b

$ git describe HEAD@{1.month.ago}

Thursday, November 18, 2010

Page 46: Robb broome rubyconf x presentation for publication

Scott Chacongithub$ git describe HEAD

v0.2.4-25-g8a3f93b

$ git describe HEAD@{1.month.ago}v0.2.4-6-gf51a8ba

Thursday, November 18, 2010

Page 47: Robb broome rubyconf x presentation for publication

Scott Chacongithub$ git describe HEAD

v0.2.4-25-g8a3f93b

$ git describe HEAD@{1.month.ago}v0.2.4-6-gf51a8ba

git log --oneline --decorate --graph

Thursday, November 18, 2010

Page 48: Robb broome rubyconf x presentation for publication

Scott Chacongithub$ git describe HEAD

v0.2.4-25-g8a3f93b

$ git describe HEAD@{1.month.ago}v0.2.4-6-gf51a8ba

git log --oneline --decorate --graph

git bundle create repo.bundle master

Thursday, November 18, 2010

Page 49: Robb broome rubyconf x presentation for publication

Scott Chacongithub$ git describe HEAD

v0.2.4-25-g8a3f93b

$ git describe HEAD@{1.month.ago}v0.2.4-6-gf51a8ba

git log --oneline --decorate --graph

git bundle create repo.bundle master

git clone repo.bundle -b master repo

Thursday, November 18, 2010

Page 50: Robb broome rubyconf x presentation for publication

Scott Chacongithub$ git describe HEAD

v0.2.4-25-g8a3f93b

$ git describe HEAD@{1.month.ago}v0.2.4-6-gf51a8ba

git log --oneline --decorate --graph

git bundle create repo.bundle master

git clone repo.bundle -b master repo

git branch --merged

Thursday, November 18, 2010

Page 51: Robb broome rubyconf x presentation for publication

Scott Chacongithub$ git describe HEAD

v0.2.4-25-g8a3f93b

$ git describe HEAD@{1.month.ago}v0.2.4-6-gf51a8ba

git log --oneline --decorate --graph

git bundle create repo.bundle master

git clone repo.bundle -b master repo

git branch --merged

git branch --no-merged

Thursday, November 18, 2010

Page 52: Robb broome rubyconf x presentation for publication

Scott Chacongithub$ git describe HEAD

v0.2.4-25-g8a3f93b

$ git describe HEAD@{1.month.ago}v0.2.4-6-gf51a8ba

git log --oneline --decorate --graph

git bundle create repo.bundle master

git clone repo.bundle -b master repo

git branch --merged

git branch --no-merged

git rerere (Reuse Recorded Resolution)

Thursday, November 18, 2010

Page 53: Robb broome rubyconf x presentation for publication

DHH

Thursday, November 18, 2010

Page 54: Robb broome rubyconf x presentation for publication

DHH

Thursday, November 18, 2010

Page 55: Robb broome rubyconf x presentation for publication

DHH

Thursday, November 18, 2010

Page 56: Robb broome rubyconf x presentation for publication

DHH

Thursday, November 18, 2010

Page 57: Robb broome rubyconf x presentation for publication

DHH

monkey-patching

Thursday, November 18, 2010

Page 58: Robb broome rubyconf x presentation for publication

DHH

monkey-patching

freedom-patching

Thursday, November 18, 2010

Page 59: Robb broome rubyconf x presentation for publication

DHH

monkey-patching

freedom-patching

Thursday, November 18, 2010

Page 60: Robb broome rubyconf x presentation for publication

DHH

Thursday, November 18, 2010

Page 61: Robb broome rubyconf x presentation for publication

DHH

ruby is your friend, not your parents

Thursday, November 18, 2010

Page 62: Robb broome rubyconf x presentation for publication

DHH

ruby is your friend, not your parents

ruby - guidance

Thursday, November 18, 2010

Page 63: Robb broome rubyconf x presentation for publication

DHH

ruby is your friend, not your parents

ruby - guidance

java - enforcement

Thursday, November 18, 2010

Page 64: Robb broome rubyconf x presentation for publication

DHH

ruby is for consenting adults

Thursday, November 18, 2010

Page 65: Robb broome rubyconf x presentation for publication

Thursday, November 18, 2010

Page 66: Robb broome rubyconf x presentation for publication

DHH

Thursday, November 18, 2010

Page 67: Robb broome rubyconf x presentation for publication

DHHBFF

Thursday, November 18, 2010

Page 68: Robb broome rubyconf x presentation for publication

DHH

Thursday, November 18, 2010

Page 69: Robb broome rubyconf x presentation for publication

DHH

Thursday, November 18, 2010