Ruby on Rails, Events

RailsConf: Nick's Highlights from Ruby Hoedown

I attended and spoke at Ruby Hoedown 2010. Below are my notes from the conference.

Day One (Nuby Hoedown)

David A. Black - The Well-Grounded Nuby

  • Seven key points, with code examples
  • Every expression evaluates to an object
  • if statements and class definitions return objects
  • operations are messages (==, +, etc)
  • methods are messages (to_s)
  • a[2] is equivalent to a.
  • case is really if, elsif, etc, which is really x1.=(x0), x2.=(x0), etc.
  • String === String is false! Classes define === as meaning "is the argument an instance of me"
  • Objects have lookup paths they use to find the method among their associated modules and classes
  • Super means keep searching for the next method up. Not necessarily the super class, could just be
    in a module that was included the most recently.
  • instance.extend(module) will include the module into that instance, not the entire class
  • every object has a singleton class that represents the instance. So the above in actually including
    the module into the instance's singleton class.
  • there is always a "self". defaults to main:Object

Kevin W. Gisi - Dynamic Ruby for Nubies

  • DSLs help bridge the gap between an idea and code, as a layer of abstraction
  • I got lost :-(


  • Om nom nom

Nick Gauthier - The Six Ws of Testing

  • I think it went well. Very low on technical content but many Nubies came to talk to me afterward and said they enjoyed it. I'm sure I bored the technical folks to tears. But hey, it's the Nuby Hoedown!

Matt Yoho - Gem Authoring and Deployment

  • "require" loads code once, it is smart
  • "load" loads the code without doing any checks
  • You should not "require 'rubygems'" it should already be on the load path
  • Don't use jeweler, use a real gemspec
    Unsure about this, maybe the gemspec has enough automation you don't have to do this any more?
  • Aruba lets you write cuke specs within cuke specs. Helps with command line applications

Hack Session of DOOM

  • Two features and one bug on hydra!

Scott Chacon - Getting Git

  • (put conf name in subj when emailing questions)
  • tree -a for nice tree list of a directory
  • check out his slides for example of cool showoff styling and layout
  • Email him to ask what he uses for his diagrams and highlights (backgrounds)
  • Would be really cool to allow a [dot] keyword in showoff to interpret the following graphviz code as a diagram
  • git log branchA ^branchB
    show commits reachable by A but not by B
    for example, I'm working on branch my-feature
    git log my-feature ^master
    is the stuff I've done that's not in master yet
  • git branch --merged
    show me all branches that have been merged (safe to delete)
  • git branch --no-merged
    show me all branches that have not been merged

Day Two

Bryan Liles - Coding in Anger (or is that Desperation?)

  • Bryan Liles sings country
  • "run through the problem, take no prisoners" ... "and undoubtedly do some bad things"
  • "we build straw houses"
  • "if you do it the wrong way just to get it done, you'll get hit in the future"
  • Cargo Cult: "we're all guilty of it" and "it's bad"
    • Copy-pasting other people's code without understanding it
    • "Copying code is not bad"
    • "It might do the right thing, but it might not be doing the right thing"
    • Read the code first
    • Respect the copyright
    • Understand what you copy
    • Don't "copy and paste"
  • "It takes a big man to understand humility"
  • Break a task down and constantly refine task estimates
  • A desperate coder is a bad coder

bonus lightning talk: You are your own sales person

  • you are the product
  • you are the salesperson

Justin Love - You already use Closure

  • Block based programming
  • containment: f = vs do |f| ...; end
  • You can call a proc with [],b) is equivalent to proc[a,b]
  • duwanis in IRC: "rack of lambda"

Nick Gauthier - Grease your Suite

Matthew Bass - A/B Testing for Developers

  • Choose a metric
  • Do some experiments
  • Compare the metrics
  • Vanity for rails A/B testing

Yossef Mendelssohn - The Perpetual Novice

  • Dryfus skill acquisition model
  • Novice level: follow the rules, do what you're told
  • Adv. Beginner: limited ability to perceive different aspects of the situation
  • Competence: multitasking, handle more information, see how actions are related to goals
  • Proficiency: higher level view of the task, prioritize, adapt
  • Expert: no longer relying on rules and guidelines, deep & tacit understanding, intuition
  • be mindful of your scenario: other people (or yourself) need to deal with the work you've done
  • unconscious incompetence: you don't know what you're doing and you don't know that you don't know it
  • conscious incompetence: you don't know what you're doing, but you know that you don't know what you're doing
  • conscious competence: you can do it and you understand it, but you have to think about it
  • unconscious competence: it is second nature to you. You know what you're doing and you don't have to try
  • Dunning-krueger effect:
    • when you don't know what you don't know, you don't appreciate the skill itself, and are therefore very confident of yourself.
    • If you understand the skills, the more competent people think they are not very competent
  • You need to practice, outside your main work
  • Focus on getting better, the entire time
  • low level people working together can be dangerous
  • a skilled person working with a lower level person need to work at the lower person's level
  • Shuhari
    • Shu: learning fundamental techique, rules and guidelines (acceptance)
    • Ha: detach, digress, and break from tradition. think for yourself
    • Ri: transcendence: moved past rules and guidelines (no form)
  • Shoshyu: beginner's mind. In the beginner's mind there are many possibilities. In an expert's mind, there are few.
    • Experts have a tendency to stop asking questions
    • Beginners always ask questions
  • Something doesn't suck just because it's old

