The End of Internet Radio Stations?

ClouwdNine

For those of you that don’t know together with some other heads I run things for clouwdnine.com. Our website was recently attacked, presumably because of the availability of Low Orbit Ion Cannon or similar simple tools for ddos-attacks. While the attack in itself is not that much of an issue, and can be mitigated, the consequences for us and maybe radio stations as a whole is a bit upsetting.

ClouwdNine is like several other radio stations, managed by a small team of people who are mainly making sure that there is infrastructure, DJs streaming and some communication on social media. In my opinion we are doing a good job, steadily growing our following, organizing sound clashes (both internal and against FKOF), and hosting some bigger names DJs (looking at you Fill Spectre). We even had a small introduction to promoting with a night in Dalston.

All of this is mainly costing us manpower, making sure everything runs the way it should. When it comes to our other resources, we run very basic and cheap servers, which is also our main vulnerability. Just one icecast server can be taken down easily and all of a sudden we are not functioning anymore.

What are our alternatives?

In order to really be safe from these types of attacks you need the resources of social streaming service like a mixlr or chew.tv. The thing is, we don’t want to move to social streaming. We are not a bunch of individuals, we are a collective that has a common goal of sharing our view on music with those who want to know. The radio station is our means to that end. And now it shows that our means are rather vulnerable to attacks.

We did find a way to increase our robustness. We moved to several smaller, cheaper servers. We moved our webspace to a host that offers ddos-protection. And most importantly, subsource magazine is helping us out with streaming through a more protected icecast server, for which we are very grateful. However, getting all of this up and running has spread us out rather thin. We’re still in the process of finetuning all of our systems and trying to get grip on how our new software deals with the software our DJs use to connect to us. But if all goes well we should be up and running again in the coming few days.

All in the same boat…

The painful thing is that we are not the only station under attack. As a sub.fm regular listener I found out that they were having some issues as well. We received accusations from another radio station of attacking them. Rumor has it that even the big rinse.fm got attacked. And to be honest, it’s a sad thing, if radio stations have to struggle to stay alive. While I do believe that social streaming is a nice way forward, especially for the individuals, there is value in a curated radio station. Internet radio stations provide new, less popular DJs to band together and get some exposure together. And if a radio station does have bigger name DJs, the less popular DJs benefit from this tremendously. All the while the listener benefits from curated, quality controlled content.

What I would love to see is more collaboration between radio stations. Everyone is dealing with the same challenges, trying to combine a streaming service, some social media scripts, a web frontend and some chat functionality. There’s a lot of reinventing the wheel. The thing is, it doesn’t have to be that hard. Even though there’s a lot of different building blocks, once you have some servers, it’s a matter of installing and configuring a small number of software programs and you’re good to go. So in that light over the coming weeks I will be sharing all scripts we use (liquidsoap, python, php and custom javascript) in a public github for anyone that feels like having a look at how we’re running things under the bonnet. And of course I would love to get some input on how others are running their things.

Use metadata from input.harbor to populate now-playing in output.icecast

Since we moved servers for clouwdnine.com, I had some troubles with getting the “Now Playing” text right. Before, this was always populated with the Description or Name our DJs would enter in BUTT. This allowed us to inform visitors of the website to see who was playing, which we liked…

Sadly, I couldn’t find how to fix this, but after way too much time I managed to do this. Just storing it here for people who would like this.


meta = ref []

def update_title(m) =
  me = !meta
# log(json_of(m))
# log(json_of(me))
  if me["title"] != "" then
    title = me["title"]
    [("title","#{title} - LIVE")]
  else
    title = m["title"]
    [("title","#{title} - archive")]
  end
end

def djdisconnects() =
  meta := []
end

def djconnects(h) =
#  log(json_of(h))
  meta := [("title",h["ice-description"])]
end

live = input.harbor("/",port=8000,password="XXXX",icy=true,on_connect=djconnects, on_disconnect=djdisconnects)

radio = map_metadata(update_title,radio)