Design, Develop and Distribute: Player FM at Google IO Developer Sandbox

It’s official: Player FM will be participating in the Developer Sandbox at Google IO 2014.

The IO Developer Sandbox showcases demos from a wide range of developers who have built applications based on technologies and products that are featured at I/O. We have been invited to demo our application and connect with I/O attendees developer-to-developer to answer questions and exchange ideas.

The conference theme is Design, Develop and Distribute, and we’re looking forward to sharing lessons and swapping war stories with developers about all of these activities. Here’s a quick overview on how we approach each of them — find us at IO or drop me a line to dive deeper on these.


The most enlightening thing about IT in the past 10 years has been design getting the recognition it deserves. Certainly, it’s about visual design that delights users, but much more than that, it’s about interactions, features, and concepts that make apps “just work”.

Player FM plays podcasts. That’s hardly a new concept, so why make a YAAP (yet another podcast player). Yes, design! The fundamental problem a podcast app must solve is “How do I listen to topics I care about?”. New Player FM users immediately choose favourite topics, even if they don’t know any individual shows, and they’re immediately listening to them. Meanwhile, the app syncs recent episodes for offline use, saving them the hassle of download management.

Notice I didn’t mention anything about colors, gradients, or round corners above. Visual design matters more than ever, but it’s the price of entry for a consumer-facing app. On Player FM’s Android app, we do spend a lot of time iterating on visual designs and sweating each pixel, but ultimately the big challenge is moving forward while balancing simplicity and control.


As a small operation, developer productivity and server efficiency matter a lot. Not only does it keep costs low, but it lets us learn from feedback and iterate quickly.

Continuous integration is one of the ways we achieve this on the server. Automated testing gives enough confidence to release several times a day. Server configuration management via Ansible (similar to Chef and Puppet) lets us scale and load-balance for better uptime. Leveraging open source and contributing back helps us add new features quickly. As for the API consumed by the mobile app, we take advantage of REST and HTTP to keep bandwidth and battery usage as low as possible.

Developing’s all about the detail, so there’s not much more to say in this short summary, but I’ll be happy to talk code at IO and might even open up a Vim session or two :).


Users experience Player FM on both Android and the web, and each has their own distribution strategy.

On Android, we make use of Play, receive valuable feedback, and are pleased to be able to comment and follow up on reviews. We also benefit from the private and staged rollouts which were announced at none other than Google IO last year. Oh and you should totally join our pioneers community for early access to features! Including the speed control that will be part of the imminent Player FM 2.0 release.

As for the web, that’s where Player FM initially launched. One of the goals was to make podcasting more accessible to a broader audience, people who have never considered installing a podcast app. Maybe people who’ve never installed any app at all. HTML5 provides a powerful platform for delivering an app-like experience without any installation process. And Chrome’s developer tools help to debug and improve the website. I’m currently working to improve the mobile web experience, and it’s amazing how much easier it is to do this now, compared to just a couple of years ago.

See you at IO

Google IO attendees work on many and varied applications, yet many face similar challenges and stand to benefit from similar solutions. Hopefully the above points give you a sense of how Player FM approaches design, development, and distribution, and we’re looking forward to sharing more about them at next month at IO. Visit the Sandbox page to learn more.

Feed quality improvements

After the recent upgrade (2 weekends ago), I’ve been able to start enhancing the server again. If I’ve done it right, you won’t notice the latest changes because they are more about Doing It Right than adding any new features.

If you’re interested in the specific changes:

  • Most importantly, old episodes are updated if the publisher makes a change. This sounds like it should have been easy to do and it was if I ignored efficiency. The reason it wasn’t done before was I was worried small changes would bust caching and cause a lot of unnecessary re-fetching. That’s been addressed here, so the whole process is efficient.
  • Changes to the main series data (such as author info) is immediately propagated to containing channels. Before it would only propagate when an episode update triggered it.
  • No more duplicate episodes! This bug previously happened in a condition when the same series is fetched twice, which in itself was rare and wouldn’t have been much of a problem in itself. The main problem was the old episodes would never go away after that one rare occurrence. Now duplicates are purged at the end of each fetch.
  • Images are now drawn from sources other than the iTunes image declaration. Some feeds include images in a separate tag that would be similar to how a normal blog would provide images. Those are now indexed in the event iTunes image isn’t included. Thanks to Lonely Bob for pointing out some feeds like this.

I’ve also begun work on an open-source project to help with processing grunt-work like this.

Get your cast on: Player FM 1.5 does Chromecast

Chromecast Podcasts

Bit exciting to announce Chromecast support for Player FM’s Android app.

Go yoink Player FM now from Play and get casting

