<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Phil Leggetter - Software Consultant</title>
	
	<link>http://www.leggetter.co.uk</link>
	<description>Real-time web and social media software consultant</description>
	<lastBuildDate>Sun, 08 Nov 2009 23:43:44 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/PhilLeggettersBlog" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Which Rich Internet Application Technology will dominate?</title>
		<link>http://feedproxy.google.com/~r/PhilLeggettersBlog/~3/VwJ33Bqn5FU/which-rich-internet-application-technology-will-dominate.html</link>
		<comments>http://www.leggetter.co.uk/2009/11/07/which-rich-internet-application-technology-will-dominate.html#comments</comments>
		<pubDate>Sat, 07 Nov 2009 01:34:29 +0000</pubDate>
		<dc:creator>Phil Leggetter</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[real-time data]]></category>
		<category><![CDATA[real-time web]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[silverlight]]></category>

		<guid isPermaLink="false">http://www.leggetter.co.uk/?p=534</guid>
		<description><![CDATA[I&#8217;ve been a member of the RIA Developers Group on LinkedIn for a short while now and the other day Patrick Bay posted a link to an interesting article on Computer Weekly about the prominence of RIAs. A few comments were posted and then Patrick questioned which RIAs would &#8220;bubble to the top&#8221;.
I think the UI [...]


Related posts:<ol><li><a href='http://www.leggetter.co.uk/2009/10/29/real-time-rich-internet-applications-rtria.html' rel='bookmark' title='Permanent Link: Real-Time Rich Internet Applications (RTRIA)'>Real-Time Rich Internet Applications (RTRIA)</a></li><li><a href='http://www.leggetter.co.uk/2009/10/30/using-fiddler-to-trick-silverlight-into-allowing-a-crossdomain-web-request.html' rel='bookmark' title='Permanent Link: Using Fiddler to trick Silverlight into allowing a crossdomain Web Request'>Using Fiddler to trick Silverlight into allowing a crossdomain Web Request</a></li><li><a href='http://www.leggetter.co.uk/2008/05/20/how-to-install-caplin-systems-liberator-free-edition-on-windows.html' rel='bookmark' title='Permanent Link: How to install Caplin Systems&#8217; Liberator Free Edition on Windows'>How to install Caplin Systems&#8217; Liberator Free Edition on Windows</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been a member of the <a  href="http://www.linkedin.com/groups?home=&#038;gid=112239&#038;trk=anet_ug_hm">RIA Developers Group</a> on LinkedIn for a short while now and the other day <a  href="http://ca.linkedin.com/in/patrickbay">Patrick Bay</a> posted a link to an interesting <a  href="http://www.computerweekly.com/Articles/2009/11/04/238406/rich-internet-applications-come-to-the-fore.htm">article on Computer Weekly</a> about the prominence of RIAs. A few comments were posted and then Patrick questioned which RIAs would &#8220;bubble to the top&#8221;.</p>
<blockquote><p>I think the UI revolution&#8217;s already here; now we see which ones bubble to the top!</p></blockquote>
<p>This got me thinking about the criteria that may determine which RIA technology would be most successful.</p>
<p>I think there are a number of things that will determine which one will ultimately win, or at least become the dominant choice. At the moment I can think of three categories; <a  href="http://www.leggetter.co.uk/2009/11/07which-rich-internet-application-technology-will-dominate.html#technology-buy-in">Technology buy-in</a>, <a  href="http://www.leggetter.co.uk/2009/11/07which-rich-internet-application-technology-will-dominate.html#development-environment">Development environment</a> and <a  href="http://www.leggetter.co.uk/2009/11/07which-rich-internet-application-technology-will-dominate.html#data-access-capabilities-and-choice">Data access capabilities and choice</a>.<br />
<span id="more-534"></span><br />
<a name="technology-buy-in"></a></p>
<h2>Technology buy-in</h2>
<p>Some companies buy-in to a technology because they have always used that technology. For example, a company that have always used Java will be more likely to opt for the Adobe solution where they can write their server components using Java and their client in Flash/ActionScript/<a href="http://www.adobe.com/products/flex/">Flex</a> (<em>this terminology is still a bit unclear to me. I think this is why Adobe are renaming Flex Builder to Flash Builder</em>) but a company that have traditionally used Microsoft products will undoubtedly go for <a  href="http://silverlight.net/">Silverlight</a>. More traditional web developers, who probably build upon the <a  href="http://en.wikipedia.org/wiki/LAMP_(solution_stack)">LAMP stack</a>, that have been hand coding PHP on the server and JavaScript on the client tend to go for creating RIAs using Ajax.<br />
<a name="development-environment"></a></p>
<h2>Development environment</h2>
<p>I believe that Microsoft have a massive advantage in having <a href="http://www.microsoft.com/visualstudio/en-gb/products/professional/default.mspx">Visual Studio</a> as a server and client IDE. It has it&#8217;s faults but in general it&#8217;s a fantastic development environment. Those choosing Flex (Java -&gt; ActionScript/Flash) will more than likely choose the <a  href="http://www.eclipse.org/">Eclipse IDE</a>, which is powerful, but it&#8217;s ActionScript/Flex development tools are lacking maturity. I&#8217;ve recently used the <a  href="http://labs.adobe.com/technologies/flashbuilder4/">Flash Builder 4 beta</a> and it&#8217;s miles behind Visual Studio in terms of coding productivity features. I&#8217;ve heard that the Flex UI component development features may be better than Visual Studio&#8217;s support for Silverlight UI. The LAMP with Ajax stack suffers much the same problems as Flex with, as far as I know, Eclipse being the IDE of choice and client-side productivity tools still very much in their infancy. It&#8217;s clearly very difficult to write an IDE to enhance JavaScript/Ajax productivity.</p>
<div class="information">I quite frequently develop JavaScript in Eclipse using the <a  href="http://www.aptana.org/">Aptana</a> plugin so I&#8217;d be interested in getting suggestions on other Ajax IDE choices.</div>
<p><a name="data-access-capabilities-and-choice"></a></p>
<h2>Data access capabilities and choice</h2>
<p>I think this has been one of the last things to be considered in the RIA stack. Previously browsers have locked down where you can get your data from. Developers were always trying to implement hacks to allow them to do things such as make a web request to a server on a different domain or <a href="http://en.wikipedia.org/wiki/Cross-site_scripting">cross-site scripting</a> to implement <a  href="http://ajaxpatterns.org/HTTP_Streaming">HTTP streaming</a>. As the web has opened up to the idea of <a  href="http://en.wikipedia.org/wiki/Mashup_(web_application_hybrid)">Mashups</a>, browser and RIA plugin vendors have had to change their stance on cross site security. It&#8217;s a difficult line to walk but I believe that the technology that makes retrieving data from multiple sources the easiest, without having to go via a proxy, will have a distinct advantage. Flash and Silverlight are winning the race at the moment with Silverlight&#8217;s use of <a  href="http://msdn.microsoft.com/en-us/library/cc645032(VS.95).aspx">security policy files</a> and Flash&#8217;s support for <a  href="http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7e08.html#WS366737CC-0BD3-47b4-8292-569FB3AA276B">master policy files</a>. For the Ajax solution I still need to research information on <a  href="https://developer.mozilla.org/en/HTTP_access_control">HTTP cross domain access control</a> headers and which browsers have implemented support for them. I still think there will be an argument for mashing up your data on the server and I have a blog post planned on <a  href="http://www.leggetter.co.uk/2009/10/29/real-time-rich-internet-applications-rtria.html">RTRIA</a> server technologies.</p>
<p>The important questions around RIA data are:</p>
<ul>
<li>Which RIA will be more efficient at consuming data?</li>
<li>Which one will prove to be the most capable as a <a  href="http://www.leggetter.co.uk/2009/10/29/real-time-rich-internet-applications-rtria.html">Real-Time Rich Internet Application (RTRIA)</a>?</li>
<li>Will RIA technology vendors try to lock developers into using a client-server technology stack, such as Adobe may be trying to do with <a  href="http://www.adobe.com/products/livecycle/dataservices/">LCDS</a> and Flex, and will this put developers off?</li>
<li>Is decoupling of server and client technology, and communication protocol, important? I think it is, do you?</li>
</ul>
<p>Although RIAs have been around for a while now, as Patrick said, the race to dominate the Rich Internet Application Technology space is on.</p><!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em> </em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.leggetter.co.uk/2009/11/07/which-rich-internet-application-technology-will-dominate.html&amp;title=Which+Rich+Internet+Application+Technology+will+dominate%3F" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.leggetter.co.uk/2009/11/07/which-rich-internet-application-technology-will-dominate.html&amp;title=Which+Rich+Internet+Application+Technology+will+dominate%3F" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://www.leggetter.co.uk/2009/11/07/which-rich-internet-application-technology-will-dominate.html&amp;title=Which+Rich+Internet+Application+Technology+will+dominate%3F" rel="nofollow" title="Add to&nbsp;DotNetKicks"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Add to&nbsp;DotNetKicks" alt="Add to&nbsp;DotNetKicks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://www.leggetter.co.uk/2009/11/07/which-rich-internet-application-technology-will-dominate.html" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.leggetter.co.uk/2009/11/07/which-rich-internet-application-technology-will-dominate.html&amp;title=Which+Rich+Internet+Application+Technology+will+dominate%3F" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.leggetter.co.uk/2009/11/07/which-rich-internet-application-technology-will-dominate.html&amp;title=Which+Rich+Internet+Application+Technology+will+dominate%3F" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://www.leggetter.co.uk/2009/11/07/which-rich-internet-application-technology-will-dominate.html&amp;title=Which+Rich+Internet+Application+Technology+will+dominate%3F" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.leggetter.co.uk/2009/11/07/which-rich-internet-application-technology-will-dominate.html" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Which+Rich+Internet+Application+Technology+will+dominate%3F+@+http://www.leggetter.co.uk/2009/11/07/which-rich-internet-application-technology-will-dominate.html" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://www.leggetter.co.uk/2009/11/07/which-rich-internet-application-technology-will-dominate.html&amp;t=Which+Rich+Internet+Application+Technology+will+dominate%3F" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->


<p>Related posts:<ol><li><a href='http://www.leggetter.co.uk/2009/10/29/real-time-rich-internet-applications-rtria.html' rel='bookmark' title='Permanent Link: Real-Time Rich Internet Applications (RTRIA)'>Real-Time Rich Internet Applications (RTRIA)</a></li><li><a href='http://www.leggetter.co.uk/2009/10/30/using-fiddler-to-trick-silverlight-into-allowing-a-crossdomain-web-request.html' rel='bookmark' title='Permanent Link: Using Fiddler to trick Silverlight into allowing a crossdomain Web Request'>Using Fiddler to trick Silverlight into allowing a crossdomain Web Request</a></li><li><a href='http://www.leggetter.co.uk/2008/05/20/how-to-install-caplin-systems-liberator-free-edition-on-windows.html' rel='bookmark' title='Permanent Link: How to install Caplin Systems&#8217; Liberator Free Edition on Windows'>How to install Caplin Systems&#8217; Liberator Free Edition on Windows</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.leggetter.co.uk/2009/11/07/which-rich-internet-application-technology-will-dominate.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.leggetter.co.uk/2009/11/07/which-rich-internet-application-technology-will-dominate.html</feedburner:origLink></item>
		<item>
		<title>A Real Time Rich Internet Application (RTRIA) Example</title>
		<link>http://feedproxy.google.com/~r/PhilLeggettersBlog/~3/0YNpR43D2wI/a-real-time-rich-internet-application-rtria-example.html</link>
		<comments>http://www.leggetter.co.uk/2009/11/03/a-real-time-rich-internet-application-rtria-example.html#comments</comments>
		<pubDate>Tue, 03 Nov 2009 20:12:45 +0000</pubDate>
		<dc:creator>Phil Leggetter</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[MSDN]]></category>
		<category><![CDATA[real-time]]></category>
		<category><![CDATA[real-time data]]></category>
		<category><![CDATA[real-time web]]></category>
		<category><![CDATA[RTRIA]]></category>
		<category><![CDATA[silverlight]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.leggetter.co.uk/?p=423</guid>
		<description><![CDATA[I&#8217;ve just had an article published in the latest UK MSDN Flash newsletter on How to consume real-time data in a Silverlight RIA. As part of writing up the article I developed a sample Real-Time Rich Internet Application (RTRIA) that consumes real-time data from the Twitter real-time data feed. I also put together my first [...]


Related posts:<ol><li><a href='http://www.leggetter.co.uk/2009/10/29/real-time-rich-internet-applications-rtria.html' rel='bookmark' title='Permanent Link: Real-Time Rich Internet Applications (RTRIA)'>Real-Time Rich Internet Applications (RTRIA)</a></li><li><a href='http://www.leggetter.co.uk/2009/10/30/using-fiddler-to-trick-silverlight-into-allowing-a-crossdomain-web-request.html' rel='bookmark' title='Permanent Link: Using Fiddler to trick Silverlight into allowing a crossdomain Web Request'>Using Fiddler to trick Silverlight into allowing a crossdomain Web Request</a></li><li><a href='http://www.leggetter.co.uk/2009/11/07/which-rich-internet-application-technology-will-dominate.html' rel='bookmark' title='Permanent Link: Which Rich Internet Application Technology will dominate?'>Which Rich Internet Application Technology will dominate?</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just had an article published in the latest <a  href="http://msdn.microsoft.com/en-gb/aa570311.aspx">UK MSDN Flash newsletter</a> on <strong>How to consume real-time data in a Silverlight RIA</strong>. As part of writing up the article I developed a sample <a  title="Real-Time Rich Internet Application" href="http://www.leggetter.co.uk/2009/10/29/real-time-rich-internet-applications-rtria.html">Real-Time Rich Internet Application (RTRIA)</a> that consumes real-time data from the <a  href="http://apiwiki.twitter.com/Streaming-API-Documentation">Twitter real-time data feed</a>. I also put together my first ever <a  href="http://www.leggetter.co.uk/2009/11/03/a-real-time-rich-internet-application-rtria-example.html#screencast">screencast</a>. So, you can start by <a  href="http://www.leggetter.co.uk/2009/11/03/a-real-time-rich-internet-application-rtria-example.html#code">getting hold of the code</a> or <a  href="http://www.leggetter.co.uk/2009/11/03/a-real-time-rich-internet-application-rtria-example.html#screencast">watching the screencast</a>.</p>
<p><a name="code"></a></p>
<h2>The Code</h2>
<p>First, and this is <strong>Important</strong>:</p>
<div class="important">To get the sample application to stream real-time data from the Twitter real-time feed you will need to <a href="http://www.leggetter.co.uk/2009/10/30/using-fiddler-to-trick-silverlight-into-allowing-a-crossdomain-web-request.html">use Fiddler to trick Silverlight into allowing a crossdomain Web Request</a>.</div>
<p>Now that you are aware of that, you will also need the Silverlight development environment. You can get everything you need via the <a  href="http://silverlight.net/getstarted/">Silverlight Getting Started page</a>.</p>
<p>You&#8217;ve now got everything you need to run the <em>RTRIA</em> example. To run the sample application you should set the <em>MSDNFlashRTRIAExample.Web</em> project as the startup project and the <em>MSDNFlashRTRIAExampleTestPage.html</em> page as the startup page.</p>
<div id="attachment_488" class="wp-caption alignnone" style="width: 345px"><img class="size-full wp-image-488" title="Setting up the solution to run the application" src="http://www.leggetter.co.uk/wp-content/uploads/2009/11/SetupForRunning.png" alt="Setting up the solution to run the application" width="335" height="264" /><p class="wp-caption-text">Setting up the solution to run the application</p></div>
<p>If you&#8217;d like to find out a bit more about the code then read on. If you&#8217;d rather jump straight into the code you can download it from the <a  href="http://code.google.com/p/tweetstreamer/">TweetStreamer Google Code project</a>.<br />
<span id="more-423"></span></p>
<h3>The streaming connection</h3>
<p>The following extracts of code may be slightly modified but that has been done to be able to explain what the code does in general a bit better.</p>
<p>The following extract is used to establish a connection to the Twitter real-time data stream using a <a  href="http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest(VS.95).aspx">HttpWebRequest</a>. The important thing to note is the use of <code>request.AllowReadStreamBuffering = false;</code> which is required since we are requesting a streaming feed. Without setting the <a  href="http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.allowreadstreambuffering(VS.95).aspx">AllowReadStreamBuffering</a> property to <code>false</code> the <code>ConnectionResponseCallback</code> callback will not be invoked because the response will be continuously buffering.</p>
<p>Since the Twitter real-time data stream requires authentication, and we can&#8217;t set <a  href="http://msdn.microsoft.com/en-us/library/system.net.webrequest.credentials(VS.95).aspx">Credentials</a> on the <code>HttpWebRequest</code> in Silverlight, the browser will prompt the user for a username and password.</p>
<pre class="brush: csharp;">
private const string SPRITZER_URL = &quot;http://stream.twitter.com/1/statuses/sample.json&quot;;

/// &lt;summary&gt;
/// Starts the connection to the Twitter real-time data stream.
/// &lt;/summary&gt;
public void Connect()
{
    this.InternalConnectionStatus = ConnectionStatus.Connecting;

    try
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(SPRITZER_URL));
        request.AllowReadStreamBuffering = false;
        request.BeginGetResponse(ConnectionResponseCallback, request);
    }
    catch (Exception ex)
    {
        Debug.WriteLine(ex);
        this.InternalConnectionStatus = ConnectionStatus.Disconnected;
    }
}
</pre>
<p>Within the callback method we ensure that we are connected and then call the <code>ReadResponseStream</code> method which will not return until we call <code>Disconnect()</code>.</p>
<pre class="brush: csharp;">
/// &lt;summary&gt;
/// Called when the initial connection has been established.
/// &lt;/summary&gt;
private void ConnectionResponseCallback(IAsyncResult asynchronousResult)
{
    try
    {
        HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
        using (HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult))
        {
            if (response.StatusCode == HttpStatusCode.OK)
            {
                this.InternalConnectionStatus = ConnectionStatus.Connected;

                this.ReadResponseStream(request, response);

                if (this.InternalConnectionStatus != ConnectionStatus.Disconnecting)
                {
                    // unexpected status
                    Debug.WriteLine(&quot;unexpected connection status: &quot; + this.InternalConnectionStatus);
                }
            }
            else
            {
                Debug.WriteLine(&quot;unexpected status code: &quot; + response.StatusCode);
            }
        }

        this.InternalConnectionStatus = ConnectionStatus.Disconnected;
    }
    catch (Exception ex)
    {
        Debug.WriteLine(ex);
    }
}
</pre>
<p>In the <code>ReadResponseStream</code> method we continually read the stream until we are interrupted by the user setting the connection status to a value other than <code>ConnectionStatus.Connected</code>, by calling the <code>Disconnect()</code> method, or an exception is thrown whilst reading from the <code>stream</code>. For each read from the stream we parse the data to get the tweets from the real-time data feed in <a  href="http://json.org/">JSON</a> format.</p>
<pre class="brush: csharp;">
/// &lt;summary&gt;
/// Reads the information received from the Twitter real-time data stream.
/// &lt;/summary&gt;
private void ReadResponseStream(HttpWebRequest request, HttpWebResponse response)
{
    byte[] buffer = new byte[65536];
    using (Stream stream = response.GetResponseStream())
    {
        while (this.InternalConnectionStatus == ConnectionStatus.Connected)
        {
            int read = stream.Read(buffer, 0, buffer.Length);
            UTF8Encoding encoding = new UTF8Encoding();
            string data = encoding.GetString(buffer, 0, read);
            ParseResponseChunk(data);
        }

        // need to call request.Abort or the the thread will block at the end of
        // the using block.
        request.Abort();
    }
}
</pre>
<p>The <code>ParseResponseChunk</code> checks the data it&#8217;s passed and ensures that the data contains at least one full status message (tweet). I&#8217;ll not go into the details of that here since it&#8217;s just a matter of string parsing.</p>
<p><small>I chose to use the JSON format simply because the content passed over the wire is smaller than the XML feed. This should mean that the application has to do less work to read all the data. What we really should also do is benchmark the deserialisation of JSON against the deserialisation of XML to see which performs best within a Silverlight application.<br />
</small></p>
<h3>Deserialising the JSON</h3>
<p>The following JavaScript JSON snipped shows an example of a single Tweet that we get back from the Twitter real-time data feed.</p>
<pre class="brush: jscript;">
{
    &quot;in_reply_to_status_id&quot;:9999999,
    &quot;in_reply_to_user_id&quot;:00000000,
    &quot;favorited&quot;:false,
    &quot;in_reply_to_screen_name&quot;:&quot;leggetter&quot;,
    &quot;text&quot;:&quot;@leggetter Wow! A Real-Time Rich Internet Application (RTRIA)&quot;,
    &quot;id&quot;:2820354600,
    &quot;created_at&quot;:&quot;Fri Nov 4 09:39:33 +0000 2009&quot;,
    &quot;truncated&quot;:false,
    &quot;source&quot;:&quot;&lt;a href=\&quot;http:\/\/tweetdeck.com\/\&quot;&gt;TweetDeck&lt;\/a&gt;&quot;
}
</pre>
<p>The JSON can be deserialised as an instance of a C# class using the <a  href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractattribute(VS.95).aspx">DataContract</a> attribute on the class and the <a  href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datamemberattribute(VS.95).aspx">DataMember</a> attributes on properties.</p>
<pre class="brush: csharp;">
using System;
using System.Runtime.Serialization.Json;
using System.Runtime.Serialization;
using System.ComponentModel;

namespace TweetStreamer
{
    [DataContract]
    public class StatusMessage : IStatusMessage, INotifyPropertyChanged
    {
        [DataMember(Name = &quot;text&quot;)]
        public string Text {get;set}
    }
}
</pre>
<p>A single Tweet, or in TweetStreamer a <code>StatusMessage</code>, can be deserialised using an instance of the <a  href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.json.datacontractjsonserializer(VS.95).aspx">DataContractJsonSerializer</a>.</p>
<pre class="brush: csharp;">
/// &lt;summary&gt;
/// Creates a single message from json string.
/// &lt;/summary&gt;
/// &lt;param name=&quot;messageData&quot;&gt;The message data.&lt;/param&gt;
/// &lt;returns&gt;&lt;/returns&gt;
private static IStatusMessage CreateMessageFromJsonString(string messageData)
{
    Debug.WriteLine(String.Format(&quot;Creating StatusMessage for: {0}&quot;, messageData));

    IStatusMessage message = null;

    using (MemoryStream stream = new MemoryStream(UTF8Encoding.UTF8.GetBytes(messageData)))
    {
        DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(StatusMessage));
        message = ser.ReadObject(stream) as StatusMessage;
    }

    if (string.IsNullOrEmpty(message.Id))
    {
        message = null;
        Debug.WriteLine(&quot;message had no ID. Assuming to be a delete message so nulling message object&quot;);
    }

    return message;
}
</pre>
<h3>Binding the data to the grid</h3>
<p>To bind the data to a DataGrid the grid needs to be defined in XAML. In addition we can specify the properties on the <code>StatusMessage</code> that we want to bind to columns. In the XAML below we are binding the <code>CreatedAtString</code> property to a Time column, a <code>User.ScreenName</code> to a User column, and a <code>Text</code> property to a Message column. Notice the cool binding of <code>User.ScreenName</code>. The <code>StatusMessage.User</code> property returns an instance of another class and we are actually binding to a property on the returned class.</p>
<pre class="brush: xml;">
&lt;data:DataGrid Grid.Row=&quot;0&quot; x:Name=&quot;Tweets&quot; AutoGenerateColumns=&quot;False&quot;&gt;
    &lt;data:DataGrid.Columns&gt;
        &lt;data:DataGridTextColumn Header=&quot;Time&quot;
            Binding=&quot;{Binding CreatedAtString}&quot; /&gt;
        &lt;data:DataGridTextColumn Header=&quot;User&quot;
            Binding=&quot;{Binding User.ScreenName}&quot; /&gt;
        &lt;data:DataGridTextColumn Header=&quot;Message&quot;
            Binding=&quot;{Binding Text}&quot; /&gt;
    &lt;/data:DataGrid.Columns&gt;
