SlideShare uma empresa Scribd logo
1 de 151
Baixar para ler offline
Just leave this up as
              people filter in to the
              room.




Bunk Monkey   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.”
Just leave this up as
                 people filter in to the
                 room.




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


                 smegma


Bunk Monkey               Start off panel with
                          “This really has no
                          bearing on anything. It’s
  Spunk Monkey            just here to give you a
                          taste of what’s to come
                          for the next 45 minutes.”
be sure to start the
                   meetronome at the
                   beginning.




  Waxing Ballroom
Floors on the Titanic
  and other less seaworthy vessels



                                           OG Consulting
                                                 Kevin Barnes
                                                 Rick Bradley
                                          Yossef Mendelssohn
OG Consulting

http://ogtastic.com/
http://ni.hili.st/
http://b.logi.cx -or- http://bl.ogtastic.com/
http://github.com/flogic/
OG Consulting?
  Awesomeness   Competitors
Who we’re not
http://www.gamespot.com/pages/unions/forums/show_msgs.php?topic_id=26319887&union_id=16254
http://scotlandonrails.com/speakers
This shit is hard
This shit is hard
     that’s what she said
Do your best
http://www.indorphyn.com/wp-content/uploads/2007/01/Sisyphus.jpg
No matter what the odds
The Karate Kid, Columbia Pictures
Here’s how
http://www.morningtoast.com/index.php/2007/08/im-sorry-i-missed-the-miss-teen-usa-pageant
t3h sinking ship
t3h project: goals
Clinical 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)
t3h project: goals
Clinical 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
Save the world, yo

                                           (t3h sinking ship)
This picture you’ve all
                       seen, we’re the source.

                       Look, there’s actually
                       attribution.




© Darrin Weissinger (darrin.weissinger@centerstone.org)




                                           (t3h sinking ship)
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.




                                                                            (t3h sinking ship)
http://i160.photobucket.com/albums/t189/rossmcgrath16/redneck-mansion.jpg
please consult org chart
              for portrait and name to
              accompany statue. thx.

              --t3h boss




What is expected
                    (t3h sinking ship)
What they want
                                                             (t3h sinking ship)
http://www.talendforge.org/wiki/doku.php?id=what_is_new1_1
Problems




                                                        (t3h sinking ship)
http://www.nsc.org/statinfo/odds_dying.jpg
(t3h sinking ship)
http://z.about.com/d/politicalhumor/1/0/u/L/bush_strategery.jpg
so we push to meet with
          the actual people who
          supposedly know what
          the business does and
          wants




                                                                Meetings
                                                                           (t3h sinking ship)
http://www.business-marketing.com/store/termination.html#5578
and, months later, when
                                            we get meetings with
                                            them, it’s a series of
                                            months of meetings with
                                            mostly Managers




                                                                      (t3h sinking ship)
http://www.growingcoaches.com/webinar.htm
and if that’s not enough,
             the CIO (who is a
             consultant) sets up his
             own Mega-Synergy Task
             Force™




                                                        (t3h sinking ship)
http://www.brandascension.com/Elevation_Products.html
or “How to waste time
           and demoralize people.”




                                                                                              (t3h sinking ship)
http://alternative-gifts.haluy.co.uk/product,details,,63e9efe53d8cd9167025f239b675592e.html
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.




Be sure to quantify value
                         (t3h sinking ship)
The Enterprise Strikes Back




                                                                                                                                                  (t3h sinking ship)
http://www.startrekdesktopwallpaper.com/wallpapers/StarTrek_starship_Enterprise_NCC1701A_firing_phasers_freecomputerdesktop_wallpaper_1024.shtml
Perceived progress                                                                        this was presented in
                                                                                                           RailsConf 2006, some
                                                                                                           snazzy unfolding left to
                                                                                                           right, showing all the
                                                                                                           things that were
                                                                                                           improving
                                                             Rails
                                         analysis patterns               hire new developers
                                                          Rake
                                                                continuous integration
                                         continuous integration                   migrations
                                                             nightly conversions switchtower getting more “Real”
                                 svn
                                     trac    public svn
goodage




                                                                     public trac
                                        domain driven design                                   wifi
                                                                 public releases         STI
                                              unit tests
                                                     AJAX continuous builder
                                           IRC
                              Postgres                                           mac laptops
                                                                                                   voluntary tickets
                             cvs              auto deployments
                                                                                           stories
                                                         public IRC                                  relocating
                                          pair-on-demand
                                                                                                                       time
            Oracle
                                    assigned tickets                                1,000 meetings
                             SQL schemae
  suckage




               Big Design Up Front
                                             JUnit, etc.
                           JBoss
                                     CruiseControl                   CTI
                               Ant
                “deployments”                                         lose technical lead
                         Java    EJB3.0
                             Hibernate
                     for-profit partner


                                                                                                        (t3h sinking ship)
The ice under the Titanic
goodage




                                                                                                           time
                    wishful thinking by mgmt              visionquests                t3h webinar

                                                                       Long-hidden incompetence
                         Budget padding
                                                Blame Shifting                        Can’t-Do Attitude

             Turf                      That Which Shall Not Be Named
  suckage




                                                                             Fear of Change
                                                                 Ass-Covering
                                 Croneyism
            Finger-pointing
                                                                                Old age and treachery
                                               Corporate Politics
            That Which Should Not Be



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



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




                                                                that’s what she said


  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.
                                                                      that’s what she said
                                                                  (t3h sinking ship)
10 Interview Questions
       For Developers




                        (t3h sinking ship)
10 Interview Questions
                     For Developers

•   How’s your test coverage?




                                      (t3h sinking ship)
10 Interview Questions
                     For Developers

•   How’s your test coverage?
•   Oracle or SQLServer?




                                      (t3h sinking ship)
10 Interview Questions
                     For Developers

•   How’s your test coverage?
•   Oracle or SQLServer?
•   Perforce or Bitkeeper?




                                      (t3h sinking ship)
10 Interview Questions
                     For Developers

•   How’s your test coverage?
•   Oracle or SQLServer?
•   Perforce or Bitkeeper?
•   Praise or Annotate?




                                      (t3h sinking ship)
10 Interview Questions
                     For Developers

•   How’s your test coverage?
•   Oracle or SQLServer?
•   Perforce or Bitkeeper?
•   Praise or Annotate?
•   Java or PHP?




                                      (t3h sinking ship)
10 Interview Questions
                     For Developers

•   How’s your test coverage?
•   Oracle or SQLServer?
•   Perforce or Bitkeeper?
•   Praise or Annotate?
•   Java or PHP?
•   Singleton or Visitor?




                                      (t3h sinking ship)
10 Interview Questions
                     For Developers

