SlideShare una empresa de Scribd logo
1 de 151
Descargar para leer sin conexión
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

Más contenido relacionado

Similar a Waxing Ballroom Floors on the Titanic

High Performance Systems Without Tears - Scala Days Berlin 2018
High Performance Systems Without Tears - Scala Days Berlin 2018High Performance Systems Without Tears - Scala Days Berlin 2018
High Performance Systems Without Tears - Scala Days Berlin 2018Zahari Dichev
 
Unraveling mysteries of the Universe at CERN, with OpenStack and Hadoop
Unraveling mysteries of the Universe at CERN, with OpenStack and HadoopUnraveling mysteries of the Universe at CERN, with OpenStack and Hadoop
Unraveling mysteries of the Universe at CERN, with OpenStack and HadoopPiotr Turek
 
Qa in production singular 2019
Qa in production   singular 2019Qa in production   singular 2019
Qa in production singular 2019rouanw
 
CMP Engineers Capability Statement - 2014 - V3
CMP Engineers Capability Statement - 2014 - V3CMP Engineers Capability Statement - 2014 - V3
CMP Engineers Capability Statement - 2014 - V3Peter McGiffin
 
Scaling a Rails Application from the Bottom Up
Scaling a Rails Application from the Bottom Up Scaling a Rails Application from the Bottom Up
Scaling a Rails Application from the Bottom Up Abhishek Singh
 
Retailers embrace social commerce
Retailers embrace social commerceRetailers embrace social commerce
Retailers embrace social commerceBen Jollley
 
Back To The Future.Key 2
Back To The Future.Key 2Back To The Future.Key 2
Back To The Future.Key 2gueste8cc560
 

Similar a Waxing Ballroom Floors on the Titanic (8)

High Performance Systems Without Tears - Scala Days Berlin 2018
High Performance Systems Without Tears - Scala Days Berlin 2018High Performance Systems Without Tears - Scala Days Berlin 2018
High Performance Systems Without Tears - Scala Days Berlin 2018
 
