waxing ballroom floors on the titanic

151
Bunk Monkey Just leave this up as people filter in to the room. Start off panel with “This really has no bearing on anything. It’s just here to give you a taste of what’s to come for the next 45 minutes.”

Upload: og-consulting

Post on 28-Oct-2014

26 views

Category:

Business


1 download

DESCRIPTION

Our talk from RailsConf 2008 goes over our experience in large-scale enterprise applications, leaving the enterprise, and finding similar problems as indepedent consultants.

TRANSCRIPT

Page 1: Waxing Ballroom Floors on the Titanic

Bunk Monkey

Just leave this up as people filter in to the room.

Start off panel with “This really has no bearing on anything. It’s just here to give you a taste of what’s to come for the next 45 minutes.”

Page 2: Waxing Ballroom Floors on the Titanic

Bunk MonkeySpunk Monkey

Just leave this up as people filter in to the room.

Start off panel with “This really has no bearing on anything. It’s just here to give you a taste of what’s to come for the next 45 minutes.”

Page 3: Waxing Ballroom Floors on the Titanic

Bunk MonkeySpunk Monkey

smegma

Just leave this up as people filter in to the room.

Start off panel with “This really has no bearing on anything. It’s just here to give you a taste of what’s to come for the next 45 minutes.”

Page 4: Waxing Ballroom Floors on the Titanic

Waxing Ballroom Floors on the Titanic

and other less seaworthy vessels

OG ConsultingKevin BarnesRick Bradley

Yossef Mendelssohn

be sure to start the meetronome at the beginning.

Page 5: Waxing Ballroom Floors on the Titanic

http://ogtastic.com/

http://ni.hili.st/

http://b.logi.cx -or- http://bl.ogtastic.com/

http://github.com/flogic/

OG Consulting

Page 6: Waxing Ballroom Floors on the Titanic

Awesomeness Competitors

OG Consulting?

Page 8: Waxing Ballroom Floors on the Titanic

This shit is hard

Page 9: Waxing Ballroom Floors on the Titanic

This shit is hardthat’s what she said

Page 10: Waxing Ballroom Floors on the Titanic

Do your besthttp://www.indorphyn.com/wp-content/uploads/2007/01/Sisyphus.jpg

Page 11: Waxing Ballroom Floors on the Titanic

No matter what the oddsThe Karate Kid, Columbia Pictures

Page 13: Waxing Ballroom Floors on the Titanic

t3h sinking ship

Page 14: Waxing Ballroom Floors on the Titanic

t3h project: goalsClinical system: 40,000+ patients / year

HIPAA, clinical trials, Sarbanes-Oxley

Full medical billing system

Share with 6-7 other large organizations

Common research community

Research-enabled clinical data

(t3h sinking ship)

Page 15: Waxing Ballroom Floors on the Titanic

t3h project: goalsClinical system: 40,000+ patients / year

HIPAA, clinical trials, Sarbanes-Oxley

Full medical billing system

Share with 6-7 other large organizations

Common research community

Research-enabled clinical data

(t3h sinking ship)

Save the world, yo

Page 16: Waxing Ballroom Floors on the Titanic

© Darrin Weissinger ([email protected])

This picture you’ve all seen, we’re the source.

Look, there’s actually attribution.

(t3h sinking ship)

Page 17: Waxing Ballroom Floors on the Titanic

t3h specs

we want the same system as we currently have, only AWESOME, and OURS, so we can prove to everyone we’re the best in the world.

oh, and do some good.

http://i160.photobucket.com/albums/t189/rossmcgrath16/redneck-mansion.jpg (t3h sinking ship)

Page 18: Waxing Ballroom Floors on the Titanic

What is expected

please consult org chart for portrait and name to accompany statue. thx.

--t3h boss

(t3h sinking ship)

Page 19: Waxing Ballroom Floors on the Titanic

What they wanthttp://www.talendforge.org/wiki/doku.php?id=what_is_new1_1 (t3h sinking ship)

Page 20: Waxing Ballroom Floors on the Titanic

Problems

