Tuesday, May 6, 2014

Stoffi celebrates three years by introducing SoundCloud and cloud playlists

What time is it?
It's update time!

Today it has been exactly three years since the first version of Stoffi was released (not counting the early alphas and betas). Happy birthday! To celebrate this, and life in general, I have released a pretty substantial update to Stoffi.

How big is the update, you ask. It's big. In fact, I can't imagine a bigger update, to anything. Really. This update includes the actual application, you know the program you have installed on your computer, but also the website, the helper scripts, the development and release process, and the server infrastructure. Even the logo and icon is new!

And that's not even all. I will continue to do some huge changes after this release. Mainly moving away from SVN and on to Git. I will also move the code hosting from Google Code to Github in the process.

But before all that, let's start with the application, the Stoffi Music Player.

Stream music from SoundCloud

One of Stoffi's biggest strength right now, but even more so in the future, is the ability to tie together music from different places. It began when I noticed that I, and many of my friends, jump over to YouTube to play a music video which is either not available in the music player of their choice, or they want to show of the actual video. So I decided that a great music player must be able to play music from YouTube, preferably with the ability to watch the video.

Today I am continuing on that path with support for SoundCloud. As with YouTube you can search, play instantly, add tracks to playlists, queue them for later playing, or check out the hottest tracks right now.


Of course you can mix up your playlists or play queue with tracks from different sources (MP3 files, SoundCloud. YouTube, WAV files, Internet radio, etc.)

A more improved cloud

When you start to get settled into your music player, the most important thing is usually the playlists. Those great lists that you have spent hours curating and carefully shaping into audibly pleasure, catered for every mood you might find yourself in.

After spending all this time you'll hate to lose all that work if your computer crashes and needs to be replaced. You'd probably also hate having to do it all over again when you switch from your desktop to your laptop. You could save all your playlists into files and then import those files into your player whenever you want to add that playlist. But this means you'd have to export every playlist you want to move and you need to save them all over again whenever you change anything in them.

As a solution to this I have brought playlists into the new Stoffi cloud services that were introduced with the latest update. If you choose to connect Stoffi Music Player to your Stoffi account, all your playlists will be automatically synchronized between all your instances.


This will naturally add more benefits to how you can use playlists in Stoffi. For example, playlists can now be shared with others. You can share it on Facebook or any other social media, and when your friends add it they will automatically get any changes you make to the playlist.

The cloud services has been improved in other ways besides playlists. Facebook integration, for those of you who want to link your Stoffi account with your Facebook account, has seen improved support. You can now let Facebook see any playlists you create or modify, and any songs you listen to. Last.fm support has also arrived, giving you the ability to scrobble songs you listen to.

Of course, just as when I started work on the cloud services, I am still highly focused on privacy and the ability to choose where your data goes. This means you have fine grained control over what kind of information you want to send to which third party.

Redesigned website

A new cloud service needs a new website. The old one was kinda ugly in my opinion and I am a lot more pleased with this one. There's still some parts which I want to improve and continue to work on, but it is a whole lot more nice to look at.

While the website has been redesigned, the layout will pretty much stay in place. Keeping the old functionality in the same place. There has, however, been a bunch of more functionality added. One such thing is a new user profile and an improved dashboard. Here you can see the mostly played songs and artists as well as the songs that where most recently played.


The account settings has also been improved. You can now select to use a name from any third party (like Facebook or Twitter) or set it to something custom. You can also use an avatar from any third party.

New and cheaper server

I hope that a new, more functional and prettier website will drive more traffic which in turn will drive more ad revenue so I can pay the bills. But ads on Stoffi is optional (yeah, you read that right) so I still need to carefully consider all my expenses. This is why I have decided to leave my current host provider and go to Amazon instead. It's much cheaper and a lot more flexible.

By setting up a whole new server from scratch I was able to reach a more clean state and also experiment with some new software. For example, I have now switched web server from Apache to Nginx. I have also run some heavy image compressors on all graphics on the website. This, along with a more recent version of Rails, will give you a slightly faster website with a lower response time, resulting in a much better experience.

Leaner development process

Even more on the backend than the server infrastructure, one new change to Stoffi is how I am developing it. It used to be that I start a new version, throw in some cool features, scream when I notice that I just created a ton of new bugs. I would then, hopefully with some help, hunt down those bugs and fix them, before I decided that the bugs are too exotic, deem the new features stable, and release the update to the world. I would then go on an repeat all those steps.

I broke this down into three stages: alpha (adding new stuff and breaking things), beta (fixing the stuff) and stable (a version I am not completely ashamed of). The difference now is that I have actually been creating a new alpha while I've also been fixing the beta. So in fact, I have already created the next update to Stoffi, it just needs to be tested.

By having the different updates lined up this way, I can go on and immediately start a new code freeze on the next update. I could not do this before because most features in the next update were always half done, merely started, by the time I made a released. But now I have been holding back this update so I could have a bunch of new stuff ready, just not tested enough.

While this is mostly behind-the-scenes-stuff, it should be noticeable for end users by allowing for more frequent updates. This will make the next three years even more promising.