Using the Ubuntu One APIs for Your Apps: An Overview - Instructors: Stuart Langridge
Hi, all! I'm Stuart Langridge, from the Ubuntu One team, and I'm here to talk about our app developer programme. Do please ask questions throughout the talk: in the #ubuntu-classroom-chat channel, write QUESTION: here is my question We want to make it possible, and easy, for you to add the cloud to your apps and to make new apps for the cloud This is your personal cloud we're talking about here; your data. Not an enterprise cloud sort of thing :) So we do all the heavy lifting, and your users (and you!) get the benefits. Imagine, for example, you've made a recipe manager application. So you can type in all the recipes you like to cook, and you've got a permanent record of them. (For me, that would be: get a pizza base; put pepperoni on it. I reckon you can think of better recipes than that.) (and: actual recipes, for nice food. Not, like, Launchpad recipes. :) Don't really want to take your laptop into the kitchen, though, of course. So, build a mobile app which you sign into with Ubuntu One, and have that show all your recipes too. And a web app which you sign into with Ubuntu One, so that you can look up recipes while you're at a friend's house. So you've got your stuff, wherever you are, whichever device you're on. Ubuntu, Android, iOS, Windows, webOS, whichever you want, your data's in your personal cloud and so it's everywhere for you. This is the sort of thing that we want to make easy; giving your users and you quick access to the Ubuntu One technology. Mobile access to your data; web app access to your data; saving files direct into Ubuntu One; publishing files and photos from all your apps; adding playlists to the Ubuntu One music streaming app; streaming the user's own music into a game you've written. This stuff is all being heavily worked on right now as we speak. So this talk won't be too detailed with specifics, because they might change. But I'm more than happy to answer questions and so on! And I can probably tell you what I think the specifics are, if they're not already documented at https://one.ubuntu.com/developer/ :) I want to give you a flavour of what will soon be possible, and answer questions, and give some pointers, and get your thoughts. infodroid asked: you didn't mention desktop access to data... this is the primary use case i am looking at: seamless synchronisation of the user's app on the desktop oops :) I didn't deliberately leave it out! desktop access to data is absolutely part of this so you can sync a desktop app's data to other desktops, totally and then you get to build web apps or mobile apps or both as well which also share the same data Also, this is App Developer Week, so I can talk about what the components we're working on are and then admire all the cool ways you all come up with for snapping them together, rather than waiting for marketing to come up with a "product" for you to use :) So, some components that can be snapped together. You'll be able to sign in to a web application with Ubuntu One. This means that you don't have to manage your own identity system, think about password renewal, all that. This is just like "sign in with Facebook" or "sign in with Twitter"; it's OpenID-based, and lets your users sign in to a web app and you'll know their Ubuntu identity. infodroid asked: I have reviewd the online docs for API Docs > Data > Store data. However it is not clear what language bindings are available to use. infodroid, there are lots, depending on what you're trying to do but I know that the developer site doesn't yet talk about bindings I'm working on that :) Once you've signed in to an app with Ubuntu One, that app can ask for permission to work with your data. This lets you, developers, build applications that work on the desktop, on the web, on mobile phones. The recipe manager example I mentioned above is one sort of thing you could do, there Your users use the nice recipe manager app on Ubuntu, which you've built with Quickly or whatever you prefer And then they can go to yourrecipemanager.com and sign in with Ubuntu One yourrecipemanager.com then asks them for permission to access their "recipes" database and can then show them all their recipes on the web! Your app (yourrecipemanager.com) does this via OAuth; it goes through the standard OAuth dance to get an OAuth token which can be used to access the user's recipes data And your users can be happy that it's secure, because yourrecipemanager.com will only have access to their recipes data; it can't read their contacts or their credit card info. tomalan asked: Is Ubuntu One also available on other Linux Desktop Distros, like Fedora? Certainly some people have done some work to package Ubuntu One for other distros I think there's an ITP for Debian and we've been pinged on #ubuntuone by people interested in putting Ubuntu One on Fedora and Arch I don't remember the details, though, so I'm not sure what stage those bits of work are at so, I was talking about apps working with your data But you can imagine sharing other sorts of data between applications. Imagine, for example, an achievements system. You write a few games; some on the web, some on mobile phones, some on the Ubuntu desktop, some on Windows. And every time the user achieves something in a game, you save that achievement to that user's "achievements" database. On Ubuntu, you'd save that "trophy" into a file, and Ubuntu One will take care of synchronising that into the cloud. On the web, your game's backend can use the REST API for file access: see https://one.ubuntu.com/developer/store_files/cloud On Android or iOS or webOS or Blackberry or Meego or Windows Phone 7 you can do exactly the same thing; every language has an HTTP access library! You could even write your own wrapper library for PHP or Rails or Flash or whatever you prefer (and then tell me about it so I can point to the documentation for it!) At that point, all your games save achievements to the same place, so all your games can show you the achievements you've won in any game And, as before, you can set up yourachievements.com where a user can log in and see all their achievements. kermit66676 asked: So, the methods listed on the API documentation pages are all HTTP methods for the one.ubuntu.com server? I think the API docs list all the public documented committed-to APIs but I'd be interested to hear if there's something the docs don't cover paglia_s asked: i'm realizing an implementation of Ubuntu One apis written in php and i've seen that apis are quite slow. Do you plan to improve speed? paglia_s, hiya! paglia_s, yes, we're working on that, definitely and we're also interested in how people are using the APIs so that we may be able to add ones which more closely return the information you want There's loads of stuff you can do with shared data. But Ubuntu One's not just about data. Take the music streaming service, for example. You can currently stream music to Android and iPhone, and you'll be able to add that music to the cloud from Ubuntu and Windows. Maybe you want to be able to stream music back to your Ubuntu machine without syncing it, or your Mac, or your Palm Pre, or your LG mobile phone, or your toaster. So, just use the music streaming API, which is again a simple REST HTTP API, or help people to get at their music by showing them our HTML5 web player for streaming music. But there's more interesting ideas around music streaming than just "listen to the music". Playlists, for example. The Ubuntu One Streaming apps on Android and iPhone know how to create playlists. But how they do that is not a secret. Your playlists are just stored in your cloud databases. So, why not sync your playlists from Banshee or Rhythmbox or Amarok or Exaile or Quod Libet or iTunes or Windows Media Player? (insert your choice of player here :)) Copy the playlists from your media player into desktopcouch on Ubuntu or into the cloud directly with u1couch on Windows or the Mac or anywhere else, in the correct format, and those playlists will instantly show up on your phone! A simple example of this is https://code.launchpad.net/~sil/%2Bjunk/m3u2u1ms/ which is a quick script I wrote to take an m3u playlist and store it in desktopcouch on Ubuntu. So you can make your Banshee playlists available to the Ubuntu One app on your Android phone by exporting them as m3u and then importing them with the script. And of course if you sync your playlists from your media player to Ubuntu One, then you can sync them back from Ubuntu One to your media player. What this means is that if you've got two machines -- let's say, a desktop and a netbook -- then creating a playlist on your desktop will automatically also make it appear on your netbook. And your netbook can either sync all your music that you store in Ubuntu One (if it's got enough space) or stream that music directly from Ubuntu One without ever syncing it locally. Your music, everywhere; but importantly, not just your music but your playlists and scores and ratings and everything. If you're interested in bringing this to your music player, let me know and I can help; ask questions now :-) paglia_s asked: do you plan to add support for notes, too? Will this support also images/video...? paglia_s, I'm not sure what you mean by "support for notes"? paglia_s, you already can edit notes synced from tomboy on the website jsjgruber_test asked: â€‹â€†I can't synchronize my desktopcouch database -- because of 503 service unavailable returns, and I hear that the servers are being worked on for this. Any news about when they will be able to handle the load? jsjgruber_test, we're working on that, as you know, but I don't have an answer fo when that work will be completed kermit66676 asked: yes, have there been any intentions of making an Ubuntu One gallery viewable online from a Shotwell photo collection? kermit66676, interesting idea! If you were thinking of displaying that sort of thing on a website, the rest files API would be a good starting point we've had a few ideas ourselves in that sort of area too :) so, I was talking about music :) Tighter integration is great, here; what we want to do is to make it easy for you all to build the stuff that you want on top of Ubuntu One. So if you want to have your Amarok playlists available for streaming, it should be possible to do. I rather like the idea of playing a Flash game on the web and having the background music be the most appropriate music chosen from *my* music collection. That'd be cool. Ubuntu One also, as you know, does file sync. :-) But just syncing files is already taken care of by Ubuntu One itself, on Ubuntu and Windows. What's more interesting is working with those files. So, for example, imagine being able to instantly, one-click-ly, publish a file from your application to a public URL and then tweet that URL. Instant get-this-out-there-ness from your apps. The screenshot tool Shutter, for example, can do this already; PrtSc to take a screenshot, then "Export > Ubuntu One". They did a bunch of hard work to do that, and I massively applaud them; nice one Shutter team! Based on what they did, that's the sort of thing that should be easier to do. So there are easy-to-use APIs so your apps can do the same. Imagine quickly sharing your newly created image or document or recipe with the world. Your app could have a button to "store all my files in the cloud", or "publish all my files when I save them", or "automatically share files that are part of Project X with my boss". More to the point, you can work with files directly *in* the cloud. So a backup program, for example, could back up your files straight into Ubuntu One and not sync them to your local machines. That's exactly what Deja Dup, by the great mterry, does; one of its backup options is "Ubuntu One". So to make sure you've got backups of your machine, just start Deja Dup (which is in Ubuntu 11.10), choose "Ubuntu One" for backups, and that's it; you're done. You'll never lose data again; yay for backups! Enabling that sort of work in *your* apps is exactly what the Ubuntu One app dev programme is all about; making it easy to add your users' personal cloud to what your app does. And of course being able to save things in and out of the cloud means that you can get an Ubuntu One sync solution on other platforms. So you could work with your files from your non-Android mobile phone (we've already got Ubuntu One files available in the Android Market, and it's also on Launchpad if you want to look at how it works). Build a fuse or gvfs backend for Ubuntu or Fedora or SuSE or Arch Linux. Build a WebDAV server which works with Ubuntu One and mount your Ubuntu One storage as a remote folder on your Mac. And web apps can work with your cloud too, for files as well as data. Imagine, say, a torrent client, running on the web, which can download something like a movie or music from legittorrents.info and save it directly into your cloud storage. So you see an album you want on that torrent site (say, Ghosts I by Nine Inch Nails) and go tell this web torrent client about it (and you've signed in to that web torrent client with Ubuntu One) And the website then downloads that NIN album directly into your personal cloud -- which of course makes it available for streaming direct to your phone. You could do that with videos as well: choose a torrentable video (say, Beyond the Game, the documentary about World of Warcraft) and download that directly into your cloud, if someone built the web torrent client. (Of course, that would be cooler if Ubuntu One offered a video streaming service as well as music streaming, wouldn't it. Hm... ;-) But it's not just about your content for yourself; think about sharing. Ubuntu One lets you share a folder with people. This would be great for distribution. Imagine that you publish an online magazine. So, you create a folder on your desktop, and put issues of the magazine in it. Then, you put a button on your website saying "Sign in with Ubuntu One to get our magazine". When someone signs in, your website connects to the Ubuntu One files API, with your private OAuth token, and adds that signed-in user to the list of people that your magazine folder is shared with. Then, whenever your magazine has a new issue, you just drop it into that folder on your desktop. (Or even upload it to Ubuntu One directly through the website.) All the subscribed people will get the new issue instantly, on all the machines they want it on, and in the cloud. You could distribute anything like this. Imagine a podcast, or chapters of a novel. It would also work for paid-for content; when someone pays, have your code share a folder with them, and put their paid-for stuff in that folder. That's all doable through the files API. We've built the files API itself (an HTTP-based REST API) and also some wrappers for it to make it easier to use in your apps from Python and the like (and we're continuing to enhance it, and this is another place you can contribute; let me know what you want the Files API to do!) infodroid asked: i hear that couchdb as a backend for a desktop app is really slow. is this true? are there any strategies to get around this? infodroid, we're working on ways to make synced data a better experience for developers (In fact I've been in a meeting room today talking about it :)) so stay in touch with what we're up to and if you're having problems, be assured that things will get better at the moment using couchdb is problematic, we agree; for some people it works fine but there are issues we're still working out what it's best to do about that There are 10 minutes remaining in the current session. staying in touch with what's going on can be done by following the blog (http://voices.canonical.com/ubuntuone/) and we're on twitter as well :) and you can hang out in #ubuntuone too; we're a friendly bunch and I'm always happy to have someone buy me a beer ;) (Or just drop me an email or ping me on irc to chat about what you're trying to do or hoping to do. I like talking about this stuff, as you may have noticed.) OK, I've talked about a blizzard of ideas that'll be made possible, and shown you almost no code. However, code is nothing without documentation, and that's really important. So, as I mentioned earlier, you want https://one.ubuntu.com/developer There you can find documentation for the files and music APIs, and for how to create and manage your Ubuntu One account. So there's documentation for all this stuff so all of you clever people can build things that I haven't even dreamed of. So, what I'd like to know is: what are your cool ideas? What help do you need from me in making them happen? What do you want to use Ubuntu One for in your apps and your scripts and your work? as I say, drop me a line, ping me on irc, tweet at me or at U1 or hang out on irc and tell me what you want to get done, and we can talk about how to do it I've got a few minutes fo questions now before you get to hear cool stuff about unity :) There are 5 minutes remaining in the current session. kermit66676, syncing your shotwell structures is a really interesting idea you should already be able to sync the photos themselves -- simply mark the folde with them in as synced with Ubuntu One, and they'll be on all your machines syncing shotwell's preferences and so on is more interesting, because it depends how they're stored catch up with me another time (I have to leave at the end of this talk :( ) and we can talk it over? ok, thanks all!