•   How’s your test coverage?
•   Oracle or SQLServer?
•   Perforce or Bitkeeper?
•   Praise or Annotate?
•   Java or PHP?
•   Singleton or Visitor?
•   Spolsky or Arrington?




                                      (t3h sinking ship)
10 Interview Questions
                      For Developers

•   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?



                                                    (t3h sinking ship)
10 Interview Questions
                      For Developers

•   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?


                                                    (t3h sinking ship)
10 Interview Questions
                      For Developers

•   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?
                                                    (t3h sinking ship)
10 Interview Questions
       For Sysadmins




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




                                     (t3h sinking ship)
10 Interview Questions
                      For Sysadmins

•   What’s your deployment process?




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




                                                    (t3h sinking ship)
10 Interview Questions
                      For Sysadmins

•   What’s your deployment process?
•   Security or Availability?




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




                                                    (t3h sinking ship)
10 Interview Questions
                      For Sysadmins

•   What’s your deployment process?
•   Security or Availability?
•   XP or Vista?




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




                                                    (t3h sinking ship)
10 Interview Questions
                      For Sysadmins

•   What’s your deployment process?
•   Security or Availability?
•   XP or Vista?
•   Oracle or SQLServer?


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




                                                    (t3h sinking ship)
10 Interview Questions
                      For Sysadmins

•   What’s your deployment process?
•   Security or Availability?
•   XP or Vista?
•   Oracle or SQLServer?
•   Java or Perl?

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




                                                    (t3h sinking ship)
10 Interview Questions
                      For Sysadmins

•   What’s your deployment process?
•   Security or Availability?
•   XP or Vista?
•   Oracle or SQLServer?
•   Java or Perl?
•   ksh or tcsh?
                         “Puppet or Cfengine” may
                         be the only question
                         with a right answer




                                                    (t3h sinking ship)
10 Interview Questions
                               For Sysadmins

•   What’s your deployment process?
•   Security or Availability?
•   XP or Vista?
•   Oracle or SQLServer?
•   Java or Perl?
•   ksh or tcsh?
•
                              “Puppet or Cfengine” may
    Ant or Maven?             be the only question
                              with a right answer




                                                         (t3h sinking ship)
10 Interview Questions
                               For Sysadmins

•   What’s your deployment process?
•   Security or Availability?
•   XP or Vista?
•   Oracle or SQLServer?
•   Java or Perl?
•   ksh or tcsh?
•
                              “Puppet or Cfengine” may
    Ant or Maven?             be the only question
                              with a right answer


•   ports or yum?



                                                         (t3h sinking ship)
10 Interview Questions
                               For Sysadmins

•   What’s your deployment process?
•   Security or Availability?
•   XP or Vista?
•   Oracle or SQLServer?
•   Java or Perl?
•   ksh or tcsh?
•
                              “Puppet or Cfengine” may
    Ant or Maven?             be the only question
                              with a right answer


•   ports or yum?
•   Puppet or Cfengine?


                                                         (t3h sinking ship)
10 Interview Questions
                               For Sysadmins

•   What’s your deployment process?
•   Security or Availability?
•   XP or Vista?
•   Oracle or SQLServer?
•   Java or Perl?
•   ksh or tcsh?
•
                              “Puppet or Cfengine” may
    Ant or Maven?             be the only question
                              with a right answer


•   ports or yum?
•   Puppet or Cfengine?
•   CI?
                                                         (t3h sinking ship)
Quality




                                                     Always strive for EPIC mfn quality.

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




                                                                  Be 100% transparent
                                                                                        (t3h sinking ship)
http://www.brianmicklethwait.com/index.php/weblog/computer_transparency/
Transparency




                    Publicizing your transparency means never having to answer the
                                question: “Why didn’t I know about this?”
                                                                                      (t3h sinking ship)
http://drinkingliberally.org/blogs/idahofalls/archives/2007/02/his_head_will_g.html
t3h rules


            (t3h sinking ship)
The Gantt Chart




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




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




                 (t3h sinking ship)
Mr. Cant Chart




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


• Identify all the tasks
  that you are
  responsible for.




                                 (t3h sinking ship)
t3h Cant Chart


• Plot out what
 depends on what.




                               (t3h sinking ship)
t3h Cant Chart

• 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


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




                               (t3h sinking ship)
t3h Cant Chart
• 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


• You either won or
 failed hardcore.




                               (t3h sinking ship)
10 Interview Questions
      For the company




                        (t3h sinking ship)
10 Interview Questions
                    For the company

•   How’s your test coverage?




                                      (t3h sinking ship)
10 Interview Questions
                    For the company

•   How’s your test coverage?
•   Oracle or SQLServer?




                                      (t3h sinking ship)
10 Interview Questions
                    For the company

•   How’s your test coverage?
•   Oracle or SQLServer?
•   FogBugz or Excel?




                                      (t3h sinking ship)
10 Interview Questions
                   For the company

•   How’s your test coverage?
•   Oracle or SQLServer?
•   FogBugz or Excel?
•   What’s your deployment process?




                                      (t3h sinking ship)
10 Interview Questions
                   For the company

•   How’s your test coverage?
•   Oracle or SQLServer?
•   FogBugz or Excel?
•   What’s your deployment process?
•   What’s your HR department like?




                                      (t3h sinking ship)
10 Interview Questions
                   For the company

•   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?




                                      (t3h sinking ship)
6
    10 Interview Questions
                   For the company

•   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?




                                      (t3h sinking ship)
Plowing a new field
Donald Miralle/Getty Images, http://recipes.howstuffworks.com/salt5.htm
this is Karl, or a we call him
                       Karlsbad (at testing)




Any code can be legacy code
Legacy Code
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
  end
end



                                                                     (Legacy Code)
Legacy Code




              (plowing a new field)
Characterization Tests
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
  end
end




                                      (Legacy Code)
Characterization Tests

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

  alias_method :she, :it
end




                                              (Legacy Code)
Characterization Tests
describe YourMom do
  before :each { @your_mom = YourMom.new }

 currently quot;is at my housequot; do
   @your_mom.should be_at_my_house
 end

 describe quot;when at my housequot; do
   before :each do
     @your_mom.stubs(:at_my_house?).returns(true)
   end

    she quot;should take the bus homequot;
  end
end

                                             (Legacy Code)
Characterization Tests
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

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

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




                                                                 (Legacy Code)
Legacy Code




              (plowing a new field)
old-school cod3rz




                                                                (plowing a new field)
http://www.geneontology.org/images/go-database-ER-diagram.png
Feedback Loops
(feedback loops)
(feedback loops)
(feedback loops)
Feedback
         •      Cruisecontrol.rb; flog, heckle,
                flame; Use EC2 or slices if
                needed; Do short iterations,
                perform post-mortems




                                                                                       (feedback loops)
