<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Danny Thorpe &#187; Programming</title>
	<atom:link href="http://dannythorpe.com/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://dannythorpe.com</link>
	<description></description>
	<lastBuildDate>Mon, 07 Jun 2010 17:57:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Silverlight 4 to Include MEF</title>
		<link>http://dannythorpe.com/2009/11/30/silverlight-4-to-include-mef/</link>
		<comments>http://dannythorpe.com/2009/11/30/silverlight-4-to-include-mef/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 20:11:56 +0000</pubDate>
		<dc:creator>dthorpe</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[exceptions]]></category>
		<category><![CDATA[MEF]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://dannythorpe.com/2009/11/30/silverlight-4-to-include-mef/</guid>
		<description><![CDATA[I just heard the news announced at PDC that the Managed Extensibility Framework, or MEF, is now slated to be included in Silverlight 4.  Great news!
I did a bit of proof of concept work using MEF about a year ago.  MEF is all about composition of providers and consumers.  MEF&#8217;s main job is to connect [...]]]></description>
			<content:encoded><![CDATA[<p>I just heard the news announced at PDC that the Managed Extensibility Framework, or <a href="http://blogs.msdn.com/gblock/archive/2009/11/29/mef-has-landed-in-silverlight-4-we-come-in-the-name-of-extensibility.aspx">MEF, is now slated to be included in Silverlight 4</a>.  Great news!</p>
<p>I did a bit of proof of concept work using MEF about a year ago.  MEF is all about composition of providers and consumers.  MEF&#8217;s main job is to connect the providers to the consumers so that when the consumer code executes, the providers they require are &#8220;just there.&#8221;</p>
<p>As trivial as that sounds, it significantly changes how you think about programming.  It forces you to think in terms of composition instead of in terms of plumbing and bushwhacking.  As a result, you can focus more energy on solving your actual problem instead of spending the majority of your time building the plumbing and scaffolding so that you can get to the point where you can begin to solve your problem.</p>
<p>For example, if you&#8217;re writing some code and you require &#8220;X&#8221; to get your work done, you write your MEF code module to declare your need for &#8220;X&#8221;.  When your module is loaded by MEF, MEF will take care of the dirty details of finding a provider to fill your need for &#8220;X&#8221;.  The provider may be the one you had in mind when you wrote the code, or it may be completely different, but as long as it implements &#8220;X&#8221; faithfully, you don&#8217;t really care.  The application defines the list of providers to choose from &#8211; whether a fixed list determined at build time or a list gathered at runtime &#8211; the point is, you and your code don&#8217;t need to deal with the how, just declare the what and keep going.</p>
<p>MEF alters your coding thought process from</p>
<blockquote><p>&#8220;I need to figure out how to load and connect to something to get the X that I need&#8221;</p></blockquote>
<p>to</p>
<blockquote><p>&#8220;I need X.  I can rely on X being here when my code executes.  If for whatever reason X isn&#8217;t available, my code won&#8217;t be loaded so I don&#8217;t have to mess with all that.&#8221;</p></blockquote>
<p>This change in thought process is similar to the shift that can and should occur when you go from writing traditional fire-brigade error handling code to writing code in an exception handling environment. For most of the code in your app (the middle layers), you can operate under the mantra of &#8220;If execution gets this far, then everything prior to this must have succeeded.  If anything back there failed, it would have thrown an exception so I wouldn&#8217;t be here now.&#8221;</p>
<p>I&#8217;ll see if I can get clearance to blog about my little MEF experiment from awhile ago.</p>
]]></content:encoded>
			<wfw:commentRss>http://dannythorpe.com/2009/11/30/silverlight-4-to-include-mef/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Calculating Browser Client Height</title>
		<link>http://dannythorpe.com/2009/10/02/calculating-browser-client-height/</link>
		<comments>http://dannythorpe.com/2009/10/02/calculating-browser-client-height/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 22:14:04 +0000</pubDate>
		<dc:creator>dthorpe</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[web app]]></category>

		<guid isPermaLink="false">http://dannythorpe.com/2009/10/02/calculating-browser-client-height/</guid>
		<description><![CDATA[When you&#8217;re writing a rich Internet application (RIA) in HTML and JavaScript, sometimes you need to programatically place a DOM element relative to the right or bottom edge of the visible browser window. For example, if you want to popup a help balloon near an item of interest, you probably want to make sure that [...]]]></description>
			<content:encoded><![CDATA[<p>When you&#8217;re writing a rich Internet application (RIA) in HTML and JavaScript, sometimes you need to programatically place a DOM element relative to the right or bottom edge of the visible browser window. For example, if you want to popup a help balloon near an item of interest, you probably want to make sure that the balloon is fully visible on the screen &#8211; not hanging off the edge of the screen, partially obscured.  I haven&#8217;t found a CSS way to accomplish that, but here are some tidbits I have found:</p>
<p>A quick web search on calculating browser window height reveals that different browsers have different ways to find the browser&#8217;s window client height.  In Netscape / Mozilla browsers, you can use window.innerHeight.  For IE, some sources suggest using document.body.offsetHeight, but I&#8217;ve found this falls short when the HTML content does not completely fill the browser window.  document.documentElement.clientHeight returns the actual window client height in IE.</p>
<p>The jQuery JavaScript library has some handy functions for calculating an element&#8217;s pixel location and pixel width and height, with or without consideration for borders, padding and margin.  $(&#8220;.myclass&#8221;).outerHeight() will give you the pixel height of the first element with a CSS class of &#8220;myclass&#8221;, including borders and margins.</p>
<p>$(&#8220;body&#8221;).outerHeight() returns the same value as document.body.offsetHeight, which will be less than the window height in a short HTML document and could be much larger than client height in a scrolling window.</p>
]]></content:encoded>
			<wfw:commentRss>http://dannythorpe.com/2009/10/02/calculating-browser-client-height/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software as Literature</title>
		<link>http://dannythorpe.com/2009/06/29/software-as-literature/</link>
		<comments>http://dannythorpe.com/2009/06/29/software-as-literature/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 19:18:15 +0000</pubDate>
		<dc:creator>dthorpe</dc:creator>
				<category><![CDATA[Glimpses]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[humor]]></category>
		<category><![CDATA[literature]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://dannythorpe.com/2009/06/29/software-as-literature/</guid>
		<description><![CDATA[If software programming logic and statements were viewed as literature, what form of literature would yours be?

Novel: multiple independent story lines that you hope will eventually converge to make a point.
Short story: a limited number of characters with only one point to make
Essay: tell &#8216;em what you&#8217;re going to say, say it, then tell &#8216;em [...]]]></description>
			<content:encoded><![CDATA[<p>If software programming logic and statements were viewed as literature, what form of literature would yours be?</p>
<ul>
<li><strong>Novel</strong>: multiple independent story lines that you hope will eventually converge to make a point.</li>
<li><strong>Short story</strong>: a limited number of characters with only one point to make</li>
<li><strong>Essay</strong>: tell &#8216;em what you&#8217;re going to say, say it, then tell &#8216;em what you said</li>
<li><strong>Tragedy</strong>: everything that can go wrong usually does</li>
<li><strong>Sonnet</strong>: ornately crafted for no particular reason</li>
<li><strong>Ode</strong>: behold my skillz, and despair!</li>
<li><strong>Thriller</strong>: I&#8217;ve got a  bad feeling about this&#8230;</li>
<li><strong>Murder Mystery</strong>: when things go wrong, top priority is on placing blame</li>
<li><strong>Self-Help</strong>: You can do it!  Please do.</li>
<li><strong>Epic Saga</strong>: &#8220;Help! I can&#8217;t stop writing!&#8221;</li>
<li><strong>Technical Documentation</strong>: Useful bits hidden in a sea of jargon, surrounded by a narcoleptic field</li>
<li><strong>Government Bulletin</strong>: Technical docs sans useful bits</li>
<li><strong>Billboard</strong>: all flash, no substance</li>
</ul>
<p>Since I come from the school of &#8220;simple elegance&#8221;, I&#8217;d have to say that my ideal software&#8217;s literary equivalent would be</p>
<p><strong>Comedy</strong>: If you have to explain it, it&#8217;s not very good.</p>
]]></content:encoded>
			<wfw:commentRss>http://dannythorpe.com/2009/06/29/software-as-literature/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Converting Between EventHandler and EventHandler</title>
		<link>http://dannythorpe.com/2009/04/15/converting-between-eventhandler-and-eventhandler/</link>
		<comments>http://dannythorpe.com/2009/04/15/converting-between-eventhandler-and-eventhandler/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 20:36:24 +0000</pubDate>
		<dc:creator>dthorpe</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[EventHandler]]></category>
		<category><![CDATA[generics]]></category>
		<category><![CDATA[tricks]]></category>

		<guid isPermaLink="false">http://dannythorpe.com/2009/04/15/converting-between-eventhandler-and-eventhandler/</guid>
		<description><![CDATA[Have you ever run into a situation where you need to bridge between code that uses the old custom EventHandler pattern for events and code that wants to use the new parameterized EventHandler&#60;&#62; code style? EventHandler style delegates are not assignment compatible with EventHandler&#60;&#62; delegates.  You&#8217;ll run into this if you&#8217;re writing a new API [...]]]></description>
			<content:encoded><![CDATA[<p>Have you ever run into a situation where you need to bridge between code that uses the old custom EventHandler pattern for events and code that wants to use the new parameterized EventHandler&lt;&gt; code style? EventHandler style delegates are not assignment compatible with EventHandler&lt;&gt; delegates.  You&#8217;ll run into this if you&#8217;re writing a new API that sits on top of older code.  You probably want to expose events in your new API using the newer EventHandler&lt;&gt; pattern, but you can&#8217;t easily wire up events from the old lower level code to fire events in your new API.</p>
<p>You could create an event handler method to catch each of the old style events fired by the old code and turn around and fire the corresponding new style event in your API, but who wants to write all that mind numbingly repetitive code?</p>
<p>There is a simpler way.  The two incompatible event patterns do have one thing in common:  the Invoke method.</p>
<p>But first, some background.</p>
<h3>Custom EventHandler Types, 1.0 Style</h3>
<p>In .NET 1.0 the pattern to define an event property was to define an EventArgs class to carry the arguments of your event and define an EventHandler delegate type which uses that EventArgs class as its args parameter.  Like this:</p>
<pre>    public class ActivityCompletedEventArgs : EventArgs
    {
        public ActivityCompletedEventArgs(int resultCode, string result)
        {
            ResultCode = resultCode;
            Result = result;
        }

        public int ResultCode { get; private set; }
        public string Result { get; private set; }
    }

    public delegate void ActivityCompletedEventHandler(object sender,
                                                       ActivityCompletedEventArgs e);

    class Bar
    {
        public event ActivityCompletedEventHandler Completed;
    }</pre>
<h3>Generic EventHandler&lt;&gt; Types, 2.0 Style</h3>
<p>With the advent of generic types in .NET 2.0, the generic EventHandler&lt;&gt; parameterized type was born.  This parameterized EventHandler&lt;&gt; delegate type simplifies how you declare and use event handlers &#8211; you don&#8217;t have to declare a custom event handler delegate type to match your event args class every time you create a new kind of event.  This is exactly the kind of thing that parameterized types (aka generics) were created to solve. Like this:</p>
<pre>    public class ActivityCompletedEventArgs : EventArgs
    {
        public ActivityCompletedEventArgs(int resultCode, string result)
        {
            ResultCode = resultCode;
            Result = result;
        }

        public int ResultCode { get; private set; }
        public string Result { get; private set; }
    }

    class Bar
    {
        public event EventHandler&lt;ActivityCompletedEventArgs&gt; Completed;
    }</pre>
<p>However, the downside is that EventHandler&lt;&gt; delegates are not assignment compatible with the old style non-generic EventHandler style delegates.</p>
<h3>The Invoke Bridge</h3>
<p>Both styles of event delegate have an Invoke method with a signature of (Object sender, EventArgs args), where EventArgs is the arguments class specific to this particular event.  You can use this point of commonality to convert between event styles without too much trouble.  The trick is to use the .Invoke method in one style of event as the callback method registered in the other style of event:</p>
<pre>    class OldStyleClass
    {
        public event ActivityCompletedEventHandler OldStyleEvent;
    }

    class NewStyleClass
    {
        public event EventHandler&lt;ActivityCompletedEventArgs&gt; Completed;

        public void blah()
        {
            var obj = new OldStyleClass();
            obj.OldStyleEvent += new ActivityCompletedEventHandler(Completed.Invoke);
        }
    }</pre>
<p>The code above hooks up the events so that when OldStyleClass.OldStyleEvent fires, it will fire the NewStyleClass.Completed event.</p>
<p>The main catch to this technique (in C#) is that the reference to the event&#8217;s .Invoke method must be made from within the context of the class that defines the event. C# doesn&#8217;t allow access to the members of an event delegate outside of the class that defines the event. The rules may be different in other .NET languages.</p>
<p>If you want to use this technique in the opposite direction (to have a new style event fire an old style event), you will need to be able to modify the source code of the old style class that defines the old style event. This is much less common than making old style code to fire new style events.</p>
]]></content:encoded>
			<wfw:commentRss>http://dannythorpe.com/2009/04/15/converting-between-eventhandler-and-eventhandler/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recent Google Homepage / GMail Widget Update Laced With Script Errors</title>
		<link>http://dannythorpe.com/2008/12/18/recent-google-homepage-gmail-widget-update-laced-with-script-errors/</link>
		<comments>http://dannythorpe.com/2008/12/18/recent-google-homepage-gmail-widget-update-laced-with-script-errors/#comments</comments>
		<pubDate>Thu, 18 Dec 2008 19:47:24 +0000</pubDate>
		<dc:creator>dthorpe</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[code quality]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[GMail]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[script errors]]></category>

		<guid isPermaLink="false">http://dannythorpe.com/2008/12/18/recent-google-homepage-gmail-widget-update-laced-with-script-errors/</guid>
		<description><![CDATA[About two days ago, my Google homepage suddenly became hostile toward me.  By hostile, I mean my IE7 browser is suddenly reporting a bunch of JavaScript errors and faults when loading the Google homepage that it wasn&#8217;t reporting before. 
Whenever I visit my Google homepage now, I have to wade through 5 or 6 JavaScript error notifications [...]]]></description>
			<content:encoded><![CDATA[<p>About two days ago, my Google homepage suddenly became hostile toward me.  By hostile, I mean my IE7 browser is suddenly reporting a bunch of JavaScript errors and faults when loading the Google homepage that it wasn&#8217;t reporting before. </p>
<p>Whenever I visit my Google homepage now, I have to wade through 5 or 6 JavaScript error notifications before I can do anything.  I suspect the culprit is the Gmail gadget for the Google homepage, as I continue to get script errors while trying to browse email in-situ on the homepage.  The gmail gadget is also missing scrollbars on long messages. None of these problems are present when using Gmail itself, just when using the Google homepage.</p>
<p>As a developer, I have to have script debugging enabled in my browser.  This enables me to debug my web app code in the browser, but it also has the unfortunate side effect of pointing out JavaScript errors on every site I visit.  It&#8217;s surprising how much crappy code is out there in production.  Slashdot has degraded into the pretty much unusable range in recent months, and now the Google homepage / Gmail widget is following suit.</p>
<p>The script errors are not specific to IE.  Firefox 3 also notes 5 critical errors in its error console when navigating to my Google homepage. To Firefox&#8217;s credit, recording these script errors in a log rather than with popup dialogs is much less intrusive than IE, but that also means that significant script errors can go unnoticed by developers testing their web apps with Firefox.</p>
<p>The errors are:</p>
<p>Error: _IG_AddCustomEventHandler is not a function<br />
Source File: http://www.google.com/ig/f/lZ_kPjC_O4s/lib/libcore.js<br />
Line: 43</p>
<p>Error: _IG_AddEventHandler is not a function<br />
Source File: http://www.google.com/ig/f/irJtX0bmDdM/lib/libdynamic-height.js<br />
Line: 4</p>
<p>Error: _IG_Json is undefined<br />
Source File: http://www.google.com/ig/f/_pVqt4t_Qx8/lib/libviews.js<br />
Line: 1</p>
<p>Error: _IG_Prefs._parseURL is not a function<br />
Source File: http://www.google.com/ig/f/lZ_kPjC_O4s/lib/libcore.js<br />
Line: 78</p>
<p>Error: _IFPC is undefined<br />
Source File: http://www.google.com/ig/f/irJtX0bmDdM/lib/libdynamic-height.js<br />
Line: 2</p>
<p>So, to whoever turned on the new code a few days ago for either the Google Homepage or the Gmail widget for the homepage:  Please review your code and fix the crappy script that you&#8217;re dumping on us.  Your developer bretheren thank you for a speedy resolution so that we may get back to debugging our apps instead of debugging yours.</p>
]]></content:encoded>
			<wfw:commentRss>http://dannythorpe.com/2008/12/18/recent-google-homepage-gmail-widget-update-laced-with-script-errors/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Live Mesh App Development Talk at Bay.NET User Group Meeting December 17 2008</title>
		<link>http://dannythorpe.com/2008/12/15/live-mesh-app-development-talk-at-baynet-user-group-meeting-december-17-2008/</link>
		<comments>http://dannythorpe.com/2008/12/15/live-mesh-app-development-talk-at-baynet-user-group-meeting-december-17-2008/#comments</comments>
		<pubDate>Mon, 15 Dec 2008 19:33:39 +0000</pubDate>
		<dc:creator>dthorpe</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[Bay.NET]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[Live Framework]]></category>
		<category><![CDATA[Live Mesh]]></category>
		<category><![CDATA[talk]]></category>
		<category><![CDATA[user group]]></category>

		<guid isPermaLink="false">http://dannythorpe.com/2008/12/15/live-mesh-app-development-talk-at-baynet-user-group-meeting-december-17-2008/</guid>
		<description><![CDATA[I&#8217;ll be speaking at the next Bay.NET user group meeting this Wednesday Dec 17 on Live Mesh application development using Live Frameworks.  There will be a few slides, mostly for the infamous but necessary system stack diagrams, but the majority of the session will be spent showing and running code.  I&#8217;ll open by exploring the different types of applications [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ll be speaking at the next <a href="http://www.baynetug.org/DesktopModules/DetailXEvents.aspx?ItemID=352&amp;mid=49">Bay.NET user group meeting this Wednesday Dec 17</a> on Live Mesh application development using Live Frameworks.  There will be a few slides, mostly for the infamous but necessary system stack diagrams, but the majority of the session will be spent showing and running code.  I&#8217;ll open by exploring the different types of applications that can make use of an end-user&#8217;s mesh data and how they might use such cloud storage, then drill down into data sync and how it enables you to write web apps that can run offline, use data offline, and modify data offline, with changes sync&#8217;ing back to the cloud as soon as connectivity is restored.  The best part is you can write your app to be completely oblivious of network availability.</p>
<p>I&#8217;ve spoken on networking topics on several occasions in recent years, and at least half of them had some sort of hiccup in network service during the presentation.  Demoing Live Services a few years back in a meeting room with no network connection at all was a bit of a challenge! </p>
<p>It will be such a relief to finally be able to show web stuff regardless of whether the network is there or not!</p>
<p>&#8220;Jinx!&#8221; you say?  &#8220;How dare you challenge the demo gods so! They will be most merciless upon your head!&#8221;  Nah.  All you need to discuss Live Mesh development is a pen, whiteboard, and a light (Don&#8217;t forget the light! Demo pixies love power outtages).  In a pinch, even the pen and whiteboard are optional.</p>
<p>If you&#8217;re in the SF Bay area and curious about what we&#8217;re up to with Live Mesh applications, come on out and join us Wednesday evening and get the scoop!</p>
]]></content:encoded>
			<wfw:commentRss>http://dannythorpe.com/2008/12/15/live-mesh-app-development-talk-at-baynet-user-group-meeting-december-17-2008/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Batch Processing Live Mesh Data with Windows Azure or Live Framework</title>
		<link>http://dannythorpe.com/2008/11/24/batch-processing-live-mesh-data-with-windows-azure-or-live-framework/</link>
		<comments>http://dannythorpe.com/2008/11/24/batch-processing-live-mesh-data-with-windows-azure-or-live-framework/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 23:25:05 +0000</pubDate>
		<dc:creator>dthorpe</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[delegated authorization]]></category>
		<category><![CDATA[Live Framework]]></category>
		<category><![CDATA[Live Mesh]]></category>
		<category><![CDATA[LiveID]]></category>
		<category><![CDATA[Mesh]]></category>
		<category><![CDATA[Windows Azure]]></category>

		<guid isPermaLink="false">http://dannythorpe.com/2008/11/24/batch-processing-live-mesh-data-with-windows-azure-or-live-framework/</guid>
		<description><![CDATA[SondreB asks
I’m working on a scenario where I need to process mesh data at intervals. My concern is how I can do delegated authorization in a secure way. How and where do I store the user credentials (or their auth token) in my Windows Azure service? Is there a way of doing interval based processing [...]]]></description>
			<content:encoded><![CDATA[<p>SondreB asks</p>
<blockquote><p>I’m working on a scenario where I need to process mesh data at intervals. My concern is how I can do delegated authorization in a secure way. How and where do I store the user credentials (or their auth token) in my Windows Azure service? Is there a way of doing interval based processing in the cloud other than Windows Azure (excluding offerings from other third parties)?</p></blockquote>
<p>You have three approaches to process data in a user&#8217;s Live Mesh at regular intervals: </p>
<ul>
<li>An application that runs on the client machine</li>
<li>A service that runs on a traditional server</li>
<li>A service that runs in the cloud.</li>
</ul>
<h4>Client Application </h4>
<p>A client application running on the local machine can access the currently logged-in user&#8217;s mesh data.  Your app could be written as a desktop .NET Windows application, using the Live Framework SDK to connect to the user&#8217;s mesh.  Your desktop app will need to present valid authentication credentials to the Live Framework APIs; to avoid having to store and protect the user&#8217;s credentials, use the LiveID SDK.  If the user checks &#8220;remember me&#8221; and &#8220;remember my password&#8221;, your app can login on the user&#8217;s behalf using the LiveID API&#8217;s cached credentials.</p>
<p>You could implement your client app as a mesh-enabled web application, written in HTML+JavaScript or Silverlight.  User authentication is automatic in this situation, since the user must be logged in before they can run your app.  If the user has installed the Live Framework Client on their local machine, they can run your app on their local desktop just as they would a normal desktop app.  When your app is running on the local desktop, it will default to talking to the local cache of mesh data which is synch&#8217;d frequently with the cloud when the machine is connected to the network.</p>
<p>These client-side approaches may be sufficient for simple scenarios.  Client side code is convenient to write and doesn&#8217;t require allocation or management of server resources, but client side code is at the mercy of the local machine and network connection.  If your users tend to leave their machines on most of the time, this might be good enough, but if you need true round-the-clock processing you need a server side solution.</p>
<h4>Traditional Server Application</h4>
<p>You could implement mesh data processing in a traditional web server architecture, such as IIS with ASP.NET or Apache with PHP, Perl, or Python scripting.  This will require delegated authorization, and delegated auth requires that your server have a stable domain name.</p>
<p>Delegated authorization requires that the end user approve or opt-into allowing your application to access (parts of) their mesh data.  This approval must take place using a special Microsoft branded web page, so that the user will know that they are telling <em>Microsoft</em> that it&#8217;s ok for <em>you</em> to access their data. </p>
<p>The flow typically looks something like this:</p>
<ol>
<li>Your web page explains what data you want access to, and what you will do with it, and then forwards the user to a Windows Live authorization page</li>
<li>LiveID login will interject if the user is not already logged in, then forward to the intended page</li>
<li>The user reads the information on the Windows Live web page and chooses to allow or deny access to your site (your domain).</li>
<li>The user&#8217;s response forwards the user back to a landing page on your web site.  If the user allowed access, this response will contain an authorization token.</li>
<li>You store the authorization token in your system, usually paired with the user&#8217;s name within your system so you will know which auth token to use to access this user&#8217;s data in the future. </li>
</ol>
<p>How you store this auth token is up to you, but it should be under physical and network access protection.  At a minimum, you should encrypt whatever table or file you store the auth token in and restrict access to the file to only the administrators and web services that need to access it. You should also avoid transmitting the auth token across the network except when needed, and only via a secure SSL connection.</p>
<p>The auth token cryptographically combines your domain name with the user&#8217;s LiveID username.  The auth token can only be used on requests made from your domain name, can only access that particular user&#8217;s data, and can only access the kinds of data the user gave you access to.  The user can revoke your access (invalidate the auth token) at any time using the Windows Live web site.</p>
<p>Once you have the user&#8217;s authorization to access their data with the auth token, accessing their mesh data is fairly straightforward.  You can use the Live Framework SDK to make data requests of the user&#8217;s mesh data from within an ASP.NET server app, or you can make plain old REST style HTPPS requests to the Live Services cloud using your favorite server scripting tools.  You add the delegated authorization token for the particular user in a header to outgoing requests.</p>
<p>And finally, you can schedule your service to check the user&#8217;s mesh data on regular intervals, using cron or AT or whatever scheduling tool is appropriate.</p>
<h4>Cloud Service</h4>
<p>You can implement your mesh-checking logic in a hosted cloud environment, such as <a href="http://www.microsoft.com/azure/default.mspx">Windows Azure</a>, Amazon EC2, GoogleApp, or a variety of other hosting providers.  You will still need to use delegated authorization as with the traditional server scenario and walk through the same steps to obtain the user&#8217;s permission and be issued an auth token. The code you write to access the user&#8217;s mesh data using the auth token is pretty much the same as what you would write in the traditional server scenario.</p>
<p>Data security is a core requirement of every app, but especially of cloud hosted applications.  I think you&#8217;ll find data security is a core component of Windows Azure cloud data services. You can store the username + auth token in a table in Azure&#8217;s cloud data service.</p>
<p>Scalability and cost management are where running as a cloud service has a distinct advantage over the traditional server scenario.  Scalability is easy: having the option to fire up additional instances of your cloud service by the tens or thousands as needed to meet demand is a key aspect of large scale cloud hosting that traditional servers in the closet or co-lo&#8217;s can&#8217;t begin to touch.</p>
<p>If your application needs to be checking the user&#8217;s mesh data every 5 minutes all day every day, the operational differences between cloud and traditional server will be relatively small, and perhaps offer no cost savings at all. </p>
<p>If your application needs to run only during business hours or only on certain days of the week, you can do something with a cloud service that you can&#8217;t do with a traditional server, hosted VM or co-lo:  You can turn the cloud service off when you don&#8217;t need it, and stop paying for it until you turn it on again.</p>
<p>Anticipating a holiday rush?  You can scale up your customer capacity to massive volume during the holiday shopping crunch, then get rid of it in January and coast by on a shoestring ops budget until the next holiday surge.</p>
<p>If your mesh-checking app needs to check for changes in the user&#8217;s mesh data every 5 minutes, your service will be running pretty much non-stop.  If you only need to check 4 times a day, though, you might just turn your cloud service off until the next update interval.</p>
<p>When designing your mesh-checking architecture, be sure to take a close look at the notification features offered by Live Frameworks.  Notifications and data sync metadata could significantly reduce the frequency and amount of work your app needs to do to detect changes.</p>
]]></content:encoded>
			<wfw:commentRss>http://dannythorpe.com/2008/11/24/batch-processing-live-mesh-data-with-windows-azure-or-live-framework/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>How Do I Mesh Thee?  Let Me Count The Ways</title>
		<link>http://dannythorpe.com/2008/11/14/how-do-i-mesh-thee-let-me-count-the-ways/</link>
		<comments>http://dannythorpe.com/2008/11/14/how-do-i-mesh-thee-let-me-count-the-ways/#comments</comments>
		<pubDate>Fri, 14 Nov 2008 09:40:01 +0000</pubDate>
		<dc:creator>dthorpe</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[Google Gears]]></category>
		<category><![CDATA[Live Framework]]></category>
		<category><![CDATA[Live Mesh]]></category>
		<category><![CDATA[Mesh]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://dannythorpe.com/2008/11/14/how-do-i-mesh-thee-let-me-count-the-ways/</guid>
		<description><![CDATA[A few folks I&#8217;ve talked to in the Live Frameworks CTP forum or in email have expressed a little bit of confusion or a lot of surprise at what you can do with the Live Mesh platform and Live Frameworks. Let&#8217;s run through a few of scenarios to give you an idea of the breadth of options you have to leverage Live [...]]]></description>
			<content:encoded><![CDATA[<p>A few folks I&#8217;ve talked to in the <a href="http://social.msdn.microsoft.com/Forums/en-US/liveframework/threads/">Live Frameworks CTP forum </a>or in email have expressed a little bit of confusion or a lot of surprise at what you can do with the Live Mesh platform and <a href="http://dev.live.com/liveframework/">Live Frameworks</a>. Let&#8217;s run through a few of scenarios to give you an idea of the breadth of options you have to leverage Live Mesh and Live Services in your applications.</p>
<p>First, let&#8217;s look at what kinds of applications can access user data stored in the user&#8217;s mesh (after user consent, of course):</p>
<ol>
<li>Silverlight mesh-enabled web apps</li>
<li>DHTML + JavaScript mesh-enabled web apps</li>
<li>Server-side web applications (<a href="http://www.microsoft.com/azure/windowsazure.mspx">Windows Azure</a>, ASP.NET, Apache, PHP, etc)</li>
<li>Cloud-based web services (Windows Azure, Amazon EC2, Google Apps, etc)</li>
<li>Desktop .NET apps</li>
<li>Win32 apps</li>
<li>Win64 apps</li>
<li>Linux apps</li>
<li>Mac apps</li>
<li>Mobile device apps</li>
<li>Anything that can make HTTP requests, set HTTP request headers, and process XML responses.  With a little bit of code, your Internet-connected lawn sprinker controller can load its watering schedule from a mesh object in your Live Mesh! </li>
</ol>
<p>We provide .NET client libraries to facilitate using the Live Operating Environment (LOE) services in your app, but .NET is not required to talk to the LOE or to specific services in the Live Services cloud &#8211; you can also talk to Live Services (and the LOE) with RESTful HTTP requests built on industry standards such as Atom, RSS, JSON, and XML using whatever programming tools you want, from whatever device or platform you want.</p>
<h4>Mesh Enabled vs Mesh Aware</h4>
<p>A mesh-enabled web app is a DHTML or Silverlight web application that can not only talk to mesh services and access the user&#8217;s mesh data, but the app itself is a mesh object deployed and sync&#8217;d through the cloud to whatever Internet browser enabled device the user has in front of them.</p>
<p>A mesh-aware application is any other kind of app, running on the client device or on the server, which talks to Live Services and can make use of user data stored in their mesh.  These do not get the benefit of automatic deployment or updates orchestrated by the LOE, but they are also not restricted to the security sandbox of a mesh-enabled web app.</p>
<h4>Online and Offline Modes</h4>
<p>The user&#8217;s mesh data can be accessed by applications when the device is online.  If the Live Mesh client is installed on a device, apps can access user mesh data even when the device has no network connection. Data changes written to the local LOE while offline will be sync&#8217;d to the cloud LOE the next time a network connection is available.</p>
<h4>Data Sync</h4>
<p>The Live Framework automatically synchronizes data changes between the local client and the cloud, in both directions.  The user can select which Mesh Objects are sync&#8217;d to which devices in their mesh.  You&#8217;d want to sync photos from your cameraphone / mobile device up to a mesh folder in the cloud, but you would probably not want to sync all of your photos in the cloud down to your phone.</p>
<h4>Mode Transparency</h4>
<p>Mesh-enabled and mesh-aware applications use the same APIs / HTTP request patterns to access user mesh data in the local LOE as to access user data in the cloud LOE.  What changes is the domain name used in the HTTP request (localhost:port versus cloud domain), and that&#8217;s needed only when making the initial connection to the LOE.  After that, all LOE requests are relative to the base URL of the selected LOE.  And if you&#8217;re using the .NET client libraries, nearly all of that local/cloud selection will be taken care of automatically behind the scenes.</p>
<h4>User Authentication, Authorization, and Delegation </h4>
<p>You can use the LiveID SDK to enable users to log into their mesh account from within your mesh-aware desktop or device applications.  You can also use LiveID in your own Windows Azure cloud services: read <a href="http://dev.live.com/blogs/devlive/archive/2008/11/12/432.aspx">Windows Azure Integration with Windows Live ID, Active Directory and OpenID</a>.</p>
<p>You don&#8217;t have to use LiveID.  If your app is a server-side web app or other service that the end user cannot log into directly, you can use Live Service&#8217;s delegated authorization to obtain an authorization token that you can use to access data in the user&#8217;s mesh independent of the user&#8217;s login state.  The user has to opt in to giving you that token, and can revoke your access (invalidate the token) if you don&#8217;t play nice.  The authorization token is cryptographically bound to your domain and the user&#8217;s id. </p>
<p>Mesh-enabled web apps don&#8217;t need to do anything with authentication because the user will have already logged in prior to executing the mesh-enabled web app, and the web app lives &#8220;inside&#8221; that authenticated sandbox context.</p>
<h4>Sharing</h4>
<p>The user can choose to share a Mesh Object with other users.  If your app writes to a particular Mesh Object and the user shares it with others, your app data can be distributed to the social graph without any work on your part.  Your app can also see who has access to or is sharing the Mesh Object. </p>
<h4>A Few Scenarios</h4>
<ul>
<li>A desktop .NET application (written in any .NET language) reading and writing app data to the user&#8217;s mesh. </li>
<li>The same app (same binary executable module) writing data to the user&#8217;s mesh while the machine is offline. (local LOE)</li>
<li>A desktop Win32 application reading and writing from the user&#8217;s contacts. (LiveID SDK + raw HTTP / AtomPub)</li>
<li>A web server app that writes data to a mesh object in the user&#8217;s mesh in response to a button click or form submit. (online)</li>
<li>A headless cloud based web service that updates data in the user&#8217;s mesh every 3 hours. (delegated auth)</li>
<li>A DHTML+JavaScript mesh-enabled web app running in the browser reading and writing data to the user&#8217;s mesh. (online)</li>
<li>A Silverlight mesh-enabled web application running on the local desktop (via Live Mesh client) while offline.  (Offline Silverlight!)</li>
<li>A DHTML+JavaScript mesh-enaabled web application running in any JavaScript-enabled browser on a smartphone. (online)</li>
<li>A Silverlight mesh-enabled web application that displays interactive features on current events, updated continually (daily) with new content and code logic (online/offline, data sync and app sync)</li>
<li>Store your application&#8217;s personalization settings in the user&#8217;s mesh.  The user&#8217;s preferences follow them to any machine they run that app on, regardless of whether your app is a mesh-enabled web app or a traditional installed desktop app.  (Think: student computer lab.  Many machines all configured the same used by many students all demanding to be different)</li>
<li>Same as previous scenario, but now across different kinds of devices.  User&#8217;s preferences and settings sync across PC, Mac, cellphone, etc.</li>
<li>Briefcase application:  Grab a dataset of client leads into your mesh-enabled sales lead app while at the office.  Review client dossiers while offline in transit.  Update sales contacts and enter purchase orders at client site, while offline.  Sync changes and purchase orders to office (to a cloud mesh object shared with and watched by a mesh app at the office) at an Internet cafe in the airport on the way to the next client. Show next client how to enter orders themselves using your purchase order mesh-enabled web app (the same one you have running offline on your PDA-phone) running in their browser. </li>
</ul>
<p>These are just a tiny sampling of the kinds of things you can do with the Live Framework.  There are many more features I haven&#8217;t mentioned that add additional dimentions to the sample matrix:  your mesh-aware and mesh-enabled apps running on the client device can programmatically construct resource scripts (expression trees) which can be executed on a server in the cloud (to move large data around on the server without making a round trip to the client across the network); there&#8217;s a server-side cross-domain proxy service that lets your mesh-enabled web app (executing in the context of a cloud domain name) &#8220;phone home&#8221; to your own web server or domain; and so forth.</p>
<p>If I had to name one thing that sets the Live Framework head and shoulders apart from other products that attempt to bridge the online/offline gap, it has to be Live Framework&#8217;s data synchronization.  Other tools such as Google Gears can help you run your web app offline, but getting your offline data back into the cloud is left as an exercise for the reader.  In Live Framework, synchronization is a fundamental assumption, a cornerstone of the core architecture.</p>
<p>When data automagically appears in all the places it&#8217;s supposed to go, you suddenly find that you have a lot less code to write, debug, and maintain.  You can get back to focusing on business logic and spend a lot less time on infrastructure.</p>
<p>With apologies to &#8216;The Bard&#8217;</p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fdannythorpe.com%2f2008%2f11%2f14%2fhow-do-i-mesh-thee-let-me-count-the-ways%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fdannythorpe.com%2f2008%2f11%2f14%2fhow-do-i-mesh-thee-let-me-count-the-ways%2f" border="0" alt="kick it on DotNetKicks.com" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://dannythorpe.com/2008/11/14/how-do-i-mesh-thee-let-me-count-the-ways/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Inside Live Framework Tools for Visual Studio CTP1</title>
		<link>http://dannythorpe.com/2008/11/05/inside-live-framework-tools-for-visual-studio-ctp1/</link>
		<comments>http://dannythorpe.com/2008/11/05/inside-live-framework-tools-for-visual-studio-ctp1/#comments</comments>
		<pubDate>Wed, 05 Nov 2008 22:48:23 +0000</pubDate>
		<dc:creator>dthorpe</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[Live Framework Tools]]></category>
		<category><![CDATA[Mesh]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://dannythorpe.com/2008/11/05/inside-live-framework-tools-for-visual-studio-ctp1/</guid>
		<description><![CDATA[Oran Dennison has been dissecting the new Live Framework Tools for Microsoft Visual Studio (&#8220;VS tools&#8221;) and raised a few questions about how the VS tools are uploading Live Mesh application files into the cloud.
&#8220;Why does VS upload files to the cloud individually instead of as one zip file?&#8221;
VS uploads individual files to the cloud because that&#8217;s what [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://orand.blogspot.com/2008/11/dissecting-live-mesh-app-packages.html">Oran Dennison</a> has been dissecting the new <a href="http://msdn.microsoft.com/en-us/vstudio/cc972640.aspx">Live Framework Tools for Microsoft Visual Studio</a> (&#8220;VS tools&#8221;) and <a href="http://orand.blogspot.com/2008/11/dissecting-live-mesh-app-packages.html">raised a few questions</a> about how the VS tools are uploading Live Mesh application files into the cloud.</p>
<h3>&#8220;Why does VS upload files to the cloud individually instead of as one zip file?&#8221;</h3>
<p>VS uploads individual files to the cloud because that&#8217;s what the cloud service APIs for application upload require.  When you manually upload an application zip file to the <a href="http://lx.azure.microsoft.com/">http://lx.azure.microsoft.com</a> developer portal, the developer portal internally unzips the files and uploads them to the actual cloud storage.  The developer portal is just a UI frontend to the actual cloud services backend.  VS tools talk to the cloud services backend.</p>
<h3>&#8220;What if Visual Studio dies before uploading all the application files?  It seems like updating an app by manually uploading a zip file is a safer, slightly more atomic operation.&#8221;</h3>
<p>First of all, the goal of tools is to eliminate <strong>manual</strong> repetitive tasks.  Uploading an app to the cloud certainly qualifies as manual and tedious and something that is going to need to be done a lot (every time you hit F5 to run the app).</p>
<p>If VS dies (or more likely, you lose your network connection) before uploading all the application files, the worst thing that will happen is that you will be left with a debug application resource feed that is incomplete.  VS doesn&#8217;t upload files into your existing installed mesh application, it creates a separate debug application resource to upload into and debug from.  This helps ensure that the bits you&#8217;re debugging are the bits that VS put there that match your local debug symbols, without any interference from automatic application updates caused by changes elsewhere in the system.</p>
<h3>&#8220;Once real production apps are being upgraded, something more robust would be nice&#8221; </h3>
<p>Visual Studio never debugs or uploads applications into a public, production environment. You&#8217;re always operating on an application that is tagged as in &#8220;development&#8221; mode in the cloud.  When you&#8217;re finished with development (and testing) you go to the developer portal and throw a big switch to push your application into production mode, accessible to the general public. </p>
<p>I believe (not sure here) that pushing the app into production will only expose one version of the application&#8217;s resource feed.  If that is the case, then you should be able to continue development of that app in VS because VS always uploads and debugs from a separate (private / nonpublished) debug application resource feed.</p>
<h3>&#8220;When my app is sync&#8217;d to my local machine, does it download the zip file or the individual files of the app?&#8221;</h3>
<p>The files in your application are stored in the cloud as entries in an application resource feed. When the contents of your application feed needs to be sync&#8217;d to a particular device, the sync granularity is at the level of individual files.  The Live Mesh client does not download the zip file you uploaded to the cloud because (as far as I know) that zip file no longer exists anywhere.</p>
<p>A lot of what you see in this CTP release of the tools will change significantly before we release.  For example, the manual process of uploading the app to the cloud to get the app self link to paste into VS will <em>definitely</em> be going away as soon as the cloud implements and exposes the app creation and provisioning services needed by tools.</p>
<p>Our goal for the Live Framework Tools for Visual Studio is to make developing Live Mesh enabled applications as seamless as developing a desktop app.  You create a project, make some edits and F5 to run the app, stop at some source code breakpoints, evaluate some variables, close the app, edit and F5 to run again.  Whether the app is in the cloud or on the local machine will be a footnote to the development cycle you&#8217;re used to, not a radical departure.</p>
]]></content:encoded>
			<wfw:commentRss>http://dannythorpe.com/2008/11/05/inside-live-framework-tools-for-visual-studio-ctp1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fixing Default Permissions in Mesh Apps Created With Live Framework Tools for Microsoft Visual Studio</title>
		<link>http://dannythorpe.com/2008/11/04/fixing-default-permissions-in-apps-created-with-live-framework-tools-for-microsoft-visual-studio/</link>
		<comments>http://dannythorpe.com/2008/11/04/fixing-default-permissions-in-apps-created-with-live-framework-tools-for-microsoft-visual-studio/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 18:03:02 +0000</pubDate>
		<dc:creator>dthorpe</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[contacts]]></category>
		<category><![CDATA[Live Framework Tools]]></category>
		<category><![CDATA[Mesh]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[permissions]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[workarounds]]></category>

		<guid isPermaLink="false">http://dannythorpe.com/2008/11/04/fixing-default-permissions-in-apps-created-with-live-framework-tools-for-microsoft-visual-studio/</guid>
		<description><![CDATA[We&#8217;ve discovered a bug in how the Live Framework Tools for Microsoft Visual Studio (&#8220;VS tools&#8221;) set permission values for Live Mesh-enabled web apps uploaded using the VS tools.  This results in your mesh app running with fewer permissions than the intended default permission set, which will prevent your app from modifying mesh feeds for contacts or news.
You [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve discovered a bug in how the Live Framework Tools for Microsoft Visual Studio (&#8220;VS tools&#8221;) set permission values for Live Mesh-enabled web apps uploaded using the VS tools.  This results in your mesh app running with fewer permissions than the intended default permission set, which will prevent your app from modifying mesh feeds for contacts or news.</p>
<p>You can fix the default permissions on your app after you perform the first upload steps in VS and the dev portal.</p>
<ol>
<li>Perform the first-time app upload steps in VS to upload the zip to the dev portal and set the app self link in the VS project.</li>
<li>In VS, press F5 again to verify that your mesh app starts up in Live Desktop in the browser, under VS debugger control.</li>
<li>Close the Live Desktop browser to end the debug session.</li>
<li>Open a new browser window and log into Live Desktop (<a href="http://developer-ctp.mesh.com/"><font color="#0072bc">http://developer-ctp.mesh.com</font></a>) </li>
<li>Select the Apps page. </li>
<li>Find your mesh app in the list of installed mesh apps.  Click on the name of your mesh app instance to view its details page.</li>
</ol>
<p>The permissions listed on the details page will look like this:</p>
<blockquote><p><strong>Permissions</strong><br />
Read access to my Live Mesh object<br />
Read access to my Windows Live Contacts<br />
Read access to my Live Mesh User News</p></blockquote>
<p>To adjust the permissions to the correct default values, click on the &#8220;Edit&#8221; link in the top right corner of the panel.</p>
<p>An &#8220;Access Permission&#8221; page will be displayed.  Click Cancel to return to the app instance list. </p>
<p>Click on the app instance link in the installed applications list to view the app&#8217;s details page again.</p>
<p>The app permissions should now look like this:</p>
<blockquote><p><strong>Permissions</strong><br />
Read access to my Windows Live Profiles<br />
Read access to my Live Mesh Devices<br />
Read and update access to my Windows Live Contacts<br />
Full access to my Live Mesh User News</p></blockquote>
<p>Your mesh app can now write to its contacts and news feeds.</p>
<p>This permissions adjustment only needs to be done <strong>once</strong> after the VS tools have uploaded the app for the first time.  Subsequent edits &amp; updates by VS will not change the permissions.</p>
<p>This default permissions bug will be fixed in the next update of the VS tools.</p>
<p> Originally posted in the <a href="http://social.msdn.microsoft.com/Forums/en-US/liveframework/thread/695f4201-7ab3-4942-bf45-b929f75f2237">Live Framework discussion forum</a></p>
]]></content:encoded>
			<wfw:commentRss>http://dannythorpe.com/2008/11/04/fixing-default-permissions-in-apps-created-with-live-framework-tools-for-microsoft-visual-studio/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