http://www.nsc.org/statinfo/odds_dying.jpg (t3h sinking ship)

Page 21: Waxing Ballroom Floors on the Titanic

http://z.about.com/d/politicalhumor/1/0/u/L/bush_strategery.jpg (t3h sinking ship)

Page 22: Waxing Ballroom Floors on the Titanic

Meetings

so we push to meet with the actual people who supposedly know what the business does and wants

http://www.business-marketing.com/store/termination.html#5578 (t3h sinking ship)

Page 23: Waxing Ballroom Floors on the Titanic

and, months later, when we get meetings with them, it’s a series of months of meetings with mostly Managers

http://www.growingcoaches.com/webinar.htm (t3h sinking ship)

Page 24: Waxing Ballroom Floors on the Titanic

and if that’s not enough, the CIO (who is a consultant) sets up his own Mega-Synergy Task Force™

http://www.brandascension.com/Elevation_Products.html (t3h sinking ship)

Page 25: Waxing Ballroom Floors on the Titanic

or “How to waste time and demoralize people.”

http://alternative-gifts.haluy.co.uk/product,details,,63e9efe53d8cd9167025f239b675592e.html (t3h sinking ship)

Page 26: Waxing Ballroom Floors on the Titanic

Be sure to quantify value

one way to make it clear how much of a waste of time meetings are is to track them via meetronome. compare with the cost of the most recent denied request for, say, keyboards, wireless router, non-paralyzing desk chairs, etc.

show the running meetronome now.

(t3h sinking ship)

Page 27: Waxing Ballroom Floors on the Titanic

The Enterprise Strikes Back

http://www.startrekdesktopwallpaper.com/wallpapers/StarTrek_starship_Enterprise_NCC1701A_firing_phasers_freecomputerdesktop_wallpaper_1024.shtml (t3h sinking ship)

Page 28: Waxing Ballroom Floors on the Titanic

Oracle

Java

cvs

svn trac

IRCPostgres

Ant

continuous integration

JUnit, etc.JBoss

EJB3.0

time

suckage

good

age

unit tests

SQL schemae

Hibernate

Big Design Up Front

domain driven design

AJAX

assigned tickets

pair-on-demand

Rails

for-profit partner

nightly conversions

public releases

CruiseControl

continuous builder

public trac

public IRC

public svn

mac laptops

wifi

lose technical lead

hire new developers

migrationsswitchtower

CTI

STI

1,000 meetings

storiesrelocating

getting more “Real”

Rake

voluntary tickets

continuous integrationanalysis patterns

“deployments”

auto deployments

Perceived progressthis was presented in RailsConf 2006, some snazzy unfolding left to right, showing all the things that were improving

(t3h sinking ship)

Page 29: Waxing Ballroom Floors on the Titanic

time

suckage

good

age

The ice under the Titanic

Corporate Politics

Croneyism

Long-hidden incompetence

That Which Should Not Be

Ass-Covering

That Which Shall Not Be Named

Old age and treachery

Budget paddingCan’t-Do Attitude

Fear of ChangeTurf

Finger-pointing

Blame Shifting

visionquestswishful thinking by mgmt

storiesstories

t3h webinar

(t3h sinking ship)

Page 30: Waxing Ballroom Floors on the Titanic

Do your besthttp://www.sffringe.org/fringe06/06pix/sisyphus.jpg (t3h sinking ship)

Page 31: Waxing Ballroom Floors on the Titanic

Hiring

Hiring is purely about budgets and politics. A slot is open? Fill it with a warm body. A great person is available? No slot, no hire.

A great person is available and you have 5 shitty people on your team? No firing in t3h enterprise.

that’s what she said

that’s what she said(t3h sinking ship)

Page 32: Waxing Ballroom Floors on the Titanic

10 Interview QuestionsFor Developers

(t3h sinking ship)

Page 33: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• How’s your test coverage?

For Developers

(t3h sinking ship)

Page 34: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• How’s your test coverage?

• Oracle or SQLServer?

For Developers

(t3h sinking ship)

Page 35: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• How’s your test coverage?

• Oracle or SQLServer?

