<?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:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>This is ZX81.org.uk</title>
	
	<link>http://www.zx81.org.uk</link>
	<description>Photography, opinions and other random ramblings by Stephen Darlington</description>
	<lastBuildDate>Sun, 25 Jul 2010 11:42:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<feedburner:info uri="zx81orguk" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://www.zx81.org.uk/feed/" /><feedburner:emailServiceId>zx81orguk</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Fwww.zx81.org.uk%2Ffeed%2F" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Fwww.zx81.org.uk%2Ffeed%2F" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Fwww.zx81.org.uk%2Ffeed%2F" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://www.zx81.org.uk/feed/" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Fwww.zx81.org.uk%2Ffeed%2F" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Fwww.zx81.org.uk%2Ffeed%2F" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Fwww.zx81.org.uk%2Ffeed%2F" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><item>
		<title>Sky-High</title>
		<link>http://feedproxy.google.com/~r/zx81orguk/~3/wIsteNAg4Zk/sky-high.html</link>
		<comments>http://www.zx81.org.uk/photography/photofriday/sky-high.html#comments</comments>
		<pubDate>Sun, 25 Jul 2010 11:42:10 +0000</pubDate>
		<dc:creator>Stephen Darlington</dc:creator>
				<category><![CDATA[PhotoFriday]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[Travel]]></category>
		<category><![CDATA[uk]]></category>

		<guid isPermaLink="false">http://www.zx81.org.uk/?p=2181</guid>
		<description><![CDATA[This weeks PhotoFriday theme is "Sky-High." Here is my entry.


Related posts:<ol><li><a href='http://www.zx81.org.uk/photography/photofriday/high-speed.html' rel='bookmark' title='Permanent Link: High Speed'>High Speed</a></li>
<li><a href='http://www.zx81.org.uk/photography/photofriday/damaged.html' rel='bookmark' title='Permanent Link: Damaged'>Damaged</a></li>
<li><a href='http://www.zx81.org.uk/photography/photofriday/blurred.html' rel='bookmark' title='Permanent Link: Blurred'>Blurred</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[						<div class="flickr-gallery image none"><a href="http://www.flickr.com/photos/stephendarlington/4826061135"><img class="flickr medium" title="Flying into London" alt="Flying into London" src="http://farm5.static.flickr.com/4135/4826061135_c892dc685a.jpg" /></a></div>
					
<p>This weeks PhotoFriday theme is &#8220;<a href="http://www.photofriday.com/archives/challenge/001000.php">Sky-High</a>.&#8221; My first thought was a picture from a plane but then I thought it was likely to be a bit of a clich&eacute;. Bizarrely I didn&#8217;t see many other entrants with the same idea so I went with the above image, taken on my iPhone landing back in London.</p>
<p>Please also vote for <a href="http://www.zx81.org.uk/photography/photofriday/summer-fun.html">my entry</a> in last weeks challenge, &#8220;<a href="http://www.photofriday.com/linkviewer.php?id=997">Summer Fun</a>.&#8221; I&#8217;m entry number 279.</p>


<p>Related posts:<ol><li><a href='http://www.zx81.org.uk/photography/photofriday/high-speed.html' rel='bookmark' title='Permanent Link: High Speed'>High Speed</a></li>
<li><a href='http://www.zx81.org.uk/photography/photofriday/damaged.html' rel='bookmark' title='Permanent Link: Damaged'>Damaged</a></li>
<li><a href='http://www.zx81.org.uk/photography/photofriday/blurred.html' rel='bookmark' title='Permanent Link: Blurred'>Blurred</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/zx81orguk?a=wIsteNAg4Zk:bc5tML7vFcY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/zx81orguk?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=wIsteNAg4Zk:bc5tML7vFcY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=wIsteNAg4Zk:bc5tML7vFcY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=wIsteNAg4Zk:bc5tML7vFcY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=wIsteNAg4Zk:bc5tML7vFcY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=wIsteNAg4Zk:bc5tML7vFcY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=wIsteNAg4Zk:bc5tML7vFcY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=wIsteNAg4Zk:bc5tML7vFcY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=wIsteNAg4Zk:bc5tML7vFcY:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/zx81orguk/~4/wIsteNAg4Zk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.zx81.org.uk/photography/photofriday/sky-high.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.zx81.org.uk/photography/photofriday/sky-high.html</feedburner:origLink></item>
		<item><title>8-Bit Cities [del.icio.us]</title><link>http://feedproxy.google.com/~r/zx81orguk/~3/J6ipFkkpLYE/map</link><category>maps graphics design games art</category><dc:creator>stephendarlington</dc:creator><pubDate>Sat, 24 Jul 2010 09:55:51 PDT</pubDate><guid isPermaLink="false">http://8bitcity.com/map?London#</guid><description>This is awesome: maps of cities in the style of 1980&amp;#039;s video games.&lt;img src="http://feeds.feedburner.com/~r/zx81orguk/~4/J6ipFkkpLYE" height="1" width="1"/&gt;</description><taxo:topics xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
      <rdf:Bag xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/maps" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/graphics" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/design" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/games" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/art" />
      </rdf:Bag>
    </taxo:topics><feedburner:origLink>http://8bitcity.com/map?London#</feedburner:origLink></item><item>
		<title>Delicious Debrief (Part 5/5)</title>
		<link>http://feedproxy.google.com/~r/zx81orguk/~3/6aod7yf6viI/delicious-debrief-5.html</link>
		<comments>http://www.zx81.org.uk/computing/opinion/delicious-debrief-5.html#comments</comments>
		<pubDate>Fri, 23 Jul 2010 19:26:21 +0000</pubDate>
		<dc:creator>Stephen Darlington</dc:creator>
				<category><![CDATA[Opinion]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://www.zx81.org.uk/?p=2155</guid>
		<description><![CDATA[Developing iPhone software isn't all sex, drugs and rock and roll. Sometime you have to make difficult changes because of things outside your control. Here is part five of my story from late last year.


Related posts:<ol><li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-part-15.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 1/5)'>Delicious Debrief (Part 1/5)</a></li>
<li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-2.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 2/5)'>Delicious Debrief (Part 2/5)</a></li>
<li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-4.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 4/5)'>Delicious Debrief (Part 4/5)</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<h3>The story so far</h3>
<p>Last year Yahoo! announced, with no notice, a significant change that had far reaching consequences for all third party applications including my iPhone program, Yummy. This is the third in a series of posts that discusses how I dealt with it.</p>
<p>We&#8217;ve already talked about most of the work, starting with an <a href="http://www.zx81.org.uk/computing/opinion/delicious-debrief.html">overview</a>, <a href="http://www.zx81.org.uk/computing/opinion/delicious-debrief-2.html">the announcement, the low level technical challenges</a> and the implementation (<a href="http://www.zx81.org.uk/computing/opinion/delicious-debrief-3.html">technical</a> and <a href="http://www.zx81.org.uk/computing/opinion/delicious-debrief-4.html">UI</a>). All that remains it to launch it, and that&#8217;s what we&#8217;re going to talk about today.</p>
<h3>Availability</h3>
<p>I switched my own Delicious account over to use my Yahoo! ID to shake out as many bugs as possible and I&#8217;d already had a few emails from people asking if they could help, so by the time I submitted the update to Apple it was in pretty good shape. </p>
<p>It launched on 13 December 2009, simultaneously for the full version and Yummy Browser. I decided against holding back for the free version.</p>
<p>Despite the volume of code that had changed, I decided to call is a &#8220;point&#8221; update (moving from version 2.3.1 to 2.3.2) because it didn&#8217;t really add any new user-level features. In hindsight maybe I should have made more of a fuss over it, since it was the first &#8212; and is still the only &#8212; Delicious iPhone app that supported Yahoo! IDs. But it felt wrong to kick my competitors over something that was just as outside their control as mine<sup>1</sup>.</p>
<h3>Lessons</h3>
<p>So what have we learned through all this process?</p>
<p>I&#8217;ve learned how vulnerable Yummy is to outside influence. I had been planning a new feature release before the end of last year but this slipped until the first quarter of 2010 because of all the work that I have outlined above. I&#8217;m glad that I&#8217;ve kept &#8220;agile&#8221; (an overused word in the software industry), sticking to relatively small and frequent releases as this made it much easier to change from one feauture set (mostly what you see in the current Yummy 2.4 release) to another (OAuth).</p>
<p>But I think most of the lessons need to be taken on the other side, by Yahoo! From my point of view there were multiple failures:</p>
<ol>
<li>No notice. It was impossible to have an application ready for day zero as we just didn&#8217;t know that a change was coming</li>
<li>No documentation. Even when we found out about the change there was little to no documentation about how to make the change</li>
<li>No concessions to desktop apps. It just is not possible to write a desktop application<sup>2</sup> with a fluid, easy to use UI. OAuth works nicely for web apps but not so well for desktop (and mobile) ones. Twitter is pushing forward with xAuth which solves this problem. It&#8217;s not yet standardised, which is a problem, but guaranteeing a poor user experience is hardly a winning strategy either</li>
<li>No transition. When Twitter moved from basic auth to OAuth<sup>3</sup>, both systems worked for over a year. This meant that there was no single, big switch over. True, they incentivised new apps to use the new scheme and the end of basic auth is going to orphan a bunch of apps but, still, there has been a year when developers can transition from one scheme to the other. For Delicious this change happened overnight, but not for all users. Instead we have to support both schemes and with no obvious method of knowing which one to use in advance</li>
</ol>
<p>Luckily Yahoo! seem to have noticed the pain that their development community have been put through. They have since (albeit very recently) tried to get a handle on who is developing what against their APIs. Quite how they&#8217;ll use that information is anyones guess but it&#8217;s certainly a step in the right direction.</p>
<ol class="footnotes"><li id="footnote_0_2155" class="footnote">Six months later and with no updates from any of them I&#8217;m feeling less charitable!</li><li id="footnote_1_2155" class="footnote">By &#8220;desktop&#8221; I mean something that doesn&#8217;t run in a web browser. iPhone apps in this sense are &#8220;desktop&#8221; applications.</li><li id="footnote_2_2155" class="footnote">Past tense as, while this process is still ongoing, it will be complete shortly.</li></ol>

<p>Related posts:<ol><li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-part-15.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 1/5)'>Delicious Debrief (Part 1/5)</a></li>
<li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-2.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 2/5)'>Delicious Debrief (Part 2/5)</a></li>
<li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-4.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 4/5)'>Delicious Debrief (Part 4/5)</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/zx81orguk?a=6aod7yf6viI:1n0pUvMq5Do:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/zx81orguk?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=6aod7yf6viI:1n0pUvMq5Do:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=6aod7yf6viI:1n0pUvMq5Do:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=6aod7yf6viI:1n0pUvMq5Do:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=6aod7yf6viI:1n0pUvMq5Do:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=6aod7yf6viI:1n0pUvMq5Do:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=6aod7yf6viI:1n0pUvMq5Do:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=6aod7yf6viI:1n0pUvMq5Do:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=6aod7yf6viI:1n0pUvMq5Do:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/zx81orguk/~4/6aod7yf6viI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.zx81.org.uk/computing/opinion/delicious-debrief-5.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.zx81.org.uk/computing/opinion/delicious-debrief-5.html</feedburner:origLink></item>
		<item><title>iPhone 4 - Case Program [del.icio.us]</title><link>http://feedproxy.google.com/~r/zx81orguk/~3/xm9LSERKLvE/</link><category>apple iphone radio</category><dc:creator>stephendarlington</dc:creator><pubDate>Fri, 23 Jul 2010 07:06:33 PDT</pubDate><guid isPermaLink="false">http://www.apple.com/iphone/case-program/</guid><description>I&amp;#039;ve not had any reception problems with mine but I&amp;#039;m not one to pass up free stuff...&lt;img src="http://feeds.feedburner.com/~r/zx81orguk/~4/xm9LSERKLvE" height="1" width="1"/&gt;</description><taxo:topics xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
      <rdf:Bag xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/apple" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/iphone" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/radio" />
      </rdf:Bag>
    </taxo:topics><feedburner:origLink>http://www.apple.com/iphone/case-program/</feedburner:origLink></item><item>
		<title>Delicious Debrief (Part 4/5)</title>
		<link>http://feedproxy.google.com/~r/zx81orguk/~3/emMnyJCyYmw/delicious-debrief-4.html</link>
		<comments>http://www.zx81.org.uk/computing/opinion/delicious-debrief-4.html#comments</comments>
		<pubDate>Thu, 22 Jul 2010 19:23:22 +0000</pubDate>
		<dc:creator>Stephen Darlington</dc:creator>
				<category><![CDATA[Opinion]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://www.zx81.org.uk/?p=2154</guid>
		<description><![CDATA[Developing iPhone software isn't all sex, drugs and rock and roll. Sometime you have to make difficult changes because of things outside your control. Here is part four of my story from late last year.


Related posts:<ol><li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-part-15.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 1/5)'>Delicious Debrief (Part 1/5)</a></li>
<li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-2.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 2/5)'>Delicious Debrief (Part 2/5)</a></li>
<li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-5.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 5/5)'>Delicious Debrief (Part 5/5)</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<h3>The story so far</h3>
<p>Last year Yahoo! announced, with no notice, a significant change that had far reaching consequences for all third party applications including my iPhone program, Yummy. This is the third in a series of posts that discusses how I dealt with it.</p>
<p><a href="http://www.zx81.org.uk/computing/opinion/delicious-debrief.html">On Monday</a> I gave an overview of the problem, <a href="http://www.zx81.org.uk/computing/opinion/delicious-debrief-2.htm" class="broken_link">Tuesday</a> I looked at how those changes were announced and why they were tricky, and <a href="http://www.zx81.org.uk/computing/opinion/delicious-debrief-3.html">yesterday</a> I looked at how I actually implemented those technical details.</p>
<p>After the low level technical stuff there was still a lot of work making it useful. That&#8217;s what I&#8217;d like to talk about today. </p>
<h3>But that&#8217;s not all</h3>
<p>What I have been discussing so far has been entirely about the low-level, very technical details of OAuth. Of course there&#8217;s another side to it and that&#8217;s how it is presented to the user. This, again, has two parts: first, the options made available to the developer and, secondly, the work involved in actually making it happen.</p>
<p>So, the options available. We now have two authentication methods. I&#8217;ll call them Delicious and OAuth. The first point to make is that they&#8217;re not interchangeable. If I have an OAuth account I can&#8217;t log in with a Delicious username and password. And vice versa.</p>
<p>This begs the question: how can Yummy tell which type of account a user has?</p>
<p>The short answer is: it can&#8217;t.</p>
<p>Worse, many, if not most, Delicious.com users also have a Yahoo! account even when their delicious.com account is <em>not</em> linked to it. This results in a very confused user, as their login works without error yet they find they have no bookmarks.</p>
<p>What I was looking for was a way to identify the type of account that was accurate and would not require the same information to be entered multiple times. I ended up watching a number of people logging into their Yahoo! accounts<sup>1</sup> and, unfortunately, this invalidated most of my theories for making the process easier.</p>
<p>I thought, for example, that I was onto a winner when I noticed that I always typed &#8220;@yahoo.com&#8221; at the end of my username. Yummy could show the username screen as normal and, if the user typed &#8220;@yahoo.com&#8221; it would automatically remove the password field and offer to login using OAuth. However there are two problems with this. The minor, but annoying one, is that the user would be forced to enter their username twice, once in Yummy and then again in Safari. More significantly, I found that you don&#8217;t have to type &#8220;@yahoo.com&#8221; at the end of your Yahoo! ID. Although <em>I</em> do it all the time, most people seem to avoid the extra typing.</p>
<p>If people are going to avoid the extra typing, I would <em>still</em> need a way for them to override the default (Delicious) authentication method. And if they know that they have to overide it then, I reasoned, I may as well just come straight out and ask them how they&#8217;d like to proceed.</p>
<p>And this is exactly how it currently works.</p>
<p><a href="http://www.zx81.org.uk/wp-content/uploads/2010/07/Welcome-OAuth.png"><img src="http://www.zx81.org.uk/wp-content/uploads/2010/07/Welcome-OAuth-208x300.png" alt="" title="Yummy Log in Screen" width="208" height="300" class="alignleft size-medium wp-image-2173" /></a></p>
<p>Honestly, I&#8217;m really not very happy with it. How software talks to the server is entirely technical and is really not something that I should need to ask my users about. However this seems to be the least-bad approach. As I&#8217;ve noted before, I&#8217;m happy to entertain alternatives but I&#8217;ve not come across a better one yet.</p>
<p>The other significant user interface issue is one that I have already alluded to: should Yummy use a built-in web viewer or exit entirely and switch to Safari? The OAuth specification is clear on the matter: the users standard web browser should be used as it is both trusted and known<sup>2</sup>. However, OAuth is really designed with web applications in mind. Even on a Mac this switch from &#8220;my&#8221; app to a web browser and back again would be far from ideal. But on an iPhone, that can only display a single application at a time, it is confusing at best.</p>
<p>All else being equal I would be happy to go against the advice of the specification and use an embedded web view if it made for a better user experience. Unfortunately, all else was not equal.</p>
<p>What I found was that, although I could log in correctly using the web view there was no way for Yummy to automatically regain control afterwards. If you&#8217;re familiar with OAuth you will be aware that there <em>is</em> supposed to be a method for doing this. I spent a long time trying to get this to work but never did. I&#8217;m unclear whether this was a problem in my code or on the Yahoo! side<sup>3</sup>.</p>
<p>In practice, this would have meant that I&#8217;d have to provide instructions before the user was allowed to log in. Something like &#8220;press the &#8216;Done&#8217; button when you have finished logging in and enter the code you were given.&#8221; Of course this is not dramatically better than copying the code from Safari and relaunching Yummy.</p>
<p>In the end I decided that I would completely follow the spec rather than not follow its advice <em>and</em> force my users to jump through a few hoops.</p>
<p>Again, this is not something that I am entirely happy with. Could I have implemented this differently? Absolutely! Would the user experience be better had I done so? Not significantly.</p>
<p>In addition to the big things there were also a number of smaller, more cosmetic difficulties.</p>
<p>There a few things that that Delicious.com API is not terribly good at. One of the problems I&#8217;ve had from day one is that it&#8217;s not really designed for applcations to synchronise bookmarks (which is kind of bizarre when you think about it). It can be done, but it&#8217;s pretty tricky, especially when you have limited memory as is the case on the iPhone.</p>
<p>The new Yahoo! ID authentication scheme brought another: how do you know who has just logged in? Previously the user entered their username, so Yummy would know immediately. However in this case, their username is entered into Safari and Yummy never sees it. It so happens that one API call does return the username, but only under certain conditions and not necessarily straight away.</p>
<p>I mention this not because it was impossible to solve &#8212; indeed it was not spectacularly hard &#8212; but because it was was unexpected. After working through the low-level technical details of OAuth; and after figuring out how to allow the user to exit Yummy and return to the same point (while still allowing the process to be cancelled); after all that, the process was still not complete. What appeared to be just a different username and password became a significant and fundamental change.</p>
<h3>Coming tomorrow</h3>
<p>With most of the hard work finished I just had to make sure it really worked, and then sit back and analyse what went wrong.</p>
<ol class="footnotes"><li id="footnote_0_2154" class="footnote">Don&#8217;t worry, I wasn&#8217;t looking at what password you were typing.</li><li id="footnote_1_2154" class="footnote">We&#8217;re using an iPhone here so we can assume that the user is not using Internet Explorer.</li><li id="footnote_2_2154" class="footnote">I&#8217;ve got this working in the development version of Yummy now. I&#8217;m still not sure where the problem was.</li></ol>

