Why Native, Why elementary OS?

Last week I shared a screenshot of the progress that has been made on Birdie 2.0 (see below) and one person left comments on that post asking questions that I promised to answer in more detail in a blog post. He asked why I write desktop apps instead of web apps, and why I develop apps that are targeted for elementary OS specifically.

Screenshot from 2015-05-06 16:06:58

Why Write Native Desktop Apps, Instead of Creating Web Apps Which Can Run Everywhere?

The reason why I write desktop apps is actually fairly simple: I want to create the best user experiences possible. Writing a web app is not, and will never be, the way to do that. Don’t get me wrong, you can make some pretty incredible web apps, but at the end of the day the only way to provide a truly remarkable experience is to target a specific platform.

Users choose to use systems for many reasons, but perhaps the most significant reason is that they like how the system works. They like the workflow, they like how the visual elements are presented, and they like how different components work together to provide a cohesive experience.

The best apps feel like they are native to the system you are using. The best Android apps are the ones that most closely follow the Material Design guidelines and use Android-specific features like global media controls, advanced notifications, widgets, etc. The best iOS apps are the ones that follow Apple’s design guidelines and feature platform-specific features like TouchID support, App Extensions, AirPlay, Apple Pay, Notification Center support, etc.

The same applies to free desktops as well. The best apps are the ones that tightly integrate with the system and feel as close to first-party as possible. Unfortunately, creating apps that feel native to a platform means making difficult decisions and sticking with them. Picking a platform can be a tough decision. In the Linux world there’s kind of an expectation that an app will run on Ubuntu and Fedora and Arch and CentOS and OpenSuse and… well, you get the point. The fact of the matter is that each of those systems are different. The same code might run on all of them, but the experience will be muddled. Trying to make one app work in all distros is exhaustive and nearly impossible to pull off effectively. You end up having a mediocre product running on 10 systems instead of one incredible product running as well as possible on one.

I struggle with that decision from time to time. Sometimes I feel bad when I get reports that there is an obscure issue causing a bad experience for people on distro A, or icons looking out of place in distro B, or so on. If it’s something easy to fix I always try to do so, but at the end of the day I don’t have enough time to test the product under each desktop environment and modify the code individually on a one-by-one basis. I hate leaving some users behind, but if I had to do it all over again I would always make the same choices every time.

This is the bottom line: I want to make the best apps for users that I possibly can. In order to do that, it means taking advantage of native technologies and making difficult choices by targeting specific platforms. That probably means having fewer users overall, but I would rather have a smaller number of users that are happier using a more polished app.

Why elementary OS?

I love elementary OS. I love the spirit of the project and I have great respect for the technical and design decisions that have been and are continuing to be made. I truly believe that elementary is the future of desktop Linux, and speaking as a third-party developer I want to help as much as I can to make it a attractive option.

So, once again, the explanation is fairly simple: I love elementary OS, I believe in the future of the project, and I’m making apps that I personally want to use— and that means making them for elementary OS.


Out of the Nest – Birdie 2.0

A short while ago I came across news on Twitter and Google+ that Birdie, my longtime favorite Twitter client for Linux, would be shutting down development. I was extremely sad to hear this so I contacted Ivo Nunes, the main developer for the project, to see if he would be open to the idea of me taking over development. He was very agreeable, so I am excited to announce that I will be developing Birdie 2.0. Ivo will continue to be a part of the project working on other areas as he sees fit.

I’m also excited to announce that with this hand-off Birdie will once again be written in Vala, and that the existing 2.0 code will be ported back from Python.

I’m writing this just after my conversation with Ivo so I don’t have any other specific information to share. This will not interfere with the release of Vocal 1.0. Vocal is currently extremely close to the release candidate stage, and should be available within the next month or so. Right now I’m planning on working on Birdie throughout the summer and having a final release somewhere within that time-frame, but I’ve not yet looked at the code enough to make any accurate estimates.

I’m excited to help make Birdie as great as I possibly can and get the next major version in the hands of free software users as soon as possible.

Welcome elementary OS Freya Beta Users

First off, I want to extend my congratulations to all the elementary developers and contributors on a fantastic beta release! As most of you know, Vocal has been designed and developed from day one to work seamlessly with Freya. Unfortunately, that meant that it was unavailable for the majority of people to test until now (unless you were impatient determined enough to ahead and build your own unofficial, franken-Freya).

With so many new users trying Vocal for the first time I just want to say, welcome! I hope you enjoy using it! Please keep in mind that it is still in beta, so you will almost certainly run into problems every now and again (and when you do please report them here). That said, it should be fairly usable at this point.

Install Vocal

Add the Vocal daily PPA and install it by typing or copying/pasting these commands in a terminal (in this case it’s safe, but fair warning- always be careful when a site tells you to type something into your terminal):

sudo apt-add-repository ppa:nathandyer/vocal-daily
sudo apt-get update
sudo apt-get install vocal

What’s New?

Video playback:

Vocal Video Playback

A vastly improved episode browsing experience:

Episode Details Side Pane

Tons of improvements under the hood, including a simpler and more robust media playback backend, better offline support, faster imports, and much more.

What’s Next?

Soon Vocal will pick up exactly where you leave off, by remembering which episode you’re listening to after you quit and how far you make it in each episode. A new cleanup system that automatically removes old downloaded episodes is also planned.

After that development will primarily be focused on more polish and bug fixes. Once I feel that it’s close to being ready I will announce a release candidate. I’ll fix any remaining issues after that, at which point it will go stable with version 1.0.

As for version 2.0 and on, I have lots of exciting new features in the works. I don’t want to officially announce anything yet, but I am confident that you will all absolutely love it. But for now,