• Perforce or Bitkeeper?

For Developers

(t3h sinking ship)

Page 36: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• How’s your test coverage?

• Oracle or SQLServer?

• Perforce or Bitkeeper?

• Praise or Annotate?

For Developers

(t3h sinking ship)

Page 37: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• How’s your test coverage?

• Oracle or SQLServer?

• Perforce or Bitkeeper?

• Praise or Annotate?

• Java or PHP?

For Developers

(t3h sinking ship)

Page 38: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• How’s your test coverage?

• Oracle or SQLServer?

• Perforce or Bitkeeper?

• Praise or Annotate?

• Java or PHP?

• Singleton or Visitor?

For Developers

(t3h sinking ship)

Page 39: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• How’s your test coverage?

• Oracle or SQLServer?

• Perforce or Bitkeeper?

• Praise or Annotate?

• Java or PHP?

• Singleton or Visitor?

• Spolsky or Arrington?

For Developers

(t3h sinking ship)

Page 40: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• How’s your test coverage?

• Oracle or SQLServer?

• Perforce or Bitkeeper?

• Praise or Annotate?

• Java or PHP?

• Singleton or Visitor?

• Spolsky or Arrington?

• Have you implemented final, destructors, or xdoclet in Ruby?

For Developers

(t3h sinking ship)

Page 41: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• How’s your test coverage?

• Oracle or SQLServer?

• Perforce or Bitkeeper?

• Praise or Annotate?

• Java or PHP?

• Singleton or Visitor?

• Spolsky or Arrington?

• Have you implemented final, destructors, or xdoclet in Ruby?

• Have you ever written an empty if just to use the else?

For Developers

(t3h sinking ship)

Page 42: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• How’s your test coverage?

• Oracle or SQLServer?

• Perforce or Bitkeeper?

• Praise or Annotate?

• Java or PHP?

• Singleton or Visitor?

• Spolsky or Arrington?

• Have you implemented final, destructors, or xdoclet in Ruby?

• Have you ever written an empty if just to use the else?

• Who owns the code?

For Developers

(t3h sinking ship)

Page 43: Waxing Ballroom Floors on the Titanic

10 Interview QuestionsFor Sysadmins

“Puppet or Cfengine” may be the only question with a right answer

(t3h sinking ship)

Page 44: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• What’s your deployment process?

For Sysadmins

“Puppet or Cfengine” may be the only question with a right answer

(t3h sinking ship)

Page 45: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• What’s your deployment process?

• Security or Availability?

For Sysadmins

“Puppet or Cfengine” may be the only question with a right answer

(t3h sinking ship)

Page 46: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• What’s your deployment process?

• Security or Availability?

• XP or Vista?

For Sysadmins

“Puppet or Cfengine” may be the only question with a right answer

(t3h sinking ship)

Page 47: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• What’s your deployment process?

• Security or Availability?

• XP or Vista?

• Oracle or SQLServer?

For Sysadmins

“Puppet or Cfengine” may be the only question with a right answer

(t3h sinking ship)

Page 48: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• What’s your deployment process?

• Security or Availability?

• XP or Vista?

• Oracle or SQLServer?

• Java or Perl?

For Sysadmins

“Puppet or Cfengine” may be the only question with a right answer

(t3h sinking ship)

Page 49: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• What’s your deployment process?

• Security or Availability?

• XP or Vista?

• Oracle or SQLServer?

• Java or Perl?

• ksh or tcsh?

For Sysadmins

“Puppet or Cfengine” may be the only question with a right answer

(t3h sinking ship)

Page 50: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• What’s your deployment process?

• Security or Availability?

• XP or Vista?

• Oracle or SQLServer?

• Java or Perl?

• ksh or tcsh?

• Ant or Maven?

For Sysadmins

“Puppet or Cfengine” may be the only question with a right answer

(t3h sinking ship)

Page 51: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• What’s your deployment process?

• Security or Availability?

• XP or Vista?

• Oracle or SQLServer?

• Java or Perl?

• ksh or tcsh?

• Ant or Maven?

• ports or yum?

