<?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>The Synchronizer : p2p</title><link>http://blogs.msdn.com/synchronizer/archive/tags/p2p/default.aspx</link><description>Tags: p2p</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Metadata is the Hart and Sole of Peer Sync</title><link>http://blogs.msdn.com/synchronizer/archive/2008/05/29/metadata-is-the-hart-and-sole-of-peer-sync.aspx</link><pubDate>Fri, 30 May 2008 01:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8560445</guid><dc:creator>Rafik</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/synchronizer/comments/8560445.aspx</comments><wfw:commentRss>http://blogs.msdn.com/synchronizer/commentrss.aspx?PostID=8560445</wfw:commentRss><description>&lt;p&gt;Occasionally, I receive questions about using SQL Change Tracking with PeerSyncProvider. People who examine SQL Change Tracking in preview version of SQL Server 2008 have&amp;nbsp;become fans rather quickly and see the value of using it. Using change tracking with ServerSyncProvider scenarios is a piece of cake and will get easier with the VS2008 SP1. Now how can you do the same with PeerSyncProvider?&lt;br&gt;The short answer is that it is not so easy. Not as easy as with ServerSyncProvider. The reasons might not be so obvious and I see many attempts of writing the commands&amp;nbsp;for&amp;nbsp;PeerSyncProvider adapters to work against SQL Change Tracking. While it might work for very limited scenarios, it is largely incorrect. &lt;/p&gt;
&lt;p&gt;Again, the question is why?&lt;/p&gt;
&lt;p&gt;Well, let’s think a little bit about the following SyncAdapter commands for the PeerSyncProvider:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;InsertMetadataCommand&lt;/li&gt;
&lt;li&gt;UpdateMetadataCommand&lt;/li&gt;
&lt;li&gt;DeleteMetadataCommand&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Notice that these commands are intended to make changes to the tracking metadata. That’s rather interesting and clearly different from the commands you supply to for ServerSyncProvider. Now it is becoming clear that we have a problem since SQL Change Tracking metadata (i.e. CHANGETABLE) are all read-only! &lt;/p&gt;
&lt;p&gt;&lt;b&gt;General Purpose Tracking Infrastructure&lt;br&gt;&lt;br&gt;&lt;/b&gt;Remember that SQL Change Tracking is a general purpose tracking mechanism. You enable change tracking for a table with the sole purpose to be able to ask “what have changed since given version?” If applications are allowed to make changes to the metadata then this question is not reliable and thus useless. Making change tracking metadata read only makes all the sense in the world for its general purpose nature.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Direct Metadata Manipulation&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;An obvious question here is: Why make direct changes to the metadata? Changes to the base table will be reflected in the CHANGETABLE, wouldn’t that achieve the same effect?&lt;br&gt;Well, for peer to peer data synchronization… you need more control than that. Let’s take the following two cases:&lt;br&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Synchronizing Deletes&lt;/b&gt;&lt;br&gt;&lt;br&gt;Let’s consider the following example, three nodes A, B, C. The nodes are connected as shown in the diagram. Follow the following scenario:&lt;br&gt;&lt;br&gt;&lt;img src="http://blogs.msdn.com/synchronizer/attachment/8560445.ashx" style="width: 207px; height: 189px;" mce_src="http://blogs.msdn.com/synchronizer/attachment/8560445.ashx" align="middle" height="189" width="207"&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;ol&gt;
&lt;ol&gt;
&lt;li&gt;Make a change R on node A&lt;/li&gt;
&lt;li&gt;Let A sync with B, B now has R&lt;/li&gt;
&lt;li&gt;B deletes R&lt;/li&gt;
&lt;li&gt;Let B sync with C. B will send the deleted row metadata to C&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;As B received the metadata for the deleted row, it needs to persist is. R never make it to B thus a normal delete command won’t generate the metadata we desire as it simply won’t do anything. &lt;br&gt;&lt;br&gt;As a side note, the delete metadata must be persisted on B. Since B could be connected to another node (A, for example) which have R and thus needs to pass on the delete during subsequent sync. In P2P environment, one cannot make assumption about the other nodes and must maintain metadata for every deletes.&lt;br&gt;&lt;br&gt;At a first glance one can come up with a clever work around for this scenario which is insert R then delete it right away. SQL Change tracking should record that, right? That’s right but the workaround cannot survive two or more tables with PK-FK relations which is the reality of most databases. Thus this workaround is short lived.&lt;/p&gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Resolving Conflicts&lt;/b&gt;&lt;br&gt;&lt;br&gt;When conflicts are detected and a winner is chosen, one needs to update the metadata such that this winner will propagate across the topology of nodes. That said, the version of the row needs to be pumped. Now consider the case where the local row was selected as the winner. With SQL Change Tracking, there is no way to make changes to the version as the metadata is not editable.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;My point in this post is to answer a common question and illustrate the underlying technical reasons behind the limitation. That being said, you can still leverage SQL Change Tracking for Peer Scenarios albeit you need to use a side table to store the changes to the metadata. I am sure some of the readers will find this as a worthwhile challenge to tackle. Happy Sync’ing!&lt;br&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Update: Just to let you know, I left Microsoft to start a new company, &lt;b&gt;&lt;a href="http://www.raveable.com" class="" mce_href="http://www.raveable.com"&gt;Raveable Hotel Reviews&lt;/a&gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;. See examples: &lt;b&gt;&lt;a href="http://www.raveable.com/sc/myrtle-beach/top-10-hotels-in-myrtle-beach/l6180c3" mce_href="http://www.raveable.com/sc/myrtle-beach/top-10-hotels-in-myrtle-beach/l6180c3"&gt;Top 10 Hotels in Myrtle Beach&lt;/a&gt;, &lt;a href="http://www.raveable.com/ny/new-york-city/best-hotels-in-new-york-city/l5039c1" title="best hotels in NYC" mce_href="http://www.raveable.com/ny/new-york-city/best-hotels-in-new-york-city/l5039c1"&gt;Best Hotels in New York City&lt;/a&gt;, &lt;a href="http://www.raveable.com/wa/seattle/romantic-hotels-in-seattle/l7344c2" mce_href="http://www.raveable.com/wa/seattle/romantic-hotels-in-seattle/l7344c2"&gt;Romantic Hotels in Seattle&lt;/a&gt;&lt;/b&gt;, &lt;b&gt;&lt;a href="http://www.raveable.com/hotels-with-kitchen" title="hotels with kitchen or kitchenette" mce_href="http://www.raveable.com/hotels-with-kitchen"&gt;Hotels with a kitchen or kitchenette&lt;/a&gt;&lt;/b&gt; and &lt;b&gt;&lt;a href="http://www.raveable.com/ca/san-francisco/top-10-hotels-in-san-francisco/l717c3" title="top 10 hotels in san francisco" mce_href="http://www.raveable.com/ca/san-francisco/top-10-hotels-in-san-francisco/l717c3"&gt;Top 10 Hotels in San Francisco&lt;/a&gt;&lt;/b&gt;. Your feedback is welcome on &lt;a href="http://twitter.com/raveable" mce_href="http://twitter.com/raveable"&gt;twitter.com/raveable&lt;/a&gt;, &lt;a href="http://blog.raveable.com" mce_href="http://blog.raveable.com"&gt;raveable blog&lt;/a&gt;.&lt;br&gt; &lt;br&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;I am not actively blogging about Sync Technologies. Please see &lt;a href="http://blogs.msdn.com/sync/" class="" mce_href="http://blogs.msdn.com/sync/"&gt;Sync Team Blog&lt;/a&gt; for more updated content.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8560445" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/synchronizer/attachment/8560445.ashx" length="5042" type="image/jpeg" /><category domain="http://blogs.msdn.com/synchronizer/archive/tags/p2p/default.aspx">p2p</category><category domain="http://blogs.msdn.com/synchronizer/archive/tags/SQL2008/default.aspx">SQL2008</category></item><item><title>Unleash the power of Peer Sync Provider</title><link>http://blogs.msdn.com/synchronizer/archive/2008/02/25/unleash-the-power-of-peer-sync-provider.aspx</link><pubDate>Mon, 25 Feb 2008 20:22:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7894763</guid><dc:creator>Rafik</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/synchronizer/comments/7894763.aspx</comments><wfw:commentRss>http://blogs.msdn.com/synchronizer/commentrss.aspx?PostID=7894763</wfw:commentRss><description>&lt;p&gt;The term 'peer' or more commonly 'peer to peer' leads people to think about sharing and collaboration scenarios. That's good. One of the most common peer to peer applications that quickly jumps to mind is file sharing which became rather popular in the recent years and led to illegal sharing of copy righted material which resulted in large number of law suits that you are well aware of. That's the bad part. This kind of thought when comes to mind discourages people from exploring the technology and uncovering its strength. My feel is that you won't fall in this unfortunate trap and I am just plain wrong.&lt;br&gt;&amp;nbsp;&lt;br&gt;Let me tell you the main scenarios for which &lt;a href="http://blogs.msdn.com/synchronizer/archive/2008/01/15/sharing-application-samples.aspx" class="" mce_href="http://blogs.msdn.com/synchronizer/archive/2008/01/15/sharing-application-samples.aspx"&gt;DbPeerSyncProvider&lt;/a&gt; is a key enabler:&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;Collaboration&lt;br&gt;&lt;/b&gt;&amp;nbsp;&lt;br&gt;Two people in a project could exchange information between each other’s without the need for a third node or, in other words a server node. In this kind of setup, data flows in multiple directions and loops are likely to occur between different members of the project. By that I mean, P1 sync changes with P2, P2 sync changes with P3, and P3 sync changes with P1. In collaboration scenarios multiple people are working on the same resources and synchronize their changes between each others. A server node is not required in this scenario but typically added for centralized backup and reporting needs.&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;Scale Out&lt;/b&gt;&lt;br&gt;&amp;nbsp;&lt;br&gt;When the load increases on your server, you would typically upgrade your server to more powerful one. Buy more RAM, change the processor, or even replace the machine altogether. These are different types of scaling up your system. But if you get a new machine and add it to the existing server such that the load is distributed on both, then that is scale out.&lt;br&gt;&amp;nbsp;&lt;br&gt;While DbServerSyncProvider scalability is limited to scale up techniques, DbPeerSyncProvider gives you scale out architecture that you might be looking for. In scale out scenarios, your client sync applications are not talking to each others, they are not synchronizing peer-to-peer, they only talking with the server. However, the server is not a single machine any more. It could be a server farm with some scheme of distributed load balancing. Changes on one server are synchronized with the other servers in peer to peer fashion using DbPeerSyncProvider. The client application too will have to use DbPeerSyncProvider despite that fact that it is only synchronizing data with the server.&lt;br&gt;&amp;nbsp;&lt;br&gt;This is a fascinating setup and not so obvious especially when all we talk about is peer-to-peer sync. Many variations of these two key scenarios are definitely possible. It is all up to your imagination.&lt;/p&gt;&lt;p mce_keep="true"&gt;Update: Just to let you know, I left Microsoft to start a new company,&amp;nbsp;&lt;b&gt;&lt;a href="http://www.raveable.com" class="" mce_href="http://www.raveable.com" style="color: rgb(0, 101, 226);"&gt;Raveable Hotel Reviews.&lt;/a&gt;&lt;/b&gt; See examples: &lt;b&gt;&lt;a href="http://www.raveable.com/ny/new-york-city/romantic-hotels-in-nyc/l5039c2" title="romantic hotels in nyc" mce_href="http://www.raveable.com/ny/new-york-city/romantic-hotels-in-nyc/l5039c2"&gt;Romantic Hotels in NYC&lt;/a&gt;&lt;/b&gt;, &lt;b&gt;&lt;a href="http://www.raveable.com/wa/seattle/best-hotels-in-seattle/l7344c1" mce_href="http://www.raveable.com/wa/seattle/best-hotels-in-seattle/l7344c1"&gt;Best Hotels in Seattle&lt;/a&gt;&lt;/b&gt;, &lt;b&gt;&lt;a href="http://www.raveable.com/sc/myrtle-beach/top-10-hotels-in-myrtle-beach/l6180c3" title="top 10 hotels in myrtle beach" mce_href="http://www.raveable.com/sc/myrtle-beach/top-10-hotels-in-myrtle-beach/l6180c3"&gt;Top 10 Hotels in Myrtle Beach&lt;/a&gt;&lt;/b&gt;, &lt;b&gt;&lt;a href="http://www.raveable.com/il/chicago/kid-friendly-hotels-in-chicago/l2156c16" title="kid friendly hotels in chicago" mce_href="http://www.raveable.com/il/chicago/kid-friendly-hotels-in-chicago/l2156c16"&gt;Kid Friendly Hotels in Chicago&lt;/a&gt;&lt;/b&gt;, &lt;span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 13px; font-weight: bold;"&gt;&lt;a href="http://www.raveable.com/hotels-with-jacuzzi" title="hotels with jacuzzi" mce_href="http://www.raveable.com/hotels-with-jacuzzi" style="color: rgb(0, 101, 226);"&gt;Hotels with in-room jacuzzi&lt;/a&gt; &lt;/span&gt;&lt;/span&gt;and &lt;a href="http://www.raveable.com/fl/miami/best-hotels-in-miami/l1644c1" title="best hotels in miami" mce_href="http://www.raveable.com/fl/miami/best-hotels-in-miami/l1644c1"&gt;&lt;b&gt;Best Hotels in Miami&lt;/b&gt;&lt;/a&gt;. Your feedback is welcome on &lt;a href="http://twitter.com/raveable" mce_href="http://twitter.com/raveable"&gt;twitter.com/raveable&lt;/a&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma; font-size: 13px;"&gt;,&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="http://blog.raveable.com" title="raveable blog" mce_href="http://blog.raveable.com" style="color: rgb(0, 101, 226);"&gt;raveable blog&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;I am not actively blogging about Sync Technologies. Please see&amp;nbsp;&lt;a href="http://blogs.msdn.com/sync/" class="" mce_href="http://blogs.msdn.com/sync/" style="color: rgb(0, 101, 226);"&gt;Sync Team Blog&lt;/a&gt;&amp;nbsp;for more updated content. &lt;br&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7894763" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/synchronizer/archive/tags/p2p/default.aspx">p2p</category></item><item><title>Sharing Application Samples</title><link>http://blogs.msdn.com/synchronizer/archive/2008/01/15/sharing-application-samples.aspx</link><pubDate>Tue, 15 Jan 2008 08:08:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7115665</guid><dc:creator>Rafik</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/synchronizer/comments/7115665.aspx</comments><wfw:commentRss>http://blogs.msdn.com/synchronizer/commentrss.aspx?PostID=7115665</wfw:commentRss><description>&lt;p&gt;I originally authored the &lt;a href="http://www.syncguru.com/Projects.aspx" class="" mce_href="http://www.syncguru.com/Projects.aspx"&gt;offline application&lt;/a&gt; line of samples to show off the different features of Sync Services. My main goal back then was to provide you with a quick start guide such that you can get into sync quickly. The series of demos has grown to up to eight demos, so as the rate of positive feedback that I’ve been receiving from you and even internally inside the company. Well, for that I thank you!&lt;/p&gt;
&lt;p&gt;Now, with the release of our new DbPeerSyncProvider which is included in &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=C88BA2D1-CEF3-4149-B301-9B056E7FB1E6&amp;amp;displaylang=en" class="" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=C88BA2D1-CEF3-4149-B301-9B056E7FB1E6&amp;amp;displaylang=en"&gt;CTP1&lt;/a&gt; of Microsoft Sync Framework, a new series of demos is also released with it. This time it is part of the SDK. On my machine, the samples are located at: &lt;u&gt;C:\Program Files\Microsoft Sync Framework\v1.0\Runtime\ADO.NET\V2.0\Samples\&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;I called this new line of demos “Sharing Application” to emphasize the key feature of the peer provider which enables different nodes to share and collaborate on a common data set without the need for central authority. Not to say that having a central database is discouraged, it is just not required. &lt;/p&gt;
&lt;p&gt;The SDK ships with five different flavors of the sharing application sample. They share the same user interface and act against the same database schema of orders and order_details tables. If you have tried the offline application demos, you will feel right at home with this new set of samples. I want to give you an overview of each sample and what features of the provider it shows off. But before going there, let’s check out the common user interface for these samples&lt;/p&gt;
&lt;p mce_keep="true"&gt;&lt;img src="http://blogs.msdn.com/synchronizer/attachment/7115665.ashx" title="Sharing Application" style="width: 520px; height: 491px;" alt="Sharing Application" mce_src="http://blogs.msdn.com/synchronizer/attachment/7115665.ashx" height="491" width="520"&gt;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;The first thing to pay attention to in the main form as shown above is the three peers (peer1, peer2, peer3) settings in multiple places. On the top right you configure the machine name where the database is located for each peer (I have all three databases on one machine). On the bottom left, you direct the follow of synchronization through to and from boxes. The UI won’t allow you to select to sync from a given peer to itself. The three conflict generation buttons on the left of the Synchronize button are specific to conflict sample. Other samples might introduce new buttons.&lt;/p&gt;
&lt;p&gt;In building multi-master sync application, three nodes are required to exercise almost all possible scenarios and that’s why you see three peers. You can extend the demo and add as many peers as you want; but as far as the demo goes, three peers should suffice.&lt;/p&gt;
&lt;p&gt;In the setup directory with every sample there is a bunch of .sql files that you should use to create the peer databases along with all necessary stored procedures and triggers. The peer provider requires snapshot isolation transaction while enumerating changes, which means that you need any flavor of SQL Server 2005. SQL Server 2005 Express should work just fine.&lt;/p&gt;
&lt;p&gt;So now you are eager to give it a try, the question is where to start. Let me give you a quick overview for each sample, ordered by complexity, starting with the simplest of course:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;SharingAppDemo – Coupled Tracking&lt;br&gt;&lt;/b&gt;Following the most common model used in the offline application demos, here too you start with your base table and add necessary tracking columns to it. For recording deletes, you create a tombstone table for that. &lt;br&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SharingAppDemo – Decoupled Tracking&lt;br&gt;&lt;/b&gt;You soon realize, after trying the first demo, that tracking metadata for p2p sync is rather demanding and adds many columns to the base table that makes you uncomfortable. Well, I’ve gotten the same feeling myself and this demo shows you how to leave your base table schema intact and move all tracking metadata to a side table called “tracking table”. The rest of the demos are built on top of the decoupled tracking technique so you should give a little bit of time to this demo.&lt;br&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SharingAppDemo – Tombstone Cleanup&lt;br&gt;&lt;/b&gt;In the peer to peer sync world metadata cleanup is not taken lightly and the peer provider has a special logic for handling the cleanup for you. You just need to call the right method on the provider interface when you need to cleanup the metadata stored for deleted rows. This demo shows you how to do that.&lt;br&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SharingAppDemo -&amp;nbsp; Column Mapping&lt;br&gt;&lt;/b&gt;In many situations the table schema is different on each node. Despite the diversion in columns names, columns data types are identical which make sync possible. If all nodes decide to agree on a global schema definition, they all could sync without problems. This demo shows you the idea of global schema. It does not use different schema on each node but it maps column name on each node to a global schema name and shows you how that works. If you don’t have this kind of scenario, you could skip this demo.&lt;br&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SharingAppDemo – Conflicts&lt;br&gt;&lt;/b&gt;It is always fun to show conflict detection and resolution logic. It is my favorite anyways. Once you get comfortable with the peer provider normal sync logic, your treat is to check out how conflicts are handled in peer to peer environment. This demo shows you different types of conflicts and different types of conflict resolution including the ability to retry applying the conflicting row in the next sync.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;I am very much exited about this new sharing demo series. I think you going to like it too. As always, your comments are welcomed and you &lt;a href="http://forums.microsoft.com/sync/default.aspx?ForumGroupID=529&amp;amp;SiteID=75" class="" mce_href="http://forums.microsoft.com/sync/default.aspx?ForumGroupID=529&amp;amp;SiteID=75"&gt;feedback&lt;/a&gt; is much appreciated.&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Tahoma; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;p mce_keep="true"&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma; font-size: 13px;"&gt;Update: Just to let you know, I left Microsoft to start a new company,&amp;nbsp;&lt;b&gt;&lt;a href="http://www.raveable.com/" class="" mce_href="http://www.raveable.com" style="color: rgb(0, 101, 226);"&gt;Raveable Hotel Reviews.&lt;/a&gt;&lt;/b&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;See examples:&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;a href="http://www.raveable.com/ny/new-york-city/romantic-hotels-in-nyc/l5039c2" title="romantic hotels in nyc" mce_href="http://www.raveable.com/ny/new-york-city/romantic-hotels-in-nyc/l5039c2" style="color: rgb(0, 101, 226);"&gt;Romantic Hotels in NYC&lt;/a&gt;&lt;/b&gt;,&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;a href="http://www.raveable.com/wa/seattle/best-hotels-in-seattle/l7344c1" mce_href="http://www.raveable.com/wa/seattle/best-hotels-in-seattle/l7344c1" style="color: rgb(0, 101, 226);"&gt;Best Hotels in Seattle&lt;/a&gt;&lt;/b&gt;,&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;a href="http://www.raveable.com/sc/myrtle-beach/top-10-hotels-in-myrtle-beach/l6180c3" title="top 10 hotels in myrtle beach" mce_href="http://www.raveable.com/sc/myrtle-beach/top-10-hotels-in-myrtle-beach/l6180c3" style="color: rgb(0, 101, 226);"&gt;Top 10 Hotels in Myrtle Beach&lt;/a&gt;&lt;/b&gt;,&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;a href="http://www.raveable.com/il/chicago/kid-friendly-hotels-in-chicago/l2156c16" title="kid friendly hotels in chicago" mce_href="http://www.raveable.com/il/chicago/kid-friendly-hotels-in-chicago/l2156c16" style="color: rgb(0, 101, 226);"&gt;Kid Friendly Hotels in Chicago&lt;/a&gt;&lt;/b&gt;,&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 13px; font-weight: bold;"&gt;&lt;a href="http://www.raveable.com/hotels-with-jacuzzi" title="hotels with jacuzzi" mce_href="http://www.raveable.com/hotels-with-jacuzzi" style="color: rgb(0, 101, 226);"&gt;Hotels with in-room jacuzzi&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;and&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="http://www.raveable.com/fl/miami/best-hotels-in-miami/l1644c1" title="best hotels in miami" mce_href="http://www.raveable.com/fl/miami/best-hotels-in-miami/l1644c1" style="color: rgb(0, 101, 226);"&gt;&lt;b&gt;Best Hotels in Miami&lt;/b&gt;&lt;/a&gt;. Your feedback is welcome on&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="http://twitter.com/raveable" mce_href="http://twitter.com/raveable" style="color: rgb(0, 101, 226);"&gt;twitter.com/raveable&lt;/a&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma; font-size: 13px;"&gt;,&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="http://blog.raveable.com/" title="raveable blog" mce_href="http://blog.raveable.com" style="color: rgb(0, 101, 226);"&gt;raveable blog&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p mce_keep="true"&gt;I am not actively blogging about Sync Technologies. Please see&amp;nbsp;&lt;a href="http://blogs.msdn.com/sync/" class="" mce_href="http://blogs.msdn.com/sync/" style="color: rgb(0, 101, 226);"&gt;Sync Team Blog&lt;/a&gt;&amp;nbsp;for more updated content.&lt;span class="Apple-converted-space"&gt; &lt;br&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7115665" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/synchronizer/attachment/7115665.ashx" length="766014" type="image/bmp" /><category domain="http://blogs.msdn.com/synchronizer/archive/tags/demos/default.aspx">demos</category><category domain="http://blogs.msdn.com/synchronizer/archive/tags/p2p/default.aspx">p2p</category></item></channel></rss>