Ruby Midwest
Ruby Midwest 2011
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
- 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.