<p>Related posts:<ol><li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-part-15.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 1/5)'>Delicious Debrief (Part 1/5)</a></li>
<li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-2.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 2/5)'>Delicious Debrief (Part 2/5)</a></li>
<li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-5.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 5/5)'>Delicious Debrief (Part 5/5)</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/zx81orguk?a=emMnyJCyYmw:fpktEoTpnJM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/zx81orguk?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=emMnyJCyYmw:fpktEoTpnJM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=emMnyJCyYmw:fpktEoTpnJM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=emMnyJCyYmw:fpktEoTpnJM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=emMnyJCyYmw:fpktEoTpnJM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=emMnyJCyYmw:fpktEoTpnJM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=emMnyJCyYmw:fpktEoTpnJM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=emMnyJCyYmw:fpktEoTpnJM:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=emMnyJCyYmw:fpktEoTpnJM:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/zx81orguk/~4/emMnyJCyYmw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.zx81.org.uk/computing/opinion/delicious-debrief-4.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.zx81.org.uk/computing/opinion/delicious-debrief-4.html</feedburner:origLink></item>
		<item>
		<title>Delicious Debrief (Part 3/5)</title>
		<link>http://feedproxy.google.com/~r/zx81orguk/~3/iqglBph0g0E/delicious-debrief-3.html</link>
		<comments>http://www.zx81.org.uk/computing/opinion/delicious-debrief-3.html#comments</comments>
		<pubDate>Wed, 21 Jul 2010 19:20:57 +0000</pubDate>
		<dc:creator>Stephen Darlington</dc:creator>
				<category><![CDATA[Opinion]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://www.zx81.org.uk/?p=2152</guid>
		<description><![CDATA[Developing iPhone software isn't all sex, drugs and rock and roll. Sometime you have to make difficult changes because of things outside your control. Here is part three of my story from late last year.


Related posts:<ol><li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-2.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 2/5)'>Delicious Debrief (Part 2/5)</a></li>
<li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-4.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 4/5)'>Delicious Debrief (Part 4/5)</a></li>
<li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-5.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 5/5)'>Delicious Debrief (Part 5/5)</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<h3>The story so far</h3>
<p>Last year Yahoo! announced, with no notice, a significant change that had far reaching consequences for all third party applications including my iPhone program, Yummy. This is the third in a series of posts that discusses how I dealt with it.</p>
<p><a href="http://www.zx81.org.uk/computing/opinion/delicious-debrief.html">On Monday</a> I gave an overview of the problem and <a href="http://www.zx81.org.uk/computing/opinion/delicious-debrief-2.htm" class="broken_link">yesterday</a> I looked at how those changes were announced and why they were tricky. Today we&#8217;ll look at how I actually implemented those technical details &#8212; though not at the code level so don&#8217;t worry if you&#8217;re not a programmer!</p>
<h3>Open Source OAuth</h3>
<p>The two leading contenders are <a href="http://code.google.com/p/oauthconsumer/">OAuthConsumer</a> and <a href="http://code.google.com/p/mpoauthconnection/">MPOAuth</a>. It&#8217;s only fair to note that my evaluation of both projects was in October and November 2009. Progress is likely to have been made on both projects since then.</p>
<p>I managed to get the sample projects for both up and running pretty quickly. However on trying to log in I immediately came across a problem. Yahoo! displayed a big warning message suggesting that you don&#8217;t authorise any new applications for security reasons. And, worse, that this method of authenticating was going to be removed in a few months.</p>
<p>Even if I could get it working this was going to be a show-stopper. I couldn&#8217;t in clear conscience ask users to ignore such a prominent message. It took a long time pouring over the code and the OAuth specification to realise that what changed was the OAuth specification itself.</p>
<p>As the error message noted, due to a security flaw in OAuth 1.0 they issued an update to the specification (called 1.0a) and it was <em>this</em> that Yahoo&#8217;s servers was objecting to. Neither library had been updated to the new version.</p>
<p>The change to both projects was small and straight-forward but I was worried that I actually needed to make any alterations at all. Were they being maintained? Was anyone using them?</p>
<p>It fairly quickly became clear that both projects were really optmised for connecting to, or at least developed against, Twitter. As with all standards, each implementation has their own peculiarities and specialisations. To be clear, there is nothing wrong with this. All code has its own axioms and its intended use defines its &#8220;shape.&#8221;</p>
<p>When I first looked at it, one of the things I liked about MPOAuth was that it did a lot of the hard work for you. It kept an internal state machine so that it knew which message it should be sending to the authentication server and what it should expect to see in return. I&#8217;m all for other people doing the work for me. As long as you followed the &#8220;correct&#8221; order everything worked just fine.</p>
<p>However, in a real world application you can&#8217;t expect users to do the right thing every time; there needs to be some way to recover from errors or allow people to change their minds. And, try as I might, I couldn&#8217;t quite figure out how to force MPOAuth to do what I needed. In trying to be clever it appeared to be making my life harder rather than easier.</p>
<p>OAuthConsumer got closer to being an integral part of Yummy. The way it&#8217;s structured was much more closely aligned with how I would have done it but I came across endless errors trying to connect to Yahoo&#8217;s servers. Most came back with very obscure errors and I spent a huge amount of time single-stepping (debugging) the framework &#8212; something that I&#8217;d hoped I could avoid by taking pre-existing code.</p>
<p>To be fair, much of this comes down to OAuth itself. On the server side there is no way to determine which parameter is incorrect, only that the request is not internally consistent.</p>
<h3>OAuth in Yummy</h3>
<p>Having spent a lot of time trying to understand why the existing libraries did not work with Yahoo! I had accumulated a good understanding of the OAuth 1.0a specification but a much less clear understanding of the frameworks themselves. There was something about the way that they had both been put together that didn&#8217;t quite mesh with either my way of thinking or the way that I was trying to implement it in Yummy &#8212; I&#8217;m still not quite sure which.</p>
<p>So I decided to go ahead and make my own OAuth library. In some respects this was quite a risky move as it was going to be difficult code to write and it would be in a very fundamental part of the software, traditionally somewhere that I try to use simple, well tested code.</p>
<p>It&#8217;s difficult to say whether this was the quickest option. Maybe I could have changed one line in, say, OAuthConsumer and got everything working in half the time. But the amount of time that I spent struggling with them suggests not and this way I have full control over and full understanding of every line of code<sup>1</sup>.</p>
<p>I ended up writing about four hundred lines of new code instead of using MPOAuth or OAuthConsumer. This is some reasonably low-level code and was tricky to debug as the server-side typically responded with a simple &#8220;invalid signature&#8221; error no matter what the actual problem was. (This is not to complain about Yahoo&#8217;s service. It&#8217;s just the nature of the beast, unfortunately.) However, once written it&#8217;s proven to be surprisingly resilient<sup>2</sup>. </p>
<h3>Coming tomorrow</h3>
<p>Having decided on the low-level technical details I discovered that there was still a lot of work to do. That&#8217;s what I&#8217;ll be talking about tomorrow.</p>
<ol class="footnotes"><li id="footnote_0_2152" class="footnote">I&#8217;m also geeky enough to <em>like</em> writing this kind of code. So shoot me.</li><li id="footnote_1_2152" class="footnote">I&#8217;m only aware of one bug caused by the new code, and that problem, strictly speaking, was already present in Yummy, it just did not exhibit the same behaviour previously.</li></ol>