Starcraft interlude

  • Nick Gauthier vs Bryan Liles and Saxon

Ben Scofield - Keynote

  • Practice is important for mastery
  • Practice is not fun
  • mastery is know how to do things, not just knowing what was done
  • mastery is not required
  • as a company, deciding what not to do is as important (or more) as deciding what to do
  • Pick out what is most important to succeed, and outsource the rest
  • errbit : open source alternative to hoptoad
  • as a company, focus on the most important stuff
  • live intentionally: think about what you're spending your time on.
  • Embrace adequacy (and mediocrity)

Day Three

Family friendly ruby conf in disney world. $189/night @ contemporary. Free conference.

Michael Jackson - Parsing Expressions in Ruby

  • Different school of thought alternative to regular expressions
  • Regexes are great but complicated ones get really gross, even after 10 or 12 characters
  • parsing expressions are:
    • declarative
    • recursive
    • readable
    • easy to maintain
    • not ambiguous
    • slow :-) (in ruby)
  • Citrus gem

John Willis - Configuration Management in the Cloud with Chef

  • infrastructure as code
  • need to be able to share with teammates
  • can't have "the deploy guy"
  • Chef is a library for configuration management
  • Chef client runs on the system (to accept commands and configuration)
  • Chef server is a RESTful API
  • Each system you configure is a Node
  • Attributes are searchable
  • Knife is the tool you use to interact with the API
  • Nodes have Roles, which describe what a Node should be
  • Nodes have a Run List
    • What Roles or Recipes to apply in Order
  • A Resource is a Package or a Service
  • E.G. Package "sudo" "1.6.8p12" and it figures out what package manager to use
  • Services support actions (e.g. apache supports "restart" and "status")
  • Resources take action through providers
  • Data bags store arbitrary data
    • E.G. put a user w/ their ssh key in a data bag, so you can add them as a user on the server
  • Cookbooks are shareable
  • "Open source for infrastructure"
  • Open training
  • Cloud service independence (swap from slicehost to rackspace just by adding credentials)
    • 5 chef servers for free
  • @opscode @botchagalupe
  • Chef beats puppet on cloud support (more vendors)

Backchannel notes

  • Whiskydisk for deploy

Alex Sharp - Refactoring in Practice

  • Shantytown application: you want to bulldoze it, but people live there
  • testing in crucial for refactoring
  • avoid the EPIC refactor
  • changing the implementation without changing its behavior
  • deprecate action
    • for example, hoptoad a deprecation warning on old calls to actions
    • helpful when there are ajax calls you are not sure about
  • take out small chunks and get them under test
  • lack of framework knowledge - often using existing solutions is an easy refactor
  • Domain driven development & domain modeling
  • Document the smells
  • delete code that you aren't using

Brian Hogan - There's a Wheel for that Already

  • "I don't want to use that because I don't like how it looks"
  • How often is "better" really just an opinion
  • Forwardable - delegate a method to another class
  • Rails.root.join('config', 'x.yml')
  • dir, base = path.split
  • open-uri wraps net/http, net/https, net/ftp
  • Tempfile (like tmpdir, but just for one file)
  • x ='hydra.yml')
  • Observer
    @@@ ruby
    def initialize
    ... later
    call: "changed" !
  • bash alias for serving static files via webrick
    I wasn't able to write it down quick enough.
  • PStore for storing data
  • CSV is great if it doesn't need to be faster
  • Home Run for datetime speedup via C extension
  • Oh no, I had to catch my flight and I missed the rest of this awesome talk!

Glenn Vanderburg - Keynote

  • Wasn't there. See notes from Lone Star Ruby Conf. It was probably the same talk

Want to leanr more about RailsConf, check out our other articles:

The strength of the Rails Community, as seen at RailsConf

Being Social at RailsConf Without Talking Tech: Possibe?

Links From RailsConf 2013