<?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>Sat, 20 Mar 2010 02:25:30 -0700</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>Not a lawyer any more</title>
         <link>http://www.kryogenix.org/days/2010/03/11/not-a-lawyer-any-more</link>
         <description>&lt;p&gt;So &lt;a rel="nofollow" target="_blank" href="http://www.nakedlaw.com/2010/03/gas-case-more-fuel-for-supplier-fears.html"&gt;according to Naked Law&lt;/a&gt;, the technology blog for the law firm I used to work for, Centrica contracted Accenture to write some software, and that software turned out not to work like they wanted. The court found Accenture liable for around u00a329 million. The lawyer response?&lt;/p&gt;

&lt;blockquote&gt;[This] demonstrates how widely the Courts are willing to interpret 'direct loss'. This will comfort the customer, but IT suppliers may want to consider strengthening their liability clauses.&lt;/blockquote&gt;

&lt;p&gt;Or, y'know, &lt;strong&gt;writing software that doesn't suck&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is why I no longer work for lawyers.&lt;/p&gt;</description>
         <author>sil</author>
         <guid isPermaLink="false">0b36d196b9e83fe728bf34a46a14a10d_dcec7d42cfdd31773f8165845e3b4a49</guid>
         <pubDate>Thu, 11 Mar 2010 13:36:11 -0800</pubDate>
      </item>
      <item>
         <title>Writing a Rhythmbox plugin</title>
         <link>http://www.kryogenix.org/days/2010/03/03/writing-a-rhythmbox-plugin</link>
         <description>&lt;p&gt;Yesterday, as part of Ubuntu Opportunistic Developer Week, I did an IRC talk about writing a (basic) Rhythmbox plugin in Python.&lt;/p&gt;

&lt;p&gt;You can see the talk, the slides, and the plugin at &lt;a rel="nofollow" target="_blank" href="http://www.kryogenix.org/code/RBMicroBlog/"&gt;http://www.kryogenix.org/code/RBMicroBlog/&lt;/a&gt;.&lt;/p&gt;</description>
         <author>sil</author>
         <guid isPermaLink="false">0b36d196b9e83fe728bf34a46a14a10d_1fba73e6db8710343414fde9560842c6</guid>
         <pubDate>Wed, 03 Mar 2010 13:29:36 -0800</pubDate>
      </item>
      <item>
         <title>More desktopcouch tips and tricks</title>
         <link>http://www.kryogenix.org/days/2010/03/03/more-desktopcouch-tips-and-tricks</link>
         <description>&lt;p&gt;Manuel is at it again, with a &lt;a rel="nofollow" target="_blank" href="http://www.themacaque.com/?p=517"&gt;second round of desktopcouch tips and tricks&lt;/a&gt;. He's building up quite a library of stuff over there. Now hopefully I can persuade him to link them from the &lt;a rel="nofollow" target="_blank" href="http://www.freedesktop.org/wiki/Specifications/desktopcouch/Documentation"&gt;desktopcouch documentation&lt;/a&gt;...&lt;/p&gt;</description>
         <author>sil</author>
         <guid isPermaLink="false">0b36d196b9e83fe728bf34a46a14a10d_8aabfbcb4a958f4d4b7eca13e0d423d8</guid>
         <pubDate>Wed, 03 Mar 2010 15:51:17 -0800</pubDate>
      </item>
      <item>
         <title>Browsing my Android phone over wifi at home</title>
         <link>http://www.kryogenix.org/days/2010/03/03/browsing-my-android-phone-over-wifi-at-home</link>
         <description>&lt;p&gt;Having to plug my Android phone into my computer via USB so that I can copy new files onto it is a pain. So I thought to myself: it's got wifi, right? Can't I just run an ftp server on it?&lt;/p&gt;

&lt;p&gt;And, lo, I discovered On Air. Cool Android app; it's got One Massive Button and that's it. The One Massive Button just turns on a file server and exports it over the network.&lt;/p&gt;

&lt;p&gt;(Actually, I lied. There's also &lt;small&gt;one tiny button&lt;/small&gt; which toggles the type of server between FTP, WebDav, and AppleTalk. So I set it to FTP, since that's easy to connect to from Nautilus -- Places &amp;gt; Connect to Server &amp;gt; FTP (with login). On Air displays the IP address of the phone, and a randomly generated 4-digit password.)&lt;/p&gt;

&lt;p&gt;So, that's all I need; I can now browse my phone without plugging it into the computer.&lt;/p&gt;

&lt;p&gt;Then I got to thinking. It'd be dead handy if that &lt;em&gt;automatically&lt;/em&gt; got started up when I was (a) at home and (b) the phone was plugged into the mains (because I don't want it being a server while I'm wandering around my house, and the mains plug is near the computer). A bit more poking around led me to Locale, an Android app which lets you watch for certain conditions (like geographical location, charge state, and so on) and then take certain actions when the conditions are triggered. Seemed ideal. But Locale is $10, and the "am I in a certain place" trigger was another dollar, and "am I plugged in" was another dollar, and I thought: yeah, $12 isn't much, but I don't really need this, so maybe I'll do without.&lt;/p&gt;

&lt;p&gt;And then @michaelwells &lt;a rel="nofollow" target="_blank" href="http://twitter.com/michaelwells/status/9942693294"&gt;pointedout&lt;/a&gt; on Twitter that the "Setting Profiles" app might help. So I took a look, and basically, it's Locale, but free. Nice.&lt;/p&gt;

&lt;p&gt;So, install Setting Profiles, set up a "rule" with conditions "connected to my home wifi" and "charger is plugged in", and an "action" of "start On Air". Done.&lt;/p&gt;

&lt;p&gt;I'm really quite pleased with tying those things together.&lt;/p&gt;

&lt;p&gt;Minor complaints, because nothing is perfect (perfection is finality. finality is death. nothing is perfect. there are lumps in it)&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;I wish On Air had a "start up the server automatically" setting, thus obviating the need to press the One Big Button.&lt;/li&gt;
  &lt;li&gt;I wish On Air advertised its FTP server with Zeroconf. (Probably it doesn't need to for the author's Mac use case because AppleTalk servers already do that without Bonjour?)&lt;/li&gt;
  &lt;li&gt;Settings Profiles doesn't show up in my apps list! That's really quite weird. To start it I have to go back into the Market, choose Downloads, and then  start it from there. I'd file a bug, but there doesn't seem to be any useful way of doing that. How am I meant to do this? Leave a comment on the app in the Market?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://market.android.com/search?q=pname:com.probeez.liteprofiles"&gt;Settings Profiles&lt;/a&gt; (&lt;a rel="nofollow" target="_blank" href="http://www.probeez.com/?p=11"&gt;website&lt;/a&gt;) &lt;img src="http://chart.apis.google.com/chart?cht=qr&amp;chs=100x100&amp;chl=http://cyrket.com/qr/58709"&gt;&lt;/p&gt;

&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.cyrket.com/p/android/com.bw.onair/"&gt;On Air&lt;/a&gt; &lt;img src="http://chart.apis.google.com/chart?cht=qr&amp;chs=100x100&amp;chl=http://cyrket.com/qr/15777"&gt;&lt;/p&gt;</description>
         <author>sil</author>
         <guid isPermaLink="false">0b36d196b9e83fe728bf34a46a14a10d_3e0171201a1acdd14693d0c6824120c4</guid>
         <pubDate>Wed, 03 Mar 2010 15:19:53 -0800</pubDate>
      </item>
      <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>
   </channel>
</rss><!-- fe12.pipes.sp1.yahoo.com uncompressed/chunked Sat Mar 20 02:25:29 PDT 2010 -->
