First Crack 117. Paul & Scott from 45th Parallel Spirits

A couple years back Scott Davis and Paul Werni founded 45th Parallel Spirits, a distillery in New Richmond, WI – just a quick 45 minute drive from northeast Minneapolis. While there are number of craft brewers in the region, 45th Parallel is the only still I know of. Paul, Scott, and I talk about the distilling process and the benefits of sourcing locally.

[33 min].

Left in Leipzig

“A wall calendar showed August 1988 and an empty bottle of Vita Cola, Marella margarine, Juwel cigarettes and a bottle of Kristall vodka were in the kitchen.”

Reminds me of an art installation I saw during my time in Germany.

Imagine a room.

With a single, wall-sized, framed painting leaning against the wall.

Hanging tools littering the floor.

As I pondered this room, a woman approached me, and gave me the background.

In Soviet Russia, it was common for workers to just stop. Mid-task. And walk away, onto another task. Different orders.

Also, if you haven’t seen it, Goodbye Lenin is quite enjoyable.

First Crack 116. Garrick Talks About the Legends of Paul Bunyan

It’s a new year, with a new president. An ideal time to clear the ground for a new America.

To start the chopping, Garrick reviews Legends of Paul Bunyan by Harold W. Felton touching on a boyhood trip to Paul Bunyan Land and the story of Sport the Reversible Dog.

[9 min].

First Crack 115. Chad Gillard on Aebleskivers

Chad Gillard lives a few houses down from me – and little did I know that his side project is making and selling tasty, tasty Danish apple treats under the Aunt Else’s Organic Aebleskiver brand (Aunt Elsies on Twitter)

It started with a goal so many Minnesotans have: sell food at the Minnesota State Fair.

While he’s still on his way to reaching that goal, we cover the conflicting aebleskiver recipes and the local food producers he’s met while selling at farmers markets and town festivals.

[35 min].

How To Cache Highly Dynamic Data in Rails with Memcache – Part 2

In my part 1, I laid out my initial approach on caching in Cullect.

It had some obvious deficiencies;

  1. This approach really only sped up the latest 20 (or so items). Fine if those items don’t change frequently (i.e. /important vs /latest) or you only want the first 20 items (not the second 20),
  2. The hardest, most expensive database queries weren’t being cached effectively. (um, yes that’s kinda the purpose).

I just launched a second approach. It dramatically simplified, cache key (6 attributes down from 10) and rather than caching entire the items in that key, I just stored the pointer object to them.

Unfortunately, even the collection of pointer objects was too big to store in the cache, so I tried a combination of putting a LIMIT on the database query and trying to store 20 items a time in a different cache object.
This second approach had the additional problem of continually presenting hidden/removed items ( there’s 2 layers of caching that need to be updated).

Neither was a satisfactory performance improvement.

I’ve just launched a solution I’m pretty happy with and seems to be working (the cache store is updating as I write this).

Each Cullect.com reading list has 4 primary caches – important, latest, recommended, hidden – with a variants for filters in keyword searches. Each of these primary caches is a string containing the IDs of all the items in that view. Not the items themselves, or any derivative objects – both of those take up too much space.

When items are hidden, they’re removed from the appropriate cache strings as well.

Murphy willing, there won’t be a part 3. 😉

1. Storing the items in the cache as objects