Oct 2014

Let’s Talk About Beacons

If you’ve been following the tech scene lately, you may have heard a thing or two about “Beacons”. What are Beacons?

Beacons are hardware devices emitting a unique signature that can be picked up by your smartphone. They are typically small and powered by coin-cell batteries, making them easy to stick almost anywhere.

What we call a Beacon today was originally invented and popularized by Apple way back in 2013 when they introduced the iBeacon API. In fact, referring to these devices as just “Beacons” is a bit funny, considering no one was talking about Beacons before iBeacons existed. It’s a lot like discussing the “tablet market” back when the tablet market consisted entirely of iPads.

Read More

May 2013

Meridian Goes to Aruba: Why Wifi Networks are the Future of Location-Based Mobile

First thing’s first: I’m more than a little excited to announce that our plucky startup Meridian has a new home.


You may not have heard of Aruba Networks, but there’s a good chance you’re connected to one of their wireless access points right now. Their customers include the Facebook campus, Venetian resort and H&M retail, and they’re currently #2 in market share (after the behemoth Cisco).

So Meridian is a mobile software company, and Aruba is a wireless hardware manufacturer. How do we fit together?


Well for one thing, we have the same customers. Meridian helps enterprise locations like hospitals, stadiums, and retail stores create great mobile apps for their visitors. And Aruba helps these same locations provide their visitors with great Wifi connectivity.

But there’s more to it than that. We believe that intelligent wireless networks are the key to building awesome location-based mobile apps. Here’s why.

Read More

May 2013

Freeing Feeds: From Paid App to Open Source

Check out Feeds on Github, or Download it from the website.

About a year ago, I created Feeds to scratch an itch. I wanted a desktop app that would help me keep tabs on our team’s commits to Github. Designer Eric Grossnickle wanted a way to see his Dribbble activity without having to check the website every day.

So, we built a little app that lives in your Mac menubar and notifies you when things happen on your favorite sites. It provides your notification history, read/unread status, and popover content previews.


In building Feeds, we wanted something that other non-developers could use to stay up to date not only with Github, but also with other services people depend on like the CRM tool Highrise or the collaboration app Trello.

Thanks to Eric, Feeds is beautiful. It’s easy to use and supports a decent set of third-party sites, as well as supporting RSS/ATOM feeds directly.


But I think we can do better. In order to support more services and keep the existing ones up to date, we need the support of other developers who personally use Feeds.

So we decided that the best way to expand the services Feeds supports is to open it up to the community. Starting today, Feeds is now free for direct download from the official website.

The App Store version will be removed (existing customers will continue to receive support), and the code is now available on Github so that anyone can contribute fixes and add support for new services.

So how did we end up here?

Read More

Oct 2012

A lightweight XML parser for NodeJS/JavaScript

Check out xmldoc on Github or just npm install xmldoc.

Ever need to parse a bit of XML in NodeJS? If so, you may be quite confused by your options. You might initially find an (excellent) callback-based parser, but that results in code like this:

Hm, I’m getting deja vu.

Of course, there are plenty of other libraries that let you deal with the whole document in memory at once. Libxmljs is solid, but requires bindings to libxml2 which means you have to compile it. I wanted a “pure JavaScript” module for simplicity and ease of deployment.

Node-elementtree is pure JS and looks pretty great, but I wanted a “one file” solution.

So, long story short, I wrote one and it’s a single JS file and it suits my needs perfectly. It uses the awesome pure-JS XML parser sax behind the scenes to build up an easily-traversable object hierarchy.


You can use it in your Node.js app easily:

npm install xmldoc
var xmldoc = require('xmldoc');

Or just put it in a <script> tag and use it in the browser if you’d like. You can find examples for both cases in the repository.

As usual, you probably shouldn’t be loading large XML documents with this class if you are tight on memory. But if you’re just parsing little SOAP request snippets like I am, you’ll find it’s much easier to work with than stream-based parsers.

Go try it out and let me know what you think!

Aug 2012

A Custom Callout View for iOS

Check out SMCalloutView on Github.

There’s a great UI widget that’s been on iOS since day one:

Ever wonder what that black pointy bubble is exactly? It’s kind of a strange beast. The way it “bounces” when opening is an animation that I believe is unique across the entire iOS platform. It kind of grows out from the tip of the arrow then springs back like a UIAlertView. I still find it fun and satisfying to watch.

So when we were creating our indoor mapping UI for Meridian, I naturally wanted to use this widget. Unfortunately, it’s considered a private API. Bummer!

There are some existing 3rd-party controls out there that mimic this one, but they aren’t a perfect replica. And I demand perfection! So I made my own version, and dubbed it SMCalloutView.

Read More

Jun 2012

How to create a new file in the editors I use every day.

ME Eclipse, I’d like to do something with this folder.

ECLIPSE You can do lots of things with this folder!

ME Let’s create something new in here.

ECLIPSE There’s all sorts of new things we could make together! How about a Java Class?

Read More

Feb 2012


Here’s an app I whipped up with the help of designer Eric Grossnickle. It has one purpose: to live in your Mac menubar and notify you when things happen on your favorite sites. That’s pretty much it.

You also get a little menubar app with your notification history, read/unread status, and popover content previews (Lion only).

It currently supports Dribbble, Basecamp, Highrise, Github, Beanstalk, Trello, and UserVoice.

If you would like us to support a particular service, cast a vote in our UserVoice forum!

Oct 2011

Why Indoor Navigation is so Hard

I wrote a piece for Radar about our company’s approach to indoor navigation with mobile apps.

Remember the days before you could pull your smartphone out of your pocket and get instant directions from your current location to anywhere in the world? It’s kind of foggy for me, too.

Read More