<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Joose it! - Latest Comments</title><link xmlns="http://www.w3.org/2005/Atom" rel="http://api.friendfeed.com/2008/03#sup" href="http://disqus.com/sup/all.sup#forumcomments-e3874879" type="application/json"/><link>http://jooseit.disqus.com/</link><description></description><atom:link href="http://jooseit.disqus.com/comments.rss" rel="self"></atom:link><language>en</language><lastBuildDate>Mon, 06 Jun 2011 15:12:59 -0000</lastBuildDate><item><title>Re: Why Joose? Part #2 (phylosophical)</title><link>http://joose.it/blog/2011/01/13/why-joose-part-2-phylosophical/#comment-219377035</link><description>&lt;p&gt;Really great post and i got few useful points from this post.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">seo greece</dc:creator><pubDate>Mon, 06 Jun 2011 15:12:59 -0000</pubDate></item><item><title>Re: Syncler &amp;#8211; distributed applications for human beings</title><link>http://joose.it/blog/2011/04/08/syncler-distributed-applications-for-human-beings/#comment-213705329</link><description>&lt;p&gt;&amp;gt; How is the programmer-supplied conflict-merging code written?  Maybe there's an example in ShareBoard you could quote?&lt;/p&gt;

&lt;p&gt;No "custom" conflict resolution logic in Shareboard. It uses "first-win" policy.&lt;/p&gt;

&lt;p&gt;Take a look on the Mutation (update) Role: &lt;a href="https://github.com/SamuraiJack/Syncler/blob/master/lib/Syncler/Mutation.js" rel="nofollow"&gt;https://github.com/SamuraiJack...&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Any class can implement this role, for example, mutation for the object key: &lt;a href="https://github.com/SamuraiJack/Syncler/blob/master/lib/Syncler/Mutation/Object/Set.js" rel="nofollow"&gt;https://github.com/SamuraiJack...&lt;/a&gt;. The "merge" method of the class will be called in case preconditions do not match the captured ones. "Merge" is supposed to return the new mutation, which will be applied to replica instead of conflicting one. So all the conflict resolution logic should happen in it. As you can see, right now all "merge" methods return "void" update (first-win)&lt;/p&gt;

&lt;p&gt;&amp;gt; And what about preconditions that (say) read several fields of several &lt;br&gt;different objects before deciding to write a field.  Is that properly &lt;br&gt;captured, or are you just recording the prior contents of the field &lt;br&gt;which is eventually mutated?      &lt;/p&gt;

&lt;p&gt;Yes, preconditions can be captured from several objects just fine - just need to add additional attributes to the mutation class.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Nickolay Platonov</dc:creator><pubDate>Sun, 29 May 2011 04:40:48 -0000</pubDate></item><item><title>Re: Syncler &amp;#8211; distributed applications for human beings</title><link>http://joose.it/blog/2011/04/08/syncler-distributed-applications-for-human-beings/#comment-213484248</link><description>&lt;p&gt;How is the programmer-supplied conflict-merging code written?  Maybe there's an example in ShareBoard you could quote?&lt;/p&gt;

&lt;p&gt;And what about preconditions that (say) read several fields of several different objects before deciding to write a field.  Is that properly captured, or are you just recording the prior contents of the field which is eventually mutated?&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">C. Scott Ananian</dc:creator><pubDate>Sat, 28 May 2011 13:58:57 -0000</pubDate></item><item><title>Re: Syncler &amp;#8211; distributed applications for human beings</title><link>http://joose.it/blog/2011/04/08/syncler-distributed-applications-for-human-beings/#comment-211983123</link><description>&lt;p&gt;&amp;gt; I'd like to learn more about how conflicts and rollback are handled. &lt;/p&gt;

&lt;p&gt;Right now its always "first win". I'm planning to add the "last win" option to all standard operation (which covers manipulations with standard data types - object/array/date/etc). Any more complex processing (like merging conflicts) should be provided by user (via creation of own operation).&lt;/p&gt;