As I mentioned the other day, I was skeptical about how much value TV playback has for audio podcasts, but there was substantial demand and after testing this for several weeks, it gets solid usage. We were going to make it happen after 2.0, but given demand, we decided to get this into a 1.5 release.

While Chromecast today works with TVs, it’s not hard to imagine a future of Chromecast-enabled speakers and other appliances. You can also imagine Chromecast being a convenient standard for airplane screens, treadmills, cars, and so on. I’m glad Player FM is able to take a first step in that direction.

Image via PlaceIt

New Channels on Player FM

If you visit Player FM today, you’ll find a number of enhancements to the channel organisation. As always, channel organisation updates are motivated by helping users find shows on their favorite topics. Better organisation also means a simpler out-of-the-box experience when the app suggests topics to new users. Not all shows are discovered via the catalogue of course. Many users will search and there are increasingly intelligent recommendations available. But for the times when users do peruse the catalogue, it should be the most logical organisation possible.

So here are the updates …

Goodbye Lifestyle. Hello everyone.

First up, I’m excited to say we’ve replaced the “Lifestyle” channel with three new – and more focused – channels:

  • True Stories Fans of shows like This American Life and The Moth will be familiar with the fascination of everyday stories presented the right way. Here you’ll find a range of shows in that ilk.
  • Factoids There’s more than a few podcast listeners who enjoy learning new things every day. And fortunately there’s more than a few podcasts catering to their needs with daily explainers and amazing trivia. As I write this, you can learn about chocolate chips, tattoos, and the electric car from the most recent episodes! Factoids is like Reddit’s Today I Learned for your ears.
  • Pop Culture Pop culture’s a hard topic to define neatly, but you know it when you hear it. Shows here cover the memes of the day and how people reacted to them. Whether they be movies, TV shows, or headline news items.

Lifestyle was always an ambiguous mash of these and it made a lot of sense to separate them, as you can tell from the descriptions. Behind the scenes, Lifestyle has simply been renamed to True Stories, which means people previously following Lifestyle are now following True Stories.

A community channel: LGBT

Next, another addition to Society and Culture is a new LGBT channel featuring podcasts for the Lesbian, Gay, Bisexual, and Transgender communities. Podcasts are a great medium for perspectives and news relevant to specific communities. I also recognise LGBT itself is a broad brush and we may well build channels for specific communities within it, and we’re likely to be considering channels for other communities too in the future.

Language Learners, Konnichiwa!

Several new language learning channels are now available:

These join the existing collection of English, French, Italian, Spanish, Portuguese, Chinese, and Korean. With special thanks to Jon for prodding me to publish Japanese, which had been in draft mode.

Some departures

We’ve removed the various “Featured in [Category]” channels as they were an experiment that hasn’t panned out so far. I’m certainly interested in more effective ways to recommend the best shows in each category, but I think we can do it in a better way than just picking a few popular series. To be continued.

Business channel is also gone from the catalogue. There’s already Business News, MBA, Trading, Entrepreneur and a bunch of other business related channels. Business was too general, and people tend not to be interested in “general business” in the same way they would be interested in “general science” for example. Followers of Business are still following Business and we’ll keep it updated for now, but longer term it will be flagged as discontinued.

Category Renames

Some categories and subcategories have been renamed to avoid confusion. For example, we previously had Tech channel (general tech shows) in Tech category (which also contains Gadgets, Android, Apple, etc). It’s now Technology. Several other changes like that should hopefully make it clearer for users.

Separating Food from Drink

Cooking is renamed to Food and moved to Health and Well-Being. Wine somehow didn’t seem right in there, so it’s moved to Recreation, where it may soon be joined by some similar channels …

Brace yourselves: The channels are coming

It doesn’t stop here. A number of long-term planned channels are still coming, and we intend to shuffle the categories a bit more too. Furthermore, the next major development project on the server is to update how catalogues are organised, which will in turn lead to a much better experience for browsing shows on both web and mobile. Indeed, it’s been far too long since I last posted here and I’ll be rectifying that next week with a broader update about these – and other – development activities happening.

Juggling Act: Batch episode actions on Player FM for Android

New in 1.3: Multi-Select

We released Player FM 1.3 a few days ago and it includes a feature we hope will help you juggle your podcasts like a Pro. It’s the ability to select multiple episodes similar to the way GMail lets you select multiple emails.

Long-hold any episode and watch the action bar transform before your eyes:

In this mode, you can check as many episodes as you like, and you’ll see the quantity appear on the top-left. Feel free to swipe left and right as usual, to navigate among channels, as you can happily select episodes from different channels as part of a single operation.

Once multiple episodes have been selected, you can perform three possible actions: Share them; add them to your Play Later list; or mark them all as played. (Of course, the reverse actions are also available in the event you initially chose an episode that is already in a certain state.)

