<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.sugarlabs.org/index.php?action=history&amp;feed=atom&amp;title=How_groupthink_could_be_more_general</id>
	<title>How groupthink could be more general - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.sugarlabs.org/index.php?action=history&amp;feed=atom&amp;title=How_groupthink_could_be_more_general"/>
	<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=How_groupthink_could_be_more_general&amp;action=history"/>
	<updated>2026-04-16T11:45:29Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=How_groupthink_could_be_more_general&amp;diff=21228&amp;oldid=prev</id>
		<title>Homunq at 01:55, 11 March 2009</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=How_groupthink_could_be_more_general&amp;diff=21228&amp;oldid=prev"/>
		<updated>2009-03-11T01:55:01Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 21:55, 10 March 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l21&quot;&gt;Line 21:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 21:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Note that this &amp;quot;protocol&amp;quot; makes use of old versions; it is possible that it could include an undo stack and/or versioning storage for free. It is also remarkably non-chatty and so should scale well as long as communication reliability is good.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Note that this &amp;quot;protocol&amp;quot; makes use of old versions; it is possible that it could include an undo stack and/or versioning storage for free. It is also remarkably non-chatty and so should scale well as long as communication reliability is good.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The 3-way &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;di&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;I realize I&#039;m handwaving with the rdiff protocol. Even if you limit it to breaking on some definable chunk boundaries (word, sentence, line... whatever), its advantage comes from sending the sig for various chunks at once; yet the longer those chunk sequences are, the more fragile the algorithm when the two parties do not actually remember a common version.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;other tough algorithm is the &quot;resolve the &lt;/ins&gt;3-way &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;diff&quot; step. But the important thing there is that even if it fails, collaboration can continue - one person just has to redo their edits.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Homunq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=How_groupthink_could_be_more_general&amp;diff=21227&amp;oldid=prev</id>
		<title>Homunq at 01:46, 11 March 2009</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=How_groupthink_could_be_more_general&amp;diff=21227&amp;oldid=prev"/>
		<updated>2009-03-11T01:46:55Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 21:46, 10 March 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l17&quot;&gt;Line 17:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 17:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Now Bob says &amp;quot;I think you have AaBbCcDd; I want you to add &amp;#039;Ff&amp;#039; after the d.&amp;quot; Alice then says &amp;quot;I think you have AaBbCcDdFf; I want you to take the part up to b, then add &amp;#039;Ee&amp;#039;, then the part starting with D&amp;quot;. Now they are synchronized.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Now Bob says &amp;quot;I think you have AaBbCcDd; I want you to add &amp;#039;Ff&amp;#039; after the d.&amp;quot; Alice then says &amp;quot;I think you have AaBbCcDdFf; I want you to take the part up to b, then add &amp;#039;Ee&amp;#039;, then the part starting with D&amp;quot;. Now they are synchronized.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Say that, instead, Bob misses Alice&#039;s reply. As far as Bob knows, their last common version is &quot;AaBbCcDd&quot;, yet Alice thinks it&#039;s &quot;AaBbEeDdFf&quot;. Alice takes the opportunity to forget the &quot;AaBbCcDd&quot; state, (even though her versioning file system happens to still have kept &quot;AaBbCc&quot;, that&#039;s irrelevant). Bob makes another change - from AaBbCcDdFf to AaBbCGcDdFf. Now he says &quot;I think you have AaBbCcDd; I want you to add &#039;G&#039; between C and c, and &#039;Ff&#039; after the d.&quot;. Alice &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(without figuring out &lt;/del&gt;the contents of &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;chunks &lt;/del&gt;C and c) replies &quot;Up to b, then &#039;Ee&#039;, then G, then starting from D&quot;, and if Bob can hear that they are synchronized.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Say that, instead, Bob misses Alice&#039;s reply. As far as Bob knows, their last common version is &quot;AaBbCcDd&quot;, yet Alice thinks it&#039;s &quot;AaBbEeDdFf&quot;. Alice takes the opportunity to forget the &quot;AaBbCcDd&quot; state, (even though her versioning file system happens to still have kept &quot;AaBbCc&quot;, that&#039;s irrelevant). Bob makes another change - from AaBbCcDdFf to AaBbCGcDdFf. Now he says &quot;I think you have AaBbCcDd; I want you to add &#039;G&#039; between C and c, and &#039;Ff&#039; after the d.&quot;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(&lt;/ins&gt;Alice &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;what are &lt;/ins&gt;the contents of C and c&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot; and Bob replies. This is not actually helpful, but I can&#039;t think of an easy algorithm to avoid it.&lt;/ins&gt;) &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Then she &lt;/ins&gt;replies &quot;Up to b, then &#039;Ee&#039;, then G, then starting from D&quot;, and if Bob can hear that they are synchronized.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Note that this protocol makes use of old versions; it is possible that it could include an undo stack and/or versioning storage for free.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Note that this &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;&lt;/ins&gt;protocol&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot; &lt;/ins&gt;makes use of old versions; it is possible that it could include an undo stack and/or versioning storage for free. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;It is also remarkably non-chatty and so should scale well as long as communication reliability is good.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;The 3-way di&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Homunq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=How_groupthink_could_be_more_general&amp;diff=21226&amp;oldid=prev</id>
		<title>Homunq at 01:42, 11 March 2009</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=How_groupthink_could_be_more_general&amp;diff=21226&amp;oldid=prev"/>
		<updated>2009-03-11T01:42:35Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 21:42, 10 March 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l17&quot;&gt;Line 17:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 17:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Now Bob says &amp;quot;I think you have AaBbCcDd; I want you to add &amp;#039;Ff&amp;#039; after the d.&amp;quot; Alice then says &amp;quot;I think you have AaBbCcDdFf; I want you to take the part up to b, then add &amp;#039;Ee&amp;#039;, then the part starting with D&amp;quot;. Now they are synchronized.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Now Bob says &amp;quot;I think you have AaBbCcDd; I want you to add &amp;#039;Ff&amp;#039; after the d.&amp;quot; Alice then says &amp;quot;I think you have AaBbCcDdFf; I want you to take the part up to b, then add &amp;#039;Ee&amp;#039;, then the part starting with D&amp;quot;. Now they are synchronized.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Say that, instead, Bob misses Alice&#039;s reply. As far as Bob knows, their last common version is &quot;AaBbCcDd&quot;, yet Alice thinks it&#039;s &quot;AaBbEeDdFf&quot;. Alice takes the opportunity to forget the &quot;AaBbCcDd&quot; state, though her versioning file system happens to still have kept &quot;AaBbCc&quot;. Bob makes another change - from AaBbCcDdFf to AaBbCGcDdFf. Now he says &quot;I think you have AaBbCcDd; I want you to add &#039;G&#039; between C and c, and &#039;Ff&#039; after the d.&quot;. Alice (without figuring out the contents of chunks C and c) replies &quot;Up to b, then &#039;Ee&#039;, then G, then starting from D&quot;, and if Bob can hear that they are synchronized.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Say that, instead, Bob misses Alice&#039;s reply. As far as Bob knows, their last common version is &quot;AaBbCcDd&quot;, yet Alice thinks it&#039;s &quot;AaBbEeDdFf&quot;. Alice takes the opportunity to forget the &quot;AaBbCcDd&quot; state, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(even &lt;/ins&gt;though her versioning file system happens to still have kept &quot;AaBbCc&quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, that&#039;s irrelevant)&lt;/ins&gt;. Bob makes another change - from AaBbCcDdFf to AaBbCGcDdFf. Now he says &quot;I think you have AaBbCcDd; I want you to add &#039;G&#039; between C and c, and &#039;Ff&#039; after the d.&quot;. Alice (without figuring out the contents of chunks C and c) replies &quot;Up to b, then &#039;Ee&#039;, then G, then starting from D&quot;, and if Bob can hear that they are synchronized&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Note that this protocol makes use of old versions; it is possible that it could include an undo stack and/or versioning storage for free&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Homunq</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=How_groupthink_could_be_more_general&amp;diff=21225&amp;oldid=prev</id>
		<title>Homunq: New page: The idea is to make a more-general data structure which can synchronize itself behind the scenes. The steps are basically * Serialize your data in a way that doesn&#039;t reshuffle by itself to...</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=How_groupthink_could_be_more_general&amp;diff=21225&amp;oldid=prev"/>
		<updated>2009-03-11T01:38:23Z</updated>

		<summary type="html">&lt;p&gt;New page: The idea is to make a more-general data structure which can synchronize itself behind the scenes. The steps are basically * Serialize your data in a way that doesn&amp;#039;t reshuffle by itself to...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;The idea is to make a more-general data structure which can synchronize itself behind the scenes. The steps are basically&lt;br /&gt;
* Serialize your data in a way that doesn&amp;#039;t reshuffle by itself too often&lt;br /&gt;
* Elect a leader&lt;br /&gt;
* Keep the last version you think you synced with each other participant. This is imperfect because you can never be sure the other side got the message, but good enough.&lt;br /&gt;
* Send changes to the leader, using an rsync-like protocol. &lt;br /&gt;
** Unlike rsync, this is initiated by the sender&lt;br /&gt;
*** but the sender thinks it knows a version which is stored both by it and the receiver&lt;br /&gt;
*** so it sends the signatures of the chunks of that &amp;quot;common&amp;quot; version, as if it were the receiver; and then any new data and assembly instructions, as with rsync&lt;br /&gt;
*** If all goes smoothly, the leader/receiver can use that; otherwise, it asks for any missing chunks.&lt;br /&gt;
* If the leader/recipient has not changed the version, it just says &amp;quot;OK&amp;quot; and uses the new version.&lt;br /&gt;
** If it has, it makes an attempt to &amp;quot;resolve&amp;quot; the three-way diff, and sends the changes back, using the version it got as the &amp;quot;common&amp;quot; version and the algorithm above.&lt;br /&gt;
*** When it can&amp;#039;t resolve the changes, it just chooses the other side, and puts its own changes into its &amp;quot;redo&amp;quot; stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Take a relatively simple case. Alice (leader) and Bob have a common structure, synchronized: chunks &amp;quot;AaBbCcDd&amp;quot;. They lose communication. Alice edits it to &amp;quot;AaBbEeDd&amp;quot;, and Bob edits it to &amp;quot;AaBbCcDdFf&amp;quot;. Then they get communication back.&lt;br /&gt;
&lt;br /&gt;
Now Bob says &amp;quot;I think you have AaBbCcDd; I want you to add &amp;#039;Ff&amp;#039; after the d.&amp;quot; Alice then says &amp;quot;I think you have AaBbCcDdFf; I want you to take the part up to b, then add &amp;#039;Ee&amp;#039;, then the part starting with D&amp;quot;. Now they are synchronized.&lt;br /&gt;
&lt;br /&gt;
Say that, instead, Bob misses Alice&amp;#039;s reply. As far as Bob knows, their last common version is &amp;quot;AaBbCcDd&amp;quot;, yet Alice thinks it&amp;#039;s &amp;quot;AaBbEeDdFf&amp;quot;. Alice takes the opportunity to forget the &amp;quot;AaBbCcDd&amp;quot; state, though her versioning file system happens to still have kept &amp;quot;AaBbCc&amp;quot;. Bob makes another change - from AaBbCcDdFf to AaBbCGcDdFf. Now he says &amp;quot;I think you have AaBbCcDd; I want you to add &amp;#039;G&amp;#039; between C and c, and &amp;#039;Ff&amp;#039; after the d.&amp;quot;. Alice (without figuring out the contents of chunks C and c) replies &amp;quot;Up to b, then &amp;#039;Ee&amp;#039;, then G, then starting from D&amp;quot;, and if Bob can hear that they are synchronized.&lt;/div&gt;</summary>
		<author><name>Homunq</name></author>
	</entry>
</feed>