&lt;p&gt;&amp;gt; Bayou let applications choose between accessing the "committed state" or&lt;br&gt; the "tentative state".  Do you have a mechanism for doing this?&lt;/p&gt;

&lt;p&gt;Not yet, but this feature is in roadmap with high priority. Currently its always "tentative state".&lt;/p&gt;

&lt;p&gt;&amp;gt; When you state that the app is MVC factored, do you mean that the view &lt;br&gt;must be able to handle arbitrary rollback in the model at anytime?&lt;/p&gt;

&lt;p&gt;Yes. Rollback however is just the "reverse" update, so I believe there will be a possibility to generalize "forward/reverse" updates. &lt;/p&gt;

&lt;p&gt;&amp;gt; You mention that updates capture preconditions--is this fine-grained, or&lt;br&gt; us this just the client's version vector at the time of the update?&lt;/p&gt;

&lt;p&gt;Its the fine-grained mechanism till certain degree (ie when updating some key in the object, it only captures the value of that key, not whole object). &lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Nickolay Platonov</dc:creator><pubDate>Thu, 26 May 2011 02:27:40 -0000</pubDate></item><item><title>Re: Syncler &amp;#8211; distributed applications for human beings</title><link>http://joose.it/blog/2011/04/08/syncler-distributed-applications-for-human-beings/#comment-211633454</link><description>&lt;p&gt;I'd like to learn more about how conflicts and rollback are handled.  Bayou let applications choose between accessing the "committed state" or the "tentative state".  Do you have a mechanism for doing this?  When you state that the app is MVC factored, do you mean that the view must be able to handle arbitrary rollback in the model at anytime?  You mention that updates capture preconditions--is this fine-grained, or us this just the client's version vector at the time of the update?&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">C. Scott Ananian</dc:creator><pubDate>Wed, 25 May 2011 14:33:04 -0000</pubDate></item><item><title>Re: Syncler &amp;#8211; distributed applications for human beings</title><link>http://joose.it/blog/2011/04/08/syncler-distributed-applications-for-human-beings/#comment-211257104</link><description>&lt;p&gt;Thanks.&lt;/p&gt;

&lt;p&gt;About CPS - it is ugly only compared with some native language construct. Comparing with "raw" callbacks (and other CPS abstractions libraries, like Step, etc) its very readable and has intuitive syntax. &lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Nickolay Platonov</dc:creator><pubDate>Wed, 25 May 2011 01:52:01 -0000</pubDate></item><item><title>Re: Syncler &amp;#8211; distributed applications for human beings</title><link>http://joose.it/blog/2011/04/08/syncler-distributed-applications-for-human-beings/#comment-210934014</link><description>&lt;p&gt;I discussed this a bit at &lt;a href="http://cananian.livejournal.com/64330.html" rel="nofollow"&gt;http://cananian.livejournal.co...&lt;/a&gt;.  The syncler work is very interesting; it's a shame that the lack of 'yield' on certain platforms is forcing the use of a rather ugly CPS form.  Havoc further discusses the use of 'yield' here: &lt;a href="http://blog.ometer.com/2010/11/28/a-sequential-actor-like-api-for-server-side-javascript/" rel="nofollow"&gt;http://blog.ometer.com/2010/11...&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">C. Scott Ananian</dc:creator><pubDate>Tue, 24 May 2011 17:06:59 -0000</pubDate></item><item><title>Re: JooseX.CPS Tutorial &amp;#8211; Part II</title><link>http://joose.it/blog/2011/02/22/joosex-cps-tutorial-part-ii/#comment-210685930</link><description>&lt;p&gt;Using 'yield' statements makes this sort of code much more readable: &lt;a href="http://blog.ometer.com/2010/11/28/a-sequential-actor-like-api-for-server-side-javascript/" rel="nofollow"&gt;http://blog.ometer.com/2010/11...&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It would be nice to see support for doing it this way on browsers/non-browser environments which support it.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">C. Scott Ananian</dc:creator><pubDate>Tue, 24 May 2011 10:57:48 -0000</pubDate></item><item><title>Re: Syncler &amp;#8211; distributed applications for human beings</title><link>http://joose.it/blog/2011/04/08/syncler-distributed-applications-for-human-beings/#comment-183035947</link><description>&lt;p&gt;Thanks. ShareBoard is currently a single system. I'm planning to write some simple multiplayer game soon.&lt;/p&gt;

