A respectful criticism.

If you’re a hardcore evangelist of “Lean UX" it’s possible that we’re about to have an uncomfortable moment.

The video on the other side of this link is a quick (2 min) video presentation of some general points about testing UX / Design stuff in your…

Horse wall at the office via Instagram


Say you want SVG with PNG fallback for IE8? Do this:

Extra credit: Heres a mixin for SASS to make it even gnarlyer.

  • Update: Awesome people (@xavier_ho, @kylebarrow) from the internet have verified that the browser will only make a single HTTP request when using this technique.


I designed you a new background for your iPhone 5.


If you’re a Ruby developer working with Rails, at some point you’re going to need to work with JavaScript. While the two languages have many similarities, the fundamental differences in their object models can be quite jarring. CoffeeScript helps to provide a more Ruby-like syntax, but if you’re…

Give them an inch and they take $773,074,040



In early 2012, Southwest Airlines began reducing seat pitch—better known as legroom—in their 737s by a single inch, from 32” to 31”. This allowed them to add an additional six seats per flight.

Southwest runs, on average, 94,350 flights per month at an average price of just $141.72 per seat. These flights, according to the airline, are generally 80% full.

That means, every year that single inch earns them $773,074,040 of additional revenue. I guess every little bit really does count.

Android sucks.

So been building some mobile web apps. 1 thing I learned css3 animations can kill the android browsers. Seriously, like crash it to death.

Startups, Stock Options & US Taxes DONT MIX

Things I learned about Javascript / Node

node if you pass in a require looks for an index.js. Interesting. Took me a while to figure out but now makes total sense.

SetTimeouts and variables and scopes! Oh My! Just learned that when setting changes on an variable/object using settimeouts. It look at the state of the variable or object at the time the delayed event runs not the state at when you first passed in a the delayed event.