<?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 on: Synchronizing Client Models</title>
	<atom:link href="http://osteele.com/archives/2008/02/synchronizing-client-models/feed" rel="self" type="application/rss+xml" />
	<link>http://osteele.com/archives/2008/02/synchronizing-client-models</link>
	<description>Languages of the real and artificial.</description>
	<lastBuildDate>Thu, 12 Feb 2009 00:20:28 -0800</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Josh Rehman</title>
		<link>http://osteele.com/archives/2008/02/synchronizing-client-models/comment-page-1#comment-430</link>
		<dc:creator>Josh Rehman</dc:creator>
		<pubDate>Sun, 11 May 2008 08:45:35 +0000</pubDate>
		<guid isPermaLink="false">http://osteele.com/2008/02/27/synchronizing-client-models#comment-430</guid>
		<description>Interesting article, but it seems to me that create+update should rarely if ever occur in a real application. The whole point of the client software is to transform user gestures into data, accumulate that data until it&#039;s ready to construct a message, send the message, and then render the response. (The sum total of these messages represent the entire independant data for the system and is quite precious because humans labored to provide it.)

In the UI a user might see a modal dialog on Person.create, meaning that a user would not have an opportunity to give the app any gesture that could be interpreted as Person.update for some time. Indeed, giving the user the opportunity to make an update gesture is a mistake, since Person.create may very well fail. If create() fails then update() is wasted effort. And nothing is more frustrating to a user than to waste their precious effort wrangling chaotic thoughts into the straightjacket of a form field, and then to have to do it again!

