<?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/"
		>
<channel>
	<title>Comments for Clojure in a bank</title>
	<atom:link href="http://blog.malcolmsparks.com/?feed=comments-rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.malcolmsparks.com</link>
	<description>Applying a functional language to a large organisation</description>
	<lastBuildDate>Sun, 22 Apr 2012 21:44:48 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
	<item>
		<title>Comment on Coding a transactional database using Clojure&#8217;s &#8216;reader literals&#8217;. by admin</title>
		<link>http://blog.malcolmsparks.com/?p=67#comment-91</link>
		<dc:creator>admin</dc:creator>
		<pubDate>Sun, 22 Apr 2012 21:44:48 +0000</pubDate>
		<guid isPermaLink="false">http://blog.malcolmsparks.com/?p=67#comment-91</guid>
		<description>That&#039;s quite true, thanks for spotting that. 

You could extend the design with an &#039;await&#039; on the agent. There&#039;s a lot more to make the database production-ready. The intention of the blog was to show a realistic example of using reader literals, a new feature which has just arrived in the latest version of Clojure. </description>
		<content:encoded><![CDATA[<p>That&#8217;s quite true, thanks for spotting that. </p>
<p>You could extend the design with an &#8216;await&#8217; on the agent. There&#8217;s a lot more to make the database production-ready. The intention of the blog was to show a realistic example of using reader literals, a new feature which has just arrived in the latest version of Clojure. </p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Coding a transactional database using Clojure&#8217;s &#8216;reader literals&#8217;. by dsiegel</title>
		<link>http://blog.malcolmsparks.com/?p=67#comment-90</link>
		<dc:creator>dsiegel</dc:creator>
		<pubDate>Sun, 22 Apr 2012 21:42:02 +0000</pubDate>
		<guid isPermaLink="false">http://blog.malcolmsparks.com/?p=67#comment-90</guid>
		<description>If I’m following along properly, the agent design isn’t actually Durable.

Normally, a transactional database ensures that the log data has reached
durable storage before permitting the caller of the transaction to proceed.
The agent won’t write the log until an arbitrary amount of time after the
transaction’s been committed.

If the computer fails after the transaction completes, but before the
agent writes the log, there&#039;ll be no record of the transaction.

In the interim, the transaction caller could&#039;ve done anything:
report the result to an end-user, send it to another process,
perform another transaction.

In practice, the gap should be short, and the likelihood of a lost
log record small -- but there&#039;s a hole here.</description>
		<content:encoded><![CDATA[<p>If I’m following along properly, the agent design isn’t actually Durable.</p>
<p>Normally, a transactional database ensures that the log data has reached<br />
durable storage before permitting the caller of the transaction to proceed.<br />
The agent won’t write the log until an arbitrary amount of time after the<br />
transaction’s been committed.</p>
<p>If the computer fails after the transaction completes, but before the<br />
agent writes the log, there&#8217;ll be no record of the transaction.</p>
<p>In the interim, the transaction caller could&#8217;ve done anything:<br />
report the result to an end-user, send it to another process,<br />
perform another transaction.</p>
<p>In practice, the gap should be short, and the likelihood of a lost<br />
log record small &#8212; but there&#8217;s a hole here.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Coding a transactional database using Clojure&#8217;s &#8216;reader literals&#8217;. by admin</title>
		<link>http://blog.malcolmsparks.com/?p=67#comment-88</link>
		<dc:creator>admin</dc:creator>
		<pubDate>Thu, 19 Apr 2012 16:10:54 +0000</pubDate>
		<guid isPermaLink="false">http://blog.malcolmsparks.com/?p=67#comment-88</guid>
		<description>I understand now, thanks Paul (and thanks Huey). Of course you&#039;re both right. I&#039;ve re-jigged the TransactionLog to use an agent as you suggest and added some explanation in the text.</description>
		<content:encoded><![CDATA[<p>I understand now, thanks Paul (and thanks Huey). Of course you&#8217;re both right. I&#8217;ve re-jigged the TransactionLog to use an agent as you suggest and added some explanation in the text.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Coding a transactional database using Clojure&#8217;s &#8216;reader literals&#8217;. by Paul</title>
		<link>http://blog.malcolmsparks.com/?p=67#comment-87</link>
		<dc:creator>Paul</dc:creator>
		<pubDate>Thu, 19 Apr 2012 13:34:27 +0000</pubDate>
		<guid isPermaLink="false">http://blog.malcolmsparks.com/?p=67#comment-87</guid>
		<description>Huey is saying that it&#039;s unsafe to call functions with side effects inside of dosync because they may be called more than once.  http://clojure.org/refs  So you shouldn&#039;t do I/O from within a dosync.

Agents do not have this restriction, so they would be an option in this case.</description>
		<content:encoded><![CDATA[<p>Huey is saying that it&#8217;s unsafe to call functions with side effects inside of dosync because they may be called more than once.  <a href="http://clojure.org/refs" rel="nofollow">http://clojure.org/refs</a>  So you shouldn&#8217;t do I/O from within a dosync.</p>
<p>Agents do not have this restriction, so they would be an option in this case.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Coding a transactional database using Clojure&#8217;s &#8216;reader literals&#8217;. by admin</title>
		<link>http://blog.malcolmsparks.com/?p=67#comment-86</link>
		<dc:creator>admin</dc:creator>
		<pubDate>Thu, 19 Apr 2012 08:27:40 +0000</pubDate>
		<guid isPermaLink="false">http://blog.malcolmsparks.com/?p=67#comment-86</guid>
		<description>Hi Huey - I don&#039;t quite understand your question but I&#039;ll do my best do answer anyway. The record inside the transaction is just some data for that transaction and a function which applies this data to an existing state. It doesn&#039;t stay around to be replayed though, once it is used (and logged) it is disposed of. It all takes place under Clojure&#039;s STM so you don&#039;t have to worry about co-ordinating transactions.</description>
		<content:encoded><![CDATA[<p>Hi Huey &#8211; I don&#8217;t quite understand your question but I&#8217;ll do my best do answer anyway. The record inside the transaction is just some data for that transaction and a function which applies this data to an existing state. It doesn&#8217;t stay around to be replayed though, once it is used (and logged) it is disposed of. It all takes place under Clojure&#8217;s STM so you don&#8217;t have to worry about co-ordinating transactions.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Coding a transactional database using Clojure&#8217;s &#8216;reader literals&#8217;. by Huey Petersen</title>
		<link>http://blog.malcolmsparks.com/?p=67#comment-85</link>
		<dc:creator>Huey Petersen</dc:creator>
		<pubDate>Thu, 19 Apr 2012 02:59:40 +0000</pubDate>
		<guid isPermaLink="false">http://blog.malcolmsparks.com/?p=67#comment-85</guid>
		<description>Hello.  I don&#039;t understand all of this but it looks awesome.  One question though:  isn&#039;t the record inside the transaction a side effect that could be replayed?</description>
		<content:encoded><![CDATA[<p>Hello.  I don&#8217;t understand all of this but it looks awesome.  One question though:  isn&#8217;t the record inside the transaction a side effect that could be replayed?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Scalable sorting by Julian Birch</title>
		<link>http://blog.malcolmsparks.com/?p=42#comment-42</link>
		<dc:creator>Julian Birch</dc:creator>
		<pubDate>Mon, 07 Nov 2011 15:06:13 +0000</pubDate>
		<guid isPermaLink="false">http://blog.malcolmsparks.com/?p=42#comment-42</guid>
		<description>I&#039;m curious if you&#039;ve had any experience of cascalog?  It seems to be pretty much exactly made for scenarios like this.</description>
		<content:encoded><![CDATA[<p>I&#8217;m curious if you&#8217;ve had any experience of cascalog?  It seems to be pretty much exactly made for scenarios like this.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Scalable sorting by Philipp Meier</title>
		<link>http://blog.malcolmsparks.com/?p=42#comment-38</link>
		<dc:creator>Philipp Meier</dc:creator>
		<pubDate>Thu, 03 Nov 2011 08:58:25 +0000</pubDate>
		<guid isPermaLink="false">http://blog.malcolmsparks.com/?p=42#comment-38</guid>
		<description>The sort will likely fail if the collection containt :begin or :end. I suggest using instances of Object as markers as in
&lt;code&gt;
(let [begin-marker (Object.) end-market (Object.] ...)
&lt;/code&gt;</description>
		<content:encoded><![CDATA[<p>The sort will likely fail if the collection containt :begin or :end. I suggest using instances of Object as markers as in<br />
<code><br />
(let [begin-marker (Object.) end-market (Object.] ...)<br />
</code></p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Configuring logging for Clojure applications by Malfario</title>
		<link>http://blog.malcolmsparks.com/?p=37#comment-13</link>
		<dc:creator>Malfario</dc:creator>
		<pubDate>Mon, 08 Aug 2011 09:02:09 +0000</pubDate>
		<guid isPermaLink="false">http://blog.malcolmsparks.com/?p=37#comment-13</guid>
		<description>Sweet! Thank you!</description>
		<content:encoded><![CDATA[<p>Sweet! Thank you!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Configuring logging for Clojure applications by Al</title>
		<link>http://blog.malcolmsparks.com/?p=37#comment-12</link>
		<dc:creator>Al</dc:creator>
		<pubDate>Mon, 08 Aug 2011 04:12:04 +0000</pubDate>
		<guid isPermaLink="false">http://blog.malcolmsparks.com/?p=37#comment-12</guid>
		<description>This looks really awesome, thank you for the hard work! I can&#039;t wait to start using this in my projects.</description>
		<content:encoded><![CDATA[<p>This looks really awesome, thank you for the hard work! I can&#8217;t wait to start using this in my projects.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

