Bookopotamus: A Game Analytics Case Study

01 May
May 1, 2014

In December we released Bookopotamus for iOS and Android, a fun literary guessing game that uses Findaway World’s catalog of audiobooks. It plays a narrated quote from a book, and you see how fast you can identify the book you’re listening to.

I’m a big fan of using data to inform decisions, so I volunteered to take charge of the analytics for Bookopotamus. I’ve integrated analytics into projects before, but never for a game. This was an exciting opportunity to capture some really actionable data that could help us make the game even more engaging and fun.

Read more →

Cache-busting HTML Pages

17 Feb
February 17, 2014

I ran into a scenario twice this week where I pushed updates to a site and it was important that the changes were reflected immediately. Most of the time it isn’t a big deal if a change takes an hour or so before someone sees them without a forced refresh (Shift + Refresh). Indeed, according to the Apache Caching Guide, “The default expiry period for cached entities is one hour.” This time, I was making a change, and then sending out an email to all our subscribers linking directly to the change. I only got the go-ahead to push the change live about 5 minutes before the email was supposed to be sent. On a final test of the email blast, I noticed the link went to the old version; the changes weren’t being shown until after I refreshed a few times. Read more →

Using Bower + Grunt in existing python projects

07 Jan
January 7, 2014

When I set out to integrate Bower and Grunt into our current Python projects I wasn’t looking to upset the balance, but instead improve the process for front-end development. Integrating these tools allows us to lighten our repository by moving third party dependencies to Bower, along with giving us easier access to build tools like Require.js and Sass. Ultimately these tools give us the ability to deploy optimized assets without the need to check them into git and manage changes to built files across branches. Read more →

CSS background-size and background-position

18 Dec
December 18, 2013

It feels like I come back to this awesome Pen at least once a month, so I wanted to share. It’s a great way to see how the different properties for background-size and background-position affect the image. At first, I went here to figure out which option it was that I wanted, now I use it to quickly illustrate the differences to others. Enjoy!

Default javascript object sorting across browsers

01 Nov
November 1, 2013

Today I was presented with puzzling issue that I had never encountered before. When accessing an item from a javascript object using underscore’s _.first() method I was getting two different items in Chrome and Firefox.

My object is an object with a string keys. The key is a numeric string (’01234′ ’12345′ etc) because javascript will trim off the leading zero if converted to a number.

Read more →


20 Jun
June 20, 2013

Recently, a co-worker commented that it would be nice if I had a configuration file. This individual suggested a change to my configuration file that would result in more detailed output when questioned about project status would be nice.  An idea that sounded really intriguing! Fortunately for me, I’m no robot. I was configured by my parents years ago. That said, here is my current configuration file…
Read more →

Edges, Corners, and Malformed Pickles

28 May
May 28, 2013


A recent blog post here mentioned the difficulty that edge cases present. While we sometimes use ‘edge case’ to mean ‘rare condition’; if you want to be technical (and I do) specifically it refers to a case that occurs at an extreme of an operating parameter (a stereo speaker that fails at maximum volume).

In Jason’s example, the ‘edge’ is on the minimum side; if there’s no record in one system, the process stopped even though the other system could possibly have records in it. By analogy a ‘corner case’ is when more than one parameter is near it’s ‘edge’; two edges meet, and make a corner. (Say, when that same speaker only fails at maximum volume AND when in an environment of high humidity.) Read more →

Extending NetSuite with the SuiteScript API

09 May
May 9, 2013

SuiteScript is a JavaScript-based API that gives developers the ability to extend NetSuite beyond the capabilities provided through SuiteBuilder point-and-click customization.

The majority of NetSuite forms, records, customization objects and their event/trigger points are programmatically accessible through SuiteScript. What you decide to do with SuiteScript depends on which part of NetSuite you are trying to extend, search, or process.

What can I do with the SuiteScript API?

Read more →

A Crack in the Armor

02 May
May 2, 2013

It’s been almost two months now since we went live with our first Magento Commerce site.

Over all, I think it has been a real success story. There have been a few bugs, and some customer inquiries, but not as many as I expect with the first implementation of a new technology.
We have been more flexible in addressing problems and implementing solutions since the rollout, and that looks to continue.

However, I seem to have found the first major flaw with the Magento framework.

Read more →

Question Everything

29 Apr
April 29, 2013

If there’s one thing I’ve learned from all the conferences, talks, and books that I’ve read about designing user experiences, it’s this:

Design for your audience, not for yourself.

Sound simple? Nope. Designing for your audience means questioning everything, and it turns out that’s really hard.

Read more →

© Copyright 2017 Findaway. All rights reserved.