Victor Quinn

Software architect and Node.js expert. Specializing in scalable systems. Lover of craft beer. VP of Engineering @SocialRadar Building @LocationKit

Read this first

LocationKit: The Making of – Part 2

This is part 2 of a 2 part series, click here to check out part one.

Last time I discussed some background about how making the SocialRadar consumer app led us to develop a lot of the core technology we’ve baked into LocationKit – specifically around higher accuracy location and lower battery drain.

Here we’ll continue our journey into insights we’ve gained and built into LocationKit, our advanced location manager SDK, which is available for free to iOS and Android developers.

Contextual Location Data

While it’s great for LocationKit to provide higher accuracy location, it’s only the tip of the iceberg.

One of the things we discovered while building the SocialRadar app was that while a latitude/longitude can be useful, what we really cared about was contextual information about that location.

It’s nice to know that a user is currently at (38.904338837, -77.043243408), but unless...

Continue reading →

LocationKit: The Making of – Part 1

This is part 1 of a 2 part series, stay tuned for the second part!


SocialRadar’s free LocationKit SDK for iOS (and soon Android!) provides advanced location technology to offer developers higher accuracy location, lower battery drain, automatic venue recognition, and detailed location analytics.

LocationKit enables you to add enhanced location capabilities, and therefore personalized experiences, to your mobile applications without the need for location expertise.


app-phone-med-up.jpgThe SocialRadar consumer app provides real-time information on the people around you

While we were building the SocialRadar consumer application, we came across a series of problems with existing location technology.

In order to build our app, we needed phones to be able to provide a highly accurate location with low battery drain and had to discover and engineer some creative solutions in order to...

Continue reading →

Smart Polygons: Shaping a More Intelligent Location

While there are many great reasons to adopt LocationKit, our advanced location manager SDK, in your app, one of my favorites to discuss is our extensive Venue Database.

tl;dr We have put together what we think is the most extensive venue database for any location API on the market which we use to intelligently refine user location using LocationKit

Polygons, not points

The greatest difference between our database and the competition is that our database contains polygons for each address whereas most others use points to represent a location. What does that mean?

In a traditional setup, each venue is represented by a single “pin” which is often attempted to be the center of mass of a particular address or building. It would be a single latitude/longitude for that place.

For example, in the following screenshot from Google Maps, the “pin” for Crios near Dupont Circle in Washington...

Continue reading →

LocationKit Is Here

At SocialRadar we believe that location means much more than just a latitude/longitude, it means the ability for app developers to provide personalized experiences. We also think that it should be easy to harness. So we have built a simple platform for developers to incorporate advanced location services into their applications without prior location experience.

And today, I am excited to announce that technology – LocationKit – is available for download at no cost.

LocationKit is an advanced location manager that provides app developers with the first improved replacement for iOS location services. By using LocationKit, developers gain access to higher accuracy location, lower battery drain, automatic venue recognition and detailed location analytics. For an overview of all LocationKit has to offer, check out our website.

LKCroppedWe’ve had LocationKit in private beta for a few months now and...

Continue reading →

Writing “Getting Started with tmux”

I completed work on my first book, Getting Started with tmux, which was recently published!


This book, as its title would imply, is a getting started book for tmux, a command line program which can allow a single terminal to act as many. This book is targeted at anyone who is a developer, devops engineer, or other professional who spends any amount of time in a terminal.

I wanted to take some time and document the process so others thinking about doing the same can have an idea of what the process is like.

My blog post

Back in 2011, I was using GNU Screen (another terminal multiplexer program like tmux).

As I often do, I documented my process learning tmux in case it would be useful to anyone else and published it on my personal blog.

Between now and then often referred to it if I forgot how to do something with tmux.

Over the years it has been rather well trafficked and has...

Continue reading →

NGINX as a SPDY load balancer for Node.js


Recently we wanted to integrate SPDY into our stack at SocialRadar to make requests to our API a bit more speedy (hurr hurr). Particularly for multiple subsequent requests in rapid succession, avoiding that TCP handshake on every request would be quite nice.

Android has supported SPDY in its networking library for a little while and iOS added SPDY support in iOS 8 so we could get some nice performance boosts on our two most used platforms.

Previously, we had clients connecting via normal HTTPS on port 443 to an Elastic Load Balancer which would handle the SSL negotiation and proxy requests into our backend running Node.js over standard HTTP. This was working nicely for us and we didn’t have to handle any SSL certs in our Node.js codebase which was beneficial both for cleanliness and for performance.

However, when we wanted to enable SPDY, we discovered that

  1. AWS Elastic...

Continue reading →

Full text search with Bookshelf.js

I have a table with a MySQL full text index and wanted to search it with Bookshelf.js.
There is actually an open issue to add full text index support to Knex, the query building underlying Bookshelf, but it hasn’t been implemented yet.

Bookshelf has no inbuilt method for performing such a query but it actually ended up being rather simple.

Assuming you have a valid Bookshelf model configured already, for example:

var Customer = Bookshelf.model.extend({
    tableName: 'customers'

(lifted verbatim from the Bookshelf docs)

Let’s say the customer has a bio field on which you’d like to perform a full text search. You can do so with the following syntax:

var searchTerm = <code to build your search term>
var customer = new Customer()
    .query("whereRaw", "MATCH (bio) AGAINST(" + searchTerm + ")")

And that’s it! Full text search on the bio field.

One caveat...

Continue reading →

Desired: Oculus Rift as a monitor replacement

Just read Wired article Oculus Is Awesome for Games, But It’s the Future of Movies

I had an idea I haven’t been able to shake since I first used an Oculus:

I want an Oculus Rift instead of monitors for programming.

I want to arrive at work and be able to sit in a chair which has a keyboard and trackpad mounted on it (perfectly ergonomically oriented to suit my body of course) and to be able to spin 360 degrees and be encircled by two dozen virtual screens which I can see simply by rotating my chair and head just as I do now with my 3 screens in the real physical world.

Arguably I could dispense with physical motion entirely, but I think it’s still faster and easier to just turn my head or my chair to switch between buffers than any other method, for the same reason I find myself far more productive with two monitors or three than with just one (for now at least!). Sure I can use...

Continue reading →

JavaScript: Async Promise “while loop”

This is a solution to the situation where you have an asynchronous task you want to perform over and over again, in a non-blocking fashion, stopping when some condition is met.

To set the stage, I’ll be using the Bluebird Promise library, the best Promise library I’ve used.

First, we’ll construct the Promise function which will do the looping:

var Promise = require('bluebird');

var promiseWhile = function(condition, action) {
    var resolver = Promise.defer();

    var loop = function() {
        if (!condition()) return resolver.resolve();
        return Promise.cast(action())


    return resolver.promise;

It receives 2 arguments, both expected to be functions:

  1. condition - This is a predicate function which shall return true or false and indicate whether the end state has been...

Continue reading →

Great Programmer Font

I’ve been using Menlo for a few years now and before that it was Monaco.

But I’m always on the search for things that will make my setup better.

This new open source font, Cosmic Sans Neue Mono looks like it may be my new favorite.


It’s monospaced so it’s good for programming, but it feels a bit more playful and fun than either Menlo or Monaco.

Time will tell if it sticks, but I’m digging it thus far!

View →