&lt;p&gt;As about "single client &amp;lt;-&amp;gt; server communication" - yes, also thinking about such approach. Its very tempting to instantly have a transparent (and real-time with low latency) persistence for usual applications. But some questions arise with this approach - first of all security and some others. &lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Nickolay Platonov</dc:creator><pubDate>Tue, 12 Apr 2011 02:28:16 -0000</pubDate></item><item><title>Re: Joose 3 internals – Part I. Meta-layers</title><link>http://joose.it/blog/2011/01/13/joose-3-internals-%e2%80%93-part-i-meta-layers/#comment-183034272</link><description>&lt;p&gt;Not exactly, though mixins are supported in the form of Roles: &lt;a href="http://joose.github.com/Joose/doc/html/Joose/Manual/Roles.html" rel="nofollow"&gt;http://joose.github.com/Joose/...&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Nickolay Platonov</dc:creator><pubDate>Tue, 12 Apr 2011 02:19:02 -0000</pubDate></item><item><title>Re: Why Joose? Part #2 (phylosophical)</title><link>http://joose.it/blog/2011/01/13/why-joose-part-2-phylosophical/#comment-183033790</link><description>&lt;p&gt;No, its the "lazy value" pattern - the value which is calculated only when its needed. But memoization can be added (to methods) as well. The idea is that you can take any pattern and "embed" it into the meta-layer, making it declarative and hiding all the boilerplate.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Nickolay Platonov</dc:creator><pubDate>Tue, 12 Apr 2011 02:16:21 -0000</pubDate></item><item><title>Re: Introducing KiokuJS</title><link>http://joose.it/blog/2011/01/13/introducing-kiokujs/#comment-183033221</link><description>&lt;p&gt;Thanks, pleasant to hear.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Nickolay Platonov</dc:creator><pubDate>Tue, 12 Apr 2011 02:13:05 -0000</pubDate></item><item><title>Re: Joose 3 internals – Part I. Meta-layers</title><link>http://joose.it/blog/2011/01/13/joose-3-internals-%e2%80%93-part-i-meta-layers/#comment-182774027</link><description>&lt;p&gt;duck typing?&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jesse Sanford</dc:creator><pubDate>Mon, 11 Apr 2011 18:50:38 -0000</pubDate></item><item><title>Re: Joose 3 internals – Part I. Meta-layers</title><link>http://joose.it/blog/2011/01/13/joose-3-internals-%e2%80%93-part-i-meta-layers/#comment-182773879</link><description>&lt;p&gt;Similar to mixins?&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jesse Sanford</dc:creator><pubDate>Mon, 11 Apr 2011 18:50:15 -0000</pubDate></item><item><title>Re: Syncler &amp;#8211; distributed applications for human beings</title><link>http://joose.it/blog/2011/04/08/syncler-distributed-applications-for-human-beings/#comment-182764128</link><description>&lt;p&gt;This is very exciting. I would like to know about some more real-world use. What type of apps have you produced other than the simple shareboard. Is there any reason this wouldn't also benefit the ui latency when used for single client &amp;lt;-&amp;gt; server communication? I am talking about simple ajax applications that don't involve "shared" concurrent state between the clients?&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jesse Sanford</dc:creator><pubDate>Mon, 11 Apr 2011 18:28:15 -0000</pubDate></item><item><title>Re: Why Joose? Part #2 (phylosophical)</title><link>http://joose.it/blog/2011/01/13/why-joose-part-2-phylosophical/#comment-182760978</link><description>&lt;p&gt;Am I wrong or is this just memoization?&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jesse Sanford</dc:creator><pubDate>Mon, 11 Apr 2011 18:19:04 -0000</pubDate></item><item><title>Re: Introducing KiokuJS</title><link>http://joose.it/blog/2011/01/13/introducing-kiokujs/#comment-182747108</link><description>&lt;p&gt;This is very powerful. VERY nice work!&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jesse Sanford</dc:creator><pubDate>Mon, 11 Apr 2011 17:41:36 -0000</pubDate></item><item><title>Re: PromoteJS – Community matter</title><link>http://joose.it/blog/2011/01/13/promotejs-%e2%80%93-community-matter/#comment-67623352</link><description>&lt;p&gt;Will be something like: &lt;/p&gt;&lt;pre&gt;FileSystem.readFile('/etc/pwd/').then(function (buffer) {&lt;p&gt;&lt;/p&gt;