<p>Related posts:<ol><li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-2.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 2/5)'>Delicious Debrief (Part 2/5)</a></li>
<li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-4.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 4/5)'>Delicious Debrief (Part 4/5)</a></li>
<li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-5.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 5/5)'>Delicious Debrief (Part 5/5)</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/zx81orguk?a=iqglBph0g0E:a97-soXG9zc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/zx81orguk?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=iqglBph0g0E:a97-soXG9zc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=iqglBph0g0E:a97-soXG9zc:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=iqglBph0g0E:a97-soXG9zc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=iqglBph0g0E:a97-soXG9zc:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=iqglBph0g0E:a97-soXG9zc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=iqglBph0g0E:a97-soXG9zc:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=iqglBph0g0E:a97-soXG9zc:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=iqglBph0g0E:a97-soXG9zc:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/zx81orguk/~4/iqglBph0g0E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.zx81.org.uk/computing/opinion/delicious-debrief-3.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.zx81.org.uk/computing/opinion/delicious-debrief-3.html</feedburner:origLink></item>
		<item>
		<title>Delicious Debrief (Part 2/5)</title>
		<link>http://feedproxy.google.com/~r/zx81orguk/~3/SoYxTbWl5sM/delicious-debrief-2.html</link>
		<comments>http://www.zx81.org.uk/computing/opinion/delicious-debrief-2.html#comments</comments>
		<pubDate>Tue, 20 Jul 2010 19:42:14 +0000</pubDate>
		<dc:creator>Stephen Darlington</dc:creator>
				<category><![CDATA[Opinion]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://www.zx81.org.uk/?p=2151</guid>
		<description><![CDATA[Developing iPhone software isn't all sex, drugs and rock and roll. Sometime you have to make difficult changes because of things outside your control. Here is part two of my story from late last year.


Related posts:<ol><li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-4.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 4/5)'>Delicious Debrief (Part 4/5)</a></li>
<li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-part-15.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 1/5)'>Delicious Debrief (Part 1/5)</a></li>
<li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-5.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 5/5)'>Delicious Debrief (Part 5/5)</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<h3>The story so far</h3>
<p>Last year Yahoo! announced, with no notice, a significant change that had far reaching consequences for all third party applications including my iPhone program, Yummy. This is the second in a series of posts that discusses how I dealt with it.</p>
<p><a href="http://www.zx81.org.uk/computing/opinion/delicious-debrief.html">Yesterday</a> I spoke at a high level about my iPhone application and some changes that Yahoo! made to their side of the system. Today I&#8217;d like to talk in a little more detail about how those changes were announced and why they were tricky.</p>
<h3>The announcement</h3>
<p>On 19 October 2009, <a href="http://blog.delicious.com/blog/2009/10/delicious-is-now-about-you-too.html">Yahoo! posted a blog announcing that all new accounts would be accessed with a Yahoo! ID</a>.</p>
<p>As far as I know, this is the first time that anyone outside Yahoo! knew about this change. And the change took effect immediately.</p>
<p>At the time of the announcement, Apple were taking around two weeks to approve updates to iPhone applications. This means that even if it took no time at all to make the required changes &#8212; which as we&#8217;ll see is far from the case &#8212; it would still mean that a user of Delicious.com would have approximately two weeks to wait before <em>any</em> third party application would support their new scheme.</p>
<p>I don&#8217;t necessarily expect Yahoo! to support me personally but I <em>do</em> expect them to act in ways that are beneficial to their own users. Knowing that no third party applications would work with new accounts clearly does not meet this goal.</p>
<p>Maintaining a healthy ecosystem around their own software with well maintained, documented and supported APIs seems to work to their advantage, yet they did not do this. Just look at the flourishing market for Twitter clients for an example of it done well.</p>
<p>But, put bluntly, they failed.</p>
<p>It took over a month to update the API documentation. And when they did they simply added a one paragraph note saying that authentication can now be performed using OAuth. Until that point the only official resources were a few responses in the Delicious discussion forums.</p>
<p>Now, months after the change went live, the documentation is still barely adequate to code against. I think the lack of other third party clients that support Yahoo! ID authentication reinforces this point. (At the time of writing, I think I&#8217;m right in saying that Yummy and Yummy Browser are the only two iPhone clients that support Yahoo! ID logins.)</p>
<p>Unfortunately the haphazard approach to developers was only the first part of the problem.</p>
<h3>Surely it&#8217;s just a different username and password?</h3>
<p>You&#8217;d think that using a Yahoo! password rather than a dedicated Delicious password would be pretty easy, but you&#8217;d be wrong.</p>
<p><a href="http://oauth.net/">OAuth</a>, as it&#8217;s called, doesn&#8217;t work like that.</p>
<p>The idea is that you shouldn&#8217;t have to trust anyone other than Yahoo! with your Yahoo! password. So, bizarrely, I had to make Yummy work without ever knowing what your username or password is!</p>
<p>Without getting too bogged down in detail, this is roughly how it works:</p>
<ol>
<li>The client launches a web browser. Since an iPhone can&#8217;t multi-task third-party applications, this means exiting and switching over to Safari<sup>1</sup>. The changes announced for iPhone OS 4.0 don&#8217;t help here</li>
<li>The user logs into Yahoo! The server responds with a code</li>
<li>The user launches the client again and enters the code</li>
</ol>
<p>Then every time the client wants to access a protected resource it does some cryptographic magic using the code (generating what&#8217;s called a &#8220;hash&#8221;) and sends that along with the request.</p>
<p>But the devil, as ever, is in the detail. The detail in this case is a twelve page document that assumes that you know what things like &#8220;octet string, first base64-encoded&#8221; means. Therefore in practice you end up looking up every second paragraph which slows things down.</p>
<p>Of course, writing the code yourself would be the hard option. For a standard such as OAuth there are bound to be some Open Source libraries that can be used without too much trouble.</p>
<h3>Next&#8230;</h3>
<p>Tomorrow I&#8217;ll talk about those Open Source libraries and what I ended up using.</p>
<ol class="footnotes"><li id="footnote_0_2151" class="footnote">The iPhone OS does allow applications to include an embedded web browser, indeed Yummy already has one to allow users to preview their bookmarks. However, the OAuth specification recommends against this approach for authentication. The idea is that you should only trust Yahoo! with your username and password and that entering them into a third-party application might break that trust. An early version of the change did include an embedded browser and I may yet revert back to that version.</li></ol>

<p>Related posts:<ol><li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-4.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 4/5)'>Delicious Debrief (Part 4/5)</a></li>
<li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-part-15.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 1/5)'>Delicious Debrief (Part 1/5)</a></li>
<li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-5.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 5/5)'>Delicious Debrief (Part 5/5)</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/zx81orguk?a=SoYxTbWl5sM:A0stgyv9N1o:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/zx81orguk?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=SoYxTbWl5sM:A0stgyv9N1o:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=SoYxTbWl5sM:A0stgyv9N1o:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=SoYxTbWl5sM:A0stgyv9N1o:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=SoYxTbWl5sM:A0stgyv9N1o:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=SoYxTbWl5sM:A0stgyv9N1o:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=SoYxTbWl5sM:A0stgyv9N1o:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=SoYxTbWl5sM:A0stgyv9N1o:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=SoYxTbWl5sM:A0stgyv9N1o:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/zx81orguk/~4/SoYxTbWl5sM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.zx81.org.uk/computing/opinion/delicious-debrief-2.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.zx81.org.uk/computing/opinion/delicious-debrief-2.html</feedburner:origLink></item>
		<item><title>MacPaint and QuickDraw source code [del.icio.us]</title><link>http://feedproxy.google.com/~r/zx81orguk/~3/x36Ai99zuSQ/</link><category>apple computer history software mac development</category><dc:creator>stephendarlington</dc:creator><pubDate>Tue, 20 Jul 2010 00:34:56 PDT</pubDate><guid isPermaLink="false">http://www.computerhistory.org/highlights/macpaint/</guid><description>This is awesome: the original source code to two of the most important pieces of software from the 1980&amp;#039;s.&lt;img src="http://feeds.feedburner.com/~r/zx81orguk/~4/x36Ai99zuSQ" height="1" width="1"/&gt;</description><taxo:topics xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
      <rdf:Bag xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/apple" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/computer" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/history" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/software" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/mac" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/development" />
      </rdf:Bag>
    </taxo:topics><feedburner:origLink>http://www.computerhistory.org/highlights/macpaint/</feedburner:origLink></item><item>
		<title>Delicious Debrief (Part 1/5)</title>
		<link>http://feedproxy.google.com/~r/zx81orguk/~3/8meAvOVVHPo/delicious-debrief-part-15.html</link>
		<comments>http://www.zx81.org.uk/computing/opinion/delicious-debrief-part-15.html#comments</comments>
		<pubDate>Mon, 19 Jul 2010 19:13:11 +0000</pubDate>
		<dc:creator>Stephen Darlington</dc:creator>
				<category><![CDATA[Opinion]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://www.zx81.org.uk/?p=1930</guid>
		<description><![CDATA[Developing iPhone software isn't all sex, drugs and rock and roll. Sometime you have to make difficult changes because of things outside your control. Here is part one of my story from late last year.


Related posts:<ol><li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-2.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 2/5)'>Delicious Debrief (Part 2/5)</a></li>
<li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-4.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 4/5)'>Delicious Debrief (Part 4/5)</a></li>
<li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-5.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 5/5)'>Delicious Debrief (Part 5/5)</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<h3>Background</h3>
<p>For the benefit of any new visitors, I develop an iPhone application called  <a href="http://www.yummyapp.com/">Yummy</a> that connects to the <a href="http://delicious.com/">Delicious.com</a> &#8220;social bookmarking&#8221; website, allowing you to access and share your bookmarks using a far more usable interface than the native web or mobile optimised version of the site.</p>
<p>In the olden days &#8212; that is more than six months ago &#8212; to access Delicious all you had to do was enter a user name and password. As a developer it was very similar. Whenever you wanted to access something that required authorisation &#8212; adding a new bookmark for example &#8212; you had to supply the same credentials as you would on the web: a username and password. This, in web terminology, is called &#8220;basic authentication.&#8221;</p>
<p>And then in October last year, Yahoo! announced that any new accounts would be linked to their Yahoo! ID, the same username and password that are used to protect Yahoo! Mail, Flickr and most other Yahoo! services. A month later they allowed existing users to transition their old account to the new Yahoo! ID world.</p>
<p>On the Delicious.com website things look very similar. You still enter a username and password and can then access protected resources. But for developers things work a bit differently.</p>
<p>In the rest of this series of posts I&#8217;d like to talk about this transition and the difficulties involved. In the six months that it&#8217;s taken me to get around to writing this I&#8217;ve calmed down a lot but I&#8217;m sure you&#8217;ll be able to feel the frustration I felt at some points.</p>
<p>I&#8217;m going to split the discussion into a number of different &#8220;chapters.&#8221; First there&#8217;s how Yahoo! dealt with the transition. Next are the technical challenges, the options I tried and, eventually, the solution I settled on.</p>
<p>What follows is not densely technical, in the sense that I&#8217;m not going to be talking to the level of individual lines of code. However many of the decisions and trade-offs are somewhat technical in nature. Most people should be able to follow the process if not every last detail.</p>
<p>Tomorrow we&#8217;ll start with the announcement and why what they changed made things tricky for all third-party clients, including Yummy.</p>