For Sysadmins

“Puppet or Cfengine” may be the only question with a right answer

(t3h sinking ship)

Page 52: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• What’s your deployment process?

• Security or Availability?

• XP or Vista?

• Oracle or SQLServer?

• Java or Perl?

• ksh or tcsh?

• Ant or Maven?

• ports or yum?

• Puppet or Cfengine?

For Sysadmins

“Puppet or Cfengine” may be the only question with a right answer

(t3h sinking ship)

Page 53: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• What’s your deployment process?

• Security or Availability?

• XP or Vista?

• Oracle or SQLServer?

• Java or Perl?

• ksh or tcsh?

• Ant or Maven?

• ports or yum?

• Puppet or Cfengine?

• CI?

For Sysadmins

“Puppet or Cfengine” may be the only question with a right answer

(t3h sinking ship)

Page 54: Waxing Ballroom Floors on the Titanic

http://stuartscustoms.freeyellow.com/Fairmont.html (t3h sinking ship)

Quality

Always strive for EPIC mfn quality.

Page 55: Waxing Ballroom Floors on the Titanic

Transparency

Be 100% transparent

http://www.brianmicklethwait.com/index.php/weblog/computer_transparency/ (t3h sinking ship)

Page 56: Waxing Ballroom Floors on the Titanic

Publicizing your transparency means never having to answer the question: “Why didn’t I know about this?”

http://drinkingliberally.org/blogs/idahofalls/archives/2007/02/his_head_will_g.html (t3h sinking ship)

Transparency

Page 57: Waxing Ballroom Floors on the Titanic

t3h rules

(t3h sinking ship)

Page 58: Waxing Ballroom Floors on the Titanic

The Gantt Chart

http://openproj.org/wiki/index.php?title=Gantt_Chart (t3h sinking ship)

Page 59: Waxing Ballroom Floors on the Titanic

Mr. Gantt Chart

http://www.gantt-chart.biz/gantt-charting-made-easy/ (t3h sinking ship)

Page 60: Waxing Ballroom Floors on the Titanic

(t3h sinking ship)

t3h Cant Chart

Page 61: Waxing Ballroom Floors on the Titanic

Mr. Cant Chart

http://www.flickr.com/photos/atmos/217012352/ (t3h sinking ship)

Page 62: Waxing Ballroom Floors on the Titanic

t3h Cant Chart

• Identify all the tasks that you are responsible for.

(t3h sinking ship)

Page 63: Waxing Ballroom Floors on the Titanic

• Plot out what depends on what.

(t3h sinking ship)

t3h Cant Chart

Page 64: Waxing Ballroom Floors on the Titanic

• From those tasks, find the CANT™ – who is holding up the works, and what are their excuses.

• A task can have many CANTs.

• Tally the CANTs.

(t3h sinking ship)

t3h Cant Chart

Page 65: Waxing Ballroom Floors on the Titanic

• Separate the tasks you will do from those with CANTs.

(t3h sinking ship)

t3h Cant Chart

Page 66: Waxing Ballroom Floors on the Titanic

• Apply the secret sauce CANT formula.

• The big tasks are where you need to be focused.

• Your enemies are those jerks with the highest CANT scores.

(t3h sinking ship)

t3h Cant Chart

Page 67: Waxing Ballroom Floors on the Titanic

• You either won or failed hardcore.

(t3h sinking ship)

t3h Cant Chart

Page 68: Waxing Ballroom Floors on the Titanic

10 Interview QuestionsFor the company

(t3h sinking ship)

Page 69: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• How’s your test coverage?

For the company

(t3h sinking ship)

Page 70: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• How’s your test coverage?

• Oracle or SQLServer?

For the company

(t3h sinking ship)

Page 71: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• How’s your test coverage?

• Oracle or SQLServer?

• FogBugz or Excel?

For the company

(t3h sinking ship)

Page 72: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• How’s your test coverage?

• Oracle or SQLServer?

• FogBugz or Excel?

• What’s your deployment process?

For the company

(t3h sinking ship)

Page 73: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• How’s your test coverage?

