David Cramer's Blog

Mocking Python Requests with Responses

My main project at Dropbox has been a new automated build system (we call it Changes), mostly focused on code quality. Right now it's a very thick layer on top of Jenkins, which means we do a significant amount of HTTP requests between the two. I'm also a pretty lazy developer, and I hate testing my code (manually, at least). This left us with a pretty tricky problem in Python: reasonable HTTP mocks.

Read more

Choosing Angular.js

It's been almost a year since I joined Dropbox. In that time I've been almost entirely focused on our automated build system (we dubbed it Changes). Early on I made the decision to use Angular.js for the project. I had the hopes that it would make it easy to make a real-time frontend without all the hassle that you'd have to go through for something like Backbone.

Read more

Scaling SQL with Redis

I love Redis. It's one of those technologies that is so obvious it makes you wonder why it took so long for someone to build it. Predictable, performant, and adapatable, it's something I've come to use more and more over the last few years. It's also no secret that Sentry is run primarily on PostgreSQL (though it now also relies on a number of other technologies).

Read more

On Pull Requests

A recent conversation came up on Twitter that sparked some discussion about GitHub Pull Requests and code review.

Read more

Sentry on Riak

Over the course of getsentry.com, one thing has become abundantly clear: you can never have too much disk space. In the 20 months it's been running, we've doubled our disk consumption six times. This may not sound like a big deal, but we've always tried to be tight on expenses, and it gets even more complicated when this is your primary database cluster.

Read more

The Business of Sentry

Two weeks ago I attended EuroPython. It's one of my favorite events of the year (likely because of the amazing venue it's been at for the last three of those). This year I gave a talk on how we operate Sentry, titled "Open Source as a Business". It goes into details on how we operate Sentry (from the business perspective) and some of the challenges (as well as lessons) we've faced with it.

Read more

You Should Be Using Nginx + UWSGI

After lots of experimentation (between disqus.com and getsentry.com), I'm content with saying that uwsgi should be the standard in the Python world. Combine it with nginx and you're able to get a lot of (relative) performance out of your threaded (or not) Python web application.

Read more