<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments for Matthew Butt</title>
	<atom:link href="http://blog.matthewbutt.com/comments/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.matthewbutt.com</link>
	<description>Web, Music and comment from a corner of W12</description>
	<lastBuildDate>Tue, 04 Oct 2011 22:44:29 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>Comment on Copyright by Concerto for Two Double Reeds in detail: IV — Rondo &#171; Matthew Butt</title>
		<link>http://blog.matthewbutt.com/copyright/#comment-220</link>
		<dc:creator><![CDATA[Concerto for Two Double Reeds in detail: IV — Rondo &#171; Matthew Butt]]></dc:creator>
		<pubDate>Tue, 04 Oct 2011 22:44:29 +0000</pubDate>
		<guid isPermaLink="false">http://blog.matthewbutt.com/?page_id=323#comment-220</guid>
		<description><![CDATA[[...] read my note on copyright.)    GA_googleAddAttr(&quot;AdOpt&quot;, &quot;1&quot;); GA_googleAddAttr(&quot;Origin&quot;, &quot;other&quot;); [...]]]></description>
		<content:encoded><![CDATA[<p>[...] read my note on copyright.)    GA_googleAddAttr(&quot;AdOpt&quot;, &quot;1&quot;); GA_googleAddAttr(&quot;Origin&quot;, &quot;other&quot;); [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Oboe concerto teaser: I by Concerto for Two Double Reeds in detail: IV — Rondo &#171; Matthew Butt</title>
		<link>http://blog.matthewbutt.com/2011/03/01/oboe-concerto-teaser-i/#comment-219</link>
		<dc:creator><![CDATA[Concerto for Two Double Reeds in detail: IV — Rondo &#171; Matthew Butt]]></dc:creator>
		<pubDate>Tue, 04 Oct 2011 22:44:20 +0000</pubDate>
		<guid isPermaLink="false">http://blog.matthewbutt.com/?p=282#comment-219</guid>
		<description><![CDATA[[...] if you go back and read my old teaser post for this concerto, you&#8217;ll see I discuss the patterns of bell ringing, which are based on [...]]]></description>
		<content:encoded><![CDATA[<p>[...] if you go back and read my old teaser post for this concerto, you&#8217;ll see I discuss the patterns of bell ringing, which are based on [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Concerto for Two Double Reeds in detail: III — Loops by Concerto for Two Double Reeds in detail: IV — Rondo &#171; Matthew Butt</title>
		<link>http://blog.matthewbutt.com/2011/08/07/concerto-for-two-double-reeds-in-detail-iii-loops/#comment-218</link>
		<dc:creator><![CDATA[Concerto for Two Double Reeds in detail: IV — Rondo &#171; Matthew Butt]]></dc:creator>
		<pubDate>Tue, 04 Oct 2011 22:44:13 +0000</pubDate>
		<guid isPermaLink="false">http://blog.matthewbutt.com/?p=351#comment-218</guid>
		<description><![CDATA[[...] Concerto for Two Double Reeds. You can also read about I — Tessellations, II — Meta-Canon and III — Loops. Click here to read the full score of movement IV — [...]]]></description>
		<content:encoded><![CDATA[<p>[...] Concerto for Two Double Reeds. You can also read about I — Tessellations, II — Meta-Canon and III — Loops. Click here to read the full score of movement IV — [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Concerto for Two Double Reeds in detail: II — Meta-Canon by Concerto for Two Double Reeds in detail: IV — Rondo &#171; Matthew Butt</title>
		<link>http://blog.matthewbutt.com/2011/08/07/concerto-for-two-double-reeds-in-detail-ii-meta-canon/#comment-217</link>
		<dc:creator><![CDATA[Concerto for Two Double Reeds in detail: IV — Rondo &#171; Matthew Butt]]></dc:creator>
		<pubDate>Tue, 04 Oct 2011 22:44:10 +0000</pubDate>
		<guid isPermaLink="false">http://blog.matthewbutt.com/?p=337#comment-217</guid>
		<description><![CDATA[[...] analyses of my Concerto for Two Double Reeds. You can also read about I — Tessellations, II — Meta-Canon and III — Loops. Click here to read the full score of movement IV — [...]]]></description>
		<content:encoded><![CDATA[<p>[...] analyses of my Concerto for Two Double Reeds. You can also read about I — Tessellations, II — Meta-Canon and III — Loops. Click here to read the full score of movement IV — [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Concerto for Two Double Reeds in detail: I — Tessellations by Concerto for Two Double Reeds in detail: IV — Rondo &#171; Matthew Butt</title>
		<link>http://blog.matthewbutt.com/2011/08/03/concerto-for-two-double-reeds-in-detail-i-tessellations/#comment-216</link>
		<dc:creator><![CDATA[Concerto for Two Double Reeds in detail: IV — Rondo &#171; Matthew Butt]]></dc:creator>
		<pubDate>Tue, 04 Oct 2011 22:44:07 +0000</pubDate>
		<guid isPermaLink="false">http://blog.matthewbutt.com/?p=321#comment-216</guid>
		<description><![CDATA[[...] a series of post-performance analyses of my Concerto for Two Double Reeds. You can also read about I — Tessellations, II — Meta-Canon and III — Loops. Click here to read the full score of movement IV — [...]]]></description>
		<content:encoded><![CDATA[<p>[...] a series of post-performance analyses of my Concerto for Two Double Reeds. You can also read about I — Tessellations, II — Meta-Canon and III — Loops. Click here to read the full score of movement IV — [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Concerto for Two Double Reeds in detail: II — Meta-Canon by Oboe concerto teaser: I &#171; Matthew Butt</title>
		<link>http://blog.matthewbutt.com/2011/08/07/concerto-for-two-double-reeds-in-detail-ii-meta-canon/#comment-215</link>
		<dc:creator><![CDATA[Oboe concerto teaser: I &#171; Matthew Butt]]></dc:creator>
		<pubDate>Tue, 04 Oct 2011 22:44:05 +0000</pubDate>
		<guid isPermaLink="false">http://blog.matthewbutt.com/?p=337#comment-215</guid>
		<description><![CDATA[[...] A 28-member interval row [...]]]></description>
		<content:encoded><![CDATA[<p>[...] A 28-member interval row [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Site scans: a RESTful case study by bnathyuw</title>
		<link>http://blog.matthewbutt.com/2011/09/18/site-scans-a-restful-case-study/#comment-201</link>
		<dc:creator><![CDATA[bnathyuw]]></dc:creator>
		<pubDate>Tue, 20 Sep 2011 11:28:30 +0000</pubDate>
		<guid isPermaLink="false">http://blog.matthewbutt.com/?p=391#comment-201</guid>
		<description><![CDATA[Thank you, Troy, for reading my post and for responding in such detail.

It&#039;s clear from the explanation that you give, that all four of my assumptions are some way off the mark: I made the assumtion that we&#039;re dealing with expensive, persistent resources, and you have explained that your goal is to produce inexpensive, ephemeral ones.

In terms of my initial post, this does not trouble me: I was interested in working through a problem, rather than telling you how to build your system(!), and the fact that the problem I set out to solve is not the same as the scenario that inspired it needn&#039;t undermine the value of the exercise.

But the scenario you describe is possibly more interesting to model, and I can see various ways this might be done:

1. Treat the results of the scan as normal resources, but destroy them on read. This would follow a &lt;code&gt;POST&lt;/code&gt; — &lt;code&gt;201 Created&lt;/code&gt; — &lt;code&gt;GET &lt;/code&gt; pattern. 

This model is a poor match, as we would need to create an explicit mechanism for storing the data over the 201 Created redirect; also, addressability and findability would fail, as a) the GET resource is ephemeral and cannot be persistently linked to, and b) it&#039;s not possible to link with a POST verb.

2. Treat the results of the scan as a &lt;em&gt;latent&lt;/em&gt; resource, which only comes into being when you request it. This would follow a simple &lt;code&gt;GET &lt;/code&gt;pattern, and should include all the information about the resource in the hierarchical part of the URL.

There are various reasons you might create a latent resource:

a) There are too many resources for it to be practical (or possible) to store them. If you write a service that calculates square roots, you won&#039;t store every square root, you&#039;ll just calculate it on the fly. 
b) The specific resource is a refinement of more generic resources, which can be stored. If you&#039;re showing a weather forecast map for a specific postcode and time of day, you might actually store hourly maps for each region, and then produce the customised map based on the stored data.
c) You do not own the resources in question. A social media hashtag aggregator might be an example here: given any input hashtag, the system can fetch the results from elsewhere, but it would be pointless to pre-fetch the results.
d) You have specific security reasons not to store the resources. This is the case with your scenario.

A model like this maintains addressability, as the URL format is clear, and also emphasises findability, as the user can feed any valid data into the URL and expect a response. If I&#039;m providing a square root service for numbers &gt;= 0, then the user can expect that &lt;code&gt;http://mathsservice/square-roots/&lt;em&gt;n&lt;/em&gt;&lt;/code&gt; will deliver a valid resorce for any &lt;code&gt;&lt;em&gt;n&lt;/em&gt;∈ℕ&lt;/code&gt;.

I can see two small problems:

a) In the specific case of running a scan against a URL, there are the technical problems you have outlined in embedding one URL in the hierarchical part of another URL.
b) With some of the examples I have given, especially the weather example, it&#039;s disputable whether we are referring to a single, highly specified resource, or whether in fact we are offering a customised view of a more general resource. Perhaps in this example, the resource is simply &#039;the weather forecast&#039;, and we want a view on it that focuses on such-and-such a location and such-and-such a point in time.

This leads us to a third possibility:

3. You treat the URL of the scan as the refinement of an existing resource. This would allow the user to make a simple &lt;code&gt;GET &lt;/code&gt;request, with further information (viz the URL to scan) in the query string. 

This is the standard model for searches, and is a reasonable fit for the weather example above. It maintains addressability and findability, and as a bonus avoids the technical issues of embedding a URL in another.

The risk is that this approach fails to identify enough resources, and can lead to a RPC style of programming, where a small number of endpoints are overloaded with query refinements. For the weather example, it may be reasonable to see &#039;The weather at 16:30 on Saturday for WC1A 1AA&#039; as a refinement of &#039;the UK weather forecase for the next 5 days&#039;, but with your original example, I&#039;m not sure &#039;a security scan of http://foo.bar&#039; can be as a refinement of anything else; certainly not &#039;a security scan of the entire internet&#039;!

I&#039;m not sure if any of these models is absolutely correct for your scenario. I think the notion of latent resources in model 2. is rather interesting, and certainly merits further thought, and I&#039;m also interested in the questions model 3. raises about what counts as a refinement of a resource, and what should be considered another resource entirely.

What I think can be said for certain is that the &lt;code&gt;POST &lt;/code&gt;— &lt;code&gt;201 Created&lt;/code&gt; — &lt;code&gt;GET &lt;/code&gt;model, which I describe in my original post, while absolutely suitable for persistent resources, is completely unsuited to ephemeral resources, and therefore doesn&#039;t fit your scenario.]]></description>
		<content:encoded><![CDATA[<p>Thank you, Troy, for reading my post and for responding in such detail.</p>
<p>It&#8217;s clear from the explanation that you give, that all four of my assumptions are some way off the mark: I made the assumtion that we&#8217;re dealing with expensive, persistent resources, and you have explained that your goal is to produce inexpensive, ephemeral ones.</p>
<p>In terms of my initial post, this does not trouble me: I was interested in working through a problem, rather than telling you how to build your system(!), and the fact that the problem I set out to solve is not the same as the scenario that inspired it needn&#8217;t undermine the value of the exercise.</p>
<p>But the scenario you describe is possibly more interesting to model, and I can see various ways this might be done:</p>
<p>1. Treat the results of the scan as normal resources, but destroy them on read. This would follow a <code>POST</code> — <code>201 Created</code> — <code>GET </code> pattern. </p>
<p>This model is a poor match, as we would need to create an explicit mechanism for storing the data over the 201 Created redirect; also, addressability and findability would fail, as a) the GET resource is ephemeral and cannot be persistently linked to, and b) it&#8217;s not possible to link with a POST verb.</p>
<p>2. Treat the results of the scan as a <em>latent</em> resource, which only comes into being when you request it. This would follow a simple <code>GET </code>pattern, and should include all the information about the resource in the hierarchical part of the URL.</p>
<p>There are various reasons you might create a latent resource:</p>
<p>a) There are too many resources for it to be practical (or possible) to store them. If you write a service that calculates square roots, you won&#8217;t store every square root, you&#8217;ll just calculate it on the fly.<br />
b) The specific resource is a refinement of more generic resources, which can be stored. If you&#8217;re showing a weather forecast map for a specific postcode and time of day, you might actually store hourly maps for each region, and then produce the customised map based on the stored data.<br />
c) You do not own the resources in question. A social media hashtag aggregator might be an example here: given any input hashtag, the system can fetch the results from elsewhere, but it would be pointless to pre-fetch the results.<br />
d) You have specific security reasons not to store the resources. This is the case with your scenario.</p>
<p>A model like this maintains addressability, as the URL format is clear, and also emphasises findability, as the user can feed any valid data into the URL and expect a response. If I&#8217;m providing a square root service for numbers &gt;= 0, then the user can expect that <code><a href="http://mathsservice/square-roots/" rel="nofollow">http://mathsservice/square-roots/</a><em>n</em></code> will deliver a valid resorce for any <code><em>n</em>∈ℕ</code>.</p>
<p>I can see two small problems:</p>
<p>a) In the specific case of running a scan against a URL, there are the technical problems you have outlined in embedding one URL in the hierarchical part of another URL.<br />
b) With some of the examples I have given, especially the weather example, it&#8217;s disputable whether we are referring to a single, highly specified resource, or whether in fact we are offering a customised view of a more general resource. Perhaps in this example, the resource is simply &#8216;the weather forecast&#8217;, and we want a view on it that focuses on such-and-such a location and such-and-such a point in time.</p>
<p>This leads us to a third possibility:</p>
<p>3. You treat the URL of the scan as the refinement of an existing resource. This would allow the user to make a simple <code>GET </code>request, with further information (viz the URL to scan) in the query string. </p>
<p>This is the standard model for searches, and is a reasonable fit for the weather example above. It maintains addressability and findability, and as a bonus avoids the technical issues of embedding a URL in another.</p>
<p>The risk is that this approach fails to identify enough resources, and can lead to a RPC style of programming, where a small number of endpoints are overloaded with query refinements. For the weather example, it may be reasonable to see &#8216;The weather at 16:30 on Saturday for WC1A 1AA&#8217; as a refinement of &#8216;the UK weather forecase for the next 5 days&#8217;, but with your original example, I&#8217;m not sure &#8216;a security scan of <a href="http://foo.bar" rel="nofollow">http://foo.bar</a>&#8216; can be as a refinement of anything else; certainly not &#8216;a security scan of the entire internet&#8217;!</p>
<p>I&#8217;m not sure if any of these models is absolutely correct for your scenario. I think the notion of latent resources in model 2. is rather interesting, and certainly merits further thought, and I&#8217;m also interested in the questions model 3. raises about what counts as a refinement of a resource, and what should be considered another resource entirely.</p>
<p>What I think can be said for certain is that the <code>POST </code>— <code>201 Created</code> — <code>GET </code>model, which I describe in my original post, while absolutely suitable for persistent resources, is completely unsuited to ephemeral resources, and therefore doesn&#8217;t fit your scenario.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Site scans: a RESTful case study by Troy Hunt (@troyhunt)</title>
		<link>http://blog.matthewbutt.com/2011/09/18/site-scans-a-restful-case-study/#comment-199</link>
		<dc:creator><![CDATA[Troy Hunt (@troyhunt)]]></dc:creator>
		<pubDate>Sun, 18 Sep 2011 22:24:01 +0000</pubDate>
		<guid isPermaLink="false">http://blog.matthewbutt.com/?p=391#comment-199</guid>
		<description><![CDATA[Firstly, big thanks for taking the time to articulate these thoughts so clearly. I literally felt like I&#039;d just gone down the rabbit hole when I was making this decision so it&#039;s great to have some external clarity.

There are a few non-URL related constraints I&#039;ve consciously decided to work within which change the discussion a little. Firstly, scans must be fast. typically they should be within several seconds. This means being very sparse with HTTP requests from ASafaWeb to the site being scanned. When they&#039;re running this fast, the user can wait for a response rather than needing to queue them and return a bit later. At present the median scan duration is 2.5 seconds across 4 HTTP requests - and that&#039;s issuing requests synchronously and not using HTTP compression so it should come way down yet.

Secondly, I don&#039;t want to store any identifying information about either the requestor or the site being scanned which means I don&#039;t want to keep the URL anywhere. This is primarily for privacy - people shouldn&#039;t feel that I&#039;m building a list with the mother load of vulnerable sites! But of course it also significantly mitigates my responsibly; the entire site and DB can be compromised and I&#039;ll just redeploy it without suffering any disclosure fallout.

Of course the performance issue remains but without having yet profiled this, I think I&#039;ll find the bottleneck is not in computing resources but rather in the number of simultaneous HTTP requests that are running. One alternative to persistent storage as a means of overcoming this is caching. I&#039;m using AppHarbor and I&#039;m very keen to try out the Memcacher service that they offer. This could greatly mitigate the scenario where the URL of a scan is sent around, say, via Twitter and gets a heap of hits in a short time frame.

All that said, it&#039;s very, very early days (still in private beta) and I know I&#039;ll inevitably chop and change things as I go, particularly once it has public exposure. I may well change course on the above principles, but I think it&#039;s a cautionary way to begin and I&#039;d always rather start simple and scale it up after that.

Your post is fantastic and great food for thought. I do actually have an item on the backlog related to JSON based services and would love to get your input so will get in touch with via Twitter.]]></description>
		<content:encoded><![CDATA[<p>Firstly, big thanks for taking the time to articulate these thoughts so clearly. I literally felt like I&#8217;d just gone down the rabbit hole when I was making this decision so it&#8217;s great to have some external clarity.</p>
<p>There are a few non-URL related constraints I&#8217;ve consciously decided to work within which change the discussion a little. Firstly, scans must be fast. typically they should be within several seconds. This means being very sparse with HTTP requests from ASafaWeb to the site being scanned. When they&#8217;re running this fast, the user can wait for a response rather than needing to queue them and return a bit later. At present the median scan duration is 2.5 seconds across 4 HTTP requests &#8211; and that&#8217;s issuing requests synchronously and not using HTTP compression so it should come way down yet.</p>
<p>Secondly, I don&#8217;t want to store any identifying information about either the requestor or the site being scanned which means I don&#8217;t want to keep the URL anywhere. This is primarily for privacy &#8211; people shouldn&#8217;t feel that I&#8217;m building a list with the mother load of vulnerable sites! But of course it also significantly mitigates my responsibly; the entire site and DB can be compromised and I&#8217;ll just redeploy it without suffering any disclosure fallout.</p>
<p>Of course the performance issue remains but without having yet profiled this, I think I&#8217;ll find the bottleneck is not in computing resources but rather in the number of simultaneous HTTP requests that are running. One alternative to persistent storage as a means of overcoming this is caching. I&#8217;m using AppHarbor and I&#8217;m very keen to try out the Memcacher service that they offer. This could greatly mitigate the scenario where the URL of a scan is sent around, say, via Twitter and gets a heap of hits in a short time frame.</p>
<p>All that said, it&#8217;s very, very early days (still in private beta) and I know I&#8217;ll inevitably chop and change things as I go, particularly once it has public exposure. I may well change course on the above principles, but I think it&#8217;s a cautionary way to begin and I&#8217;d always rather start simple and scale it up after that.</p>
<p>Your post is fantastic and great food for thought. I do actually have an item on the backlog related to JSON based services and would love to get your input so will get in touch with via Twitter.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Copyright by Concerto for Two Double Reeds in detail: III — Loops &#171; Matthew Butt</title>
		<link>http://blog.matthewbutt.com/copyright/#comment-176</link>
		<dc:creator><![CDATA[Concerto for Two Double Reeds in detail: III — Loops &#171; Matthew Butt]]></dc:creator>
		<pubDate>Sun, 07 Aug 2011 15:38:33 +0000</pubDate>
		<guid isPermaLink="false">http://blog.matthewbutt.com/?page_id=323#comment-176</guid>
		<description><![CDATA[[...] read my note on copyright.)   GA_googleAddAttr(&quot;AdOpt&quot;, &quot;1&quot;); GA_googleAddAttr(&quot;Origin&quot;, &quot;other&quot;); [...]]]></description>
		<content:encoded><![CDATA[<p>[...] read my note on copyright.)   GA_googleAddAttr(&quot;AdOpt&quot;, &quot;1&quot;); GA_googleAddAttr(&quot;Origin&quot;, &quot;other&quot;); [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Concerto for Two Double Reeds in detail: II — Meta-Canon by Concerto for Two Double Reeds in detail: III — Loops &#171; Matthew Butt</title>
		<link>http://blog.matthewbutt.com/2011/08/07/concerto-for-two-double-reeds-in-detail-ii-meta-canon/#comment-175</link>
		<dc:creator><![CDATA[Concerto for Two Double Reeds in detail: III — Loops &#171; Matthew Butt]]></dc:creator>
		<pubDate>Sun, 07 Aug 2011 15:38:28 +0000</pubDate>
		<guid isPermaLink="false">http://blog.matthewbutt.com/?p=337#comment-175</guid>
		<description><![CDATA[[...] This is the third in a series of post-performance analyses of my Concerto for Two Double Reeds. You can also read about I — Tessellations and II — Meta-Canon. [...]]]></description>
		<content:encoded><![CDATA[<p>[...] This is the third in a series of post-performance analyses of my Concerto for Two Double Reeds. You can also read about I — Tessellations and II — Meta-Canon. [...]</p>
]]></content:encoded>
	</item>
</channel>
</rss>

