<?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>Windows Live Quantum Mechanics</title><link>http://blogs.msdn.com/b/dthorpe/</link><description>Windows Live client side web application development according to Windows Live Quantum Mechanic Danny Thorpe.</description><dc:language>en</dc:language><generator>Telligent Community 5.6.583.21163 (Build: 5.6.583.21163)</generator><item><title>Leaving Microsoft</title><link>http://blogs.msdn.com/b/dthorpe/archive/2007/10/05/leaving-microsoft.aspx</link><pubDate>Sat, 06 Oct 2007 00:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5300742</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>9</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dthorpe/rsscomments.aspx?WeblogPostID=5300742</wfw:commentRss><comments>http://blogs.msdn.com/b/dthorpe/archive/2007/10/05/leaving-microsoft.aspx#comments</comments><description>&lt;P&gt;As I've been wrapping up our 2nd generation cross-domain in-browser communication channel API, I've been nosing around and thinking about what my next project should be.&amp;nbsp; There's no shortage of tasks to do in Windows Live, and I had a few leads for interesting projects elsewhere within Microsoft as well.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Just as I cleared my mental desk to consider these options in detail, &lt;EM&gt;suddenly their came a tapping as if someone gently rapping, rapping on my chamber door.&lt;/EM&gt;&amp;nbsp; It was a startup calling, trying to seduce me into doing something rash.&amp;nbsp; I've been approached by startups before, but most are easy to dismiss because they have no funding.&amp;nbsp;&amp;nbsp;No matter how good the idea, I can't afford to work for IOUs.&amp;nbsp; This one was different.&amp;nbsp; Disruptive ideas,&amp;nbsp;razor&amp;nbsp;sharp team, and recently funded by Kleiner Perkins.&amp;nbsp; &lt;EM&gt;Well that's different.&lt;/EM&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;As fate would have it, my next&amp;nbsp;gig&amp;nbsp;will be&amp;nbsp;at &lt;A href="http://www.cooliris.com/" mce_href="http://www.cooliris.com"&gt;CoolIris&lt;/A&gt;, building browser plugins that are one part eye candy an two parts antimatter disrupter.&lt;/P&gt;
&lt;P&gt;While I will be leaving the Microsoft payroll, I won't be leaving the Windows Live arena.&amp;nbsp;I'm moving from the service producer to the service consumer side of the field. CoolIris will quickly need user logins, address books, photos, and storage, and I will certainly make sure they are aware of Windows Live's service offerings.&amp;nbsp;We should definitely leverage rather than build out infrastructure.&lt;/P&gt;
&lt;P&gt;The cross-domain communications article series will continue, "posthumously" if you will.&amp;nbsp;The siloed domain lowering technique mentioned in the last article is on hold pending clearance of some internal paperwork.&amp;nbsp; It will be published ASAP after the paperwork is sorted out.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The last article in the series (for now) will document the InterFrame Messaging channel API that we've been working on as a by-product of our development of the Windows Live Contacts control.&amp;nbsp; That article is on hold pending the release of the IFM channel API, which is on track for Real Soon Now.&amp;nbsp; Keep an eye on &lt;A href="http://dev.live.com/" mce_href="http://dev.live.com/"&gt;dev.live.com&lt;/A&gt; for announcements.&lt;/P&gt;
&lt;P&gt;I've started a new blog on my personal domain, &lt;A href="http://www.dannythorpe.com/" mce_href="http://www.dannythorpe.com"&gt;www.dannythorpe.com&lt;/A&gt;.&amp;nbsp; For uninterrupted blatherings, please update your RSS readers to use the new address and &lt;A class="" href="http://dannythorpe.com/?feed=rss2" mce_href="http://dannythorpe.com/?feed=rss2"&gt;RSS feed&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;So long, and thanks for all the fish!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5300742" width="1" height="1"&gt;</description></item><item><title>Cross-Domain Communication Using Domain Lowering</title><link>http://blogs.msdn.com/b/dthorpe/archive/2007/09/27/cross-domain-communication-using-domain-lowering.aspx</link><pubDate>Fri, 28 Sep 2007 08:52:28 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5180444</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dthorpe/rsscomments.aspx?WeblogPostID=5180444</wfw:commentRss><comments>http://blogs.msdn.com/b/dthorpe/archive/2007/09/27/cross-domain-communication-using-domain-lowering.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/dthorpe/archive/2007/06/18/secure-cross-domain-communication-the-architecture-journal.aspx"&gt;More than a few blog posts ago&lt;/a&gt;&amp;nbsp;I stated my intent to publish a series of articles on cross-domain communication techniques.&amp;nbsp; More time has passed than I had intended, but at last here is the start of that series of articles.&amp;nbsp; The series will explore progressively more advanced cross-domain techniques as well as their strengths and weaknesses, culminating in&amp;nbsp;an announcement about stuff we've been working on that I think you'll find interesting.&lt;/p&gt; &lt;p&gt;Cross-domain communication is usually discussed in the context of a browser client communicating to a web server that is different than the domain of the web page currently shown in the browser.&amp;nbsp; The browser client displays a page from server foo.com, and that page tries to access data on server bar.com.&amp;nbsp; This is forbidden by the same-origin browser security policy because bar.com isn't foo.com.&lt;/p&gt; &lt;h4&gt;Server Side Proxy&lt;/h4&gt; &lt;p&gt;One relatively simple way to resolve this is to have the browser page request data from the page's web server, and have the web server relay that request to the actual third party server.&amp;nbsp; The browser displays a page from foo.com, and that page makes a data request to foo.com which foo.com relays to bar.com.&amp;nbsp; Bar.com replies to foo.com, and foo.com forwards that response on to the browser client page to complete the circuit.&lt;/p&gt; &lt;p&gt;While this solution is simple and quite widespread today, it has some significant problems:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Scalability and Network costs&lt;/strong&gt;:&amp;nbsp; The request and response travel across your server's network twice.&amp;nbsp; Request in, request out, response in, response out.&amp;nbsp; Traffic on your server network grows four times faster than growth of your application use.&amp;nbsp;&amp;nbsp;That means you'll&amp;nbsp;reach network saturation four times sooner than&amp;nbsp;with other techniques, and you'll pay four times more (in server network traffic costs) for the privilege.&amp;nbsp; &lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;strong&gt;Impersonating the user&lt;/strong&gt;:&amp;nbsp; When your foo.com server makes a request to bar.com seeking data for the user, you're essentially impersonating the end user.&amp;nbsp; If the data on bar.com requires any sort of user identification or authorization, your server side proxy suddenly jumps from super simple to super difficult.&amp;nbsp; It's easy enough to ask the user to log in to bar.com, but your foo.com can't see anything that goes on in bar.com.&amp;nbsp; In particular, foo.com cannot see whatever browser cookies that bar.com sets to indicate logged in state.&amp;nbsp; Thus, it will be next to impossible for foo.com to present the appropriate cookies or credentials in its http request to bar.com to make bar.com believe that the request is coming from the legitimate user.&amp;nbsp; And this should be difficult - this is nothing short of a man-in-the-middle attack on bar.com's security!&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;So, server side proxies are a quick and dirty way to toss anonymous data around, but they don't scale well and they hit a wall when the data requires authentication.&lt;/p&gt; &lt;h4&gt;Web Sites With Subdomains&lt;/h4&gt; &lt;p&gt;Web sites and web applications generally start out as simple beasts running on a single web domain (www.foo.com).&amp;nbsp; As the site grows in functionality and complexity, the incentives to break that site up into subdomains (downloads.foo.com, feedback.food.com, images.foo.com) grows as well.&amp;nbsp; Perhaps your web site has a download area that needs to be optimized for large file transfers.&amp;nbsp; That would probably be easier to fine tune as a server or cluster dedicated to that function than to try to tune the entire web site for large file downloads.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Subdomains often sprout as a byproduct of a company's internal structure.&amp;nbsp; It takes a lot more effort to coordinate updates to one central server shared by multiple departments on different schedules than for a department to own their own subdomain, nicely isolated from the rest of the company's constant revisions.&lt;/p&gt; &lt;h4&gt;Double Edged Sword&lt;/h4&gt; &lt;p&gt;Domain isolation is convenient to let you get your work done independently of the noise going on in the rest of the company's web presence, but also presents a new problem:&amp;nbsp; web pages served from your subdomain cannot share information with web pages served from other subdomains of your company.&amp;nbsp; If the user logs in to your company's main page, the browser cookies representing that login state are not accessible to your subdomain.&amp;nbsp; &lt;/p&gt; &lt;h4&gt;Lowering the Domain Barrier&lt;/h4&gt; &lt;p&gt;The major browsers support a technique around this quandary, to allow subdomains to operate as equals within a common shared context.&amp;nbsp; The HTML document object has a domain property which normally reflects the complete domain name of the server from which the HTML document was loaded.&amp;nbsp;The browser will allow you to&amp;nbsp;assign a subset of the current&amp;nbsp;domain name to the document.domain property to&amp;nbsp;indicate that you wish for the HTML document to be treated as though it were loaded from the parent domain.&lt;/p&gt; &lt;p&gt;So, an HTML&amp;nbsp;page served from downloads.foo.com can assign document.domain = "foo.com" in a JavaScript code block.&amp;nbsp; From that point forward, browser domain security checks will treat that page as a peer of any page in the foo.com domain.&amp;nbsp; &lt;/p&gt; &lt;p&gt;The browser will (should) only allow you to change the document.domain to a less specific version of your current domain.&amp;nbsp; one.two.three.foo.com could be lowered to foo.com, or could be lowered to three.foo.com.&amp;nbsp; &lt;/p&gt; &lt;p&gt;The browser should not allow assignment of a top-level domain (domain suffix) to document.domain.&amp;nbsp; You should not be able to change a document domain from "one.foo.com" to "com".&amp;nbsp; There have been browser bugs in this area in the past where a browser implementer mistakenly interpreted "top level domain" to mean "the bit of the domain after the last dot".&amp;nbsp; ".com", ".edu", and ".org" are top level domains, but ".co.uk" and ".co.jp" are TLDs also.&lt;/p&gt; &lt;p&gt;The browsers will not allow you to raise the domain of an HTML document to something more specific than its domain of origin, nor allow lateral domain shuttling.&amp;nbsp; Changing document.domain from "two.foo.com" to one.two.foo.com" is forbidden.&amp;nbsp; Changing a document.domain from&amp;nbsp;"one.foo.com" to "two.foo.com" is forbidden.&lt;/p&gt; &lt;h4&gt;Irreversible (Mostly)&lt;/h4&gt; &lt;p&gt;Firefox 1.5 and 2.0 will not allow you to assign a domain name that is more specific than the document's current domain name under any circumstances.&amp;nbsp; Once you lower one.foo.com to foo.com, it's stuck at foo.com forever.&amp;nbsp; The only way to clear that state is to reload the page.&lt;/p&gt; &lt;p&gt;IE6 and IE7 will allow you to raise a document's domain back to it's actual domain of origin.&amp;nbsp; If a page was served from one.foo.com, and you lower it to foo.com, IE will let you raise it back to one.foo.com.&amp;nbsp; However, I've seen some instabilities and inconsistencies in the aftermath of "raising shields", so I don't recommend relying on this behavior.&amp;nbsp; Since Firefox doesn't allow restoring domains to their original values, you should ignore the fact that IE sort of does allow it.&lt;/p&gt; &lt;h4&gt;Bridging Silos Via Least Common Denominators&lt;/h4&gt; &lt;p&gt;When an HTML document's domain is lowered to a parent domain, the security context and JavaScript symbol&amp;nbsp;space of that document joins the security context and JavaScript symbol space of any and all pages that are also in the parent domain.&amp;nbsp;&amp;nbsp;JavaScript in your page served from one.foo.com and lowered to foo.com can access JavaScript functions and variables defined in other pages whose domain is foo.com, and visa-versa.&lt;/p&gt; &lt;p&gt;So, if you have pages on one.foo.com that would like to interoperate with pages on two.foo.com, you can use domain lowering to pull down the domain barriers just enough to allow them to talk to each other, but still provide domain protections against third parties trying to steal or corrupt the internal state of your web app.&amp;nbsp; Place a JavaScript block at the top of each page in the "one" and "two" subdomains which assigns document.domain = "foo.com" and you're good to go.&amp;nbsp; All the pages will operate as though they were served from the same domain, and can access anything in each other's DOMs and JavaScript symbol space.&lt;/p&gt; &lt;h4&gt;One or the Other, Not Both&lt;/h4&gt; &lt;p&gt;Note that once your one.foo.com page has been lowered into the parent domain, your HTML and JavaScript code loses all access to DOMs and JavaScript data in any other pages that are still in the original one.foo.com subdomain.&amp;nbsp; A web page can only be in one domain context&amp;nbsp;or the other, not both.&lt;/p&gt; &lt;h4&gt;Interesting Inconsistencies&lt;/h4&gt; &lt;p&gt;Domain lowering applies only to the DOM and JavaScript sandboxes.&amp;nbsp; Parts (actually, nearly all) of the browser execute in native machine code outside the browser security sandbox. Native objects exposed to JavaScript in the sandbox are largely on their own to implement appropriate security checks on operations initiated by JavaScript.&amp;nbsp; JavaScript can't access the local file system, for example, but if the user installs an ActiveX control for IE or a browser plugin for Firefox that allows local file access, and that extension declares itself safe for scripting, then JavaScript could use that control to access files on the local file system.&lt;/p&gt; &lt;p&gt;In both IE and Firefox, XMLHttpRequest (XHR) is a native object exposed to JavaScript.&amp;nbsp; This is pretty obvious in IE6 since you have to construct the object using ActiveXObject; in Firefox you can deduce that the XHR is a native object&amp;nbsp;from the phrasing of some error messages and error behaviors while the browser goes down in flames.&lt;/p&gt; &lt;p&gt;XHR is restricted to connecting only to the current HTML page's domain of origin.&amp;nbsp; Domain lowering applies only to the browser sandbox.&amp;nbsp; XHR operates outside the browser sandbox, enforcing same-origin domain policy on its own. This leads to an interesting - and valuable - inconsistency:&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;XMLHttpRequest is not affected by domain lowering&lt;/strong&gt;.&amp;nbsp; &lt;/p&gt; &lt;p&gt;This means you can actually have one foot in each domain:&amp;nbsp; Your JavaScript executes in the context of the lowered subdomain (foo.com), but XHR requests made by your JavaScript are held to the domain restriction of the page's original subdomain (one.foo.com). XHR doesn't know anything about document.domain.&lt;/p&gt; &lt;p&gt;If you're trying to get your JavaScript to open an XHR to a resource on foo.com, this can be infuriating because XHR won't do it.&amp;nbsp; You have to refer to an HTML page served from foo.com in order to get XHR to open a connection to foo.com.&lt;/p&gt; &lt;h4&gt;The Money Shot&lt;/h4&gt; &lt;p&gt;This inconsistency in the handling of document.domain enforcement/awareness makes the following scenario possible:&amp;nbsp; The logic of your web app runs in the context of a page loaded from one.foo.com, and you want to XHR load data from two.foo.com.&lt;/p&gt; &lt;p&gt;Here's how you do that:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Make your&amp;nbsp;html page A served from one.foo.com lower&amp;nbsp;its document.domain to foo.com&lt;/li&gt; &lt;li&gt;Place an html page&amp;nbsp;B&amp;nbsp;on two.foo.com, and have it lower its document.domain to foo.com early in its load cycle.&amp;nbsp; (A JavaScript statement in&amp;nbsp;global scope&amp;nbsp;in the &amp;lt;head&amp;gt; section is fine).&amp;nbsp; &lt;/li&gt; &lt;li&gt;Implement a function GetData(callback) on this page that constructs an XHR request to load the desired data from two.foo.com.&amp;nbsp; Wire up the XHR onReadyStateChanged to process the data completion using a function implemented in B.html, and in that function pass the received data to the callback function passed into GetData().&lt;/li&gt; &lt;li&gt;Insert an invisible (1x1 pixel) iframe on page A and set its src to http://two.foo.com/B.html&lt;/li&gt; &lt;li&gt;After page A has fully loaded, and page B in the iframe has loaded, JavaScript code in page A can call the GetData() function in page B through the iframe element:&amp;nbsp; bframe.window.GetData(mycallback)&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Believe it or not, this works.&amp;nbsp;Domain lowering allows JavaScript to call between A and B, and the fact that B is served from two.foo.com allows the XHR request implemented in B to access two.foo.com.&lt;/p&gt; &lt;h4&gt;Here Be Pixies.&amp;nbsp; (Try Not To Piss Them Off)&lt;/h4&gt; &lt;p&gt;The path through this&amp;nbsp;murky&amp;nbsp;realm&amp;nbsp;is neither straight nor wide.&amp;nbsp; If you take liberties or shortcuts with this recipe, be careful to test your code thoroughly on multiple browsers.&amp;nbsp; Chances are high that any deviation will&amp;nbsp;lead to failure on one of the browsers.&amp;nbsp; &lt;/p&gt; &lt;p&gt;IE is fairly flexible in this area.&amp;nbsp; You don't actually have to implement the GetData function in the B page.&amp;nbsp; You can just construct in the&amp;nbsp;A context&amp;nbsp;an XHR object type&amp;nbsp;from the B context and use it directly in the A context.&amp;nbsp; ( var xhr = new bframe.window.XMLHttpRequest() )&amp;nbsp; For IE, the B page need only lower the domain to foo.com.&amp;nbsp; After that, all the driving can be done from A.&lt;/p&gt; &lt;p&gt;Firefox is more particular about this technique.&amp;nbsp; Firefox will allow you to construct an instance of the B XHR in the context of A, but you'll get access denied or weirder errors when you try to call the methods of the B XHR from the context of A.&amp;nbsp; Firefox gets confused when you&amp;nbsp;call native object methods across these convoluted domain bridges, but calling JavaScript functions and methods works fine on either side of the context boundary.&amp;nbsp; Once the JavaScript call context gets from A to B, then the native object method calls will work.&amp;nbsp;&lt;/p&gt; &lt;p&gt;This is also why step 3 above&amp;nbsp;mandates that the XHR onReadyStateChange event handler should be wired to a function implemented in the B page - the native XHR object operating in the B context&amp;nbsp;may have difficulty firing an event wired to a function in the A page context.&lt;/p&gt; &lt;h4&gt;The Downside to Homogeneity&lt;/h4&gt; &lt;p&gt;For domain lowering to work between two subdomains, both sides have to "lower their shields" to a common middle ground.&amp;nbsp;As this technique catches on across departments and their corresponding subdomains, you can quickly reach a point where just about all the subdomains on the corporate web have provisions to lower their domain to the common corporate parent domain.&lt;/p&gt; &lt;p&gt;This is convenient and quite powerful&amp;nbsp;for building web apps that can access data bits from all across the company.&amp;nbsp; The problem is that it weakens your corporate defenses across the board.&amp;nbsp; If just one of the subdomain silos&amp;nbsp;were compromised and an attacker were able to inject malicious JavaScript to execute in the browser context of that compromised subdomain, that malicious code would have easy access to every subdomain across the company that lowers its domain to foo.com.&lt;/p&gt; &lt;p&gt;This risk grows with scale.&amp;nbsp; The more subdomains you have that routinely lower their domains to the common ground, the greater the risk that one of them may be compromisable and serve as a&amp;nbsp;beachhead to your entire network.&lt;/p&gt; &lt;h4&gt;Tune In Next Time&lt;/h4&gt; &lt;p&gt;There is a way to mitigate this weakest link risk such that an attacker compromising a weak subdomain does not get access to everything.&amp;nbsp; This requires inverting some of the relationships presented in this article&amp;nbsp;and making the silos deeper rather than shallower.&amp;nbsp; I'll cover&amp;nbsp;"Siloed Domain Lowering"&amp;nbsp;in my next&amp;nbsp;cross-domain&amp;nbsp;article.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5180444" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Programming/">Programming</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/web/">web</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/cross+domain/">cross domain</category></item><item><title>TMobile HotSpot at Home Phones Get Smarter</title><link>http://blogs.msdn.com/b/dthorpe/archive/2007/09/27/tmobile-hotspot-at-home-phones-get-smarter.aspx</link><pubDate>Fri, 28 Sep 2007 03:07:28 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5175395</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dthorpe/rsscomments.aspx?WeblogPostID=5175395</wfw:commentRss><comments>http://blogs.msdn.com/b/dthorpe/archive/2007/09/27/tmobile-hotspot-at-home-phones-get-smarter.aspx#comments</comments><description>&lt;p&gt;TMobile &lt;a href="http://www.t-mobile.com/company/PressReleases_Article.aspx?assetName=Prs_Prs_20070925&amp;amp;title=T-Mobile%20and%20RIM%20Introduce%20BlackBerry%20Curve%208320%20With%20WI-FI%20Calling%20Feature"&gt;announced&lt;/a&gt; this week the addition of the Blackberry 8230 "Curve" to the list of cell phones supported by TMobile's HotSpot@Home WiFi phone service.&amp;nbsp; &lt;/p&gt; &lt;p&gt;This is a big step up in handset functionality over the minimalistic handsets that the service launched with earlier this year.&amp;nbsp; I'm very tempted to jump in, since the Blackberry can do web surfing and web email that I crave, but of course there are just two little things that would make it just perfect:&amp;nbsp; a smaller smartphone handset (the Curve is almost as wide as it is tall) and a smartphone handset that can run .NET CF applications.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Not that I've written any .NET CF apps lately, mind you, but just because I like having that option at my disposal.&amp;nbsp; I've endured locked phones before where the only thing you can do with the phone is what the cellular provider says you can do with it (thanks, Nextel) and I don't intend to go through that again.&lt;/p&gt; &lt;p&gt;Smartphone with WiFi calling...&amp;nbsp; Tempting, very tempting...&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5175395" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/gadgets/">gadgets</category></item><item><title>Halo 3 Launched!</title><link>http://blogs.msdn.com/b/dthorpe/archive/2007/09/24/halo-3-launched.aspx</link><pubDate>Mon, 24 Sep 2007 21:15:55 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5103608</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dthorpe/rsscomments.aspx?WeblogPostID=5103608</wfw:commentRss><comments>http://blogs.msdn.com/b/dthorpe/archive/2007/09/24/halo-3-launched.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://www.halo3.com"&gt;Halo 3&lt;/a&gt; has officially hit the streets!&amp;nbsp; Besides the game itself, check out the supporting info on the web, which happens to be implemented in Silverlight:&amp;nbsp; &lt;a href="http://www.microsoft.com/silverlight/halo3.aspx"&gt;http://www.microsoft.com/silverlight/halo3.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Having been out of the loop on the whole Halo series progression, I found the backstory and character summaries for Halo 3 very informative.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5103608" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Silverlight/">Silverlight</category></item><item><title>MIX07 UK Podcast with Craig Murphy</title><link>http://blogs.msdn.com/b/dthorpe/archive/2007/09/24/mix07-uk-podcast-with-craig-murphy.aspx</link><pubDate>Mon, 24 Sep 2007 20:37:18 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5102713</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dthorpe/rsscomments.aspx?WeblogPostID=5102713</wfw:commentRss><comments>http://blogs.msdn.com/b/dthorpe/archive/2007/09/24/mix07-uk-podcast-with-craig-murphy.aspx#comments</comments><description>&lt;p&gt;I sat down with &lt;a href="http://www.craigmurphy.com"&gt;Craig Murphy&lt;/a&gt; to &lt;a href="http://www.craigmurphy.com/blog/?p=692"&gt;chat about Windows Live and life in general&lt;/a&gt; at MIX07 UK.&amp;nbsp;&amp;nbsp;Craig has just posted&amp;nbsp;a &lt;a href="http://www.craigmurphy.com/blog/?p=692"&gt;podcast&lt;/a&gt; of that conversation.&amp;nbsp; &lt;/p&gt; &lt;p&gt;I've known Craig for many years through the Delphi community.&amp;nbsp; I think we first met in person in&amp;nbsp;2001 at "The Delphi Conference" run by the Borland User Group UK.&amp;nbsp;&amp;nbsp;Aha! Found&amp;nbsp;&lt;a href="http://www.facebook.com/photo.php?pid=178704&amp;amp;l=14c11&amp;amp;id=541062793"&gt;a photo&lt;/a&gt;.&amp;nbsp; Craig got his start&amp;nbsp;as one of the pillars of the Delphi developer community -&amp;nbsp;particularly at the Scottish end of the isles.&amp;nbsp;Today he provides much the same community organizing and informing service over a much broader swath of tech topics as a Microsoft MVP.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5102713" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Windows+Live/">Windows Live</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Blogging/">Blogging</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/events/">events</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/MIX07/">MIX07</category></item><item><title>MIX07 UK Blogging</title><link>http://blogs.msdn.com/b/dthorpe/archive/2007/09/14/mix07-uk-blogging.aspx</link><pubDate>Sat, 15 Sep 2007 06:54:51 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4922322</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dthorpe/rsscomments.aspx?WeblogPostID=4922322</wfw:commentRss><comments>http://blogs.msdn.com/b/dthorpe/archive/2007/09/14/mix07-uk-blogging.aspx#comments</comments><description>&lt;p&gt;The title of honorary MIX07 UK stenographer goes to &lt;a href="http://serialseb.blogspot.com/"&gt;Sebastien Lambla (aka SerialSeb)&lt;/a&gt;for transcribing nearly word for word just about every session he attended this week, in realtime!&amp;nbsp; Check out the detail in his notes on &lt;a href="http://serialseb.blogspot.com/2007/09/mixuk-07-building-next-generation-web.html"&gt;"Building Next Generation Web Applications using Windows Live Services"&lt;/a&gt;, for example.&amp;nbsp; He has half a dozen more posts on Mix07 UK just as detailed. Way to go SerialSeb! &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4922322" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Windows+Live/">Windows Live</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Blogging/">Blogging</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/events/">events</category></item><item><title>PodCast Interview on LiveSide.Net</title><link>http://blogs.msdn.com/b/dthorpe/archive/2007/09/14/podcast-interview-on-liveside-net.aspx</link><pubDate>Sat, 15 Sep 2007 06:20:42 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4921935</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dthorpe/rsscomments.aspx?WeblogPostID=4921935</wfw:commentRss><comments>http://blogs.msdn.com/b/dthorpe/archive/2007/09/14/podcast-interview-on-liveside-net.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/angus%5Flogan/"&gt;Angus&lt;/a&gt; and I had a &lt;a href="http://www.liveside.net/blogs/interview/archive/2007/09/14/windows-live-platform-interview-with-danny-thorpe-and-angus-logan.aspx"&gt;chat with the guys from LiveSide.Net&lt;/a&gt; during the MIX07 UK conference this week.&amp;nbsp; Check it out!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4921935" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Windows+Live/">Windows Live</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/events/">events</category></item><item><title>The Casual Traveler</title><link>http://blogs.msdn.com/b/dthorpe/archive/2007/09/11/the-casual-traveler.aspx</link><pubDate>Tue, 11 Sep 2007 13:29:26 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4863431</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dthorpe/rsscomments.aspx?WeblogPostID=4863431</wfw:commentRss><comments>http://blogs.msdn.com/b/dthorpe/archive/2007/09/11/the-casual-traveler.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/angus_logan/archive/2007/09/10/jet-lagged-like-an-amateur.aspx"&gt;Angus laments&lt;/a&gt; getting hit unusually hard by jet lag on this UK trip.&amp;nbsp; This is particularly amusing considering he's recently imported to Redmond from Australia and generally has far too much energy to safely occupy one body.&amp;nbsp; I suspect he owns&amp;nbsp;an espresso machine.&amp;nbsp; Possibly even USB powered and in his bag.&lt;/p&gt; &lt;p&gt;Angus's criteria for professional traveler struck me as odd.&amp;nbsp; Carry-on luggage?&amp;nbsp; What a drag.&amp;nbsp; I try to get rid of the bag as quickly as possible so I can enjoy the rest of the trip without wrenching a shoulder out of socket.&amp;nbsp; Alas, the laptop backpack is inescapable, but at least on personal travel I can trade the 10 pound company&amp;nbsp;brick&amp;nbsp;for something a little more svelte - my 1.8 pound &lt;a href="http://www.trustedreviews.com/notebooks/review/2004/06/03/Sony-VAIO-VGN-X505VP-Ultra-Slim-Notebook/p1"&gt;Sony X505&lt;/a&gt;.&amp;nbsp; Sure, waiting for baggage claim can be a drag, but that's what frequent flyer program expedited baggage services are for.&amp;nbsp; Besides, if&amp;nbsp;you're picking up a rental car you can usually take care of that checkin and&amp;nbsp;key pickup while the baggage handlers are getting your bag to the carousel.&lt;/p&gt; &lt;p&gt;Running&amp;nbsp;down the&amp;nbsp;gangway to get to the head of the passport control line?&amp;nbsp; Nah.&amp;nbsp;&amp;nbsp;A casual stroll gets you there almost as&amp;nbsp;fast, plus you get free entertainment watching&amp;nbsp;the rat race rushing by.&lt;/p&gt; &lt;p&gt;Rely on plastic rather than local currency?&amp;nbsp; Absolutely.&amp;nbsp; All major purchases can be done on the card in any modern&amp;nbsp;location - including magazines and snacks at airport kiosks.&amp;nbsp; It's still a good idea to have a little cash in pocket change for the impromptu street vendor purchase.&amp;nbsp; Skip the outrageous transaction fees and exchange rates at the Cambio kiosks at the airport.&amp;nbsp; Just find a cash machine on the Cirrus, Visa, or other US bank network and make an ATM withdrawal in local currency.&amp;nbsp; The exchange rates tend to be more reasonable and no transaction fees (from my bank, anyway).&amp;nbsp; &lt;/p&gt; &lt;p&gt;I've also noticed that the density of currency exchange kiosks in an airport is inversely proportional to the number of ATM machines.&amp;nbsp; Coincidence?&amp;nbsp; Hmm.&amp;nbsp; Gatwick is paved with exchange kiosks, but you'll be lucky to find an ATM before you get to Victoria station.&amp;nbsp; Schiphol has a much better proportion of ATM machines.&lt;/p&gt; &lt;p&gt;Overall, I guess I don't think of myself as a "professional traveler".&amp;nbsp; I do travel quite a bit, and a lot of it is work related, but I'm definitely not in the power traveler category.&amp;nbsp; Even packing for&amp;nbsp;most trips is a non-event.&amp;nbsp; Count the number of days away, grab a matching number of socks, underwear, shirts, etc.&amp;nbsp; Matching socks a plus.&amp;nbsp; Oh, and pants.&amp;nbsp; Pants good.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Making packing and trip preparation a non-event has become a bit of a sport at home.&amp;nbsp;&amp;nbsp;Lack of&amp;nbsp;preflight checks and rechecks&amp;nbsp;drives my wife nuts, which is entertaining in its own right.&lt;/p&gt; &lt;p&gt;However, the wife will have the last laugh on this trip.&amp;nbsp; It's been a long time since I've forgotten to pack something important, but on this trip I've left quite a few items at home - probably laid out on the bed but didn't make it into the suitcase.&amp;nbsp; The dog probably grabbed them.&amp;nbsp; Ya, that's it.&amp;nbsp; &lt;/p&gt; &lt;p&gt;The most irritating miss was forgetting my (&lt;a href="http://www.steves-digicams.com/2003_reviews/exs20.html"&gt;equally svelte&lt;/a&gt;) camera.&amp;nbsp; I made a point of moving it from its home in the laptop backpack to the charger the night before departure to make sure it had a full charge for the trip.&amp;nbsp; It didn't make it back into the backpack.&amp;nbsp; Next time, I'll just stick to the regular routine of packing the camera&amp;nbsp;and charger and topping it up in the hotel on arrival.&lt;/p&gt; &lt;p&gt;For critical trips, I'll do my homework and look up maps and so forth prior to departure.&amp;nbsp; For most trips, though, I just wing it.&amp;nbsp; Get a rail pass at the airport and figure out how to get to where I'm going by reading the rail map on the train.&amp;nbsp; Occasionally step off the train to take a look around, and&amp;nbsp;step back on the next train&amp;nbsp;a few&amp;nbsp;(5,&amp;nbsp;10,&amp;nbsp;30) minutes&amp;nbsp;later.&amp;nbsp;&amp;nbsp;Pay close attention to next train times if you venture out into the suburbs, as trains generally aren't as frequent in low&amp;nbsp;density areas as they are downtown.&amp;nbsp;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Taking it in as it happens makes the trip more interesting than racing around with blinders on.&amp;nbsp; It's a great way to make discoveries that aren't in any travel brochure.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4863431" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/travel/">travel</category></item><item><title>Blogging at ReMix07 London</title><link>http://blogs.msdn.com/b/dthorpe/archive/2007/09/11/blogging-at-remix07-london.aspx</link><pubDate>Tue, 11 Sep 2007 12:00:50 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4862994</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dthorpe/rsscomments.aspx?WeblogPostID=4862994</wfw:commentRss><comments>http://blogs.msdn.com/b/dthorpe/archive/2007/09/11/blogging-at-remix07-london.aspx#comments</comments><description>&lt;p&gt;I'm sitting next to Angus in the back row of the ReMix07 London keynote.&amp;nbsp; &lt;a href="http://blogs.msdn.com/angus_logan/archive/2007/09/11/blog-envy.aspx"&gt;Angus is blogging&lt;/a&gt;&amp;nbsp;in Windows Live Writer, and the guy on the other side of him is blogging in Windows Live Writer.&amp;nbsp;&amp;nbsp;Everyone loves a parade, so here I am blogging in&amp;nbsp;Windows Live Writer, too.&amp;nbsp; &lt;/p&gt; &lt;p&gt;It's times like these when I wish I had remembered to pack my camera.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4862994" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Blogging/">Blogging</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/events/">events</category></item><item><title>Halo 3 Promo Videos Running on Silverlight Streaming</title><link>http://blogs.msdn.com/b/dthorpe/archive/2007/09/04/halo-3-promo-videos-running-on-silverlight-streaming.aspx</link><pubDate>Tue, 04 Sep 2007 21:32:44 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4746893</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dthorpe/rsscomments.aspx?WeblogPostID=4746893</wfw:commentRss><comments>http://blogs.msdn.com/b/dthorpe/archive/2007/09/04/halo-3-promo-videos-running-on-silverlight-streaming.aspx#comments</comments><description>&lt;p&gt;The promotional campaign for the new &lt;a href="http://www.halo3.com/"&gt;Halo 3&lt;/a&gt; FPS has begun with a series of in-game and thematic live action videos.&amp;nbsp; High-def 2mbps videos are here:&amp;nbsp; &lt;a href="http://halo3.msn.com/videosHD.aspx"&gt;http://halo3.msn.com/videosHD.aspx&lt;/a&gt;&amp;nbsp; Lower bandwidth versions of the same are here:&amp;nbsp; &lt;a href="http://halo3.msn.com/videos.aspx"&gt;http://halo3.msn.com/videos.aspx&lt;/a&gt;&amp;nbsp; These are already on the msn boards and will be referenced by&amp;nbsp;additional promotional spots throughout the rollout.&amp;nbsp; &lt;/p&gt; &lt;p&gt;How is the Halo promotions team serving up video to tens of millions of viewers over the next few days and weeks?&amp;nbsp; With Silverlight Streaming!&amp;nbsp;The video player is built with &lt;a href="http://www.microsoft.com/silverlight/"&gt;Silverlight&lt;/a&gt;, and the video content is being served up by &lt;a href="http://dev.live.com/silverlight/"&gt;Silverlight Streaming&lt;/a&gt;.&amp;nbsp; (The last&amp;nbsp;of the HD vids are being moved to SLS this afternoon to better handle the traffic volume)&amp;nbsp; &lt;/p&gt; &lt;p&gt;Way to go team!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4746893" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Windows+Live/">Windows Live</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Silverlight/">Silverlight</category></item><item><title>MSN's The Podium 08 - Built On Silverlight</title><link>http://blogs.msdn.com/b/dthorpe/archive/2007/08/24/msn-s-the-podium-08-built-on-silverlight.aspx</link><pubDate>Sat, 25 Aug 2007 02:54:52 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4549717</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dthorpe/rsscomments.aspx?WeblogPostID=4549717</wfw:commentRss><comments>http://blogs.msdn.com/b/dthorpe/archive/2007/08/24/msn-s-the-podium-08-built-on-silverlight.aspx#comments</comments><description>&lt;p&gt;MSN just launched &lt;a href="http://election.msn.com/podium08.aspx"&gt;The Podium '08&lt;/a&gt;&amp;nbsp;as part of their 2008 US Presidential election coverage.&amp;nbsp; The Podium '08 brings together data on&amp;nbsp;presidential candidates for voters and election followers to&amp;nbsp;explore by topic and compare candidates head to head on specific issues.&lt;/p&gt; &lt;p&gt;What's interesting about The Podium is that the content is not canned editorial material.&amp;nbsp; When you select a candidate and click on a specific issue (say, Immigration) to see where the candidate stands on that issue, the list of articles displayed is actually drawn from Live Search on the fly.&amp;nbsp; As new articles appear on the web on these candidates and these topics, those articles&amp;nbsp;will&amp;nbsp;appear in&amp;nbsp;The Podium 08 for that candidate and topic.&lt;/p&gt; &lt;p&gt;The Podium 08 is built using&amp;nbsp;&lt;a href="http://www.microsoft.com/silverlight/"&gt;Silverlight&lt;/a&gt; 1.0 to present a slick, modern rich UI experience&amp;nbsp;that seamlessly and intelligently integrates services on the back-end.&amp;nbsp;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Want to&amp;nbsp;see what Software plus Services means to the average Joe?&amp;nbsp; Take a look at &lt;a href="http://election.msn.com/podium08.aspx"&gt;The Podium 08&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4549717" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Windows+Live/">Windows Live</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Mashups/">Mashups</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Programming/">Programming</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/web/">web</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Silverlight/">Silverlight</category></item><item><title>Where Have We Heard That Before?</title><link>http://blogs.msdn.com/b/dthorpe/archive/2007/08/24/where-have-we-heard-that-before.aspx</link><pubDate>Sat, 25 Aug 2007 00:55:27 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4548705</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dthorpe/rsscomments.aspx?WeblogPostID=4548705</wfw:commentRss><comments>http://blogs.msdn.com/b/dthorpe/archive/2007/08/24/where-have-we-heard-that-before.aspx#comments</comments><description>&lt;p&gt;Yesterday the Seattle Times ran an &lt;a href="http://archives.seattletimes.nwsource.com/cgi-bin/texis.cgi/web/vortex/display?slug=pennyarcade230&amp;amp;date=20070823&amp;amp;query=microsoft"&gt;article&lt;/a&gt;&amp;nbsp;about &lt;a href="http://www.penny-arcade.com/"&gt;Penny Arcade&lt;/a&gt; and the overnight success of the &lt;a href="http://www.pennyarcadeexpo.com/"&gt;Penny Arcade Expo&lt;/a&gt;.&amp;nbsp; I had to laugh a little when the article used the words "imploded" and "E3" in the same sentence.&amp;nbsp; I used pretty much the same pairing of words back in my January &lt;a href="http://blogs.msdn.com/dthorpe/archive/2007/01/10/2007-events-calendar.aspx"&gt;2007 Events Calendar&lt;/a&gt; post.&lt;/p&gt; &lt;p&gt;The Seattle Times article has more timely data than that January post, naturally.&amp;nbsp; PAX2007 is expecting some 30,000 people through its doors this weekend.&amp;nbsp; Thirty Thousand!&amp;nbsp; Jiminy Cricket!&amp;nbsp; PAX2005 was only 1500 or so people (and 3x the expected turnout even then).&lt;/p&gt; &lt;p&gt;&lt;strong&gt;E3&amp;nbsp;Dies Again&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;In other news, &lt;a href="http://www.firingsquad.com/news/newsarticle.asp?searchid=17082"&gt;FiringSquad reports&lt;/a&gt; that the new event that came out of nowhere, E for All Expo, is having trouble attracting major exhibitors.&amp;nbsp; Sony is not interested, Microsoft is noncommittal.&amp;nbsp; The only player signed up so far is Nintendo.&amp;nbsp; E for All Expo is the brainchild of IDC, the very makers and destroyers of the late great E3 Expo.&amp;nbsp; If this is IDC's attempt to rectify their choice to kill consumer access to E3, it sounds like the vendors are not playing ball.&amp;nbsp; And why should they?&amp;nbsp; IDC has a terrible track record with the consumer market.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4548705" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/events/">events</category></item><item><title>Windows Live SkyDrive</title><link>http://blogs.msdn.com/b/dthorpe/archive/2007/08/15/windows-live-skydrive.aspx</link><pubDate>Wed, 15 Aug 2007 21:58:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4403471</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dthorpe/rsscomments.aspx?WeblogPostID=4403471</wfw:commentRss><comments>http://blogs.msdn.com/b/dthorpe/archive/2007/08/15/windows-live-skydrive.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://skydrive.live.com"&gt;Windows Live SkyDrive&lt;/a&gt; (formerly known as Folders) is now in beta, enabling end users to store arbitrary data on the web under password access control.&amp;nbsp; Files can be accessed over http(s) from web pages and from stand-alone client applications (thanks to the http file handler add-on in XPSP2).&amp;nbsp; Files can be private to your Windows LiveID only, shared with other specific users (via their Windows LiveID), or publicly accessible to everyone on the Internet, anonymously.&lt;/p&gt; &lt;p&gt;The layout feels similar to SharePoint, with web-based directory trees and file metadata browsing and editing.&amp;nbsp; There's no mention of drive letter mapping (ala file shares) in the SkyDrive intro docs, but I'm sure someone will create a utility to map your private SkyDrive folder to a local drive letter.&amp;nbsp; It'd certainly be a slick way to shortcut the traditional file upload process.&lt;/p&gt; &lt;p&gt;SkyDrive isn't a web host - it's not intended to be the place from which you run a web app (html content), but you can store files in SkyDrive that are&amp;nbsp;referenced by your web app running on your own server or hosted provider. Browser cross-domain barriers stilly apply: you can easily reference JavaScript or image files stored on your SkyDrive from your web site, but the JavaScript in your web pages will not be able to read or write the SkyDrive files directly because they reside in a different domain than your web app.&lt;/p&gt; &lt;p&gt;You can link to individual files in your SkyDrive storage using plain old URLs, like this: &lt;a href="http://cid-96c2e8efd844bbf0.skydrive.live.com/self.aspx/Public/Paradoxes%20in%20Web%20App%20Development.ppt"&gt;Paradoxes in Web App Development&lt;/a&gt;&amp;nbsp;or you can embed a "badge" for the file in your web page in a couple of different styles,&amp;nbsp;like this:&lt;/p&gt; &lt;p&gt;&lt;iframe style="border-right: #dde5e9 1px solid; padding-right: 0px; border-top: #dde5e9 1px solid; padding-left: 0px; padding-bottom: 0px; margin: 3px; border-left: #dde5e9 1px solid; width: 240px; padding-top: 0px; border-bottom: #dde5e9 1px solid; height: 66px; background-color: #ffffff" marginwidth="0" marginheight="0" src="http://cid-96c2e8efd844bbf0.skydrive.live.com/embedrowdetail.aspx/Public/Paradoxes%20in%20Web%20App%20Development.ppt" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;or this: &lt;/p&gt; &lt;p&gt;&lt;iframe style="border-right: #dde5e9 1px solid; padding-right: 0px; border-top: #dde5e9 1px solid; padding-left: 0px; padding-bottom: 0px; margin: 3px; border-left: #dde5e9 1px solid; width: 240px; padding-top: 0px; border-bottom: #dde5e9 1px solid; height: 26px; background-color: #ffffff" marginwidth="0" marginheight="0" src="http://cid-96c2e8efd844bbf0.skydrive.live.com/embedrow.aspx/Public/Paradoxes%20in%20Web%20App%20Development.ppt" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;You can also embed a folder to direct&amp;nbsp;viewers to whole directories of related file content:&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;iframe style="border-right: #dde5e9 1px solid; padding-right: 0px; border-top: #dde5e9 1px solid; padding-left: 0px; padding-bottom: 0px; margin: 3px; border-left: #dde5e9 1px solid; width: 240px; padding-top: 0px; border-bottom: #dde5e9 1px solid; height: 66px; background-color: #ffffff" marginwidth="0" marginheight="0" src="http://cid-96c2e8efd844bbf0.skydrive.live.com/embedrowdetail.aspx/Public/" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt; &lt;p&gt;This will make it a &lt;strong&gt;lot&lt;/strong&gt; easier to post presentation slide decks, podcasts, code samples and demo app source code for blog articles!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4403471" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Windows+Live/">Windows Live</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Programming/">Programming</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Blogging/">Blogging</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/web/">web</category></item><item><title>New In The Windows Live Contacts Control: Incremental Search!</title><link>http://blogs.msdn.com/b/dthorpe/archive/2007/08/08/new-in-the-windows-live-contacts-control-incremental-search.aspx</link><pubDate>Thu, 09 Aug 2007 01:01:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4298289</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dthorpe/rsscomments.aspx?WeblogPostID=4298289</wfw:commentRss><comments>http://blogs.msdn.com/b/dthorpe/archive/2007/08/08/new-in-the-windows-live-contacts-control-incremental-search.aspx#comments</comments><description>&lt;p&gt;Another month, another release!&amp;nbsp; This month we've added incremental search to the contacts and presence controls to make it easier to find a particular contact in your haystack of hundreds of family, friends, and coworkers.&amp;nbsp; Just type in a few letters of the name or word you're looking for, and the control will reduce the list of displayed contacts to only those that contain that letter sequence, anywhere in the contact display name, case insensitive.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Check it out in our little control testbed apps:&amp;nbsp; &lt;a href="http://dev.live.com/mashups/trycontactscontrol"&gt;http://dev.live.com/mashups/trycontactscontrol&lt;/a&gt; and &lt;a href="http://dev.live.com/mashups/trypresencecontrol"&gt;http://dev.live.com/mashups/trypresencecontrol&lt;/a&gt;&lt;/p&gt; &lt;p&gt;While we were at it, we also added support for filtering the&amp;nbsp;list by group as well.&amp;nbsp; Click on the dropdown button to the right of the search box to select from a list of groups you have defined in your addressbook.&amp;nbsp; In the Contacts Control in tile view, you can also filter by online state, to display only your buddies that are online, for example.&lt;/p&gt; &lt;p&gt;We've cleaned up the control UI a bit, too.&amp;nbsp;The info panel below the contacts list didn't get favorable reviews from the field, so&amp;nbsp;we've removed it&amp;nbsp;to make room for displaying more contacts in our always-cramped-for-display-real-estate web control.&amp;nbsp; The edit and delete buttons that bordered the info panel have been moved to the display contact details page.&amp;nbsp; You really ought to review the details before editing or deleting anyway, so putting them all on the same page makes sense.&lt;/p&gt; &lt;p&gt;What do you need to do to pick up these new features?&amp;nbsp; Nothing!&amp;nbsp; It's an inline release on the v0.3 version.&amp;nbsp; As long as you're referencing &lt;a href="http://controls.services.live.com/scripts/base/v0.3/live.js"&gt;http://controls.services.live.com/scripts/base/v0.3/live.js&lt;/a&gt;&amp;nbsp;and &lt;a href="http://controls.services.live.com/scripts/base/v0.3/controls.js"&gt;http://controls.services.live.com/scripts/base/v0.3/controls.js&lt;/a&gt;&amp;nbsp;in your web page, you'll get these enhancements and refinements for free.&lt;/p&gt; &lt;p&gt;Enjoy!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4298289" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Windows+Live/">Windows Live</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Programming/">Programming</category></item><item><title>Black Pixels Cost Less?</title><link>http://blogs.msdn.com/b/dthorpe/archive/2007/08/03/black-pixels-cost-less.aspx</link><pubDate>Fri, 03 Aug 2007 21:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4209635</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dthorpe/rsscomments.aspx?WeblogPostID=4209635</wfw:commentRss><comments>http://blogs.msdn.com/b/dthorpe/archive/2007/08/03/black-pixels-cost-less.aspx#comments</comments><description>&lt;P&gt;I was recently introduced to a Google search wrapper called &lt;A href="http://www.blackle.com/" mce_href="http://www.blackle.com"&gt;www.blackle.com&lt;/A&gt;.&amp;nbsp; It's sole claim to fame is that it displays a Google-like search page, but with a background color of black.&amp;nbsp; Why?&amp;nbsp; Blackle.com &lt;A href="http://www.blackle.com/about/" mce_href="http://www.blackle.com/about/"&gt;claims&lt;/A&gt; that black pixels require less energy to display than white pixels, so if everyone who uses Google were to see a black screen instead of white, the world would collectively save upwards of "&lt;A href="http://ecoiron.blogspot.com/2007/01/black-google-would-save-3000-megawatts.html" mce_href="http://ecoiron.blogspot.com/2007/01/black-google-would-save-3000-megawatts.html"&gt;750 megawatt-hours per year&lt;/A&gt;" of electricity.&lt;/P&gt;
&lt;P&gt;Those are grand claims.&amp;nbsp; While the sentiment to save energy and reduce environmental impact&amp;nbsp;is well placed, I was skeptical.&lt;/P&gt;
&lt;P&gt;So, I dug out my only CRT monitor from the closet and hooked it up to my &lt;A href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2FP3-International-Kill-Electricity-Monitor%2Fdp%2FB00009MDBU%3Fie%3DUTF8%26s%3Delectronics%26qid%3D1186164503%26sr%3D8-1&amp;amp;tag=dthorpe-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=9325" mce_href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2FP3-International-Kill-Electricity-Monitor%2Fdp%2FB00009MDBU%3Fie%3DUTF8%26s%3Delectronics%26qid%3D1186164503%26sr%3D8-1&amp;amp;tag=dthorpe-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=9325"&gt;Kill-A-Watt&lt;/A&gt;&lt;IMG style="MARGIN: 0px; BORDER-TOP-STYLE: none! important; BORDER-RIGHT-STYLE: none! important; BORDER-LEFT-STYLE: none! important; BORDER-BOTTOM-STYLE: none! important" height=1 alt="" src="http://www.assoc-amazon.com/e/ir?t=dthorpe-20&amp;amp;l=ur2&amp;amp;o=1" width=1 border=0 mce_src="http://www.assoc-amazon.com/e/ir?t=dthorpe-20&amp;amp;l=ur2&amp;amp;o=1"&gt; power meter and my laptop's external video connector.&amp;nbsp; For a white screen, I used an Outlook message editor window, maximized.&amp;nbsp; For a black screen, I used a cmd prompt window, maximized.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Nokia 447x 21 inch CRT:&amp;nbsp; Black screen:&amp;nbsp; 75 watts.&amp;nbsp;&amp;nbsp; White screen:&amp;nbsp; 101 watts.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;On the surface, these results appear to support the claims and pie-in-the-sky global estimates.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;However, there's a catch.&lt;/P&gt;
&lt;P&gt;Look at the results for an LCD monitor:&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Samsung 21 inch LCD&amp;nbsp;model 204B:&amp;nbsp; Black screen:&amp;nbsp;&amp;nbsp;36 watts.&amp;nbsp;&amp;nbsp; White screen:&amp;nbsp;&amp;nbsp;36 watts.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;LCD screens use fluorescent (or recently, LED) backlights to illuminate the screen.&amp;nbsp; The backlights consume the same amount of power regardless of whether the LCD crystals are showing black pixels or white pixels.&amp;nbsp; If anything, LCDs have to work harder to show black pixels because they are flooded with white light.&amp;nbsp; In a CRT, black is the default state and the CRT has to work to make a white pixel.&lt;/P&gt;
&lt;P&gt;LCD screens have been outselling CRTs for many years now.&amp;nbsp; &lt;A href="http://news.zdnet.com/2100-9584_22-6033967.html" mce_href="http://news.zdnet.com/2100-9584_22-6033967.html"&gt;Laptops surpassed desktop sales&lt;/A&gt; years ago.&amp;nbsp; I don't know if there are already more LCD's in the field than CRTs, but it's clearly the case that LCDs are growing while CRTs are in decline.&amp;nbsp; Odds are, you're reading this text on an LCD screen.&lt;/P&gt;
&lt;P&gt;While it's true that a black&amp;nbsp;pixels consumes less power than a white&amp;nbsp;pixels on a CRT screen,&amp;nbsp;pixel color&amp;nbsp;has no effect on LCD power consumption.&amp;nbsp; Given that LCDs are a large and growing&amp;nbsp;(and possibly&amp;nbsp;majority)&amp;nbsp;portion of the global monitor population, the power savings&amp;nbsp;claimed by blackle.com is a case of diminishing returns.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4209635" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/gadgets/">gadgets</category></item><item><title>Custom Colors in the Windows Live Web Controls</title><link>http://blogs.msdn.com/b/dthorpe/archive/2007/06/28/custom-colors-in-the-windows-live-web-controls.aspx</link><pubDate>Fri, 29 Jun 2007 01:26:42 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3593218</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dthorpe/rsscomments.aspx?WeblogPostID=3593218</wfw:commentRss><comments>http://blogs.msdn.com/b/dthorpe/archive/2007/06/28/custom-colors-in-the-windows-live-web-controls.aspx#comments</comments><description>&lt;p&gt;The Windows Live Web Controls now support custom colors!&amp;nbsp; The &lt;a href="http://dev.live.com/contactscontrol/"&gt;Windows Live Contacts web control&lt;/a&gt; and &lt;a href="http://dev.live.com/spacescontrol"&gt;Windows Live Spaces web control&lt;/a&gt; now accept additional parameters to specify the text and background colors of the inner and outer regions of the controls so that you can "skin" the controls to more naturally blend in with your web site's color scheme.&lt;/p&gt; &lt;p&gt;So you can now do this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dthorpe/WindowsLiveWriter/CustomColorsintheWindowsLiveWebControls_D939/image%7B0%7D%5B6%5D.png" atomicselection="true"&gt;&lt;img height="313" src="http://blogs.msdn.com/blogfiles/dthorpe/WindowsLiveWriter/CustomColorsintheWindowsLiveWebControls_D939/image%7B0%7D_thumb%5B4%5D.png" width="212"&gt;&lt;/a&gt; &lt;a href="http://blogs.msdn.com/blogfiles/dthorpe/WindowsLiveWriter/CustomColorsintheWindowsLiveWebControls_D939/image%7B0%7D%5B13%5D.png" atomicselection="true"&gt;&lt;img height="314" src="http://blogs.msdn.com/blogfiles/dthorpe/WindowsLiveWriter/CustomColorsintheWindowsLiveWebControls_D939/image%7B0%7D_thumb%5B7%5D.png" width="212"&gt;&lt;/a&gt; &lt;a href="http://blogs.msdn.com/blogfiles/dthorpe/WindowsLiveWriter/CustomColorsintheWindowsLiveWebControls_D939/image%7B0%7D%5B14%5D.png" atomicselection="true"&gt;&lt;img height="311" src="http://blogs.msdn.com/blogfiles/dthorpe/WindowsLiveWriter/CustomColorsintheWindowsLiveWebControls_D939/image%7B0%7D_thumb%5B8%5D.png" width="209"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;We use the term "inner" and "outer" because the inner region serves slightly different purposes in the different controls.&amp;nbsp; In the Contacts Control's list view, the inner region is the listbox containing the scrollable list of contacts.&amp;nbsp; In tile view, it's a list of contact photo tiles.&amp;nbsp; In the Spaces Control, it's a list of photo thumbnails.&lt;/p&gt; &lt;p&gt;The Windows Live logo banner is now a transparent PNG with an alpha blended halo to provide contrast against any background color.&lt;/p&gt; &lt;p&gt;The color parameters are:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;OuterBackgroundColor&lt;/li&gt; &lt;li&gt;OuterTextColor&lt;/li&gt; &lt;li&gt;InnerBackgroundColor&lt;/li&gt; &lt;li&gt;InnerTextColor&lt;/li&gt; &lt;li&gt;LinkColor&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;These color parameters determine the screen color for everything&amp;nbsp;in the controls displayed in-situ on your host page&amp;nbsp;except for the submit button, the scrollbar, the piping and the Windows Live logo.&amp;nbsp; Popup windows for Windows Live login or user confirmations, error messages, and user prompts&amp;nbsp;are not affected by custom colors.&lt;/p&gt; &lt;p&gt;The color values you can assign to these color parameters follow the &lt;a href="http://www.w3.org/TR/REC-CSS1#color-units"&gt;W3C CSS color specification&lt;/a&gt;:&amp;nbsp; 15 color names, plus hexadecimal notation (#FFFFFF), plus RGB octets notation ("rgb(255,255,255)").&lt;/p&gt; &lt;p&gt;The "try*" demo apps have also been updated to&amp;nbsp;help you configure the colors interactively and see how they look:&amp;nbsp; &lt;a href="http://dev.live.com/mashups/trycontactscontrol"&gt;trycontactscontrol&lt;/a&gt;, &lt;a href="http://dev.live.com/mashups/trypresencecontrol"&gt;trypresencecontrol&lt;/a&gt;, &lt;a href="http://dev.live.com/mashups/trystoragecontrol"&gt;trystoragecontrol&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Enjoy!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3593218" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Windows+Live/">Windows Live</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Programming/">Programming</category></item><item><title>T-Mobile Rolls Out WiFi Cell Support</title><link>http://blogs.msdn.com/b/dthorpe/archive/2007/06/28/t-mobile-rolls-out-wifi-cell-support.aspx</link><pubDate>Fri, 29 Jun 2007 00:27:26 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3591497</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dthorpe/rsscomments.aspx?WeblogPostID=3591497</wfw:commentRss><comments>http://blogs.msdn.com/b/dthorpe/archive/2007/06/28/t-mobile-rolls-out-wifi-cell-support.aspx#comments</comments><description>&lt;p&gt;At last!&amp;nbsp; &lt;a href="http://www.tmobile.com"&gt;T-Mobile&lt;/a&gt; has rolled out their long-awaited &lt;a href="http://www.theonlyphoneyouneed.com/"&gt;HotSpot @Home&lt;/a&gt; service nationwide.&amp;nbsp; This enables you to make and receive cellphone calls over WiFi networks when in range of a WiFi access point and seamlessly transfer calls between&amp;nbsp;WiFi and cellular networks.&amp;nbsp; The service also&amp;nbsp;includes WiFi access through thousands of T-Mobile HotSpots at&amp;nbsp;cafes and public places&amp;nbsp;across the US.&amp;nbsp;&lt;/p&gt; &lt;p&gt;The big win is that this should go a long way towards addressing poor cellular signal strength inside homes and office buildings.&amp;nbsp; I can get one or two bars of radio signal in the yard at home, but barely one bar inside the house, and only in one room, with one arm out the window.&amp;nbsp; As for WiFi, our house virtually glows with A and G.&lt;/p&gt; &lt;p&gt;The only caveat to this new service is that it only works with two specially equipped phones offered by T-Mobile, and the phone features are nothing to write home about.&amp;nbsp; No smartphones are supported yet.&amp;nbsp; And apparently, even smartphones that already have WiFi&amp;nbsp;hardware (such as the Dash) are not supported by the HotSpot @Home service.&amp;nbsp; &lt;a href="http://www.phonescoop.com/articles/tmo_hotspot_at_home/"&gt;PhoneScoop has an in depth review&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;As much as I want the @Home WiFi service, I can't make the leap until more capable handsets are supported.&amp;nbsp; My wife wouldn't be offended by lack of handset features, though, so I might switch hers over to HotSpot @Home first.&amp;nbsp; If it works well over WiFi at home, we might actually retire our VOIP service in favor of T-Mobile HotSpot @Home.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3591497" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/gadgets/">gadgets</category></item><item><title>ZeroGravity: Casual Gaming in Silverlight</title><link>http://blogs.msdn.com/b/dthorpe/archive/2007/06/27/zerogravity-casual-gaming-in-silverlight.aspx</link><pubDate>Wed, 27 Jun 2007 23:35:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3569826</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dthorpe/rsscomments.aspx?WeblogPostID=3569826</wfw:commentRss><comments>http://blogs.msdn.com/b/dthorpe/archive/2007/06/27/zerogravity-casual-gaming-in-silverlight.aspx#comments</comments><description>&lt;p&gt;Looks like the folks at &lt;a href="http://www.terralever.com"&gt;terralever&lt;/a&gt; are going full-bore on &lt;a href="http://www.microsoft.com/silverlight/"&gt;Silverlight&lt;/a&gt;:&amp;nbsp; They've implemented a delightfully addictive puzzle game called &lt;a href="http://www.ltbennett.com/"&gt;ZeroGravity&lt;/a&gt; using the Silverlight 1.1 Alpha runtime. Check it out!&lt;/p&gt; &lt;p&gt;It'll be interesting to see how long before my #5 high score (9997) rolls out of the top ten.&amp;nbsp; &lt;/p&gt; &lt;p&gt;via &lt;a href="http://timheuer.com/blog/archive/2007/06/26/zerogravity.aspx"&gt;Tim Heuer&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3569826" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Silverlight/">Silverlight</category></item><item><title>LinkedIn to Add an API?</title><link>http://blogs.msdn.com/b/dthorpe/archive/2007/06/25/linkedin-to-add-an-api.aspx</link><pubDate>Mon, 25 Jun 2007 19:38:39 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3522811</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dthorpe/rsscomments.aspx?WeblogPostID=3522811</wfw:commentRss><comments>http://blogs.msdn.com/b/dthorpe/archive/2007/06/25/linkedin-to-add-an-api.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://blogs.zdnet.com/BTL/?p=5482"&gt;Dan Farber&lt;/a&gt; writes that &lt;a href="http://www.linkedin.com/"&gt;LinkedIn&lt;/a&gt;'s Chairman, Reid Hoffman, has commented that he plans to roll out developer APIs to access the LinkedIn contacts database.&amp;nbsp; Great news!&lt;/p&gt; &lt;p&gt;The downside:&amp;nbsp; It won't be ready until 2008.&amp;nbsp; Bummer.&amp;nbsp; How&amp;nbsp;much further&amp;nbsp;will the other social networks have outpaced LinkedIn by then?&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3522811" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Blogging/">Blogging</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/web/">web</category></item><item><title>Secure Cross-Domain Communication:  The Architecture Journal</title><link>http://blogs.msdn.com/b/dthorpe/archive/2007/06/18/secure-cross-domain-communication-the-architecture-journal.aspx</link><pubDate>Tue, 19 Jun 2007 01:53:50 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3392059</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dthorpe/rsscomments.aspx?WeblogPostID=3392059</wfw:commentRss><comments>http://blogs.msdn.com/b/dthorpe/archive/2007/06/18/secure-cross-domain-communication-the-architecture-journal.aspx#comments</comments><description>&lt;p&gt;The June issue (Journal 12) of &lt;a href="http://msdn2.microsoft.com/en-us/arcjournal/default.aspx"&gt;The Architecture Journal&lt;/a&gt;&amp;nbsp;focuses on web architecture.&amp;nbsp; I was delighted to be invited to contribute, and wrote "Secure Cross-Domain Communication in the Browser" for this issue.&amp;nbsp;&amp;nbsp;In the article I&amp;nbsp;describe&amp;nbsp;a&amp;nbsp;somewhat bizarre technique we use in the&amp;nbsp;&lt;a href="http://dev.live.com/contactscontrol/"&gt;Windows Live Contacts web control&lt;/a&gt; and &lt;a href="http://dev.live.com/spacescontrol"&gt;Windows Live Spaces web control&lt;/a&gt; to move data from HTML pages running on&amp;nbsp;*.live.com to and from third party web sites.&amp;nbsp; This is how the contacts control returns&amp;nbsp;user-selected contact data to the page hosting the control, a web site that is not a Microsoft site.&amp;nbsp;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The print edition of &lt;a href="http://download.microsoft.com/download/f/5/2/f520c83a-d2ed-4be8-9bc6-b39a1f9a4562/AJ12_EN.zip"&gt;Journal 12&lt;/a&gt; is out already and was handed out at TechEd in Orlando&amp;nbsp;earlier this month.&amp;nbsp; You can request&amp;nbsp;a print copy by registering on the Journal's web site, or you can just &lt;a href="http://download.microsoft.com/download/f/5/2/f520c83a-d2ed-4be8-9bc6-b39a1f9a4562/AJ12_EN.zip"&gt;grab the PDF&lt;/a&gt; and read it on-screen.&amp;nbsp;&amp;nbsp;Journal 12&amp;nbsp;will&amp;nbsp;rotate into the headlines on the Journal's homepage soon.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/dthorpe/archive/2007/05/31/quot-undisclosed-browser-technology-quot.aspx"&gt;A few posts ago&lt;/a&gt; I mentioned I could finally reveal &lt;a href="http://blogs.msdn.com/dthorpe/archive/2007/05/31/quot-undisclosed-browser-technology-quot.aspx"&gt;what I had been working on at Google&lt;/a&gt;.&amp;nbsp; Now I can also tell you in exquisite detail what I've been working on here at Microsoft for the past year and foreseeable future:&amp;nbsp; cross-domain browser communication techniques.&amp;nbsp; Coaxing stubborn little bits to migrate through impenetrable browser&amp;nbsp;barriers.&amp;nbsp; &lt;/p&gt; &lt;p&gt;"Secure Cross-Domain Communication in the Browser"&amp;nbsp;is a high-level walk-through of the iframe URL technique of passing information between domain contexts in the browser, it's limitations and weaknesses, and the approach we've taken to build a channel communications library to fortify against those weaknesses and limitations.&lt;/p&gt; &lt;p&gt;Over the next few weeks I will be posting here on&amp;nbsp;&lt;a href="http://blogs.msdn.com/dthorpe/"&gt;Windows Live Quantum Mechanics&lt;/a&gt;&amp;nbsp;a series of articles&amp;nbsp;digging into the nitty gritty of cross-domain communication, why it has been&amp;nbsp;taboo&amp;nbsp;in the browser, why it's time to change that perception, and techniques and code you can use today to achieve it - without compromising security or server scalability.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Cross domain communication would be much easier with the browser's help and shepherding, but with a little bit of effort we can actually do quite a bit today - safely -&amp;nbsp;in spite of the browser's objections.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3392059" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Windows+Live/">Windows Live</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Programming/">Programming</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Blogging/">Blogging</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/cross+domain/">cross domain</category></item><item><title>Windows Live Web Controls Mix07 Video</title><link>http://blogs.msdn.com/b/dthorpe/archive/2007/06/18/windows-live-web-controls-mix07-video.aspx</link><pubDate>Mon, 18 Jun 2007 21:40:23 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3388452</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dthorpe/rsscomments.aspx?WeblogPostID=3388452</wfw:commentRss><comments>http://blogs.msdn.com/b/dthorpe/archive/2007/06/18/windows-live-web-controls-mix07-video.aspx#comments</comments><description>&lt;p&gt;In the better late than never department, a video interview with Koji and me from the week prior to MIX07 is now posted on Channel 9:&amp;nbsp; &lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=317385"&gt;http://channel9.msdn.com/ShowPost.aspx?PostID=317385&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Yay!&amp;nbsp; Thanks Catherine for pushing it on through.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3388452" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Windows+Live/">Windows Live</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/events/">events</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/MIX07/">MIX07</category></item><item><title>New Domains for Windows Live Web Controls</title><link>http://blogs.msdn.com/b/dthorpe/archive/2007/06/14/new-domains-for-windows-live-web-controls.aspx</link><pubDate>Fri, 15 Jun 2007 00:42:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3298049</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dthorpe/rsscomments.aspx?WeblogPostID=3298049</wfw:commentRss><comments>http://blogs.msdn.com/b/dthorpe/archive/2007/06/14/new-domains-for-windows-live-web-controls.aspx#comments</comments><description>&lt;P&gt;Our little web controls are growing up so fast!&amp;nbsp;We've migrated the &lt;a href="http://dev.live.com/contactscontrol/"&gt;Windows Live Contacts web control&lt;/a&gt; and &lt;a href="http://dev.live.com/spacescontrol"&gt;Windows Live Spaces web control&lt;/a&gt; to new servers&amp;nbsp;in the Microsoft datacenters and a new domain name: &lt;STRONG&gt;controls.services.live.com&lt;/STRONG&gt;.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The web controls will continue to work on the old domain name (dev.live.com) during the beta period for existing apps, but you should consider updating your web apps to use the new&amp;nbsp;URL as soon as possible.&amp;nbsp; Why?&amp;nbsp; Better performance!&amp;nbsp; The new configuration serves up the controls faster than ever.&lt;/P&gt;
&lt;P&gt;Moving to new physical servers in the Microsoft data centers could have been done without a code-breaking domain name change (the old servers were not in MS data centers, fwiw), but we decided now was the best time to bite the bullet and make the domain name change.&amp;nbsp;&amp;nbsp;The new controls.services.live.com&amp;nbsp;domain name aligns with the Windows Live Services platform map rolled out at MIX07 this past April,&amp;nbsp;and allows us to make&amp;nbsp;a clean separation between information content and live web services.&amp;nbsp; dev.live.com will continue to be the developer information portal on how to use Windows Live services in your applications. The actual services your code talks to will&amp;nbsp;be under *.services.live.com.&amp;nbsp; This will also help prevent sudden surges in web traffic on the content site from affecting the performance of the web services themselves.&lt;/P&gt;
&lt;H4&gt;Make the Switch&lt;/H4&gt;
&lt;P&gt;To switch your web apps to use the new servers, you need to change script tags referencing&amp;nbsp;&lt;EM&gt;dev.live.com&lt;/EM&gt; to &lt;EM&gt;controls.services.live.com&lt;/EM&gt;, and change &lt;EM&gt;v0.2&lt;/EM&gt; to &lt;EM&gt;v0.3&lt;/EM&gt; in the URL path:&lt;PRE&gt;&amp;lt;script type="text/javascript" &lt;BR&gt;src="http://&lt;STRONG&gt;dev.live.com&lt;/STRONG&gt;/scripts/base/&lt;STRONG&gt;v0.2&lt;/STRONG&gt;/live.js"&amp;gt;&lt;/PRE&gt;
&lt;P&gt;becomes&lt;/P&gt;&lt;PRE&gt;&amp;lt;script type="text/javascript" &lt;BR&gt;src="http://&lt;STRONG&gt;controls.services.live.com&lt;/STRONG&gt;/scripts/base/&lt;STRONG&gt;v0.3&lt;/STRONG&gt;/live.js"&amp;gt;&lt;/PRE&gt;
&lt;P&gt;In addition, if your code still references &lt;EM&gt;http://dev.live.com/scripts/&lt;STRONG&gt;contacts&lt;/STRONG&gt;/v0.2/control.js&lt;/EM&gt;, change that to &lt;EM&gt;http://controls.services.live.com/scripts/&lt;STRONG&gt;base&lt;/STRONG&gt;/v0.3/control&lt;STRONG&gt;s&lt;/STRONG&gt;.js&lt;/EM&gt;.&amp;nbsp; Note that the old file was singular "control", whereas the new version is plural "controls".&amp;nbsp; The old file (singular) only knew how to bootstrap the Contacts control.&amp;nbsp; The new file (plural) has been refactored so that it can recognize and bootstrap multiple different Windows Live web controls on a page.&amp;nbsp;&amp;nbsp;One script reference to rule them all and in the darkness bind them. Or something like that.&lt;/P&gt;
&lt;P&gt;While you're cleaning out cobwebs, it'd be a good idea to copy the latest channel.htm to your server.&amp;nbsp; We've made a few minor adjustments to it for bug fixes, stability and performance that you should get.&lt;/P&gt;
&lt;H4&gt;Bonus!&amp;nbsp;&lt;/H4&gt;
&lt;P&gt;Also new with this v0.3 release:&amp;nbsp; New languages for the &lt;a href="http://dev.live.com/spacescontrol"&gt;Windows Live Spaces web control&lt;/a&gt;!&amp;nbsp; The Spaces control now supports the same 10 languages as the Contacts control:&amp;nbsp; Dutch, English, French, German, Italian, Japanese, Korean, Spanish,&amp;nbsp;and Chinese Simplified&lt;/P&gt;
&lt;P&gt;Enjoy!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3298049" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Windows+Live/">Windows Live</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Programming/">Programming</category></item><item><title>Undisclosed Browser Technology</title><link>http://blogs.msdn.com/b/dthorpe/archive/2007/05/31/quot-undisclosed-browser-technology-quot.aspx</link><pubDate>Thu, 31 May 2007 20:29:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3010753</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dthorpe/rsscomments.aspx?WeblogPostID=3010753</wfw:commentRss><comments>http://blogs.msdn.com/b/dthorpe/archive/2007/05/31/quot-undisclosed-browser-technology-quot.aspx#comments</comments><description>&lt;p&gt;When people ask what I worked on at Google and I answer "undisclosed browser technology", I think some&amp;nbsp;folks think I'm just being coy or obnoxious.&amp;nbsp; The truth is, I'm required to say that publicly and privately until Google publicly announces the technology or its derivatives.&lt;/p&gt; &lt;p&gt;Well, that day has finally come.&amp;nbsp; Yesterday Google announced the &lt;a href="http://code.google.com/apis/gears/"&gt;Google Gears API&lt;/a&gt;, a set of browser plugins that provide client-side local storage and related services.&amp;nbsp; &lt;/p&gt; &lt;p&gt;I&amp;nbsp;was a founding member of that project and helped draft the&amp;nbsp;specs and write the early iterations through proof of concept and functional prototype stages.&amp;nbsp; They've made a lot of fit &amp;amp; finish improvements over the past year (and a perhaps a few changes in focus to navigate Google's internal politics), but I can still recognize a few bits here and there.&lt;/p&gt; &lt;p&gt;Congratulations to my old teammates for getting Gears out the door: &lt;a href="http://linus.com/"&gt;Linus Upson&lt;/a&gt;, Mike Tsao, Michael Nordman, Eric Arvidsson, &lt;a href="http://www.youngpup.net/"&gt;Aaron Boodman&lt;/a&gt;&amp;nbsp;and the rest of the gearheads!&amp;nbsp; ;&amp;gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3010753" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Programming/">Programming</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/web/">web</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Google/">Google</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Gears+API/">Gears API</category></item><item><title>Microsoft Surface</title><link>http://blogs.msdn.com/b/dthorpe/archive/2007/05/30/microsoft-surface.aspx</link><pubDate>Wed, 30 May 2007 23:11:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2993048</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dthorpe/rsscomments.aspx?WeblogPostID=2993048</wfw:commentRss><comments>http://blogs.msdn.com/b/dthorpe/archive/2007/05/30/microsoft-surface.aspx#comments</comments><description>You've got to see it to believe it:&amp;nbsp; &lt;a href="http://www.microsoft.com/surface/"&gt;http://www.microsoft.com/surface/&lt;/a&gt; &lt;p&gt;Mmmm-mmm good.&lt;/p&gt; &lt;p&gt;It may be time soon to&amp;nbsp;dust off&amp;nbsp;those great old Avalon Hill board games and look at implementing them on this table - &lt;em&gt;without the thousands of chit markers&lt;/em&gt;.&amp;nbsp; Twilight Imperium, anyone?&amp;nbsp; Or perhaps Settlers of Cataan?&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2993048" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/web/">web</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Surface/">Surface</category></item><item><title>A Cross-Domain Silverlight Channel 9 VideoRSS Player</title><link>http://blogs.msdn.com/b/dthorpe/archive/2007/05/30/a-cross-domain-silverlight-channel-9-videorss-player.aspx</link><pubDate>Wed, 30 May 2007 11:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2984147</guid><dc:creator>MSDNArchive</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/dthorpe/rsscomments.aspx?WeblogPostID=2984147</wfw:commentRss><comments>http://blogs.msdn.com/b/dthorpe/archive/2007/05/30/a-cross-domain-silverlight-channel-9-videorss-player.aspx#comments</comments><description>&lt;P&gt;Last week Kevin Ledley, keeper of the dev.live.com content, asked me for a bit of help to get a &lt;a href="http://www.microsoft.com/silverlight/"&gt;Silverlight&lt;/a&gt; video player working.&amp;nbsp; He wanted to "borrow" the cool scrolling video list and video player from our sister site, &lt;A href="http://msdn2.microsoft.com/" mce_href="http://msdn2.microsoft.com/"&gt;msdn2.microsoft.com&lt;/A&gt; and set it up on our &lt;A href="http://dev.live.com/" mce_href="http://dev.live.com"&gt;dev.live.com&lt;/A&gt; homepage to show Windows Live related videos from &lt;A href="http://channel9.msdn.com/" mce_href="http://channel9.msdn.com"&gt;Channel 9&lt;/A&gt;.&amp;nbsp; Copying the necessary JavaScript and XAML files for the Silverlight video player was easy enough, but even after fixing all the URL references, it still wasn't working.&amp;nbsp; So, I took a look.&lt;/P&gt;
&lt;H3&gt;Get the files&lt;/H3&gt;
&lt;P&gt;First, I needed to grab the files and set them up on my localhost IIS server.&amp;nbsp; The msdn2.microsoft.com page referenced the following JS files:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Silverlight.js - we know what that is 
&lt;LI&gt;main.js 
&lt;LI&gt;button.js 
&lt;LI&gt;helpermethods.js 
&lt;LI&gt;listbox.js 
&lt;LI&gt;listboxitem.js 
&lt;LI&gt;scrollbar.js 
&lt;LI&gt;transportButtons.js 
&lt;LI&gt;videoEntry.js 
&lt;LI&gt;videoPlayer.js 
&lt;LI&gt;videoService.js&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;main.js is what makes the call to create the Silverlight control, same as our CreateSilverlight.js file in helloworld earlier.&amp;nbsp; main.js has a lot of other code in it as well.&amp;nbsp; Scanning for ".xaml", we find there are actually three&amp;nbsp;different xaml files used&amp;nbsp;by main.js:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;videoListHor.xaml 
&lt;LI&gt;itemTemplate.xaml 
&lt;LI&gt;videoPlayer.xaml&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;After copying these files locally, I scanned each for hard coded URL references and stripped them down to relative paths for easier tinkering on localhost.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I made a small test page to host the video player, using the same variable and element names as the original msdn page:&lt;/P&gt;
&lt;H4&gt;vidtest.html&lt;/H4&gt;&lt;PRE style="BACKGROUND-COLOR: #e0e0e0"&gt;&lt;SPAN style="COLOR: black"&gt;&amp;lt;!DOCTYPE&lt;/SPAN&gt; html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&lt;SPAN style="COLOR: black"&gt;&amp;lt;html&lt;/SPAN&gt; xmlns=&lt;SPAN style="COLOR: black"&gt;"http://www.w3.org/1999/xhtml"&lt;/SPAN&gt; xml:lang=&lt;SPAN style="COLOR: black"&gt;"en"&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;head&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;title&amp;gt;&lt;/SPAN&gt;Channel 9 Video on Silverlight&lt;SPAN style="COLOR: black"&gt;&amp;lt;/title&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;script&lt;/SPAN&gt; src=&lt;SPAN style="COLOR: black"&gt;"SilverLight.js"&lt;/SPAN&gt; type=&lt;SPAN style="COLOR: black"&gt;"text/javascript"&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/script&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;script&lt;/SPAN&gt; src=&lt;SPAN style="COLOR: black"&gt;"main.js"&lt;/SPAN&gt; type=&lt;SPAN style="COLOR: black"&gt;"text/javascript"&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/script&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;script&lt;/SPAN&gt; src=&lt;SPAN style="COLOR: black"&gt;"transportButtons.js"&lt;/SPAN&gt; type=&lt;SPAN style="COLOR: black"&gt;"text/javascript"&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/script&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;script&lt;/SPAN&gt; src=&lt;SPAN style="COLOR: black"&gt;"listbox.js"&lt;/SPAN&gt; type=&lt;SPAN style="COLOR: black"&gt;"text/javascript"&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/script&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;script&lt;/SPAN&gt; src=&lt;SPAN style="COLOR: black"&gt;"listboxitem.js"&lt;/SPAN&gt; type=&lt;SPAN style="COLOR: black"&gt;"text/javascript"&amp;gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/script&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;script&lt;/SPAN&gt; src=&lt;SPAN style="COLOR: black"&gt;"button.js"&lt;/SPAN&gt; type=&lt;SPAN style="COLOR: black"&gt;"text/javascript"&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/script&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;script&lt;/SPAN&gt; src=&lt;SPAN style="COLOR: black"&gt;"scrollbar.js"&lt;/SPAN&gt; type=&lt;SPAN style="COLOR: black"&gt;"text/javascript"&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/script&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;script&lt;/SPAN&gt; src=&lt;SPAN style="COLOR: black"&gt;"helperMethods.js"&lt;/SPAN&gt; type=&lt;SPAN style="COLOR: black"&gt;"text/javascript"&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/script&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;script&lt;/SPAN&gt; src=&lt;SPAN style="COLOR: black"&gt;"videoPlayer.js"&lt;/SPAN&gt; type=&lt;SPAN style="COLOR: black"&gt;"text/javascript"&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/script&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;script&lt;/SPAN&gt; src=&lt;SPAN style="COLOR: black"&gt;"videoEntry.js"&lt;/SPAN&gt; type=&lt;SPAN style="COLOR: black"&gt;"text/javascript"&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/script&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;script&lt;/SPAN&gt; src=&lt;SPAN style="COLOR: black"&gt;"videoService.js"&lt;/SPAN&gt; type=&lt;SPAN style="COLOR: black"&gt;"text/javascript"&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/script&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/head&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;body&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;div&lt;/SPAN&gt; style=&lt;SPAN style="COLOR: black"&gt;"position: relative;text-align:center;width:475px; z-index:10;"&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;div&lt;/SPAN&gt; id=&lt;SPAN style="COLOR: black"&gt;"videoListHost"&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;        &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;script type="text/javascript"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;        &amp;nbsp;&amp;nbsp;&amp;nbsp; var videoScrollerFeedUrl = &lt;BR&gt;"http://www.mscommunities.com/MixItUp/Search/default.aspx?q=msdn";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;         startVideoScroller();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;          &amp;lt;/script&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/div&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;div&lt;/SPAN&gt; id=&lt;SPAN style="COLOR: black"&gt;"videoPlayerHost"&lt;/SPAN&gt; &amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/div&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/div&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/body&amp;gt;&lt;/SPAN&gt;
&lt;SPAN style="COLOR: black"&gt;&amp;lt;/html&amp;gt;&lt;/SPAN&gt;        &lt;/PRE&gt;
&lt;P&gt;With this in place,&amp;nbsp;I had all the bits in place on the localhost server to run the app.&amp;nbsp; Would it work?&amp;nbsp; Probably not, but no harm in trying!&lt;/P&gt;
&lt;H3&gt;Eliminate Framework Dependencies&lt;/H3&gt;
&lt;P&gt;Sure enough, vidtest.html threw a JavaScript exception on load.&amp;nbsp; The culprit:&amp;nbsp; Some of the code in the js files refers to a $get() function which appear to be a shortcut for document.getElementById.&amp;nbsp; A little bit of spelunking around in the msdn code with&amp;nbsp;a JavaScript debugger confirmed this hypothesis. $get() is a helper function implemented in the JavaScript libraries that run the msdn web site.&amp;nbsp; I definitely did not want to start pulling on that thread.&amp;nbsp; $get() is innocuous enough, so we can placate the borrowed JS files on our localhost system by implementing a $get() function in vidtest.html&lt;/P&gt;&lt;PRE style="BACKGROUND-COLOR: #e0e0e0"&gt;&lt;SPAN style="COLOR: black"&gt;function&lt;/SPAN&gt; $get(id) {&lt;BR&gt;&lt;SPAN style="COLOR: black"&gt;    return&lt;/SPAN&gt; document.getElementById(id);&lt;BR&gt;}&lt;BR&gt;&lt;/PRE&gt;
&lt;P&gt;Easy enough.&amp;nbsp; Will it work now?&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Bzzzt!&amp;nbsp;The browser next complains about "Object required" or somesuch on the expression Sys.Application.notifyScriptLoaded() at the bottom of one of the .JS files.&amp;nbsp; This, too, is a bit of goo defined by the msdn web site infrastructure.&amp;nbsp; It notifies the application when the .JS file has finished loading, so that it's ok to construct the Silverlight control.&lt;/P&gt;
&lt;P&gt;For vidtest.html, I have an equivalent, simpler approach:&amp;nbsp; construct the Silverlight control in the onLoad event of the body element.&amp;nbsp; The page's onLoad event won't fire until after all the JavaScript references in the head of the document have been loaded.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Ok.&amp;nbsp; Will it work now?&lt;/P&gt;
&lt;P&gt;Yes!&amp;nbsp; The Silverlight video scroller draws itself on the page!&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/dthorpe/WindowsLiveWriter/ASilverlightVideoRSSPlayer_13B48/image%7B0%7D%5B3%5D.png" mce_href="http://blogs.msdn.com/blogfiles/dthorpe/WindowsLiveWriter/ASilverlightVideoRSSPlayer_13B48/image%7B0%7D%5B3%5D.png" atomicselection="true"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=107 alt="This is a screenshot of a Silverlight app.  Had this been an actual Silverlight app, it would look much cooler." src="http://blogs.msdn.com/blogfiles/dthorpe/WindowsLiveWriter/ASilverlightVideoRSSPlayer_13B48/image%7B0%7D_thumb%5B1%5D.png" width=360 border=0 mce_src="http://blogs.msdn.com/blogfiles/dthorpe/WindowsLiveWriter/ASilverlightVideoRSSPlayer_13B48/image%7B0%7D_thumb%5B1%5D.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;But it's empty.&amp;nbsp; Why is it empty?&amp;nbsp; Let's go look at that videoScrollerFeedURL&amp;nbsp;variable and where it's used in the code.&lt;/P&gt;
&lt;P&gt;A quick grep&amp;nbsp;of the&amp;nbsp;JS files brings us to videoService.js, in a function called getVideoEntryList:&lt;/P&gt;&lt;PRE style="BACKGROUND-COLOR: #e0e0e0"&gt;&lt;SPAN style="COLOR: black"&gt;function&lt;/SPAN&gt; getVideoEntryList() {&lt;BR&gt;&lt;SPAN style="COLOR: black"&gt;&lt;P&gt;    Microsoft.Mtps.Rendering.Behaviors.VideoService.GetVideoEntryList(&lt;BR&gt;        videoScrollerFeedUrl, loadVideos);&lt;/P&gt;&lt;/SPAN&gt;}&lt;BR&gt;&lt;/PRE&gt;
&lt;P&gt;What's all that about?&lt;/P&gt;
&lt;H3&gt;Bubble Burster&lt;/H3&gt;
&lt;P&gt;videoScrollerFeedUrl is a string with a value of &lt;A href="http://www.mscommunities.com/MixItUp/Search/default.aspx?q=msdn" mce_href="http://www.mscommunities.com/MixItUp/Search/default.aspx?q=msdn"&gt;http://www.mscommunities.com/MixItUp/Search/default.aspx?q=msdn&lt;/A&gt;.&amp;nbsp; If you follow that link, you'll see that it's an RSS feed.&amp;nbsp; But you should also notice that the URL is in a domain that is not msdn.&amp;nbsp; How is the msdn web code able to use the RSS data from mscommunities.com?&lt;/P&gt;
&lt;P&gt;Microsoft.Mtps.Rendering.Behaviors.VideoService.GetVideoEntryList must be a cross-domain proxy of some kind responsible for fetching RSS entries from mscommunities.com and returning them to the JavaScript running on msdn.microsoft.com.&amp;nbsp; A little friendly debugger inspecting confirms that this&amp;nbsp;function call&amp;nbsp;receives back an array of JavaScript objects - a &lt;A href="http://en.wikipedia.org/wiki/Json" mce_href="http://en.wikipedia.org/wiki/Json"&gt;JSON&lt;/A&gt; result - describing the video description, a thumbnail image URL and a video&amp;nbsp;stream URL.&lt;/P&gt;
&lt;P&gt;This presents a not so small problem for our objective.&amp;nbsp; dev.live.com is not msdn.microsoft.com.&amp;nbsp; We can't call that GetVideoEntryList function or use the web service behind it to find out what videos are available on Channel 9.&amp;nbsp; Full stop.&lt;/P&gt;
&lt;H3&gt;The Options: Few and Ugly&lt;/H3&gt;
&lt;P&gt;I called Kevin up with the bad news.&amp;nbsp; Our options were few and ugly:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Get the server proxy code from msdn and install it on dev.live.com.&amp;nbsp; Great plan, but even if we could get our hands on the code, chances are high that some sort of server configuration difference (installed version of ASP.NET, installed version of .NET framework, etc) between how msdn is set up from how dev.live.com is set up could still make this a no-go.&amp;nbsp; 
&lt;LI&gt;Write our own server side proxy to perform the same relay of RSS content.&amp;nbsp; Trivially simple, perhaps, but the depth of security and code reviews and testing that would be required to roll out live code on a production server would turn our cute little video thingie into a&amp;nbsp;weeks-long fire-breathing hydra from hell.&amp;nbsp; No thanks.&amp;nbsp; I already do that for my day job - why take on all that for a side project? 
&lt;LI&gt;Hardcode the URLs of the videos we want shown in this video scroller into the JS code.&amp;nbsp; Kevin: "We don't have that many videos."&amp;nbsp; Danny:&amp;nbsp; "Yet."&amp;nbsp; Doesn't scale, labor intensive. 
&lt;LI&gt;Construct an RSS feed on the dev.live.com domain to feed video URLs into the video scroller.&amp;nbsp; Much more maintainable over time than #3, but still requires constant maintenance to update the local feed when something relevant shows up on Channel 9.&amp;nbsp; The whole reason for RSS is to have the machine take care of discovery and updating.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Kevin said he'd work on #1 and #4.&amp;nbsp; I opted for #5: Stew on it some more.&amp;nbsp; Take the dog on a long walk. Check the mailbox.&amp;nbsp; Return.&lt;/P&gt;
&lt;H3&gt;Strange Bedfellows&lt;/H3&gt;
&lt;P&gt;A funny thing happened on the way back from the mailbox -&amp;nbsp;it dawned on me that I was trying to solve the wrong problem, or at least,&amp;nbsp;more problem than we needed to solve.&amp;nbsp; We needed a way to read the video RSS feed in the browser across domain boundaries, but we didn't need an all-purpose cross domain data conduit (like we use in the &lt;a href="http://dev.live.com/contactscontrol/"&gt;Windows Live Contacts web control&lt;/a&gt;).&amp;nbsp;A conduit that could move just RSS data and only RSS data would suffice for this project.&lt;/P&gt;
&lt;P&gt;That's when I recalled hearing about Google's recent launch of&amp;nbsp;an RSS Feed&amp;nbsp;API.&amp;nbsp; Mark Lucovsky, who I had a chance to meet (and almost work for) in my Google days now&amp;nbsp;400 days ago, &lt;A href="http://googleajaxsearchapi.blogspot.com/2007/04/announcing-google-ajax-feed-api.html" mce_href="http://googleajaxsearchapi.blogspot.com/2007/04/announcing-google-ajax-feed-api.html"&gt;announced&lt;/A&gt; about a month and a half ago a new API built from a subset of the Google Search API that returns only RSS data.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;In concept, the &lt;A href="http://code.google.com/apis/ajaxfeeds/" mce_href="http://code.google.com/apis/ajaxfeeds/"&gt;Google Feed API&lt;/A&gt; acts as a cross-domain proxy service between your web app and the RSS content you want to use.&amp;nbsp; In reality, it's far simpler:&amp;nbsp; it returns the RSS data cached in Google's search index.&amp;nbsp; This approach creates a multitude of curious&amp;nbsp;artifacts with positive and negative spin:&amp;nbsp; &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Response latency to your RSS requests is&amp;nbsp;determined solely&amp;nbsp;by Google's network infrastructure, not the server originating the RSS data.&amp;nbsp; The server of origin might not even be up but you can still get the RSS data from the Feed API. 
&lt;LI&gt;This use of RSS data is entirely in the spirit of syndication.&amp;nbsp;It's a bummer that the server of origin can't find out how many secondary and tertiary consumers of their data are out there, but hey, that's the nature of syndication.&amp;nbsp; 
&lt;LI&gt;The RSS data you&amp;nbsp;get from the Feed API could be stale or out of sync with the server of origin by several hours or more depending on how quickly Google's web crawlers return to the server of origin to index new content.&amp;nbsp; That's not a major concern for our video viewer, but could be a show stopper for, say, live broadcasting. 
&lt;LI&gt;It's possible the RSS feed you want is not indexed by Google.&amp;nbsp; Hey, it does happen - the RSS feed could be too new to be in the index, or too isolated (no inbound links) to be considered indexible, or the server of origin could have&amp;nbsp;a robots.txt file that tells search engine spiders to piss off. It seems a bit contradictory to have an RSS feed that does not want to be found, but stranger things have happened.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;Wait a second.&amp;nbsp; Use a Google API in a Microsoft app?&amp;nbsp; What blasphemy is this?!&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Oh, grow up.&amp;nbsp; Use what works.&amp;nbsp; Windows Live Search has a perfectly good Search API, but it doesn't provide anything to bring RSS content from a specific RSS URL into our web app.&lt;/P&gt;
&lt;P&gt;And why shouldn't a Microsoft app use a Google service when appropriate?&amp;nbsp; Google certainly uses plenty of Microsoft browsers and operating systems to&amp;nbsp;reach end users!&lt;/P&gt;
&lt;H3&gt;API Keys&lt;/H3&gt;
&lt;P&gt;To use the Google Feed API (I don't know why they had to put "AJAX" in the middle of it), you have to agree to the&amp;nbsp;usual mile long list of terms of use plus generate an API key&amp;nbsp;associated your web site URL.&amp;nbsp; You use the API key when initializing the Google API subsystem.&amp;nbsp; Presumably, this is&amp;nbsp;so they can get an idea of how much traffic your app is generating and be able to block your app's access if you're found to be abusing the system or violating the ToU.&lt;/P&gt;
&lt;P&gt;As far as I can tell by experimentation, the API key only gives Google some idea of who is using their service; the key does not appear to automatically disable API access if the key is used from a domain different from the URL you&amp;nbsp;specified when you generated the key.&amp;nbsp; I generated a key for use&amp;nbsp;on localhost, but found that it works just as well when I run my app from 127.0.0.1.&amp;nbsp; (It doesn't matter that one resolves into the other - a DNS name and an IP address are considered distinct domain names by the browser.&amp;nbsp; Domain name matching in the browser is by string matching, not by what the strings mean)&amp;nbsp; Perhaps lockouts only occur after a significant volume of suspicious traffic goes by.&amp;nbsp; I dunno.&lt;/P&gt;
&lt;H3&gt;The Brass Tacks&lt;/H3&gt;
&lt;P&gt;Here's the vidtest main page again, with the Google Feed API spliced in and bootstrapped:&lt;/P&gt;
&lt;H4&gt;vidtest.html&lt;/H4&gt;&lt;PRE style="BACKGROUND-COLOR: #e0e0e0"&gt;&lt;SPAN style="COLOR: black"&gt;&amp;lt;!DOCTYPE&lt;/SPAN&gt; html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&lt;SPAN style="COLOR: black"&gt;&amp;lt;html&lt;/SPAN&gt; xmlns=&lt;SPAN style="COLOR: black"&gt;"http://www.w3.org/1999/xhtml"&lt;/SPAN&gt; xml:lang=&lt;SPAN style="COLOR: black"&gt;"en"&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;head&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;title&amp;gt;&lt;/SPAN&gt;Channel 9 Video on Silverlight&lt;SPAN style="COLOR: black"&gt;&amp;lt;/title&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;script&lt;/SPAN&gt; src=&lt;SPAN style="COLOR: black"&gt;"SilverLight.js"&lt;/SPAN&gt; type=&lt;SPAN style="COLOR: black"&gt;"text/javascript"&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/script&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;script&lt;/SPAN&gt; src=&lt;SPAN style="COLOR: black"&gt;"main.js"&lt;/SPAN&gt; type=&lt;SPAN style="COLOR: black"&gt;"text/javascript"&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/script&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;script&lt;/SPAN&gt; src=&lt;SPAN style="COLOR: black"&gt;"transportButtons.js"&lt;/SPAN&gt; type=&lt;SPAN style="COLOR: black"&gt;"text/javascript"&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/script&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;script&lt;/SPAN&gt; src=&lt;SPAN style="COLOR: black"&gt;"listbox.js"&lt;/SPAN&gt; type=&lt;SPAN style="COLOR: black"&gt;"text/javascript"&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/script&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;script&lt;/SPAN&gt; src=&lt;SPAN style="COLOR: black"&gt;"listboxitem.js"&lt;/SPAN&gt; type=&lt;SPAN style="COLOR: black"&gt;"text/javascript"&amp;gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/script&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;script&lt;/SPAN&gt; src=&lt;SPAN style="COLOR: black"&gt;"button.js"&lt;/SPAN&gt; type=&lt;SPAN style="COLOR: black"&gt;"text/javascript"&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/script&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;script&lt;/SPAN&gt; src=&lt;SPAN style="COLOR: black"&gt;"scrollbar.js"&lt;/SPAN&gt; type=&lt;SPAN style="COLOR: black"&gt;"text/javascript"&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/script&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;script&lt;/SPAN&gt; src=&lt;SPAN style="COLOR: black"&gt;"helperMethods.js"&lt;/SPAN&gt; type=&lt;SPAN style="COLOR: black"&gt;"text/javascript"&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/script&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;script&lt;/SPAN&gt; src=&lt;SPAN style="COLOR: black"&gt;"videoPlayer.js"&lt;/SPAN&gt; type=&lt;SPAN style="COLOR: black"&gt;"text/javascript"&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/script&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;script&lt;/SPAN&gt; src=&lt;SPAN style="COLOR: black"&gt;"videoEntry.js"&lt;/SPAN&gt; type=&lt;SPAN style="COLOR: black"&gt;"text/javascript"&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/script&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;script&lt;/SPAN&gt; src=&lt;SPAN style="COLOR: black"&gt;"videoService.js"&lt;/SPAN&gt; type=&lt;SPAN style="COLOR: black"&gt;"text/javascript"&amp;gt;&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/script&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;script src=http://www.google.com/jsapi?key=xxxGetYerOwnAPIKeyxxx"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &amp;lt;script type="text/javascript"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;       google.load("feeds", "1");&lt;BR&gt; &lt;BR&gt;&lt;BR&gt;            var videoScrollerFeedUrl = &lt;BR&gt;"http://www.mscommunities.com/MixItUp/Search/default.aspx?q=msdn";&lt;BR&gt;&amp;nbsp;&lt;BR&gt;     &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function initialize() { &lt;BR&gt;      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; startVideoScroller();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     } &lt;BR&gt;&lt;BR&gt; &lt;BR&gt;          google.setOnLoadCallback(initialize);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt; &lt;BR&gt;          function $get(id) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;       return document.getElementById(id);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;     } &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/script&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/head&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: black"&gt;  &amp;lt;body&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;    &lt;SPAN style="COLOR: black"&gt;&amp;lt;div&lt;/SPAN&gt; style=&lt;SPAN style="COLOR: black"&gt;"position: relative;text-align:center;width:475px; z-index:10;"&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;      &lt;SPAN style="COLOR: black"&gt;&amp;lt;div&lt;/SPAN&gt; id=&lt;SPAN style="COLOR: black"&gt;"videoListHost"&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    &lt;SPAN style="COLOR: black"&gt;&amp;lt;/div&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    &lt;SPAN style="COLOR: black"&gt;&amp;lt;div&lt;/SPAN&gt; id=&lt;SPAN style="COLOR: black"&gt;"videoPlayerHost"&lt;/SPAN&gt; &amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    &lt;SPAN style="COLOR: black"&gt;&amp;lt;/div&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  &lt;SPAN style="COLOR: black"&gt;&amp;lt;/div&amp;gt;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: black"&gt;&amp;lt;/body&amp;gt;&lt;/SPAN&gt;
&lt;SPAN style="COLOR: black"&gt;&amp;lt;/html&amp;gt;&lt;/SPAN&gt;        &lt;/PRE&gt;
&lt;P&gt;We've added a new script reference that pulls in jsapi from www.google.com, and includes our API key.&amp;nbsp; I replaced my API key with a dummy value.&amp;nbsp; You'll need to go generate your own key if you want to run this code yourself.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;google.load("feeds", "1")&lt;/STRONG&gt; tells Google that we want to use the Feeds API.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;google.setOnLoadCallback(initialize)&lt;/STRONG&gt; tells Google to call our initialize() function when the requested API has been loaded. Dynamic loading of JavaScript might not be finished before the body onLoad event fires, so we have to take this route to wait for the Feed API to load.&amp;nbsp; Body onLoad event deleted.&lt;/P&gt;
&lt;P&gt;Now, let's go load that RSS content and build our video list, in videoService.js:&lt;/P&gt;
&lt;H4&gt;videoService.js&lt;/H4&gt;&lt;PRE style="BACKGROUND-COLOR: #e0e0e0"&gt;function getVideoEntryList() {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var feed = new google.feeds.Feed(videoScrollerFeedUrl); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; feed.setNumEntries(100);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; feed.setResultFormat(google.feeds.Feed.MIXED_FORMAT);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; feed.load(function(result) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!result.error) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var videoEntries = [];&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (var i = 0; i &amp;lt; result.feed.entries.length; i++) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var entry = result.feed.entries[i];&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var vidEntry = new Object;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vidEntry.VideoTitle = entry.title;&lt;BR&gt; &lt;BR&gt;                var test = google.feeds.getElementsByTagNameNS(&lt;BR&gt;                        entry.xmlNode, &lt;BR&gt;                        "http://search.yahoo.com/mrss", &lt;BR&gt;                        "content");&lt;BR&gt;                if (!test || !test.length) continue;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vidEntry.VideoUrl = test[0].getAttribute("url");&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt; &lt;BR&gt;                test = google.feeds.getElementsByTagNameNS(&lt;BR&gt;                        entry.xmlNode, &lt;BR&gt;                        "http://search.yahoo.com/mrss", &lt;BR&gt;                        "thumbnail");&lt;BR&gt;                if (!test || !test.length) continue;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vidEntry.VideoThumbnailUrl = test[0].getAttribute("url");&lt;BR&gt; &lt;BR&gt;                test = google.feeds.getElementsByTagNameNS(&lt;BR&gt;                        entry.xmlNode, &lt;BR&gt;                        "http://purl.org/dc/elements/1.1/", &lt;BR&gt;                        "creator")&lt;BR&gt;                if (test &amp;amp;&amp;amp; test.length) {&lt;BR&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vidEntry.Author = test[0].text;&lt;BR&gt;                }&lt;BR&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; videoEntries.push(vidEntry);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; loadVideos(videoEntries);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;}&lt;BR&gt;&lt;/PRE&gt;
&lt;P&gt;The msdn2.microsoft.com video scroller expects an array of vidEntry objects as input to build its playlist.&amp;nbsp; The msdn server side proxy takes care of digesting the RSS XML content down to a simple list of vidEntry objects.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;For our dev.live.com version of the video scroller, we need to build the vidEntry objects ourselves.&amp;nbsp;The Google Feed API can return JSON, XML, or both.&amp;nbsp; The title of the RSS entry is standard fare, so that's easy to grab from the JSON field entry.title.&amp;nbsp;The other fields we need - thumbnail URL, video URL, and author - are not normal RSS fields.&amp;nbsp; These fields are defined&amp;nbsp;in the &lt;A href="http://en.wikipedia.org/wiki/Media_RSS" mce_href="http://en.wikipedia.org/wiki/Media_RSS"&gt;Media RSS&lt;/A&gt; (MRSS) RSS extension module and are&amp;nbsp;generated by the Channel 9 video RSS feed as such.&lt;/P&gt;
&lt;P&gt;We make short work of finding the exact XML elements we're looking for by using a utility function provided by the google.feeds library: a cross-browser implementation of getElementsByTagNameNS().&amp;nbsp; &lt;/P&gt;
&lt;P&gt;We push each vidEntry object into the array and loop until we run out of RSS items.&lt;/P&gt;
&lt;P&gt;Finally, we hand off the array of objects to loadVideos and return to the original code path of the video scroller implementation.&lt;/P&gt;
&lt;P&gt;The result looks something like this:&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG title="Screenshot of Silverlight video player in action" style="WIDTH: 600px; HEIGHT: 353px" height=353 alt="Screenshot of Silverlight video player in action" src="http://storage.msn.com/y1pzRzjtWRm1XdRRsx8xkn8abFGABJ2qFich9CPbh33-j6lHwlqKaeQokFLRgDnCT98" width=600 mce_src=" http://storage.msn.com/y1pzRzjtWRm1XdRRsx8xkn8abFGABJ2qFich9CPbh33-j6lHwlqKaeQokFLRgDnCT98"&gt;&lt;/P&gt;
&lt;H3&gt;Why stop there?&lt;/H3&gt;
&lt;P&gt;So now we have what we set out to build:&amp;nbsp; a Silverlight video player that can show videos from the Channel 9 libraries, using the video RSS feeds returned by the mscommunities.com query service.&amp;nbsp;Note that this is built on the &lt;a href="http://www.microsoft.com/silverlight/"&gt;Silverlight&lt;/a&gt; 1.0 beta control using browser JavaScript, not the Silverlight 1.1 Alpha.&lt;/P&gt;
&lt;P&gt;The fact that we ended up using a generic RSS provider to get the specific RSS feed we needed opens some interesting possibilities:&amp;nbsp; Aren't we just a hair's breadth from showing any video from any video RSS feed on the Internet?&amp;nbsp; All we'd need to change is the videoScrollerFeedURL to point to a different RSS feed, right?&amp;nbsp; Perhaps this could be wired directly into Yahoo's Video Search service, which returns MRSS results for keyword searches of videos across the web?&lt;/P&gt;
&lt;P&gt;The answer is: yes and no.&amp;nbsp; Yes, the app actually is just a small step away from using any video RSS feed, or even a video search service that returns MRSS results.&amp;nbsp; The catch is: there are a bezillion different video formats and codecs out there in the wild.&amp;nbsp; It would be unreasonable to expect Silverlight 1.0 beta to be able to play all of them.&amp;nbsp; Silverlight's media player&amp;nbsp;isn't designed to play all video formats - it's designed to play media content encoded for Silverlight playback, using tools such as Expression Media.&amp;nbsp; Apparently, the Channel 9 video library is already encoded in a format that Silverlight can use.&amp;nbsp; Most video in the wild is not.&lt;/P&gt;
&lt;P&gt;That's no ding against Silverlight - all video sharing sites with built-in players play only one video format - their own.&amp;nbsp; When you upload a video to the sharing site, it&amp;nbsp;is almost always&amp;nbsp;converted (transcoded) into the site's native encoding format so that the site's player can play it.&amp;nbsp; You can build that kind of video sharing site with Silverlight.&lt;/P&gt;
&lt;P&gt;With a few tricks from this article, you can show Channel 9 videos on your web site or blog pages with Silverlight!&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;/EM&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2984147" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Windows+Live/">Windows Live</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Programming/">Programming</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Silverlight/">Silverlight</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/cross+domain/">cross domain</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Google/">Google</category><category domain="http://blogs.msdn.com/b/dthorpe/archive/tags/Feed+API/">Feed API</category></item></channel></rss>