• Oracle or SQLServer?

• FogBugz or Excel?

• What’s your deployment process?

• What’s your HR department like?

For the company

(t3h sinking ship)

Page 74: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• How’s your test coverage?

• Oracle or SQLServer?

• FogBugz or Excel?

• What’s your deployment process?

• What’s your HR department like?

• Who owns the code?

For the company

(t3h sinking ship)

Page 75: Waxing Ballroom Floors on the Titanic

10 Interview Questions

• How’s your test coverage?

• Oracle or SQLServer?

• FogBugz or Excel?

• What’s your deployment process?

• What’s your HR department like?

• Who owns the code?

For the company

6

(t3h sinking ship)

Page 76: Waxing Ballroom Floors on the Titanic

Plowing a new fieldDonald Miralle/Getty Images, http://recipes.howstuffworks.com/salt5.htm

Page 77: Waxing Ballroom Floors on the Titanic

Any code can be legacy code

this is Karl, or a we call him Karlsbad (at testing)

Page 78: Waxing Ballroom Floors on the Titanic

def associate( association, options = {} ) return false unless association && association.account_id == self.account_id && association.uniq_id != self.uniq_id options = { :update_record => true }.merge( options ) self.associations.each do |a| if association.uniq_id == a.uniq_id return false end end associations << association self.save_with_validation false association.associate( self, :update_record => false ) self.save_with_validation false if options[:update_record] if self.record self.record.update_build() if self.record else self.record = Record.build_with self end endend

Legacy Code

(Legacy Code)

Page 79: Waxing Ballroom Floors on the Titanic

(plowing a new field)

Legacy Code

Page 80: Waxing Ballroom Floors on the Titanic

class RecursiveMock def initialize(args = {}) @stubs = {}.merge(args) end def method_missing(meth, *args) if @stubs.has_key?(meth.to_sym) return @stubs[meth.to_sym] end self endend

(Legacy Code)

Characterization Tests

Page 81: Waxing Ballroom Floors on the Titanic

module Spec::Example::ExampleGroupMethods def currently(name, &block) it("*** CURRENTLY *** #{name}", &block) end

alias_method :she, :itend

Characterization Tests

(Legacy Code)

Page 82: Waxing Ballroom Floors on the Titanic

describe YourMom do before :each { @your_mom = YourMom.new } currently "is at my house" do @your_mom.should be_at_my_house end describe "when at my house" do before :each do @your_mom.stubs(:at_my_house?).returns(true) end she "should take the bus home" endend

(Legacy Code)

Characterization Tests

Page 83: Waxing Ballroom Floors on the Titanic

YourMom- *** CURRENTLY *** is at my house

YourMom when at my house- should take the bus home (PENDING: Not Yet Implemented)

Pending:YourMom when at my house should take the bus home (Not Yet Implemented)

Finished in 0.174782 seconds

2 examples, 0 failures, 1 pending

(Legacy Code)

Characterization Tests

Page 84: Waxing Ballroom Floors on the Titanic

currently "has a summary which includes the amount truncated to dollars" do @payment.stubs(:account).returns(stub('acct', :name => 'acct 1')) @payment.amount_in_cents = 1234 @payment.summary.should match(/\$12\b/) end

currently "has a summary which fails if payment amount is not set" do @payment.stubs(:account).returns(stub('acct', :name => 'acct 1')) @payment.amount_in_cents = nil lambda { @payment.summary }.should raise_error end

(Legacy Code)

Characterization Tests

Page 85: Waxing Ballroom Floors on the Titanic

(plowing a new field)

Legacy Code

Page 86: Waxing Ballroom Floors on the Titanic

old-school cod3rz

(plowing a new field)http://www.geneontology.org/images/go-database-ER-diagram.png

Page 87: Waxing Ballroom Floors on the Titanic

Feedback Loops

Page 88: Waxing Ballroom Floors on the Titanic

(feedback loops)

Page 89: Waxing Ballroom Floors on the Titanic

(feedback loops)

Page 90: Waxing Ballroom Floors on the Titanic

(feedback loops)

