Rails is the new Rails
Active Record Anti-patterns for fun and profit
Podcast...Ruby Rogues Live Recording
github for building your app
Testing legacy applications
- github uses their main repo with branches for pull requests (particularly simplifies perms)
- github uses oauth for access to things
- ex. cucumber will get you highlevel view of tests
Break it Down - Service Oriented safari
return clean_tested_method if condition
#crazy shit here
Does pair programming have to suck?
- ISOLATE apps!!!
- running the full stack ends in many services
- foreman (seems to run on one machine)
- specialization -- should only run on their own..
- sharing datamodel between apps
Ruby Community: Awesome; Could Be Awesomer
Uncle Bob Martin
- 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 ?
- Dec. 3 - code retreat
Make awesome command line apps (with ruby)
Recommendation Engines (Support Vector Machines)
- 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!
Life on the Edge
High Performance Ruby
Final Boss: RoR in video game industry
- tell bad news quickly (e.g. dont keep it held in...)
- dont sugar coat anything
- David Czanecki @czarneckid
- @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
- 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
- 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
- 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:
- 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.