<?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>The Mine! Project &#187; Protomine</title>
	<atom:link href="http://themineproject.org/category/protomine/feed/" rel="self" type="application/rss+xml" />
	<link>http://themineproject.org</link>
	<description>open source project for online data and relationships logistics</description>
	<lastBuildDate>Tue, 23 Mar 2010 13:05:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>A method for massively cutting UPDATE/HTTP-PUT methods in complex Rest APIs</title>
		<link>http://themineproject.org/2009/01/a-method-for-massively-cutting-updatehttp-put-methods-in-complex-rest-apis/</link>
		<comments>http://themineproject.org/2009/01/a-method-for-massively-cutting-updatehttp-put-methods-in-complex-rest-apis/#comments</comments>
		<pubDate>Fri, 16 Jan 2009 08:55:31 +0000</pubDate>
		<dc:creator>alecm</dc:creator>
				<category><![CDATA[Protomine]]></category>

		<guid isPermaLink="false">http://themineproject.org/?p=218</guid>
		<description><![CDATA[I like the ReST interface, but I am not fundamentalist about it.
Most of the objects in the Mine implementation are &#8220;Things&#8221; &#8211; ie: a series of key=value pairs which are bundled together under a numeric identifier, which have a Class and associated methods that operate on them.
For reasons of security and sheer implementability, &#8220;Things&#8221; may [...]]]></description>
			<content:encoded><![CDATA[<p>I like the ReST interface, but I am not fundamentalist about it.</p>
<p>Most of the objects in the Mine implementation are &#8220;Things&#8221; &#8211; ie: a series of key=value pairs which are bundled together under a numeric identifier, which have a Class and associated methods that operate on them.</p>
<p>For reasons of security and sheer implementability, &#8220;Things&#8221; may not be updated under the ReST CRUD scheme; to recap ReST you are allowed four &#8220;CRUD&#8221; operations against a URL which represents an object:</p>
<p><UL> <LI>Create (a new object, in a directory, say)</LI> <LI>Read (an existing object)</LI> <LI>Update (an existing object)</LI> <LI>Delete (an existing object)</LI> </UL></p>
<p>So for example:</p>
<ul>
<li><CODE>CREATE (key=value &#8230;) /api/object.xml</CODE><br />
-> new object populated with keys/values, id = 42</li>
<li><CODE>READ /api/object/42.xml</CODE><br />
-> a bunch of key=value pairs in XML</li>
<li><CODE>READ /api/object/42.json</CODE><br />
-> a bunch of key=value pairs in JSON</li>
<li><CODE>DELETE /api/object/42.xml</CODE><br />
-> deletes object 42, status returned in XML</li>
</ul>
<p>&#8230;but the one that gives problems is <code>UPDATE</code> since the presumption is that you will atomically replace an old Thing with a new thing, much as:</p>
<p><code>mv new.jpg current.jpg</code></p>
<p>&#8230;might work in a filesystem; you are swapping one bunch of bytes for another one; but Things are complex structures with some bits you can poke, and other bits you cannot.  Merely splatting them with replacement data would be painful.</p>
<p>Amongst the other problems with this is that &#8220;Update&#8221; is usually mapped to the HTTP-PUT method, which is badly implemented in web browsers and actually I think is below the tipping point &#8211; ie: it&#8217;s so badly implemented that ReSTful people work around it rather than get it fixed.  Standard <code>Perl::CGI</code> for instance, does not support it.</p>
<p>The way I have gotten around this is slight but elegant piece of doublethink; I have implemented a ReST interface atop each Thing object, to access its key=value pairs:</p>
<ul>
<li><CODE>READ /api/object/42/key/keyName.xml</CODE><br />
-> value associated with keyName for object 42, in XML</li>
<li><CODE>READ /api/object/42/key/keyName.json</CODE><br />
-> value associated with keyName for object 42, in JSON</li>
<li><CODE>DELETE /api/object/42/key/keyName.xml</CODE><br />
-> unset keyName in object 42, status in XML</li>
</ul>
<p>&#8230;and then realising that object 42 now must exist for this trick to work at all, and that there is no point in having CREATE &#8220;choose&#8221; a key name for you &#8211; predefined variable names do not fit the ReST-CREATE model &#8211; then the <code>key/CREATE</code> and <code>key/UPDATE</code> operations are otherwise functionally identical (ie: they poke the values of keys) and therefore the latter can be dropped.  Also <code>key/CREATE</code> is cooler, since it can poke multiple keys at the same time.</p>
<p>Further, that means <code>key/CREATE</code> is functionally identical to <code>Thing/UPDATE</code> so <em>that</em> can be dropped, too.</p>
<p>So all that is necessary is to mentally &#8220;rebrand&#8221; the key/CREATE operation as the Thing/UPDATE operation, and a whole pile of UPDATE operations go out of the window.</p>
<p>So now there is only 1 ReST-UPDATE operation that remains in the Mine &#8211; down from 11 &#8211; and that is the &#8220;update of auxilliary data&#8221;, for example replacing one JPEG that is associated with object 42, with a different JPEG.</p>
<p>To me this is a straight swap of one blog of data for another one, and so should remain as a ReST-UPDATE; but anywhere else that I have a ReST interface onto complex objects, I shall in future consider very carefully before implementing a UPDATE method.</p>
]]></content:encoded>
			<wfw:commentRss>http://themineproject.org/2009/01/a-method-for-massively-cutting-updatehttp-put-methods-in-complex-rest-apis/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Protomine Development Kit released!</title>
		<link>http://themineproject.org/2008/11/protomine-development-kit-released/</link>
		<comments>http://themineproject.org/2008/11/protomine-development-kit-released/#comments</comments>
		<pubDate>Fri, 28 Nov 2008 10:15:49 +0000</pubDate>
		<dc:creator>alecm</dc:creator>
				<category><![CDATA[Download]]></category>
		<category><![CDATA[Protomine]]></category>

		<guid isPermaLink="false">http://themineproject.org/?p=206</guid>
		<description><![CDATA[The code is still pre-alpha &#8211; there is a lot of functionality going to be added over the next few days &#8211; but last night we got the first cut of the Protomine developer kit going.
So if:

you are interested in The Mine! Project
you have OSX (current development platform, Ubuntu and Solaris next)
you know what Subversion, [...]]]></description>
			<content:encoded><![CDATA[<p>The code is still pre-alpha &#8211; there is a lot of functionality going to be added over the next few days &#8211; but last night we got the first cut of the Protomine developer kit going.</p>
<p>So if:</p>
<ul>
<li>you are interested in The Mine! Project</li>
<li>you have OSX (current development platform, Ubuntu and Solaris next)</li>
<li>you know what Subversion, perl, and /usr/bin/make do</li>
</ul>
<p>&#8230;then join <a href="http://themineproject.org/index.php/developer/">the Developer list</a> and help! </p>
<p>Alec</p>
]]></content:encoded>
			<wfw:commentRss>http://themineproject.org/2008/11/protomine-development-kit-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Protomine Development Feed Information</title>
		<link>http://themineproject.org/2008/11/protomine-development-feed-information/</link>
		<comments>http://themineproject.org/2008/11/protomine-development-feed-information/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 11:26:03 +0000</pubDate>
		<dc:creator>alecm</dc:creator>
				<category><![CDATA[Protomine]]></category>

		<guid isPermaLink="false">http://themineproject.org/?p=204</guid>
		<description><![CDATA[Hey All,
Protomine development is back on track!
To keep abreast of the latest news, and so that we don&#8217;t spam the blog with &#8216;putback&#8217; messages, check out the Atom feeds on the project information page at GoogleCode.
]]></description>
			<content:encoded><![CDATA[<p>Hey All,</p>
<p>Protomine development is back on track!</p>
<p>To keep abreast of the latest news, and so that we don&#8217;t spam the blog with &#8216;putback&#8217; messages, check out the Atom feeds on the <a href="http://code.google.com/p/protomine/feeds">project information page at GoogleCode</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://themineproject.org/2008/11/protomine-development-feed-information/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Protomine moves to Subversion on GoogleCode</title>
		<link>http://themineproject.org/2008/10/protomine-moves-to-subversion-on-googlecode/</link>
		<comments>http://themineproject.org/2008/10/protomine-moves-to-subversion-on-googlecode/#comments</comments>
		<pubDate>Wed, 29 Oct 2008 23:56:59 +0000</pubDate>
		<dc:creator>alecm</dc:creator>
				<category><![CDATA[Download]]></category>
		<category><![CDATA[Protomine]]></category>

		<guid isPermaLink="false">http://themineproject.org/?p=179</guid>
		<description><![CDATA[Protomine has moved to Subversion and is hosted by GoogleCode; the project home page is http://code.google.com/p/protomine/
For technical guidance please see the Protomine Developer Wiki, and also this blog&#8217;s Download page for instructions regarding code access.
The protomine development maillist is hosted on crypticide.com; to join the list, send e-mail to protomine-devel-subscribe@crypticide.com with the word &#8220;subscribe&#8221; in [...]]]></description>
			<content:encoded><![CDATA[<p>Protomine has moved to Subversion and is hosted by GoogleCode; the project home page is <a href="http://code.google.com/p/protomine/">http://code.google.com/p/protomine/</a></p>
<p>For technical guidance please see the <a href="http://code.google.com/p/protomine/w/list">Protomine Developer Wiki</a>, and also this blog&#8217;s <a href="http://themineproject.org/index.php/download/">Download</a> page for instructions regarding code access.</p>
<p>The protomine development maillist is hosted on crypticide.com; to join the list, send e-mail to <a href="mailto:protomine-devel-subscribe@crypticide.com?subject=subscribe&#038;body=subscribe">protomine-devel-subscribe@crypticide.com</a> with the word &#8220;subscribe&#8221; in the body.</p>
<p>The project is coming along. See you there!</p>
]]></content:encoded>
			<wfw:commentRss>http://themineproject.org/2008/10/protomine-moves-to-subversion-on-googlecode/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Code Dump &#8211; 22 September 2008</title>
		<link>http://themineproject.org/2008/09/code-dump-22-september-2008/</link>
		<comments>http://themineproject.org/2008/09/code-dump-22-september-2008/#comments</comments>
		<pubDate>Mon, 22 Sep 2008 20:15:47 +0000</pubDate>
		<dc:creator>alecm</dc:creator>
				<category><![CDATA[Download]]></category>
		<category><![CDATA[Protomine]]></category>

		<guid isPermaLink="false">http://themineproject.org/?p=62</guid>
		<description><![CDATA[I&#8217;ll be honest, this tarball does not do very much that is interesting; it sets out the underlying database management and you can get the form of the object structure &#8211; however the feed-management code is yet to go in, after which things will get very interesting.
Nonetheless the code needs to be published sometime, and [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ll be honest, this tarball does not do very much that is interesting; it sets out the underlying database management and you can get the form of the object structure &#8211; <em>however</em> the feed-management code is yet to go in, after which things will get very interesting.</p>
<p>Nonetheless the code needs to be published sometime, and this seems an appropriate juncture.</p>
<p>Download <a title="http://www.crypticide.com/alecm/mine/protomine-20080922.210318.tar.gz" href="http://www.crypticide.com/alecm/mine/protomine-20080922.210318.tar.gz">here</a> ; MD5 checksum 1df80226de53c24df3e837abcb781b12</p>
]]></content:encoded>
			<wfw:commentRss>http://themineproject.org/2008/09/code-dump-22-september-2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

