I really dig [Ubuntu One](https://one.ubuntu.com/). I love the file sharing, the music store, the contact syncing, the music streaming, the bookmark syncing…I love how I can fire up a new computer and things get synced and I am good to go. I think the Ubuntu One team though are missing a huge opportunity that could bring tremendous innovation to Ubuntu and desktop Linux. But what is this glistening wreath of opportunity?
Not that.
It is *collaboration*. I know, those of you playing *buzzword bingo* just ticked a box, but bear with me.
Let me paint a picture as an example.
A few weeks ago a friend and I were on Skype and having a conversation about how we could solve a particular technical challenge. As the discussion got more and more complex, we knew we needed to resort to visual diagrams to keep on track. In other words: we both needed to collaborate together on a document.
So, we did what is natural for many Ubuntu users. I opened up Inkscape and created something and then had the idea of sharing it with him via Ubuntu One. I created a folder in my `Ubuntu One` directory, saved the file to it and shared it with him from Nautilus. Ubuntu One did it’s thing and immediately popped up a notification bubble to say the file was uploading. A few seconds later my buddy said he saw a notification bubble indicating that the file was syncing.
We were now in a great position. He opened up the file in Inkscape and viewed it. As our conversation continued he made some changes to the file and then saved. Because he saved to a shared folder, Ubuntu One automatically updated the new file in the share and my Ubuntu One downloaded the file automatically – without doing anything we were synced up. Rock and roll. At this point I then re-opened the file in Inkscape and I could see the new content. Wash, rinse, repeat.
The awesome thing about Ubuntu One is that all the technology is there for people to collaborate in this batch-processing kind of way, but it currently feels too manual in how you engage that sharing and collaboration. Ideally we want to build this right into apps using Ubuntu One as the back-end.
### The User Experience
This is what I would like to propose as the experience for the end user, and I will talk about the app developer experience soon. Please be warned: these mock-ups are crude and simplistic and would need the design and UI usability expertise of the design team to refine, but you should get the picture (pun intended) of the experience.
Imagine my friend and I are in the same position and wanting to collaborate together on a document. I would create the diagram in Inkscape and then click the File menu and see:
I would click on *Collaborate using Ubuntu One* (to be clear, this could be a different menu string, this is just an idea) and then you would see this:
Here I can type in a name for the document (note, not a filename, a document name) and I can use the search box to select who I want to share it with. Entering a search term would search through my address book and I can select people to add to the share.
When I click *Share* each of the contacts I share the document with will get a message to ask them if they want to accept the share (this ideally would be a notification), such as:
At this point my friend could select the first option and view the file in Inkscape. Alternatively, he could click the *Preview* button to preview the file (if this is a document such as a PDF) or choose to accept the share and load it later.
If my friend would like to load it later, he could open Inkscape and select *File* -> Open and there would be a slightly modified Open dialog box:
The only difference here is that there is an Ubuntu One option in the sidebar and when he clicks it, it just lists the documents shared that can be loaded into the app. The *Recent Documents* menu option in the File menu should also list Ubuntu One documents.
Now, here is a key point: if we both have the file open in our respective Inkscapes and one of us makes a change, the file would be automatically synced (which it does today), but also the application would automatically update the content and refresh the view to reflect the new version of the file. As an example, if I make a change to my document, the file would sync automatically over Ubuntu One and my friend’s Inkscape would reload the file to display the new content.
I believe this would offer a hugely compelling experience – it would allow people to collaborate using desktop tools, using Ubuntu One a seamless syncronization and storage service, and any new Ubuntu machine that you set up would have all your documents ready to roll.
### The Developer Experience
To achieve this from a developer perspective, the Ubuntu One team would need to provide an API for app authors to use to build this support into their apps. Ideally this would present a series of standard components that app authors can use to add this support in a really simple way.
As an example, I can imaging that I could use a Python module to add this support and then connect a menu item in my File menu to `sync_with_u1()` which would display the *Collaborate on Ubuntu One* dialog box (I could imagine there being `ubuntuone-api` as well as `ubuntuone-api-gtk` and `ubuntuone-api-qt` packages for the different pre-built dialogs). Upon the user entering content, the different values could then be passed to `process_u1_sync()`.
Ideally the app could then have some kind of listener built-in which could listen for a signal that indicates that the current Ubuntu One document has been updated and then trigger a method in the app that would reload the data and refresh the view.
It seems to me that the underlying infrastructure is all there to do this – all it would need is a thin Ubuntu One API and some standard dialog boxes (so that all apps have a uniform experience).
### Potential Uses
I can think of a variety of different methods in which people could collaborate using this batch-type functionality:
* Music – imagine this in Jokosher. I could create a project and record the drums, and then save to Ubuntu one and it would sync my project and all the recorded audio. Then a friend across the world could record a guitar piece and sync, and then I would get her performance. This could be a great way to make music together in a distribution manner.
* Video – the same approach to the music example above could be used for video.
* Documents – sharing office documents could be useful for reviewing documents, updating spreadsheets, reviewing presentations and more.
I am sure there are many more uses.
I am going to talk to the Ubuntu One team and see if this could be an option. I will keep my fingers crossed. 🙂
**UPDATE**: I have [registered a blueprint](https://blueprints.launchpad.net/ubuntu/+spec/community-ubuntuone-in-app-collaboration) and this will be discussed at UDS.