Tuesday, January 10, 2012

Project Genesis: Summary

The 5 month long hackathon draws to an end and we have handed in our first draft of the final report. On Wednesday we will have a demo of the resulting work for our coordinator.

The new "Service" settings where you connect Stoffi to the cloud.

In this last blog post I will summarize Project Genesis and the work that has been created in it's name.



What was Project Genesis?
The project was the birth of our cloud platform. By connecting the Stoffi Music Player to our cloud we will be able to provide countless of new services and cool features, both inside the player itself and as external applications.

Project Genesis was part of the Stoffi 2011 Hackathon which was a joint effort by a group of students at Uppsala University, part of our studies in Computer Science.

Account system
The first thing I did was add the ability to register and login on our website. To ease this process I decided to use OAuth which lets you register using your account on Facebook, Twitter, Google, Vimeo, SoundCloud, Rdio or LinkedIn. Thus, there's no need to create yet another password to remember.

The login screen inside Stoffi Music Player

For those of you who do register, you will notice how little information you actually need to type in. You only need to type in your email address and choose a password. There's no name, no age, no "which company have you worked for or schools have you attended" stuff. Email and password. That's it.

The registration form on the website

I made this choice since I want to limit the amount of personal information that you, our users, need to give us. This limits the impact a breach of security would have in case it would happen. To further enhance security I have enforced the use of a secure connection, password are hashed before submission, hashed further, even several times, before they are stored in the database and the hashing uses user specific salts and another salt which is not inside the database.

Hopefully, this will make it a bit easier for everyone to sleep at night.

Synchronization
With account systems in place and the ability to connect Stoffi Music Player I created the first cloud feature: synchronization.

I started simple and added synchronization of volume, repeat state, shuffle state, media state (paused or playing), and the current track. I also added API calls to tell connected players to switch to the next or previous track.

While Fredrik was busy creating an iOS app named Stoffi Remote which would use this API as a remote controller for Stoffi, I created a web interface to do the same. Since this would mostly be used on phones I made a mobile version of our website as well.

The My Stoffi page on the mobile website.

Once you have connected a Stoffi Music Player to the cloud and enabled synchronization you will be able to remotely control it using a normal browser on any computer, using a browser on a phone, or by using our new Stoffi Remote app for iPhone, iPad and iPod.

Remote controls on the mobile website.
In the next coming months I will further expand this feature. There's so much potential here.

Listening statistics
As part of Project Mind Reader, I and Martin decided to let you submit what songs you are listening to up to our server and there have us analyze the pattern in order to give you suggestions based on that. Of course. His project was not finished in time but we hope to have it ready within a few months. In the mean time you will at least have some rudimentary statistics on what your favorite artists and songs are.

This feature is of course opt-in, which means that it will not be enabled by default. After you connect Stoffi Music Player to your cloud account you will need to enable submissions of the songs you listen to. Everything to ensure privacy.

Donations to artists
Another new cool feature which is not exactly part of Project Genesis, but could be integrated with the new cloud is the ability for you to send money to any artist. You will only be able to send money to artists that have appeared in any form on the cloud system (by sharing, listening, synchronization). As people use our cloud more and more artists should appear.

The artist page on the website.
Each artist will be shown with the top songs, a short description from Wikipedia, a profile picture as well as a button to send them money.

When sending money you can select how much to send, what should happen if we can't find or reach the artists and how to distribute the money among the artist, us (Stoffi) and charity.

The donation form on the website.

You will be able to see the artist that have received the most donations and how much charity that artist has  generated.


Hopefully this will be an interesting new way for artists to generate income as well for us to get a way to pay some of our bills (hopefully).

Where to go from here
There's a lot more that can be done with all these new and shiny things. First I plan on adding synchronizations of playlists. I also plan on adding further integration with Google and YouTube, so you can import and synchronize playlist on YouTube as well.

I also want to add more services such as Yahoo! and MySpace. We are also waiting for Google+ to release their API and for Facebook to open their new Open Graph API so we can send the songs users listen to.

Do you have any suggestions on cloud services you think would be nice? Please let me know in the comments.