How Do I Get Involved?


If you enjoy using Vocal I would encourage you to consider a donation. Vocal is entirely open source and 100% free to download, and always will be, but it takes a surprising amount of money to create free software. Any donation, even $1, makes a big difference.

Visit this link to donate (and yes, we take bitcoin).


If you are bilingual, translations are fantastic way to get involved. Just visit the Launchpad Translations page for Vocal to get started.

Bug Reports

If you run into any bugs, have would like to suggest an improvement or new feature, please report that here at Vocal’s bug tracker on Launchpad.

Let Me Know What You Think!

If you use Vocal I would love to hear your thoughts about it (both good and bad)! You can contact me:

Vocal Beta Released, Daily PPA Now Available

Screenshot from 2014-06-26 19:38:31

The first public development release of Vocal is now available!

Please keep in mind that this is a preview release. Vocal is still a work in progress. You should only use it at this point if you are comfortable running into unexpected problems and crashes.

That warning aside, I have been using it for a while now and I believe that it is starting to feel fairly stable. Your mileage may vary (and if it does, please let me know).

Most of the features of the final release are implemented in this beta, with the only major exception being embedded video support.You can manage video podcasts, and technically you can play them in Vocal, but the experience is not what I want it to be yet. Proper video playback will be added over the next few weeks and will be included in the 1.0 release, following a period of additional testing and bug fixing.

If you’re brave enough to give it a go you can add the daily (unstable) PPA by entering the below commands into a terminal:

sudo apt-add-repository ppa:nathandyer/vocal-daily
sudo apt-get update
sudo apt-get install vocal

Vocal will only work on elementary OS Freya.* The best course of action is to wait until the Freya Beta is released before trying out Vocal. For the impatient among you, however, you should be able to run it either on a copy of Freya you have built yourself, or on Ubuntu Trusy or Utopic after installing elementary-desktop from the elementary Daily PPA.

Get Involved

Please report any bugs you come across at the project’s Launchpad page:


If you enjoy using Vocal, and you want to continue to see cool stuff being added, please consider a donation here. Even small donations can have a HUGE impact on the project.

Keep in Touch

Let me know what you think! If you give the beta a try I’d love to hear from you. You can contact me in several different ways:

I hope you enjoy Vocal!

Vocal Development Update #4

We are getting close to the first beta for Vocal! Despite a few minor setbacks that caused me to miss three or four days of planned coding, everything is still right on schedule and it looks like my initial goal of having a beta out by the end of June will be possible. At this point all the core features that I want implemented before the first development release have been added, which means the next few weeks will be focused on fixing a handful of remaining bugs and then additional polish before I release it into the wild for the first time.

Please keep in mind any screenshots you see may very well change between now and the final release. This is still a look at a work in progress.

Screenshot from 2014-05-22 22:02:28

Screenshot from 2014-05-26 15:35:06Vocal feels a lot more functional as of late. For one thing, the downloads system has been added (although there are some small problems I need to fix). Active download information is presented in a new popup available from the toolbar. Files are downloaded to the local library, and Vocal knows whether to play the local or remote version automatically. Users are able to tell whether or not a file has been downloaded by looking in the episode view. Not only that, but now unplayed episodes are marked with a star so you can always tell what you have and haven’t listened to yet.

It has also received further integration with the desktop. Once episodes have been downloaded, or if it discovers that new episodes are available, a system notification gets sent. The dock icon also displays information about the number of unplayed episodes and total download progress.

Screenshot from 2014-05-23 18:40:54Lots of other fixes have been implemented, including a critical fix for a bug in the the feed parser that prevented certain podcasts from being added. I also fixed an issue where only certain episodes were added to the library.

The beta is still a few weeks away, but the most challenging parts for this pre-release are behind me. That being said, I want to make the app feel as solid as possible before I let others kick the tires.

Vocal Development Update #3

Big features and new improvements have been added to Vocal this past week, including two of the most critical components: the database and the episode updates. While there are plenty of bugs remaining to be squashed, those two parts are now operational.

Check out the latest screencast:

Although development this week has been primarily focused on those two features, additional bug fixing and polishing has been underway. The welcome screen text has been reworded to be more clear and concise. A new error message has been added when a feed cannot be parsed (as opposed to simply crashing). Overall, Vocal feels much more stable than it did just a week ago.

But there is still quite a lot of work to be done before an alpha or beta release will be available. I still need to add downloads, which also means adding local podcast file management. Additionally, I need to add OPML support so that you can transfer your subscriptions over to Vocal.

So stay tuned! We’re getting closer and closer to Vocal’s first public development release.

The Search for Vocal’s Icon

Want to contribute to Vocal? Know how to make gorgeous icons? Then this post is for you!

Lots of progress is being made with Vocal, and now I’m at the point where I’m in need of a great icon. Unfortunately, my artistic abilities are sorely lacking, so I’m reaching out to the community to see if anyone would be interested in creating an awesome icon for it.

The icon would be the official icon for Vocal, and would appear in the dock, the launcher, and in the app itself. It will also be used on official pages like the project page on Launchpad, and social media sites such as Google+.

I am looking for something elegant that visually makes you think of a podcast or audio/video subscriptions. If you are interested in contributing an icon, please send it to me in a number of different ways:

The more at home the icon feels in elementary OS, the more likely I am to use it. If I end up using your icon I will give you a design credit in Vocal’s about dialog. Please just make sure that the content is original, and that it is freely licensed (Creative Commons Attribution-ShareAlike (CC BY-SA)).

Any and all submissions are greatly appreciated!