<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Steven Lees : Simple Sharing Extensions</title><link>http://blogs.msdn.com/stevenlees/archive/tags/Simple+Sharing+Extensions/default.aspx</link><description>Tags: Simple Sharing Extensions</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>About a &amp;quot;by&amp;quot;</title><link>http://blogs.msdn.com/stevenlees/archive/2007/12/02/about-a-by.aspx</link><pubDate>Mon, 03 Dec 2007 03:53:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6644117</guid><dc:creator>StevenLees</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/stevenlees/comments/6644117.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stevenlees/commentrss.aspx?PostID=6644117</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;I was reviewing the spec comments that we received over the past few months on the SSE spec, and because there was a fair amount of feedback about the “by” attribute on sx:history, I’d like to explain where the spec ended up.&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;o:p&gt;Just to refresh your memory:&amp;nbsp;every time an item or entry in a feed is changed, the&amp;nbsp;endpoint making the change&amp;nbsp;needs to add an sx:history element to call out the changes. The element has&amp;nbsp;three attributes: a&amp;nbsp;&lt;EM&gt;&lt;STRONG&gt;sequence&lt;/STRONG&gt;&lt;/EM&gt; attribute (the change number), a &lt;STRONG&gt;&lt;EM&gt;when&lt;/EM&gt;&lt;/STRONG&gt; attribute (date/time for the change), and a &lt;STRONG&gt;&lt;EM&gt;by&lt;/EM&gt;&lt;/STRONG&gt; attribute (the endpoint that made the change).&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;o:p&gt;For purposes of sync, the by attribute has to uniquely identify the participating “endpoint”. You can think of by as the “endpoint ID.” The real world entity that the endpoint stands for could be one of several different things depending on your implementation: it could represent a user; or a user on a device; or a process for a user on a device; or something even more specific. One important consideration in picking which one of those things is an endpoint is that the by attribute determines the granularity of conflict detection. Any time an update is made by the same endpoint (the same “by”), that update subsumes all previous updates from that endpoint.&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;o:p&gt;For a practical example, consider the case where I’m syncing data from my laptop to my phone. I change entry A on my laptop; then later (but before I’ve had a chance to sync) I change entry A on my phone. When I sync, one of two things happens. If the by attribute on both my laptop and my phone is identical, then one of those changes is discarded, because as far as the algorithm is concerned, they’re from the exact same endpoint. If the by attribute is different on the two devices, then both changes are preserved. At some point I’ll get to view both changes and choose which one I want to keep; no data is lost.&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;o:p&gt;There were some suggestions that the by attribute should be required or recommended to be a URI. The reason that might be interesting is to somehow identify the (human) author of the change, or at least provide a pointer to the author. That’s definitely a useful thing to do. In the end, though, we felt that such a recommendation would make it harder for implementers to craft useful and unique endpoint IDs for their application.&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;o:p&gt;Our recommendation&amp;nbsp;is to choose the by attribute based on your granularity of conflict detection. Use a different element such as atom:author in order to indicate the source of a change.&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;o:p&gt;Thanks for the feedback (past and future), it’s much appreciated!&lt;BR&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6644117" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/stevenlees/archive/tags/Simple+Sharing+Extensions/default.aspx">Simple Sharing Extensions</category><category domain="http://blogs.msdn.com/stevenlees/archive/tags/FeedSync/default.aspx">FeedSync</category></item><item><title>Simple Sharing Extensions spec updates</title><link>http://blogs.msdn.com/stevenlees/archive/2007/07/27/simple-sharing-extensions-spec-updates.aspx</link><pubDate>Sat, 28 Jul 2007 01:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4089135</guid><dc:creator>StevenLees</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/stevenlees/comments/4089135.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stevenlees/commentrss.aspx?PostID=4089135</wfw:commentRss><description>&lt;P&gt;I've received some great feedback on the &lt;A class="" title="Simple Sharing Extensions spec" href="http://msdn2.microsoft.com/en-us/xml/bb510102.aspx" mce_href="http://msdn2.microsoft.com/en-us/xml/bb510102.aspx"&gt;Simple Sharing Extensions&lt;/A&gt; spec that I posted on MSDN last month. I'm working on updating the spec based on all of the comments, so I'm posting the proposed spec changes to the FEED-TECH list. I'll be rolling them out in a handful of emails; here is a &lt;A class="" title="SSE spec changes round 1" href="http://discussms.hosting.lsoft.com/scripts/wa-MSD.exe?A2=ind0707D&amp;amp;L=FEED-TECH&amp;amp;T=0&amp;amp;F=&amp;amp;S=&amp;amp;P=97" mce_href="http://discussms.hosting.lsoft.com/scripts/wa-MSD.exe?A2=ind0707D&amp;amp;L=FEED-TECH&amp;amp;T=0&amp;amp;F=&amp;amp;S=&amp;amp;P=97"&gt;link&lt;/A&gt; to the first one, and here is a &lt;A class="" title="FEED-TECH full archive" href="http://discussms.hosting.lsoft.com/scripts/wa-MSD.exe?A0=FEED-TECH" mce_href="http://discussms.hosting.lsoft.com/scripts/wa-MSD.exe?A0=FEED-TECH"&gt;link&lt;/A&gt; to the full list archive.&lt;/P&gt;
&lt;P&gt;Comments and feedback are definitely appreciated! The best way to respond is to join the list and post your comments there.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4089135" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/stevenlees/archive/tags/Simple+Sharing+Extensions/default.aspx">Simple Sharing Extensions</category></item><item><title>SSE implementation on CodePlex</title><link>http://blogs.msdn.com/stevenlees/archive/2007/07/03/sse-implementation-on-codeplex.aspx</link><pubDate>Wed, 04 Jul 2007 03:37:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3678456</guid><dc:creator>StevenLees</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/stevenlees/comments/3678456.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stevenlees/commentrss.aspx?PostID=3678456</wfw:commentRss><description>&lt;p&gt;&lt;a title="Daniel Cazzulino's blog" href="http://www.clariusconsulting.net/blogs/kzu/archive/2007/06/26/28072.aspx"&gt;Daniel Cazzulino&lt;/a&gt; has posted an SSE implementation on CodePlex: the &lt;a title="SSE on CodePlex" href="http://www.codeplex.com/sse"&gt;Simple Sharing Extensions for .NET&lt;/a&gt; project. Cool! I'm looking forward to checking it out.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3678456" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/stevenlees/archive/tags/Simple+Sharing+Extensions/default.aspx">Simple Sharing Extensions</category></item><item><title>When to sync?</title><link>http://blogs.msdn.com/stevenlees/archive/2007/06/12/when-to-sync.aspx</link><pubDate>Wed, 13 Jun 2007 02:25:06 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3258501</guid><dc:creator>StevenLees</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/stevenlees/comments/3258501.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stevenlees/commentrss.aspx?PostID=3258501</wfw:commentRss><description>&lt;p&gt;Now that we've posted the updated &lt;a title="Simple Sharing Extensions spec" href="http://msdn2.microsoft.com/en-us/xml/bb510102.aspx"&gt;SSE spec&lt;/a&gt; to &lt;a href="http://msdn2.microsoft.com/en-us/xml/bb190611.aspx"&gt;MSDN&lt;/a&gt;, one of the next things on my list is to discuss how SSE works. Before jumping in to examples, though, I wanted to address a more fundamental question: when does it make sense to use SSE?&lt;/p&gt; &lt;p&gt;In my last post, I paraphrased the overview section of the spec which describes the scope of SSE. Here's what the &lt;a title="Simple Sharing Extensions spec" href="http://msdn2.microsoft.com/en-us/xml/bb510102.aspx"&gt;spec&lt;/a&gt; says:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;The scope of Simple Sharing Extensions (SSE) is to define the minimum extensions necessary to enable loosely-cooperating applications to use XML-based container formats such as Atom and RSS as the basis for item sharing – that is, the bi-directional, asynchronous synchronization of new and changed items amongst two or more cross-subscribed feeds.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;When you are thinking about practical uses for SSE, one of the most important parts of the description above is the word &lt;em&gt;bi-directional&lt;/em&gt;. SSE is going to be most interesting scenarios where you have multiple writers to the same underlying data store.&lt;/p&gt; &lt;p&gt;Let's work with a real world example. &lt;a title="The New York Times" href="http://nytimes.com/"&gt;The New York Times&lt;/a&gt; has a desktop reader for their content called &lt;a title="Times Reader" href="http://select.nytimes.com/gst/timesreader.html"&gt;Times Reader&lt;/a&gt;. The reader caches the last seven days of news content on your computer so that you can access it even when you're offline. Should they change their application so that they are using SSE to sync that news content between your device and their server?&lt;/p&gt; &lt;p&gt;Probably not. The NYT is the authoritative publisher for their news content; even if you wanted to update it, I'm guessing they wouldn't want you to. You might think, though, that&amp;nbsp;it would still be useful to produce an SSE-enabled feed to help the Times Reader cache the news content on your local machine, even if it's a read-only cache. It certainly wouldn't hurt anything to produce an SSE feed in this case, but all you really need to reliably cache the content is a unique ID for each content item, and SSE requires a bit more metadata that the reader application probably wouldn't end up using.&lt;/p&gt; &lt;p&gt;There is an interesting use case for SSE in the Reader application, though. The Times Reader includes the &lt;a href="http://firstlook.nytimes.com/?p=37"&gt;crossword puzzle&lt;/a&gt;. The "data store" in this case is the one where your crossword puzzle solution is stored. Wouldn't it be sweet if you could start working on the puzzle in the morning from home, then pick it up again at work and add a few more answers, then work on it during the afternoon commute from your smartphone (I'll assume you're not driving...), and have your answers automagically sync to all of those devices? You can if they're all syncing the data through SSE. You could do this through a browser-based service, too, but that typically requires you to be connected to the server whenever you want to work on the crossword puzzle.&lt;/p&gt; &lt;p&gt;Unlike the news content publishing case, there are multiple writers in the crossword puzzle scenario...but so far they all happen to be your own devices (home computer, work computer, and phone). Where SSE is most useful is when there are multiple &lt;em&gt;people&lt;/em&gt; as well as multiple devices writing to the same data store. Imagine that your niece on the East coast happens to really like crosswords, and wants to work on the same puzzle with you. SSE tells the reader application what to do in order to merge the two sets of puzzle answers (aka data items) together.&lt;/p&gt; &lt;p&gt;That's just one example; SSE is certainly useful for other kinds of information beyond crossword puzzle answers. In Ray Ozzie's &lt;a href="http://rayozzie.spaces.live.com/blog/cns!FB3017FBB9B2E142!175.entry"&gt;original blog post introducing SSE&lt;/a&gt;, he envisioned using SSE for calendar and contact information. SSE is also interesting in other configurations, such as server-to-server, as well as the peer-to-peer configuration described in this post.&lt;/p&gt; &lt;p&gt;More on those later...&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3258501" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/stevenlees/archive/tags/Simple+Sharing+Extensions/default.aspx">Simple Sharing Extensions</category></item><item><title>Spec update for Simple Sharing Extensions</title><link>http://blogs.msdn.com/stevenlees/archive/2007/06/11/spec-update-for-simple-sharing-extensions.aspx</link><pubDate>Tue, 12 Jun 2007 02:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3237755</guid><dc:creator>StevenLees</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/stevenlees/comments/3237755.aspx</comments><wfw:commentRss>http://blogs.msdn.com/stevenlees/commentrss.aspx?PostID=3237755</wfw:commentRss><description>&lt;P&gt;It's been a while in the works, but I'm happy to announce that we've update the specification for &lt;A class="" title="Simple Sharing Extensions for Atom and RSS" href="http://msdn2.microsoft.com/en-us/xml/bb510102.aspx" mce_href="http://msdn2.microsoft.com/en-us/xml/bb510102.aspx"&gt;Simple Sharing Extensions&lt;/A&gt;. There are some pretty significant changes to this edition, including:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;We added an SSE binding to the Atom feed format.&lt;/LI&gt;
&lt;LI&gt;We made several changes to the sync algorithm to improve accuracy and efficiency&lt;/LI&gt;
&lt;LI&gt;We reorganized the spec to improve readability&lt;/LI&gt;
&lt;LI&gt;We removed the OPML binding from the v1 edition of the spec.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;I've also updated the &lt;A class="" title="Simple Sharing Extensions FAQ" href="http://msdn2.microsoft.com/en-us/xml/bb190616.aspx" mce_href="http://msdn2.microsoft.com/en-us/xml/bb190616.aspx"&gt;FAQ&lt;/A&gt; doc to go with the current spec. There are HTML/Javascript based &lt;A class="" title="SSE Tutorials" href="http://www.microsoft.com/downloads/details.aspx?familyid=53bb2bf8-71cc-433c-baac-367a5600a217&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=53bb2bf8-71cc-433c-baac-367a5600a217&amp;amp;displaylang=en"&gt;tutorials&lt;/A&gt; for both Atom and RSS as well.&lt;/P&gt;
&lt;P&gt;For those who are new to the spec, the scope of Simple Sharing Extensions (SSE) is to define the minimum extensions necessary for loosely-coupled applications to use XML-based container formats like Atom and RSS feeds as a way to synchronize a set of items across a distributed mesh of endpoints. In slightly more plain English, that means that you can have a set of applications and services that are all sharing the same underlying data in a loosely coupled way.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3237755" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/stevenlees/archive/tags/Simple+Sharing+Extensions/default.aspx">Simple Sharing Extensions</category></item></channel></rss>