Ruby Midwest

Ruby Midwest 2011


Ruby Midwest 2011 - 11/4/11

Misc

Rails is the new Rails

Active Record Anti-patterns for fun and profit

Podcast...Ruby Rogues Live Recording

github for building your app

  • github uses their main repo with branches for pull requests (particularly simplifies perms)
  • github uses oauth for access to things

Testing legacy applications

  • ex. cucumber will get you highlevel view of tests
def crazy_insane_method
  return clean_tested_method if condition
  #crazy shit here
end

Break it Down - Service Oriented safari

  • @bscofield
  • ISOLATE apps!!!
  • running the full stack ends in many services
    • foreman (seems to run on one machine)
    • specialization -- should only run on their own..
  • redundancy
    • moar extraction
  • sharing datamodel between apps

Does pair programming have to suck?

  • leandog - company on a boat
  • bus number = number of people to get hit by a bus before you are screwed...
    • pair programming - helps share info
  • why dont we pair?
    • ...
  • follow GeePawHill ?
  • @AngelaHarms
  • http://myAgileEducation.com
  • Dec. 3 - code retreat

Ruby Community: Awesome; Could Be Awesomer

Uncle Bob Martin

  • Architecture "The Lost Years"
  • High level architecture should scream its intent (e.g. look at blueprints for different building types)
  • Ivar Jakobson
    • User <-> Delivery Mechanism -> Boundaries (Interfaces) -> Interactor <- Entities
  • For testing: Delivery mechanism can be replaced...
  • Trigsby Ringscaller (sp??) - Creator of MVC
    • Controller -> Model <= (Observer relationship) View
  • Fitnesse ?
  • Wikis - invented by Ward Cunningham
  • "A good architecture allows major decisions to be deferred!"
  • "An architecture diagram is where you can draw lines where all crossing dependencies go in the same direction"
  • TDD: Tests are there to help refactor, they should be fast!
  • 8thlight.com

"The Cloud"

Make awesome command line apps (with ruby)

Confident Code

Modern Databases

Recommendation Engines (Support Vector Machines)

  • natural language mapping to sentiement... library?
  • libsvm -- svm lib written in C
  • source on github: https://github.com/hexgnu/rmw-svm
  • http://matthewkirk.com
  • Array object in ruby, to java (symbol int (or type you want))...
  • http://matthewkirk.com/presentations/Support-Vector-Machines-with-Jruby.pdf

People Patterns

  • tell bad news quickly (e.g. dont keep it held in...)
  • dont sugar coat anything

Life on the Edge

High Performance Ruby

Final Boss: RoR in video game industry

  • David Czanecki @czarneckid
  • @agoragames
  • @mlg => MLB, NBA, etc. of e-sports
  • Ola Bini: "Just add scaling"
  • Early: Deploy early in the day, early in the week
  • Documentation: make steps to follow! e.g. "Creating a new guitar hero title.txt"
  • "Overhead" (e.g. managers) - valuable for managing the client
  • Data: (e.g. Game integration): Queues!!! (guitar hero uses sparrow) (and workers?)
    • Rescue - (killer app: rescue web - monitor and understand what is going on)
  • Optimize for ... (e.g. games: school, vacations/holidays, ...)
  • Not all queues are equal - understanding the heavy use can let you prepare for heavy usage
  • https://github.com/agoragames/leaderboard
  • External services: integration!!
    • impose limits!! (they can be artificial, but they serve a point!)
      • rate limits
      • timeouts (60s is too much, 10s and ramp back!)
  • Monitoring and infrastucture
    • monit -> runit
    • Munin
    • Infrastructure validation
      • using cucumber: e.g. mysql running, slave running (how far behind?)
    • Named services! (dont use the machine name directly - use DNS to retarget machines)
    • Redundancy - e.g. backup infrastructure
  • Stack smashing - rackspace VMs --> down to 2 (24 core) physical boxes
  • http://speakerdeck.com/u/czarneckid/p/rails-in-the-video-game-industry

Andy Hunt

  • Pragmattic Programmer
  • Agile Alliance
  • Agility Undefined
  • Context Matters
    • the way the world works: its messy (many interconnected systems)
  • Practices werent discussed... what did they mean by agile:
    • ever shifting, changing, responding
  • Emergence: complex behavior from simple interactions
  • Kaizen: Continuous changes based on continuous feedback
  • Risk mitigation: (risk from programming comes from writing code)
  • Cognative biases: what as humans drive us away from something like logical agile practices
    • Driving need for closure: (e.g. when will this project be done? we dont know... just tell me.)
  • Postpone major decisions as long as you can (know the least at the beginning, most at the end, when do you want to make decisions?)
  • Funcamental attribution error: context (e.g. why are they being a real creep as a client...)
  • Planning Fallacy / Optimism Bias: Underestimate tasks all the time...
  • Hawthorne Effect: when someone is watching we change our actions
  • Dunning-Kruger Effect: "2nd order incompetence" - you dont know what you dont know -- argument to formulate a test
  • Un-Agile warning signs:
    • sloganization
    • follow rules vs. exercize judgement (if you dont let experts exercize judgement on team you are not getting value for the expert)
    • confusing the model with reality
    • demanding conformity
    • spelling out too much detail
    • oversimplification of complex solutions
  • Agile development uses feedback to make constant asjustments in a highly collaborative environment
    • must have:
      • continuous meaningful feedback and be able to evaluate
      • ability to change the code, process, team, etc...
  • try. fail. learn. repeat.