http://www.etsu.edu/philos/classes/rk/postmodern/htmdescriptionpages/30paik2desc.jpg
What Rails gets wrong
    and when you should care
Fixtures




           (rails == wrong)
Fixtures




           (rails == wrong)
Fixtures




           (rails == wrong)
Fixtures




           (rails == wrong)
Fixtures




           (rails == wrong)
Fixtures




           (rails == wrong)
Fixtures == Cargo Cult




                   (rails == wrong)
Solution?




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


http://github.com/flogic/object_daddy




                                (rails == wrong)
Object Daddy
class Category < ActiveRecord::Base
  has_many :items

  validates_presence_of   :name
  validates_uniqueness_of :name
end



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


                        Models
                                                     (rails == wrong)
Object Daddy
class Category < ActiveRecord::Base
  has_many :items

  validates_presence_of   :name
  validates_uniqueness_of :name
end


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


                       Exemplar

                                                    (rails == wrong)
Object Daddy
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

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

                       Exemplar
                                                        (rails == wrong)
Object Daddy
                                                some unexpected
                                                problems came up while
                                                making this slide.
Loading development environment (Rails 2.0.2)
                                                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.




                                                (rails == wrong)
Object Daddy
                                                some unexpected
                                                problems came up while
                                                making this slide.
Loading development environment (Rails 2.0.2)
                                                OD is intended for use in
>> Category.generate                            tests, not the console.
=> #<Category id: 26, name: quot;testquot;>             This is just an example
                                                for illumination.
>>
                                                It’s kind of difficult to
                                                write tests for how
                                                something works in a
                                                non-test setting.




                                                (rails == wrong)
Object Daddy
                                                some unexpected
                                                problems came up while
                                                making this slide.
Loading development environment (Rails 2.0.2)
                                                OD is intended for use in
>> Category.generate                            tests, not the console.
=> #<Category id: 26, name: quot;testquot;>             This is just an example
                                                for illumination.
>> Category.generate
                                                It’s kind of difficult to
=> #<Category id: 27, name: quot;tesuquot;>             write tests for how
>>                                              something works in a
                                                non-test setting.




                                                (rails == wrong)
Object Daddy
                                                      some unexpected
                                                      problems came up while
                                                      making this slide.
Loading development environment (Rails 2.0.2)
                                                      OD is intended for use in
>> Category.generate                                  tests, not the console.
=> #<Category id: 26, name: quot;testquot;>                   This is just an example
                                                      for illumination.
>> Category.generate
                                                      It’s kind of difficult to
=> #<Category id: 27, name: quot;tesuquot;>                   write tests for how
>> Item.generate                                      something works in a
                                                      non-test setting.
=> #<Item id: 4, code: quot;test-001quot;, category_id: 28>
>>




                                                      (rails == wrong)
Object Daddy
                                                      some unexpected
                                                      problems came up while
                                                      making this slide.
Loading development environment (Rails 2.0.2)
                                                      OD is intended for use in
>> Category.generate                                  tests, not the console.
=> #<Category id: 26, name: quot;testquot;>                   This is just an example
                                                      for illumination.
>> Category.generate
                                                      It’s kind of difficult to
=> #<Category id: 27, name: quot;tesuquot;>                   write tests for how
>> Item.generate                                      something works in a
                                                      non-test setting.
=> #<Item id: 4, code: quot;test-001quot;, category_id: 28>
>> cat = Category.find :first
=> #<Category id: 26, name: quot;testquot;>
>> cat.items.generate
=> #<Item id: 5, code: quot;test-002quot;, category_id: 26>
>>




                                                      (rails == wrong)
Object Daddy
                                                      some unexpected
                                                      problems came up while
                                                      making this slide.
Loading development environment (Rails 2.0.2)
                                                      OD is intended for use in
>> Category.generate                                  tests, not the console.
=> #<Category id: 26, name: quot;testquot;>                   This is just an example
                                                      for illumination.
>> Category.generate
                                                      It’s kind of difficult to
=> #<Category id: 27, name: quot;tesuquot;>                   write tests for how
>> Item.generate                                      something works in a
                                                      non-test setting.
=> #<Item id: 4, code: quot;test-001quot;, category_id: 28>
>> cat = Category.find :first
=> #<Category id: 26, name: quot;testquot;>
>> cat.items.generate
=> #<Item id: 5, code: quot;test-002quot;, category_id: 26>
>> Category.generate(:name => 'things')
=> #<Category id: 29, name: quot;thingsquot;>
>>




                                                      (rails == wrong)
Object Daddy
                                                      some unexpected
                                                      problems came up while
                                                      making this slide.
Loading development environment (Rails 2.0.2)
                                                      OD is intended for use in
>> Category.generate                                  tests, not the console.
=> #<Category id: 26, name: quot;testquot;>                   This is just an example
                                                      for illumination.
>> Category.generate
                                                      It’s kind of difficult to
=> #<Category id: 27, name: quot;tesuquot;>                   write tests for how
>> Item.generate                                      something works in a
                                                      non-test setting.
=> #<Item id: 4, code: quot;test-001quot;, category_id: 28>
>> cat = Category.find :first
=> #<Category id: 26, name: quot;testquot;>
>> cat.items.generate
=> #<Item id: 5, code: quot;test-002quot;, category_id: 26>
>> Category.generate(:name => 'things')
=> #<Category id: 29, name: quot;thingsquot;>
>> Category.generate
=> #<Category id: 30, name: quot;teswquot;>




                                                      (rails == wrong)
Object Daddy

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 => 5
end




                                                       (rails == wrong)
The New Hotness
The New Hotness




                                                                  Sinatra

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




                                                        Hobo

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




                                                                Camping

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




                                                           Merb

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




                                                         Ramaze

http://www.geocities.com/athens/2962/colourbook/
http://www.descendingashtray.com/index.php?s=labyrinth
The New Hotness
Documentation
Questionable
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




             or Trustworthy
Useful
or not
w00t
                              Then                                               Now




                                                                                       (rails == wrong)
http://www.juixe.com/techknow/wp-content/uploads/2008/04/ruby_books.png
Metrics
Metrics




                                               Transactions Per Second
http://www.flickr.com/photos/edame/351834048/
Metrics
Metrics
Consider the following numbers.
(expected)
Metrics
Consider the following numbers.
(expected)


• Transactions per second
Metrics
Consider the following numbers.
(expected)


• Transactions per second
• Users per year
Metrics
Consider the following numbers.
(expected)


• Transactions per second
• Users per year
Which is larger?
Metrics
One more important number to consider.
Metrics
One more important number to consider.


•   Dollars per transaction
Metrics
One more important number to consider.


•   Dollars per transaction
What has OG done for me lately?

•   object_daddy
•
                                          Check it out on github

    timely                                user: flogic