Why I Like Hardware Hacking (and if you haven't tried it, here's a few tips o...
Why I Like Hardware Hacking (and if you haven't tried it, here's a few tips o...Why I Like Hardware Hacking (and if you haven't tried it, here's a few tips o...
Why I Like Hardware Hacking (and if you haven't tried it, here's a few tips o...
 
Unraveling mysteries of the Universe at CERN, with OpenStack and Hadoop
Unraveling mysteries of the Universe at CERN, with OpenStack and HadoopUnraveling mysteries of the Universe at CERN, with OpenStack and Hadoop
Unraveling mysteries of the Universe at CERN, with OpenStack and Hadoop
 
Qa in production singular 2019
Qa in production   singular 2019Qa in production   singular 2019
Qa in production singular 2019
 
CMP Engineers Capability Statement - 2014 - V3
CMP Engineers Capability Statement - 2014 - V3CMP Engineers Capability Statement - 2014 - V3
CMP Engineers Capability Statement - 2014 - V3
 
Scaling a Rails Application from the Bottom Up
Scaling a Rails Application from the Bottom Up Scaling a Rails Application from the Bottom Up
Scaling a Rails Application from the Bottom Up
 
Retailers embrace social commerce
Retailers embrace social commerceRetailers embrace social commerce
Retailers embrace social commerce
 
Back To The Future.Key 2
Back To The Future.Key 2Back To The Future.Key 2
Back To The Future.Key 2
 

Último

Types of Cyberattacks - ASG I.T. Consulting.pdf
Types of Cyberattacks - ASG I.T. Consulting.pdfTypes of Cyberattacks - ASG I.T. Consulting.pdf
Types of Cyberattacks - ASG I.T. Consulting.pdfASGITConsulting
 
How Generative AI Is Transforming Your Business | Byond Growth Insights | Apr...
How Generative AI Is Transforming Your Business | Byond Growth Insights | Apr...How Generative AI Is Transforming Your Business | Byond Growth Insights | Apr...
How Generative AI Is Transforming Your Business | Byond Growth Insights | Apr...Hector Del Castillo, CPM, CPMM
 
Church Building Grants To Assist With New Construction, Additions, And Restor...
Church Building Grants To Assist With New Construction, Additions, And Restor...Church Building Grants To Assist With New Construction, Additions, And Restor...
Church Building Grants To Assist With New Construction, Additions, And Restor...Americas Got Grants
 
WSMM Media and Entertainment Feb_March_Final.pdf
WSMM Media and Entertainment Feb_March_Final.pdfWSMM Media and Entertainment Feb_March_Final.pdf
WSMM Media and Entertainment Feb_March_Final.pdfJamesConcepcion7
 
Fordham -How effective decision-making is within the IT department - Analysis...
Fordham -How effective decision-making is within the IT department - Analysis...Fordham -How effective decision-making is within the IT department - Analysis...
Fordham -How effective decision-making is within the IT department - Analysis...Peter Ward
 
Healthcare Feb. & Mar. Healthcare Newsletter
Healthcare Feb. & Mar. Healthcare NewsletterHealthcare Feb. & Mar. Healthcare Newsletter
Healthcare Feb. & Mar. Healthcare NewsletterJamesConcepcion7
 
Guide Complete Set of Residential Architectural Drawings PDF
Guide Complete Set of Residential Architectural Drawings PDFGuide Complete Set of Residential Architectural Drawings PDF
Guide Complete Set of Residential Architectural Drawings PDFChandresh Chudasama
 
Cyber Security Training in Office Environment
Cyber Security Training in Office EnvironmentCyber Security Training in Office Environment
Cyber Security Training in Office Environmentelijahj01012
 
How To Simplify Your Scheduling with AI Calendarfly The Hassle-Free Online Bo...
How To Simplify Your Scheduling with AI Calendarfly The Hassle-Free Online Bo...How To Simplify Your Scheduling with AI Calendarfly The Hassle-Free Online Bo...
How To Simplify Your Scheduling with AI Calendarfly The Hassle-Free Online Bo...SOFTTECHHUB
 
Introducing the Analogic framework for business planning applications
Introducing the Analogic framework for business planning applicationsIntroducing the Analogic framework for business planning applications
Introducing the Analogic framework for business planning applicationsKnowledgeSeed
 
NAB Show Exhibitor List 2024 - Exhibitors Data
NAB Show Exhibitor List 2024 - Exhibitors DataNAB Show Exhibitor List 2024 - Exhibitors Data
NAB Show Exhibitor List 2024 - Exhibitors DataExhibitors Data
 
WSMM Technology February.March Newsletter_vF.pdf
WSMM Technology February.March Newsletter_vF.pdfWSMM Technology February.March Newsletter_vF.pdf
WSMM Technology February.March Newsletter_vF.pdfJamesConcepcion7
 
trending-flavors-and-ingredients-in-salty-snacks-us-2024_Redacted-V2.pdf
trending-flavors-and-ingredients-in-salty-snacks-us-2024_Redacted-V2.pdftrending-flavors-and-ingredients-in-salty-snacks-us-2024_Redacted-V2.pdf
trending-flavors-and-ingredients-in-salty-snacks-us-2024_Redacted-V2.pdfMintel Group
 
digital marketing , introduction of digital marketing
digital marketing , introduction of digital marketingdigital marketing , introduction of digital marketing
digital marketing , introduction of digital marketingrajputmeenakshi733
 
Planetary and Vedic Yagyas Bring Positive Impacts in Life
Planetary and Vedic Yagyas Bring Positive Impacts in LifePlanetary and Vedic Yagyas Bring Positive Impacts in Life
Planetary and Vedic Yagyas Bring Positive Impacts in LifeBhavana Pujan Kendra
 
Excvation Safety for safety officers reference
Excvation Safety for safety officers referenceExcvation Safety for safety officers reference
Excvation Safety for safety officers referencessuser2c065e
 
Data Analytics Strategy Toolkit and Templates
Data Analytics Strategy Toolkit and TemplatesData Analytics Strategy Toolkit and Templates
Data Analytics Strategy Toolkit and TemplatesAurelien Domont, MBA
 
Environmental Impact Of Rotary Screw Compressors
Environmental Impact Of Rotary Screw CompressorsEnvironmental Impact Of Rotary Screw Compressors
Environmental Impact Of Rotary Screw Compressorselgieurope
 
Interoperability and ecosystems: Assembling the industrial metaverse
Interoperability and ecosystems:  Assembling the industrial metaverseInteroperability and ecosystems:  Assembling the industrial metaverse
Interoperability and ecosystems: Assembling the industrial metaverseSiemens
 

Último (20)

Types of Cyberattacks - ASG I.T. Consulting.pdf
Types of Cyberattacks - ASG I.T. Consulting.pdfTypes of Cyberattacks - ASG I.T. Consulting.pdf
Types of Cyberattacks - ASG I.T. Consulting.pdf
 
How Generative AI Is Transforming Your Business | Byond Growth Insights | Apr...
How Generative AI Is Transforming Your Business | Byond Growth Insights | Apr...How Generative AI Is Transforming Your Business | Byond Growth Insights | Apr...
How Generative AI Is Transforming Your Business | Byond Growth Insights | Apr...
 
Church Building Grants To Assist With New Construction, Additions, And Restor...
Church Building Grants To Assist With New Construction, Additions, And Restor...Church Building Grants To Assist With New Construction, Additions, And Restor...
Church Building Grants To Assist With New Construction, Additions, And Restor...
 
WSMM Media and Entertainment Feb_March_Final.pdf
WSMM Media and Entertainment Feb_March_Final.pdfWSMM Media and Entertainment Feb_March_Final.pdf
WSMM Media and Entertainment Feb_March_Final.pdf
 
Fordham -How effective decision-making is within the IT department - Analysis...
Fordham -How effective decision-making is within the IT department - Analysis...Fordham -How effective decision-making is within the IT department - Analysis...
Fordham -How effective decision-making is within the IT department - Analysis...
 
Healthcare Feb. & Mar. Healthcare Newsletter
Healthcare Feb. & Mar. Healthcare NewsletterHealthcare Feb. & Mar. Healthcare Newsletter
Healthcare Feb. & Mar. Healthcare Newsletter
 
Guide Complete Set of Residential Architectural Drawings PDF
Guide Complete Set of Residential Architectural Drawings PDFGuide Complete Set of Residential Architectural Drawings PDF
Guide Complete Set of Residential Architectural Drawings PDF
 
Cyber Security Training in Office Environment
Cyber Security Training in Office EnvironmentCyber Security Training in Office Environment
Cyber Security Training in Office Environment
 
How To Simplify Your Scheduling with AI Calendarfly The Hassle-Free Online Bo...
How To Simplify Your Scheduling with AI Calendarfly The Hassle-Free Online Bo...How To Simplify Your Scheduling with AI Calendarfly The Hassle-Free Online Bo...
How To Simplify Your Scheduling with AI Calendarfly The Hassle-Free Online Bo...
 
Introducing the Analogic framework for business planning applications
Introducing the Analogic framework for business planning applicationsIntroducing the Analogic framework for business planning applications
Introducing the Analogic framework for business planning applications
 
NAB Show Exhibitor List 2024 - Exhibitors Data
NAB Show Exhibitor List 2024 - Exhibitors DataNAB Show Exhibitor List 2024 - Exhibitors Data
NAB Show Exhibitor List 2024 - Exhibitors Data
 
WSMM Technology February.March Newsletter_vF.pdf
WSMM Technology February.March Newsletter_vF.pdfWSMM Technology February.March Newsletter_vF.pdf
WSMM Technology February.March Newsletter_vF.pdf
 
trending-flavors-and-ingredients-in-salty-snacks-us-2024_Redacted-V2.pdf
trending-flavors-and-ingredients-in-salty-snacks-us-2024_Redacted-V2.pdftrending-flavors-and-ingredients-in-salty-snacks-us-2024_Redacted-V2.pdf
trending-flavors-and-ingredients-in-salty-snacks-us-2024_Redacted-V2.pdf
 
digital marketing , introduction of digital marketing
digital marketing , introduction of digital marketingdigital marketing , introduction of digital marketing
digital marketing , introduction of digital marketing
 
Planetary and Vedic Yagyas Bring Positive Impacts in Life
Planetary and Vedic Yagyas Bring Positive Impacts in LifePlanetary and Vedic Yagyas Bring Positive Impacts in Life
Planetary and Vedic Yagyas Bring Positive Impacts in Life
 
Excvation Safety for safety officers reference
Excvation Safety for safety officers referenceExcvation Safety for safety officers reference
Excvation Safety for safety officers reference
 
WAM Corporate Presentation April 12 2024.pdf
WAM Corporate Presentation April 12 2024.pdfWAM Corporate Presentation April 12 2024.pdf
WAM Corporate Presentation April 12 2024.pdf
 
Data Analytics Strategy Toolkit and Templates
Data Analytics Strategy Toolkit and TemplatesData Analytics Strategy Toolkit and Templates
Data Analytics Strategy Toolkit and Templates
 
Environmental Impact Of Rotary Screw Compressors
Environmental Impact Of Rotary Screw CompressorsEnvironmental Impact Of Rotary Screw Compressors
Environmental Impact Of Rotary Screw Compressors
 
Interoperability and ecosystems: Assembling the industrial metaverse
Interoperability and ecosystems:  Assembling the industrial metaverseInteroperability and ecosystems:  Assembling the industrial metaverse
Interoperability and ecosystems: Assembling the industrial metaverse
 

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