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

<channel>
	<title>Phil Leggetter - Software Consultant &#187; Ajax</title>
	<atom:link href="http://www.leggetter.co.uk/tag/ajax/feed" rel="self" type="application/rss+xml" />
	<link>http://www.leggetter.co.uk</link>
	<description>Real-time web and social media software consultant</description>
	<lastBuildDate>Thu, 09 Sep 2010 14:17:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>How does Google Real-Time Search work?</title>
		<link>http://www.leggetter.co.uk/2009/12/12/how-does-google-real-time-search-work.html</link>
		<comments>http://www.leggetter.co.uk/2009/12/12/how-does-google-real-time-search-work.html#comments</comments>
		<pubDate>Sat, 12 Dec 2009 14:18:20 +0000</pubDate>
		<dc:creator>Phil Leggetter</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Le Web]]></category>
		<category><![CDATA[real-time]]></category>
		<category><![CDATA[real-time web]]></category>

		<guid isPermaLink="false">http://www.leggetter.co.uk/?p=600</guid>
		<description><![CDATA[On or around the 12th of December 2009 Google released  [...]


Related posts:<ol><li><a href='http://www.leggetter.co.uk/2010/08/27/google-realtime-search-isnt-real-time.html' rel='bookmark' title='Permanent Link: Google realtime search isn&#8217;t real-time'>Google realtime search isn&#8217;t real-time</a></li>
<li><a href='http://www.leggetter.co.uk/2010/05/18/add-real-time-news-to-your-site-with-google-add-any-real-time-data-to-your-site-with-kwwika.html' rel='bookmark' title='Permanent Link: Add real-time news to your site with Google. Add any real-time data to your site with Kwwika'>Add real-time news to your site with Google. Add any real-time data to your site with Kwwika</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>On or around the 12th of December 2009 Google released a feature they are calling &#8220;real-time search&#8221;.</p>
<blockquote cite="http://googleblog.blogspot.com/2009/12/relevance-meets-real-time-web.html"><p>Our real-time search enables you to discover breaking news the moment it&#8217;s happening, even if it&#8217;s not the popular news of the day, and even if you didn&#8217;t know about it beforehand.</p></blockquote>
<p>Although I&#8217;d still argue that we&#8217;re not seeing the real-time web with this solution I thought I&#8217;d go in to a bit of detail about how Google are achieving this HTTP polling solution.</p>
<h2>Summary</h2>
<ul>
<li>Google are consuming and indexing real-time data from multiple social networks</li>
<li>It&#8217;s not real-time HTTP PUSH yet, it&#8217;s HTTP PULL using a polling interval</li>
<li>The polling interval seems to vary but this needs to be confirmed.</li>
<li>The polling result returns an encoded JSON response containing the next request to be made and the HTML of any new results. These results are injected into the &#8220;Latest results&#8221; section of the page</li>
<li>The HTML returned is quite verbose and could be refined</li>
<li>87% from a sample of 30 polled requests returned no new results meaning the request was a waste of resources</li>
</ul>
<p><span id="more-600"></span></p>
<h2>Data Sources</h2>
<p>Google now has an agreement in place with Twitter, Facebook, MySpace, FriendFeed, Identi.ca and Jaiku to consume and index their real-time data and make the results available in a &#8220;Latest Results&#8221; section of the Google search results. A number of social networks have APIs and some of these APIs have a real-time streaming feed and it&#8217;s likely that Google is simply connecting to this. For example, MySpace have <a  href="http://developer.myspace.com/Community/blogs/devteam/archive/2009/12/08/opening-the-flood-gates-and-unleashing-the-data.aspx">released a Real-Time Stream API</a> and Twitter has a Firehose feed, both of which Google will be using in their real-time search results. The Twitter Firehose feed is <a  href="http://apiwiki.twitter.com/FAQ#CanIhavetheFirehose">&#8220;not generally available&#8221;</a> at the moment but Ryan Sarver, who is Director of Platform at Twitter, <a  href="http://www.ustream.tv/recorded/2748326">announced at Le Web</a> that the Firehose stream would become generally available in the future.<br />
<br />
<object id="utv142723" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="386" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="name" value="utv_n_321380" /><param name="flashvars" value="loc=%2F&amp;autoplay=false&amp;vid=2748326" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.ustream.tv/flash/video/2748326" /><embed id="utv142723" type="application/x-shockwave-flash" width="480" height="386" src="http://www.ustream.tv/flash/video/2748326" allowscriptaccess="always" allowfullscreen="true" flashvars="loc=%2F&amp;autoplay=false&amp;vid=2748326" name="utv_n_321380"></embed></object><br />
</p>
<h2>How Google put the real-time data into their search results?</h2>
<p>Since Google now have access to the data as soon as it is generated by the social network the next thing they need to do is get that into your search results. As soon as you make your search Google can put information that has just become available straight into the page. However, how do they get information that becomes available after your search results page has already loaded? Simple. They poll for new results regular intervals (as I mentioned in my <a  href="http://www.leggetter.co.uk/2009/12/09/how-real-time-does-real-time-have-to-be.html">How real-time does real-time have to be?</a> blog post). So far I&#8217;ve seen a 20 second polling interval but recently, with a <a  href="http://www.google.co.uk/search?q=%23leweb">search for #leweb</a>, I&#8217;ve seen a 30 second polling interval. It&#8217;s possible that they may have an idea how likely it is that your search subject will have new information available and change this polling interval accordingly.</p>
<p>These polling search requests look like this:</p>
<pre>

<a  href="http://www.google.co.uk/realtimejs?q=%23leweb" rel="nofollow">http://www.google.co.uk/realtimejs?q=%23leweb</a>

&#038;hl=en
&#038;polltype=mb
&#038;since=1260622409000000
&#038;sessionstart=1260623982000000
&#038;ei=bpgjS5zOG8j54Ab5kMzpCQ
&#038;usg=05e5
</pre>
<p>And the responses:</p>
<pre class="brush: jscript;">
mbrt0.insert('{\x22nextRequest\x22:\x22/realtimejs?q\\x3d%23leweb\\x26hl\\x3den\\x26output\\x3dsearch\\x26since\\x3d1260623734161591\\x26sessionstart\\x3d1260623385000000\\x26ei\\x3dbpgjS5zOG8j54Ab5kMzpCQ\\x26usg\\x3d3760\x22,\x22results\x22:[{\x22date\x22:\x221260623734161590\x22,\x22html\x22:\x22\\x3cli class\\x3d\\x22g s\\x22 style\\x3d\\x22line-height:16px;margin:0 0 8px;overflow:hidden\\x22\\x3e\\x3ctable class\\x3d\\x22ts\\x22\\x3e\\x3ctr\\x3e\\x3ctd colspan\\x3d3 class\\x3drt2 style\\x3d\\x22overflow:none\\x22\\x3e\\x3cdiv class\\x3drt1 style\\x3d\\x22background-position:-4px 0;width:6px;height:4px;float:right\\x22\\x3e\\x3c/div\\x3e\\x3cdiv class\\x3drt1 style\\x3d\\x22width:4px;height:4px\\x22\\x3e\\x3c/div\\x3e\\x3ctr\\x3e\\x3ctd class\\x3drt1 style\\x3d\\x22background-position:-10px 0;background-repeat:repeat\\x22\\x3e\\x3cdiv style\\x3d\\x22width:2px\\x22\\x3e\\x3c/div\\x3e\\x3ctd style\\x3d\\x22padding:0 5px 1px;width:100%\\x22\\x3eFinally back at home after a long week in Paris. Great time at \\x3ca href\\x3d\\x22/search?q\\x3d%23LeWeb+site%3Atwitter.com\\x26amp;tbs\\x3dmbl:1\\x26amp;tbo\\x3d1\\x26amp;hl\\x3den\\x26amp;output\\x3dsearch\\x26amp;ei\\x3dcZgjS8PMNZbSjAfnl_nYBw\\x26amp;sa\\x3dX\\x26amp;oi\\x3dmicroblog_result\\x26amp;resnum\\x3d1\\x26amp;ct\\x3dresult\\x26amp;cd\\x3d1\\x26amp;ved\\x3d0CAMQoAQoADAA\\x22\\x3e#\\x3cem\\x3eLeWeb\\x3c/em\\x3e\\x3c/a\\x3e. Reconnected with lots of old friends etc,\\x3ctd class\\x3drt1 style\\x3d\\x22background-position:-14px 0;background-repeat:repeat\\x22\\x3e\\x3cdiv style\\x3d\\x22width:3px\\x22\\x3e\\x3c/div\\x3e\\x3ctr\\x3e\\x3ctd colspan\\x3d3 class\\x3drt2 style\\x3d\\x22background-position:-4px\\x22\\x3e\\x3cdiv class\\x3drt1 style\\x3d\\x22background-position:-4px -4px;width:6px;height:6px;float:right\\x22\\x3e\\x3c/div\\x3e\\x3cdiv class\\x3drt1 style\\x3d\\x22background-position:0 -4px;width:4px;height:6px\\x22\\x3e\\x3c/div\\x3e\\x3c/table\\x3e\\x3cdiv class\\x3drt1 style\\x3d\\x22background-position:-17px 0;margin-top:-3px;margin-left:5px;padding:4px 0 0 23px\\x22\\x3e\\x3cspan class\\x3dgl\\x3e\\x3ca href\\x3d\\x22http://twitter.com/bdesarnauts\\x22 class\\x3dl onmousedown\\x3d\\x22return clk(this.href,\\x27microblog_result\\x27,\\x27\\x27,\\x27result\\x27,\\x271\\x27,\\x27\\x27,\\x270CAIQoAQwAA\\x27)\\x22\\x3ebdesarnauts\\x3c/a\\x3e\\x3c/span\\x3e - \\x3cspan class\\x3da\\x3etwitter.com\\x3c/span\\x3e - \\x3ca href\\x3d\\x22/url?q\\x3dhttp://twitter.com/bdesarnauts/status/6598672912\\x26amp;ei\\x3dcZgjS8PMNZbSjAfnl_nYBw\\x26amp;sa\\x3dX\\x26amp;oi\\x3dmicroblog_result\\x26amp;resnum\\x3d1\\x26amp;ct\\x3dresult\\x26amp;cd\\x3d2\\x26amp;ved\\x3d0CAQQoAQoADAA\\x26amp;usg\\x3dAFQjCNEyjEaOrJexPm6wUgqqVEDg24BOFQ\\x22 style\\x3d\\x22text-decoration:none\\x22\\x3e\\x3cspan class\\x3d\\x22f rtdm\\x22\\x3e4 minutes ago\\x3c/span\\x3e\\x3c/a\\x3e\\x3c/div\\x3e\x22}]}');
</pre>
<p>The response is an encoded JSON response and contains two things:</p>
<ul>
<li><strong>nextRequest</strong>: The next polling search request to make</li>
<li><strong>results</strong>: An Array of Encoded HTML for any results that have been found for the current polling request.</li>
</ul>
<p>In the example response above we get a next request of:</p>
<pre class="brush: plain;">
/realtimejs?
q\\x3d%23leweb\\x26hl\\x3den\\x26output\\x3dsearch\\x26since\\x3d1260623734161591\\x26sessionstart\\x3d1260623385000000\\x26ei\\x3dbpgjS5zOG8j54Ab5kMzpCQ\\x26usg\\x3d3760
</pre>
<p>Which translates to the following URL:</p>
<pre>

<a  href="http://www.google.co.uk/realtimejs?q=%23leweb&#038;hl=en&#038;output=search&#038;since=1260623734161591&#038;sessionstart=1260623385000000&#038;ei=bpgjS5zOG8j54Ab5kMzpCQ&#038;usg=3760" rel="nofollow">http://www.google.co.uk/realtimejs?q=%23leweb&#038;hl=en&#038;output=search&#038;since=1260623734161591&#038;sessionstart=1260623385000000&#038;ei=bpgjS5zOG8j54Ab5kMzpCQ&#038;usg=3760</a>
</pre>
<p>From looking at the parameters it would appear that the <strong>since</strong> parameter would be very useful and would allow you to retrieve historical updates.</p>
<p>Each encoded HTML result in the results array will be decoded on the client using JavaScript and injected into the &#8220;Latest Results&#8221; section within the search result listings. It&#8217;s quite surprising that they return quite so much encoded HTML content and not just the information and then generate the HTML on the client. I suppose this is a new feature and it will be refined over time.</p>
<p>One point worth mentioning is that because Google are using a polling technique they are performing a lot of HTTP PULL requests to the server that return no results. This is a wasted request. From a sample size of 30 polled requests only 4 requests actually returned new results. This means that 87% of requests are a complete waste of resources.</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%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F12%2F12%2Fhow-does-google-real-time-search-work.html&amp;title=How+does+Google+Real-Time+Search+work%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%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F12%2F12%2Fhow-does-google-real-time-search-work.html&amp;title=How+does+Google+Real-Time+Search+work%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%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F12%2F12%2Fhow-does-google-real-time-search-work.html&amp;title=How+does+Google+Real-Time+Search+work%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%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F12%2F12%2Fhow-does-google-real-time-search-work.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%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F12%2F12%2Fhow-does-google-real-time-search-work.html&amp;title=How+does+Google+Real-Time+Search+work%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%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F12%2F12%2Fhow-does-google-real-time-search-work.html&amp;title=How+does+Google+Real-Time+Search+work%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?url=http%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F12%2F12%2Fhow-does-google-real-time-search-work.html&amp;title=How+does+Google+Real-Time+Search+work%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%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F12%2F12%2Fhow-does-google-real-time-search-work.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+does+Google+Real-Time+Search+work%3F+@+http%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F12%2F12%2Fhow-does-google-real-time-search-work.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%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F12%2F12%2Fhow-does-google-real-time-search-work.html&amp;t=How+does+Google+Real-Time+Search+work%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/2010/08/27/google-realtime-search-isnt-real-time.html' rel='bookmark' title='Permanent Link: Google realtime search isn&#8217;t real-time'>Google realtime search isn&#8217;t real-time</a></li>
<li><a href='http://www.leggetter.co.uk/2010/05/18/add-real-time-news-to-your-site-with-google-add-any-real-time-data-to-your-site-with-kwwika.html' rel='bookmark' title='Permanent Link: Add real-time news to your site with Google. Add any real-time data to your site with Kwwika'>Add real-time news to your site with Google. Add any real-time data to your site with Kwwika</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/12/12/how-does-google-real-time-search-work.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Which Rich Internet Application Technology will dominate?</title>
		<link>http://www.leggetter.co.uk/2009/11/07/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've been a member of the RIA Developers Group on Link [...]


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/2010/02/27/using-real-time-web-software-and-technology-to-distribute-events.html' rel='bookmark' title='Permanent Link: Using real-time web software and technology to distribute events'>Using real-time web software and technology to distribute events</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>
</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%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F11%2F07%2Fwhich-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%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F11%2F07%2Fwhich-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%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F11%2F07%2Fwhich-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%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F11%2F07%2Fwhich-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%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F11%2F07%2Fwhich-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%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F11%2F07%2Fwhich-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?url=http%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F11%2F07%2Fwhich-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%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F11%2F07%2Fwhich-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%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F11%2F07%2Fwhich-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%3A%2F%2Fwww.leggetter.co.uk%2F2009%2F11%2F07%2Fwhich-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/2010/02/27/using-real-time-web-software-and-technology-to-distribute-events.html' rel='bookmark' title='Permanent Link: Using real-time web software and technology to distribute events'>Using real-time web software and technology to distribute events</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>
</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>4</slash:comments>
		</item>
	</channel>
</rss>
