{"id":11770,"date":"2015-07-21T13:51:10","date_gmt":"2015-07-21T17:51:10","guid":{"rendered":"http:\/\/mjtsai.com\/blog\/?p=11770"},"modified":"2015-07-21T13:51:10","modified_gmt":"2015-07-21T17:51:10","slug":"differential-synchronization","status":"publish","type":"post","link":"https:\/\/mjtsai.com\/blog\/2015\/07\/21\/differential-synchronization\/","title":{"rendered":"Differential Synchronization"},"content":{"rendered":"<p><a href=\"https:\/\/neil.fraser.name\/writing\/sync\/\">Neil Fraser<\/a> (via <a href=\"http:\/\/devchat.tv\/iphreaks\/108-ips-synchronizing-documents-offline-handling-with-mike-ash\">Mike Ash<\/a>):<\/p>\n<blockquote cite=\"https:\/\/neil.fraser.name\/writing\/sync\/\"><p>Keeping two or more copies of the same document synchronized with each other in real-time is a complex challenge. This paper describes the differential synchronization algorithm. Differential synchronization offers scalability, fault-tolerance, and responsive collaborative editing across an unreliable network.<\/p>\n<p>[&#8230;]<\/p>\n<p>Differential synchronization is a symmetrical algorithm employing an unending cycle of background difference (diff) and patch operations. There is no requirement that \"the chickens stop moving so we can count them\" which plagues server-side three-way merges.<\/p>\n<p>[&#8230;]<\/p>\n<p>Despite the inherent complexity, this synchronization system works extremely well. It is robust, self-healing and (with the proper diff and patch algorithms) impressively accommodating of users who are working on the same text.<\/p><\/blockquote>","protected":false},"excerpt":{"rendered":"<p>Neil Fraser (via Mike Ash): Keeping two or more copies of the same document synchronized with each other in real-time is a complex challenge. This paper describes the differential synchronization algorithm. Differential synchronization offers scalability, fault-tolerance, and responsive collaborative editing across an unreliable network. [&#8230;] Differential synchronization is a symmetrical algorithm employing an unending cycle [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"apple_news_api_created_at":"","apple_news_api_id":"","apple_news_api_modified_at":"","apple_news_api_revision":"","apple_news_api_share_url":"","apple_news_coverimage":0,"apple_news_coverimage_caption":"","apple_news_is_hidden":false,"apple_news_is_paid":false,"apple_news_is_preview":false,"apple_news_is_sponsored":false,"apple_news_maturity_rating":"","apple_news_metadata":"\"\"","apple_news_pullquote":"","apple_news_pullquote_position":"","apple_news_slug":"","apple_news_sections":"\"\"","apple_news_suppress_video_url":false,"apple_news_use_image_component":false,"footnotes":""},"categories":[2],"tags":[289,71,269],"class_list":["post-11770","post","type-post","status-publish","format-standard","hentry","category-technology","tag-algorithm","tag-programming","tag-syncing"],"apple_news_notices":[],"_links":{"self":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/11770","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/comments?post=11770"}],"version-history":[{"count":1,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/11770\/revisions"}],"predecessor-version":[{"id":11771,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/11770\/revisions\/11771"}],"wp:attachment":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/media?parent=11770"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/categories?post=11770"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/tags?post=11770"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}