Recent Posts

A Truly Minimum Viable Kitchen

published Feb 24, 2014

I read Matt Maroon’s Minimum Viable Kitchen post (and the ensuing Hacker News discussion) a while ago, and I’ve been thinking about it off and on since then.

Not about the post per-se, but about what a minimum viable kitchen was, and whether there was anything interesting in the concept.

In the original post, Matt goes into great detail on a huge list of things that are needed for a Minimum Viable Kitchen. It quickly becomes obvious that Matt is not a minimalist. The list includes things like a stand mixer, a scale, and a 10-piece pot and pan set. Nothing wrong with that. I own a stand mixer and a scale, and I use them all the time, but I certainly wouldn’t put them on my “desert-island kitchen list”. I don’t own 10 pots and pans. I do agree that you need good quality ones, but 10 seems like a bit much, even for a non-minimal kitchen. I’d rather have the extra cupboard space.

Truly Minimal

So, let’s scale it back a bit. What is a truly minimalist kitchen, and what can you make with it?

I’m going to assume that you are living in a standard house that comes with a fridge, stove and oven. Let’s pretend you are just moving into your first place and have nothing else. What do you need to cook with? I’m going to ignore anything you use to eat, we’re just talking about getting food to the table here.

Okay how’s this for a first shot.

Read More

No Excuses

published Apr 23, 2012

I wrote this in response to a post on HN. I could link to the post, but it doesn’t matter. There are posts like this all the time. Stop making excuses. Go build something.

This is going to sound more dramatic than it was, but here’s one way of summarizing the last five years of my life:

I was 35, working at a great job as a physicist. Amazing team (I was usually the dumbest guy in the room), amazing project, but I was bored. I knew that if this didn’t make me happy, I needed to get out. I read a few PG essays, caught the startup bug, and started coding in the evenings.

Within 8 months, with a brand-new daughter and another that was two, I was gone from that job, working on my own. In that 8 months I had taught myself web-dev from scratch.

I knew nothing of Ruby, HTML, CSS or JavaScript. I had a smattering of Unix knowledge and had been coding data-analysis in Python and C for a while, but the amount I had to learn was staggering. I bought tons of books, learned tons, and (luckily) had no idea how much I still had to learn.

Read More

Getting up and running with Amber

published Dec 08, 2011

I was quite excited by Yehuda Katz’ announcement of Amber.js this morning. I had been intrigued by SproutCore, but hadn’t really liked how big it felt. So, when Yehuda said “If you played with SproutCore and liked the concepts but felt like it was too heavy, give Amber a try”, I listened.

The following is mostly just notes of what I learned. It’s not at all complete, but it should get you up and running and get you something to play with quickly.

Getting it on your machine

Assuming that you have git, Ruby 1.9.2 and a recent version of bundler installed, this is pretty straightforward. So, use rvm use 1.9.2 or the rbenv equivalent if you need to. These commands should do it:

    git clone
    cd amber.js
    bundle install
    rake dist

This will create sproutcore.js and sproutcore.min.js in the dist directory.

Creating Hello World

Now that we’ve got the Javascript files, we can make a new project skeleton for a hello world app. We want to end up with an helloworld.html file where we put our HTML, and a javascripts directory where we put some JS files to include.

Read More

Speeding up Jekyll Generation

published Nov 18, 2011

One of the only complaints you’ll see out there about Jekyll is that when sites get bigger, it starts to slow down.

Luckily, this is easy to fix. Unfortunately, it’s apparently not obvious as you still see people complaining about it. Here’s my attempt at proselytizing for Jekyll :).

If you run jekyll --help, you’ll see that there’s a --limit_posts option. If you set this to 1, then you’ll only re-generate your most recent post when you save. This is usually exactly what you want. If you’re working on a slightly older post, then bump it up to 3 or 4.

Like this:

 jekyll --limit_posts 1

I’ve put this in a rake task

    namespace :jekyll do

      desc "start the jekyll server in auto mode"
      task :server, :num_posts do |t, args|
        num_posts = args[:num_posts]
        cmd = "jekyll --auto --server --pygments"
        cmd += " --limit_posts #{num_posts}" if num_posts
        puts "running #{cmd}"


So I can start Jekyll like this:

rake jekyll:server[1]

and only see the current post, and it’s blazing fast.

Read More

Opening up ports to your security group on EC2

published Nov 18, 2011

Say you have a cluster of EC2 instances that you want to be able to talk to each other, but you don’t want everyone in the world to be able to join in on the conversation. For example, I was just setting up a typical cluster of servers:

  • A rails app server
  • A DB server
  • A daemon server
  • A DB slave

I want all of these servers to be able to talk to each other over port 3306 (the MySQL port), but I don’t want the whole world to be able to connect over port 3306.

You need two things:

  1. A security group
  2. Your EC2 user id.

Assuming you have your ec2 command line tools set up already, here’s how you would do it. This will create a group called yoursecuritygroup with ports 22 (ssh), 80 (http) and 443 (https) open to the world, but with all other ports only open to other computers in the same security group.

$> ec2-create-group --description "yoursecuritygroup production" yoursecuritygroup
$> ec2-authorize yoursecuritygroup -p 22
$> ec2-authorize yoursecuritygroup -p 80
$> ec2-authorize yoursecuritygroup -p 443
$> ec2-authorize yoursecuritygroup -o yoursecuritygroup -u 1234-1234-1234

You need to add your user id here in place of 1234-1234-1234. You can find this by going to and scrolling to the bottom. You want your AWS Account ID.

Now when you spin up your instances, make sure to start them in the yoursecuritygroup group using the --group argument:

ec2-run-instances --key your-key --group yoursecuritygroup --block-device-mapping /dev/sda1=:100:false --instance-initiated-shutdown-behavior stop --disable-api-termination --instance-type m1.small  ami-a7f539ce

And you should be all set.

Read More