Ian McFarland, Principal and VP of Technology for Pivotal Labs, reprises his popular RailsConf 2010 talk. Ian describes the technical and social aspects of how Pivotal practices agile software development.
Monthly Archives: June 2010
Managing Application Ecosystems
Daniel Lieberman of BitPusher says current trends in automation, reliability engineering, and cloud computing will combine and mature into a nearly-commoditized blend of operations and infrastructure. He describes ops practices during the transition.
Standup 6/30/10 – Selenium blah blah blah RSpec focused test blah blah blah Rubymine blah blah
Help
- Determining a users default time zone – someone must have solved this already, right? Well, Javascript only gives you the time offset, which isn’t that useful, but Fleegix has some good support we’ve used on other projects.
- The after_commit gem – we wanted to create an audit entry every time a particular model failed to create successfully. We tried using the after_rollback hook in both our tests and our development environment but it just didn’t work. The before_rollback callback also didn’t work, but the non-rollback callbacks in the gem seemed to behave. Anyone have any thoughts outside of overriding ActiveRecord ourselves?
Interesting Things
- Vows – real async Javascript testing for Node.js. Jasmine does support some async testing, but it sounds like it’s a bit clunky to do.
- Using RVM on the server – is anybody doing this? Apparently not yet, but we had some strongly differing opinions on the matter as to how useful it would be and if it’s the right tool for the job. To be continued…
Rails 2.3.8 + mongrel_rails + Rack 1.1.0 – cookies do not work. At all. Apparently with Rack, cookies get fed into mongrel_rails as an array, while Mongrel expects them to be a String. Looks like someone already ran into this. The fix is to throw this in a Rails initializer file:
class Mongrel::CGIWrapper def header_with_rails_fix(options = 'text/html') @head['cookie'] = options.delete('cookie').flatten.map { |v| v.sub(/^n/,'') } if options.class != String and options['cookie'] header_without_rails_fix(options) end alias_method_chain(:header, :rails_fix) end if Rails.version == '2.3.8' and Gem.available?('mongrel', Gem::Requirement.new('~>1.1.5')) and self.class.const_defined?(:Mongrel)(As an aside, running mongrel_rails by using script/server works fine, we only found this issue when running our Webrat Selenium tests, which calls mongrel_rails in some different way that causes this bug to be exposed.)
Chicago Tracker Users Group (CHI.TUG) meetup on Jul 22
We’re forming a Tracker User Group in the windy city, and the first meetup is scheduled for Jul 22, at the Hashrocket Chicago office.
I’ll be there to talk about the concepts and history behind Tracker, our experience with it, and will give a demo to those that are interested. It’s a great place to give feedback and ask lots of questions.
Space is limited, so RSVP soon.
Standup 6/29/10 – EngineYard Redis change
Help!
- Ey cloud deploy – has anyone done a deploy to EY cloud and seen the Mongrel instances not get bounced?
- Does anyone have any tips on testing distributed applications? We’re looking for the least ugly/painful way to do it well.
Interesting Things
- Rvm and sudo – for goodness sake don’t do it.
- Sass not recompiling on deploys – a few of our projects have seen Sass files not recompile/update for some reason that we’ve yet to track down. So instead of spelunking through Sass code we just force the issue by having a rake task that forces the recompile – see this post for details.
- Rails xhr redirect – one of our projects is using the xhr_redirect plugin to support ajax redirects – careful if you want to use it in your tests – it self-destructs if your Rails environment == ‘test’
- Android meetup tonight at 6:30 PM – check out the details.
- New Redis recipe from EY – following up from yesterday, the new EY recipe to set up Redis appears to work fine with a little tweaking.
Standup 6/28/10 – EngineYard Redis change
Interesting Things
Redis at EngineYard – EY recently fixed a bug in their system chef scripts that was unintentionally installing Redis, so if you’re relying on it being there you may find it missing on your next deploy. EY has apparently just added a recipe for running Redis on a utility slice in ey-cloud-recipes. We haven’t tried it out yet but at first glance it looks ok. This new recipe doesn’t support running Redis on a solo instance, but it doesn’t look too hard to change it to do that.
Library reorganization – we here at Pivotal have a library of books we let people ‘check out’. We’ve just reorganized it a bit. Let our local librarians know if it’s working for ya.
Mobile meetup – there’s a mobile meetup tonight from 6-8 PM tonight at Horatius in Potrero Hill. They’re expecting people from top mobile companies including entrepreneurs, application developers, designers, marketing/business, etc – please RSVP at the Facebook to attend.
Standup 6/25/2010: Fun on Friday
Help
How do we test javascript with jQuery animations? — You’ll want to turn off jQuery animations entirely, which you can do useing:
jQuery.fx.off = true;
This will turn off all animations on the page and make them jump to their end state when called. There are some websites that this would be a large improvement outside of testing.
Interesting
You can’t chain rake tasks – Rake is designed to emulate Make, which views running a rake task as fulfilling a requirement. This has been pretty thoroughly explained in blabs previously. If you’re having problems with rake you should take a look at thor.
Pivotal Tracker scheduled weekly maintenance
For the next month or so, we will be rolling out a series of changes to various parts of the Tracker server architecture, including moving to a Memcached distributed cache for certain requests, cookie based sessions, switching from Mongrel to Passenger, splitting the very large history table, etc.
We’re doing this to improve performance, and eliminate potential scaling issues as our traffic grows. To reduce risk, we’ll introduce these changes in separate updates, once a week.
These updates will occur on Wednesdays at 7:30pm PDT (including tonight), and last under an hour each. If there are any long running migrations needed, we’ll plan them for weekends, or handle them incrementally, to avoid any extended down times.
We understand that these week night outages are inconvenient to many of you, especially in Asia. We apologize in advance, and will try and keep the updates as brief as possible.
Standup 6/23/2010: Mock what isn't there
Help
Is there a reason why java on 64 bit linux doesn’t seem to go above 4GB of ram even if it’s given more? Some docs say that 2GB is the max, which is clearly not the case. Other projects report they have JVMs as large as 12 gigs. The search for a reason for the OOM errors goes on.
How do you mock the backtick or array operator with RR? This is done in rspec by mocking the symbol on the class that it’s being called in, but it’s not obvious in RR. Suggestions included finding a different way to test the behavior, wrapping the system call in a function that’s easily mockable, or investigating another way to shell out.
Interesting
Free Ruler, the measurement tool of choice for pivots who need more than the pixels measurements of Command-Shift-4, doesn’t just know the pixel density of the display it’s running on. 20″ Aluminum iMacs are significantly different from what it assumes.
The Jasmine javascript BDD testing framework project was jealous of the newcomer Cedar’s @cedarbdd twitter. They’ve struck back by creating @jasminebdd. You can follow both for updates, announcements and tips.
Some devs working on a mobile JS app recently discovered Prototype’s wrap function after implementing the same thing many times before. They did preface this with “is anyone else still using Prototype” so as to not offend the jQuery zealots.
Standup 6/22/2010:
Interesting
- Don’t put your expectations on a proxy, as the proxy might not get called in your code as the proxy may have turned into a real object by the time you use it. The right thing to do is to put your expectations on your proxy target, and you can do this on either either the target or proxy_target of the proxy object. Proxy_target is strongly preferred by some pivots.
Help
- One project in the office is deploying varnish to EY Cloud, and was wondering if anyone else had gone down this path before. There is a EY Cloud chef recipe for varnish, but it is not supported thus changes with EY cloud may break it in the future.
Danger
- A pivot warns that the recent facebooker gem (1.0.70 and 1.0.71) come with a gemspec that reports version 1.0.67. This causes bundler and RubyMine to both be very confused. If you find yourself in this situation complain loudly and then remove all previous version from your system.
