<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007" version="2.0">
   <channel>
      <title>as days pass by: a weblog by Stuart Langridge</title>
      <description>scratched tallies on the prison wall</description>
      <link>http://pipes.yahoo.com/pipes/pipe.info?_id=0b36d196b9e83fe728bf34a46a14a10d</link>
      <pubDate>Tue, 09 Feb 2010 06:23:44 -0800</pubDate>
      <generator>http://pipes.yahoo.com/pipes/</generator>
      <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/kryogenix" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="kryogenix" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
         <title>DesktopCouch talk at FOSDEM</title>
         <link>http://www.kryogenix.org/days/2010/02/01/desktopcouch-talk-at-fosdem</link>
         <description>&lt;p&gt;Nice! Manuel, heroic desktopcouch community contributor, is speaking about &lt;a rel="nofollow" target="_blank" href="http://fosdem.org/2010/schedule/events/xd_desktopcouch"&gt;Making your users happy, and "cloudify"ing your app with desktopcouch&lt;/a&gt; at FOSDEM. I can't make it there this year, but that talk will be excellent :-)&lt;/p&gt;</description>
         <author>sil</author>
         <guid isPermaLink="false">0b36d196b9e83fe728bf34a46a14a10d_a31dd0ada90c30267133af2784e16ab7</guid>
         <pubDate>Mon, 01 Feb 2010 08:50:30 -0800</pubDate>
      </item>
      <item>
         <title>Adding Ubuntu One support to your applications, an IRC lecture</title>
         <link>http://www.kryogenix.org/days/2010/01/26/adding-ubuntu-one-support-to-your-applications-an-irc-lecture</link>
         <description>&lt;p&gt;This year, as last year, I did an IRC talk as part of Ubuntu Developer Week. This time, it was about adding Ubuntu One to your applications, and what that will bring to your users. (Once again my &lt;a rel="nofollow" target="_blank" href="http://www.kryogenix.org/days/2009/08/31/delivering-talks-by-irc-an-xchat-plugin"&gt;xchat plugin for IRC talks&lt;/a&gt; was massively helpful!&lt;/p&gt;

&lt;h3&gt;Introduction&lt;/h3&gt;
&lt;ul style="list-style:none;"&gt;
&lt;li&gt; Hi! I'm Stuart Langridge, from the Ubuntu One team, and this talk is called "Adding Ubuntu One support to your applications".&lt;/li&gt;
&lt;li&gt; You can ask questions at any time in #ubuntu-classroom-chat. Please write QUESTION at the beginning of your question so I can see it more easily. I'll stop at the end of a section and answer some questions.&lt;/li&gt;
&lt;li&gt; During this talk I'm going to explain the different ways your applications can take advantage of Ubuntu One...&lt;/li&gt;
&lt;li&gt; ...talk about why you'd want to do that...&lt;/li&gt;
&lt;li&gt; ...and give a couple of sneak previews of things that you can't *quite* do yet but will be able to do for Lucid 10.04, so you can be ready!&lt;/li&gt;
&lt;li&gt; Firstly, though, remember that "integrating with Ubuntu One" isn't really the point; the point is to give features to your users that make their lives easier.&lt;/li&gt;
&lt;li&gt; Now, obviously, using Ubuntu One will make you taller, it'll make you more attractive to the appropriate sex, and it'll make the sun shine more brightly, but remember that it's all about providing things that your users want...&lt;/li&gt;
&lt;li&gt; ...and Ubuntu One gives you the infrastructure you need to do that. If it doesn't, come talk to us!&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;How to do cool things with file synchronisation&lt;/h3&gt;
&lt;ul style="list-style:none;"&gt;
&lt;li&gt; OK, so, the first thing is: files.&lt;/li&gt;
&lt;li&gt; As you know, Ubuntu One automatically synchronises files in your Ubuntu One folder to Ubuntu One itself in the cloud and to all your other machines.&lt;/li&gt;
&lt;li&gt; This means that you can take advantage of automatic file backup just by having your application save things to the filesystem!&lt;/li&gt;
&lt;li&gt; Imagine that you want attachments that you receive by email to be stored online and backed up so you can get at them later.&lt;/li&gt;
&lt;li&gt; Most mail clients will already let you do this in some way. So, change the folder that these attachments are saved in to be an Ubuntu One folder and suddenly all your attachments are backed up online and available on every machine!&lt;/li&gt;
&lt;li&gt; For example, there is a Thunderbird attachment called "Attachment Extractor" (&lt;a rel="nofollow" target="_blank" href="https://addons.mozilla.org/en-US/thunderbird/addon/556"&gt;https://addons.mozilla.org/en-US/thunderbird/addon/556&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt; Install it, select "Automatically extract attachments on email receipt" in Tools &amp;gt; AttachmentExtractor settings &amp;gt; Auto-Extract, and set the "Save Path for Attachments" to /home/YOU/Ubuntu One/Mail Attachments, and that's all you need!&lt;/li&gt;
&lt;li&gt; Similarly, if you want off-site backups of your computer, then you can install one of the many simple backup programs, like backintime (&lt;a rel="nofollow" target="_blank" href="http://backintime.le-web.org/"&gt;http://backintime.le-web.org/&lt;/a&gt;) and choose the backup folder to be inside your Ubuntu One folder.&lt;/li&gt;
&lt;li&gt; With no extra effort you've got off-site online backups which you can get at from any of your machines or from the web.&lt;/li&gt;
&lt;li&gt; As another example, imagine you've built yourself a digital picture frame out of an old laptop, which is a pretty cool project for your weekends. How do you get the photos on it? &lt;/li&gt;
&lt;li&gt; Well, when I did this, I created a new Ubuntu One user for the picture frame, and then I shared a folder with that picture frame user through Ubuntu One.&lt;/li&gt;
&lt;li&gt; The picture frame just did this: eog --slideshow "/home/pictureframe/Ubuntu One/Shared With Me/pictures from Stuart Langridge"&lt;/li&gt;
&lt;li&gt; and then to add new pictures to the frame, I just copy them into the folder that I shared.&lt;/li&gt;
&lt;li&gt; I could share that folder with anyone else, too, and allow them to write to it, and then they'd be able to add pictures to the frame too!&lt;/li&gt;
&lt;li&gt; The way I'll do this from 10.04 Lucid onwards is to use the new User Defined Folders feature, where any folder, anywhere, can be designated as an Ubuntu One synced folder&lt;/li&gt;
&lt;li&gt; and you can elect to have some folders but not others synced to particular machines&lt;/li&gt;
&lt;li&gt; So I'd create my "digital picture frame" folder in my home folder (or wherever), and then mark it as a UDF.&lt;/li&gt;
&lt;li&gt; Then on the picture frame itself, I'd sign into Ubuntu One, and say that I only want to subscribe to that particular UDF and not any of the others.&lt;/li&gt;
&lt;li&gt; so then files that I put into "digital picture frame" on my laptop will be synced to the picture frame&lt;/li&gt;
&lt;li&gt; and the picture frame just displays all the files in that folder&lt;/li&gt;
&lt;li&gt; ta daaah, it Just Works.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Publishing files publically&lt;/h3&gt;
&lt;ul style="list-style:none;"&gt;
&lt;li&gt;A much-requested feature which will be available in Lucid is "public files", the ability to publish an Ubuntu One-synchronised file to a public URL so anyone can get at it.&lt;/li&gt;
&lt;li&gt; This is useful for the user directly; they can easily make a file available to the world.&lt;/li&gt;
&lt;li&gt; It's also really useful for applications, because you can now build one-click publish-to-the-world directly into your apps.&lt;/li&gt;
&lt;li&gt; Imagine that your app is Shutter, which is like the standard Gnome Screenshot tool on steroids.&lt;/li&gt;
&lt;li&gt; If you install Shutter and then hit the Print Screen button, it'll take a picture of your screen.&lt;/li&gt;
&lt;li&gt; One of the main reasons people take screenshots of their screen is to show them to other people, which makes this a perfect case for publishing the screenshot to a URL so anyone can see it.&lt;/li&gt;
&lt;li&gt; So, in Shutter (or your similar app), provide a "Publish with Ubuntu One" button.&lt;/li&gt;
&lt;li&gt; That button should do the following:&lt;/li&gt;
&lt;li&gt; 1. Save the file into the user's Ubuntu One folder (just save, as normal)&lt;/li&gt;
&lt;li&gt; 2. Call the publishing API&lt;/li&gt;
&lt;li&gt; The publishing API will be D-Bus; I can't confirm exactly how it will work, yet, because the team are still constructing it, but keep your eyes open for more details!&lt;/li&gt;
&lt;li&gt; This shows a basic principle of Ubuntu One's design; pretty much anything you can do explicitly, like publish a file, or share a file, can also be done using the D-Bus API from applications.&lt;/li&gt;
&lt;li&gt; I'll answer some questions here about using Ubuntu One file sync in your apps.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Questions&lt;/h3&gt;
&lt;ul style="list-style:none;"&gt;
&lt;li&gt; &lt;em&gt;kklimonda|lernid&lt;/em&gt; QUESTION: Is there a full GObject U1 API for storing data, settings etc. or do we have to make use of ~/Ubuntu One/ for now?&lt;/li&gt;
&lt;li&gt; Data and settings are best stored in desktopcouch if you want to take advantage of all that lovely synchronization goodness; there are benefits to doing it that way, and I'll talk about desktopcouch in a bit.&lt;/li&gt;
&lt;li&gt; But you can certainly store settings files in ~/Ubuntu One if you want to&lt;/li&gt;
&lt;li&gt; and obviously actual data *content* that your apps work on, your documents and so on, are stored in ~/Ubuntu One&lt;/li&gt;
&lt;li&gt; &lt;em&gt;mhall119|work&lt;/em&gt; QUESTION: in 10.04 you will be allowed to have multiple sync folders outside of ~/Ubuntu One/ ?&lt;/li&gt;
&lt;li&gt; mhall119|work, yep, you sure will. UDFs (user defined folders) are a big feature that'll land in 10.04.&lt;/li&gt;
&lt;li&gt; &lt;em&gt;strycore89&lt;/em&gt; QUESTION : will we be able to share single files and not whole directories ?&lt;/li&gt;
&lt;li&gt; No. Sharing is done folder-by-folder, and we're not planning on changing that.&lt;/li&gt;
&lt;li&gt; &lt;em&gt;mhall119|work&lt;/em&gt; QUESTION: right now the local folder names match the online folder names.  With the ability to have multiple sync folders, how are naming conflicts resolved?&lt;/li&gt;
&lt;li&gt; I'm not sure what you mean here by "naming conflicts"; maybe we can pick that point up after the session, or later on?&lt;/li&gt;
&lt;li&gt; &lt;em&gt;foobob&lt;/em&gt; QUESTION: are you thinking of giving some GB more to the free plan?&lt;/li&gt;
&lt;li&gt; I don't believe we are at the moment, no.&lt;/li&gt;
&lt;li&gt; &lt;em&gt;yltsrc&lt;/em&gt; QUESTION: will be ready symlincs in U1?&lt;/li&gt;
&lt;li&gt; yltsrc, UDFs, being able to mark any folder as Ubuntu One synchronized, takes the place of symlinks. If you use, er, some alternative to Ubuntu One and you're used to putting a symlink in, say, ~/SyncedFolder which points at ~/SomeOtherFolder to get SomeOtherFolder synced, you don't need to do that in Ubuntu One; you just mark SomeOtherFolder as a UDF and it will be synced for you.&lt;/li&gt;
&lt;li&gt; &lt;em&gt;lantash49&lt;/em&gt; QUESTION: Will there be more detailed specification w.r.t storing settings in ~/Ubuntu One? Storing them there directly seems to conflict with the XDG directory specs.&lt;/li&gt;
&lt;li&gt; lantash49, one obvious approach to this is to mark XDG_CONFIG_DIR and XDG_DATA_DIR as UDFs, so they're synchronized across your computers.&lt;/li&gt;
&lt;li&gt; &lt;em&gt;yltsrc&lt;/em&gt; QUESTION: i want participate in testing U1, how can I do it?&lt;/li&gt;
&lt;li&gt; Drop into #ubuntuone and talk to the team about what's going on and how you can help; we've had some really helpful community members already, like rtgz, who's done tons of stuff&lt;/li&gt;
&lt;li&gt; &lt;em&gt;taj&lt;/em&gt; QUESTION: Are there any plans to make U1 cross-platform?&lt;/li&gt;
&lt;li&gt; There's a sprint at PyCon US to port Ubuntu One file sharing to Windows: &lt;a rel="nofollow" target="_blank" href=" http://us.pycon.org/2010/sprints/projects/ubuntuone/"&gt;&lt;/li&gt;
&lt;li&gt; and mandel, another incredible community member, is currently porting desktopcouch to Windows: &lt;a rel="nofollow" target="_blank" href="http://www.themacaque.com/?p=372"&gt;http://www.themacaque.com/?p=372&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; both of those projects are great, and if you can help that'd be wonderful&lt;/li&gt;
&lt;li&gt; &lt;em&gt;mhall119|work&lt;/em&gt; QUESTION: If I put a symlink inside of a UDF, that points elsewhere, does U1 sync that as a link, or as a copy of what is linked to?&lt;/li&gt;
&lt;li&gt; it's synced as a symlink.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Desktop Couch&lt;/h3&gt;
&lt;ul style="list-style:none;"&gt;
&lt;li&gt; The second leg of Ubuntu One for developers is desktopcouch, the CouchDB on your desktop.&lt;/li&gt;
&lt;li&gt; If you missed my last Ubuntu Developer Week talk about the basics of desktopcouch and what it's for, you can read it at &lt;a rel="nofollow" target="_blank" href="http://www.kryogenix.org/days/2009/09/03/desktop-couch-irc-talk"&gt;http://www.kryogenix.org/days/2009/09/03/desktop-couch-irc-talk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; In fact, you can read all the desktopcouch documentation at &lt;a rel="nofollow" target="_blank" href="http://www.freedesktop.org/wiki/Specifications/desktopcouch/Documentation/"&gt;http://www.freedesktop.org/wiki/Specifications/desktopcouch/Documentation/&lt;/a&gt;, and you should do so :-)&lt;/li&gt;
&lt;li&gt; The bit that's most likely to be relevant here is the "I am a developer, and I want the applications I write to store data in and work with desktopcouch" section. It contains much that is relevant to this talk!&lt;/li&gt;
&lt;li&gt; &lt;a rel="nofollow" target="_blank" href="http://arstechnica.com/open-source/guides/2009/12/code-tutorial-make-your-application-sync-with-ubuntu-one.ars/1"&gt;http://arstechnica.com/open-source/guides/2009/12/code-tutorial-make-your-application-sync-with-ubuntu-one.ars/1&lt;/a&gt; is a really great guide, written by segphault, of how to support cloud synchronization of data in your applications.&lt;/li&gt;
&lt;li&gt; Essentially, if you use desktopcouch to store your application's data, instead of using sqlite or flat files, then the data will be synchronised between all your machines *without you having to do anything*.&lt;/li&gt;
&lt;li&gt; So your app will work the same on all your machines with no effort.&lt;/li&gt;
&lt;li&gt; To store a record in desktopcouch, simply do:&lt;/li&gt;
&lt;li&gt;&lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; from desktopcouch.records.server import CouchDatabase
&amp;gt;&amp;gt;&amp;gt; from desktopcouch.records.record import Record
&amp;gt;&amp;gt;&amp;gt; db = CouchDatabase('testing', create=True)
&amp;gt;&amp;gt;&amp;gt; r = Record({'key':'value'}, record_type='http://example.com/testrecord')
&amp;gt;&amp;gt;&amp;gt; record_id = db.put_record(r)&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt; and to get it back, by record ID:&lt;/li&gt;
&lt;li&gt;&lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; fetched = db.get_record(record_id)
&amp;gt;&amp;gt;&amp;gt; print fetched['key']
 'value'&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt; The Quickly project, for writing Ubuntu apps, have created "widgets" that use desktopcouch without you having to think about it. CouchGrid, for example:
&lt;li&gt;&lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; from desktopcouch.records.couchgrid import CouchGrid
&amp;gt;&amp;gt;&amp;gt; keys=["key","another key"] # to label the columns
&amp;gt;&amp;gt;&amp;gt; couchgrid = CouchGrid(db_name, record_type=record_type, keys=keys)
&amp;gt;&amp;gt;&amp;gt; mywindow.pack_start(couchgrid)&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt; and then you have a CouchGrid, which is a data table where all the data is automatically retrieved from desktopcouch and stored back into desktopcouch when changed&lt;/li&gt;
&lt;li&gt; &lt;a rel="nofollow" target="_blank" href="http://www.youtube.com/user/calorielookup#p/a/u/0/Vwr5Xw5ZrIE"&gt;http://www.youtube.com/user/calorielookup#p/a/u/0/Vwr5Xw5ZrIE&lt;/a&gt; has a video demonstrating couchgrids&lt;/li&gt;
&lt;li&gt; You don't have to know anything about desktopcouch at all for this! Just use the widget and your data will be saved to the database and synced to your different machines with no effort or code on your part at all.&lt;/li&gt;
&lt;li&gt; &lt;a rel="nofollow" target="_blank" href="https://wiki.ubuntu.com/Quickly/Snippets"&gt;https://wiki.ubuntu.com/Quickly/Snippets&lt;/a&gt; has a few more examples of using desktopcouch from Python and from Quickly apps.&lt;/li&gt;
&lt;li&gt; So, cloud-enable your apps! Let's see my song ratings in Rhythmbox or Banshee or Amarok or Exaile or Quod Libet appear on all of my machines. Let's see my Chrome bookmarks appear everywhere, like my Firefox bookmarks already do. &lt;/li&gt;
&lt;li&gt; Remember, too, that apps can share data. If you want to store song ratings for Amarok in desktopcouch, don't make that storage Amarok-specific; that way, if I decide to switch to Quod Libet I don't have to re-rate all my songs!&lt;/li&gt;
&lt;li&gt; I'm happy to answer questions about sharing of data between apps if you have them.&lt;/li&gt;
&lt;li&gt; Also, I'll stop now to take some questions about desktopcouch generally.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Questions&lt;/h3&gt;
&lt;ul style="list-style:none;"&gt;
&lt;li&gt; &lt;em&gt;andypiper&lt;/em&gt; QUESTION: what is Quickly....?!&lt;/li&gt;
&lt;li&gt; Quickly is an app that helps you make Ubuntu apps really...quickly&lt;/li&gt;
&lt;li&gt; it takes care of putting together the framework of an application for you, and it makes a deb package for you and uploads the code to launchpad, etc. All the boring stuff that you don't care about when you just want to get your app done&lt;/li&gt;
&lt;li&gt; &lt;a rel="nofollow" target="_blank" href="https://wiki.ubuntu.com/MeetingLogs/devweek1001/I18NYourApp"&gt;the next session, by didrocks, is about quickly&lt;/a&gt;, so I'd stick around for that :-)&lt;/li&gt;
&lt;li&gt; &lt;a rel="nofollow" target="_blank" href="https://wiki.ubuntu.com/Quickly"&gt;https://wiki.ubuntu.com/Quickly&lt;/a&gt; has more&lt;/li&gt;
&lt;li&gt; &lt;em&gt;yltsrc&lt;/em&gt; QUESTION: is available any standard for database name? And how resolve conflicts with different application?&lt;/li&gt;
&lt;li&gt; yltsrc, there isn't a standard, as such, for database names, because what the desktopcouch project is trying to avoid is laying down lots of standards that you Must Comply With&lt;/li&gt;
&lt;li&gt; we're a "rough consensus and running code" sort of group :-)&lt;/li&gt;
&lt;li&gt; the best place to have discussions about that sort of thing is at &lt;a rel="nofollow" target="_blank" href="http://groups.google.com/group/desktop-couchdb"&gt;http://groups.google.com/group/desktop-couchdb&lt;/a&gt; which is the desktopcouch mailing list&lt;/li&gt;
&lt;li&gt; desktopcouch records are deliberately set up to have two sections, a "main section" and an "application specific" section&lt;/li&gt;
&lt;li&gt; so the idea is that apps co-operate on the main section and store app-specific data in the app-specific section&lt;/li&gt;
&lt;li&gt; for example, Evolution contacts sync in Ubuntu One is done by Evolution storing your contact data in desktopcouch&lt;/li&gt;
&lt;li&gt; but the format for a contact has been defined&lt;/li&gt;
&lt;li&gt; and the contacts are stored in a database in desktopcouch called "contacts"&lt;/li&gt;
&lt;li&gt; so Thunderbird, for example, could *also* sync its contacts to that same database, in the same format&lt;/li&gt;
&lt;li&gt; and Evolution stores Evo-specific data (like, say, an internal ID) for a contact record in the app-specific part of the contact record&lt;/li&gt;
&lt;li&gt; and Thunderbird would do the same&lt;/li&gt;
&lt;li&gt; what this means is that if you decide to switch from Evolution to Thunderbird, you've still got your addressbook! You don't have to export it and re-import it every time you move between applications&lt;/li&gt;
&lt;li&gt; &lt;em&gt;yltsrc&lt;/em&gt; QUESTION: U1 require python (2.6). Is any plans to run it on python3?&lt;/li&gt;
&lt;li&gt; I don't believe there is, at the moment, no.&lt;/li&gt;
&lt;li&gt; &lt;em&gt;b1ackcr0w&lt;/em&gt; QUESTION: SpiderOak is said to be going Open Source soon, are there oppertunities to integrate their services with U1?&lt;/li&gt;
&lt;li&gt; There could be, certainly. I haven't looked into that in detail myself, but I'll be sure and bring it up!&lt;/li&gt;
&lt;li&gt; &lt;em&gt;mhall119|work&lt;/em&gt; QUESTION: I want to hack on the server-part of U1, short of becoming a Canonical employee, what can I do?&lt;/li&gt;
&lt;li&gt; At the moment, you can't, I'm afraid. The source code for the server part of file synchronization is closed.&lt;/li&gt;
&lt;li&gt; The source code for the server part of desktopcouch is CouchDB, though, and work on that is perfectly doable.&lt;/li&gt;
&lt;li&gt; We worked closely with the CouchDB upstream project to make sure that all the changes we needed to use CouchDB in Ubuntu One were part of the main CouchDB trunk.&lt;/li&gt;
&lt;li&gt; &lt;em&gt;yltsrc&lt;/em&gt; Is avalably any FEATURE ROADMAP for U1?&lt;/li&gt;
&lt;li&gt; that's...sorta what this talk is :) I can see how it might be useful to have a more formal statement of "what's coming up", though. I'll bring that up with the team.&lt;/li&gt;
&lt;li&gt; &lt;em&gt;yltsrc&lt;/em&gt; QUESTION: is U1 uses dbus? and how i can extend my application to use it?&lt;/li&gt;
&lt;li&gt; Yes. The syncdaemon, which is the bit that handles file synchronization, exposes D-Bus commands for almost everything it does.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Web apps and desktop apps talking via Ubuntu One&lt;/h3&gt;
&lt;ul style="list-style:none;"&gt;
&lt;li&gt; Since desktopcouch is a CouchDB, and since your data is synchronised not only to your other machines but up to the cloud as well, this opens up the intriguing possibility that you can build a web app that can share data with your desktop app.&lt;/li&gt;
&lt;li&gt; Ubuntu One's CouchDB uses OAuth for authentication.&lt;/li&gt;
&lt;li&gt; This means that your web app can ask permission from the user to read your desktop app's CouchDB data directly from Ubuntu One.&lt;/li&gt;
&lt;li&gt; So the data that appears in your desktop app can also be available to that user on the web.&lt;/li&gt;
&lt;li&gt; This is a pretty new area, so nobody's using it yet, but it's possible.&lt;/li&gt;
&lt;li&gt; You use OpenID to log the user in to your web app using Ubuntu One -- you may have seen "log in with Twitter" buttons, or "Facebook Connect", which work on the same principle.&lt;/li&gt;
&lt;li&gt; Once that's done, your web app can then request permission to read the user's CouchDB database to get at the data that your *desktop* app stored there.&lt;/li&gt;
&lt;li&gt; So, if we think about the song ratings example above, you can build a web application that can show all the song ratings that the user has entered and allow them to be edited.&lt;/li&gt;
&lt;li&gt; Your users can then manage their song ratings or playlists or whatever else you've stored directly from a web interface if they're not at their actual computer.&lt;/li&gt;
&lt;li&gt; Sharing data between web apps and desktop apps is quite hard, and not many people are doing it, so this is a chance to offer a feature that no-one else has!&lt;/li&gt;
&lt;li&gt; DesktopCouch plus web apps give you the ability to share that data without you having to do any extra work.&lt;/li&gt;
&lt;li&gt; This also gives you the ability to offer mobile apps as a web interface, so people can work with their data from their smartphone and see their work reflected on their desktop when they get back to it.&lt;/li&gt;
&lt;li&gt; Are there any questions about how linking up desktop apps and web apps would work?&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Questions&lt;/h3&gt;
&lt;ul style="list-style:none;"&gt;
&lt;li&gt; &lt;em&gt;mhall119|work&lt;/em&gt; QUESTION: how does it handle when a file is edited on2 different computers before syncing?&lt;/li&gt;
&lt;li&gt; If that happens, you'll get a .u1-conflict file showing you that there was a conflict, for file synchronization.&lt;/li&gt;
&lt;li&gt; In desktopcouch, there will be a conflict record for the data.&lt;/li&gt;
&lt;li&gt; One of the things that we have on our Big List Of Stuff To Do is some sort of graphical conflict management to make dealing with these situations even easier, but that won't be done for 10.04.&lt;/li&gt;
&lt;li&gt; So at the moment, handling data conflicts is done by the applications that use the data; the applications have a better idea about how to merge/overwrite/handle conflicts than Ubuntu One does most of the time anyway, because Ubuntu One just moves the data around, it doesn't always understand it.&lt;/li&gt;
&lt;li&gt; &lt;em&gt;qense&lt;/em&gt; (late) QUESTION: When you define a UDF outside the Ubuntu One directory, where will it be synced to when you enable/install Ubuntu One on a different computer?&lt;/li&gt;
&lt;li&gt; It'll be synced to the same path, so if you mark ~/myfolder as a UDF on computer 1, it'll appear as ~/myfolder on computer 2.&lt;/li&gt;
&lt;li&gt; &lt;em&gt;duanedesign&lt;/em&gt; QUESTION: Where can I find documentation on the U1 API&lt;/li&gt;
&lt;li&gt; the desktopcouch API is defined (mostly) in the desktopcouch documentation at &lt;a rel="nofollow" target="_blank" href="http://www.freedesktop.org/wiki/Specifications/desktopcouch/Documentation"&gt;http://www.freedesktop.org/wiki/Specifications/desktopcouch/Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; the file sync API isn't defined anywhere yet, I don't believe, because we haven't had a chance to do it, so it's reading the source, I'm afraid. &lt;a rel="nofollow" target="_blank" href="https://wiki.ubuntu.com/UbuntuOne"&gt;https://wiki.ubuntu.com/UbuntuOne&lt;/a&gt; has some details, though.&lt;/li&gt;
&lt;li&gt; &lt;em&gt;emoreno&lt;/em&gt; QUESTION: Is there any way to use a Private Cloud rather than U1 with the same API&lt;/li&gt;
&lt;li&gt; Not at the moment. The protocol that the syncdaemon uses to talk to the cloud isn't secret, though, so it would be possible to implement a private cloud.&lt;/li&gt;
&lt;li&gt; &lt;em&gt;mhall119|work&lt;/em&gt; QUESTION: does U1 offer any kind of versioning on it's data, like the ability to retrieve an older version?&lt;/li&gt;
&lt;li&gt; Not at the moment, no. We've talked about that, but it isn't available now.&lt;/li&gt;
&lt;li&gt; OK, that's a brief tour of what services Ubuntu One can bring to your apps. You can make the files your app uses be synchronised, you can publish those files publically, you can store data from your apps that will be available everywhere, and you can share that data with web applications.&lt;/li&gt;
&lt;li&gt; &lt;em&gt;nealmcb&lt;/em&gt; QUESTION: Re the question on working on the U1 server end - Elliot Murphy recently talked about your open file storage protocol, noted his "build no silos" policy for U1, and talked about e.g. Tomboy integration.  Can you expand on the places that people can work on servers that integrate with U1 protocols?&lt;/li&gt;
&lt;li&gt; desktopcouch is a CouchDB, so it can replicate data with any CouchDB, including other desktopcouches on your LAN -- see the desktopcouch-pair tool for this, in the desktopcouch-tools package -- and so doesn't even need a server at all&lt;/li&gt;
&lt;li&gt; Tomboy notes sync was done by us implementing the Snowy API -- Snowy is a Django server to which you can sync your notes, designed by the Tomboy team, and they're looking at doing their own deployment of it&lt;/li&gt;
&lt;li&gt; &lt;em&gt;qense&lt;/em&gt; QUESTION: Any change there will be a small collection of snippets showcasing webintegration of Ubuntu One?&lt;/li&gt;
&lt;li&gt; if someone does that I'll love them forever. &lt;/li&gt;
&lt;li&gt; I'd certainly like to, it's just finding the time :-)&lt;/li&gt;
&lt;li&gt; OK, if you have other questions, feel free to ping me, or chat on #ubuntuone!&lt;/li&gt;
&lt;/ul&gt;&lt;/a&gt;</description>
         <author>sil</author>
         <guid isPermaLink="false">0b36d196b9e83fe728bf34a46a14a10d_44ac898790945aa650f8b1d9e9f530c6</guid>
         <pubDate>Tue, 26 Jan 2010 10:11:08 -0800</pubDate>
      </item>
      <item>
         <title>PyCon sprint to get Ubuntu One on Windows</title>
         <link>http://www.kryogenix.org/days/2010/01/22/pycon-sprint-to-get-ubuntu-one-on-windows</link>
         <description>&lt;p&gt;More than one person has said: Ubuntu One seems good but I need it to work on Windows too. Well, y'know, the roar of the people is not to be denied. Lucio Torre and some of the Ubuntu One team are going to be running &lt;a rel="nofollow" target="_blank" href="http://us.pycon.org/2010/sprints/projects/ubuntuone/"&gt;a sprint at PyCon to port Ubuntu One file sharing to Windows&lt;/a&gt;. If you'd like that and you could help out, add your name to the sprint page!&lt;/p&gt;</description>
         <author>sil</author>
         <guid isPermaLink="false">0b36d196b9e83fe728bf34a46a14a10d_e76d777e7b299a4c88a34b793a2f7aa1</guid>
         <pubDate>Fri, 22 Jan 2010 08:57:49 -0800</pubDate>
      </item>
      <item>
         <title>Workus interruptus</title>
         <link>http://www.kryogenix.org/days/2010/01/17/workus-interruptus</link>
         <description>&lt;p&gt;Yesterday I had to go to hospital (no worries, I'm recovering). But, between operation and antibiotics and fever, I've been bizarrely ill and not ill, this weekend. I feel perfectly normal for two hours, and then I have to go and sleep or shiver in bed despite being boiling hot or whatever. So, since all knowledge is useful, in my lucid&lt;span style="color:red;" title="that's as in awake, not as in Ubuntu. I'm still running karmic"&gt;*&lt;/span&gt; moments, I've been conducting an experiment, starting with this hypothesis:&lt;/p&gt;

&lt;blockquote&gt;If you're going to work eight hours in a day, it's better to work in lots of small blocks with lots of long breaks between those blocks, rather than working a solid eight hours and then having the evening off.&lt;/blockquote&gt;

&lt;p&gt;The intuitive answer is obviously that that won't work, at least not in my job -- there have been reams and reams written about how getting into "the zone" is the most productive time for hacking, and taking breaks (or phone calls) knocks you out of "the zone" and stops you getting as much done. This seemed like an ideal time to test that theory. Progress is made by challenging the status quo&lt;span style="color:red;" title="not Status Quo"&gt;*&lt;/span&gt;, after all.&lt;/p&gt;

&lt;p&gt;Well, I can report that the prevailing theory is right, and I am no Galileo breaking down the paradigm and ushering in a new theory of work. Every time I get into something, I have to stop and go and pathetically lie down and recover. Now, it's possible that I just can't concentrate because I'm not well, I admit it (so don't go basing any psychology Ph.Ds on this observation), but it's become reasonably clear to me that this interruption-based approach to work...doesn't work. So, as you were.&lt;/p&gt;</description>
         <author>sil</author>
         <guid isPermaLink="false">0b36d196b9e83fe728bf34a46a14a10d_82d863053617633b61904241425e372c</guid>
         <pubDate>Sun, 17 Jan 2010 10:22:40 -0800</pubDate>
      </item>
      <item>
         <title>A thousand elephants, er, fans</title>
         <link>http://www.kryogenix.org/days/2010/01/13/a-thousand-elephants-er-fans</link>
         <description>&lt;p&gt;Blimey. Credit where credit's due, &lt;a rel="nofollow" target="_blank" href="http://www.jonobacon.org"&gt;Jono&lt;/a&gt; set a target of &lt;a rel="nofollow" target="_blank" href="http://shotofjaq.org"&gt;Shot of Jaq&lt;/a&gt; getting a thousand Facebook fans in a week, and in the privacy of my head I sneered at him and figured it wouldn't happen.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.kryogenix.org/random/soj_1000.png" alt=""&gt;&lt;/p&gt;

&lt;p&gt;It's great to see that another thousand people have joined the conversation. Who's next? :)&lt;/p&gt;</description>
         <author>sil</author>
         <guid isPermaLink="false">0b36d196b9e83fe728bf34a46a14a10d_0d028c544434a408bc9f8001c1c6e313</guid>
         <pubDate>Wed, 13 Jan 2010 15:49:34 -0800</pubDate>
      </item>
      <item>
         <title>Sanitising HTML</title>
         <link>http://www.kryogenix.org/days/2010/01/10/sanitising-html</link>
         <description>&lt;p&gt;It was pointed out to me that comments on my old posts were showing as raw HTML (you know, a sort of &amp;lt;p&amp;gt;this is a comment&amp;lt;/p&amp;gt; sort of thing). I knew this. However, the reason it was like that is because it occurred to me about five minutes after releasing thort, the engine that now runs this place, that comment HTML was just displayed. Unsanitised.&lt;/p&gt;

&lt;p&gt;Cross-site scripting, anyone? Oops.&lt;/p&gt;

&lt;p&gt;So I just threw an "escape" filter into my comment template (which uses the great &lt;a rel="nofollow" target="_blank" href="http://code.google.com/p/trimpath/wiki/JavaScriptTemplates"&gt;Trimpath JavaScript templating engine&lt;/a&gt;) so that I couldn't be brutally pwnt by anyone posting a comment.&lt;/p&gt;

&lt;p&gt;Finally this evening I thought: I'd better do something about that. Two minutes of Googling brought me to &lt;a rel="nofollow" target="_blank" href="http://lahosken.san-francisco.ca.us/new/2008/12/link-cajas-html-sanitizer-for.html"&gt;Caja's HTML sanitizer&lt;/a&gt;, written in JavaScript. It was the work of but a moment to throw that into &lt;a rel="nofollow" target="_blank" href="http://svn.kryogenix.org/svn/thort/thort/views/posts_and_comments/map.js"&gt;the CouchDB view that generates comments&lt;/a&gt; so that outputted comment HTML was sanitized. It was the work of but one more moment to also throw that into the client-side JavaScript that displays a posted comment. It's really nice being able to use exactly the same code on client and server.&lt;/p&gt;</description>
         <author>sil</author>
         <guid isPermaLink="false">0b36d196b9e83fe728bf34a46a14a10d_7345a446c880e19f66b46eadcc5f4cb2</guid>
         <pubDate>Sun, 10 Jan 2010 14:42:51 -0800</pubDate>
      </item>
      <item>
         <title>If I had a phone</title>
         <link>http://www.kryogenix.org/days/2010/01/10/if-i-had-a-phone</link>
         <description>&lt;p&gt;See, what I want out of a phone is this: it should be a solid, featureless shiny black block. Look like it's made of black ice, or quartz, or black glass, something like that. With no external buttons or connectors at all. None. Then when you pick it up the screen lights up, and it's all touch controlled.&lt;/p&gt;

&lt;p&gt;That'd be brilliant, that would.&lt;/p&gt;

&lt;p&gt;I can hear you saying: it's gotta have external connections. And you are, I believe, wrong.&lt;/p&gt;

&lt;dl&gt;
  &lt;dt&gt;How do I charge it?&lt;/dt&gt;
  &lt;dd&gt;Induction charging, like the &lt;a rel="nofollow" target="_blank" href="http://www.palm.com/us/products/accessories/touchstone-bundle.html"&gt;Palm Touchstone&lt;/a&gt;. Also, have the battery &lt;a rel="nofollow" target="_blank" href="http://www.engadget.com/2010/01/09/airnergy-wifi-power-system-gives-rca-a-reason-to-exist-video/"&gt;charge off wifi&lt;/a&gt;, assuming that that isn't complete lies.&lt;/dd&gt;
  &lt;dt&gt;How do I change the battery?&lt;/dt&gt;
  &lt;dd&gt;You don't, just like an iPod. It's sealed inside.&lt;/dd&gt;
  &lt;dt&gt;How do I turn it on if it's off?&lt;/dt&gt;
  &lt;dd&gt;Haven't worked this one out yet, but it's surely not beyond the wit of man. Shaking it would probably work.&lt;/dd&gt;
  &lt;dt&gt;How do I plug it into the computer?&lt;/dt&gt;
  &lt;dd&gt;Well, first of all, do you need to? Store all your stuff online. Yes, yes, copying songs onto it, assuming you actually have a personal music library rather than just using online storage, but even then with the new fast Bluetooth stuff, I'm not sure it's that critical to have a USB cable. Also, wifi. Why can't it be a server? Just copy stuff onto it over, I don't know, webdav or something. Maybe you could do USB over induction, too.&lt;/dd&gt;
  &lt;dt&gt;How do the company build it if it's one solid piece?&lt;/dt&gt;
  &lt;dd&gt;What do I look like, an engineer? If you can build a Lamborghini Gallardo this must be possible. Presumably you could build all the internals, put them in a mould shaped like the phone, and then pour molten lucite over it or something similar.&lt;/dd&gt;
  &lt;dt&gt;How do you get the SIM card into it?&lt;/dt&gt;
  &lt;dd&gt;Now this one I have not worked out, I admit it. Suggestions welcomed, some of which might include "just use Skype over wifi and don't care about a mobile carrier".&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;Of course, this is just pointless whining since it won't happen, unless Nokia employ me as Head of Design. It is a source of constant frustration for me and probably for you too that it is not possible to do in hardware what we can do in software. I think of things that I want all the time and it's just flat out not doable to make them. Hardware manufacturers of the world, you are letting me down egregiously. When we're in the future, I don't want my jetpack, I want affordable one-off creation of hardware items. Where's my replicator?&lt;/p&gt;</description>
         <author>sil</author>
         <guid isPermaLink="false">0b36d196b9e83fe728bf34a46a14a10d_1c86a23070ddf743650786f5b7136040</guid>
         <pubDate>Sun, 10 Jan 2010 12:01:21 -0800</pubDate>
      </item>
      <item>
         <title>HTML 5 theme</title>
         <link>http://www.kryogenix.org/days/2010/01/03/html-5-theme</link>
         <description>&lt;p&gt;And so we move to HTML 5. Well, in theory, at least. I've been meaning to redesign the theme here to look a bit more minimal, and I've also been meaning to move to HTML5, so clearly I needed to take advantage of the last dying embers of my Christmas holiday time to do that rather than anything, y'know, constructive.&lt;/p&gt;

&lt;p&gt;Useful help from &lt;a rel="nofollow" target="_blank" href="http://www.brucelawson.co.uk/2009/redesigning-with-html-5-wai-aria/"&gt;Bruce Lawson&lt;/a&gt;, as ever, and I think I've got the hang of it. I suspect it doesn't work right in IE, but, well, I don't actually care all that much, to be honest. (I'm using &lt;a rel="nofollow" target="_blank" href="http://remysharp.com/2009/01/07/html5-enabling-script/"&gt;Remy's HTML5 shim&lt;/a&gt;, though.)&lt;/p&gt;

&lt;p&gt;HTML5 is actually pretty nice, too. It makes sense to me in a good and useful way. I like &amp;lt;article&amp;gt; as a way of categorising stuff.&lt;/p&gt;</description>
         <author>sil</author>
         <guid isPermaLink="false">0b36d196b9e83fe728bf34a46a14a10d_a451165316b5533fe92b6c1c2f284daa</guid>
         <pubDate>Sun, 03 Jan 2010 12:31:58 -0800</pubDate>
      </item>
      <item>
         <title>Migrating this weblog to CouchDB</title>
         <link>http://www.kryogenix.org/days/2009/12/23/migrating-this-weblog-to-couchdb</link>
         <description>&lt;p&gt;I've been meaning for ages to actually get around to migrating this weblog to use CouchDB. I &lt;a rel="nofollow" target="_blank" href="http://www.kryogenix.org/days/2009/09/13/not-moving-to-sofa-or-moving-from-the-sofa"&gt;looked a while back&lt;/a&gt; at jchris's &lt;a rel="nofollow" target="_blank" href="http://github.com/jchris/sofa"&gt;Sofa&lt;/a&gt; weblog engine on CouchDB and didn't like it, so I built my own. It's called "thort" ('cos it's for publishing your thorts, ahaha, see what I did there?), and it'll end up on Launchpad once I get around to writing up some decent instructions on how anyone who isn't me can use it. Things I like about it: it's got proper URLs, not horrid Couch URLs (love Apache proxying, yes I do), I wrote a Yahoo Pipe to take the outputted JSON and convert it to RSS so I don't have to worry about XML validity (this might cause my posts to all appear anew in your RSS reader; sorry about that if so), and it's really, really, really fast compared to Wordpress.

Of course, it's really fast compared to Wordpress because it does one-ninetieth of what Wordpress does. Still, there you go.

Let's see if this dies, eh?</description>
         <author>sil</author>
         <guid isPermaLink="false">0b36d196b9e83fe728bf34a46a14a10d_eab7119df69aecc7cee25c26b84d46cf</guid>
         <pubDate>Tue, 22 Dec 2009 22:39:49 -0800</pubDate>
      </item>
      <item>
         <title>Desktopcouch on Windows/Mac</title>
         <link>http://www.kryogenix.org/days/2009/12/15/desktopcouch-on-windowsmac</link>
         <description>One of the things that I'd really like to see is &lt;a rel="nofollow" target="_blank" href="http://www.freedesktop.org/wiki/Specifications/desktopcouch"&gt;desktopcouch&lt;/a&gt; on Windows and the Mac, so that your data can be everywhere, on all your machines. Now, I don't know enough about those platforms to actually do it, but I'd be happy to help anyone who was interested in making it happen; here are some thoughts on what'd be required, and do please chip in here with questions, or ask me or others on the &lt;code&gt;#ubuntuone&lt;/code&gt; IRC channel on &lt;code&gt;irc.freenode.net&lt;/code&gt;.

Desktop Couch, for those of you who aren't sure, is a personal CouchDB that your apps can store their data in. It's secured for you alone, and it comes with a built-in replication setup, so two desktopcouches on the same network can exchange data. This means that if your applications store their data in desktopcouch &amp;mdash; for example, Bindwood, our Firefox extension to store your bookmarks there &amp;mdash; then all the machines on your network can exchange that data, meaning that adding a bookmark on one of your machines will automatically add it on the others, without you having to do anything, and without you having to sign up to some third-party service to make that happen. It'll all work on your local network. (It can also work via a third-party service &amp;mdash; Ubuntu One is such a service, and there could be others, as long as they deploy CouchDB in the cloud &amp;mdash; so that machines on different networks can also exchange data.)

&lt;h3&gt;CouchDB&lt;/h3&gt;

The first thing you need to have, to get a personal CouchDB, is CouchDB. I know the &lt;a rel="nofollow" target="_blank" href="https://mozillalabs.com/raindrop"&gt;Mozilla Raindrop&lt;/a&gt; team have done some work getting CouchDB nice and robust and working on Windows, and I believe they have an installer. Working with that would be very cool indeed. (Indeed, it's possible for &lt;a rel="nofollow" target="_blank" href="http://www.kryogenix.org/days/2009/10/23/running-raindrop-on-ubuntu-9-10-using-desktop-couch"&gt;Raindrop to use desktopcouch&lt;/a&gt; if you have it, so that might be an interesting test!)

&lt;h3&gt;On-demand startup and port numbers (or, what's your D-Bus?)&lt;/h3&gt;

Desktopcouch is started on demand, when the first application requires it, rather than running all the time even when you don't need it. Because it is a &lt;em&gt;personal&lt;/em&gt; CouchDB, and because there might be more than one user on the machine that you're on, it can't run on a specific port number; instead, you ask desktopcouch for its port number when you want it, and asking that question starts it up on a randomly-chosen port if it's not already running. The way this is done on Ubuntu (and other Linuxes) is with D-Bus, which is a Linux-specific IPC mechanism. It's possible to use D-Bus on other platforms, but a much better way would be to use your platform's specific way of passing messages to a service and starting a service if it's not already running. (This is one of the things I don't know how to do on other platforms. Would Macs use launchd or something? Should a Windows service be running on startup? I don't know.) Desktopcouch only uses D-Bus for these two things ("what's your port number" and "start this service if it's not already running"), so replacing those sections with a native way of doing that on Windows/Mac would be reasonably easy and make it fit in much better with the Right Way of doing things on that platform; these changes would need to be made both in desktopcouch itself, and in APIs (desktopcouch.records) that connect to desktopcouch.

&lt;h3&gt;Where are the keys? (or, no gnome-keyring on Windows)&lt;/h3&gt;

Because desktopcouch is a personal CouchDB, access to it is secured by OAuth. When desktopcouch is first set up, it randomly generates a set of OAuth tokens, and these are stored in the Gnome keyring on Ubuntu. Obviously, it would be better to use the platform's own way of storing authentication data; I believe the Mac has a "keychain", and Windows surely has something similar. Again, this would need changing in desktopcouch itself (to store the keys in the right place), and in desktopcouch.records (to retrieve the keys from that place to use them).

&lt;h3&gt;And that's it&lt;/h3&gt;

With those changes in place, desktopcouch should run on another platform, meaning that you can exchange data between all your apps on all your machines. We're already getting some sterling work done to see desktopcouch on other Linux distributions and on phones like the Nokia N900 (hooray for &lt;a rel="nofollow" target="_blank" href="http://thomas.apestaart.org/log/?p=1086"&gt;Thomas&lt;/a&gt;, among others!). I'd really like to see this happen on Windows and Mac too; are you interested in helping make it happen? Let me know, and I'll give you all the help you need!</description>
         <author>sil</author>
         <guid isPermaLink="false">0b36d196b9e83fe728bf34a46a14a10d_942474fa7d9a7962addebe0128690c0f</guid>
         <pubDate>Tue, 15 Dec 2009 05:39:04 -0800</pubDate>
      </item>
   </channel>
</rss><!-- fe12.pipes.sp1.yahoo.com uncompressed/chunked Tue Feb  9 06:23:44 PST 2010 -->
