Jazzercize to Fit

OK, admittedly not the best project name for my MHD2014 Boston hack.

I was inspired by the video that broke a few days previously - someone took Taylor Swift's "Shake it Off" and synchronized it to an 80s Aerobic video.

There have been multiple takedown-reposts of the video, so I'm not going to bother to try and link directly to it. The original poster did some nice editing of the video, and it worked really well.

I used the Echonest Remix tools to analyze the original audio from the video (~75bpm) and the Taylor Swift song (~160bpm). The audio replacement worked because the new song's tempo was an even multiple of the source audio.

That got me thinking about matching songs and videos that did not have matching tempos. By using ffmpeg to stretch or shrink the video, this is possible.

In this case, I matched Mika's "Origin of Love" with the original Aerobics video:

"Origin of Love" had a lower BPM than the original video soundtrack, so my script originally slowed down the video. I added a parameter that allowed me to run the BPM at a multiple -- this version matches the video to 2x the song's BPM.

This script works with any source video, not just aerobics programs from the 80s. My first try was to match a different song to the Taylor Swift video. I did pull the audio from the Aerobics track and try that, but it is more fun with Coldplay's "Sky Full of Stars":

I had a lot of fun on Sunday morning trying to find interesting combinations. The Echo Nest crew suggested I try matching something to a Fatboy Slim video. Here's The Five Stairsteps o-o-h Child matched up with the video for Fatboy Slim's Weapon of Choice:

Given that Iggy Azalea's Fancy was a pretty popular song in demos this year, it made sense to try that. I matched it with Starland Vocal Band's Afternoon Delight:

The tool can take any video as input, but I only expect it to work well with video that's strongly defined by a beat. Naturally, music videos work great, but exercise and athletic videos also work really well.

Take, for example synchronized swimming (the video is from the Russian synchronized swim team, a pre-Olympics event). I originally paired this with Beyoncé's "Single Ladies", but am showing it with Bob Dylan's "Tangled up in Blue" here:

I had a great weekend. It was a ton of fun hanging out with the other participants and seeing their awesome hacks on Sunday.

If you are interested, the code's available on github.

NHaD 200 Turns

I like to do a project every fall. This year, I tied together a lot of threads I had been thinking about, and with help from Paul and Will, launched the Nethack-a-Day site.

The idea was to take one action or turn a day, and see how things played out. To keep things interesting, Paul signed up to write some creative 'flavor' text along with the game turns.

Now, exactly six months later, we've reached 200 game turns. Progress has been even slower than I imagined. Cody, our hero, has only explored five rooms, and is still on the first floor of the dungeon.

Cody's Movement Direction for the first 200 Turns

Cody's Movement Direction for the first 200 Turns

We don't have a huge following, but that's really not the point, and those who have taken an interest seem to enjoy what we're doing.

Keith Crescenzi joked that it would take a long time to finish a game. I ran the numbers. NetHackWiki calls an ascension that takes less than 20k turns a 'speed ascension', and I'd consider a typical run to fall in the 60k turns range. While I expect that over time, the turn-to-day ratio will get higher, the numbers are daunting:

Time-to-Ascend based on info from NetHackWiki (and current turn per day ratio)

Time-to-Ascend based on info from NetHackWiki (and current turn per day ratio)

This has gotten me thinking a lot more about the hardware I'm using to run the NetHack games.

I did not set the game up initially on a VM or take other steps to make it easier to continue this work for 50 years or more. It seems like NetHack savegames are not directly portable between machines; I'm going to have to do some more research into this to see what is possible.

Through these 200 turns, I've written around 4,000 words in service of the tip files, and Paul has written roughly 8,000 words of story.

So far, so good.

Music Hack Day Boston Interviews

This year, Zoe joined me for the first half of Music Hack Day Boston.

We had a lot of fun. One of the things she wanted to do at the event was practice her interviewing skills.

Zoe interviews Echo Nest staff at Music Hack Day Boston

Zoe interviews Echo Nest staff at Music Hack Day Boston

She had a great time speaking with the hackers, and everyone was very patient and friendly.

Here is the edited-down audio from this recording session.

Monospace in iOS Safari

Back in 2008, Dr. Drang wrote about how Monospace Characters in iOS were not actually monospaced. The situation has improved since then.

Today, drawing the same characters in a <pre> or <code> block works just fine.

Screenshot from iOS 7.0.4 Safari

...with an important exception. Using certain unicode "line drawing" characters in a <pre> or <code> block still, maddeningly, does not appear to be monospaced.

Here's an example of line drawing, which should look good on a desktop browser:


When I previewed my line drawings on iOS, I couldn't get them to look right.

After searching the web I did find a little help.

Courier New appears to do a much better job of handling extended characters, and by explicitly requesting "Courier New" in your stylesheet, your text will render correctly. Here's a demonstration:

Screenshot from iOS 7.0.4 Safari

HTML for the above page is on Github.

If you are having trouble with extended characters rendering as monospaced in a <pre> or <code> block, make sure you are using "Courier New" rather than Courier.


We had an unexpected visitor in our backyard this evening. I was walking out to check the mail and heard a screech and saw the flutter of wings.

I popped inside the house to get Z and we started breaking through the snow in the backyard, looking up in the trees. We were both startled to see a large hawk, almost within arms reach of us!

We admired the bird for a while, and then I sent Z in to get a coat and grabbed my camera. Happily, the bird decided to hang around for a bit longer (although on a higher branch).

The photos aren't amazing, but I did get a few passable ones - mostly from the same angle, so I'll spare you the repetition. The hawk had 'treed' a few squirrels in an adjacent pine. They were making crying noises, and understandably, were both scared witless.

The bird eventually got bored of my picture taking and decided to fly away, squirrel-less.

Christmas App

Last year, Jim and I used the Rovi Data API to build an app that lists all Christmas albums in the AMG database.

Songs (by frequency on Albums)

I put a fresh coat of paint on the site and re-launched it at christmas.cloudapp.net. The site was only up in December 2012. Now that the holidays are over, I have pulled it down. As usual, the site was built on Python/Flask, but this time I used an Azure VM as the host.

Most Prolific Artists (Ranked by # of Tracks on Albums)

It allows you to sort the most popular songs, most prolific artists, and find songs by genre or subgenre (there are 25 Polka albums, and 33 Disco records - don't miss Christmas In The Stars.

The images above are some tag clouds I built from the data - made with the excellent Wordle. I did the design/styling on the actual site. It's... less polished. Keep an eye open for the site next year during the holidays!