Posts tagged with #radio

Dev Stuff

Long ago I wrote an open source ember addon for New York Public Radio called ember-hifi that powered their web audio applications, like wnyc.org, wqxr.org, newsounds.org, wnycstudios.org. It was used and maintained consistently for years and years, and as ember evolved it lagged behind a bit. So I started a branch to bring it up to modern Ember standards, and really started thinking about it from the outside in, to try and lower the learning curve.

I find it tremendously useful to start with a interactive documentation site when building something like this, as the usability problems are easy to spot early. And building this one was no different. Naming things is the hardest part, and that stuff really jumps out at you when you’re trying to explain how to use it to someone else.

After all the updates I did to the project, the changes got too big to feasibly do a mega-pull request to NYPR as their apps were still running legacy version of Ember and couldn’t benefit anyhow. So I did a hard fork, renamed it and launched it.

Dev Stuff

I just updated a gem I wrote in 2011 (which the FCC actually starred and forked, lol) to use their new API, which apparently knows about caching now. It doesn’t provide all the same data as the old one did, which is kinda weird. No “signal strength”? Why? So the gem can still query the old, horrifically slow and crusty API if you want it to.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
station = FCC::Station.find(:fm, "KOOP")

if station.exists? && station.licensed?
  #Basic attributes, available quickly because the FCC actually caches these in a CDN: 
  station.id #=> 65320
  station.status #=> LICENSED
  station.rf_channel #=> 219
  station.license_expiration_date #=> "08/01/2021"
  station.facility_type #=> ED
  station.frequency #=> 91.7 
  station.contact #=> <struct FCC::Station::Contact>
  station.owner #=> <struct FCC::Station::Contact>
  station.community #=> <struct FCC::Station::Community city="HORNSBY", state="TX">

  # Extended attributes, takes several seconds to load initially because the FCC is running this endpoint on a 1960s era mainframe operated by trained hamsters. 
  station.station_class #=> A
  station.signal_strength #=> 3.0 kW
  station.antenna_type #=> ND
  station.effective_radiated_power #=> 3.0 kW
  station.haat_horizontal #=> 26.0
  station.haat_vertical #=> 26.0
  station.latitude #=> "30.266861111111112"
  station.longitude #=> "-97.67444444444445"
  station.file_number #=> BLED-19950103KA
end
Blog

I went to a programming meetup the other night, and they were running a contest for OSCON tickets—“tweet as us and mention OSCON and we’ll randomly select someone at the end of the night who will win a badge to the OSCON conference”. I hadn’t even heard of OSCON, but apparently it was an open source developers conference right here in Austin TX. ANNND the tickets were pretty expensive. “A valuable prize”, I thought.

But I hate whoring my twitter feed out, tweeting at things and mentioning brands. I follow people that have no problem with it at all, and maybe I should just relax. But nah, I don’t do that.

So I wanted to make the tweet funny enough to stand alone, and spent the duration of one of the less interesting talks crafting this gem:

Turns out the whole "randomly selected" thing was misleading, and it was more like "we'll pick the one we like best." I got chosen, won the badge, and had to tell the audience how 9 year old Jeff called into the radio without hearing what the giveaway was, and then got on the air and found out he won a perm. True story.
Blog

There was a pretty cool reddit story the other day about an internet stranger casually solving a huge song mystery for another redditor. After a year of the mystery lingering, one day a stranger sent a link to the song, and it blew the original searcher’s mind.

Oh my god. Oh my fucking god. I’m actually freaking out.

Who are you? How did you know? WHAT IS GOING ON?

Thank you so much. But also, WHAT THE HELL IS GOING ON

And the kind stranger just responded with:

Shh bby is ok

And, just like that, a meme is born. The internet is amazing, sometimes.

But I can totally relate to the poster’s original excitement. Sometimes a song just gets under your skin, and you’ll do anything to find it. Before the modern internet, finally locating a song felt just as satisfying, and I remember distinctly trying to hunt down the following songs in the following ways, and feeling just as excited once each of them was in my possession.

###1989

“Girl I’m Gonna Miss You”, by Milli Vanilli. I’d hear this on the radio, and the melody line in the chorus (1m 24s) rocked my little 8 year old heart so much I just had to find the geniuses who created it.

I called up the local radio station and hummed the melody on the phone in order to figure out what it was. I was gifted the tape by a family friend shortly afterwards.

(And listen, I realized the error in my ways regarding Milli Vanilli not much later. We all did. We all did.)

###1997