The selection mode replaces the old context menu which was revealed upon long-press. You can still perform the same operations in the same number of taps, but now you can do much more too. You’ll also notice new icons for Play Later (using a pinning metaphor) and Mark as Played (tick and play button).

To Inbox Zero and Beyond!

Okay, but some of you want to do more than select a handful of episodes … you want to select the whole lot and mark them as played. Inbox Zero for podcasts, as it were. As of today, that’s possible too — check out our 1.3.1 release, which should land on Play a few hours from now:

This is launched from the top-right overflow menu and applies to whichever channel you’re in. So to mark all episodes, simply launch it from Everything.

Slice and Dice

I hope these advanced features help you take control of your podcast collection, letting you save for later what matters to you and wipe out what doesn’t. If you’d like to see anything else here, please send suggestions to or leave them at the Uservoice board. Thanks!

Custom Download Folders in latest Player FM for Android

Good news for the storage-challenged infovores! Player FM for Android 1.2.5 now supports a custom downloads folder.

Previously, the app was using the default folder assigned to it by the OS. But now you can visit Settings and point to your external SD Card, USB drive, or any other location you fancy.

And just a reminder — there’s plenty of other options in settings to help you manage storage. Even with automatic cleanup, podcast downloads can be heavy.

How manual downloads work on Player FM (or, “why there’s no ‘Download This’ button”)

A huge benefit of podcasting is offline access, and Player FM launched with a powerful but simple “Auto-Download” feature to ensure offline access for your subscriptions. However, it’s easy to stumble on episodes that aren’t downloaded, either because they’re too old to be auto-downloaded, or they appear in another channel. So users naturally wanted a way to download any episode, and we delivered it last month via the Play Later feature.

To add an episode to Play Later, simply long-hold the play button. Or you can long-hold the episode title to reveal Play Later in the context menu. And on the episode detail screen, you’ll also see a “Play Later” button. Then, visit your Play Later list anytime from the main (channel selection) menu. As you can see below, episodes marked Play Later have a top-right triangle with clock icon.

So why not a simple “Download This” button? Three reasons.

“Download This” buttons have always been flawed, because when do you clean up all that you’ve downloaded? Your web browsers’ Downloads folder is probably piled up with miscellaneous scraps of files you forgot about long ago. This is worse on mobile, where space is limited. Now, Player FM already has a way to auto-delete played episodes, so it’s possible these episodes will be cleaned up. But how often do you finish listening to an episode? No, you’d have to periodically walk through all your downloads, each time making the hard decision to remove them by marking them as played.

With Play Later, the app simply holds on the latest 10 episodes you’ve added to the list. (Or zero, or 50 … you decide in Settings.) Played episodes will be automatically removed from the list, and episodes you didn’t get to will “fall off” the back of the list. They’ll still be present at the bottom of your Play Later list, but the download will be deleted to make room for the new episodes at the top. This way, you’ll always have a maximum storage requirement (e.g. about 500MB if you choose a limit of 10 episodes) and you won’t be on a collision course with your device’s limited storage.

A related reason is that Player FM itself works great for offline browsing. You could be on the train flipping through favorite channels and spot a few interesting shows. Just add them to Play Later and the app will sync everything up when you’re back online. If it was a simple Download This button, it would fail for lack of network connectivity and you’d have to remember them in your head. Ah, but what if the app had a way to directly queue up Downloads? There is — it’s called Play Later!

Finally, there’s our cloud-first approach. Just as subscriptions and favorite channels sync across devices, we plan the same for Play Later. We want it so you can see an episode anywhere, pin it down, and it will then be available for offline consumption on any device. For a cloud app, Play Later just makes more sense.

All that said, if you really do want to grab the raw MP3 and stick it in a folder somewhere, “Export to File System” is still present in the Episode Detail screen.

Episode sorting, Advanced playback settings, Episode display upgrade (Player FM for Android)

I mentioned in the tablet upgrade post we’re presently in a “happiness tweaks” phase, and we’ve added several of these in the past couple of weeks.

These new features are now available at Google Play.

Sort episodes

Some people wanted to see episodes from the top first. This lets you listen to episodes on your phone just before the auto-download fairy whisks them away in favour of fresh ones. And some shows do actually make more sense in chronological order, e.g. fiction series.

With the new sort feature, you can not only reverse order, but sort by duration in either direction as well. A quick way to find the show matching your workout or commute.

Advanced playback settings

As with other media apps, there’s now an option to pause when you remove headphones. We took this a step further, and the app will also resume when you put the headphones back. It’s actually a neat way to quickly pause and resume, e.g. when you get to the front of the line in a store. Resuming will only work if you have an active Player FM notification, if Player FM was the last app to control playback, and of course you must have the option turned on.