&lt;p&gt;    FileSystem.writeFile('/etc/pwd-copy').now()&lt;/p&gt;

&lt;p&gt;}).except(function (e) {&lt;/p&gt;

&lt;p&gt;    // handles exceptions both from `readFile` &amp;amp; `writeFile` &lt;br&gt;    alert(e)&lt;br&gt;    &lt;/p&gt;

&lt;p&gt;}).now()&lt;/p&gt;

&lt;p&gt;sync equivalent&lt;/p&gt;

&lt;p&gt;try {&lt;/p&gt;

&lt;p&gt;    var buffer = FileSystem.readFile('/etc/pwd/')&lt;br&gt;    &lt;br&gt;    FileSystem.writeFile('/etc/pwd/', buffer)&lt;br&gt;    &lt;br&gt;} catch (e) {&lt;/p&gt;

&lt;p&gt;    alert(e)&lt;br&gt;}&lt;br&gt;&lt;/p&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">JooseJS</dc:creator><pubDate>Tue, 10 Aug 2010 15:18:25 -0000</pubDate></item><item><title>Re: PromoteJS – Community matter</title><link>http://joose.it/blog/2011/01/13/promotejs-%e2%80%93-community-matter/#comment-67619045</link><description>&lt;p&gt;Awesome post! Would be cool to have some examples of real world Node.js code translated to Joose.CPS!&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Malte Ubl</dc:creator><pubDate>Tue, 10 Aug 2010 14:58:44 -0000</pubDate></item><item><title>Re: Why Joose? Part #2 (phylosophical)</title><link>http://joose.it/blog/2010/06/11/why-joose-part-2-phylosophical/#comment-58191883</link><description>&lt;p&gt;It will :) Next post will illustrate the whole idea on the concrete example.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">SamuraiJack8</dc:creator><pubDate>Wed, 23 Jun 2010 04:09:48 -0000</pubDate></item><item><title>Re: Why Joose? Part #2 (phylosophical)</title><link>http://joose.it/blog/2010/06/11/why-joose-part-2-phylosophical/#comment-58188188</link><description>&lt;p&gt;Just a totally offtopic remark:&lt;br&gt;Please note that the C implementation of quicksort is in-place whereas the Haskell one is not. Also, using a non-random pivot element is asking for quadratic run-time. Modifying the C implementation to do that is trivial, modifying the Haskell one is extremely ugly.&lt;/p&gt;

&lt;p&gt;Why am I debating this on a JavaScript topic? Well clearly, choosing the right abstraction to absorb complexity is extremely important. So let's hope this blog can convince us that Joose uses the right abstractions :)&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Kosta</dc:creator><pubDate>Wed, 23 Jun 2010 03:37:09 -0000</pubDate></item><item><title>Re: Hello world</title><link>http://joose.it/blog/2010/05/11/hello-world/#comment-50148985</link><description>&lt;p&gt;test&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">name</dc:creator><pubDate>Thu, 13 May 2010 13:39:14 -0000</pubDate></item></channel></rss>
