<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments on: Recent Happenings in Review Board</title>
	<atom:link href="http://blog.chipx86.com/2007/06/21/recent-happenings-in-review-board/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.chipx86.com/2007/06/21/recent-happenings-in-review-board/</link>
	<description>Various stuff from some guy.</description>
	<lastBuildDate>Thu, 02 Feb 2012 19:39:52 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>By: Emanuele Aina</title>
		<link>http://blog.chipx86.com/2007/06/21/recent-happenings-in-review-board/#comment-949</link>
		<dc:creator><![CDATA[Emanuele Aina]]></dc:creator>
		<pubDate>Wed, 27 Jun 2007 09:27:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.chipx86.com/blog/?p=227#comment-949</guid>
		<description><![CDATA[Mercurial has an improved diff module as they experienced some problems with  the difflib Python module. It is faster and gives good results in terms of patch size: http://www.selenic.com/mercurial/wiki/index.cgi/FAQ#head-4173e68b299fdcfb38baa08f08c3fbb1868e7d1a

It also uses a C module for the speed-critical portions and it can be found here: http://selenic.com/repo/hg/file/tip/mercurial/mdiff.py]]></description>
		<content:encoded><![CDATA[<p>Mercurial has an improved diff module as they experienced some problems with  the difflib Python module. It is faster and gives good results in terms of patch size: <a href="http://www.selenic.com/mercurial/wiki/index.cgi/FAQ#head-4173e68b299fdcfb38baa08f08c3fbb1868e7d1a" rel="nofollow">http://www.selenic.com/mercurial/wiki/index.cgi/FAQ#head-4173e68b299fdcfb38baa08f08c3fbb1868e7d1a</a></p>
<p>It also uses a C module for the speed-critical portions and it can be found here: <a href="http://selenic.com/repo/hg/file/tip/mercurial/mdiff.py" rel="nofollow">http://selenic.com/repo/hg/file/tip/mercurial/mdiff.py</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Scott Perry</title>
		<link>http://blog.chipx86.com/2007/06/21/recent-happenings-in-review-board/#comment-948</link>
		<dc:creator><![CDATA[Scott Perry]]></dc:creator>
		<pubDate>Wed, 27 Jun 2007 06:03:43 +0000</pubDate>
		<guid isPermaLink="false">http://www.chipx86.com/blog/?p=227#comment-948</guid>
		<description><![CDATA[It is likely that Apple will be using Review Board to some extent internally, although, as with most things at work, I can&#039;t really talk about it.]]></description>
		<content:encoded><![CDATA[<p>It is likely that Apple will be using Review Board to some extent internally, although, as with most things at work, I can&#8217;t really talk about it.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ken Schalk</title>
		<link>http://blog.chipx86.com/2007/06/21/recent-happenings-in-review-board/#comment-947</link>
		<dc:creator><![CDATA[Ken Schalk]]></dc:creator>
		<pubDate>Tue, 26 Jun 2007 16:33:08 +0000</pubDate>
		<guid isPermaLink="false">http://www.chipx86.com/blog/?p=227#comment-947</guid>
		<description><![CDATA[ChipX86: Bram&#039;s algorithm will give good diff results for cases where text has been moved, but it will still appear as &quot;lines deleted here, lines added there.&quot;  The main thing it avoids is the kind of confusion GNU diff can produce, like &quot;these curly braces on lines by themselves are unchanged but everything around them is different.&quot;

P.S. FWIW, the merge tool I personally rely on (and a bunch of microprocessor designers at Intel rely on) is using Bram&#039;s diff algorithm (actually the whole precise Codeville text merger which he developed).]]></description>
		<content:encoded><![CDATA[<p>ChipX86: Bram&#8217;s algorithm will give good diff results for cases where text has been moved, but it will still appear as &#8220;lines deleted here, lines added there.&#8221;  The main thing it avoids is the kind of confusion GNU diff can produce, like &#8220;these curly braces on lines by themselves are unchanged but everything around them is different.&#8221;</p>
<p>P.S. FWIW, the merge tool I personally rely on (and a bunch of microprocessor designers at Intel rely on) is using Bram&#8217;s diff algorithm (actually the whole precise Codeville text merger which he developed).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ChipX86</title>
		<link>http://blog.chipx86.com/2007/06/21/recent-happenings-in-review-board/#comment-946</link>
		<dc:creator><![CDATA[ChipX86]]></dc:creator>
		<pubDate>Mon, 25 Jun 2007 18:07:52 +0000</pubDate>
		<guid isPermaLink="false">http://www.chipx86.com/blog/?p=227#comment-946</guid>
		<description><![CDATA[Ken: It&#039;s interesting that you said that. As I was going to sleep last night, I started wondering about that same approach and figured it would be especially good to find out if lines have been moved, so that we could mark them up in a certain way. I have some notes with almost that exact approach, but I wasn&#039;t sure how much better it would actually work. If this is indeed being used in other VCSes, maybe I&#039;ll give it a shot.

Thanks for the links!]]></description>
		<content:encoded><![CDATA[<p>Ken: It&#8217;s interesting that you said that. As I was going to sleep last night, I started wondering about that same approach and figured it would be especially good to find out if lines have been moved, so that we could mark them up in a certain way. I have some notes with almost that exact approach, but I wasn&#8217;t sure how much better it would actually work. If this is indeed being used in other VCSes, maybe I&#8217;ll give it a shot.</p>
<p>Thanks for the links!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ken Schalk</title>
		<link>http://blog.chipx86.com/2007/06/21/recent-happenings-in-review-board/#comment-945</link>
		<dc:creator><![CDATA[Ken Schalk]]></dc:creator>
		<pubDate>Mon, 25 Jun 2007 14:12:45 +0000</pubDate>
		<guid isPermaLink="false">http://www.chipx86.com/blog/?p=227#comment-945</guid>
		<description><![CDATA[It&#039;s too bad I couldn&#039;t bring it to your attention before you spent the effort to implement the GNU diff algorithm, but there&#039;s a diff algorithm that a couple VCSes are using that gives really good results (when used on source code).  Basically, rather than doing a longest common sub-sequence, it finds all lines that occur exactly once on both sides and matches on those first.  Then it subdivides the file based on those matches and uses the same algorithm on those sub-parts (i.e. matching on lines that are unique within that section of the file).  This algorithm seems to have a much higher probability of producing short, readable diffs, and a much lower chance of producing a diff that seems &quot;wrong&quot; to a human.

It was developed by Bram Cohen.  You can find one Python implementation of it included in the file attached here (which is actually a merge algorithm that uses this diff algorithm internally):

http://revctrl.org/PreciseCodevilleMerge

Bram mentioned recently that bazaar is now using it:

http://bramcohen.livejournal.com/37690.html]]></description>
		<content:encoded><![CDATA[<p>It&#8217;s too bad I couldn&#8217;t bring it to your attention before you spent the effort to implement the GNU diff algorithm, but there&#8217;s a diff algorithm that a couple VCSes are using that gives really good results (when used on source code).  Basically, rather than doing a longest common sub-sequence, it finds all lines that occur exactly once on both sides and matches on those first.  Then it subdivides the file based on those matches and uses the same algorithm on those sub-parts (i.e. matching on lines that are unique within that section of the file).  This algorithm seems to have a much higher probability of producing short, readable diffs, and a much lower chance of producing a diff that seems &#8220;wrong&#8221; to a human.</p>
<p>It was developed by Bram Cohen.  You can find one Python implementation of it included in the file attached here (which is actually a merge algorithm that uses this diff algorithm internally):</p>
<p><a href="http://revctrl.org/PreciseCodevilleMerge" rel="nofollow">http://revctrl.org/PreciseCodevilleMerge</a></p>
<p>Bram mentioned recently that bazaar is now using it:</p>
<p><a href="http://bramcohen.livejournal.com/37690.html" rel="nofollow">http://bramcohen.livejournal.com/37690.html</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ChipX86</title>
		<link>http://blog.chipx86.com/2007/06/21/recent-happenings-in-review-board/#comment-944</link>
		<dc:creator><![CDATA[ChipX86]]></dc:creator>
		<pubDate>Mon, 25 Jun 2007 08:57:18 +0000</pubDate>
		<guid isPermaLink="false">http://www.chipx86.com/blog/?p=227#comment-944</guid>
		<description><![CDATA[Apan: Very valid point. The whitespace issue isn&#039;t a problem unless it&#039;s leading whitespace. Trailing whitespace, as well as lines containing only whitespace, are left alone.

The issue of trashing indentation is a potential problem. There are things we may be able to do, such as mark up indentation-only changes specially while keeping them out of the actual diff chunks. It&#039;s also possible for us to add an option for showing the diff with/without whitespace changes.

So far, the potential for a cleaned diff far outweighs the risks of a change completely screwing up indentation, and there are definitely things we can do about that.]]></description>
		<content:encoded><![CDATA[<p>Apan: Very valid point. The whitespace issue isn&#8217;t a problem unless it&#8217;s leading whitespace. Trailing whitespace, as well as lines containing only whitespace, are left alone.</p>
<p>The issue of trashing indentation is a potential problem. There are things we may be able to do, such as mark up indentation-only changes specially while keeping them out of the actual diff chunks. It&#8217;s also possible for us to add an option for showing the diff with/without whitespace changes.</p>
<p>So far, the potential for a cleaned diff far outweighs the risks of a change completely screwing up indentation, and there are definitely things we can do about that.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Apan</title>
		<link>http://blog.chipx86.com/2007/06/21/recent-happenings-in-review-board/#comment-943</link>
		<dc:creator><![CDATA[Apan]]></dc:creator>
		<pubDate>Mon, 25 Jun 2007 08:19:25 +0000</pubDate>
		<guid isPermaLink="false">http://www.chipx86.com/blog/?p=227#comment-943</guid>
		<description><![CDATA[&quot;This also gives us the ability to add some heuristics and other logic to clean up the diffs. The result is much more readable diffs that no longer show indentation changes or huge misaligned fragments.&quot;

How will one know if a diff trashes the indentation or leaves whitespaces all over the place?]]></description>
		<content:encoded><![CDATA[<p>&#8220;This also gives us the ability to add some heuristics and other logic to clean up the diffs. The result is much more readable diffs that no longer show indentation changes or huge misaligned fragments.&#8221;</p>
<p>How will one know if a diff trashes the indentation or leaves whitespaces all over the place?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Matt Doran</title>
		<link>http://blog.chipx86.com/2007/06/21/recent-happenings-in-review-board/#comment-942</link>
		<dc:creator><![CDATA[Matt Doran]]></dc:creator>
		<pubDate>Sat, 23 Jun 2007 01:18:08 +0000</pubDate>
		<guid isPermaLink="false">http://www.chipx86.com/blog/?p=227#comment-942</guid>
		<description><![CDATA[Maybe you could have made use of the diff code that Google published a week or so ago.  I think they might have beaten you to it!

They implemented an identical diff/patch API in Java, Python and Javascript.  And it has a friendly license.  You can find it here: http://code.google.com/p/google-diff-match-patch/

It could have saved you some work ... oh well.  Maybe yours is better.  ;)]]></description>
		<content:encoded><![CDATA[<p>Maybe you could have made use of the diff code that Google published a week or so ago.  I think they might have beaten you to it!</p>
<p>They implemented an identical diff/patch API in Java, Python and Javascript.  And it has a friendly license.  You can find it here: <a href="http://code.google.com/p/google-diff-match-patch/" rel="nofollow">http://code.google.com/p/google-diff-match-patch/</a></p>
<p>It could have saved you some work &#8230; oh well.  Maybe yours is better.  <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
</channel>
</rss>