&lt;/data:DataGrid&gt;
</pre>
<p>Next, the code to set up the binding and registering for <code>StatusMessage</code> updates using the <code> StatusMessageReceived</code> event. As you many have noticed, the <code>StatusMessage</code> object implements the <a  href="http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged(VS.95).aspx">INotifyPropertyChanged</a> interface. This was used so that we could add each <code>StatusMessage</code> to an <a  href="http://msdn.microsoft.com/en-us/library/ms668604(VS.95).aspx">ObservableCollection&lt;T&gt;</a> and then bind it to a <a  href="http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid(VS.95).aspx">DataGrid</a> to display the Tweets in real-time.</p>
<pre class="brush: csharp;">
Connection _twitterConnection;
ObservableCollection&lt;IStatusMessage&gt; _messages = new ObservableCollection&lt;IStatusMessage&gt;();
public MainPage()
{
    InitializeComponent();

    Tweets.ItemsSource = _messages;

    _twitterConnection = new Connection();
    _twitterConnection.StatusMessageReceived += new Connection.OnStatusMessageReceivedEventHandler
        (twitterConnection_StatusMessageReceived);
    _twitterConnection.Connect();
}
</pre>
<p>Finally, whenever we get a <code>StatusMessageReceived</code> callback we need to add the new <code>StatusMessage</code> to the <code>ObservableCollection<T></code> collection. <em>This has to be done on the UI thread and via the <code>Tweets.ItemsSource</code> property or the UI will not update.</em></p>
<pre class="brush: csharp;">
/// &lt;summary&gt;
/// Status message received event handler.
/// &lt;/summary&gt;
/// &lt;param name=&quot;sender&quot;&gt;&lt;/param&gt;
/// &lt;param name=&quot;args&quot;&gt;&lt;/param&gt;
void twitterConnection_StatusMessageReceived(object sender, IStatusMessageReceivedEventArgs args)
{
    Dispatcher.BeginInvoke(() =&gt;
        AddMessage(args.Message)
    );
}

