Glad You're Ready. Let's Get Started!

Let us know how we can contact you.

Thank you!

We'll respond shortly.

Brandon Liu

Posts By

Access your database's best features with Sequel

Sequel is a wonderful library for interacting with relational databases. Some of my favorite aspects: 1. Out-of-the box support for foreign key constraints. 2. Straightforward migration DSL. 3. Support for all major free RDBMSes and even some proprietary ones. Also JRuby support through JDBC.

Read more »

Python web testing for the Ruby programmer

Ruby has a couple of well-known libraries for unit testing, mocking and stubbing HTTP interactions. My typical toolset includes RSpec, WebMock and VCR. I had the chance to work on a Python project recently and did some investigation into similar libraries for Python.

Read more »

[SF] Standup 1/23

Interestings Unwrapping an annotated tag in Git

Annotated tags are their own "objects" and the sha does not point to the commit that they are tagging. In order to unwrap the tag, add ^{commit} to the original sha. This will not harm regular shas, so you can use it in scripts where you may encounter annotated tags.

Read more »

[SF] Standup 1/22

Helps How do I get sprockets to output its dependency graph?


Call "dependency" method on an asset object.

What is first step in debugging remote irb that won't startup because of missing "readline" dependency?

Your ruby was compiled and then the readline library was deleted or moved.

Read more »

New Jasmine Gem


  • New Jasmine Gem

There's a new version of jasmine-gem on GitHub - please test it out so we can push a new gem next week.

  • jQuery opacity

Once the CSS opacity is set on an element with jQuery the z-index is no longer respected and the element appears on the bottom.

Leads: Can it be reproduced in other browsers? Only tried Chrome so far.


  • Safari doesn't like Rails timestamps

my_model.created_at or my_model.create_at.to_i spit out values that when you (in JavaScript) new Date(value), give crazy dates in Safari.

The workaround is to use:

(Ruby) value = my_model.created_at.to_f * 1000

(JS) date = new Date(value)

Discussion: Try all browsers when dealing with a Date API There's also DateJS, but has not been maintained in a long time.

  • Jasmine failed to start on latest Chrome

If you have an updated version of Chrome and jasmine fails to start Chrome, reinstalling later version of chrome driver (

Or alternative is to re-image the machine, which contains later Chrome and later ChromeDriver.

  • bitbucket Tracker integration broken by '&' in author name

We spent several hours tracking down this (open) bug in bitbucket's tracker broker. You can change the ampersand to something else in your git-pair script.

  • IE9 svg path click handler

IE9's click handler for SVG paths treats two clicks as a single click and six clicks as a double click.

Like Dreamcatcher, but for Shapes


  • capybara-webkit save_and_open_page returns empty DOM after AJAX request

Investigate: Use page.driver.render to save a screenshot. Look at capybara issue discussed yesterday at


  • Shapecatcher: draw something, find the closest-matching Unicode character

Also of note:

  • bundle exec foreman

Using bundle exec may solve some Foreman issues teams have been seeing.

SF Standup 7/30


  • Apache proxy: (502)Unknown error 502: proxy: pass request body failed

We need to make requests to a server and these requests have to come from a fixed IP address and be authenticated via SSL. For this purpose we set up a EC2 instance to function as a proxy. We can make cURL requests using our key and certificate from the proxy machine successfully. But when we go through Apache we get: "(502)Unknown error 502: proxy: pass request body failed"


  • Backbone's views' $el contains all matched elements

If you initialize a Backbone view with an el selector that matches more than one element: within the view $el will refer to a jQuery collection that contains all the matched elements, while el will contain the DOM object for only the first element matched. To achieve consistency, you might want to instantiate your view like so:

new view({el: '.selector_that_matches_many:eq(0)'});