<?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: Aza Raskin&#8217;s Case for Undo</title>
	<atom:link href="http://ajaxian.com/archives/aza-raskins-case-for-undo/feed" rel="self" type="application/rss+xml" />
	<link>http://ajaxian.com/archives/aza-raskins-case-for-undo</link>
	<description>Cleaning up the web with Ajax</description>
	<lastBuildDate>Thu, 17 May 2012 07:43:39 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
	<item>
		<title>By: ebdrup</title>
		<link>http://ajaxian.com/archives/aza-raskins-case-for-undo/comment-page-1#comment-268848</link>
		<dc:creator>ebdrup</dc:creator>
		<pubDate>Sun, 09 Nov 2008 11:01:15 +0000</pubDate>
		<guid isPermaLink="false">http://ajaxian.com/?p=2788#comment-268848</guid>
		<description>http://www.ajax.org/?demo=platform/smartbinding
Doesn&#039;t work for me, I delete som folders in the first window, click undo and they reappear in the second window not the first, and also an &quot;undefined&quot; appeared as filename.</description>
		<content:encoded><![CDATA[<p><a href="http://www.ajax.org/?demo=platform/smartbinding" rel="nofollow">http://www.ajax.org/?demo=platform/smartbinding</a><br />
Doesn&#8217;t work for me, I delete som folders in the first window, click undo and they reappear in the second window not the first, and also an &#8220;undefined&#8221; appeared as filename.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ebdrup</title>
		<link>http://ajaxian.com/archives/aza-raskins-case-for-undo/comment-page-1#comment-268847</link>
		<dc:creator>ebdrup</dc:creator>
		<pubDate>Sun, 09 Nov 2008 10:55:08 +0000</pubDate>
		<guid isPermaLink="false">http://ajaxian.com/?p=2788#comment-268847</guid>
		<description>I&#039;ve implemented undo in my AJAX application it only took 3 days and it&#039;s done reusably. See a video of it in action here:
http://obsurvey.com/Articles/WhereDidUndoGo.aspx</description>
		<content:encoded><![CDATA[<p>I&#8217;ve implemented undo in my AJAX application it only took 3 days and it&#8217;s done reusably. See a video of it in action here:<br />
<a href="http://obsurvey.com/Articles/WhereDidUndoGo.aspx" rel="nofollow">http://obsurvey.com/Articles/WhereDidUndoGo.aspx</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ruben Daniels</title>
		<link>http://ajaxian.com/archives/aza-raskins-case-for-undo/comment-page-1#comment-256377</link>
		<dc:creator>Ruben Daniels</dc:creator>
		<pubDate>Tue, 02 Oct 2007 09:18:18 +0000</pubDate>
		<guid isPermaLink="false">http://ajaxian.com/?p=2788#comment-256377</guid>
		<description>For a robust working undo/redo solution you will need an extensive framework that will monitor actions and &#039;knows&#039; how to undo them. Here&#039;s an example of such an implementation:

http://www.ajax.org/?demo=platform/smartbinding</description>
		<content:encoded><![CDATA[<p>For a robust working undo/redo solution you will need an extensive framework that will monitor actions and &#8216;knows&#8217; how to undo them. Here&#8217;s an example of such an implementation:</p>
<p><a href="http://www.ajax.org/?demo=platform/smartbinding" rel="nofollow">http://www.ajax.org/?demo=platform/smartbinding</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alexander Botero-Lowry</title>
		<link>http://ajaxian.com/archives/aza-raskins-case-for-undo/comment-page-1#comment-255713</link>
		<dc:creator>Alexander Botero-Lowry</dc:creator>
		<pubDate>Tue, 18 Sep 2007 22:02:21 +0000</pubDate>
		<guid isPermaLink="false">http://ajaxian.com/?p=2788#comment-255713</guid>
		<description>As, I pointed out with my example in the comments on the Humanized blog, it&#039;s trivial to just put a deleted bit on items in the database, and then have a script that periodically removes them. Until they&#039;re removed the user can still see them and delete/undelete them. I think the other big problem with the approach shown is that the queue isn&#039;t viewable, so if you deleted three items, and you want the first back, that&#039;s five steps.</description>
		<content:encoded><![CDATA[<p>As, I pointed out with my example in the comments on the Humanized blog, it&#8217;s trivial to just put a deleted bit on items in the database, and then have a script that periodically removes them. Until they&#8217;re removed the user can still see them and delete/undelete them. I think the other big problem with the approach shown is that the queue isn&#8217;t viewable, so if you deleted three items, and you want the first back, that&#8217;s five steps.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Kevin Hoang Le</title>
		<link>http://ajaxian.com/archives/aza-raskins-case-for-undo/comment-page-1#comment-255685</link>
		<dc:creator>Kevin Hoang Le</dc:creator>
		<pubDate>Tue, 18 Sep 2007 15:28:21 +0000</pubDate>
		<guid isPermaLink="false">http://ajaxian.com/?p=2788#comment-255685</guid>
		<description>I think an undo proof-of-concept is easy as the author pointed out.  However, a robust solution to make web user experiences as similar as desktop user ones possible is more complex.  Besides many issues that were brought up by other readers, there are other issues.  For example, if you give them undo, they&#039;re going to ask for redo, because that&#039;s already common in desktop applications.  Now forget about desktop, how to differentiate or integrate between browsers back/forward buttons and undo/redo commands?  OK, so  back to the article, assuming no redo, no back/forward issues, why shouldn&#039;t  the &quot;trash can&quot; be implemented on the server?  With Ajax or rather XHR, it is almost very easy.</description>
		<content:encoded><![CDATA[<p>I think an undo proof-of-concept is easy as the author pointed out.  However, a robust solution to make web user experiences as similar as desktop user ones possible is more complex.  Besides many issues that were brought up by other readers, there are other issues.  For example, if you give them undo, they&#8217;re going to ask for redo, because that&#8217;s already common in desktop applications.  Now forget about desktop, how to differentiate or integrate between browsers back/forward buttons and undo/redo commands?  OK, so  back to the article, assuming no redo, no back/forward issues, why shouldn&#8217;t  the &#8220;trash can&#8221; be implemented on the server?  With Ajax or rather XHR, it is almost very easy.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Laurian</title>
		<link>http://ajaxian.com/archives/aza-raskins-case-for-undo/comment-page-1#comment-255683</link>
		<dc:creator>Laurian</dc:creator>
		<pubDate>Tue, 18 Sep 2007 14:38:28 +0000</pubDate>
		<guid isPermaLink="false">http://ajaxian.com/?p=2788#comment-255683</guid>
		<description>There is a Command pattern, that can be used to do this, not by stacking a queue to be applied at the end, but by having them provide an undo() method.

From wikipedia:
&quot;If all user actions in a program are implemented as command objects, the program can keep a stack of the most recently executed commands. When the user wants to undo a command, the program simply pops the most recent command object and executes its undo() method.&quot;

If you think that the undo() won&#039;t work with complicated state, look at the memento pattern, which provides the ability to restore an object to its previous state (&quot;undo by rollback&quot;).</description>
		<content:encoded><![CDATA[<p>There is a Command pattern, that can be used to do this, not by stacking a queue to be applied at the end, but by having them provide an undo() method.</p>
<p>From wikipedia:<br />
&#8220;If all user actions in a program are implemented as command objects, the program can keep a stack of the most recently executed commands. When the user wants to undo a command, the program simply pops the most recent command object and executes its undo() method.&#8221;</p>
<p>If you think that the undo() won&#8217;t work with complicated state, look at the memento pattern, which provides the ability to restore an object to its previous state (&#8220;undo by rollback&#8221;).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Marat Denenberg</title>
		<link>http://ajaxian.com/archives/aza-raskins-case-for-undo/comment-page-1#comment-255682</link>
		<dc:creator>Marat Denenberg</dc:creator>
		<pubDate>Tue, 18 Sep 2007 14:23:32 +0000</pubDate>
		<guid isPermaLink="false">http://ajaxian.com/?p=2788#comment-255682</guid>
		<description>Creating an undo feature isn&#039;t any more difficult on the web than it is on the desktop side of things. The principle is the same. The problem is that an undo is difficult to do, period. The more unique the action, the more difficult an undo. How do you undo an update to a database? You would be forced to keep an undo &quot;history&quot; allowing you to undo a certain amount of actions. You can also try transactions. Either way, this is overhead and is more difficult to implement than a warning/confirm. Not every fancy feature is a necessity. We also have to balance overhead and development time vs actual utility. Also, keep in mind that some applications need an undo more than others.</description>
		<content:encoded><![CDATA[<p>Creating an undo feature isn&#8217;t any more difficult on the web than it is on the desktop side of things. The principle is the same. The problem is that an undo is difficult to do, period. The more unique the action, the more difficult an undo. How do you undo an update to a database? You would be forced to keep an undo &#8220;history&#8221; allowing you to undo a certain amount of actions. You can also try transactions. Either way, this is overhead and is more difficult to implement than a warning/confirm. Not every fancy feature is a necessity. We also have to balance overhead and development time vs actual utility. Also, keep in mind that some applications need an undo more than others.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Gonzalo</title>
		<link>http://ajaxian.com/archives/aza-raskins-case-for-undo/comment-page-1#comment-255680</link>
		<dc:creator>Gonzalo</dc:creator>
		<pubDate>Tue, 18 Sep 2007 13:46:28 +0000</pubDate>
		<guid isPermaLink="false">http://ajaxian.com/?p=2788#comment-255680</guid>
		<description>So you have these items (pictures, messages, files, whatever) and you select some and simply delete them. Instead of a warning you implement some kind of trashcan policy. When deleting you move things to the trashcan. (Or you create a &quot;deletion queue&quot; where things can be undeleted from... which is very similar)

And then... your girlfriend/boyfriend deletes those pictures from that weekend you went to the beach. Yeah, those ones you both said it would be &quot;safer&quot; to delete. But, you know, they&#039;re still there. He/she thought he/she deleted them but actually did not, just moved them to the trash/queue.

On the other hand you accidentally also deleted the one picture you really really liked from that weekend which was &quot;acceptable&quot; and you wanted to keep.

Can the trashcan/queue be emptied automatically? How does the application know one from the other? How can the programmer beforehand decide which policy is applicable? Should we get a &quot;delete&quot; (move to trashcan), a &quot;really delete&quot; and an empty trashcan/queue? Or do we really want a system which let&#039;s us delete and for a period of time undo, and then does the actual deletion on its own when/if it considers appropriate?</description>
		<content:encoded><![CDATA[<p>So you have these items (pictures, messages, files, whatever) and you select some and simply delete them. Instead of a warning you implement some kind of trashcan policy. When deleting you move things to the trashcan. (Or you create a &#8220;deletion queue&#8221; where things can be undeleted from&#8230; which is very similar)</p>
<p>And then&#8230; your girlfriend/boyfriend deletes those pictures from that weekend you went to the beach. Yeah, those ones you both said it would be &#8220;safer&#8221; to delete. But, you know, they&#8217;re still there. He/she thought he/she deleted them but actually did not, just moved them to the trash/queue.</p>
<p>On the other hand you accidentally also deleted the one picture you really really liked from that weekend which was &#8220;acceptable&#8221; and you wanted to keep.</p>
<p>Can the trashcan/queue be emptied automatically? How does the application know one from the other? How can the programmer beforehand decide which policy is applicable? Should we get a &#8220;delete&#8221; (move to trashcan), a &#8220;really delete&#8221; and an empty trashcan/queue? Or do we really want a system which let&#8217;s us delete and for a period of time undo, and then does the actual deletion on its own when/if it considers appropriate?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dav Bacci</title>
		<link>http://ajaxian.com/archives/aza-raskins-case-for-undo/comment-page-1#comment-255678</link>
		<dc:creator>Dav Bacci</dc:creator>
		<pubDate>Tue, 18 Sep 2007 13:05:03 +0000</pubDate>
		<guid isPermaLink="false">http://ajaxian.com/?p=2788#comment-255678</guid>
		<description>I have to say that the implementation of &quot;undo&quot; in the article leaves a lot to be desired. For those who require this functionality in their own applications, take a look at the command pattern. It is not difficult to code and will give you much more robust results than simple client side event queueing.</description>
		<content:encoded><![CDATA[<p>I have to say that the implementation of &#8220;undo&#8221; in the article leaves a lot to be desired. For those who require this functionality in their own applications, take a look at the command pattern. It is not difficult to code and will give you much more robust results than simple client side event queueing.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Lawrence Carvalho</title>
		<link>http://ajaxian.com/archives/aza-raskins-case-for-undo/comment-page-1#comment-255677</link>
		<dc:creator>Lawrence Carvalho</dc:creator>
		<pubDate>Tue, 18 Sep 2007 12:54:26 +0000</pubDate>
		<guid isPermaLink="false">http://ajaxian.com/?p=2788#comment-255677</guid>
		<description>Why do it on unload? If you&#039;re gonna do it, do it when the user undos. 

&lt;a href=&quot;http://www.nodetraveller.com/blog/javascript/actasundo/&quot; rel=&quot;nofollow&quot;&gt;Adding undo functionality to your existing JS code&lt;/a&gt; is relatively easy. The &quot;difficulty&quot; arises integrating into your app (server comms, UI - where does the history list go? etc) and needs to be thought out from the beginning not as an afterthought.</description>
		<content:encoded><![CDATA[<p>Why do it on unload? If you&#8217;re gonna do it, do it when the user undos. </p>
<p><a href="http://www.nodetraveller.com/blog/javascript/actasundo/" rel="nofollow">Adding undo functionality to your existing JS code</a> is relatively easy. The &#8220;difficulty&#8221; arises integrating into your app (server comms, UI &#8211; where does the history list go? etc) and needs to be thought out from the beginning not as an afterthought.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Simon Willison</title>
		<link>http://ajaxian.com/archives/aza-raskins-case-for-undo/comment-page-1#comment-255676</link>
		<dc:creator>Simon Willison</dc:creator>
		<pubDate>Tue, 18 Sep 2007 12:29:44 +0000</pubDate>
		<guid isPermaLink="false">http://ajaxian.com/?p=2788#comment-255676</guid>
		<description>I really don&#039;t like his proposed &quot;event queue&quot; technique, which involves stashing a queue of changes in the browser and only sending them to the server when the onunload event fires (due to the user closing their page). It&#039;s too easy to see data getting lost due to browser crashes, or users getting confused by the inconsistency between their mental model and the actual state of the persistent data on the server.</description>
		<content:encoded><![CDATA[<p>I really don&#8217;t like his proposed &#8220;event queue&#8221; technique, which involves stashing a queue of changes in the browser and only sending them to the server when the onunload event fires (due to the user closing their page). It&#8217;s too easy to see data getting lost due to browser crashes, or users getting confused by the inconsistency between their mental model and the actual state of the persistent data on the server.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

