<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Marc Palmer&#039;s Blog</title>
	<atom:link href="http://www.anyware.co.uk/2005/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.anyware.co.uk/2005</link>
	<description>Grails, Apple, usability and world stuff</description>
	<lastBuildDate>Mon, 07 May 2012 13:32:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Let&#8217;s squash the stupid: &#8220;60% or more iOS apps don&#8217;t break even&#8221;</title>
		<link>http://www.anyware.co.uk/2005/2012/05/07/lets-squash-the-stupid-60-or-more-ios-apps-dont-break-even/</link>
		<comments>http://www.anyware.co.uk/2005/2012/05/07/lets-squash-the-stupid-60-or-more-ios-apps-dont-break-even/#comments</comments>
		<pubDate>Mon, 07 May 2012 13:20:18 +0000</pubDate>
		<dc:creator>Marc Palmer</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[ios]]></category>

		<guid isPermaLink="false">http://www.anyware.co.uk/2005/?p=1203</guid>
		<description><![CDATA[So it goes, apparently, that 60% plus of iOS apps barely break even. I have been hearing for a while the &#8220;mobile app development is a lottery&#8221; proclamation and largely agreeing with it. People telling me that making money on the app store is like having a hit song. I couldn&#8217;t disagree with it, it [...]]]></description>
			<content:encoded><![CDATA[<p>So it goes, apparently, that <a href="http://arstechnica.com/apple/news/2012/05/ios-app-success-is-a-lottery-and-60-of-developers-dont-break-even.ars">60% plus of iOS apps barely break even</a>.</p>
<p>I have been hearing for a while the &#8220;mobile app development is a lottery&#8221; proclamation and largely agreeing with it. People telling me that making money on the app store is like having a hit song.</p>
<p>I couldn&#8217;t disagree with it, it seemed to make sense&#8230; <strong>until I plugged in my sorry excuse for brain</strong>.</p>
<p>It&#8217;s time to hit this messed up, insanely brain-dead FUD with the stupid stick</p>
<p><span id="more-1203"></span>Given that they think at least 60% of apps don&#8217;t break even and there are over 500,000 apps in the store, this means circa 200,000 apps <strong>are breaking even or better</strong>.</p>
<p>So let&#8217;s think about this. Just shy of half of the &#8220;businesses&#8221; are doing good, and some of those are doing great. Where else can you say that? Did it apply to desktop software? No. Does it apply to internet app services? No. Does it apply to any category of business, really? If so please let me know where I can have close guaranteed 50% chance of break even or better in a business. Business is a about investment and risk and in reality a great many businesses struggle for a long time, and many lose huge amounts of investment (in time and money) even if they struggled for years.</p>
<p>Next up: a reality check. Of the 500,000 apps in the store I will posit that less than <strong>5,000</strong> of those (1% for the arithmetic challenged) are great apps <strong>worth paying for</strong>. You know the kind of stuff that is really good and you are happy to shell out for, and feel no &#8220;buyer&#8217;s remorse&#8221; after clicking BUY and finding it doesn&#8217;t really do what you want.</p>
<p>It is certainly not true that 40% of the apps in the store are worth what you pay for them. Therefore there&#8217;s a whole metric buttload of apps in that 200,000 that are making money but largely suck.</p>
<p>Final fact check: Who the hell is running a lottery where you have a 40% chance of winning? If so, please let me know where I can buy a fistful of tickets. &#8220;App development is like a lottery&#8221; is the biggest bullshit ever, if you engage your brain.</p>
<p>Here&#8217;s a top tip to app developers: If you&#8217;re not making money, your app is not good enough. Perhaps you should consider that making mobile apps is not a gold rush that you can make a quick buck in with any old app.</p>
<p>P.S. Apple would love to make the App Store contain only great apps. The fact that probably 99% are crappy must make them wince. They will love it if this &#8220;gold rush&#8221; ends and app submissions start to plateau and only people who make great apps like Instagram, Angry Birds, Paper by 53, GarageBand, OmniFocus, Tweetbot, Infinity Blade etc submit apps. The entire ecosystem would get <strong>much better</strong>. The sooner people realise writing an app is not a golden ticket the better</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anyware.co.uk/2005/2012/05/07/lets-squash-the-stupid-60-or-more-ios-apps-dont-break-even/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Code generators all the way down: Why the Web sucks for Apps</title>
		<link>http://www.anyware.co.uk/2005/2012/04/16/code-generators-all-the-way-down-why-the-web-sucks-for-apps/</link>
		<comments>http://www.anyware.co.uk/2005/2012/04/16/code-generators-all-the-way-down-why-the-web-sucks-for-apps/#comments</comments>
		<pubDate>Mon, 16 Apr 2012 16:06:37 +0000</pubDate>
		<dc:creator>Marc Palmer</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Groovy and Grails]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[apps]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.anyware.co.uk/2005/?p=1192</guid>
		<description><![CDATA[You may have read my previous posts (here, here and here) on why, at a very fundamental level, I think the open web is a terrible way to make applications. It is my day to day work to create free tools for web developers and help my clients build web applications, so please do not [...]]]></description>
			<content:encoded><![CDATA[<p>You may have read my previous posts (<a title="The web is doomed. Native will rule. I’m not alone." href="http://www.anyware.co.uk/2005/2011/09/27/the-web-is-doomed-native-will-rule-im-not-alone/">here</a>, <a title="Native will beat web apps on desktop too" href="http://www.anyware.co.uk/2005/2011/07/27/native-will-beat-web-apps-on-desktop-too/">here</a> and <a title="The web does not a mobile app make." href="http://www.anyware.co.uk/2005/2011/06/13/the-web-does-not-a-mobile-app-make/">here</a>) on why, at a very fundamental level, I think the open web is a terrible way to make applications.</p>
<p>It is my day to day work to <a href="http://grailsrocks.com">create free tools for web developers</a> and help my clients build web applications, so please do not make the mistake of thinking I am waging some anti-Web war here. This is years of web development talking.</p>
<p>I was musing about the nature of the modern web-app stack the other day and suddenly it hit me.</p>
<p>I think I finally got to the root of what makes me feel so uneasy about using the web to develop applications (applications as opposed to pure document presentation which is what the web is pretty good for).</p>
<p>We have such amazing advanced tools now for web apps. You pick a powerful framework like Grails or Rails or Node, you use tools like Less, Moustache, Twitter Bootstrap, you write your JS in something like CoffeeScript or maybe even Objective-J etc.</p>
<p><a href="http://www.anyware.co.uk/2005/wp-content/uploads/2012/04/code-generators-all-the-way-down-0.png?9d7bd4"><img class="alignnone size-medium wp-image-1193" title="code-generators-all-the-way-down-0" src="http://www.anyware.co.uk/2005/wp-content/uploads/2012/04/code-generators-all-the-way-down-0-300x99.png?9d7bd4" alt="" width="300" height="99" /></a></p>
<p>The diagram above shows what a web app used to be, and really what it <em>should</em> be.</p>
<div>But there&#8217;s a bad smell that you can&#8217;t quite place isn&#8217;t there? If not, I suspect you may have a cold.</div>
<p>The reality of modern web apps is very, very different and looks something more like this:</p>
<p><a href="http://www.anyware.co.uk/2005/wp-content/uploads/2012/04/code-generators-all-the-way-down-1.png?9d7bd4"><img class="alignnone size-medium wp-image-1194" title="Code Generators All The Way Down - A typical modern app" src="http://www.anyware.co.uk/2005/wp-content/uploads/2012/04/code-generators-all-the-way-down-1-300x219.png?9d7bd4" alt="" width="300" height="219" /></a></p>
<p>What I realised is that we are now in some evil kind of place where we are using a great many code generators in an attempt to simplify our working lives. Why is this happening? Because it is too hard to make the kind of apps that people deserve with standard web tech. The standards always, always, always lag well behind real world needs.</p>
<p>So we may typically have at least 5 code generators in our app stacks now:</p>
<ul>
<li>A tool like Less or Sass to generate one or more CSS files from a CSS-like language that preserves our sanity. Don&#8217;t bother to tell me that CSS variables are coming soon. This outputs CSS files.</li>
<li>A tool like CoffeeScript to make, in some peoples&#8217; opinions, JavaScript more maintainable and productive &#8211; outputting JS</li>
<li>Some kind of JS and HTML friendly templating tool like Moustache &#8211; generating JS and/or HTML output</li>
<li>A view layer like GSP, JSP, HAML or whatever else you like &#8211; which is generating HTML output</li>
<li>Often a view aggregation/decoration layer like Sitemesh &#8211; which is generating HTML output from multiple HTML inputs</li>
</ul>
<p>This is not even the end of it. CSS and JS optimisers and bundlers are a form of code generation. CSS Sprite generators create images and/or CSS files. Some of these are code generators that process the output of other generators. Its like the dev toolchain from hell.</p>
<p>We&#8217;re not even talking here about client-side JS that generates markup or DOM nodes, or that your server-side app stack is likely generating byte code from your source code, and that itself runs inside a VM.</p>
<p>Look at this powerful stack of tools we have now, and teleport yourself back to the year 2000.</p>
<p>Someone says to you that they&#8217;ve got this great web app stack you can use and it needs at least 5 different code generation tools, and you&#8217;ll have to write in at least 4 but probably 5 or 6 languages. You. Have. Got. To. Be. Kidding. Me.</p>
<p>There&#8217;s nothing they could have shown you that would have persuaded you it was worth this crazy complexity or investment. What have we done? We&#8217;ve flogged this broken &#8220;solution&#8221; for making cross platform apps so hard and for so long that we cannot see the wood for the trees.</p>
<p>Obviously, in terms of what we can do with web apps this is indeed progress. But only in the context of a completely, utterly broken platform for making applications.</p>
<p>No wonder Flash was so popular.</p>
<p>But here is the question: How complex does this stack have to get for the perceived cost trade-off vs. native for mobile and/or desktop to fall down?</p>
<p>You need to factor in the type of web application &#8211; most are not complex, perhaps easier to implement with native UIs &#8211; and revenue generation models. Also the availability of people with the skills. At what point does it become easier to hire people with native skills than people with &#8216;hit the ground runnings&#8217; skills in say 5 different languages.</p>
<p>Remember that the web is supposed to be our &#8220;single language&#8221; cross platform solution, even when single means a minimum of 4; app code e.g. PHP/Java/Groovy/Ruby/Python, and UI with CSS/JS/HTML. The fact we can&#8217;t do anything &#8220;good&#8221; with it these days without an extra handful of processing and languages on top is a pretty sad indictment.</p>
<p>In the old days when I&#8217;d trawled through the minutiae of the SMTP, NNTP, NTP, POP3, HTTP and MIME RFCs, the web was <strong>not</strong> touted as the solution to cross platform app development in any way whatsoever.</p>
<p>In fact the response of that time to the problems we have now would have been to create something new. Something fit for purpose. A real cross platform UI based-application RFC and new protocols and standards to hang off it. Something that didn&#8217;t require a zillion complex tools and dependencies.</p>
<p>Something more like a native environment. But that&#8217;s not possible because all the O/S vendors need to differentiate.</p>
<p>So it is because of them that we are stuck with this stack from hell &#8211; or we choose a native platform or two and go with it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anyware.co.uk/2005/2012/04/16/code-generators-all-the-way-down-why-the-web-sucks-for-apps/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Grails Platform Core 1.0.M1 Plugin &#8211; highlights</title>
		<link>http://www.anyware.co.uk/2005/2012/03/30/grails-platform-core-1-0-m1-plugin-highlights/</link>
		<comments>http://www.anyware.co.uk/2005/2012/03/30/grails-platform-core-1-0-m1-plugin-highlights/#comments</comments>
		<pubDate>Fri, 30 Mar 2012 11:51:37 +0000</pubDate>
		<dc:creator>Marc Palmer</dc:creator>
				<category><![CDATA[Groovy and Grails]]></category>
		<category><![CDATA[plugin release]]></category>

		<guid isPermaLink="false">http://www.anyware.co.uk/2005/?p=1190</guid>
		<description><![CDATA[A few days ago we released Platform Core Plugin 1.0.M1 for Grails. The platform will provide APIs and utilities to help us take the Grails ecosystem to the next level. Even though it is a milestone release, it has very functional Configuration and Security APIs that are already in use in some production apps. To [...]]]></description>
			<content:encoded><![CDATA[<p>A few days ago we released <a href="http://www.anyware.co.uk/2005/2012/03/29/inside-the-grails-dependency-injection-binding-vulnerability/">Platform Core Plugin 1.0.M1</a> for <a href="http://grails.org">Grails</a>. The platform will provide APIs and utilities to help us take the Grails ecosystem to the next level.</p>
<p>Even though it is a milestone release, it has very functional Configuration and Security APIs that are already in use in some production apps.</p>
<p>To pique your interest, here are a few of my favourite things available in this release of it:</p>
<ol>
<li>the <strong>pluginConfig</strong> variable added to all artefacts declared in plugins. This receives the namespaced Config values for the plugin, tying into the cool new <strong>doWithConfigOptions</strong> hook that lets plugins declare the configuration values that are valid &#8211; as well as default values and validators. <a href="http://grailsrocks.github.com/grails-platform-core/guide/configuration.html">See the docs</a></li>
<li>The <strong>displayMessage</strong> method added to controllers and the <strong>g:displayMessage</strong> tag that renders the messages set by controllers. Along with their flash scope variants this eliminates more boiler plate from controllers, and provides a uniform mechanism for plugins and apps to use &#8211; your app views don&#8217;t need to know how a plugin passes a message to the view if the plugin uses these methods. <a href="http://grailsrocks.github.com/grails-platform-core/guide/uiextension.html">See the docs</a></li>
<li>The <strong>securityIdentity</strong> variable added to all Controllers, Services, Domains and TagLibs to provide the identity of the current logged in user, <em>independent of the security plugin your code is using</em>. This opens up app-defined security integration to all plugins &#8211; and using something like this would make the recent dependency injection exploits less likely. No need to inject any services into your domains to get the current user. <a href="http://grailsrocks.github.com/grails-platform-core/guide/security.html">See the docs</a></li>
</ol>
<p>There&#8217;s a lot more to come, we&#8217;re really excited about the M2 release which will expose the public API for Navigation and Events.</p>
<p>Note that if you want to use the security API now in your apps and plugins, you will need to <a href="http://grailsrocks.com/2012/03/28/hooking-up-platform-core-security-api-to-your-security-provider/">implement the security bridge for your chosen security provider</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anyware.co.uk/2005/2012/03/30/grails-platform-core-1-0-m1-plugin-highlights/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Inside the Grails dependency injection binding vulnerability</title>
		<link>http://www.anyware.co.uk/2005/2012/03/29/inside-the-grails-dependency-injection-binding-vulnerability/</link>
		<comments>http://www.anyware.co.uk/2005/2012/03/29/inside-the-grails-dependency-injection-binding-vulnerability/#comments</comments>
		<pubDate>Thu, 29 Mar 2012 21:36:29 +0000</pubDate>
		<dc:creator>Marc Palmer</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Groovy and Grails]]></category>
		<category><![CDATA[Grails]]></category>

		<guid isPermaLink="false">http://www.anyware.co.uk/2005/?p=1179</guid>
		<description><![CDATA[You may have seen the recently announced vulnerability in Grails binding relating to dependency injection. I wanted to explain this in a little more depth so that everybody knows how to tell whether or not their current systems are vulnerable to it and what this might mean. It is worth noting that new releases of [...]]]></description>
			<content:encoded><![CDATA[<p>You may have seen the <a href="http://www.springsource.com/security/cve-2012-1833">recently announced vulnerability in Grails binding</a> relating to dependency injection. </p>
<p>I wanted to explain this in a little more depth so that everybody knows how to tell whether or not their current systems are vulnerable to it and what this might mean. It is worth noting that new releases of <a href="http://grails.org">Grails</a> 1.3.x and 2.0.x have already been made by the team &#8211; upgrading to those now and redeploying your app will close this particular hole for you.</p>
<p><span id="more-1179"></span></p>
<p>To know if you must take some rapid action to address this issue, some detail is required on the nuance of the problem.</p>
<p>In summary: if you have a command or domain object that receives property values from param binding that is not protected adequately by include/exclude lists, <em>and that command or domain receives dependency injected beans</em> from the application context, you <strong>may</strong> be at risk.</p>
<p>There is an extra dimension here that further narrows down the risk, more of that in a moment, but suffice to say there are apps out there right now that can effectively be <strong>taken out of service by a single malicious request</strong> &#8211; sometimes only from a registered user of the site, but not exclusively. So yes, this is serious and <em>yes you do need to understand it</em> and audit your code if you are not in a position to immediately upgrade Grails and redeploy your app.</p>
<p>On to the details. Say you have a command or domain object that needs to store the current user id as a property of the object before saving. To do this you may inject a service and call a method on the service during a persistence event. The injection is the part that matters:<br />
<code><br />
class UserProfile {<br />
  def securityService<br />
  ...<br />
}<br />
</code><br />
Now it should be pretty obvious by now that there is the opportunity here to trash the value of the securityService field if the request includes a parameter with the same value. </p>
<p>As the property is untyped, binding can stick anything it likes in there, so you can replace the injected service with a String from the request params.</p>
<p>That&#8217;s actually not so terrible. Usually if you use the service it will crash with a missing method error.</p>
<p>If the injected property is explicitly typed nothing will happen at all as binding won&#8217;t know how to convert a String to that type. However that won&#8217;t save you from the real threat.</p>
<p>The threat comes from the fact that Spring beans injected like this are often singletons &#8211; there is just one shared instance in the whole app &#8211; and that beans often inject into themselves other beans.</p>
<p>So now imagine that our <code>securityService</code> also injects into itself a <code>cacheService</code>:</p>
<p><code><br />
class SecurityService {<br />
    def cacheService<br />
    ...<br />
}<br />
</code></p>
<p>Because this is injected untyped, binding can reach this cacheService singleton bean and trash its value. All you have to do is pass in a query parameter like <code>securityService.cacheService=boom</code> and your security service bean is now trashed as any access to the cache service will likely result in missing method or missing property errors &#8211; <em>for all future requests until your app is restarted</em>. </p>
<p>This should show that actually the problem is not that common in code, and requires knowledge of your application to some extent, which mitigates risk. However if you use plugins that are open source and people can reasonably guess you used certain plugins / probe for them, then your risks are higher. </p>
<p>There is a final nuance to this. If the security service has public <strong>typed</strong> properties that can be bound from String i.e. booleans, numbers, dates and perhaps more, those values can be trashed on the singleton security service also &#8211; or worse changed without your knowledge.</p>
<p>Again, in terms of open source plugins this opens up risk &#8211; if you inject beans from plugins that have such fields, attackers can find out about this and use it.</p>
<p>Luckily the scope of this is realistically likely to be small, but it is sufficiently nuanced that the only recommendations at this time can be:</p>
<ol>
<li>read <a href="http://blog.springsource.org/2012/03/28/secure-data-binding-with-grails/">Jeff&#8217;s blog on binding safely</a></li>
<li>upgrade to one of the new grails releases and redeploy now</li>
<li>or remove all injected properties in commands and domains</li>
<li>or use includes/excludes in every single binding call you make</li>
</ol>
<p>Remember that you may use plugin controllers or domains that are also susceptible. For example <a href="http://weceem.org">Weceem</a> is currently vulnerable but only where users have content edit rights, and apps using Spring Security Core may be vulnerable as it is not uncommon to inject springSecurityService into domains and that service has a number of corruptible dependencies injected.</p>
<p>The quick fix is to use option 2. Do it.</p>
<p>Thanks to the SpringSource guys for working so hard to get fixes in place. It is heartening that such efforts are taken to respect such problems and deal with them correctly when, truth be told, they are just really annoying and time consuming.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anyware.co.uk/2005/2012/03/29/inside-the-grails-dependency-injection-binding-vulnerability/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How the development community killed quality for themselves</title>
		<link>http://www.anyware.co.uk/2005/2012/03/12/how-the-development-community-killed-quality-for-themselves/</link>
		<comments>http://www.anyware.co.uk/2005/2012/03/12/how-the-development-community-killed-quality-for-themselves/#comments</comments>
		<pubDate>Mon, 12 Mar 2012 12:18:41 +0000</pubDate>
		<dc:creator>Marc Palmer</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Groovy and Grails]]></category>
		<category><![CDATA[Programming links]]></category>

		<guid isPermaLink="false">http://www.anyware.co.uk/2005/?p=1162</guid>
		<description><![CDATA[Businesses need great software libraries and components. Businesses can get that stuff, free for that last ~10 years or so, but in reality the quality is very variable whether they know it or not. Also, because it is free people typically do not have the high bar they should apply to something they purchase. Furthermore, [...]]]></description>
			<content:encoded><![CDATA[<p>Businesses need great software libraries and components.</p>
<p>Businesses can get that stuff, free for that last ~10 years or so, but in reality the quality is very variable whether they know it or not. Also, because it is free people typically do not have the high bar they should apply to something they purchase.</p>
<p>Furthermore, it is hard to really feel that you value something if it cost you nothing.</p>
<p>It is also pretty intuitive that people who get stuff free usually don&#8217;t want to pay for it later, especially if it is still available for free.</p>
<p>People all over the world make free stuff.</p>
<p>But surely businesses don&#8217;t really want to base their commercially important systems on stuff created by hobbyists to which they have no actual connection or provenance, do they? That wold be crazy right?</p>
<p>Of course a lot of free open source is created by people at work. These people are usually paid to work on stuff the company needs or sells &#8211; but sometimes they are paid by a company that produces open source and sells consulting and support. Sometimes they just do it under the radar.</p>
<p>Sometimes, just sometimes, some big organisation may bankroll/sponsor some free stuff for a while.</p>
<p>What is the end result here?</p>
<p>How does it affect the quality of the software we use, and what code is developed?</p>
<p>How does it affect our forward progress in this field of software development?</p>
<p>It certainly means most companies get to build their products without paying for a lot of the code they use. However the cost of this software (that they are not paying) split among all the people worldwide using it, would be miniscule.</p>
<p>By jumping on the no-cost open software model, we developers have basically stymied hardcore progress on quality globally.</p>
<p>This is because hobby projects must be sufficiently small  for hobbyists to manage at a high quality &#8211; or it becomes low quality, perhaps only later down the line. Companies the world over are using the hobbyist stuff that is between both ends of that spectrum &#8211; usually without even thinking about it.</p>
<p>Bigger projects that cannot be sustained by hobbyists or become commercially important to somebody, or an attractive bit of commercial bling, may survive through team acquisition / sponsorship and related commercials mentioned above.</p>
<p>But what does that mean?</p>
<p>It inevitably means the direction of those bigger projects follow a course commensurate with the commercial interests of the backers, whatever that may be. It often means increased quality and robustness, which is good.</p>
<p>However it also means that effectively the large high-quality successful projects that we all have access to for free are implicitly filtered and chosen by those backers.</p>
<p>And we really have no way to change this by choosing to pay for stuff to support developers to make it their full time occupation to develop, refine and support their users.</p>
<p>Why? Because someone else will always be doing it free and everyone&#8217;s become used to free.</p>
<p>Of course commercial software does not guarantee quality. But without financial returns you cannot get the dedicated minds of smart people to make &#8220;insanely great&#8221; code for you to use, on an ongoing basis. At some point it will end.</p>
<p>I miss the days when people would pay you ~$50 for a library and get support from you bundled in.</p>
<p>You could dedicate yourself to your users.</p>
<p>[Note that I make a good living from consulting, and I am floating the <a href="http://grailsrocks.com">Grailsrocks</a> support product too. What I'm saying is I'm not whining about how I can't make money - I care about quality, innovation and strong community]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anyware.co.uk/2005/2012/03/12/how-the-development-community-killed-quality-for-themselves/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Retina display: more than meets the eye</title>
		<link>http://www.anyware.co.uk/2005/2012/03/11/retina-display-more-than-meets-the-eye/</link>
		<comments>http://www.anyware.co.uk/2005/2012/03/11/retina-display-more-than-meets-the-eye/#comments</comments>
		<pubDate>Sun, 11 Mar 2012 20:00:56 +0000</pubDate>
		<dc:creator>Marc Palmer</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://www.anyware.co.uk/2005/?p=1168</guid>
		<description><![CDATA[With the new iPad announcement, there&#8217;s been an unsurprising amount of naysaying about the &#8220;uninspiring&#8221; new features and that Apple are going to cede the market now bla bla bla. There&#8217;s only one way to say this: what a load of bollocks. If you don&#8217;t agree with the statement &#8220;the retina display on the new [...]]]></description>
			<content:encoded><![CDATA[<p>With the new iPad announcement, there&#8217;s been an unsurprising amount of naysaying about the &#8220;uninspiring&#8221; new features and that Apple are going to cede the market now bla bla bla.</p>
<p>There&#8217;s only one way to say this: what a load of bollocks.</p>
<p>If you don&#8217;t agree with the statement &#8220;the retina display on the new iPad is a game changer&#8221; you need to consider this:</p>
<ol>
<li>When you cannot see the individual pixels, on a screen of this size, it will no longer seem like you are looking at a screen. This has a massive effect on the way the user feels and perceives the product and the software that runs on it. If you don&#8217;t believe this, throw away your laser printer and get a 100 dpi dot matrix from the 1980s. While you don&#8217;t normally think about it your brain and perception is aware of the tiny black grid separating the pixels and the &#8220;unnatural&#8221; jagged edges on things.</li>
<li>Once the public see this screen, all other tablet screens (and in turn laptop screens) will be judged by this standard. Where can competitors go to compete with this? Brighter? More saturation? More battery life? All of those are possible, but they are not differentiators &#8211; and nobody can compete with iPad battery life. And they have to be retina as well. Effectively this new screen will be THE screen. THE future of displays. There is no point increasing resolution any further, and resolution of a device no longer becomes important at retina ppi &#8211; all that matters is the physical size of the screen. And if you&#8217;re thinking about 7&#8243; tablets, in this new market all that means is less space to display stuff.</li>
<li>This screen is by all accounts very challenging to manufacture and very expensive. Only Apple can achieve this right now, perhaps for a couple of years &#8211; they&#8217;re using their buying power and cash reserves to achieve the &#8220;impossible&#8221;. This probably puts all other tablet makers in the shitter with inferior screen resolution for the next couple of years.</li>
<li>Still to this day nobody can compete with iPad on price for the same features and quality. Now the gap between Apple and those tablets has got a lot bigger. It may make it impossible for others to catch them now.</li>
</ol>
<div>Still don&#8217;t get it? Then you likely never will.</div>
<div></div>
<div><strong>UPDATE:</strong> Read this <a href="http://www.codinghorror.com/blog/2012/03/welcome-to-the-post-pc-era.html">great post by Jeff Atwood (@codinghorror)</a> on this including quotes from e.g. the creator of ClearType on the significance of the new iPad screen not that it is in the wild.</div>
<div></div>
<div><strong>ANOTHER UPDATE:</strong> Apple report they have sold over 3 million of the new iPads in the first ~3 days.</div>
]]></content:encoded>
			<wfw:commentRss>http://www.anyware.co.uk/2005/2012/03/11/retina-display-more-than-meets-the-eye/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Announcing commercial support and a new Grails plugin</title>
		<link>http://www.anyware.co.uk/2005/2012/02/28/announcing-commercial-support-and-a-new-grails-plugin/</link>
		<comments>http://www.anyware.co.uk/2005/2012/02/28/announcing-commercial-support-and-a-new-grails-plugin/#comments</comments>
		<pubDate>Tue, 28 Feb 2012 15:02:10 +0000</pubDate>
		<dc:creator>Marc Palmer</dc:creator>
				<category><![CDATA[Groovy and Grails]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://www.anyware.co.uk/2005/?p=1159</guid>
		<description><![CDATA[It&#8217;s been an odd day. It started with me starving because I had to fast all night for a blood test. Then I had to fix some horrible Java date calculation bugs in some client code. Next up (its not 9am yet) I had to go and catch a very feisty rabbit that was running [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been an odd day. It started with me starving because I had to fast all night for a blood test. Then I had to fix some horrible Java date calculation bugs in some client code. Next up (its not 9am yet) I had to go and catch a very feisty rabbit that was running across the A419 outside our house.</p>
<p>Anyone I eventually managed to launch <a href="http://grailsrocks.com">Grailsrocks</a>. Please take a look. Some great value commercial support plans for my <a href="http://grails.org">Grails</a> plugins.</p>
<p>I also released a new plugin to accompany this, but not just for customers, called <a href="http://grails.org/plugin/rocks">Rocks</a>. Its pretty cool, and hints at some of the future ideas I have for the Grails development.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anyware.co.uk/2005/2012/02/28/announcing-commercial-support-and-a-new-grails-plugin/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Getting started with Arduino / Rainbowduino</title>
		<link>http://www.anyware.co.uk/2005/2012/01/17/getting-started-with-arduino-rainbowduino/</link>
		<comments>http://www.anyware.co.uk/2005/2012/01/17/getting-started-with-arduino-rainbowduino/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 10:30:00 +0000</pubDate>
		<dc:creator>Marc Palmer</dc:creator>
				<category><![CDATA[Groovy and Grails]]></category>
		<category><![CDATA[Programming links]]></category>

		<guid isPermaLink="false">http://www.anyware.co.uk/2005/?p=1135</guid>
		<description><![CDATA[I recently bought some Arduino microcontroller/prototyping boards and components. The plan is to rediscover my childhood interest in electronics and familiarise myself with these tools so that maybe in future I can help teach some of this at schools. This is because I believe that its the practical stuff that can integrate with other school [...]]]></description>
			<content:encoded><![CDATA[<p>I recently bought some <a href="http://arduino.cc">Arduino</a> microcontroller/prototyping boards and components. The plan is to rediscover my childhood interest in electronics and familiarise myself with these tools so that maybe in future I can help teach some of this at schools. This is because I believe that its the practical stuff that can integrate with other school lessons that can give young people the best start at programming.</p>
<p>The great thing is that actually, with only a little knowledge, doing this stuff is really easy. The Arduino board designs and software are open source, which is a good thing. However as usual this means the docs can be problematic.</p>
<p><span id="more-1135"></span>There&#8217;s a confusing array of Arduino hardware out there. The boards have the ATmega micro controller chips on them that you program, and lots of digital and analog input/outputs so you can control and measure things. There are boards with Ethernet, Wi-fi, USB and even LED matrix drivers.</p>
<h2>Basic Arduino (UNO)</h2>
<p>Using this Arduino which has just a USB port and the I/O connectors, plus a bread board and 4-digit 7-segment LED display from an <a href="http://earthshineelectronics.com/">Earthshine</a> starter kit, I managed after digging out the spec sheet on the display, to create a counter from 0001 to 9999. This sounds trivial, but it has a few challenges:</p>
<ol>
<li>The LED display is basically 4 x 8 LEDs (7 segment + decimal point)</li>
<li>There are only 12 pins on it. Huh?</li>
<li>If you don&#8217;t send power to one of the LEDs, it goes off.</li>
</ol>
<p>The spec sheet showed that 4 pins control which of the 4 digits you are addressing &#8211; set them LOW (common cathode) to enable the corresponding digit.</p>
<p>Then you set some of the other 8 pins HIGH to represent the digit or symbol you want to show.</p>
<p>So to set all 4 digits without any shift register chips or other smarts to &#8220;remember&#8221; the state of segments for each digit, you have program the Arduino to continually loop through the 4 selector pins, set the segment pins HIGH, wait a few milliseconds, then set the selector pin for that digit HIGH (to turn it off), and then repeat the same process for the next digit&#8217;s selector pin. What happens is that each digit is illuminated for say 5ms and then it moves to the next one.</p>
<p>They are continually going on and off, but because you constantly loop at high speed over them, it appears to be a continuous display.</p>
<h2>Much more fun &#8211; the Rainbowduino</h2>
<p>The <a href="http://www.seeedstudio.com/wiki/Rainbowduino_v3.0">Rainbowduino</a> is a self contained Arduino board and the latest v3.0 one has built in mini-USB. So its just like an Arduino UNO but has a bunch of other controllers to drive an 8&#215;8 RGB LED matrix with constant current (which I think means when lots of LEDs are on, they stay the same brightness). CAUTION: the LEDs are also seemingly as bright as the sun and staring at them is likely to leave you with a disturbing 8&#215;8 grid of dots burnt into your retina.</p>
<p>So I bought the Rainbowduino plus an 8&#215;8 RGB LED Matrix. The Rainbowduino is built to have the matrix directly plugged into the top of it, which is very handy.</p>
<div id="attachment_1140" class="wp-caption aligncenter" style="width: 302px"><a href="http://www.anyware.co.uk/2005/wp-content/uploads/2012/01/rainbowduino-off.jpg?9d7bd4"><img class="size-medium wp-image-1140 " title="Rainbowduino board plus LED matrix mounted on top" src="http://www.anyware.co.uk/2005/wp-content/uploads/2012/01/rainbowduino-off-e1326794159242-292x300.jpg?9d7bd4" alt="" width="292" height="300" /></a><p class="wp-caption-text">Rainbowduino board plus LED matrix mounted on top</p></div>
<p>There are some tricks to getting this working however:</p>
<ol>
<li>Unlike the Arduino UNO, my Mac would not recognise the Rainbowduino when plugged in to USB. I had to install the <a href="http://www.ftdichip.com/Drivers/VCP.htm">&#8220;FTDI&#8221; drivers from here</a>. Thanks to @andydavies for the tip there</li>
<li>The docs on Rainbowduino are sketchy, and seem to be mainly targeted at an LED 3D cube rather than the matrix, and using the Processing language (which is not what the Arduino IDE uses).</li>
<li>It turns our there are several options for controlling this matrix. You can flash your own Arduino &#8220;sketches&#8221; (programs) directly onto the Rainbowduino, or you can use the I2C serial protocol to drive the Rainbowduino from another Arduino &#8211; I am guessing this means the Rainbowduino ATMega has a custom boot loader that supports serial comms to drive the display. I may be wrong.</li>
</ol>
<p>To solve (2) I had to find the driver code that would work with the Arduino IDE. The <a href="http://www.seeedstudio.com/wiki/Rainbowduino_v3.0#Resources">v3 Rainbowduino driver is here</a>. If you save that to ~/Documents/Arduino/Libraries/Rainbowv3 or similar (for Mac OS X at least that is where it is) and restart Arduino IDE, you will see you can now insert it into your Arduino sketch using the &#8220;Import Library&#8230;&#8221; menu option.</p>
<p>You will then find it does not compile, complaining it cannot find &#8220;WProgram.h&#8221;. This is I think because the library is built to run with &#8220;Wiring&#8221; programming language. To fix this you need to edit the Rainbowduino.h file from the driver that you saved, and change the #include &lt;WProgram.h&gt; to &lt;Arduino.h&gt;.</p>
<p>After that you can use the driver, which is incredibly simple:</p>
<ol>
<li>in setup() call Rb.init()</li>
<li>in loop() call some Rb methods such as: Rb.blankDisplay() and Rb.setPixelXY(x, y, rgbcolour)</li>
</ol>
<div id="attachment_1141" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.anyware.co.uk/2005/wp-content/uploads/2012/01/rainbowduino-spectrum.jpg?9d7bd4"><img class="size-medium wp-image-1141 " title="Rainbowduino with diagonal spectrum" src="http://www.anyware.co.uk/2005/wp-content/uploads/2012/01/rainbowduino-spectrum-e1326794503914-300x277.jpg?9d7bd4" alt="" width="300" height="277" /></a><p class="wp-caption-text">Rainbowduino with diagonal spectrum</p></div>
<p>Why so dark? LEDs are too bright to photograph without a filter. I put lots of tissue paper over them.</p>
<p>So here&#8217;s an example to apply the colour spectrum diagonally to the entire grid in action:</p>
<script src="https://gist.github.com/1626042.js"></script><noscript><p>View the code on <a href="https://gist.github.com/1626042">Gist</a>.</p></noscript>
<p>Note that if you find your reds are not working you probably have a C typing problem, and need to explicitly cast your values to uint32_t to avoid the RR of your RRGGBB being lost to 16bit accuracy.</p>
<p>And seeing as most of my life is spent in <a href="http://grails.org">Grails</a>&#8230; this wouldn&#8217;t be complete without a video of the Grails cup shining in all its 8&#215;8 glory.</p>
<div style='text-align:center;'>
<object type="application/x-shockwave-flash" width="400" height="300" data="http://www.vimeo.com/moogaloop.swf?clip_id=35189087&amp;server=www.vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=01AAEA">
	<param name="quality" value="best" />
	<param name="allowfullscreen" value="true" />
	<param name="scale" value="showAll" />
	<param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id=35189087&amp;server=www.vimeo.com&amp;fullscreen=1&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=01AAEA" />
	<param name="wmode" value="opaque" />
</object>
</div>
<p>And here&#8217;s the code, if you want some Grails glory yourself:</p>
<script src="https://gist.github.com/1626085.js"></script><noscript><p>View the code on <a href="https://gist.github.com/1626085">Gist</a>.</p></noscript>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anyware.co.uk/2005/2012/01/17/getting-started-with-arduino-rainbowduino/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The new 4OD web player is shit</title>
		<link>http://www.anyware.co.uk/2005/2011/11/23/the-new-4od-web-player-is-shit/</link>
		<comments>http://www.anyware.co.uk/2005/2011/11/23/the-new-4od-web-player-is-shit/#comments</comments>
		<pubDate>Wed, 23 Nov 2011 22:34:19 +0000</pubDate>
		<dc:creator>Marc Palmer</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://www.anyware.co.uk/2005/2011/11/23/the-new-4od-web-player-is-shit/</guid>
		<description><![CDATA[Tonight my wife and I wanted to catch up with Misfits on 4OD. The result can only be described as being shafted by bad business choices, bad design and bad code. We started off trying to watch it on the tv via AirPlay to the apple tv, from the iPad. That one sentence tells you [...]]]></description>
			<content:encoded><![CDATA[<p>Tonight my wife and I wanted to catch up with Misfits on 4OD. The result can only be described as being shafted by bad business choices, bad design and bad code. </p>
<p><span id="more-1125"></span></p>
<p>We started off trying to watch it on the tv via AirPlay to the apple tv, from the iPad. That one sentence tells you that apple are certain to raid the tv market. Remove two components from that list. </p>
<p>Anyway it was fail. Every three minutes or so the 4OD app stopped streaming to apple tv. BBC iPlayer in Safari streams fine so it&#8217;s either the 4od app not liking AirPlay or a new iOS 5 bug as we did this fine before 5.0.1</p>
<p>We resorted to watching on the MacBook pro as we had done in the past fine.</p>
<p>Harbinger of what was to follow &#8211; channel 4 site demanded I upgrade Flash first. Fine</p>
<p>We start watching. Subjected to 3 mandatory viewing ads at the start all is well for a while.</p>
<p>Another ad break, another 3 ads. Some repeated from before. Watch some more. </p>
<p>Oh noes! Pop up message saying there&#8217;s an error and the content can&#8217;t be played. Video stops. Hmm. Press play again. Starts from beginning.</p>
<p>Watch first three ads I enjoyed so much again. Unmissable, really.</p>
<p>Fast forward to next mandatory ad section to try to get to where we were. </p>
<p>Watch 3 more ads a second time. Its awesome.</p>
<p>Watch some more misfits at last. </p>
<p>Oh noes! Error message again. Video carries on though. Message goes away by itself after many seconds. Hooray! Watch some more. </p>
<p>Error message again! Video stops. Press play again. Yay! Carries on from 2 ad breaks back, but not from the start. We&#8217;re blessed! Skip to ad break before last error point. Bonus! Only see 1 repeat ad!</p>
<p>Oh noes! The missing 2 ads are undead and <strong>playing in the background somehow &#8211; audio is mixed with programme audio</strong>. Press space to try to pause to work out what is going on. Pressing space doesn&#8217;t pause. It opens a new browser window with an advert for Assassins Creed &#8211; one of the ads we were not currently viewing. Soon discover clicking anywhere on the player window launches last ad&#8217;s website. Just what I wanted. Especially 5 minutes after avidly watching an ad. </p>
<p>I have no other browser tabs or windows open with the video streams of the ads. Player has simply gone mad. We wait for ads we cannot see but can hear to finish. </p>
<p>Unpause the player, full screen it again, watch more misfits. </p>
<p>Oh noes! Another error message. Video carries on, message obscuring screen for minutes. </p>
<p>Bonus! Audio from ads we cannot see becomes mixed in again! Now I have mastered this streaming tv technology I know to pause the video, mute the audio, wait a few minutes, unmute, resume video. Perfect!</p>
<p>We carry on watching, we&#8217;re 38 minutes into a 45 minute programme &#8211; but its taken over an hour to get this far. The magic of tv is somewhat eroded. Only in part due to more ads than content. </p>
<p>Oh noes! A few minutes before the end another error message, video stops. Press play&#8230; back at the beginning! YES! I had forgotten those original ads at the start that were repeated throughout, and wanted to catch up on those again. Thank you Channel 4.</p>
<p>The final insult, though perhaps merciful: the laptop battery runs out and it all shuts down. </p>
<p>I pick up the iPad, open 4od app, press play on Misfits. Have to watch one short ad, then can instantly jump to the last few minutes and watch it flawlessly while holding the iPad aloft.</p>
<p>This experience speaks volumes about the state of current computing, tv, media, advertising and software development.</p>
<p>If it weren&#8217;t for the iOS AirPlay bug none of this would have happened. </p>
<p>Fear the Apple TV chaps. </p>
<p>Oh, and there must be a separate team doing 4OD for iPad, cos the experience is infinitely better than the web one. Far fewer ads. Rapid seeking. No upgrades. No Flash. Great content. Anywhere. </p>
<p>That&#8217;s all you need &#8211; happy consumers.</p>
<p>And believe it or not that&#8217;s what advertisers need. </p>
<p>I&#8217;ve been good so far. Here the NSFW summary: OH FOR FUCK&#8217;S SAKE WHAT ON EARTH DO THOSE WANKERS THINK THEY ARE DOING?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anyware.co.uk/2005/2011/11/23/the-new-4od-web-player-is-shit/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The joy and singular terror of mushrooms</title>
		<link>http://www.anyware.co.uk/2005/2011/11/14/the-joy-and-singular-terror-of-mushrooms/</link>
		<comments>http://www.anyware.co.uk/2005/2011/11/14/the-joy-and-singular-terror-of-mushrooms/#comments</comments>
		<pubDate>Mon, 14 Nov 2011 15:28:32 +0000</pubDate>
		<dc:creator>Marc Palmer</dc:creator>
				<category><![CDATA[Family life]]></category>
		<category><![CDATA[Food]]></category>
		<category><![CDATA[World]]></category>

		<guid isPermaLink="false">http://www.anyware.co.uk/2005/?p=1110</guid>
		<description><![CDATA[For the first time in years my family and I had a wonderfully successful fungus foray in The Forest of Dean. The kids are just now old enough to tolerate a couple of hours of walking and searching in the woods. I&#8217;ve been picking mushrooms for about 15 years now, though not that regularly. We [...]]]></description>
			<content:encoded><![CDATA[<p>For the first time in years my family and I had a wonderfully successful fungus foray in The Forest of Dean. The kids are just now old enough to tolerate a couple of hours of walking and searching in the woods.</p>
<p>I&#8217;ve been picking mushrooms for about 15 years now, though not that regularly. We were blessed with finding a good amount of Ceps and a lot of Wood Blewit this time, along with some Blushing Wood Mushroom and some small Horse Mushroom. Just before cooking my wife asked me to confirm the young white Horse mushrooms were what I thought and I said yes of course. I&#8217;m experienced after all. I know how to identify Agaricus species.<br />
<span id="more-1110"></span><br />
I cooked some ceps, blewits, wood mushroom and the horse mushroom with some spaghetti, garlic and thyme for me, my wife and kids. It was well received by all.</p>
<p><a href="http://www.anyware.co.uk/2005/wp-content/uploads/2011/11/589a0ae80e1511e1a87612313804ec91_7.jpg?9d7bd4"><img class="alignnone size-medium wp-image-1113" style="margin-top: 8px; margin-bottom: 8px;" title="589a0ae80e1511e1a87612313804ec91_7" src="http://www.anyware.co.uk/2005/wp-content/uploads/2011/11/589a0ae80e1511e1a87612313804ec91_7-300x300.jpg?9d7bd4" alt="" width="300" height="300" /></a><br />
After the meal I started to wonder. My wife&#8217;s questioning made me suddenly anxious as to whether my Horse Mushroom identification was correct. I thought: they were a bit small actually for horse mushroom, and the &#8220;cog&#8221; pattern on the ring wasn&#8217;t so well defined. They didn&#8217;t stain brightly yellow, I double checked.</p>
<p>I was feeling a bit tense, wondering if I felt truly sick. The abject fear that perhaps I had fed Death Caps or Destroying Angel to my entire family alone started making me feel ill. You simply cannot *feed* your children a mushroom that you cannot identify &#8211; this is a potentially lethal mistake. I went over the id of all the really poisonous white/yellow mushrooms again and my memory of how they looked (another foolish mistake &#8211; not keeping one back from cooking).</p>
<p>I ended up the evening pretty certain that what we had was indeed an Agaricus, the Wood mushroom <a href="http://www.mykoweb.com/CAF/species/Agaricus_silvicola.html">Agaricus Silvicola</a> &#8211; a fine eating mushroom at that. Not &#8211; thankfully due to my in-built &#8220;Agaricus identification skills&#8221; but sadly not through real conscious identification &#8211; a <a href="http://en.wikipedia.org/wiki/Amanita_virosa">Destroying Angel</a>.</p>
<p>I can only say how genuinely mortifying it is to be in this kind of situation &#8211; even if just through a bought of self-doubt &#8211; wondering if in 8-12 hours your entire family will start suffering the dreadful symptoms of often fatal Amanita poisoning that begins with diarrhoea and ends with kidney failure.</p>
<p>Moral of the story: even if you&#8217;re experienced at picking mushrooms don&#8217;t let excitement get the better of you &#8211; remember the perils of identifying the &#8220;small white mushroom&#8221;. In future I&#8217;ll be steering clear of them. I never want to feel that fear again.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.anyware.co.uk/2005/2011/11/14/the-joy-and-singular-terror-of-mushrooms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 12/15 queries in 0.059 seconds using disk: basic

Served from: www.anyware.co.uk @ 2012-05-17 12:28:44 -->
