<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Ravi Rao&amp;#39;s Blog</title><subtitle type="html" /><id>http://blogs.msdn.com/b/ravirao/atom.aspx</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/ravirao/" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/b/ravirao/atom.aspx" /><generator uri="http://telligent.com" version="5.6.50428.7875">Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><updated>2005-09-26T13:29:00Z</updated><entry><title>Get Visual Studio 2005 Express for Free!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/ravirao/archive/2005/11/08/490702.aspx" /><id>http://blogs.msdn.com/b/ravirao/archive/2005/11/08/490702.aspx</id><published>2005-11-09T08:57:00Z</published><updated>2005-11-09T08:57:00Z</updated><content type="html">&lt;P&gt;Great deal!&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/vstudio/express/default.aspx"&gt;http://msdn.microsoft.com/vstudio/express/default.aspx&lt;/A&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=490702" width="1" height="1"&gt;</content><author><name>Ravi Rao</name><uri>http://blogs.msdn.com/ravirao/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>PDC '05 videos are now online</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/ravirao/archive/2005/10/30/486961.aspx" /><id>http://blogs.msdn.com/b/ravirao/archive/2005/10/30/486961.aspx</id><published>2005-10-30T12:30:00Z</published><updated>2005-10-30T12:30:00Z</updated><content type="html">&lt;P&gt;All talks are available at &lt;A href="http://microsoft.sitestream.com/PDC05/"&gt;http://microsoft.sitestream.com/PDC05/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;People Near Me Talk: &lt;A href="http://microsoft.sitestream.com/PDC05/COM/COM319.htm#nopreload=1&amp;amp;autostart=1"&gt;http://microsoft.sitestream.com/PDC05/COM/COM319.htm#nopreload=1&amp;amp;autostart=1&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Peer to Peer Talk: &lt;A href="http://microsoft.sitestream.com/PDC05/COM/COM311.htm#nopreload=1&amp;amp;autostart=1"&gt;http://microsoft.sitestream.com/PDC05/COM/COM311.htm#nopreload=1&amp;amp;autostart=1&lt;/A&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=486961" width="1" height="1"&gt;</content><author><name>Ravi Rao</name><uri>http://blogs.msdn.com/ravirao/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>FAQ</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/ravirao/archive/2005/10/29/486901.aspx" /><id>http://blogs.msdn.com/b/ravirao/archive/2005/10/29/486901.aspx</id><published>2005-10-30T07:37:00Z</published><updated>2005-10-30T07:37:00Z</updated><content type="html">&lt;P&gt;I'll try to keep this FAQ updated on the general questions asked on the p2p infrastructure:&lt;/P&gt;
&lt;P&gt;1. How scalable is the p2p framework?&lt;/P&gt;
&lt;P&gt;* PNRP is the serverless name resolution protocol, and is scalable to the size of the internet.&lt;/P&gt;
&lt;P&gt;* Graphing/Grouping: These are protocols intended for peer to peer group activities, and are scalable to the thousands.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;* Peer Channel (a part of the Windows Communication Foundation): These protocols intended for multiparty messaging are scalable to the tens of thousands and likely more (still testing)&lt;/P&gt;
&lt;P&gt;2. How much bandwidth do these protocols consume?&lt;/P&gt;
&lt;P&gt;The protocols in general are intended to consume far less traffic than any application using the framework will consume. We are in the process of testing bandwidth consumption, and will be happy to share numbers in a little time.&lt;/P&gt;
&lt;P&gt;3. How much time is spent before a node connects to a network?&lt;/P&gt;
&lt;P&gt;* PNRP - should be less than 10 seconds&lt;/P&gt;
&lt;P&gt;* Graphing/Grouping/Peer Channel - this really depends on the mechanism used to find a node in the mesh to connect to. If PNRP is used as the mechanism of finding such a node, then it will take a couple of seconds more. The actual connection establishment mechanism is fairly quick.&lt;/P&gt;
&lt;P&gt;4. Where is Teredo server currently setup? &lt;/P&gt;
&lt;P&gt;Microsoft hosts a public Teredo server that is available for all applications to automatically use. To learn more on Teredo, take a look at&amp;nbsp; &lt;A href="http://www.microsoft.com/technet/prodtechnol/winxppro/maintain/teredo.mspx"&gt;http://www.microsoft.com/technet/prodtechnol/winxppro/maintain/teredo.mspx&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;5. What&amp;nbsp;are the typical topologies formed for say when 30 nodes gets connected in a multiparty activity?&lt;/P&gt;
&lt;P&gt;Take a look at the white paper &lt;A href="http://www.microsoft.com/technet/prodtechnol/winxppro/deploy/p2pintro.mspx"&gt;http://www.microsoft.com/technet/prodtechnol/winxppro/deploy/p2pintro.mspx&lt;/A&gt;, which shows what a graph looks like.&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;6. Reliability. When a message sent by a node does not receive a response, does it really means node isn't? Numbers of hops may be pretty large and hence chance of message loss is pretty high. Is it true? &lt;/P&gt;
&lt;P&gt;* PNRP - if a response is not received, then almost certainly, the node is either not accessible because it is behind a corporate firewall for instance, or it is just not online&lt;/P&gt;
&lt;P&gt;* Graphing/Grouping/Peer Channel - if a message is not received, then there are some possibilities (all of which should be very rare) - the mesh is partitioned and a message consequently could not get through, some neighbor was just not able to forward the message on, or the local stack itself did not deliver the message to the application. All of these should be very rare, however, if your application requires reliability guarantees (100% of the time), then you may have to implement a simple protocol on top of the peer channel for this purpose.&lt;BR&gt;&lt;BR&gt;7. Replicated data store. Is it built on SQL Server, XML or something else? How dynamics are orchastrated? What happens when A syncs with B and C, B syncs with D and then C syncs with D? Would there be any ADO.Net provider to access this data store? Are there any events raised as data changes? Is there any built in features to maintain versions of data? &lt;/P&gt;
&lt;P&gt;* The data store is a very simple store. It does allow for use of XML attributes in records that you can use for searching for relevant data. The synchronization protocol is based both on timestamp and version number, and is based on the last writer wins principle. However, you can enforce security in the group so as to ensure that no one else can clobber your records. There are no ADO.Net providers for this data store. There are record events raised any time data is added/deleted/modified.&lt;BR&gt;&lt;BR&gt;8. Real time streaming capabilities. Can a node, for example, transmit the video content to thousands of other nodes without reaching bandwidth bottlenecks. &lt;/P&gt;
&lt;P&gt;* A group and a graph cannot be used directly for streaming. You would use the group/graph as a mechanism to get the topology, and then construct a streaming overlay on top. You can always use the underlying graph for sending less real-time sensitve data such as chat, collateral for meetings etc.&lt;/P&gt;
&lt;P&gt;* The peer channel (which is showing incredibly high throughput numbers) could be usable in streaming scenarios. We are currently evaluating that. If you are interested, let me know and we can discuss.&lt;BR&gt;&lt;BR&gt;9. Distributed computing. Is there any built-in features to let node execure code on other nodes remotely (P2P version of RPC)?&lt;/P&gt;
&lt;P&gt;* The data you send in messages to the mesh could contain anything. Your application which installed on all machines can quite easily send some data (which is code) to execute on other machines. However, our infrastructure natively does not enable these scenarios yet.&lt;/P&gt;
&lt;P&gt;10. How does WCF/Indigo compare with Bonjour/Rendezvous?&lt;/P&gt;
&lt;P&gt;* WCF enables messaging peer to peer, client server, amongst servers etc. It implements a large set of WS-* protocols for interop with other web services protocols/infrastructures as well. Bonjour is just a small piece of messaging from Apple that focuses on finding devices on the same subnet. It is likely similar to one protocol, WS-Discovery which enables discovery of services on the network. It is designed to be a scalable architecture that can be bridged across subnets using proxies. It is shipping as part of Windows Vista. Another piece built on WS-Discovery that Bonjour may be close to is People Near Me, which enables discovery of people located on the same subnet. Bonjour does not use PNRP! Neither does WS Discovery. The two are not compatible with each other.&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=486901" width="1" height="1"&gt;</content><author><name>Ravi Rao</name><uri>http://blogs.msdn.com/ravirao/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>Adrian Moore's managed projects</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/ravirao/archive/2005/10/29/486897.aspx" /><id>http://blogs.msdn.com/b/ravirao/archive/2005/10/29/486897.aspx</id><published>2005-10-30T07:33:00Z</published><updated>2005-10-30T07:33:00Z</updated><content type="html">&lt;P&gt;Some cool work by &lt;A href="http://mooresmind.blogspot.com"&gt;Adrian Moore&lt;/A&gt;&amp;nbsp;on managed wrappers and project built on the peer to peer collaboration framework.&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;A href="http://www.codeproject.com/csharp/PeerNameResolution.asp"&gt;http://www.codeproject.com/csharp/PeerNameResolution.asp&lt;/A&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=486897" width="1" height="1"&gt;</content><author><name>Ravi Rao</name><uri>http://blogs.msdn.com/ravirao/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>I did a People Near Me Podcast</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/ravirao/archive/2005/10/29/486895.aspx" /><id>http://blogs.msdn.com/b/ravirao/archive/2005/10/29/486895.aspx</id><published>2005-10-30T07:13:00Z</published><updated>2005-10-30T07:13:00Z</updated><content type="html">&lt;P&gt;&lt;A href="http://ch1.learningfeeds.com/"&gt;http://ch1.learningfeeds.com/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Let me know what you think!&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=486895" width="1" height="1"&gt;</content><author><name>Ravi Rao</name><uri>http://blogs.msdn.com/ravirao/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>Peer to Peer Whitepapers suggestions?</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/ravirao/archive/2005/10/08/478609.aspx" /><id>http://blogs.msdn.com/b/ravirao/archive/2005/10/08/478609.aspx</id><published>2005-10-08T21:00:00Z</published><updated>2005-10-08T21:00:00Z</updated><content type="html">&lt;P&gt;Any suggestions on the kinds of whitepapers you would like to see on the peer to peer collaboration space? We have technologies for serverless name resolution, multiparty communication meshes, people near me and application invite, amongst others.&lt;/P&gt;
&lt;P&gt;We already have an introductory white paper on the website. Have you read it? What are your thoughts on it, and suggestions for improvement?&lt;/P&gt;
&lt;P&gt;Also, let us know what other white papers you think we should have.&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=478609" width="1" height="1"&gt;</content><author><name>Ravi Rao</name><uri>http://blogs.msdn.com/ravirao/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>Event name suggestions?</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/ravirao/archive/2005/10/07/478508.aspx" /><id>http://blogs.msdn.com/b/ravirao/archive/2005/10/07/478508.aspx</id><published>2005-10-08T08:55:00Z</published><updated>2005-10-08T08:55:00Z</updated><content type="html">&lt;P&gt;So, we are trying to figure out a good name for an event for the following:&lt;/P&gt;
&lt;P&gt;The mechanism by which you access published capabilities and objects from a person near you is by calling the PeerCollabRefreshEndpointData() API. This API effectively refreshes the local cache with whatever data is being published by the endpoint. Since this is a network operation, it is asynchronous, and has an event for when the operation completes. We are trying to figure out a good name for this operation.&lt;/P&gt;
&lt;P&gt;Any thoughts, on what sounds like a good name? Each event is associated with a structure containing the data that was returned. Please give suggestions!&lt;/P&gt;
&lt;P&gt;PEER_EVENT_ENDPOINT_DATA_REFRESHED&lt;/P&gt;
&lt;P&gt;PEER_EVENT_ENDPOINT_DATA_CHANGED&lt;/P&gt;
&lt;P&gt;PEER_EVENT_ENDPOINT_DATA_AVAILABLE&lt;/P&gt;
&lt;P&gt;Any other ideas?&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=478508" width="1" height="1"&gt;</content><author><name>Ravi Rao</name><uri>http://blogs.msdn.com/ravirao/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>API model for People Near Me vs Internet/Contacts presence</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/ravirao/archive/2005/10/02/476344.aspx" /><id>http://blogs.msdn.com/b/ravirao/archive/2005/10/02/476344.aspx</id><published>2005-10-03T09:16:00Z</published><updated>2005-10-03T09:16:00Z</updated><content type="html">&lt;P&gt;The model for presence revolves around contacts. You have a bunch of contacts, and you want to get their presence when you sign in, and if they signed-in after you did, then you get their presence at that point of time. That is, the programming model is a subscription model. The infrastructure automatically subscribes to the presence, capabilities and objects of a user's contacts. All API calls are simply local at that point (for instance, getting presence, capabilities, objects).&lt;/P&gt;
&lt;P&gt;With People Near Me however, the model is a polling model. Since there can be a very large number of people on the same subnet, we do not automatically subscribe to everyone's capabilities and objects. Instead, we expose a method (RequestPublishedItems) for the developer to get the published items (capabilities, objects etc) on demand. Once this API is called, then all operations become local after that much like it is with presence. So, when dealing with people near me, this is an additional API to call for the people you are interested in getting more info from. Now, the API ends up keeping data for future callers as well. Consequently, if another application were to call PeerCollabEnumObjects, it will return the objects returned in a prior call to RequestPublishedItems.&lt;/P&gt;
&lt;P&gt;Some APIs, by design, do not work for People Near Me. For instance, setting the endpoint name does not work, because it is automatically set to the machine name. If you want to get the endpoint name, you get that via the peer_collab_endpoints_near_me event. I'll keep this post updated with other APIs that will not work for one signin option vs another.&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=476344" width="1" height="1"&gt;</content><author><name>Ravi Rao</name><uri>http://blogs.msdn.com/ravirao/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>The Peer Channel in Windows Communication Foundation (aka Indigo)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/ravirao/archive/2005/09/26/474231.aspx" /><id>http://blogs.msdn.com/b/ravirao/archive/2005/09/26/474231.aspx</id><published>2005-09-27T05:58:00Z</published><updated>2005-09-27T05:58:00Z</updated><content type="html">&lt;P&gt;At this point, our only managed offering is the peer channel. The peer channel provides multiparty messaging in a mesh. It is an implementation of the graphing/grouping algorithms in Windows Communication Foundation (WCF), and allows you to use the familiar (assuming you are familiar with the WCF programming model) WCF programming model to send transient messages (think multicast) to the mesh. The messages should be small, because the mesh has a certain amount of redundancy to ensure integrity in the face of node transience. It is very straightforward to use if you are familiar with WCF. If not, there are lots of bloggers on WCF who I'm sure will love to help you out.&lt;/P&gt;
&lt;P&gt;We are seeing staggering (from my perspective anyway :)) performance numbers right now, with throughputs of ~1000 messages per second in small meshes...I think it is a bug in our measurements, but we'll know more soon :) However, if the numbers are right, it is a testament to just how performant the stack really is.&lt;/P&gt;
&lt;P&gt;If you are planning on using WCF, and are interested in multiparty communication, consider using the peer channel.&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=474231" width="1" height="1"&gt;</content><author><name>Ravi Rao</name><uri>http://blogs.msdn.com/ravirao/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>How do I learn the GUID of the application to send an invite to</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/ravirao/archive/2005/09/26/474134.aspx" /><id>http://blogs.msdn.com/b/ravirao/archive/2005/09/26/474134.aspx</id><published>2005-09-26T23:29:00Z</published><updated>2005-09-26T23:29:00Z</updated><content type="html">&lt;P&gt;Applications can publish their availability to people near me. When you call PeerCollabRegisterCapability(), you can specify a scope which is the subnet and information about that application is now available to people near me. Now, each capability is associated with a GUID, a name, description, a path and a scope. If the capability is registered in the pnm scope, then our infrastructure will publish out some information about the application (name, guid, but not the path).&lt;/P&gt;
&lt;P&gt;The client that wishes to send an invite calls RequestPublishedItems(), and can then enumerate the capabilities, to get the GUID of the application to send the invite to.&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=474134" width="1" height="1"&gt;</content><author><name>Ravi Rao</name><uri>http://blogs.msdn.com/ravirao/ProfileUrlRedirect.ashx</uri></author></entry></feed>