“Incense and Peppermints” by The Strawberry Alarm Clock. I heard this song in Austin Powers, and it blew my teenaged mind. I wanted more. More Strawberry Alarm Clock.

I searched far and wide for a recording of this song during Christmas break of ‘97, and had to go up to the Sam Goody in The Mall Of America in order to finally find the truth: that there was no available back catalog of Strawberry Alarm Clock, that they were basically a one hit wonder, and I’d have to settle for the Austin Power’s soundtrack. Which I did.

###1998

I heard this song every so often on the radio for months and months and months, and it would haunt me. I wanted it. But every time, the DJ would say nothing about it. I delayed plans and waited patiently in my Mom’s 1995 Dodge Neon for a song set to end, hoping to get a clue about the song that had been captivating me.

I tried to savor every second the song was playing, knowing it might be weeks before hearing it again. At night after getting back on the 1998 internet in my parent’s basement, I’d Altavista the shit out of the lyrics that I scribbled down earlier in my pocket-sized memo pad.

I don’t even remember exactly how I ended up finding the song, but I do remember that when I finally did locate the MP3, it was named incorrectly. I went around for years afterwards thinking the song was called something else, but I was also thrilled to have it.

###2015

Yesterday, I held up my phone up for a few seconds and it identified a Barbara Lynn song from 1963 that was playing on the radio.

I was satisfied.

Dev Stuff

The KUTX mobile experience was in a sorry state. It’s so bare-bones, it doesn’t even feel minimal; it feels broken. After a friend pointed out that the iPhone app was built using Cordova and Angular, and how easy it was to extract that source code from the .ipa file, I got to work. With KUTX’s first birthday coming up just around the corner, I figured a much improved iPhone app would be a great birthday gift.

Old app on the left, new app on the right, obviously.
Old app on the left, new app on the right, obviously.

Their playlist was freely available on their website and all loaded via javascript, so finding API urls was easy. Soon enough, I had the angular app loading up the current playlist.

Layout

I mimiced the aesthetic of their recently redesigned website, sticking with Futura for the font, but some changes had to be made with how data was being formatted.

The two primary questions we’re trying to answer with a radio playlist are “What’s currently playing?” and “What just played?”

The website shows this data, but the way it’s displayed is problematic. With the currently broadcasting show and the most recently updated playlist right next to each other, it seems like they’re connected. And when DJs update their playlists frequently, they are. But not all do. Paul Ray just don’t give a damn about online playlists when he’s spinning 45s from the 50s, so when Twine Time is playing, the playlist directly below it displays what played hours ago.

That ain't good. Paul Ray didn't play the Strokes. Believe me.
That ain't good. Paul Ray didn't play the Strokes. Believe me.

So to fix that in the mobile app, I grouped the tracks by show, and displayed them all linearly. If a show doesn’t have any playlist data, you still see the name of the show, and the times it played.

Album Art

The API they were using to pull down tracks had album art available—but not for all the tracks. When it’s available, it’s really nice to see, but when it’s not, we don’t want to leave a blank square.

So instead I used the first letter of the artist name as the album art. Still visually interesting enough to not look broken, until their APIs got better at providing album art.

For background art on the show listings, I used images from their website so that there wouldn’t be any problems with licensing rights.

Happy Birthday, KUTX

I figured giving them this functioning app would be easy—I just needed a contact at KUTX. I posted the app on the Austin sub-reddit where it got much interest, and for a few days it was #1. From some tips I got from that thread, I found out who the guy I needed to talk to was. So one morning I walked into KUTX, asked to speak with him, and gave him a demo, and talked about what I hoped to do—just give them all rights to the app.

Slam dunk, right?

Wrong. You would not believe how many layers of bureaucracy need navigating for a little app improvement like this to get through the university’s approval process. I learned the details in the hour chat we had, and to make a long story short, it couldn’t happen.

So now the source code sits unused on github, and is regularly used on my iPhone alone, while still—many months later—the featureless KUTX-built app is still on the App Store, frustrating KUTX listeners everywhere.

Dev Stuff

Whenever I listen to 89.3 the Current, I hear a lot of great music I haven’t heard before, and want to hear again. Before this widget existed, I’d have to figure out what song was playing, and then manually add it to my list of songs to buy sometime.

Later, I’d go through the list and decide what to buy.

This widget makes this whole routine much, much easier. Hear a song you like? Click on the star icon, and it’ll get added to the back of the widget. When you’re ready to buy, click the arrow next to the song to buy it on iTunes, or Amazon (your choice)

Expand your playlist with a little less effort.