Page 91: Waxing Ballroom Floors on the Titanic
Page 92: Waxing Ballroom Floors on the Titanic

Feedback

http://www.etsu.edu/philos/classes/rk/postmodern/htmdescriptionpages/30paik2desc.jpg (feedback loops)

• Cruisecontrol.rb; flog, heckle, flame; Use EC2 or slices if needed; Do short iterations, perform post-mortems

Page 93: Waxing Ballroom Floors on the Titanic

What Rails gets wrongand when you should care

Page 94: Waxing Ballroom Floors on the Titanic

Fixtures

(rails == wrong)

Page 95: Waxing Ballroom Floors on the Titanic

Fixtures

(rails == wrong)

Page 96: Waxing Ballroom Floors on the Titanic

Fixtures

(rails == wrong)

Page 97: Waxing Ballroom Floors on the Titanic

Fixtures

(rails == wrong)

Page 98: Waxing Ballroom Floors on the Titanic
Page 99: Waxing Ballroom Floors on the Titanic

Fixtures

(rails == wrong)

Page 100: Waxing Ballroom Floors on the Titanic

Fixtures

(rails == wrong)

Page 101: Waxing Ballroom Floors on the Titanic

Fixtures == Cargo Cult

(rails == wrong)

Page 102: Waxing Ballroom Floors on the Titanic

Solution?

http://www.imagechef.com/ic/make.jsp?tid=Bling+Necklace (rails == wrong)

Page 103: Waxing Ballroom Floors on the Titanic

http://github.com/flogic/object_daddy

(rails == wrong)

object_daddy

Page 104: Waxing Ballroom Floors on the Titanic

class Category < ActiveRecord::Base has_many :items validates_presence_of :name validates_uniqueness_of :nameend

class Item < ActiveRecord::Base belongs_to :category validates_presence_of :category validates_presence_of :code validates_uniqueness_of :code validates_format_of :code, :with => /^[a-zA-Z]+-\d+$/end

Object Daddy

(rails == wrong)

Models

Page 105: Waxing Ballroom Floors on the Titanic

class Category < ActiveRecord::Base has_many :items validates_presence_of :name validates_uniqueness_of :nameend

(rails == wrong)

class Category generator_for :name, :start => 'test' do |prev| prev.succ endend

Model

Exemplar

Object Daddy

Page 106: Waxing Ballroom Floors on the Titanic

class Item < ActiveRecord::Base belongs_to :category validates_presence_of :category validates_presence_of :code validates_uniqueness_of :code validates_format_of :code, :with => /^[a-zA-Z]+-\d+$/end

(rails == wrong)

class Item generator_for :code, :start => 'test-001' do |prev| prefix, number = prev.split('-') [prefix, number.succ].join('-') endend

Model

Exemplar

Object Daddy

Page 107: Waxing Ballroom Floors on the Titanic

Loading development environment (Rails 2.0.2)>>

(rails == wrong)

some unexpected problems came up while making this slide.

OD is intended for use in tests, not the console. This is just an example for illumination.

It’s kind of difficult to write tests for how something works in a non-test setting.

Object Daddy

Page 108: Waxing Ballroom Floors on the Titanic

Loading development environment (Rails 2.0.2)>>

(rails == wrong)

some unexpected problems came up while making this slide.

OD is intended for use in tests, not the console. This is just an example for illumination.

It’s kind of difficult to write tests for how something works in a non-test setting.

Category.generate=> #<Category id: 26, name: "test">>>

Object Daddy

Page 109: Waxing Ballroom Floors on the Titanic

Loading development environment (Rails 2.0.2)>>

(rails == wrong)

=> #<Category id: 27, name: "tesu">>>

some unexpected problems came up while making this slide.

OD is intended for use in tests, not the console. This is just an example for illumination.

It’s kind of difficult to write tests for how something works in a non-test setting.

Category.generate=> #<Category id: 26, name: "test">>> Category.generate

Object Daddy

Page 110: Waxing Ballroom Floors on the Titanic

Loading development environment (Rails 2.0.2)>>

(rails == wrong)

