Sean BeckettSean Beckett
Case Commons seeking VP Eng / CTO in New York
edit Posted by Sean Beckett on Friday April 30, 2010 at 04:04PM

At Pivotal Labs, one of the services we provide is bootstrapping startups, including helping them interview and hire. Pivotal Labs and our clients place a strong emphasis on Agile development and its many aspects: Pair Programming, Test-Driven Development, rapid iterations, and frequent refactoring.

Here is a job posting from Case Commons, a current Pivotal client looking for a VP of Engineering or CTO in New York.

Case Commons’ mission is to transform public sector human services through technology. Case Commons enables workers serving the most vulnerable families and children to be more effective and efficient via new software tools. Casebook™, Case Commons’ marquee technology, is a collaborative, family-centered case management system that leverages the capabilities inherent in social networking technology for the public sector child welfare segment. A growing number of policymakers believe that Casebook™ can be a citizen portal for government services, including health, education and human services. Case Commons is funded by the $2.5 billion Annie E. Casey Foundation, which has spent 20 years pursuing human services system reform; since 2007, AECF has been building Casebook™ in partnership with Tipping Point Partners.

DESCRIPTION

  • You will lead the engineering team building Casebook™, reporting to the Chief Operating Officer
  • You will assume a leadership position, revolutionizing technology for people serving less advantaged children and families, with high visibility among government, foundation, venture capital, and business leaders
  • You will work with a unique team that consists of proven domain leaders, successful entrepreneurs who have helped transform other technology market segments, and software developers from Pivotal Labs, the top Ruby on Rails software development consultancy in the world
  • Salaried position in a non-profit organization located in New York City
  • Significant travel – up to 50% of time

Alex ChaffeeAlex Chaffee
Basic Ruby Webapp Performance Tuning (Rails or Sinatra)
edit Posted by Alex Chaffee on Wednesday April 28, 2010 at 07:37PM

My company launched our app, Cohuman, a few weeks ago. The rush of finishing features, fixing bugs, and responding to user feedback has subsided a bit, and it's time to go back and give the little baby a tune-up. I find that a good development process will ebb and flow, and as long as you don't let something slide for too long, it's perfectly acceptable to let bugs, or performance issues, or development chores pile up for a bit and then attack them concertedly for an entire day or two. A bug-fest or chore-fest or tuning-fest can actually increase efficiency as you get in a rhythm... and it feels really good at the end of the day when you see all the bugs you slayed or all the milliseconds you shaved.

In this article I'd like to describe some of my techniques. I make no claim of originality or great expertise; I just want to share what I know, and hear (in comments) what other people have learned. I'm using Sinatra and ActiveRecord, but not Rails; hopefully this discussion will help people no matter what framework they're using.

Ask for Help

"We keep getting webrat thread exceptions running our integration specs with the rails integration runner: Thread tried to join itself. The error message varies with different versions of ruby 1.8.6 vs 1.8.7."

Anyone had this problem or know why?

"How do I skin an iphone mobile site to be the correct width so it's not 980px wide?"

<meta name="viewport" content="width = device width" />

*"We're trying to deploy some nginx configuration changes to EngineYard Cloud, what's the right way to do that?"

We've tried building custom chef recipes to solve this problem, but they run after nginx has already restarted, so are a poor solution to this problem. The better solution might be to check in configuration files into the application and symlink them into the nginx configuration directory using a before_symlink.rb hook in the /deploy directory.

*"We've got a has_many association where some of the child records are originally saved in an invalid state. When we later load the parent and ask it if it's valid, it returns true even with validates_associated. How can we get the desired validation behavior?"

Turns out that unloaded associations are not validated. Solution: load the association before calling .valid? on the parent. In general, you should also not create invalid objects, instead using a state variable to put them into a "draft" or "incomplete" state where they are still valid but not complete. Then remove that state and you'll see the errors required to finish that object.

Interesting Things

  • When RubyMine 2.0.1 won't run your focused specs, try attaching rspec 1.2.9 to it rather than 1.3.x. It fixed this issue for one of our teams.
  • Rubymine 2.0.2 came out today: can finally run focused contexts?! Also including bundler support! What's new
  • We tried our Unicorn on EngineYard cloud: so far so good. It's still "experimental" but seems to work.

David StevensonDavid Stevenson
Standup 4/26/2010: Ruby hack night with Sarah Mei
edit Posted by David Stevenson on Monday April 26, 2010 at 10:03AM

Interesting Things

  • Given a list of IDs, how do you find which ones are not in the database?
ids = [1,2,3,4,5,0]
missing_ids = ids - Model.find_all_by_id(ids).collect(&:id)
  • Sarah Mei is hosting a Ruby Hack Night at pivotal labs tomorrow at 7PM (Tues April 27th. 731 Market St Floor 3, San Francisco).
  • There is an android users group tomorrow. We don't know any more about it than that.

John PignataJohn Pignata
NYC Standup Roundup - Week of 4/19
edit Posted by John Pignata on Saturday April 24, 2010 at 07:11AM

Interesting

  • A Pivot noted a facepalm + headdesk moment when debugging an issue whose cause turned out to be related to two adjacent string literals being auto-concatenated by Ruby's parser.

    >> "foo" "bar"
    => "foobar"
    

