Introducing the Genius API!

At Genius we rise and shine driven by an ambitious mission: to annotate the world. 

We’re powered by an incredibly insightful, funny, and passionate community annotating millions of texts both on our site and now elsewhere on the Internet, thanks to our new Genius Beta tool. Whether we’re debating a reference on the new A$AP Rocky album or annotating Shakespeare’s Hamlet line by line, the vibe of Genius is one of playful yet sharp collective exchange that feels like a conversation among friends. 

It’s exactly in this spirit of collaboration that we make a big announcement: 

We’ve released the first public Genius API. 

We’re incredibly excited about this. There are four primary — and undeniably Genius — things you can do with the Genius API:

1. Create, Manage & View Annotations — Add, edit, and view annotations on any piece of text on the Internet, or on any song hosted on

2. Upvote & Downvote Annotations — Vote on annotations and earn Genius IQ in the process. 

3. Go Behind Your Favorite Artists & Songs — Build products that bring Genius’s millions of lyrics-based annotations to life. 

4. Search Our Musical Metadata — Dive into Genius’s rich library of musical metadata about artists, albums, and tracks to help power interactive experiences through any connected app or service. 

We’ve seen how easily Genius can be integrated with reading tools like Instapaper — which we’re proud to announce as an early release partner — in a smart and instantly shareable way. We truly can’t wait to interact with other platforms and apps… especially the ones that have yet to be created. 

If you’re interested in integrating your app, site, or service with the new Genius API, sign up here for more information. 

We’re excited to see what you all build along with us. 

— John Crepezzi (@john), engineer at Genius 

Posted on June 5, 2015 .

PSA: Internet Explorer requires all four arguments to document.createTreeWalker

If you, like me, typically use the Mozilla Developer Network documentation as the source of truth for the browser JavaScript interface, you may be forgiven for assuming that only the first argument to document.createTreeWalker is required. As it turns out, Internet Explorer requires all four arguments to be passed explicitly. For a cross-browser-friendly tree walker with the defaults, create it like this:

document.createTreeWalker(someElement, NodeFilter.SHOW_ALL, null, false);

IE's implementation is consistent with DOM Level 2, which specifies four arguments, all of them required. Mozilla's is consistent with the DOM Living Standard, which specifies three arguments, only the first of which is required (Mozilla still allows the fourth argument, but it's marked obsolete).

Posted on April 6, 2015 .

Installing CharlockHolmes on Heroku cedar-14

CharlockHolmes is a useful library for detecting the character encoding of strings of unknown provenance. It's both accurate and fast, thanks to its use of icu4c, a popular C library for unicode operations. Unfortunately, the native dependency makes installation on Heroku less than elementary.

The good news is that there's a nicely written blog post that takes you through exactly how to get CharlockHolmes to build. The bad news is that a few things have changed since the post was written, so it doesn't work out of the box; worse, it wasn't terribly obvious (at least to me) how to fix the problems.

But, having spent the afternoon on the problem, I finally got ol' Charlock to build on our cedar-14 app. Since most of the post is still entirely relevant, rather than rehashing it here, I've annotated the original post with updates. Enjoy!

Posted on March 25, 2015 .