=> #<Category id: 27, name: "tesu">>> => #<Item id: 4, code: "test-001", category_id: 28>>>

some unexpected problems came up while making this slide.

OD is intended for use in tests, not the console. This is just an example for illumination.

It’s kind of difficult to write tests for how something works in a non-test setting.

Category.generate=> #<Category id: 26, name: "test">>> Category.generate

Item.generate

Object Daddy

Page 111: Waxing Ballroom Floors on the Titanic

Loading development environment (Rails 2.0.2)>>

(rails == wrong)

=> #<Category id: 27, name: "tesu">>> => #<Item id: 4, code: "test-001", category_id: 28>>>

some unexpected problems came up while making this slide.

OD is intended for use in tests, not the console. This is just an example for illumination.

It’s kind of difficult to write tests for how something works in a non-test setting.

Category.generate=> #<Category id: 26, name: "test">>> Category.generate

Item.generate

cat = Category.find :first

cat.items.generate=> #<Category id: 26, name: "test">>>=> #<Item id: 5, code: "test-002", category_id: 26>>>

Object Daddy

Page 112: Waxing Ballroom Floors on the Titanic

Loading development environment (Rails 2.0.2)>>

(rails == wrong)

=> #<Category id: 27, name: "tesu">>> => #<Item id: 4, code: "test-001", category_id: 28>>>

some unexpected problems came up while making this slide.

OD is intended for use in tests, not the console. This is just an example for illumination.

It’s kind of difficult to write tests for how something works in a non-test setting.

Category.generate=> #<Category id: 26, name: "test">>> Category.generate

Item.generate

cat = Category.find :first

cat.items.generate=> #<Category id: 26, name: "test">>>=> #<Item id: 5, code: "test-002", category_id: 26>>>=> #<Category id: 29, name: "things">>>

Category.generate(:name => 'things')

Object Daddy

Page 113: Waxing Ballroom Floors on the Titanic

Loading development environment (Rails 2.0.2)>>

(rails == wrong)

=> #<Category id: 27, name: "tesu">>> => #<Item id: 4, code: "test-001", category_id: 28>>>

=> #<Category id: 30, name: "tesw">

some unexpected problems came up while making this slide.

OD is intended for use in tests, not the console. This is just an example for illumination.

It’s kind of difficult to write tests for how something works in a non-test setting.

Category.generate=> #<Category id: 26, name: "test">>> Category.generate

Item.generate

cat = Category.find :first

cat.items.generate=> #<Category id: 26, name: "test">>>=> #<Item id: 5, code: "test-002", category_id: 26>>>=> #<Category id: 29, name: "things">>>

Category.generate(:name => 'things')

Category.generate

Object Daddy

Page 114: Waxing Ballroom Floors on the Titanic

class Employee # calls Employee.next_username generator_for :username, :method => :next_username

# calls SSNGenerator.next generator_for :ssn, :class => SSNGenerator

generator_for(:hired_on) { Date.today }

generator_for :nickname, 'Bruce'

generator_for :fingers => 5end

(rails == wrong)

Object Daddy

Page 115: Waxing Ballroom Floors on the Titanic

The New Hotness

Page 116: Waxing Ballroom Floors on the Titanic

The New Hotness

Sinatra

http://www.amazon.com/Capitol-Years-Frank-Sinatra/dp/B000002UWM

Page 117: Waxing Ballroom Floors on the Titanic

The New Hotness

Hobo

http://akugel.wordpress.com/2007/03/27/the-hobo-code/

Page 118: Waxing Ballroom Floors on the Titanic

The New Hotness

Camping

http://fiberfib.com/en/benicassim/where-to-sleep/camping-areas/

Page 119: Waxing Ballroom Floors on the Titanic

The New Hotness

Merb

http://www.pastdeadline.com/2007/08/merv-a-man-for-.html

Page 120: Waxing Ballroom Floors on the Titanic

The New Hotness

Ramaze

http://www.geocities.com/athens/2962/colourbook/http://www.descendingashtray.com/index.php?s=labyrinth