<p>Related posts:<ol><li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-2.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 2/5)'>Delicious Debrief (Part 2/5)</a></li>
<li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-4.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 4/5)'>Delicious Debrief (Part 4/5)</a></li>
<li><a href='http://www.zx81.org.uk/computing/opinion/delicious-debrief-5.html' rel='bookmark' title='Permanent Link: Delicious Debrief (Part 5/5)'>Delicious Debrief (Part 5/5)</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/zx81orguk?a=8meAvOVVHPo:ImdxAvNHEdk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/zx81orguk?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=8meAvOVVHPo:ImdxAvNHEdk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=8meAvOVVHPo:ImdxAvNHEdk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=8meAvOVVHPo:ImdxAvNHEdk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=8meAvOVVHPo:ImdxAvNHEdk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=8meAvOVVHPo:ImdxAvNHEdk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=8meAvOVVHPo:ImdxAvNHEdk:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=8meAvOVVHPo:ImdxAvNHEdk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=8meAvOVVHPo:ImdxAvNHEdk:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/zx81orguk/~4/8meAvOVVHPo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.zx81.org.uk/computing/opinion/delicious-debrief-part-15.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.zx81.org.uk/computing/opinion/delicious-debrief-part-15.html</feedburner:origLink></item>
		<item>
		<title>Summer Fun</title>
		<link>http://feedproxy.google.com/~r/zx81orguk/~3/bwbL19UaYvs/summer-fun.html</link>
		<comments>http://www.zx81.org.uk/photography/photofriday/summer-fun.html#comments</comments>
		<pubDate>Sat, 17 Jul 2010 21:15:41 +0000</pubDate>
		<dc:creator>Stephen Darlington</dc:creator>
				<category><![CDATA[PhotoFriday]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[Travel]]></category>
		<category><![CDATA[uk]]></category>

		<guid isPermaLink="false">http://www.zx81.org.uk/?p=2165</guid>
		<description><![CDATA[This weeks PhotoFriday theme is "Summer Fun." Here is my entry.


Related posts:<ol><li><a href='http://www.zx81.org.uk/photography/brighton-sunset.html' rel='bookmark' title='Permanent Link: Brighton Sunset'>Brighton Sunset</a></li>
<li><a href='http://www.zx81.org.uk/photography/photofriday/seaside.html' rel='bookmark' title='Permanent Link: Seaside'>Seaside</a></li>
<li><a href='http://www.zx81.org.uk/photography/photofriday/the-beach.html' rel='bookmark' title='Permanent Link: The Beach'>The Beach</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id="attachment_1646" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.zx81.org.uk/wp-content/uploads/2009/08/IMG_0939.jpg"><img src="http://www.zx81.org.uk/wp-content/uploads/2009/08/IMG_0939.jpg" alt="" title="Brighton Sunset" width="500" height="333" class="size-full wp-image-1646" /></a><p class="wp-caption-text">Brighton Sunset</p></div>
<p>The phrase &#8220;<a href="http://www.photofriday.com/archives/challenge/000997.php">Summer Fun</a>,&#8221; which is this weeks PhotoFriday theme, conjures up images of children splashing in brightly coloured paddling pools, beach volley ball and barbecues lasting well into the late, twilight hours. Unfortunately I don&#8217;t have pictures of any of those things. So here is a picture of a summer sunset over <a href="http://www.zx81.org.uk/photography/brighton-sunset.html">Brighton beach</a>. I think walking on the beach, late in the evening while it&#8217;s still light is considered fun.  </p>
<p>Please vote for my entry in last weeks challenge, <a href="http://www.photofriday.com/linkviewer.php?id=995">&#8220;Bloom.&#8221;</a> I&#8217;m entry number 284. </p>


<p>Related posts:<ol><li><a href='http://www.zx81.org.uk/photography/brighton-sunset.html' rel='bookmark' title='Permanent Link: Brighton Sunset'>Brighton Sunset</a></li>
<li><a href='http://www.zx81.org.uk/photography/photofriday/seaside.html' rel='bookmark' title='Permanent Link: Seaside'>Seaside</a></li>
<li><a href='http://www.zx81.org.uk/photography/photofriday/the-beach.html' rel='bookmark' title='Permanent Link: The Beach'>The Beach</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/zx81orguk?a=bwbL19UaYvs:AD_EW5Z637Q:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/zx81orguk?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=bwbL19UaYvs:AD_EW5Z637Q:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=bwbL19UaYvs:AD_EW5Z637Q:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=bwbL19UaYvs:AD_EW5Z637Q:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=bwbL19UaYvs:AD_EW5Z637Q:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=bwbL19UaYvs:AD_EW5Z637Q:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=bwbL19UaYvs:AD_EW5Z637Q:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=bwbL19UaYvs:AD_EW5Z637Q:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=bwbL19UaYvs:AD_EW5Z637Q:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/zx81orguk/~4/bwbL19UaYvs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.zx81.org.uk/photography/photofriday/summer-fun.html/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.zx81.org.uk/photography/photofriday/summer-fun.html</feedburner:origLink></item>
		<item>
		<title>Communication</title>
		<link>http://feedproxy.google.com/~r/zx81orguk/~3/XD5qUYuu1KA/communication.html</link>
		<comments>http://www.zx81.org.uk/computing/opinion/communication.html#comments</comments>
		<pubDate>Tue, 13 Jul 2010 19:23:03 +0000</pubDate>
		<dc:creator>Stephen Darlington</dc:creator>
				<category><![CDATA[Opinion]]></category>
		<category><![CDATA[computerscience]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[engineering]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.zx81.org.uk/?p=1412</guid>
		<description><![CDATA[Communicating in the same language as your users is never as easy as you first think.


Related posts:<ol><li><a href='http://www.zx81.org.uk/computing/opinion/randomchanges.html' rel='bookmark' title='Permanent Link: Random Changes'>Random Changes</a></li>
<li><a href='http://www.zx81.org.uk/computing/opinion/blessed-is-the-tool-maker.html' rel='bookmark' title='Permanent Link: Blessed is the Tool Maker'>Blessed is the Tool Maker</a></li>
<li><a href='http://www.zx81.org.uk/blog/naked.html' rel='bookmark' title='Permanent Link: Naked'>Naked</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>&#8220;Do you ever change this type of trade?&#8221;</p>
<p>I was sat on the trading floor discussing a new feature that I was implementing with the person who would be using it the most.</p>
<p>&#8220;No, never.&#8221;</p>
<p>This was one detail of the change that would have far-reaching consequences in the code. A &#8220;no&#8221; would mean a few days of development, a &#8220;yes&#8221; would indicate several <em>weeks</em>.</p>
<p>&#8220;Are you absolutely sure? You don&#8217;t change it even once a month?&#8221;</p>
<p>I knew they&#8217;d like the smaller estimate but, equally, I knew that I didn&#8217;t want to end up trying to implement several weeks worth of functionality in the smaller time frame. I&#8217;ve seen that kind of thing happen too often.</p>
<p>&#8220;John<sup>1</sup>, we don&#8217;t ever change these trades do we?&#8221;</p>
<p>John was the head trader. If anyone would know it would be him.</p>
<p>He rubs his head and leans back, thinking.</p>
<p>&#8220;Why would you want to? No, I can&#8217;t see us ever changing one.&#8221;</p>
<p>Of course, you can guess what happened thirty minutes into the first trading day with the new software.</p>
<p>So, what happened here? Why did we get the requirements so wrong? And why did we only find the mismatch <em>after</em> the system was moved into production?</p>
<p>Both the problem and the solution is the same thing: communication. Or more precisely, communicating using the right language.</p>
<p>Some developers are happy to only &#8220;speak&#8221; technical, proud that they are masters of their programming environment but ignorant of their users problems or how they really use the software.</p>
<p>Above I started out correctly, I was trying to understand the traders business and talking in terms of booking trades, positions, legal entities and a bunch of acronyms that would make even less sense out of context.</p>
<p>But I made one error: I used the word &#8220;change&#8221; without defining what I meant. I meant, well, any change. And so did they. Yet they didn&#8217;t consider <em>moving</em> a trade from one book to another to be a change and, unfortunately, I did.</p>
<p>You&#8217;d like to think that there were checks and balances in place to make sure that this kind of thing didn&#8217;t happen. And there were. In addition to informal and formal testing, there was over a week of &#8220;parallel running,&#8221; where the traders had to use the old and the new system together and check that the results were the same in both of them.</p>
<p>Were there any <em>moved</em> trades during this time? Of course. Why did the traders not notice? Well, it was <em>about</em> right; the differences, while present, were explicable and so not considered significant enough to mention even though I asked to hear about any problems at all.</p>
<p>So, again, communication. Or at least human nature. I wanted to hear about <em>any</em> differences but they tried to help me by only talking about differences that they couldn&#8217;t account for.</p>
<p>What&#8217;s the answer? Well, I&#8217;m not sure there&#8217;s an easy one. &#8220;Understanding your user&#8221; is a short, simple phrase but hides so much. If you spent the time to fully understood their job you probably wouldn&#8217;t have the time to do your own. But finding the balance is crucial.</p>
<ol class="footnotes"><li id="footnote_0_1412" class="footnote">Names have been changed to protect the&#8230; well, they work for a bank so I hesitate to say &#8220;innocent&#8221; but you know what I mean.</li></ol>

<p>Related posts:<ol><li><a href='http://www.zx81.org.uk/computing/opinion/randomchanges.html' rel='bookmark' title='Permanent Link: Random Changes'>Random Changes</a></li>
<li><a href='http://www.zx81.org.uk/computing/opinion/blessed-is-the-tool-maker.html' rel='bookmark' title='Permanent Link: Blessed is the Tool Maker'>Blessed is the Tool Maker</a></li>
<li><a href='http://www.zx81.org.uk/blog/naked.html' rel='bookmark' title='Permanent Link: Naked'>Naked</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/zx81orguk?a=XD5qUYuu1KA:M-fp0HpaBIw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/zx81orguk?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=XD5qUYuu1KA:M-fp0HpaBIw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=XD5qUYuu1KA:M-fp0HpaBIw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=XD5qUYuu1KA:M-fp0HpaBIw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=XD5qUYuu1KA:M-fp0HpaBIw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=XD5qUYuu1KA:M-fp0HpaBIw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=XD5qUYuu1KA:M-fp0HpaBIw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=XD5qUYuu1KA:M-fp0HpaBIw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=XD5qUYuu1KA:M-fp0HpaBIw:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/zx81orguk/~4/XD5qUYuu1KA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.zx81.org.uk/computing/opinion/communication.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.zx81.org.uk/computing/opinion/communication.html</feedburner:origLink></item>
		<item>
		<title>What is “polish”?</title>
		<link>http://feedproxy.google.com/~r/zx81orguk/~3/ZNwN4zwBSp8/what-is-polish.html</link>
		<comments>http://www.zx81.org.uk/computing/opinion/what-is-polish.html#comments</comments>
		<pubDate>Tue, 06 Jul 2010 19:11:44 +0000</pubDate>
		<dc:creator>Stephen Darlington</dc:creator>
				<category><![CDATA[Opinion]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[yummy]]></category>

		<guid isPermaLink="false">http://www.zx81.org.uk/?p=1895</guid>
		<description><![CDATA[If you say that an application lacks "polish" what do you mean?


Related posts:<ol><li><a href='http://www.zx81.org.uk/computing/software/yummy-prepare-for-launch.html' rel='bookmark' title='Permanent Link: Yummy: Prepare for Launch'>Yummy: Prepare for Launch</a></li>
<li><a href='http://www.zx81.org.uk/computing/opinion/growing-up-in-public.html' rel='bookmark' title='Permanent Link: Growing Up in Public'>Growing Up in Public</a></li>
<li><a href='http://www.zx81.org.uk/computing/software/yummy-ready-for-sale.html' rel='bookmark' title='Permanent Link: Yummy: Ready for Sale'>Yummy: Ready for Sale</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>One thing that I hear from time-to-time is that <a href="http://www.yummyapp.com/">Yummy</a>, my iPhone application, lacks &#8220;polish.&#8221; But what do people mean when they say that?</p>
<p>When I ask, what I usually find is that these people have never actually used it. They have probably looked at screen shots, maybe one of the screencasts. They can see that there are few graphics and little animation.</p>
<p>That&#8217;s fair &#8212; it&#8217;s absolutely true &#8212; but that&#8217;s not what I think of when I think of polish.</p>
<p>Instead, Yummy is designed to be quick and convenient to use. It&#8217;s modelled more after Apple&#8217;s Contacts app than, say, the Camera or Photos. In this sense, it&#8217;s not a few well placed graphics that makes all the difference. It&#8217;s the fact that Yummy saves your location in it when you exit<sup>1</sup>, even when you&#8217;re in the middle of editing a bookmark. It&#8217;s that your searches are automatically saved so you don&#8217;t need to re-type terms you use regularly. It&#8217;s that you can edit bookmarks even when offline. It&#8217;s that if you use a short bookmark (like tinyurl or bit.ly), you can fetch the full URL and the title of the web page.</p>
<p>In short it&#8217;s lots of little things that I can&#8217;t even begin to list on the features screen in its iTunes store listing. They&#8217;re not really features as such, but their absence would make for a much weaker program.</p>
<p>None of these things can be seen just by looking at screenshots. Indeed, some of those refinements may not be noticed at all. But I think it&#8217;s this very subtlety that defines polish. Marco Arment touches on this when he says that the <a href="http://www.marco.org/370645975">best UI is invisible</a> &#8212; this is <em>exactly</em> what I was aiming for.</p>
<ol class="footnotes"><li id="footnote_0_1895" class="footnote">Of course iOS4 does a lot of this for you now, but I first implemented this when iPhone OS 2.x was current.</li></ol>

<p>Related posts:<ol><li><a href='http://www.zx81.org.uk/computing/software/yummy-prepare-for-launch.html' rel='bookmark' title='Permanent Link: Yummy: Prepare for Launch'>Yummy: Prepare for Launch</a></li>
<li><a href='http://www.zx81.org.uk/computing/opinion/growing-up-in-public.html' rel='bookmark' title='Permanent Link: Growing Up in Public'>Growing Up in Public</a></li>
<li><a href='http://www.zx81.org.uk/computing/software/yummy-ready-for-sale.html' rel='bookmark' title='Permanent Link: Yummy: Ready for Sale'>Yummy: Ready for Sale</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/zx81orguk?a=ZNwN4zwBSp8:AKQhdSFtb98:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/zx81orguk?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=ZNwN4zwBSp8:AKQhdSFtb98:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=ZNwN4zwBSp8:AKQhdSFtb98:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=ZNwN4zwBSp8:AKQhdSFtb98:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=ZNwN4zwBSp8:AKQhdSFtb98:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=ZNwN4zwBSp8:AKQhdSFtb98:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=ZNwN4zwBSp8:AKQhdSFtb98:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=ZNwN4zwBSp8:AKQhdSFtb98:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=ZNwN4zwBSp8:AKQhdSFtb98:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/zx81orguk/~4/ZNwN4zwBSp8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.zx81.org.uk/computing/opinion/what-is-polish.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.zx81.org.uk/computing/opinion/what-is-polish.html</feedburner:origLink></item>
		<item>
		<title>Bloom</title>
		<link>http://feedproxy.google.com/~r/zx81orguk/~3/1bFQ54eHwes/bloom.html</link>
		<comments>http://www.zx81.org.uk/photography/photofriday/bloom.html#comments</comments>
		<pubDate>Sun, 04 Jul 2010 20:02:02 +0000</pubDate>
		<dc:creator>Stephen Darlington</dc:creator>
				<category><![CDATA[PhotoFriday]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[Travel]]></category>
		<category><![CDATA[uk]]></category>

		<guid isPermaLink="false">http://www.zx81.org.uk/?p=2131</guid>
		<description><![CDATA[This weeks PhotoFriday theme is "Bloom." Here is my entry.


Related posts:<ol><li><a href='http://www.zx81.org.uk/photography/photofriday/active.html' rel='bookmark' title='Permanent Link: Active'>Active</a></li>
<li><a href='http://www.zx81.org.uk/photography/photofriday/the-team.html' rel='bookmark' title='Permanent Link: The Team'>The Team</a></li>
<li><a href='http://www.zx81.org.uk/photography/photofriday/sky-high.html' rel='bookmark' title='Permanent Link: Sky-High'>Sky-High</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[						<div class="flickr-gallery image none"><a href="http://www.flickr.com/photos/stephendarlington/4760998089"><img class="flickr medium" title="Flowers in Bath" alt="Flowers in Bath" src="http://farm5.static.flickr.com/4078/4760998089_0e294447c6.jpg" /></a></div>
					
<p>Another late entry for PhotoFriday (this is becoming a theme in and of itself). This weeks image is around the theme &#8220;<a href="http://www.photofriday.com/archives/challenge/000995.php">Bloom</a>&#8221; which I felt pretty much had to be about flowers. These were in <a href="http://www.zx81.org.uk/travel/bath-uk.html">Bath, UK</a>.</p>
<p>Please also vote for <a href="http://www.zx81.org.uk/photography/photofriday/motionless.html">my entry</a> in last weeks challenge, &#8220;<a href="http://www.photofriday.com/linkviewer.php?id=993">Motionless</a>.&#8221; I&#8217;m entry number 167.</p>


<p>Related posts:<ol><li><a href='http://www.zx81.org.uk/photography/photofriday/active.html' rel='bookmark' title='Permanent Link: Active'>Active</a></li>
<li><a href='http://www.zx81.org.uk/photography/photofriday/the-team.html' rel='bookmark' title='Permanent Link: The Team'>The Team</a></li>
<li><a href='http://www.zx81.org.uk/photography/photofriday/sky-high.html' rel='bookmark' title='Permanent Link: Sky-High'>Sky-High</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/zx81orguk?a=1bFQ54eHwes:DKJ8C-ojkwM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/zx81orguk?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=1bFQ54eHwes:DKJ8C-ojkwM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=1bFQ54eHwes:DKJ8C-ojkwM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=1bFQ54eHwes:DKJ8C-ojkwM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=1bFQ54eHwes:DKJ8C-ojkwM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=1bFQ54eHwes:DKJ8C-ojkwM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=1bFQ54eHwes:DKJ8C-ojkwM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/zx81orguk?a=1bFQ54eHwes:DKJ8C-ojkwM:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/zx81orguk?i=1bFQ54eHwes:DKJ8C-ojkwM:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/zx81orguk/~4/1bFQ54eHwes" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.zx81.org.uk/photography/photofriday/bloom.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.zx81.org.uk/photography/photofriday/bloom.html</feedburner:origLink></item>
	<item><title>If I have two children, and one is a boy, what are the odds that [del.icio.us]</title><link>http://feedproxy.google.com/~r/zx81orguk/~3/7lZUyDEs2XI/When_intuition_and_math_probably_look_wrong</link><category>math maths intuition commonsense odd</category><dc:creator>stephendarlington</dc:creator><pubDate>Fri, 02 Jul 2010 02:33:11 PDT</pubDate><guid isPermaLink="false">http://sciencenews.org/view/generic/id/60598/title/When_intuition_and_math_probably_look_wrong</guid><description>Where common sense makes no sense. Sometimes. Probably.&lt;img src="http://feeds.feedburner.com/~r/zx81orguk/~4/7lZUyDEs2XI" height="1" width="1"/&gt;</description><taxo:topics xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
      <rdf:Bag xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/math" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/maths" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/intuition" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/commonsense" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/odd" />
      </rdf:Bag>
    </taxo:topics><feedburner:origLink>http://sciencenews.org/view/generic/id/60598/title/When_intuition_and_math_probably_look_wrong</feedburner:origLink></item><item><title>June 23, 1912: Computer Pioneer Alan Turing Born [del.icio.us]</title><link>http://feedproxy.google.com/~r/zx81orguk/~3/IPYS_Czdv-Q/0623alan-turing-born</link><category>history computer</category><dc:creator>stephendarlington</dc:creator><pubDate>Wed, 23 Jun 2010 00:23:04 PDT</pubDate><guid isPermaLink="false">http://www.wired.com/thisdayintech/2010/06/0623alan-turing-born</guid><description>&amp;quot;He’s also a genuinely interesting figure, albeit a tragic one. An eccentric who liked to bicycle while wearing a gas mask and who occasionally wore pajama tops underneath suit jackets, he was also a prodigious and eclectic genius.&amp;quot;&lt;img src="http://feeds.feedburner.com/~r/zx81orguk/~4/IPYS_Czdv-Q" height="1" width="1"/&gt;</description><taxo:topics xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
      <rdf:Bag xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/history" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/computer" />
      </rdf:Bag>
    </taxo:topics><feedburner:origLink>http://www.wired.com/thisdayintech/2010/06/0623alan-turing-born</feedburner:origLink></item><item><title>I'm Comic Sans, Asshole [del.icio.us]</title><link>http://feedproxy.google.com/~r/zx81orguk/~3/8CHfHco8Djw/15comicsans.html</link><category>fonts design humour</category><dc:creator>stephendarlington</dc:creator><pubDate>Thu, 17 Jun 2010 00:19:18 PDT</pubDate><guid isPermaLink="false">http://www.mcsweeneys.net/links/monologues/15comicsans.html</guid><description>Your favourite font responds to criticism...&lt;img src="http://feeds.feedburner.com/~r/zx81orguk/~4/8CHfHco8Djw" height="1" width="1"/&gt;</description><taxo:topics xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
      <rdf:Bag xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/fonts" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/design" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/humour" />
      </rdf:Bag>
    </taxo:topics><feedburner:origLink>http://www.mcsweeneys.net/links/monologues/15comicsans.html</feedburner:origLink></item><item><title>The Value of Ideas [del.icio.us]</title><link>http://feedproxy.google.com/~r/zx81orguk/~3/NT7N25IAj_Q/</link><category>business ideas dilbert scottadams</category><dc:creator>stephendarlington</dc:creator><pubDate>Fri, 04 Jun 2010 08:21:00 PDT</pubDate><guid isPermaLink="false">http://dilbert.com/blog/entry/the_value_of_ideas/</guid><description>&amp;quot;Ideas are worthless. Execution is everything.&amp;quot; Or actions speak louder than words.&lt;img src="http://feeds.feedburner.com/~r/zx81orguk/~4/NT7N25IAj_Q" height="1" width="1"/&gt;</description><taxo:topics xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
      <rdf:Bag xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/business" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/ideas" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/dilbert" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/scottadams" />
      </rdf:Bag>
    </taxo:topics><feedburner:origLink>http://dilbert.com/blog/entry/the_value_of_ideas/</feedburner:origLink></item><item><title>The IBM Muppet Show [del.icio.us]</title><link>http://feedproxy.google.com/~r/zx81orguk/~3/a8KsLKBYRaI/</link><category>tv computer humour ibm history funny video</category><dc:creator>stephendarlington</dc:creator><pubDate>Wed, 02 Jun 2010 05:33:59 PDT</pubDate><guid isPermaLink="false">http://technologizer.com/2010/05/31/ibm-muppets/</guid><description>&amp;quot;IBM. The Muppets. Two venerable institutions-but not ones we tend to associate with each other. Yet in the late 1960s, before most people had ever seen a computer in person or could identify a Muppet on sight, the two teamed up when IBM contracted with Jim Henson for a series of short films designed to help its sales staff.&amp;quot;&lt;img src="http://feeds.feedburner.com/~r/zx81orguk/~4/a8KsLKBYRaI" height="1" width="1"/&gt;</description><taxo:topics xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
      <rdf:Bag xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/tv" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/computer" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/humour" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/ibm" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/history" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/funny" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/video" />
      </rdf:Bag>
    </taxo:topics><feedburner:origLink>http://technologizer.com/2010/05/31/ibm-muppets/</feedburner:origLink></item><item><title>Twenty Years Later, Remembering Jim Henson [del.icio.us]</title><link>http://feedproxy.google.com/~r/zx81orguk/~3/Gp-hO-ZpXAw/1</link><category>tv humour</category><dc:creator>stephendarlington</dc:creator><pubDate>Mon, 17 May 2010 09:23:45 PDT</pubDate><guid isPermaLink="false">http://www.wired.com/geekdad/2010/05/twenty-years-later-remembering-jim-henson/all/1</guid><description>Still funny...&lt;img src="http://feeds.feedburner.com/~r/zx81orguk/~4/Gp-hO-ZpXAw" height="1" width="1"/&gt;</description><taxo:topics xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
      <rdf:Bag xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/tv" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/humour" />
      </rdf:Bag>
    </taxo:topics><feedburner:origLink>http://www.wired.com/geekdad/2010/05/twenty-years-later-remembering-jim-henson/all/1</feedburner:origLink></item><item><title>Iceland, Eyjafjallajökull - May 1st and 2nd, 2010 [del.icio.us]</title><link>http://feedproxy.google.com/~r/zx81orguk/~3/8eypU_5RRyA/11673745</link><category>art iceland travel photography</category><dc:creator>stephendarlington</dc:creator><pubDate>Sun, 16 May 2010 03:29:39 PDT</pubDate><guid isPermaLink="false">http://vimeo.com/11673745</guid><description>&amp;quot;I wish I had more time... but the weather wouldn&amp;#039;t co-operate. Typical Iceland.&amp;quot; Really nice time-lapse photography taken in Iceland.&lt;img src="http://feeds.feedburner.com/~r/zx81orguk/~4/8eypU_5RRyA" height="1" width="1"/&gt;</description><taxo:topics xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
      <rdf:Bag xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/art" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/iceland" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/travel" />
        <rdf:li rdf:resource="http://delicious.com/stephendarlington/photography" />
      </rdf:Bag>
    </taxo:topics><feedburner:origLink>http://vimeo.com/11673745</feedburner:origLink></item></channel>
</rss>