The only three circumstances I can see create+update happening: a synthetic test, the result of UI that may be a little bit broken, or because of an architecture that mixes independent and dependent data. A queue just masks the underlying problem, IMHO.</description>
		<content:encoded><![CDATA[<p>Interesting article, but it seems to me that create+update should rarely if ever occur in a real application. The whole point of the client software is to transform user gestures into data, accumulate that data until it&#8217;s ready to construct a message, send the message, and then render the response. (The sum total of these messages represent the entire independant data for the system and is quite precious because humans labored to provide it.)</p>
<p>In the UI a user might see a modal dialog on Person.create, meaning that a user would not have an opportunity to give the app any gesture that could be interpreted as Person.update for some time. Indeed, giving the user the opportunity to make an update gesture is a mistake, since Person.create may very well fail. If create() fails then update() is wasted effort. And nothing is more frustrating to a user than to waste their precious effort wrangling chaotic thoughts into the straightjacket of a form field, and then to have to do it again!</p>
<p>The only three circumstances I can see create+update happening: a synthetic test, the result of UI that may be a little bit broken, or because of an architecture that mixes independent and dependent data. A queue just masks the underlying problem, <span class="caps">IMHO.</span></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jen</title>
		<link>http://osteele.com/archives/2008/02/synchronizing-client-models/comment-page-1#comment-426</link>
		<dc:creator>Jen</dc:creator>
		<pubDate>Sun, 13 Apr 2008 13:49:51 +0000</pubDate>
		<guid isPermaLink="false">http://osteele.com/2008/02/27/synchronizing-client-models#comment-426</guid>
		<description>Very nice Oliver!</description>
		<content:encoded><![CDATA[<p>Very nice Oliver!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: graste</title>
		<link>http://osteele.com/archives/2008/02/synchronizing-client-models/comment-page-1#comment-427</link>
		<dc:creator>graste</dc:creator>
		<pubDate>Sat, 05 Apr 2008 23:58:34 +0000</pubDate>
		<guid isPermaLink="false">http://osteele.com/2008/02/27/synchronizing-client-models#comment-427</guid>
		<description>..I just had a quick look at the files. Never spec&#039;d javascript before. Looks nice. I don&#039;t have time for a deeper look atm, but will definately try using the queue ball implementation in case I need something like that the next weeks.</description>
		<content:encoded><![CDATA[<p>..I just had a quick look at the files. Never spec&#8217;d javascript before. Looks nice. I don&#8217;t have time for a deeper look atm, but will definately try using the queue ball implementation in case I need something like that the next weeks.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: oliver</title>
		<link>http://osteele.com/archives/2008/02/synchronizing-client-models/comment-page-1#comment-428</link>
		<dc:creator>oliver</dc:creator>
		<pubDate>Sat, 05 Apr 2008 16:26:00 +0000</pubDate>
		<guid isPermaLink="false">http://osteele.com/2008/02/27/synchronizing-client-models#comment-428</guid>
		<description>Thanks for the comment.  You raise an interesting set of observations and questions, and I&#039;ll think more about it at length.

A quick update on queue ball: you can download it from http://github.com/osteele/mop-js, and you can get a little bit of a taste for how to use it in the specs in that repo, but I haven&#039;t had a chance yet to write up exactly how to use it for the problem described here.

</description>
		<content:encoded><![CDATA[<p>Thanks for the comment.  You raise an interesting set of observations and questions, and I&#8217;ll think more about it at length.</p>
<p>A quick update on queue ball: you can download it from <a href="http://github.com/osteele/mop-js" rel="nofollow">http://github.com/osteele/mop-js</a>, and you can get a little bit of a taste for how to use it in the specs in that repo, but I haven&#8217;t had a chance yet to write up exactly how to use it for the problem described here.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: graste</title>
		<link>http://osteele.com/archives/2008/02/synchronizing-client-models/comment-page-1#comment-429</link>
		<dc:creator>graste</dc:creator>
		<pubDate>Sat, 05 Apr 2008 15:29:39 +0000</pubDate>
		<guid isPermaLink="false">http://osteele.com/2008/02/27/synchronizing-client-models#comment-429</guid>
		<description>...it nicely outlines a few thoughts I had about possible sync problems between server and client in an application using ruby on rails. I was surprised, that many examples of rails helpers just use these XHR capabilities of todays javascript libraries without further annotations. Even small updates/manipulations/additions are sometimes done using server-side actions, which do CRUD operations on model objects and/or deliver XML/HTML results. Not that this is wrong or problematic by default, but I was wondering about traffic, number of requests and race conditions. In very simple cases there are no problems, of course. When it gets more complex I&#039;m unsure about the practicalness of the basic examples and what to do, to handle the potentially occurring issues. Additionally the solution always depends on the user interface, its workflows and the overall usability/accessability.

My conclusion was, that - now that it&#039;s relatively easy to use basic XHR in applications - there is still no clear or widely used solution which handles queueing and race conditions in such apps. At least nothing with &quot;drop-in-be-happy&quot; functionality that I&#039;m aware of. Perhaps it&#039;s only a theoretically relevant problem, that nobody cares about? I can&#039;t imagine that. At least the companies with AJAX-heavy applications should&#039;ve noticed some edge cases and worked around them.

Enough for the babbling and as I said: Thanks for the interesting article - I read it about two or three times the last month.

One question though: Any advances with the queue ball yet? :)</description>
		<content:encoded><![CDATA[<p>&#8230;it nicely outlines a few thoughts I had about possible sync problems between server and client in an application using ruby on rails. I was surprised, that many examples of rails helpers just use these <span class="caps">XHR </span>capabilities of todays javascript libraries without further annotations. Even small updates/manipulations/additions are sometimes done using server-side actions, which do <span class="caps">CRUD </span>operations on model objects and/or deliver <span class="caps">XML</span>/HTML results. Not that this is wrong or problematic by default, but I was wondering about traffic, number of requests and race conditions. In very simple cases there are no problems, of course. When it gets more complex I&#8217;m unsure about the practicalness of the basic examples and what to do, to handle the potentially occurring issues. Additionally the solution always depends on the user interface, its workflows and the overall usability/accessability.</p>
<p>My conclusion was, that &#8211; now that it&#8217;s relatively easy to use basic <span class="caps">XHR </span>in applications &#8211; there is still no clear or widely used solution which handles queueing and race conditions in such apps. At least nothing with &#8220;drop-in-be-happy&#8221; functionality that I&#8217;m aware of. Perhaps it&#8217;s only a theoretically relevant problem, that nobody cares about? I can&#8217;t imagine that. At least the companies with <span class="caps">AJAX</span>-heavy applications should&#8217;ve noticed some edge cases and worked around them.</p>
<p>Enough for the babbling and as I said: Thanks for the interesting article &#8211; I read it about two or three times the last month.</p>
<p>One question though: Any advances with the queue ball yet? <img src='http://osteele.com/wp/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Kevin Reid</title>
		<link>http://osteele.com/archives/2008/02/synchronizing-client-models/comment-page-1#comment-425</link>
		<dc:creator>Kevin Reid</dc:creator>
		<pubDate>Thu, 28 Feb 2008 16:05:43 +0000</pubDate>
		<guid isPermaLink="false">http://osteele.com/2008/02/27/synchronizing-client-models#comment-425</guid>
		<description>This looks very much like &lt;a href=&quot;http://www.erights.org/&quot;&gt;E&lt;/a&gt;&#039;s message-passing semantics. In E, a reference can be a &quot;promise&quot;, which means that its referent has not been determined yet (during a network request, for example). Messages sent to promises are queued, in order, until the promise is resolved (but are sent over the network promptly, to reduce roundtrip delays).

Your buffering messages in a &lt;code&gt;Person&lt;/code&gt; until the &lt;code&gt;id&lt;/code&gt; is known, then delivering them in order once it is, is essentially what an E promise does. (Unlike your Serialized.post, the messages are delivered &lt;a href=&quot;http://erights.org/elib/distrib/pipeline.html&quot;&gt;without waiting for responses&lt;/a&gt;, because the protocol is defined so that the target receives messages &lt;a href=&quot;http://erights.org/elib/concurrency/partial-order.html&quot;&gt;in order&lt;/a&gt; over a single connection).

Tyler Close&#039;s &lt;a href=&quot;http://waterken.com/dev/Web/&quot;&gt;web-calculus&lt;/a&gt; is a related system (I&#039;m not thoroughly familiar with it myself) designed to work over HTTP.

I look forward to seeing if your &quot;Queue Ball&quot; is a generic eventual reference implementation. &lt;code&gt;:-)&lt;/code&gt;

(If you&#039;re interested in hearing more about E, feel free to contact me.)</description>
		<content:encoded><![CDATA[<p>This looks very much like <a href="http://www.erights.org/">E</a>&#8217;s message-passing semantics. In E, a reference can be a &#8220;promise&#8221;, which means that its referent has not been determined yet (during a network request, for example). Messages sent to promises are queued, in order, until the promise is resolved (but are sent over the network promptly, to reduce roundtrip delays).</p>
<p>Your buffering messages in a <code>Person</code> until the <code>id</code> is known, then delivering them in order once it is, is essentially what an E promise does. (Unlike your Serialized.post, the messages are delivered <a href="http://erights.org/elib/distrib/pipeline.html">without waiting for responses</a>, because the protocol is defined so that the target receives messages <a href="http://erights.org/elib/concurrency/partial-order.html">in order</a> over a single connection).</p>
<p>Tyler Close&#8217;s <a href="http://waterken.com/dev/Web/">web-calculus</a> is a related system (I&#8217;m not thoroughly familiar with it myself) designed to work over <span class="caps">HTTP.</span></p>
<p>I look forward to seeing if your &#8220;Queue Ball&#8221; is a generic eventual reference implementation. <code> <img src='http://osteele.com/wp/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </code></p>
<p>(If you&#8217;re interested in hearing more about E, feel free to contact me.)</p>
]]></content:encoded>
	</item>
</channel>
</rss>