Page 121: Waxing Ballroom Floors on the Titanic

The New Hotness

Page 122: Waxing Ballroom Floors on the Titanic

Documentation

Page 123: Waxing Ballroom Floors on the Titanic

Questionable

Page 124: Waxing Ballroom Floors on the Titanic

or Trustworthy

The if expression - evaluates body if expression is true - does not evaluate body if expression is false - does not evaluate else-body if expression is true - evaluates only else-body if expression is false - returns result of then-body evaluation if expression is true - returns result of last statement in then-body if expression is true

Page 125: Waxing Ballroom Floors on the Titanic

Useful

Page 126: Waxing Ballroom Floors on the Titanic

or not

Page 127: Waxing Ballroom Floors on the Titanic

w00t

(rails == wrong)

Then

http://www.juixe.com/techknow/wp-content/uploads/2008/04/ruby_books.png

Now

Page 128: Waxing Ballroom Floors on the Titanic

Metrics

Page 129: Waxing Ballroom Floors on the Titanic

Metrics

Transactions Per Secondhttp://www.flickr.com/photos/edame/351834048/

Page 130: Waxing Ballroom Floors on the Titanic

Metrics

Page 131: Waxing Ballroom Floors on the Titanic

Consider the following numbers.(expected)

Metrics

Page 132: Waxing Ballroom Floors on the Titanic

• Transactions per second

Consider the following numbers.(expected)

Metrics

Page 133: Waxing Ballroom Floors on the Titanic

• Transactions per second

• Users per year

Consider the following numbers.(expected)

Metrics

Page 134: Waxing Ballroom Floors on the Titanic

• Transactions per second

• Users per year

Consider the following numbers.(expected)

Which is larger?

Metrics

Page 135: Waxing Ballroom Floors on the Titanic

One more important number to consider.

Metrics

Page 136: Waxing Ballroom Floors on the Titanic

• Dollars per transaction

One more important number to consider.

Metrics

Page 137: Waxing Ballroom Floors on the Titanic

• Dollars per transaction

One more important number to consider.

Metrics

Page 138: Waxing Ballroom Floors on the Titanic

• object_daddy

• timely

• shmemeter

• autochronic

• freshtrack

• nihilist_bot (& http://ni.hili.st/)

• ultrasphinx_search_wrapper

• flame (aka flog w/ tests & blame)

What has OG done for me lately?

Check it out on githubuser: flogic

Page 139: Waxing Ballroom Floors on the Titanic

Free Shizzle

Page 140: Waxing Ballroom Floors on the Titanic

The 2 Down Days in pr0n

That’s what she said.

(free shizzle)

Page 141: Waxing Ballroom Floors on the Titanic

What does OG stand for?

(free shizzle)

Page 142: Waxing Ballroom Floors on the Titanic

What does OG stand for?

http://www.hermes-press.com/music_portal.htmhttp://www.hermes-press.com/ice-t.jpg (free shizzle)

Page 143: Waxing Ballroom Floors on the Titanic

What does OG stand for?

(free shizzle)

Page 144: Waxing Ballroom Floors on the Titanic

What does OG stand for?

http://www.freefoto.com/preview/09-14-57?ffid=09-14-57 (free shizzle)

Page 145: Waxing Ballroom Floors on the Titanic

What does OG stand for?

http://www.nypost.com/seven/03032007/tv/so_easy__even_abc_can_do_it_tv_.htm (free shizzle)

Page 146: Waxing Ballroom Floors on the Titanic

What does OG stand for?

http://www.samsquanch.ca/images/Friends/the%20riddler.jpg (free shizzle)

Page 147: Waxing Ballroom Floors on the Titanic

How much did this meeting cost?

It’s all about the cheddar.

(free shizzle)

Page 148: Waxing Ballroom Floors on the Titanic

In a landmark Bon Jovi song, why does Jon Bon “play for keeps?”

Page 149: Waxing Ballroom Floors on the Titanic

Questions?

Page 150: Waxing Ballroom Floors on the Titanic

and as promised...

Page 151: Waxing Ballroom Floors on the Titanic