In this case, a missing comma in a method call went undetected because of this language characteristic. Whether or not this follows the principle of least surprise is an exercise left up to the reader.

  • Another pair warned that while this is valid syntax in Ruby 1.8.7 and beyond:

    define_method(:burninate) { |&block| block.call("burninating") }
    

.. in 1.8.6 you can't use a block as a parameter of a block.

  • Another pair noted that exceptions with Sunspot can cause wider failures on a site than just those that touch Solr. The symptom on this project was that if Solr was inaccessible for any reason every page on the site would throw an error. Their fix was to use Sunspot's SessionProxy to wrap methods with some exception handling love.

  • Lastly, GoRuCo -- the Gotham Ruby Conference -- will be held on May 22nd at Pace University's downtown campus. The roster of talks is up and registration is open for business.

We'd like to congratulate Mavenlink, one of our clients, for being chosen as a finalist for TechAmerica High-Tech Innovation Awards. Mavenlink (http://www.mavenlink.com) provides an online workspace that helps businesses and their consultants collaborate better. We've really enjoyed our ongoing work with the Mavenlink team, and we're excited about Mavenlink's progress!

Dan PodsedlyDan Podsedly
Looking for Ruby on Rails developers
edit Posted by Dan Podsedly on Monday April 19, 2010 at 07:52PM

Pivotal Labs has been at the forefront of agile development since it's early days. We've taken what we've learned by applying agile concepts on a countless number of real world projects, and honed these skills into a very effective way to build software. Along the way, we also built a great project management and collaboration tool - Pivotal Tracker.

Not only does Tracker serve as a critical component of our own development process, it's also relied on by thousands of teams out there in the world, from open source developers, to fast growing startups, and high profile, established companies.

It's a great app, yet we have lots of ideas for how we'd like to improve it. Want to help us? If you're a Ruby on Rails developer, enthusiastic about agile development, and want to help us to take Tracker to the next level, read on.

We're currently looking for developers in the Denver/Boulder, Colorado area. Familiarity with Ruby on Rails is important, as are strong Javascript, CSS, and overall web UI skills. At Pivotal Labs, we pair and test drive 100% of the time, so any experience with pair-programming and/or test driven development would be a huge plus. We're also big on aggressive refactoring, so be ready to roll up your sleeves.

If you're interested in working with us, please send your current resume to tracker-jobs@pivotallabs.com, and tell us a little about yourself. Principals only, please.

John PignataJohn Pignata
NYC Standup Roundup - Week of 4/12
edit Posted by John Pignata on Sunday April 18, 2010 at 08:06PM

Help

Does anybody have any good techniques for dealing with STDOUT/STDERR and exception handling when shelling out in Ruby on Windows?

Nobody did. Do you? Please share in the comments.

Interesting

A pair ran system updates on their Snow Leopard box which caused bunch of test failures in their project. Most of the failures were occurring around the parts of the application that used BigDecimal. After digging they found:

     >> BigDecimal.new("1.01").to_f
     => 1.1

Oops! Looks like Apple shipped Ruby 1.8.7 p173 with a recent update. p173 has a bug that some dude introduced into BigDecimal. The fix was to update to p174 which was released quickly after this was discovered.

While on the subject, BigDecimal is kind of a drag. Its #inspect output is inhumane and new'ing up BigDecimal objects requires an ugly call to its constructor. A Pivot recommended using the undocumented bigdecimal/util which adds a convenience method to Float for creating new BigDecimals:

    >> require 'bigdecimal/util'
    >> 3.14159265.to_d 
    => #<BigDecimal:10056bea8,'0.314159265E1',12(16)>

And a nickel's worth of free advice?

    >> BigDecimal.send :alias_method, :inspect, :to_s
    >> 98.6.to_d
    => 0.986E2

Unless you prefer:

    #<BigDecimal:101137c78,'0.986E2',8(8)>

Zach BrockZach Brock
Standup 04/15/2010 - iconv and EY+JRuby
edit Posted by Zach Brock on Thursday April 15, 2010 at 03:06PM

Ask for Help

  • Anyone have advice for loading seed data in both regular and test environments? One of our projects has some data that is necessary to bootstrap the app into a working state and they'd like it to be in the database for all their tests as well.

  • EngineYard Cloud installs a weird version of JRuby. Some of the standard command line options don't seem to work. Anyone have a pointer to a good chef recipe for getting JRuby up and running on EYCloud?

Interesting Things

  • Ever get a UTF-8 file with messed up encoding? If all the bytes are still in the right order, try using iconv to fix it. Telling iconv to convert from UTF-8 to UTF-8 fixed a file that had been emailed to one of our projects.
    iconv -f UTF-8 -t UTF-8 es.yml > es2.yml

Zach BrockZach Brock
Standup 04/14/2010 - MySQL and Cloudfront
edit Posted by Zach Brock on Thursday April 15, 2010 at 03:00PM

Interesting Things

  • One of our teams saw a significant (20%+) speedup on their product by switching to Amazon's Cloudfront service. They're using Paperclip and it only took about 20 minutes to switch from S3 to Cloudfront.

  • If you have an integer column in MySQL that does not allow NULL values and you update a row and set that column to NULL the column ends up being set to 0. This was very surprising to one of our teams.

Other articles: