<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Feb 6, 2014 at 2:32 PM, Corinne Krych <span dir="ltr">&lt;<a href="mailto:corinnekrych@gmail.com" target="_blank">corinnekrych@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello Guys,<br>
<br>
So in despair of finding an iOS version of a &lsquo;diff-patch&rsquo; library for object comparison, I&rsquo;ve started implementing one [1]. It is pretty much inspired by jsonndiffpatch JS lib and use the same delta legend [2]. I haven&rsquo;t finished it yet, it is missing LCS implementation[3] (the most complex part tbh) and it will need several iterations for completion.<br>

<br>
I will use it in our sync-demo app [4] replacing the actual use of google-diff-patch-merge [5] as like summers stated it, comparison of stringified objects is not sufficient.<br>
<br>
The idea is to stay pluggable in the way we handle conflict. If the app is a chat or text document we&rsquo;ll use [5] with text differences.<br>
<br></blockquote><div><br></div><div>awesome!</div><div>&nbsp;</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
++<br>
Corinne<br>
[1] <a href="https://github.com/corinnekrych/aerogear-diff-patch-ios" target="_blank">https://github.com/corinnekrych/aerogear-diff-patch-ios</a><br>
[2] <a href="https://github.com/benjamine/JsonDiffPatch#delta-legend" target="_blank">https://github.com/benjamine/JsonDiffPatch#delta-legend</a><br>
[3] <a href="http://en.wikipedia.org/wiki/Longest_common_subsequence_problem" target="_blank">http://en.wikipedia.org/wiki/Longest_common_subsequence_problem</a><br>
[4] <a href="https://github.com/corinnekrych/aerogear-ios-cookbook/blob/sync.demo.recipe/Hobbies/Hobbies/AGBuddiesViewController.m#L157" target="_blank">https://github.com/corinnekrych/aerogear-ios-cookbook/blob/sync.demo.recipe/Hobbies/Hobbies/AGBuddiesViewController.m#L157</a><br>

[5] <a href="https://github.com/JanX2/google-diff-match-patch-Objective-C" target="_blank">https://github.com/JanX2/google-diff-match-patch-Objective-C</a> (cool stuff i&rsquo;m part of contributors! ;) there is no simple pleasure.<br>

<div class="HOEnZb"><div class="h5"><br>
On 05 Feb 2014, at 16:37, Corinne Krych &lt;<a href="mailto:corinnekrych@gmail.com">corinnekrych@gmail.com</a>&gt; wrote:<br>
<br>
&gt;<br>
&gt; On 05 Feb 2014, at 16:04, Summers Pittman &lt;<a href="mailto:supittma@redhat.com">supittma@redhat.com</a>&gt; wrote:<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Wed 05 Feb 2014 09:41:05 AM EST, Corinne Krych wrote:<br>
&gt;&gt;&gt; Rather than a text diff i&rsquo;d like something that compares data structure (JSON like) diff.<br>
&gt;&gt;&gt; I can use google diff by serialiazing to string but it&rsquo;s a plain text diff rather than object diff. Guess you can patch the stringyfied object an then convert it back to json structure but less elegant and flexible than jsondiffpatch on object.<br>

&gt;&gt;<br>
&gt;&gt; If you go this route you need to make sure that things like order of variables, order of items in an array/collection, etc always come out the same way.<br>
&gt;&gt;<br>
&gt;&gt; Also you need to make sure your stringified / merged JSON is still valid JSON.<br>
&gt;&gt;<br>
&gt;<br>
&gt; Exactly. I dont feel that&rsquo;s the right route<br>
&gt;<br>
&gt;<br>
&gt;&gt; You may be off using hashing of your objects and doing set comparisons. Unfortunately I do not know of a library which makes that &quot;free&quot;. &nbsp;I used that on the DevNexus demo.<br>
&gt;<br>
&gt; Jsondiffpatch js does handle it nicely.<br>
&gt; Might be some similar libs in Java?<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; ++<br>
&gt;&gt;&gt; Corinne<br>
&gt;&gt;&gt; On 05 Feb 2014, at 11:23, Christos Vasilakis &lt;<a href="mailto:cvasilak@gmail.com">cvasilak@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Hi Corinne,<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; i did came across the following diff-match lib[1] might be interested to digg more, as I have seen they all derive from google-diff<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; [1] <a href="https://github.com/inquisitiveSoft/DiffMatchPatch-ObjC" target="_blank">https://github.com/inquisitiveSoft/DiffMatchPatch-ObjC</a> &nbsp; [+podspec]<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; On Wed, Feb 5, 2014 at 10:49 AM, Corinne Krych &lt;<a href="mailto:corinnekrych@gmail.com">corinnekrych@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt; Hello Ladies and Gentlemen,<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I was looking for some diff/patch libraries to get differences between 2 objects (either json format of map/array format) ideally in iOS (withpodspec) or in C/C++. To plug into custom conflict management in you sync demo app. Like Luke did using jsondiffpatch in JS [1].<br>

&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; For comparing text there is google-diff-match-patch [2] lib that is implemented in several langagues and format (including iOS).<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; But i couldn&rsquo;t find a jsondiff liek lib for iOS&hellip; I&rsquo;m asking my favourite oracle (i.e.: the mailing list), see if i get more lucky.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; ++<br>
&gt;&gt;&gt;&gt; Corinne<br>
&gt;&gt;&gt;&gt; [1] <a href="https://github.com/benjamine/JsonDiffPatch" target="_blank">https://github.com/benjamine/JsonDiffPatch</a><br>
&gt;&gt;&gt;&gt; [2] <a href="https://github.com/JanX2/google-diff-match-patch" target="_blank">https://github.com/JanX2/google-diff-match-patch</a><br>
&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt; aerogear-dev mailing list<br>
&gt;&gt;&gt;&gt; <a href="mailto:aerogear-dev@lists.jboss.org">aerogear-dev@lists.jboss.org</a><br>
&gt;&gt;&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/aerogear-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/aerogear-dev</a><br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt; aerogear-dev mailing list<br>
&gt;&gt;&gt;&gt; <a href="mailto:aerogear-dev@lists.jboss.org">aerogear-dev@lists.jboss.org</a><br>
&gt;&gt;&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/aerogear-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/aerogear-dev</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; aerogear-dev mailing list<br>
&gt;&gt;&gt; <a href="mailto:aerogear-dev@lists.jboss.org">aerogear-dev@lists.jboss.org</a><br>
&gt;&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/aerogear-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/aerogear-dev</a><br>
&gt;<br>
<br>
<br>
_______________________________________________<br>
aerogear-dev mailing list<br>
<a href="mailto:aerogear-dev@lists.jboss.org">aerogear-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/aerogear-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/aerogear-dev</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>Matthias Wessendorf <br><br>blog: <a href="http://matthiaswessendorf.wordpress.com/" target="_blank">http://matthiaswessendorf.wordpress.com/</a><br>
sessions: <a href="http://www.slideshare.net/mwessendorf" target="_blank">http://www.slideshare.net/mwessendorf</a><br>twitter: <a href="http://twitter.com/mwessendorf" target="_blank">http://twitter.com/mwessendorf</a>
</div></div>