•   shmemeter
•   autochronic
•   freshtrack
•   nihilist_bot (& http://ni.hili.st/)
•   ultrasphinx_search_wrapper
•   flame (aka flog w/ tests & blame)
Free Shizzle
The 2 Down Days in pr0n


That’s what she said.




                        (free shizzle)
What does OG stand for?




                     (free shizzle)
What does OG stand for?




http://www.hermes-press.com/music_portal.htm
                                               (free shizzle)
http://www.hermes-press.com/ice-t.jpg
What does OG stand for?




                     (free shizzle)
What does OG stand for?




                                                        (free shizzle)
http://www.freefoto.com/preview/09-14-57?ffid=09-14-57
What does OG stand for?




                                                                              (free shizzle)
http://www.nypost.com/seven/03032007/tv/so_easy__even_abc_can_do_it_tv_.htm
What does OG stand for?




                                                            (free shizzle)
http://www.samsquanch.ca/images/Friends/the%20riddler.jpg
How much did this meeting cost?




It’s all about the cheddar.




                                  (free shizzle)
In a landmark Bon Jovi song, why
 does Jon Bon “play for keeps?”
Questions?
and as promised...
Waxing Ballroom Floors on the Titanic

Mais conteúdo relacionado

Último

MAHA Global and IPR: Do Actions Speak Louder Than Words?
MAHA Global and IPR: Do Actions Speak Louder Than Words?MAHA Global and IPR: Do Actions Speak Louder Than Words?
MAHA Global and IPR: Do Actions Speak Louder Than Words?Olivia Kresic
 
2024 Numerator Consumer Study of Cannabis Usage
2024 Numerator Consumer Study of Cannabis Usage2024 Numerator Consumer Study of Cannabis Usage
2024 Numerator Consumer Study of Cannabis UsageNeil Kimberley
 
Case study on tata clothing brand zudio in detail
Case study on tata clothing brand zudio in detailCase study on tata clothing brand zudio in detail
Case study on tata clothing brand zudio in detailAriel592675
 
NewBase 19 April 2024 Energy News issue - 1717 by Khaled Al Awadi.pdf
NewBase  19 April  2024  Energy News issue - 1717 by Khaled Al Awadi.pdfNewBase  19 April  2024  Energy News issue - 1717 by Khaled Al Awadi.pdf
NewBase 19 April 2024 Energy News issue - 1717 by Khaled Al Awadi.pdfKhaled Al Awadi
 
Innovation Conference 5th March 2024.pdf
Innovation Conference 5th March 2024.pdfInnovation Conference 5th March 2024.pdf
Innovation Conference 5th March 2024.pdfrichard876048
 
8447779800, Low rate Call girls in New Ashok Nagar Delhi NCR
8447779800, Low rate Call girls in New Ashok Nagar Delhi NCR8447779800, Low rate Call girls in New Ashok Nagar Delhi NCR
8447779800, Low rate Call girls in New Ashok Nagar Delhi NCRashishs7044
 
Flow Your Strategy at Flight Levels Day 2024
Flow Your Strategy at Flight Levels Day 2024Flow Your Strategy at Flight Levels Day 2024
Flow Your Strategy at Flight Levels Day 2024Kirill Klimov
 
Kenya Coconut Production Presentation by Dr. Lalith Perera
Kenya Coconut Production Presentation by Dr. Lalith PereraKenya Coconut Production Presentation by Dr. Lalith Perera
Kenya Coconut Production Presentation by Dr. Lalith Pereraictsugar
 
Ms Motilal Padampat Sugar Mills vs. State of Uttar Pradesh & Ors. - A Milesto...
Ms Motilal Padampat Sugar Mills vs. State of Uttar Pradesh & Ors. - A Milesto...Ms Motilal Padampat Sugar Mills vs. State of Uttar Pradesh & Ors. - A Milesto...
Ms Motilal Padampat Sugar Mills vs. State of Uttar Pradesh & Ors. - A Milesto...ShrutiBose4
 
APRIL2024_UKRAINE_xml_0000000000000 .pdf
APRIL2024_UKRAINE_xml_0000000000000 .pdfAPRIL2024_UKRAINE_xml_0000000000000 .pdf
APRIL2024_UKRAINE_xml_0000000000000 .pdfRbc Rbcua
 
Call US-88OO1O2216 Call Girls In Mahipalpur Female Escort Service
Call US-88OO1O2216 Call Girls In Mahipalpur Female Escort ServiceCall US-88OO1O2216 Call Girls In Mahipalpur Female Escort Service
Call US-88OO1O2216 Call Girls In Mahipalpur Female Escort Servicecallgirls2057
 
Call Girls in DELHI Cantt, ( Call Me )-8377877756-Female Escort- In Delhi / Ncr
Call Girls in DELHI Cantt, ( Call Me )-8377877756-Female Escort- In Delhi / NcrCall Girls in DELHI Cantt, ( Call Me )-8377877756-Female Escort- In Delhi / Ncr
Call Girls in DELHI Cantt, ( Call Me )-8377877756-Female Escort- In Delhi / Ncrdollysharma2066
 
Kenya’s Coconut Value Chain by Gatsby Africa
Kenya’s Coconut Value Chain by Gatsby AfricaKenya’s Coconut Value Chain by Gatsby Africa
Kenya’s Coconut Value Chain by Gatsby Africaictsugar
 
(Best) ENJOY Call Girls in Faridabad Ex | 8377087607
(Best) ENJOY Call Girls in Faridabad Ex | 8377087607(Best) ENJOY Call Girls in Faridabad Ex | 8377087607
(Best) ENJOY Call Girls in Faridabad Ex | 8377087607dollysharma2066
 
Contemporary Economic Issues Facing the Filipino Entrepreneur (1).pptx
Contemporary Economic Issues Facing the Filipino Entrepreneur (1).pptxContemporary Economic Issues Facing the Filipino Entrepreneur (1).pptx
Contemporary Economic Issues Facing the Filipino Entrepreneur (1).pptxMarkAnthonyAurellano
 
Islamabad Escorts | Call 03070433345 | Escort Service in Islamabad
Islamabad Escorts | Call 03070433345 | Escort Service in IslamabadIslamabad Escorts | Call 03070433345 | Escort Service in Islamabad
Islamabad Escorts | Call 03070433345 | Escort Service in IslamabadAyesha Khan
 
Global Scenario On Sustainable and Resilient Coconut Industry by Dr. Jelfina...
Global Scenario On Sustainable  and Resilient Coconut Industry by Dr. Jelfina...Global Scenario On Sustainable  and Resilient Coconut Industry by Dr. Jelfina...
Global Scenario On Sustainable and Resilient Coconut Industry by Dr. Jelfina...ictsugar
 
Buy gmail accounts.pdf Buy Old Gmail Accounts
Buy gmail accounts.pdf Buy Old Gmail AccountsBuy gmail accounts.pdf Buy Old Gmail Accounts
Buy gmail accounts.pdf Buy Old Gmail AccountsBuy Verified Accounts
 

Último (20)

MAHA Global and IPR: Do Actions Speak Louder Than Words?
MAHA Global and IPR: Do Actions Speak Louder Than Words?MAHA Global and IPR: Do Actions Speak Louder Than Words?
MAHA Global and IPR: Do Actions Speak Louder Than Words?
 
2024 Numerator Consumer Study of Cannabis Usage
2024 Numerator Consumer Study of Cannabis Usage2024 Numerator Consumer Study of Cannabis Usage
2024 Numerator Consumer Study of Cannabis Usage
 
Case study on tata clothing brand zudio in detail
Case study on tata clothing brand zudio in detailCase study on tata clothing brand zudio in detail
Case study on tata clothing brand zudio in detail
 
NewBase 19 April 2024 Energy News issue - 1717 by Khaled Al Awadi.pdf
NewBase  19 April  2024  Energy News issue - 1717 by Khaled Al Awadi.pdfNewBase  19 April  2024  Energy News issue - 1717 by Khaled Al Awadi.pdf
NewBase 19 April 2024 Energy News issue - 1717 by Khaled Al Awadi.pdf
 
Innovation Conference 5th March 2024.pdf
Innovation Conference 5th March 2024.pdfInnovation Conference 5th March 2024.pdf
Innovation Conference 5th March 2024.pdf
 
8447779800, Low rate Call girls in New Ashok Nagar Delhi NCR
8447779800, Low rate Call girls in New Ashok Nagar Delhi NCR8447779800, Low rate Call girls in New Ashok Nagar Delhi NCR
8447779800, Low rate Call girls in New Ashok Nagar Delhi NCR
 
Flow Your Strategy at Flight Levels Day 2024
Flow Your Strategy at Flight Levels Day 2024Flow Your Strategy at Flight Levels Day 2024
Flow Your Strategy at Flight Levels Day 2024
 
No-1 Call Girls In Goa 93193 VIP 73153 Escort service In North Goa Panaji, Ca...
No-1 Call Girls In Goa 93193 VIP 73153 Escort service In North Goa Panaji, Ca...No-1 Call Girls In Goa 93193 VIP 73153 Escort service In North Goa Panaji, Ca...
No-1 Call Girls In Goa 93193 VIP 73153 Escort service In North Goa Panaji, Ca...
 
Kenya Coconut Production Presentation by Dr. Lalith Perera
Kenya Coconut Production Presentation by Dr. Lalith PereraKenya Coconut Production Presentation by Dr. Lalith Perera
Kenya Coconut Production Presentation by Dr. Lalith Perera
 
Ms Motilal Padampat Sugar Mills vs. State of Uttar Pradesh & Ors. - A Milesto...
Ms Motilal Padampat Sugar Mills vs. State of Uttar Pradesh & Ors. - A Milesto...Ms Motilal Padampat Sugar Mills vs. State of Uttar Pradesh & Ors. - A Milesto...
Ms Motilal Padampat Sugar Mills vs. State of Uttar Pradesh & Ors. - A Milesto...
 
APRIL2024_UKRAINE_xml_0000000000000 .pdf
APRIL2024_UKRAINE_xml_0000000000000 .pdfAPRIL2024_UKRAINE_xml_0000000000000 .pdf
APRIL2024_UKRAINE_xml_0000000000000 .pdf
 
Call US-88OO1O2216 Call Girls In Mahipalpur Female Escort Service
Call US-88OO1O2216 Call Girls In Mahipalpur Female Escort ServiceCall US-88OO1O2216 Call Girls In Mahipalpur Female Escort Service
Call US-88OO1O2216 Call Girls In Mahipalpur Female Escort Service
 
Call Girls in DELHI Cantt, ( Call Me )-8377877756-Female Escort- In Delhi / Ncr
Call Girls in DELHI Cantt, ( Call Me )-8377877756-Female Escort- In Delhi / NcrCall Girls in DELHI Cantt, ( Call Me )-8377877756-Female Escort- In Delhi / Ncr
Call Girls in DELHI Cantt, ( Call Me )-8377877756-Female Escort- In Delhi / Ncr
 
Kenya’s Coconut Value Chain by Gatsby Africa
Kenya’s Coconut Value Chain by Gatsby AfricaKenya’s Coconut Value Chain by Gatsby Africa
Kenya’s Coconut Value Chain by Gatsby Africa
 
(Best) ENJOY Call Girls in Faridabad Ex | 8377087607
(Best) ENJOY Call Girls in Faridabad Ex | 8377087607(Best) ENJOY Call Girls in Faridabad Ex | 8377087607
(Best) ENJOY Call Girls in Faridabad Ex | 8377087607
 
Contemporary Economic Issues Facing the Filipino Entrepreneur (1).pptx
Contemporary Economic Issues Facing the Filipino Entrepreneur (1).pptxContemporary Economic Issues Facing the Filipino Entrepreneur (1).pptx
Contemporary Economic Issues Facing the Filipino Entrepreneur (1).pptx
 
Islamabad Escorts | Call 03070433345 | Escort Service in Islamabad
Islamabad Escorts | Call 03070433345 | Escort Service in IslamabadIslamabad Escorts | Call 03070433345 | Escort Service in Islamabad
Islamabad Escorts | Call 03070433345 | Escort Service in Islamabad
 
Global Scenario On Sustainable and Resilient Coconut Industry by Dr. Jelfina...
Global Scenario On Sustainable  and Resilient Coconut Industry by Dr. Jelfina...Global Scenario On Sustainable  and Resilient Coconut Industry by Dr. Jelfina...
Global Scenario On Sustainable and Resilient Coconut Industry by Dr. Jelfina...
 
Japan IT Week 2024 Brochure by 47Billion (English)
Japan IT Week 2024 Brochure by 47Billion (English)Japan IT Week 2024 Brochure by 47Billion (English)
Japan IT Week 2024 Brochure by 47Billion (English)
 
Buy gmail accounts.pdf Buy Old Gmail Accounts
Buy gmail accounts.pdf Buy Old Gmail AccountsBuy gmail accounts.pdf Buy Old Gmail Accounts
Buy gmail accounts.pdf Buy Old Gmail Accounts
 

Destaque

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

Destaque (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Waxing Ballroom Floors on the Titanic

  • 1. Just leave this up as people filter in to the room. Bunk Monkey 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.”
  • 2. Just leave this up as people filter in to the room. Bunk Monkey Start off panel with “This really has no bearing on anything. It’s Spunk Monkey just here to give you a taste of what’s to come for the next 45 minutes.”
  • 3. Just leave this up as people filter in to the room. smegma Bunk Monkey Start off panel with “This really has no bearing on anything. It’s Spunk Monkey just here to give you a taste of what’s to come for the next 45 minutes.”
  • 4. be sure to start the meetronome at the beginning. Waxing Ballroom Floors on the Titanic and other less seaworthy vessels OG Consulting Kevin Barnes Rick Bradley Yossef Mendelssohn
  • 5. OG Consulting http://ogtastic.com/ http://ni.hili.st/ http://b.logi.cx -or- http://bl.ogtastic.com/ http://github.com/flogic/
  • 6. OG Consulting? Awesomeness Competitors
  • 9. This shit is hard that’s what she said
  • 11. No matter what the odds The Karate Kid, Columbia Pictures
  • 14. t3h project: goals Clinical 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)
  • 15. t3h project: goals Clinical 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 Save the world, yo (t3h sinking ship)
  • 16. This picture you’ve all seen, we’re the source. Look, there’s actually attribution. © Darrin Weissinger (darrin.weissinger@centerstone.org) (t3h sinking ship)
  • 17. 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. (t3h sinking ship) http://i160.photobucket.com/albums/t189/rossmcgrath16/redneck-mansion.jpg
  • 18. please consult org chart for portrait and name to accompany statue. thx. --t3h boss What is expected (t3h sinking ship)
  • 19. What they want (t3h sinking ship) http://www.talendforge.org/wiki/doku.php?id=what_is_new1_1
  • 20. Problems (t3h sinking ship) http://www.nsc.org/statinfo/odds_dying.jpg
  • 22. so we push to meet with the actual people who supposedly know what the business does and wants Meetings (t3h sinking ship) http://www.business-marketing.com/store/termination.html#5578
  • 23. and, months later, when we get meetings with them, it’s a series of months of meetings with mostly Managers (t3h sinking ship) http://www.growingcoaches.com/webinar.htm
  • 24. and if that’s not enough, the CIO (who is a consultant) sets up his own Mega-Synergy Task Force™ (t3h sinking ship) http://www.brandascension.com/Elevation_Products.html
  • 25. or “How to waste time and demoralize people.” (t3h sinking ship) http://alternative-gifts.haluy.co.uk/product,details,,63e9efe53d8cd9167025f239b675592e.html
  • 26. 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. Be sure to quantify value (t3h sinking ship)
  • 27. The Enterprise Strikes Back (t3h sinking ship) http://www.startrekdesktopwallpaper.com/wallpapers/StarTrek_starship_Enterprise_NCC1701A_firing_phasers_freecomputerdesktop_wallpaper_1024.shtml
  • 28. Perceived progress this was presented in RailsConf 2006, some snazzy unfolding left to right, showing all the things that were improving Rails analysis patterns hire new developers Rake continuous integration continuous integration migrations nightly conversions switchtower getting more “Real” svn trac public svn goodage public trac domain driven design wifi public releases STI unit tests AJAX continuous builder IRC Postgres mac laptops voluntary tickets cvs auto deployments stories public IRC relocating pair-on-demand time Oracle assigned tickets 1,000 meetings SQL schemae suckage Big Design Up Front JUnit, etc. JBoss CruiseControl CTI Ant “deployments” lose technical lead Java EJB3.0 Hibernate for-profit partner (t3h sinking ship)
  • 29. The ice under the Titanic goodage time wishful thinking by mgmt visionquests t3h webinar Long-hidden incompetence Budget padding Blame Shifting Can’t-Do Attitude Turf That Which Shall Not Be Named suckage Fear of Change Ass-Covering Croneyism Finger-pointing Old age and treachery Corporate Politics That Which Should Not Be (t3h sinking ship)
  • 30. Do your best (t3h sinking ship) http://www.sffringe.org/fringe06/06pix/sisyphus.jpg
  • 31. Hiring A great person is available and you have 5 shitty people on your team? No firing in t3h enterprise. that’s what she said 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. that’s what she said (t3h sinking ship)
  • 32. 10 Interview Questions For Developers (t3h sinking ship)
  • 33. 10 Interview Questions For Developers • How’s your test coverage? (t3h sinking ship)
  • 34. 10 Interview Questions For Developers • How’s your test coverage? • Oracle or SQLServer? (t3h sinking ship)
  • 35. 10 Interview Questions For Developers • How’s your test coverage? • Oracle or SQLServer? • Perforce or Bitkeeper? (t3h sinking ship)
  • 36. 10 Interview Questions For Developers • How’s your test coverage? • Oracle or SQLServer? • Perforce or Bitkeeper? • Praise or Annotate? (t3h sinking ship)
  • 37. 10 Interview Questions For Developers • How’s your test coverage? • Oracle or SQLServer? • Perforce or Bitkeeper? • Praise or Annotate? • Java or PHP? (t3h sinking ship)
  • 38. 10 Interview Questions For Developers • How’s your test coverage? • Oracle or SQLServer? • Perforce or Bitkeeper? • Praise or Annotate? • Java or PHP? • Singleton or Visitor? (t3h sinking ship)
  • 39. 10 Interview Questions For Developers • How’s your test coverage? • Oracle or SQLServer? • Perforce or Bitkeeper? • Praise or Annotate? • Java or PHP? • Singleton or Visitor? • Spolsky or Arrington? (t3h sinking ship)
  • 40. 10 Interview Questions For Developers • 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? (t3h sinking ship)
  • 41. 10 Interview Questions For Developers • 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? (t3h sinking ship)
  • 42. 10 Interview Questions For Developers • 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? (t3h sinking ship)
  • 43. 10 Interview Questions For Sysadmins “Puppet or Cfengine” may be the only question with a right answer (t3h sinking ship)
  • 44. 10 Interview Questions For Sysadmins • What’s your deployment process? “Puppet or Cfengine” may be the only question with a right answer (t3h sinking ship)
  • 45. 10 Interview Questions For Sysadmins • What’s your deployment process? • Security or Availability? “Puppet or Cfengine” may be the only question with a right answer (t3h sinking ship)
  • 46. 10 Interview Questions For Sysadmins • What’s your deployment process? • Security or Availability? • XP or Vista? “Puppet or Cfengine” may be the only question with a right answer (t3h sinking ship)
  • 47. 10 Interview Questions For Sysadmins • What’s your deployment process? • Security or Availability? • XP or Vista? • Oracle or SQLServer? “Puppet or Cfengine” may be the only question with a right answer (t3h sinking ship)
  • 48. 10 Interview Questions For Sysadmins • What’s your deployment process? • Security or Availability? • XP or Vista? • Oracle or SQLServer? • Java or Perl? “Puppet or Cfengine” may be the only question with a right answer (t3h sinking ship)
  • 49. 10 Interview Questions For Sysadmins • What’s your deployment process? • Security or Availability? • XP or Vista? • Oracle or SQLServer? • Java or Perl? • ksh or tcsh? “Puppet or Cfengine” may be the only question with a right answer (t3h sinking ship)
  • 50. 10 Interview Questions For Sysadmins • What’s your deployment process? • Security or Availability? • XP or Vista? • Oracle or SQLServer? • Java or Perl? • ksh or tcsh? • “Puppet or Cfengine” may Ant or Maven? be the only question with a right answer (t3h sinking ship)
  • 51. 10 Interview Questions For Sysadmins • What’s your deployment process? • Security or Availability? • XP or Vista? • Oracle or SQLServer? • Java or Perl? • ksh or tcsh? • “Puppet or Cfengine” may Ant or Maven? be the only question with a right answer • ports or yum? (t3h sinking ship)
  • 52. 10 Interview Questions For Sysadmins • What’s your deployment process? • Security or Availability? • XP or Vista? • Oracle or SQLServer? • Java or Perl? • ksh or tcsh? • “Puppet or Cfengine” may Ant or Maven? be the only question with a right answer • ports or yum? • Puppet or Cfengine? (t3h sinking ship)
  • 53. 10 Interview Questions For Sysadmins • What’s your deployment process? • Security or Availability? • XP or Vista? • Oracle or SQLServer? • Java or Perl? • ksh or tcsh? • “Puppet or Cfengine” may Ant or Maven? be the only question with a right answer • ports or yum? • Puppet or Cfengine? • CI? (t3h sinking ship)
  • 54. Quality Always strive for EPIC mfn quality. (t3h sinking ship) http://stuartscustoms.freeyellow.com/Fairmont.html
  • 55. Transparency Be 100% transparent (t3h sinking ship) http://www.brianmicklethwait.com/index.php/weblog/computer_transparency/
  • 56. Transparency Publicizing your transparency means never having to answer the question: “Why didn’t I know about this?” (t3h sinking ship) http://drinkingliberally.org/blogs/idahofalls/archives/2007/02/his_head_will_g.html
  • 57. t3h rules (t3h sinking ship)
  • 58. The Gantt Chart (t3h sinking ship) http://openproj.org/wiki/index.php?title=Gantt_Chart
  • 59. Mr. Gantt Chart (t3h sinking ship) http://www.gantt-chart.biz/gantt-charting-made-easy/
  • 60. t3h Cant Chart (t3h sinking ship)
  • 61. Mr. Cant Chart (t3h sinking ship) http://www.flickr.com/photos/atmos/217012352/
  • 62. t3h Cant Chart • Identify all the tasks that you are responsible for. (t3h sinking ship)
  • 63. t3h Cant Chart • Plot out what depends on what. (t3h sinking ship)
  • 64. t3h Cant Chart • 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)
  • 65. t3h Cant Chart • Separate the tasks you will do from those with CANTs. (t3h sinking ship)
  • 66. t3h Cant Chart • 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)
  • 67. t3h Cant Chart • You either won or failed hardcore. (t3h sinking ship)
  • 68. 10 Interview Questions For the company (t3h sinking ship)
  • 69. 10 Interview Questions For the company • How’s your test coverage? (t3h sinking ship)
  • 70. 10 Interview Questions For the company • How’s your test coverage? • Oracle or SQLServer? (t3h sinking ship)
  • 71. 10 Interview Questions For the company • How’s your test coverage? • Oracle or SQLServer? • FogBugz or Excel? (t3h sinking ship)
  • 72. 10 Interview Questions For the company • How’s your test coverage? • Oracle or SQLServer? • FogBugz or Excel? • What’s your deployment process? (t3h sinking ship)
  • 73. 10 Interview Questions For the company • How’s your test coverage? • Oracle or SQLServer? • FogBugz or Excel? • What’s your deployment process? • What’s your HR department like? (t3h sinking ship)
  • 74. 10 Interview Questions For the company • 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? (t3h sinking ship)
  • 75. 6 10 Interview Questions For the company • 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? (t3h sinking ship)
  • 76. Plowing a new field Donald Miralle/Getty Images, http://recipes.howstuffworks.com/salt5.htm
  • 77. this is Karl, or a we call him Karlsbad (at testing) Any code can be legacy code
  • 78. Legacy Code 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 end end (Legacy Code)
  • 79. Legacy Code (plowing a new field)
  • 80. Characterization Tests 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 end end (Legacy Code)
  • 81. Characterization Tests module Spec::Example::ExampleGroupMethods def currently(name, &block) it(quot;*** CURRENTLY *** #{name}quot;, &block) end alias_method :she, :it end (Legacy Code)
  • 82. Characterization Tests describe YourMom do before :each { @your_mom = YourMom.new } currently quot;is at my housequot; do @your_mom.should be_at_my_house end describe quot;when at my housequot; do before :each do @your_mom.stubs(:at_my_house?).returns(true) end she quot;should take the bus homequot; end end (Legacy Code)
  • 83. Characterization Tests 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)
  • 84. Characterization Tests currently quot;has a summary which includes the amount truncated to dollarsquot; do @payment.stubs(:account).returns(stub('acct', :name => 'acct 1')) @payment.amount_in_cents = 1234 @payment.summary.should match(/$12b/) end currently quot;has a summary which fails if payment amount is not setquot; do @payment.stubs(:account).returns(stub('acct', :name => 'acct 1')) @payment.amount_in_cents = nil lambda { @payment.summary }.should raise_error end (Legacy Code)
  • 85. Legacy Code (plowing a new field)
  • 86. old-school cod3rz (plowing a new field) http://www.geneontology.org/images/go-database-ER-diagram.png
  • 91.
  • 92. Feedback • Cruisecontrol.rb; flog, heckle, flame; Use EC2 or slices if needed; Do short iterations, perform post-mortems (feedback loops) http://www.etsu.edu/philos/classes/rk/postmodern/htmdescriptionpages/30paik2desc.jpg
  • 93. What Rails gets wrong and when you should care
  • 94. Fixtures (rails == wrong)
  • 95. Fixtures (rails == wrong)
  • 96. Fixtures (rails == wrong)
  • 97. Fixtures (rails == wrong)
  • 98.
  • 99. Fixtures (rails == wrong)
  • 100. Fixtures (rails == wrong)
  • 101. Fixtures == Cargo Cult (rails == wrong)
  • 102. Solution? (rails == wrong) http://www.imagechef.com/ic/make.jsp?tid=Bling+Necklace
  • 104. Object Daddy class Category < ActiveRecord::Base has_many :items validates_presence_of :name validates_uniqueness_of :name end 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 Models (rails == wrong)
  • 105. Object Daddy class Category < ActiveRecord::Base has_many :items validates_presence_of :name validates_uniqueness_of :name end Model class Category generator_for :name, :start => 'test' do |prev| prev.succ end end Exemplar (rails == wrong)
  • 106. Object Daddy 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 Model class Item generator_for :code, :start => 'test-001' do |prev| prefix, number = prev.split('-') [prefix, number.succ].join('-') end end Exemplar (rails == wrong)
  • 107. Object Daddy some unexpected problems came up while making this slide. Loading development environment (Rails 2.0.2) 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. (rails == wrong)
  • 108. Object Daddy some unexpected problems came up while making this slide. Loading development environment (Rails 2.0.2) OD is intended for use in >> Category.generate tests, not the console. => #<Category id: 26, name: quot;testquot;> This is just an example for illumination. >> It’s kind of difficult to write tests for how something works in a non-test setting. (rails == wrong)
  • 109. Object Daddy some unexpected problems came up while making this slide. Loading development environment (Rails 2.0.2) OD is intended for use in >> Category.generate tests, not the console. => #<Category id: 26, name: quot;testquot;> This is just an example for illumination. >> Category.generate It’s kind of difficult to => #<Category id: 27, name: quot;tesuquot;> write tests for how >> something works in a non-test setting. (rails == wrong)
  • 110. Object Daddy some unexpected problems came up while making this slide. Loading development environment (Rails 2.0.2) OD is intended for use in >> Category.generate tests, not the console. => #<Category id: 26, name: quot;testquot;> This is just an example for illumination. >> Category.generate It’s kind of difficult to => #<Category id: 27, name: quot;tesuquot;> write tests for how >> Item.generate something works in a non-test setting. => #<Item id: 4, code: quot;test-001quot;, category_id: 28> >> (rails == wrong)
  • 111. Object Daddy some unexpected problems came up while making this slide. Loading development environment (Rails 2.0.2) OD is intended for use in >> Category.generate tests, not the console. => #<Category id: 26, name: quot;testquot;> This is just an example for illumination. >> Category.generate It’s kind of difficult to => #<Category id: 27, name: quot;tesuquot;> write tests for how >> Item.generate something works in a non-test setting. => #<Item id: 4, code: quot;test-001quot;, category_id: 28> >> cat = Category.find :first => #<Category id: 26, name: quot;testquot;> >> cat.items.generate => #<Item id: 5, code: quot;test-002quot;, category_id: 26> >> (rails == wrong)
  • 112. Object Daddy some unexpected problems came up while making this slide. Loading development environment (Rails 2.0.2) OD is intended for use in >> Category.generate tests, not the console. => #<Category id: 26, name: quot;testquot;> This is just an example for illumination. >> Category.generate It’s kind of difficult to => #<Category id: 27, name: quot;tesuquot;> write tests for how >> Item.generate something works in a non-test setting. => #<Item id: 4, code: quot;test-001quot;, category_id: 28> >> cat = Category.find :first => #<Category id: 26, name: quot;testquot;> >> cat.items.generate => #<Item id: 5, code: quot;test-002quot;, category_id: 26> >> Category.generate(:name => 'things') => #<Category id: 29, name: quot;thingsquot;> >> (rails == wrong)
  • 113. Object Daddy some unexpected problems came up while making this slide. Loading development environment (Rails 2.0.2) OD is intended for use in >> Category.generate tests, not the console. => #<Category id: 26, name: quot;testquot;> This is just an example for illumination. >> Category.generate It’s kind of difficult to => #<Category id: 27, name: quot;tesuquot;> write tests for how >> Item.generate something works in a non-test setting. => #<Item id: 4, code: quot;test-001quot;, category_id: 28> >> cat = Category.find :first => #<Category id: 26, name: quot;testquot;> >> cat.items.generate => #<Item id: 5, code: quot;test-002quot;, category_id: 26> >> Category.generate(:name => 'things') => #<Category id: 29, name: quot;thingsquot;> >> Category.generate => #<Category id: 30, name: quot;teswquot;> (rails == wrong)
  • 114. Object Daddy 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 => 5 end (rails == wrong)
  • 116. The New Hotness Sinatra http://www.amazon.com/Capitol-Years-Frank-Sinatra/dp/B000002UWM
  • 117. The New Hotness Hobo http://akugel.wordpress.com/2007/03/27/the-hobo-code/
  • 118. The New Hotness Camping http://fiberfib.com/en/benicassim/where-to-sleep/camping-areas/
  • 119. The New Hotness Merb http://www.pastdeadline.com/2007/08/merv-a-man-for-.html
  • 120. The New Hotness Ramaze http://www.geocities.com/athens/2962/colourbook/ http://www.descendingashtray.com/index.php?s=labyrinth
  • 124. 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 or Trustworthy
  • 125. Useful
  • 126. or not
  • 127. w00t Then Now (rails == wrong) http://www.juixe.com/techknow/wp-content/uploads/2008/04/ruby_books.png
  • 129. Metrics Transactions Per Second http://www.flickr.com/photos/edame/351834048/
  • 131. Metrics Consider the following numbers. (expected)
  • 132. Metrics Consider the following numbers. (expected) • Transactions per second
  • 133. Metrics Consider the following numbers. (expected) • Transactions per second • Users per year
  • 134. Metrics Consider the following numbers. (expected) • Transactions per second • Users per year Which is larger?
  • 135. Metrics One more important number to consider.
  • 136. Metrics One more important number to consider. • Dollars per transaction
  • 137. Metrics One more important number to consider. • Dollars per transaction
  • 138. What has OG done for me lately? • object_daddy • Check it out on github timely user: flogic • shmemeter • autochronic • freshtrack • nihilist_bot (& http://ni.hili.st/) • ultrasphinx_search_wrapper • flame (aka flog w/ tests & blame)
  • 140. The 2 Down Days in pr0n That’s what she said. (free shizzle)
  • 141. What does OG stand for? (free shizzle)
  • 142. What does OG stand for? http://www.hermes-press.com/music_portal.htm (free shizzle) http://www.hermes-press.com/ice-t.jpg
  • 143. What does OG stand for? (free shizzle)
  • 144. What does OG stand for? (free shizzle) http://www.freefoto.com/preview/09-14-57?ffid=09-14-57
  • 145. What does OG stand for? (free shizzle) http://www.nypost.com/seven/03032007/tv/so_easy__even_abc_can_do_it_tv_.htm
  • 146. What does OG stand for? (free shizzle) http://www.samsquanch.ca/images/Friends/the%20riddler.jpg
  • 147. How much did this meeting cost? It’s all about the cheddar. (free shizzle)
  • 148. In a landmark Bon Jovi song, why does Jon Bon “play for keeps?”