mdk wrote:emajcher wrote:A Diff won't quite work because he copied my module and placed it into his patch so the position of the JSON code is different.
a decent diff tool should show you matching code sections regardless of location.
http://winmerge.org
im sure there are many other tools for analysing source code similarity.

Why bother? The best thing that could happen for him is he finds some inadequate tool that shows no similarities, or it can be argued that I went out of my way to find a tool that did find some, making it subjective. If we forget the fact that the patch and sub-patches in the module are visually identical (except for minor tweaks where he removed my initials) including number of objects, their positions and lining up the patch chords. The exact structure of the patches and sub-patches match.
If we take what we know about max, the true randomness and different styles inherent in building a patch, there are sub-patchers like persist_track, persist_device and persist_parameter that have the same name (amazing coincidence) and unique object id (only visible in the raw json code) which is generated by max, hitting the lottery seems more likely. Furthermore, those sub-patches, like persist_track do not even have visual differences, they are duplicates of one another in every way, no effort was made to change them at all because they didn't contain my initials because they were embedded in the patch, not external modules. My code was uploaded to
http://www.maxforlive.com in July of 2010, his code appeared last week. I am confident you will not find my code anywhere else, it was way more of an interesting problem for me at the time that I felt was a challenge to solve.
At this point I suspect he will never admit to lifting the code, I have tried to resolve this offline with him and he continues to be obstinate, never directly addressing the similarities I have outlined, never giving me credit. He continues to accuse me of being jealous (which frankly makes no sense). I think he will continue to release new versions at a very fast rate until he can remove the visual similarities; changing the actual code will probably be a little troublesome, while it is not rocket science by any means (and I never claimed it to be), the code to get it right was very fiddly and took about 10x's more work then the LFO part because of all of the idiosyncrasies when interacting with the max api when a live set is being loaded (which I think we can all relate too). My initial intention was not really to develop the LFO but develop the persistence object so I could re-use it in other patches I make.