/// &lt;summary&gt;
/// Adds a message to the observable message list which updates the UI.
/// &lt;/summary&gt;
/// &lt;param name=&quot;message&quot;&gt;&lt;/param&gt;
void AddMessage(IStatusMessage message)
{
    ObservableCollection&lt;IStatusMessage&gt; messageList = ((ObservableCollection&lt;IStatusMessage&gt;)Tweets.ItemsSource);
    messageList.Insert(0, message);
}
</pre>
<p>Hopefully this will have helped you understand how the Twitter real-time data stream is consumed and an example of how you can use it within a <strong>Real-Time Rich Internet Application</strong>. Now, why now <a  href="http://code.google.com/p/tweetstreamer/">download the TweetStreamer library and example application</a> and have a play.</p>
<div class="information"><strong>Limitations</strong>: Although I&#8217;ve seen the sample application perform reasonably well I&#8217;ve also seen it perform quite poorly. How well it performs will depend on the machine running the application and the frequency of the updates from the real-time Twitter stream. In later posts I&#8217;ll provide information on how to improve performance by making changes to the client code and I&#8217;ll also go into what can be done on the server.</div>
<h3>Download</h3>
<p>You can download the source from the <a  href="http://code.google.com/p/tweetstreamer/">TweetStreamer Google Code project</a>.<br />
<a name="screencast"></a></p>
<h2>Screencast</h2>
<p>This screencast was supposed to be short but ended up being just shy of 10 minutes. In it I provide some technical detail of how I built the application, show the basics of how Fiddler is used to give access to the Twitter real-time data stream, and give a demo of the application.<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="625" height="505" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/5T_jiZCzg4U&amp;hl=en&amp;fs=1&amp;rel=0&amp;hd=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="625" height="505" src="http://www.youtube.com/v/5T_jiZCzg4U&amp;hl=en&amp;fs=1&amp;rel=0&amp;hd=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p><!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em> </em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.leggetter.co.uk/2009/11/03/a-real-time-rich-internet-application-rtria-example.html&amp;title=A+Real+Time+Rich+Internet+Application+%28RTRIA%29+Example" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.leggetter.co.uk/2009/11/03/a-real-time-rich-internet-application-rtria-example.html&amp;title=A+Real+Time+Rich+Internet+Application+%28RTRIA%29+Example" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://www.leggetter.co.uk/2009/11/03/a-real-time-rich-internet-application-rtria-example.html&amp;title=A+Real+Time+Rich+Internet+Application+%28RTRIA%29+Example" rel="nofollow" title="Add to&nbsp;DotNetKicks"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Add to&nbsp;DotNetKicks" alt="Add to&nbsp;DotNetKicks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://www.leggetter.co.uk/2009/11/03/a-real-time-rich-internet-application-rtria-example.html" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.leggetter.co.uk/2009/11/03/a-real-time-rich-internet-application-rtria-example.html&amp;title=A+Real+Time+Rich+Internet+Application+%28RTRIA%29+Example" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.leggetter.co.uk/2009/11/03/a-real-time-rich-internet-application-rtria-example.html&amp;title=A+Real+Time+Rich+Internet+Application+%28RTRIA%29+Example" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://www.leggetter.co.uk/2009/11/03/a-real-time-rich-internet-application-rtria-example.html&amp;title=A+Real+Time+Rich+Internet+Application+%28RTRIA%29+Example" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.leggetter.co.uk/2009/11/03/a-real-time-rich-internet-application-rtria-example.html" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+A+Real+Time+Rich+Internet+Application+%28RTRIA%29+Example+@+http://www.leggetter.co.uk/2009/11/03/a-real-time-rich-internet-application-rtria-example.html" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://www.leggetter.co.uk/2009/11/03/a-real-time-rich-internet-application-rtria-example.html&amp;t=A+Real+Time+Rich+Internet+Application+%28RTRIA%29+Example" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->