The other setting applies to lock-screen and Bluetooth. A new option lets you skip 30 seconds within the current track using next/previous controls, instead of switching episodes. If you’re not listening to Player FM on Bluetooth, I highly recommend it. Being wireless is much more convenient when you’re mobile. And no more heroic un-tangling efforts!

Episode display

You’ll notice episode playlists have had a bit of a facelift. The progress bar is now thicker for episodes you’ve begun playing. We’ve kept it minimal for episodes you haven’t, because we like comparing episodes by length, but we don’t want the distraction of a thick bar for all episodes. Episodes you’ve finished playing are now faded. Remember, you can also hide these altogether from the overflow menu; and you can manually mark any episode as played anytime. As always, the current episode is shown in red.

Reminder: Lock-screen widget

I mentioned the new lock screen setting above, which is a good excuse to remind you Player FM has a separate lock-screen widget. That means if you’re running Android 4.2.1 or later, you can get a richer lock-screen interface. The widget ships with the Player FM app and here’s a tutorial explaining how to add lock-screen widgets like this.

And to go on a complete tangent, we’ve recently improved the regular widget’s design too.

Other news: Website login upgrade

In other news, the website has been upgraded for a smoother login and signup experience, based on a single popup dialogue instead of being bounced to and from a separate login screen.

Big it up: Player FM goes tablet and introduces Play Later feature

With the release of version 1.2, Player FM for Android is now friendly on devices of all sizes, just like the Player FM website. And the release comes hand-in-hand with the much-requested ability to download older episodes. These two features work great together, as tablet mode is an ideal way to flip through episodes for later listening. Even when you’re offline.

Here’s a summary of these new features, as well as a roundup of other recent updates.

Tablet mode

Player FM has been called “Flipboard for podcasts” by some, as it makes it easy to kick back and browse through podcasts. You can swipe left and right to explore at any level (channels, series, episodes, catalogues. And full episode descriptions are retained when you’re offline.

Here’s a look at the main screen on the big screen … 4+ million delicious Nexus 10’s pixels.

It’s fun to see all of a producer’s recent productions on one screen:

Episode mode is a quick popup:

With the new Nexus 7 out, mid-range tablets were not forgotten either. Here’s the N7 in portrait mode:

Existing users won’t see it, but the signup page and product tour got some attention too:

(Tip of the chapeau to Cinemur for the classic login button inspiration.)

Play Later

Play Later is available on all form factors, from phones to tablets. It’s your personal playlist or queue which you can add shows to any time. By default, the most recent 10 episodes are always sync’d, but you can update that in settings. It isn’t yet cloud-sync’d, but be sure it’s on the roadmap.

To mark an episode for Play Later, you can tap Play Later from the episode’s detail screen or the episode’s context menu. Or even simpler – just long-hold the play button in any playlist. You can see below a few shows saved for later, as well as the Play Later list in the menu.

Other updates since launch

It’s been a wild ride since launching this three months ago. We launched with a new kind of podcast app that emphasises discovery and syncs settings across devices and the web; but even so, we were missing some basic podcatcher functionality, and I’m pleased to see we’ve mostly closed the gap now. As well as the updates mentioned above, we are also now saving episode positions for later resuming, and tracking played episodes. We can also delete episodes automatically after a play – or if marked as played – depending on settings.

We are now making a series of “happiness” releases to add small features that people have been requesting, like changing sort order and pausing when headphones are removed. We’ll then be doing a big catalogue upgrade and adding more cloud-syncing capability.

How are you finding the tablet version? Let me know what you’d like to see next – or on UserVoice.

Fresher, Faster, Stronger: Player FM is Near Real-Time

Player FM is now receiving new episodes faster. Much faster. Whereas the average lag — from publisher upload to appearance on the site — was previously 2-3 hours, it’s now about 5 minutes. Generally, it will be a maximum of 15 minutes and in many cases, it will be just a few seconds. Furthermore, the new setup is scaleable; as the site grows, the update lag should remain constant.

Previously, Player FM’s server was doing what most podcatcher apps do: polling. Every hour or two, it would check all feeds for an update. Unlike normal podcatchers, Player FM has thousands of feeds to check, so the process was resource-intensive and as the site grew, there were more feeds to check and the updating got slower.

Polling is inefficient. Most of the time, you get the same result: nothing happened. But you have to keep checking in case one day, something does happen.

With the new architecture, Player FM no longer has to poll. Instead, Player FM’s servers receive a notification when a feed has changed, and that’s it. It happens using the PubSubHubbub protocol and SuperFeedr. (I contributed a few patches to Superfeedr’s Rack module to make this happen.)

The server is still performing occasional polls as a precaution; but generally, all updates will now happen via direct notification to Player FM’s servers.