Part 1 of 4

Keynote: Writing Software (ConFreaks)

David Heinemeier Hansson (Twitter)

Stop writing knee-jerk tests.

Test-first development naturally leads to dependency injection.

Dependency injection is the worst thing on the planet.

You can make anything fast if it doesn't work.

Ultra Light and Maintainable Rails Wizards

Andy Maleh

Wizards should be as simple as possible. Don't duplicate paper forms.

Example: EarlyShares


  • persist progress at each step
  • rest
  • mvc
  • oo
  • non-functional requirements
    • productivity
    • maintainablity
    • performance
    • security


  • one controller per step
    • each controller saves and redirect to next step
    • duplicate code
    • controller manages steps
  • one action/presenter per step
    • not restful
  • session accumulation
    • not scalable
  • hidden value accumulation
    • persist values in hidden form fields
    • .net webforms approach
    • not secure
  • state machine
    • model manages steps
    • presentation logic in model
  • gems

Wizards implement the builder design pattern

  • each step is a partial view of the model

Object Oriented Views (Confreaks)

Andrew Warner (Twitter)

Holy Grail

Best possible user experience combined with the best possible developer experience.

  • no full page reloads
  • feels like desktop/native
  • developer friendly framework
  • don't repeat yourself
  • mostly single language (Ruby, JavaScript, Rip)
  • search engine friendly

Closest framework today is Rendr by AirBnB

Also duplicate code, TurboLinks and front-end clients (AngularJS, Ember)

Perspectives (new approach)

lowest common denominator == dumbest possible template

  • separation of concerns
  • testing (just testing plain ruby objects)
  • easy caching

Make An Event Of It

Jason Clark (Twitter)

Where are we going?

  • pattern
  • coupling
  • meechanics
  • responsibility

Eventing System
[ Subscriber ]

Internal Coupling

Concerns, Decorators, Presenters, Service Objects, Helpers: Help Me Decide! (ConFreaks)

Justin Gordon


  • methods less than 5 lines
  • classes less than 100 lines
  • one instance variable per view


  • dry
  • easy to test
  • clarity
  • easy to find
  • easy to change

Advanced AREL: When ActiveRecord Just Isn't Enough (Confreaks)

Cameron Dutro (Twitter)

Stop writing SQL in AREL queries!

  • have to know specific, potentially non-portable, syntax
  • no syntax checking
  • not chainable
  • what does ? mean?


Post.where(Post[:title].eq('some string')).to_sql
Post.where(Post[:title].eq('some string').and(Post[:id].in(22, 23))).to_sql

Post.joins(:comment).where(:id => 42).to_sql

Keynote: What Happens To Everyone, When Everyone Learns To Code? (ConFreaks)

Farrah Bostic (Twitter)

Fantastic talk, must watch video.