<p>Related posts:<ol><li><a href='http://www.leggetter.co.uk/2009/10/29/real-time-rich-internet-applications-rtria.html' rel='bookmark' title='Permanent Link: Real-Time Rich Internet Applications (RTRIA)'>Real-Time Rich Internet Applications (RTRIA)</a></li><li><a href='http://www.leggetter.co.uk/2009/10/30/using-fiddler-to-trick-silverlight-into-allowing-a-crossdomain-web-request.html' rel='bookmark' title='Permanent Link: Using Fiddler to trick Silverlight into allowing a crossdomain Web Request'>Using Fiddler to trick Silverlight into allowing a crossdomain Web Request</a></li><li><a href='http://www.leggetter.co.uk/2009/11/07/which-rich-internet-application-technology-will-dominate.html' rel='bookmark' title='Permanent Link: Which Rich Internet Application Technology will dominate?'>Which Rich Internet Application Technology will dominate?</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.leggetter.co.uk/2009/11/03/a-real-time-rich-internet-application-rtria-example.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.leggetter.co.uk/2009/11/03/a-real-time-rich-internet-application-rtria-example.html</feedburner:origLink></item>
		<item>
		<title>Using Fiddler to trick Silverlight into allowing a crossdomain Web Request</title>
		<link>http://feedproxy.google.com/~r/PhilLeggettersBlog/~3/hqN_Vz0Ysq8/using-fiddler-to-trick-silverlight-into-allowing-a-crossdomain-web-request.html</link>
		<comments>http://www.leggetter.co.uk/2009/10/30/using-fiddler-to-trick-silverlight-into-allowing-a-crossdomain-web-request.html#comments</comments>
		<pubDate>Fri, 30 Oct 2009 11:06:06 +0000</pubDate>
		<dc:creator>Phil Leggetter</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[real-time]]></category>
		<category><![CDATA[real-time data]]></category>
		<category><![CDATA[real-time web]]></category>
		<category><![CDATA[RTRIA]]></category>
		<category><![CDATA[silverlight]]></category>

		<guid isPermaLink="false">http://www.leggetter.co.uk/?p=425</guid>
		<description><![CDATA[If you are trying to make a web request from a Silverlight application the first thing the Silverlight runtime will do is request a security policy file (see Network Security Access Restrictions in Silverlight) from the root of the server you are making your web request to. This happens if you are making your request [...]


Related posts:<ol><li><a href='http://www.leggetter.co.uk/2008/10/24/how-to-make-a-cross-domain-web-request-with-silverlight-2.html' rel='bookmark' title='Permanent Link: How to make a cross domain web request with SilverLight 2'>How to make a cross domain web request with SilverLight 2</a></li><li><a href='http://www.leggetter.co.uk/2009/11/07/which-rich-internet-application-technology-will-dominate.html' rel='bookmark' title='Permanent Link: Which Rich Internet Application Technology will dominate?'>Which Rich Internet Application Technology will dominate?</a></li><li><a href='http://www.leggetter.co.uk/2009/10/29/real-time-rich-internet-applications-rtria.html' rel='bookmark' title='Permanent Link: Real-Time Rich Internet Applications (RTRIA)'>Real-Time Rich Internet Applications (RTRIA)</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>If you are trying to make a web request from a Silverlight application the first thing the Silverlight runtime will do is request a security policy file (see <a  href="http://msdn.microsoft.com/en-us/library/cc645032(VS.95).aspx">Network Security Access Restrictions in Silverlight</a>) from the root of the server you are making your web request to. This happens if you are making your request using the <a  href="http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest(VS.95).aspx">HttpWebRequest</a> or <a  href="http://msdn.microsoft.com/en-us/library/system.net.webclient(VS.95).aspx">WebClient</a> class. If the Silverlight runtime fails to get a security policy file your web request will fail. If your Silverlight application relies on this web request then you are going to need to contact the server owner and get them to add a security file but until then you can use the <a  href="http://www.fiddler2.com/fiddler2/">Fiddler HTTP Proxy</a> to trick the Silverlight runtime into believing that it does have permission to make the request.<br />
<span id="more-425"></span><br />
<small>If you want to skip the explanation you can jump <a  href="#screencast">straight to the screencast</a></small></p>
<h2>How Silverlight makes a web request</h2>
<p>If you were making a web request from Silverlight to download the following page:</p>
<p><code><a  href="http://www.leggetter.co.uk/2009/10/23/how-i-approach-problem-solving-in-code.html" rel="nofollow">http://www.leggetter.co.uk/2009/10/23/how-i-approach-problem-solving-in-code.html</a></code></p>
<p>The Silverlight runtime would first request</p>
<p><code><a  href="http://www.leggetter.co.uk/clientaccesspolicy.xml" rel="nofollow">http://www.leggetter.co.uk/clientaccesspolicy.xml</a></code></p>
<p>If this request fails it will then request</p>
<p><code><a  href="http://www.leggetter.co.uk/crossdomain.xml" rel="nofollow">http://www.leggetter.co.uk/crossdomain.xml</a></code></p>
<p>If both of these requests fail (return a 404 HTTP status) the Silverlight runtime will not allow you to make your web request. *</p>
<p><small>* Note: The web request failure due to a failure to download a security policy file can manifest itself in a number of ways. I&#8217;ll try to remember to put a post up about this later.</small></p>
<p>The clientaccesspolicy.xml file is Microsoft&#8217;s own security policy file. The crossdomain.xml file is used by Adobe Flash but is also supported by Silverlight. For more information see <a  href="http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7e08.html#WS366737CC-0BD3-47b4-8292-569FB3AA276B">master-policy file</a>.</p>
<p>Now that we&#8217;ve got the background information out of the way we can get on to the interesting stuff.</p>
<h2>An example using the Twitter Streaming Feed</h2>
<p>If you wanted to write your own <a  href="http://www.leggetter.co.uk/2009/10/29/real-time-rich-internet-applications-rtria.html">Real-Time Rich Internet Application (RTRIA)</a> that consumed data from the <a  href="http://apiwiki.twitter.com/Streaming-API-Documentation">Twitter real-time data stream</a> you&#8217;d be stuck. Well, you&#8217;ll be stuck until Twitter puts a security policy file up **. Until then you can trick the Silverlight runtime by using <a  href="http://www.fiddler2.com/fiddler2/">Fiddler</a> to detect the security policy file request and fake a response.</p>
<p><small>**  The following URLs are where Twitter would put their security policy files should they decide to allow cross domain access. Please not that you&#8217;ll be prompted for your Twitter username and password if you click on them by the browser because you need to sign in with valid twitter credentials to access the twitter <em>stream</em> domain: <a  href="http://stream.twitter.com/clientaccesspolicy.xml" rel="nofollow">http://stream.twitter.com/clientaccesspolicy.xml</a> and <a  href="http://stream.twitter.com/crossdomain.xml)" rel="nofollow">http://stream.twitter.com/crossdomain.xml)</a></small></p>
<p>To do this you will need to set up an <a  href="http://www.fiddler2.com/Fiddler2/help/AutoResponder.asp">AutoResponder</a> in Fiddler that intercepts the request for the security policy file by the Silverlight runtime and returns a fake security policy file. In the example below I have an AutoResponder set up for <code><a  href="http://stream.twitter.com/crossdomain.xml" rel="nofollow">http://stream.twitter.com/crossdomain.xml</a></code>.</p>
<div id="attachment_426" class="wp-caption alignnone" style="width: 310px"><a  title="Using Fiddler to AutoRespond with a fake Security Policy File " href="http://www.leggetter.co.uk/wp-content/uploads/2009/10/UsingFiddlerToAutoRespondWithAFakeSecurityPolicyFile.png" class="thickbox no_icon" rel="gallery-425"><img class="size-medium wp-image-426 " title="UsingFiddlerToAutoRespondWithAFakeSecurityPolicyFile" src="http://www.leggetter.co.uk/wp-content/uploads/2009/10/UsingFiddlerToAutoRespondWithAFakeSecurityPolicyFile-300x195.png" alt="Using Fiddler to AutoRespond with a fake Security Policy File" width="300" height="195" /></a><p class="wp-caption-text">Using Fiddler to AutoRespond with a fake Security Policy File</p></div>
<p>Here&#8217;s an example of a crossdomain.xml security policy file which grants access to requests from all domains.</p>
<pre>&lt;?xml version="1.0"?&gt;
&lt;!DOCTYPE cross-domain-policy
  SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"&gt;
&lt;cross-domain-policy&gt;
  &lt;allow-access-from domain="*" /&gt;
&lt;/cross-domain-policy&gt;</pre>
<p>Once you&#8217;ve set up the AutoResponder start Fiddler. Then start your Silverlight application that is trying to stream data from Twitter and bingo! You should have real-time data from Twitter in your RIA &#8211; a Real-Time Rich Internet Application (RTRIA).</p>
<p><a name="screencast"></a></p>
<h2>Fiddler HTTP Proxy Screencast</h2>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://www.youtube.com/v/NXSmH9aWxeo&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en&amp;feature=player_embedded&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/NXSmH9aWxeo&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en&amp;feature=player_embedded&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p><!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em> </em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.leggetter.co.uk/2009/10/30/using-fiddler-to-trick-silverlight-into-allowing-a-crossdomain-web-request.html&amp;title=Using+Fiddler+to+trick+Silverlight+into+allowing+a+crossdomain+Web+Request" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.leggetter.co.uk/2009/10/30/using-fiddler-to-trick-silverlight-into-allowing-a-crossdomain-web-request.html&amp;title=Using+Fiddler+to+trick+Silverlight+into+allowing+a+crossdomain+Web+Request" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://www.leggetter.co.uk/2009/10/30/using-fiddler-to-trick-silverlight-into-allowing-a-crossdomain-web-request.html&amp;title=Using+Fiddler+to+trick+Silverlight+into+allowing+a+crossdomain+Web+Request" rel="nofollow" title="Add to&nbsp;DotNetKicks"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Add to&nbsp;DotNetKicks" alt="Add to&nbsp;DotNetKicks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://www.leggetter.co.uk/2009/10/30/using-fiddler-to-trick-silverlight-into-allowing-a-crossdomain-web-request.html" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.leggetter.co.uk/2009/10/30/using-fiddler-to-trick-silverlight-into-allowing-a-crossdomain-web-request.html&amp;title=Using+Fiddler+to+trick+Silverlight+into+allowing+a+crossdomain+Web+Request" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.leggetter.co.uk/2009/10/30/using-fiddler-to-trick-silverlight-into-allowing-a-crossdomain-web-request.html&amp;title=Using+Fiddler+to+trick+Silverlight+into+allowing+a+crossdomain+Web+Request" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://www.leggetter.co.uk/2009/10/30/using-fiddler-to-trick-silverlight-into-allowing-a-crossdomain-web-request.html&amp;title=Using+Fiddler+to+trick+Silverlight+into+allowing+a+crossdomain+Web+Request" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.leggetter.co.uk/2009/10/30/using-fiddler-to-trick-silverlight-into-allowing-a-crossdomain-web-request.html" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Using+Fiddler+to+trick+Silverlight+into+allowing+a+crossdomain+Web+Request+@+http://www.leggetter.co.uk/2009/10/30/using-fiddler-to-trick-silverlight-into-allowing-a-crossdomain-web-request.html" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://www.leggetter.co.uk/2009/10/30/using-fiddler-to-trick-silverlight-into-allowing-a-crossdomain-web-request.html&amp;t=Using+Fiddler+to+trick+Silverlight+into+allowing+a+crossdomain+Web+Request" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->


<p>Related posts:<ol><li><a href='http://www.leggetter.co.uk/2008/10/24/how-to-make-a-cross-domain-web-request-with-silverlight-2.html' rel='bookmark' title='Permanent Link: How to make a cross domain web request with SilverLight 2'>How to make a cross domain web request with SilverLight 2</a></li><li><a href='http://www.leggetter.co.uk/2009/11/07/which-rich-internet-application-technology-will-dominate.html' rel='bookmark' title='Permanent Link: Which Rich Internet Application Technology will dominate?'>Which Rich Internet Application Technology will dominate?</a></li><li><a href='http://www.leggetter.co.uk/2009/10/29/real-time-rich-internet-applications-rtria.html' rel='bookmark' title='Permanent Link: Real-Time Rich Internet Applications (RTRIA)'>Real-Time Rich Internet Applications (RTRIA)</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.leggetter.co.uk/2009/10/30/using-fiddler-to-trick-silverlight-into-allowing-a-crossdomain-web-request.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.leggetter.co.uk/2009/10/30/using-fiddler-to-trick-silverlight-into-allowing-a-crossdomain-web-request.html</feedburner:origLink></item>
		<item>
		<title>Real-Time Rich Internet Applications (RTRIA)</title>
		<link>http://feedproxy.google.com/~r/PhilLeggettersBlog/~3/LK6RFzL9dk4/real-time-rich-internet-applications-rtria.html</link>
		<comments>http://www.leggetter.co.uk/2009/10/29/real-time-rich-internet-applications-rtria.html#comments</comments>
		<pubDate>Thu, 29 Oct 2009 10:15:06 +0000</pubDate>
		<dc:creator>Phil Leggetter</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[pubsubhubbub]]></category>
		<category><![CDATA[real-time]]></category>
		<category><![CDATA[real-time data]]></category>
		<category><![CDATA[real-time web]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[rssCloud]]></category>
		<category><![CDATA[RTRIA]]></category>
		<category><![CDATA[silverlight]]></category>

		<guid isPermaLink="false">http://www.leggetter.co.uk/?p=456</guid>
		<description><![CDATA[Real-Time Rich Internet Applications (RTRIAs) are RIAs that consume and display real-time data. They have all the characteristics of an RIA with the added feature that data is being pushed to them in real-time as soon as it becomes available. This is in contrast to the current polling solution employed by most RIAs or other [...]


Related posts:<ol><li><a href='http://www.leggetter.co.uk/2009/11/07/which-rich-internet-application-technology-will-dominate.html' rel='bookmark' title='Permanent Link: Which Rich Internet Application Technology will dominate?'>Which Rich Internet Application Technology will dominate?</a></li><li><a href='http://www.leggetter.co.uk/2009/10/30/using-fiddler-to-trick-silverlight-into-allowing-a-crossdomain-web-request.html' rel='bookmark' title='Permanent Link: Using Fiddler to trick Silverlight into allowing a crossdomain Web Request'>Using Fiddler to trick Silverlight into allowing a crossdomain Web Request</a></li><li><a href='http://www.leggetter.co.uk/2009/07/09/wikipedia-now-has-a-definition-for-real-time-web.html' rel='bookmark' title='Permanent Link: Wikipedia now has a definition for Real-Time Web'>Wikipedia now has a definition for Real-Time Web</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p><strong>Real-Time Rich Internet Applications</strong> (<strong>RTRIA</strong>s) are <a  href="http://en.wikipedia.org/wiki/Rich_Internet_application">RIA</a>s that consume and display real-time data. They have all the characteristics of an RIA with the added feature that data is being pushed to them in real-time as soon as it becomes available. This is in contrast to the current polling solution employed by most RIAs or other web applications that display updating data.</p>
<p>I mentioned <strong>RTRIA</strong>s for the first time back in April 2009 in a post called &#8220;<a  href="http://blog.caplin.com/2009/04/20/what-is-the-real-time-web/">What is the real-time web</a>&#8221; on the Caplin Systems Platformability blog, and since then there has been a real-time web explosion. The &#8220;real-time web&#8221; is now <strong>the</strong> buzz phrase around the Internet that everybody is jumping on. Back in April I set up a <a  href="http://www.google.com/alerts">Google Alert</a> for the term &#8220;real-time web&#8221;. Back then I got maybe one Google Alert a day for this term, probably less. Now, I get at least two dense emails a day from Google with people using the term for all sorts of things; real-time web stats, real-time analytics, real-time search, <a  href="http://rsscloud.org/">rssCloud</a>, <a  href="http://code.google.com/p/pubsubhubbub/">pubsubhubbub</a>, the list goes on. <em>This is not the real-time web!</em> Whilst some of the things on this list will help  the web become <em>truly real-time</em> (rssCloud and pubsubhubbub may even form the back bone), none of these things give the user a truly real-time web experience.</p>
<p><span id="more-456"></span></p>
<p>My opinion about what the real-time web is has not changed from that <a  href="http://blog.caplin.com/2009/04/20/what-is-the-real-time-web/">first blog post</a>. For me, it&#8217;s not just about <em>data being available</em> as soon as it&#8217;s been published. In this situation the user still has to actively make a request to see if any data is available. Instead it&#8217;s about making a single request for data (a <em>subscription</em>) and that data being pushed to your RIA to be consumed by the application user in real-time. Quite a few applications have implemented a polling solution (more on this later) but the experience presented to the user is not <em>truly real-time</em>.</p>
<div id="attachment_463" class="wp-caption alignnone" style="width: 669px"><a  href="http://www.leggetter.co.uk/wp-content/uploads/2009/10/real-time-web-twitter-search.png" class="thickbox no_icon" rel="gallery-456" title="Twitter &quot;real-time web&quot; search results"><img class="size-full wp-image-463" title="Twitter &quot;real-time web&quot; search results" src="http://www.leggetter.co.uk/wp-content/uploads/2009/10/real-time-web-twitter-search.png" alt="&quot;Real-Time&quot;" width="659" height="429" /></a><p class="wp-caption-text">&quot;Real-Time?&quot;</p></div>
<p>In my opinion the only way to guarantee being able to deliver <em>truly real-time data</em> (<strong>TRTD</strong>) to a web application is by maintaining a streaming connection to the source of the data using a <em>continuous</em> streaming HTTP connection. Most web applications use a technique called polling or <a  href="http://en.wikipedia.org/wiki/Push_technology#Long_polling">long polling</a> to retrieve their data which means that although the data is initially &#8220;fresh&#8221;, within seconds it could be out of date, or more information may be available. I&#8217;ll discuss server technologies further in a later post.</p>
<p>At the moment there are a number of technologies that allow you to develop RTRIAs. <a  href="http://en.wikipedia.org/wiki/Ajax_(programming)">Ajax</a>, <a  href="http://www.microsoft.com/SILVERLIGHT/overview/default.aspx">Silverlight</a> and <a  href="http://www.adobe.com/flashplatform/">Flash</a> are the three mainstream solutions. The core barriers to RTRIAs are the scalability of server technology and access to truly real-time data.</p><!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em> </em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.leggetter.co.uk/2009/10/29/real-time-rich-internet-applications-rtria.html&amp;title=Real-Time+Rich+Internet+Applications+%28RTRIA%29" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.leggetter.co.uk/2009/10/29/real-time-rich-internet-applications-rtria.html&amp;title=Real-Time+Rich+Internet+Applications+%28RTRIA%29" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://www.leggetter.co.uk/2009/10/29/real-time-rich-internet-applications-rtria.html&amp;title=Real-Time+Rich+Internet+Applications+%28RTRIA%29" rel="nofollow" title="Add to&nbsp;DotNetKicks"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Add to&nbsp;DotNetKicks" alt="Add to&nbsp;DotNetKicks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://www.leggetter.co.uk/2009/10/29/real-time-rich-internet-applications-rtria.html" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.leggetter.co.uk/2009/10/29/real-time-rich-internet-applications-rtria.html&amp;title=Real-Time+Rich+Internet+Applications+%28RTRIA%29" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.leggetter.co.uk/2009/10/29/real-time-rich-internet-applications-rtria.html&amp;title=Real-Time+Rich+Internet+Applications+%28RTRIA%29" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://www.leggetter.co.uk/2009/10/29/real-time-rich-internet-applications-rtria.html&amp;title=Real-Time+Rich+Internet+Applications+%28RTRIA%29" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.leggetter.co.uk/2009/10/29/real-time-rich-internet-applications-rtria.html" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Real-Time+Rich+Internet+Applications+%28RTRIA%29+@+http://www.leggetter.co.uk/2009/10/29/real-time-rich-internet-applications-rtria.html" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://www.leggetter.co.uk/2009/10/29/real-time-rich-internet-applications-rtria.html&amp;t=Real-Time+Rich+Internet+Applications+%28RTRIA%29" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->


<p>Related posts:<ol><li><a href='http://www.leggetter.co.uk/2009/11/07/which-rich-internet-application-technology-will-dominate.html' rel='bookmark' title='Permanent Link: Which Rich Internet Application Technology will dominate?'>Which Rich Internet Application Technology will dominate?</a></li><li><a href='http://www.leggetter.co.uk/2009/10/30/using-fiddler-to-trick-silverlight-into-allowing-a-crossdomain-web-request.html' rel='bookmark' title='Permanent Link: Using Fiddler to trick Silverlight into allowing a crossdomain Web Request'>Using Fiddler to trick Silverlight into allowing a crossdomain Web Request</a></li><li><a href='http://www.leggetter.co.uk/2009/07/09/wikipedia-now-has-a-definition-for-real-time-web.html' rel='bookmark' title='Permanent Link: Wikipedia now has a definition for Real-Time Web'>Wikipedia now has a definition for Real-Time Web</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.leggetter.co.uk/2009/10/29/real-time-rich-internet-applications-rtria.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.leggetter.co.uk/2009/10/29/real-time-rich-internet-applications-rtria.html</feedburner:origLink></item>
		<item>
		<title>How I approach problem solving in code?</title>
		<link>http://feedproxy.google.com/~r/PhilLeggettersBlog/~3/HEWlfO28DGI/how-i-approach-problem-solving-in-code.html</link>
		<comments>http://www.leggetter.co.uk/2009/10/23/how-i-approach-problem-solving-in-code.html#comments</comments>
		<pubDate>Fri, 23 Oct 2009 17:44:57 +0000</pubDate>
		<dc:creator>Phil Leggetter</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[problem solving]]></category>

		<guid isPermaLink="false">http://www.leggetter.co.uk/?p=382</guid>
		<description><![CDATA[Recently I was posed the following question:
Write a piece of code that prints all odd integer numbers between 1 and 99
This really isn&#8217;t a difficult question but it still requires some thought. When I&#8217;m posed with any question I like to break things down into their constituent parts.
Here&#8217;s the process I went through:
Okay, so I&#8217;ll [...]


Related posts:<ol><li><a href='http://www.leggetter.co.uk/2008/12/10/problem-solving-lessons-relearnt.html' rel='bookmark' title='Permanent Link: Problem solving lessons relearnt'>Problem solving lessons relearnt</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Recently I was posed the following question:</p>
<blockquote><p>Write a piece of code that prints all odd integer numbers between 1 and 99</p></blockquote>
<p>This really isn&#8217;t a difficult question but it still requires some thought. When I&#8217;m posed with any question I like to break things down into their constituent parts.</p>
<p>Here&#8217;s the process I went through:</p>
<p>Okay, so I&#8217;ll define two variables for a start and end value and there&#8217;s going to have to be a loop.</p>
<pre class="brush: csharp;">int startValue = 1;
int endValue = 99;
for(int i = startValue;
     i &amp;lt;= endValue;
     i++)
{
   // work out if &quot;i&quot; is an odd number
}</pre>
<p>Now, for the odd number detection. And&#8230; after a few umms and errrs &#8230; I&#8217;m going to have to mod 2 (<code>%2</code>) the current value of <code>i</code> to work out if the value is odd. More &#8230; umms and errs. Okay, I&#8217;ve finally worked out that if something mod 2 is not equal to 0 it&#8217;s clearly an odd number. This took me longer than it should have but never mind. Once I&#8217;ve detected if <code>i</code> is an odd number I&#8217;ll then put the odd number into a list for use later.</p>
<pre class="brush: csharp;">
int startValue = 1;
int endValue = 99;
IList&lt;int&gt; oddValues = new List&amp;lt;int&amp;gt;();
for(int i = startValue;
     i &amp;lt;= endValue;
     i++)
{
   if(i%2 != 0)
   {
      oddValues.Add(i);
   }
}
</pre>
<p>Those of you that are good at these little puzzles, or just think this is way too easy, might already be screaming at me about one of the following:</p>
<ul>
<li>Why are you using a <code>IList<int></code>, why don&#8217;t you just print the value?</li>
<li>Odd numbers are always 2 apart so why aren&#8217;t you just increment <code>i</code> by 2 using <code>i+=2</code>?</li>
</ul>
<p><span id="more-382"></span><br />
I admit it,  I missed the second point and that is a bit silly of me. However, what I have starting doing is <a  title="separation of concerns" href="http://en.wikipedia.org/wiki/Separation_of_concerns">separating the concerns</a> of the piece of code. The code does two things; it detects the odd number and it prints the odd numbers. Those are two very distinct things. So, my code now looks like this:</p>
<pre class="brush: csharp;">
int startValue = 1;
int endValue = 99;
IList&lt;int&gt; oddNumbers = new List&amp;lt;int&amp;gt;();
for(int i = startValue;
     i &amp;lt;= endValue;
     i++)
{
   if(i%2 != 0)
   {
      oddNumbers.Add(i);
   }
}

string oddNumbersList = string.Join(&quot;,&quot;, oddNumbers.ToArray());
Console.WriteLine(oddNumbersList );
</pre>
<p>I&#8217;m now going to refactor this further so I&#8217;ll put the two different pieces of functionality into different methods. I&#8217;ll rename the <code>i</code>, <code>startValue</code> and <code>endValue</code> variables to be something a bit more useful; say <code>numberToCheck</code>, <code>startNumber</code> and <code>endNumber</code>. I&#8217;ll also create another helper for the odd number checking named <code>IsOddNumber</code>:</p>
<pre class="brush: csharp;">
IList&lt;int&gt; GetOddNumbersBetween(int startNumber, int endNumber)
{
   IList oddValues = new List&amp;lt;int&amp;gt;();
   for(int numberToCheck = startNumber;
        numberToCheck &amp;lt;= endNumber;
        numberToCheck++)
   {
      if(IsOddNumber(numberToCheck) == true)
      {
         oddValues.Add(numberToChecki);
      }
   }
   return oddValues;
}

bool IsOddNumber(int number)
{
   return (number % 2 == 1);
}

void PrintOddNumbersBetween(int startNumber, int endNumber)
{
   IList&lt;int&gt; oddNumbers = GetOddNumbersBetween(startNumber, endNumber);
   string oddNumbersList = string.Join(&quot;,&quot;, oddNumbers.ToArray());
   Console.WriteLine(oddNumbersList);
}
</pre>
<p>Let&#8217;s say I then notice the second point you&#8217;ve been screaming at me about (Odd numbers are always 2 apart so why aren&#8217;t you just increment i by 2 using i+=2) that I mentioned above? In practice I should notice this sort of thing either when I give the code a complete review, or one of my peers spots it. When I see this problem I decide to update the <code>for</code> loop, as noted, and I then see that I possibly don&#8217;t need the <code>if(IsOddNumber(i) == true)</code> statement. Although it would pain me to do this, since it&#8217;s a lovely little method, I would need to consider deleting it. But then it strikes me, I&#8217;m no longer just solving the &#8220;odd numbers between 1 and 99 problem&#8221; so I can&#8217;t just assume that the <code>startNumber</code> is going to be an odd number. I need to make sure that it&#8217;s an odd number so I&#8217;ll create another small utility method for that called <code>EnsureOddNumber</code> which will check if the value passed is an odd number, and if not return the next odd number (I&#8217;d like to rethink the name of this method).</p>
<pre class="brush: csharp;">
IList&lt;int&gt; GetOddNumbersBetween(int startNumber, int endNumber)
{
   startNumber = EnsureOddNumber(startNumber);

   IList&lt;int&gt; oddValues = new List&amp;lt;int&amp;gt;();
   for(int numberToCheck = startNumber;
        numberToCheck &amp;lt;= endNumber;
        numberToCheck+=2)
   {
      oddValues.Add(numberToCheck);
   }
   return oddValues;
}

int EnsureOddNumber(int number)
{
   if( IsOddNumber(startNumber) == false )
   {
      startNumber++;
   }
   return startNumber;
}

bool IsOddNumber(int number)
{
   return (number % 2 == 1);
}

void PrintOddNumbersBetween(int startNumber, int endNumber)
{
   IList&lt;int&gt; oddNumbers = GetOddNumbersBetween(startNumber, endNumber);
   string oddNumbersList = string.Join(&quot;,&quot;, oddNumbers.ToArray());
   Console.WriteLine(oddNumbersList);
}
</pre>
<p>Now, when I look at this code I get a warm feeling because I feel that it solves the problem, it&#8217;s well engineered, the concerns are separated and the code is completely <a  href="http://en.wikipedia.org/wiki/Self-documenting">self documenting</a>.</p>
<p>There are a few comments that people may have here:</p>
<blockquote><p>The question asked specifically to print odd values between 1 and 99 and you&#8217;ve done more than was required.</p></blockquote>
<p>Although my answer does satisfy the original question have I over engineered things? The question does specifically ask us to print odd values between 1 and 99 so maybe I should have created a function that just satisfied that requirement.</p>
<pre class="brush: csharp;">
void PrintOddNumbersBetween1And99()
{
   for(int i = 1;
        i &amp;lt;= 99;
        i+=2)
   {
      Console.WriteLine(i + &quot; &quot;);
   }
}
</pre>
<p>And I&#8217;d have to admit that this very short piece of code exactly answers the question. But I&#8217;d also argue that there is very little chance of this code being reused. Don&#8217;t get me wrong, you definitely shouldn&#8217;t over engineer things but there should be some scope for <a  href="http://en.wikipedia.org/wiki/Code_reuse">code reuse</a>.</p>
<blockquote><p>For such a simple problem you&#8217;ve over engineered this.</p></blockquote>
<p>or</p>
<blockquote><p>There&#8217;s a better solutions that that&#8230; it&#8217;s not efficient</p></blockquote>
<p>Is creating four methods over engieering? Does my code require any comments to provide documentation? There may well be a more performant solution to this, but that&#8217;s not my point. My point is the way of approaching a question: the thought processes involved in understanding the problem and breaking it down to <a  href="http://en.wikipedia.org/wiki/Separation_of_concerns">separate concerns</a>, making it easy to read, <a  href="http://en.wikipedia.org/wiki/Code_reuse">reusable</a> and <a  href="http://en.wikipedia.org/wiki/Self-documenting">self documenting</a>. If the code that worked out the odd numbers is not efficient it could easily be changed in one place without impacting the interface, the other methods within the class, or the overall functionality.</p>
<p>Some people may jump to the simplest solution but I think the way i&#8217;ve described approaching and solving the problem demonstrates good practice. If I&#8217;m completely honest I would normally approach the development of something such as this by writing a test case first since I practice <a  href="http://en.wikipedia.org/wiki/Test-driven_development">TDD</a> but that can wait for another blog post.</p><!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em> </em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.leggetter.co.uk/2009/10/23/how-i-approach-problem-solving-in-code.html&amp;title=How+I+approach+problem+solving+in+code%3F" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.leggetter.co.uk/2009/10/23/how-i-approach-problem-solving-in-code.html&amp;title=How+I+approach+problem+solving+in+code%3F" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://www.leggetter.co.uk/2009/10/23/how-i-approach-problem-solving-in-code.html&amp;title=How+I+approach+problem+solving+in+code%3F" rel="nofollow" title="Add to&nbsp;DotNetKicks"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Add to&nbsp;DotNetKicks" alt="Add to&nbsp;DotNetKicks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://www.leggetter.co.uk/2009/10/23/how-i-approach-problem-solving-in-code.html" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.leggetter.co.uk/2009/10/23/how-i-approach-problem-solving-in-code.html&amp;title=How+I+approach+problem+solving+in+code%3F" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.leggetter.co.uk/2009/10/23/how-i-approach-problem-solving-in-code.html&amp;title=How+I+approach+problem+solving+in+code%3F" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://www.leggetter.co.uk/2009/10/23/how-i-approach-problem-solving-in-code.html&amp;title=How+I+approach+problem+solving+in+code%3F" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.leggetter.co.uk/2009/10/23/how-i-approach-problem-solving-in-code.html" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+How+I+approach+problem+solving+in+code%3F+@+http://www.leggetter.co.uk/2009/10/23/how-i-approach-problem-solving-in-code.html" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://www.leggetter.co.uk/2009/10/23/how-i-approach-problem-solving-in-code.html&amp;t=How+I+approach+problem+solving+in+code%3F" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->


<p>Related posts:<ol><li><a href='http://www.leggetter.co.uk/2008/12/10/problem-solving-lessons-relearnt.html' rel='bookmark' title='Permanent Link: Problem solving lessons relearnt'>Problem solving lessons relearnt</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.leggetter.co.uk/2009/10/23/how-i-approach-problem-solving-in-code.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.leggetter.co.uk/2009/10/23/how-i-approach-problem-solving-in-code.html</feedburner:origLink></item>
		<item>
		<title>Response.Redirect in Windows Azure</title>
		<link>http://feedproxy.google.com/~r/PhilLeggettersBlog/~3/y89Zzcl9KwU/response-redirect-in-windows-azure.html</link>
		<comments>http://www.leggetter.co.uk/2009/10/06/response-redirect-in-windows-azure.html#comments</comments>
		<pubDate>Tue, 06 Oct 2009 21:21:13 +0000</pubDate>
		<dc:creator>Phil Leggetter</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.leggetter.co.uk/?p=356</guid>
		<description><![CDATA[I&#8217;ve recently created an application called GetGravatar that allows you to update your Twitter profile picture with your Gravatar. Once I&#8217;d set up my Windows Azure custom domain name I decided I wanted the web address for this new service site to be without &#8220;www&#8221; as seems to be all the rage (to keep the [...]


Related posts:<ol><li><a href='http://www.leggetter.co.uk/2009/08/28/windows-azure-503-service-unavailable.html' rel='bookmark' title='Permanent Link: Windows Azure &#8211; 503 Service Unavailable'>Windows Azure &#8211; 503 Service Unavailable</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently created an application called <a  href="http://getgravatar.com">GetGravatar</a> that allows you to update your Twitter profile picture with your Gravatar. Once I&#8217;d set up my <a  href="http://blog.smarx.com/posts/custom-domain-names-in-windows-azure">Windows Azure custom domain name</a> I decided I wanted the web address for this new service site to be without &#8220;www&#8221; as seems to be all the rage (to keep the web address short). So, I looked at doing a Response.Redirect to catch any attempts to access my domain with &#8220;www&#8221; in it. I&#8217;m very sure that there are better ways of doing this but I added the following to my Site.master file:</p>
<pre name="code" class="csharp">
    if (Request.Url.ToString().StartsWith("http://www."))
    {
        Response.StatusCode = (int)System.Net.HttpStatusCode.MovedPermanently;
        string responseUrl = Request.Url.ToString().Replace("http://www.", "http://");
        Response.Redirect(responseUrl, true);
    }
</pre>
<p>So, if somebody types in <a  href="http://www.getgravatar.com" rel="nofollow">http://www.getgravatar.com</a> (see it works) or anything with a &#8220;www.&#8221; in the URL they will be redirected to a non-www page. However, the redirect seemed to go to the correct URL but with port 20000. I&#8217;ve no idea why this is so I had to add a special case in to remove the port.</p>
<pre name="code" class="csharp">
    if (Request.Url.ToString().StartsWith("http://www."))
    {
        Response.StatusCode = (int)System.Net.HttpStatusCode.MovedPermanently;
        string responseUrl = Request.Url.ToString().Replace("http://www.", "http://");
        responseUrl = responseUrl.Replace(":20000", "");
        Response.Redirect(responseUrl, true);
    }
</pre>
<p>I&#8217;ve not read up to see if this is expected but I thought it was quite unexpected and may be of use to somebody else in the future.</p><!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em> </em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.leggetter.co.uk/2009/10/06/response-redirect-in-windows-azure.html&amp;title=Response.Redirect+in+Windows+Azure" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.leggetter.co.uk/2009/10/06/response-redirect-in-windows-azure.html&amp;title=Response.Redirect+in+Windows+Azure" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://www.leggetter.co.uk/2009/10/06/response-redirect-in-windows-azure.html&amp;title=Response.Redirect+in+Windows+Azure" rel="nofollow" title="Add to&nbsp;DotNetKicks"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Add to&nbsp;DotNetKicks" alt="Add to&nbsp;DotNetKicks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://www.leggetter.co.uk/2009/10/06/response-redirect-in-windows-azure.html" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.leggetter.co.uk/2009/10/06/response-redirect-in-windows-azure.html&amp;title=Response.Redirect+in+Windows+Azure" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.leggetter.co.uk/2009/10/06/response-redirect-in-windows-azure.html&amp;title=Response.Redirect+in+Windows+Azure" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://www.leggetter.co.uk/2009/10/06/response-redirect-in-windows-azure.html&amp;title=Response.Redirect+in+Windows+Azure" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.leggetter.co.uk/2009/10/06/response-redirect-in-windows-azure.html" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Response.Redirect+in+Windows+Azure+@+http://www.leggetter.co.uk/2009/10/06/response-redirect-in-windows-azure.html" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://www.leggetter.co.uk/2009/10/06/response-redirect-in-windows-azure.html&amp;t=Response.Redirect+in+Windows+Azure" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->


<p>Related posts:<ol><li><a href='http://www.leggetter.co.uk/2009/08/28/windows-azure-503-service-unavailable.html' rel='bookmark' title='Permanent Link: Windows Azure &#8211; 503 Service Unavailable'>Windows Azure &#8211; 503 Service Unavailable</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.leggetter.co.uk/2009/10/06/response-redirect-in-windows-azure.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.leggetter.co.uk/2009/10/06/response-redirect-in-windows-azure.html</feedburner:origLink></item>
		<item>
		<title>Windows Azure – 503 Service Unavailable</title>
		<link>http://feedproxy.google.com/~r/PhilLeggettersBlog/~3/okCwDnZrT6k/windows-azure-503-service-unavailable.html</link>
		<comments>http://www.leggetter.co.uk/2009/08/28/windows-azure-503-service-unavailable.html#comments</comments>
		<pubDate>Thu, 27 Aug 2009 23:44:57 +0000</pubDate>
		<dc:creator>Phil Leggetter</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Windows Azure]]></category>

		<guid isPermaLink="false">http://www.leggetter.co.uk/?p=271</guid>
		<description><![CDATA[I finally got around to trying out ASP.NET MVC and while I was at it I thought I&#8217;d also give Windows Azure a whirl. Windows Azure doesn&#8217;t support ASP.NET MVC out of the box but Jim over on MSDN Blogs has written up the details of how to get ASP.Net MVC Projects running on Windows Azure.
Problem
So, [...]


Related posts:<ol><li><a href='http://www.leggetter.co.uk/2009/10/06/response-redirect-in-windows-azure.html' rel='bookmark' title='Permanent Link: Response.Redirect in Windows Azure'>Response.Redirect in Windows Azure</a></li><li><a href='http://www.leggetter.co.uk/2009/08/26/system-security-securityexception-that-assembly-does-not-allow-partially-trusted-callers.html' rel='bookmark' title='Permanent Link: System.Security.SecurityException: That assembly does not allow partially trusted callers'>System.Security.SecurityException: That assembly does not allow partially trusted callers</a></li><li><a href='http://www.leggetter.co.uk/2007/05/22/linkstation-nas-folder-share-with-windows-vista.html' rel='bookmark' title='Permanent Link: Linkstation NAS Folder share with Windows Vista'>Linkstation NAS Folder share with Windows Vista</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>I finally got around to trying out ASP.NET MVC and while I was at it I thought I&#8217;d also give Windows Azure a whirl. Windows Azure doesn&#8217;t support ASP.NET MVC out of the box but Jim over on MSDN Blogs has written up the details of how to get <a  href="http://blogs.msdn.com/jnak/archive/2008/10/28/asp-net-mvc-projects-running-on-windows-azure.aspx">ASP.Net MVC Projects running on Windows Azure</a>.</p>
<h3>Problem</h3>
<p>So, I followed the instruction from the blog and uploaded the package and configuration file, waited for the staging application to get into a runnable state, and clicked on the staging link&#8230;</p>
<blockquote><p>Windows Azure &#8211; 503 Service Unavailable</p></blockquote>
<p>Clearly not a good thing! In addition to this error I occasionally got a random network error or a full-on connection error reported by the browser.</p>
<p>I tried googling for this error but there was nothing about this problem after deploying to the real Windows Azure hosting (the cloud). As far as I can tell there&#8217;s no way of getting any debug information or logs to work out what&#8217;s going wrong. Maybe this is something that Microsoft will add later on?</p>
<h3>Solution</h3>
<p>Then it struck me that I hadn&#8217;t actually set up any kind of TableStorage on my Windows Azure hosting so I removed all mentions of storage and database connections from the MVC application. This included editing Web.config and removing the following.</p>
<ul>
<li>The &lt;section name=&#8221;authenticationService&#8221; type=&#8221;System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35&#8243; requirePermission=&#8221;false&#8221; allowDefinition=&#8221;MachineToApplication&#8221; /&gt; section element.</li>
<li>The &lt;connectionStrings&gt; element</li>
<li>The &lt;membership&gt;element</li>
<li>The &lt;authentication mode=&#8221;Forms&#8221;&gt; element</li>
<li>The &lt;profile&gt; element</li>
<li>The &lt;roleManager&gt;element</li>
</ul>
<p><strong><em>Update: I&#8217;ve found that without the &lt;authentication&gt;element I started getting the error below so you may want to instead replace it with :</em></strong></p>
<blockquote><p>CCT: Role instances did not start within the time allowed.  Please try again.  If you continue to encounter this behavior please try shutting down the Development Fabric.</p></blockquote>
<p>I&#8217;m guessing that not all of these elements actually need to be removed but doing so resulted in the MVC ASP.NET application working in Windows Azure.</p>
<p><strong><em>Update 2: ServiceDefinition.csdef</em></strong></p>
<p>If you happen to get network timeouts or 404 network connection issues it&#8217;s worth checking your ServiceDefinition.csdef to make sure that you&#8217;ve got port 80 configured. I noticed that mine had updated to port 8080 so obviously I couldn&#8217;t access the staging site on port 80 like I was trying. If you do have the port set to something else other than port 80 you can use that port to access your application but the ServiceDefinition.csdef does have a comment in there telling you your application should be on port 80 so you are probably best to stick with that.</p>
<blockquote><p>&lt;!&#8211; Must use port 80 for http and port 443 for https when running in the cloud &#8211;&gt;<br />
&lt;InputEndpoint name=&#8221;HttpIn&#8221; protocol=&#8221;http&#8221; port=&#8221;80&#8243; /&gt;</p></blockquote><!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em> </em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.leggetter.co.uk/2009/08/28/windows-azure-503-service-unavailable.html&amp;title=Windows+Azure+%26%238211%3B+503+Service+Unavailable" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.leggetter.co.uk/2009/08/28/windows-azure-503-service-unavailable.html&amp;title=Windows+Azure+%26%238211%3B+503+Service+Unavailable" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://www.leggetter.co.uk/2009/08/28/windows-azure-503-service-unavailable.html&amp;title=Windows+Azure+%26%238211%3B+503+Service+Unavailable" rel="nofollow" title="Add to&nbsp;DotNetKicks"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Add to&nbsp;DotNetKicks" alt="Add to&nbsp;DotNetKicks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://www.leggetter.co.uk/2009/08/28/windows-azure-503-service-unavailable.html" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.leggetter.co.uk/2009/08/28/windows-azure-503-service-unavailable.html&amp;title=Windows+Azure+%26%238211%3B+503+Service+Unavailable" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.leggetter.co.uk/2009/08/28/windows-azure-503-service-unavailable.html&amp;title=Windows+Azure+%26%238211%3B+503+Service+Unavailable" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://www.leggetter.co.uk/2009/08/28/windows-azure-503-service-unavailable.html&amp;title=Windows+Azure+%26%238211%3B+503+Service+Unavailable" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.leggetter.co.uk/2009/08/28/windows-azure-503-service-unavailable.html" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Windows+Azure+%26%238211%3B+503+Service+Unavailable+@+http://www.leggetter.co.uk/2009/08/28/windows-azure-503-service-unavailable.html" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://www.leggetter.co.uk/2009/08/28/windows-azure-503-service-unavailable.html&amp;t=Windows+Azure+%26%238211%3B+503+Service+Unavailable" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->


<p>Related posts:<ol><li><a href='http://www.leggetter.co.uk/2009/10/06/response-redirect-in-windows-azure.html' rel='bookmark' title='Permanent Link: Response.Redirect in Windows Azure'>Response.Redirect in Windows Azure</a></li><li><a href='http://www.leggetter.co.uk/2009/08/26/system-security-securityexception-that-assembly-does-not-allow-partially-trusted-callers.html' rel='bookmark' title='Permanent Link: System.Security.SecurityException: That assembly does not allow partially trusted callers'>System.Security.SecurityException: That assembly does not allow partially trusted callers</a></li><li><a href='http://www.leggetter.co.uk/2007/05/22/linkstation-nas-folder-share-with-windows-vista.html' rel='bookmark' title='Permanent Link: Linkstation NAS Folder share with Windows Vista'>Linkstation NAS Folder share with Windows Vista</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.leggetter.co.uk/2009/08/28/windows-azure-503-service-unavailable.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.leggetter.co.uk/2009/08/28/windows-azure-503-service-unavailable.html</feedburner:origLink></item>
		<item>
		<title>System.Security.SecurityException: That assembly does not allow partially trusted callers</title>
		<link>http://feedproxy.google.com/~r/PhilLeggettersBlog/~3/363uYEfuL84/system-security-securityexception-that-assembly-does-not-allow-partially-trusted-callers.html</link>
		<comments>http://www.leggetter.co.uk/2009/08/26/system-security-securityexception-that-assembly-does-not-allow-partially-trusted-callers.html#comments</comments>
		<pubDate>Tue, 25 Aug 2009 23:51:12 +0000</pubDate>
		<dc:creator>Phil Leggetter</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[C# Snippets]]></category>
		<category><![CDATA[Windows Azure]]></category>

		<guid isPermaLink="false">http://www.leggetter.co.uk/?p=268</guid>
		<description><![CDATA[I was writing a Windows Azure ASP.NET MVC application and when making a call to a page I received the following exception:
System.Security.SecurityException: That assembly does not allow partially trusted callers
In my application I&#8217;m using Castle Windsor for dependency injection and when trying to resolve a service using:
}
IGravatar gravatar = MvcApplication.Container.Resolve&#60;IGravatar&#62;();
I received this message. To solve [...]


Related posts:<ol><li><a href='http://www.leggetter.co.uk/2009/08/28/windows-azure-503-service-unavailable.html' rel='bookmark' title='Permanent Link: Windows Azure &#8211; 503 Service Unavailable'>Windows Azure &#8211; 503 Service Unavailable</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>I was writing a Windows Azure ASP.NET MVC application and when making a call to a page I received the following exception:</p>
<blockquote><p>System.Security.SecurityException: That assembly does not allow partially trusted callers</p></blockquote>
<p>In my application I&#8217;m using <a  href="http://www.castleproject.org/container/index.html">Castle Windsor</a> for dependency injection and when trying to resolve a service using:</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">}</div>
<blockquote><p>IGravatar gravatar = MvcApplication.Container.Resolve&lt;IGravatar&gt;();</p></blockquote>
<p>I received this message. To solve things I needed to update the WebRole element in the ServiceDefinitions.csdef file so that enableNativeCodeExecution is enabled.</p>
<blockquote><p>&lt;WebRole name=&#8221;TwitterGravatarMVC&#8221; enableNativeCodeExecution=&#8221;true&#8221;&gt;</p></blockquote>
<p>I found <a  href="http://social.msdn.microsoft.com/Forums/en-US/netservices/thread/c2e49731-9e72-49b6-9fb3-1243c85b265d">the solution</a>, detailed above, on the<a  href="http://social.msdn.microsoft.com/Forums/en-US/netservices/thread/c2e49731-9e72-49b6-9fb3-1243c85b265d"> Azure Services Platform Developer Centre forum</a>.</p><!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em> </em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.leggetter.co.uk/2009/08/26/system-security-securityexception-that-assembly-does-not-allow-partially-trusted-callers.html&amp;title=System.Security.SecurityException%3A+That+assembly+does+not+allow+partially+trusted+callers" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.leggetter.co.uk/2009/08/26/system-security-securityexception-that-assembly-does-not-allow-partially-trusted-callers.html&amp;title=System.Security.SecurityException%3A+That+assembly+does+not+allow+partially+trusted+callers" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://www.leggetter.co.uk/2009/08/26/system-security-securityexception-that-assembly-does-not-allow-partially-trusted-callers.html&amp;title=System.Security.SecurityException%3A+That+assembly+does+not+allow+partially+trusted+callers" rel="nofollow" title="Add to&nbsp;DotNetKicks"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Add to&nbsp;DotNetKicks" alt="Add to&nbsp;DotNetKicks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://www.leggetter.co.uk/2009/08/26/system-security-securityexception-that-assembly-does-not-allow-partially-trusted-callers.html" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.leggetter.co.uk/2009/08/26/system-security-securityexception-that-assembly-does-not-allow-partially-trusted-callers.html&amp;title=System.Security.SecurityException%3A+That+assembly+does+not+allow+partially+trusted+callers" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.leggetter.co.uk/2009/08/26/system-security-securityexception-that-assembly-does-not-allow-partially-trusted-callers.html&amp;title=System.Security.SecurityException%3A+That+assembly+does+not+allow+partially+trusted+callers" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://www.leggetter.co.uk/2009/08/26/system-security-securityexception-that-assembly-does-not-allow-partially-trusted-callers.html&amp;title=System.Security.SecurityException%3A+That+assembly+does+not+allow+partially+trusted+callers" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.leggetter.co.uk/2009/08/26/system-security-securityexception-that-assembly-does-not-allow-partially-trusted-callers.html" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+System.Security.SecurityException%3A+That+assembly+does+not+allow+partially+trusted+callers+@+http://www.leggetter.co.uk/2009/08/26/system-security-securityexception-that-assembly-does-not-allow-partially-trusted-callers.html" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://www.leggetter.co.uk/2009/08/26/system-security-securityexception-that-assembly-does-not-allow-partially-trusted-callers.html&amp;t=System.Security.SecurityException%3A+That+assembly+does+not+allow+partially+trusted+callers" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->


<p>Related posts:<ol><li><a href='http://www.leggetter.co.uk/2009/08/28/windows-azure-503-service-unavailable.html' rel='bookmark' title='Permanent Link: Windows Azure &#8211; 503 Service Unavailable'>Windows Azure &#8211; 503 Service Unavailable</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.leggetter.co.uk/2009/08/26/system-security-securityexception-that-assembly-does-not-allow-partially-trusted-callers.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.leggetter.co.uk/2009/08/26/system-security-securityexception-that-assembly-does-not-allow-partially-trusted-callers.html</feedburner:origLink></item>
		<item>
		<title>Book review: Juggle! Rethink work, reclaim your life</title>
		<link>http://feedproxy.google.com/~r/PhilLeggettersBlog/~3/1QzqQJGDhMs/book-review-juggle-rethink-work-reclaim-your-life.html</link>
		<comments>http://www.leggetter.co.uk/2009/08/05/book-review-juggle-rethink-work-reclaim-your-life.html#comments</comments>
		<pubDate>Wed, 05 Aug 2009 22:43:07 +0000</pubDate>
		<dc:creator>Phil Leggetter</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[book review]]></category>
		<category><![CDATA[entrepreneur]]></category>
		<category><![CDATA[entrepreneurism]]></category>
		<category><![CDATA[ian sanders]]></category>
		<category><![CDATA[juggle]]></category>
		<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://www.leggetter.co.uk/?p=257</guid>
		<description><![CDATA[Many times in the past I&#8217;ve said or heard the term &#8220;work life balance&#8221;. In job interviews, in chats with my line managers and work colleagues, or in conversation with friends and family. It tends to be used when anybody is talking about finding time for family, friends, entertainment and enjoyment outside of work. It [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>Many times in the past I&#8217;ve said or heard the term &#8220;work life balance&#8221;. In job interviews, in chats with my line managers and work colleagues, or in conversation with friends and family. It tends to be used when anybody is talking about finding <em>time</em> for family, friends, entertainment and enjoyment outside of work. It also suggests that there is a dividing line between work and life that can be easily drawn and stepped over. Finally it suggests that we want that separation between work and life and that work doesn&#8217;t fit into life; that it can&#8217;t, and potentially shouldn&#8217;t, be integrated.</p>
<p>For some people this statement holds true. They don&#8217;t want to do or think about work outside of their 9:00 to 5:30 job. There is a definite line to be drawn. For other people, such as <a  href="http://www.iansanders.com/">Ian Sanders</a>, work is enjoyable because he&#8217;s working on things he&#8217;s passionate about. Ian integrates work and life because he enjoys what he does and understands the benefits it provides. Many other people feel the same way and Ian interviews a select few in his book.</p>
<p><a  href="http://www.amazon.co.uk/gp/product/1906465371?ie=UTF8&#038;tag=philleggsoftc-21&#038;linkCode=as2&#038;camp=1634&#038;creative=19450&#038;creativeASIN=1906465371"><img src="http://ecx.images-amazon.com/images/I/51VtHrQuWBL._SL160_.jpg" border="0" alt="" /></a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.co.uk/e/ir?t=philleggsoftc-21&amp;l=as2&amp;o=2&amp;a=1906465371" border="0" alt="" width="1" height="1" /></p>
<p>In &#8220;<a  href="http://www.amazon.co.uk/gp/product/1906465371?ie=UTF8&#038;tag=philleggsoftc-21&#038;linkCode=as2&#038;camp=1634&#038;creative=19450&#038;creativeASIN=1906465371">Juggle! Rethink work, reclaim your life</a>&#8221; Ian discusses the motivations behind his choice to live in the &#8220;scrambled up world of work&#8221; where he integrates work and life. He provides hints and tips on how he, and others including <a  href="http://garyvaynerchuk.com/">Gary Vaynerchuk</a> (a personal favourite of mine), manage to &#8220;live the juggle life&#8221; and the benefits that this provides. Being a juggler certainly isn&#8217;t all plain sailing and the book also covers valuable information on the challanges and extra responsibilities that you may face if you make take the plunge.</p>
<p>Ian&#8217;s first book, &#8220;<a  href="http://www.amazon.co.uk/gp/product/1841127981?ie=UTF8&#038;tag=dorotcottr-21&#038;linkCode=as2&#038;camp=1634&#038;creative=19450&#038;creativeASIN=1841127981">LEAP!: Ditch Your Job, Start Your Own Business &amp; Set Yourself Free</a>&#8220;, introduced some similar concepts to those covered in Juggle!. I actually read Juggle! before I read LEAP! and there is some crossover, but not enough to take anything away from either book. Juggle!, in contrast to the title of Ian&#8217;s first book, even suggests you should consider staying with your current employer and suggests way of negotiating or fashioning a role and a lifestyle that suits you.</p>
<p><a  href="http://www.amazon.co.uk/gp/product/1906465371?ie=UTF8&#038;tag=philleggsoftc-21&#038;linkCode=as2&#038;camp=1634&#038;creative=19450&#038;creativeASIN=1906465371">Juggle! Rethink work, reclaim your life</a> contains 198 pages packed with thought provoking content and discussion. The book is very accessible and contains short, informative and well structured sections and chapters. So much so I would almost class the book as a reference and I&#8217;ll certainly be going back again to read through the a number of chapters or work my way though some of the great lists that Ian has compiled in the near future.</p>
<p>Relevant links:</p>
<ul>
<li><a  href="http://www.iansanders.com/">Ian Sanders website</a></li>
<li><a  href="http://www.scrambledup.blogspot.com/">Ian Sanders Blog</a></li>
<li><a  href="http://www.amazon.co.uk/gp/product/1906465371?ie=UTF8&#038;tag=philleggsoftc-21&#038;linkCode=as2&#038;camp=1634&#038;creative=19450&#038;creativeASIN=1906465371">Juggle! Rethink work, reclaim your life</a> on Amazon.co.uk</li>
<li>Ian&#8217;s first book <a  href="http://www.amazon.co.uk/gp/product/1841127981?ie=UTF8&#038;tag=dorotcottr-21&#038;linkCode=as2&#038;camp=1634&#038;creative=19450&#038;creativeASIN=1841127981">LEAP!: Ditch Your Job, Start Your Own Business &amp; Set Yourself Free</a> on Amazon.co.uk</li>
</ul><!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em> </em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.leggetter.co.uk/2009/08/05/book-review-juggle-rethink-work-reclaim-your-life.html&amp;title=Book+review%3A+Juggle%21+Rethink+work%2C+reclaim+your+life" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.leggetter.co.uk/2009/08/05/book-review-juggle-rethink-work-reclaim-your-life.html&amp;title=Book+review%3A+Juggle%21+Rethink+work%2C+reclaim+your+life" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://www.leggetter.co.uk/2009/08/05/book-review-juggle-rethink-work-reclaim-your-life.html&amp;title=Book+review%3A+Juggle%21+Rethink+work%2C+reclaim+your+life" rel="nofollow" title="Add to&nbsp;DotNetKicks"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Add to&nbsp;DotNetKicks" alt="Add to&nbsp;DotNetKicks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://www.leggetter.co.uk/2009/08/05/book-review-juggle-rethink-work-reclaim-your-life.html" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.leggetter.co.uk/2009/08/05/book-review-juggle-rethink-work-reclaim-your-life.html&amp;title=Book+review%3A+Juggle%21+Rethink+work%2C+reclaim+your+life" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.leggetter.co.uk/2009/08/05/book-review-juggle-rethink-work-reclaim-your-life.html&amp;title=Book+review%3A+Juggle%21+Rethink+work%2C+reclaim+your+life" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://www.leggetter.co.uk/2009/08/05/book-review-juggle-rethink-work-reclaim-your-life.html&amp;title=Book+review%3A+Juggle%21+Rethink+work%2C+reclaim+your+life" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.leggetter.co.uk/2009/08/05/book-review-juggle-rethink-work-reclaim-your-life.html" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Book+review%3A+Juggle%21+Rethink+work%2C+reclaim+your+life+@+http://www.leggetter.co.uk/2009/08/05/book-review-juggle-rethink-work-reclaim-your-life.html" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://www.leggetter.co.uk/2009/08/05/book-review-juggle-rethink-work-reclaim-your-life.html&amp;t=Book+review%3A+Juggle%21+Rethink+work%2C+reclaim+your+life" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.leggetter.co.uk/2009/08/05/book-review-juggle-rethink-work-reclaim-your-life.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.leggetter.co.uk/2009/08/05/book-review-juggle-rethink-work-reclaim-your-life.html</feedburner:origLink></item>
		<item>
		<title>Wikipedia now has a definition for Real-Time Web</title>
		<link>http://feedproxy.google.com/~r/PhilLeggettersBlog/~3/ln7vAiECjXY/wikipedia-now-has-a-definition-for-real-time-web.html</link>
		<comments>http://www.leggetter.co.uk/2009/07/09/wikipedia-now-has-a-definition-for-real-time-web.html#comments</comments>
		<pubDate>Thu, 09 Jul 2009 14:43:23 +0000</pubDate>
		<dc:creator>Phil Leggetter</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[real-time web]]></category>
		<category><![CDATA[Social Media]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://www.leggetter.co.uk/?p=251</guid>
		<description><![CDATA[A while ago a wrote a blog article called What is the real-time Web?. At this time (19/04/2009) even Wikipedia did not have a definition for what &#8220;real-time web&#8221; was. It does now.
The definition is short and sweet:
Real-time web is the concept of searching for and finding information online as it is produced. Advancements in web [...]


Related posts:<ol><li><a href='http://www.leggetter.co.uk/2009/06/27/bing-com-round-table.html' rel='bookmark' title='Permanent Link: Bing.com round table'>Bing.com round table</a></li><li><a href='http://www.leggetter.co.uk/2009/04/28/caplin-systems-blog-post-what-is-the-real-time-web.html' rel='bookmark' title='Permanent Link: Caplin Systems Blog Post &#8211; What is the real-time web?'>Caplin Systems Blog Post &#8211; What is the real-time web?</a></li><li><a href='http://www.leggetter.co.uk/2009/07/01/microsoft-bing-com-round-table-thoughts.html' rel='bookmark' title='Permanent Link: Microsoft Bing.com round table thoughts'>Microsoft Bing.com round table thoughts</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>A while ago a wrote a blog article called <a  href="http://blog.caplin.com/2009/04/20/what-is-the-real-time-web/">What is the real-time Web?</a>. At this time (19/04/2009) even Wikipedia did not have a definition for what &#8220;real-time web&#8221; was. It <a  href="http://en.wikipedia.org/wiki/Real-time_web">does now</a>.</p>
<p>The definition is short and sweet:</p>
<blockquote cite="http://en.wikipedia.org/wiki/Real-time_web"><p>Real-time web is the concept of searching for and finding information online as it is produced. Advancements in web search technology coupled with growing use of social media enable online activities to be queried as they occur.</p>
<p>A traditional web search crawls and indexes web pages periodically, returning results based on relevance to the search query. The real time web delivers the most popular topics recently discussed or posted by users. The content is often &#8220;soft&#8221; in that it is based on the social web &#8211; people&#8217;s opinions, attitudes, thoughts and interests &#8211; as opposed to hard news or facts.</p></blockquote>
<p>At present there is no mention of the technology behind the real-time web. Nothing about Twitter and FriendFeed helping to form the definition.</p>
<p>Do you agree with this definition? What web 2.0 platforms do you think have helped define what &#8220;real-time web&#8221; is? What technologies do you believe have pushed the &#8220;real-time web&#8221; into such prominence?</p><!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em> </em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http://www.leggetter.co.uk/2009/07/09/wikipedia-now-has-a-definition-for-real-time-web.html&amp;title=Wikipedia+now+has+a+definition+for+Real-Time+Web" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http://www.leggetter.co.uk/2009/07/09/wikipedia-now-has-a-definition-for-real-time-web.html&amp;title=Wikipedia+now+has+a+definition+for+Real-Time+Web" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http://www.leggetter.co.uk/2009/07/09/wikipedia-now-has-a-definition-for-real-time-web.html&amp;title=Wikipedia+now+has+a+definition+for+Real-Time+Web" rel="nofollow" title="Add to&nbsp;DotNetKicks"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Add to&nbsp;DotNetKicks" alt="Add to&nbsp;DotNetKicks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http://www.leggetter.co.uk/2009/07/09/wikipedia-now-has-a-definition-for-real-time-web.html" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http://www.leggetter.co.uk/2009/07/09/wikipedia-now-has-a-definition-for-real-time-web.html&amp;title=Wikipedia+now+has+a+definition+for+Real-Time+Web" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http://www.leggetter.co.uk/2009/07/09/wikipedia-now-has-a-definition-for-real-time-web.html&amp;title=Wikipedia+now+has+a+definition+for+Real-Time+Web" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit.php?url=http://www.leggetter.co.uk/2009/07/09/wikipedia-now-has-a-definition-for-real-time-web.html&amp;title=Wikipedia+now+has+a+definition+for+Real-Time+Web" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http://www.leggetter.co.uk/2009/07/09/wikipedia-now-has-a-definition-for-real-time-web.html" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Wikipedia+now+has+a+definition+for+Real-Time+Web+@+http://www.leggetter.co.uk/2009/07/09/wikipedia-now-has-a-definition-for-real-time-web.html" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://www.leggetter.co.uk/2009/07/09/wikipedia-now-has-a-definition-for-real-time-web.html&amp;t=Wikipedia+now+has+a+definition+for+Real-Time+Web" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://www.leggetter.co.uk/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->


<p>Related posts:<ol><li><a href='http://www.leggetter.co.uk/2009/06/27/bing-com-round-table.html' rel='bookmark' title='Permanent Link: Bing.com round table'>Bing.com round table</a></li><li><a href='http://www.leggetter.co.uk/2009/04/28/caplin-systems-blog-post-what-is-the-real-time-web.html' rel='bookmark' title='Permanent Link: Caplin Systems Blog Post &#8211; What is the real-time web?'>Caplin Systems Blog Post &#8211; What is the real-time web?</a></li><li><a href='http://www.leggetter.co.uk/2009/07/01/microsoft-bing-com-round-table-thoughts.html' rel='bookmark' title='Permanent Link: Microsoft Bing.com round table thoughts'>Microsoft Bing.com round table thoughts</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.leggetter.co.uk/2009/07/09/wikipedia-now-has-a-definition-for-real-time-web.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.leggetter.co.uk/2009/07/09/wikipedia-now-has-a-definition-for-real-time-web.html</feedburner:origLink></item>
	</channel>
</rss>
