Probabilistic M2M Relationships Using Bloom Filters

“Using a junction table for a sparse or small data set (where there are not many associations between movies and people) gives acceptable space and time consumption properties. But for denser association matrices (which may grow over time), the upper bound on the size of the junction table is O(n(movies) * n(people)), and the upper bound on the time taken to join all three tables will be the square of that. So what optimizations and trade-offs can be made in such a situation? Well, we can use a bloom filter on each side of the M2M relationship and do away with the junction table altogether…”



Java Oddities

“There’s a famous lightening talk given by Gary Bernhardt about Javascript and Ruby oddities.

Condition Handling for Non-Lispers

“One of Common Lisp’s more advanced features is its condition handling system, which is a powerful generalisation of other languages’ exception handling systems. I first became aware of condition handling from Peter Seibel’s Practical Common Lisp, chapter 19. But if I’m honest I’ve only very recently understood what it meant; it seems to assume a higher proficiency with Lisp, and I find the S-expressive examples more of a hindrance than a help. Sorry, Lispers.

So instead I’m going to walk through condition handling, with a more thorough explanation of the rationale, and with pseudo-Python examples. (Though, to be clear, these concepts would work just as well in a static language as a dynamic one, as exceptions do.)…”

How often should we eat?

“There has been some recent interest, even in the mainstream media, in the practice of ‘intermittent fasting’. Essentially, this means going for extended periods of time without food. It comes in many different guises. Skipping of significantly delaying breakfast is one approach. Contracting the ‘window’ available for eating each day to, say, 6 or 8 hours is another approach. Still another is to alternate days of no food or very limited intake with days during which eating is unrestricted…”

Heroku Isn’t for Idiots

“At its core, Heroku is just a simple unix platform; specifically, Ubuntu 10.04 LTS…”

“The entire Heroku platform is really nothing more than small Ubuntu virtual server instances that can be spun up and down on demand. Each instance (Heroku calls them dynos), has:
– 512MB of RAM, 1GB of swap. Total = 1.5GB RAM.
– 4 CPU cores (Intel Xeon X5550 @ 2.67GHz).
– Isolated execution. Anything you store on your dyno will be isolated from all other dynos. A chroot jail environment. This means that you are completely locked down to one directory tree, with no write access to system files…”

What 10gen nailed with MongoDB


Depending on which database you go with, you’ll make trade-offs on different sides of the CAP theorem, query patterns, and architecture. But regardless of whether love or hate MongoDB, it’s the choice that has enjoyed the most “overnight” success.

If you’re looking for lessons in building a developer-focused product, you should look no further than 10gen’s decisions with MongoDB. They demonstrate some of the best ways to build a community around a product and make developers love it…”