<?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 - Real-Time Web Software and Technology Evangelist &#187; Twitter</title>
	<atom:link href="http://www.leggetter.co.uk/tag/twitter/feed" rel="self" type="application/rss+xml" />
	<link>http://www.leggetter.co.uk</link>
	<description>Real-Time Web, Real-Time Data and Social Media Software and Technology Evangelist and Consultant</description>
	<lastBuildDate>Sun, 29 Jan 2012 05:00:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Twitter Badges and Awards &#8211; What badges can you think of?</title>
		<link>http://www.leggetter.co.uk/2010/09/10/twitter-badges-and-awards-what-badges-can-you-think-of.html</link>
		<comments>http://www.leggetter.co.uk/2010/09/10/twitter-badges-and-awards-what-badges-can-you-think-of.html#comments</comments>
		<pubDate>Fri, 10 Sep 2010 15:19:52 +0000</pubDate>
		<dc:creator>Phil Leggetter</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[thoughts]]></category>
		<category><![CDATA[ideas]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[web applications]]></category>

		<guid isPermaLink="false">http://leggetter.posterous.com/twitter-badges-and-awards-what-badges-can-you</guid>
		<description><![CDATA[        
	One of the reasons FourSquare is popular is because you can get awards or badges for your check-ins. Would it be of interest to anybody if you could get badges for your tweets? Some ideas for badges: The stalker badge - following more than X...
Related posts:<ol>
<li><a href='http://www.leggetter.co.uk/2007/03/29/england-goals.html' rel='bookmark' title='England Goals'>England Goals</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>One of the reasons FourSquare is popular is because you can get awards or badges for your check-ins. Would it be of interest to anybody if you could get badges for your tweets? Some ideas for badges:
<ul>
<li> The stalker badge &#8211; following more than X users</li>
<li>The noise badge &#8211; Tweeting more than X times in the past hour</li>
<li>The chatty badge &#8211; replying to X users in the past hour</li>
<li>The profanity badge &#8211; swearing more than X times in your past X tweets</li>
<li>The Romani badge &#8211; tweeting from more than x locations</li>
<li>The greedy guts badge &#8211; tweeting more than x times about food</li>
</ul>
<p>Can you think of some other badges? Would Twitter badges and awards interest you? </p>
<p><a  href="http://leggetter.posterous.com/twitter-badges-and-awards-what-badges-can-you">Permalink</a><br />
 | <a  href="http://leggetter.posterous.com/twitter-badges-and-awards-what-badges-can-you#comment">Leave a comment&nbsp;&nbsp;&raquo;</a></p>
<p>Related posts:<ol>
<li><a href='http://www.leggetter.co.uk/2007/03/29/england-goals.html' rel='bookmark' title='England Goals'>England Goals</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.leggetter.co.uk/2010/09/10/twitter-badges-and-awards-what-badges-can-you-think-of.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Real-Time Web World Cup Experience</title>
		<link>http://www.leggetter.co.uk/2010/06/13/the-real-time-web-world-cup-experience.html</link>
		<comments>http://www.leggetter.co.uk/2010/06/13/the-real-time-web-world-cup-experience.html#comments</comments>
		<pubDate>Sun, 13 Jun 2010 15:41:48 +0000</pubDate>
		<dc:creator>Phil Leggetter</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[BBC]]></category>
		<category><![CDATA[Fifa]]></category>
		<category><![CDATA[ITV]]></category>
		<category><![CDATA[Kwwika]]></category>
		<category><![CDATA[real-time web]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://blog.kwwika.com/the-real-time-web-world-cup-experience</guid>
		<description><![CDATA[        
	A number big players have come up with pages or applications in an attempt to draw World Cup fans into either combining using a laptop whilst watching the live games on television or using the application as their main view into the World Cu...
Related posts:<ol>
<li><a href='http://www.leggetter.co.uk/2010/06/11/kwwika-world-cup-2010-real-time-push-web-app-apple-ipad-competition.html' rel='bookmark' title='Kwwika World Cup 2010 Real-Time Push Web App &#8211; Apple iPad competition'>Kwwika World Cup 2010 Real-Time Push Web App &#8211; Apple iPad competition</a></li>
<li><a href='http://www.leggetter.co.uk/2008/11/30/live-mesh-my-experience.html' rel='bookmark' title='Live Mesh &#8211; my experience'>Live Mesh &#8211; my experience</a></li>
<li><a href='http://www.leggetter.co.uk/2011/11/09/the-right-place-at-the-right-time-how-the-real-time-web-influences-the-local-world.html' rel='bookmark' title='The Right Place At The Right Time: How The Real-Time Web Influences The &#8220;local&#8221; World'>The Right Place At The Right Time: How The Real-Time Web Influences The &#8220;local&#8221; World</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>
	A number big players have come up with pages or applications in an attempt to draw World Cup fans into either combining using a laptop whilst watching the live games on television or using the application as their main view into the World Cup. The problem is that nobody has got it quite right. With a live event the data that you see in your World Cup web application needs to be correct with up to the second information or it loses its value. None of the big players have managed this. The data also needs to be relevant and of good quality. The Twitter application fails in this respect.
<p />
<span id="more-857"></span><br />
The BBC have adapted their standard look and feel to incorporate a video or audio component for their <a  href="http://news.bbc.co.uk/sport1/hi/football/world_cup_2010/">BBC World Cup 2010 presence</a>. They also got a &quot;live&quot; commentary section, some team information and match stats. The commentary updates every 30 seconds. Updating every 30 seconds just isn&#39;t good enough. I want to see comments appear about the event that is happening <b>now</b>, not 2 minutes ago!
<p /><a  href="http://posterous.com/getfile/files.posterous.com/kwwika/A2YXfKVY0hNCbwXICxIF4H2JdjZsoefeRex6Dg9tRmUN7hBnIwM2JGntrJ21/bbc.png.scaled.1000.jpg" class="thickbox no_icon" rel="gallery-857"><img src="http://posterous.com/getfile/files.posterous.com/kwwika/VCQmscOgrcBu0fMBvkmeyCDc3UPfq19J6UQDI0b0ieohYhgssoJ23SVrLeXn/bbc.png.scaled.500.jpg" width="500" height="361"/></a></p>
<p />The <a  href="http://live.itv.com/">ITV Live application</a> has a lot going on. They&#39;ve thrown in textual updates, facts, video replays, statistics and polls. I like the facts and the replays but the main failing on ITV Live is that you just don&#39;t feel that you want or need to stay on the website. It&#39;s not adding a lot of value to the World Cup experience. More needs to go into the &quot;Get Involved&quot; section as you can see from the screenshot below.
<p /><a  href="http://posterous.com/getfile/files.posterous.com/kwwika/NPhoSw27Kcd6Pwo3rYNbLd8q9CO20w7Jm4IPSarxMhtlMcbesO5fFDTt0hNp/itv.png.scaled.1000.jpg" class="thickbox no_icon" rel="gallery-857"><img src="http://posterous.com/getfile/files.posterous.com/kwwika/Mtk9Y7ThMptoazAjZr3ZjCHRTyZayPRJvP7NX8CBac3LNe4dR8qoHP07r3uR/itv.png.scaled.500.jpg" width="500" height="329"/></a></p>
<p />I quite like the <a  href="http://www.fifa.com/index.html">Fifa application</a> although it doesn&#39;t add much to the experience if you are also viewing the games live on television until you scroll down the page and see the &quot;Have your say&quot;, &quot;Fantasy&quot;, &quot;Head-to-Head&quot; stats and live groups standings section.
<p /><a  href="http://posterous.com/getfile/files.posterous.com/kwwika/N6ikeZcnmHsdyW7d9rRnSpXSYMBs50qv4kmiREUNnaI03rrrOndEX4ZCzq5B/fifa.png.scaled.1000.jpg" class="thickbox no_icon" rel="gallery-857"><img src="http://posterous.com/getfile/files.posterous.com/kwwika/mMWse7qKcTAzPhM2Gvg8kH6jg45hqH0wK51clHDx40NEMXiA6C4ciCogTyQX/fifa.png.scaled.500.jpg" width="500" height="330"/></a></p>
<p />I&#39;m really disappointing with the <a  href="http://twitter.com/worldcup/worldcup">Twitter World Cup 2010 application</a>. They&#39;ve probably got more data than anybody else but the problem is they&#39;re not doing enough analysis on it, or giving the user the opportunity of doing some filtering. The data isn&#39;t real-time and you would have thought that they would be able to afford to put some effort into the application. We&#39;ve thrown together a <a  href="http://kwwika.com/Standalone/Demos/WorldCup2010/">real-time application for the World Cup</a> in a couple of hours to show off all the <a  href="http://search.twitter.com/search?q=%23worldcup">#worldcup tweets</a> in real-time. At least our application has a bit of impact.
<p /><a  href="http://posterous.com/getfile/files.posterous.com/kwwika/AW0erM6Oazay347ou6hz1Wl4WJ8oeyw1s3h78imWQpWOwC65Dy24VW9isIk2/twitter.png" class="thickbox no_icon" rel="gallery-857"><img src="http://posterous.com/getfile/files.posterous.com/kwwika/vp6HvsbY7uGhBBfdFh4IYvHvCmxjyKu8O8kk1cMrm5RnCO8jdPr51uZ2oPJY/twitter.png.scaled.500.jpg" width="500" height="347"/></a></p>
<p />Now, to get to the point. All these big players have come up with an application for the World Cup but we&#39;re sure that developers out there could come up with something better. If you feel you could develop a <b>better real-time World Cup 2010 application</b> then why not <a  href="http://wiki.kwwika.com/competitions/world-cup-2010-real-time-push-web-app-competition">enter our Kwwika World Cup 2010 Real-Time Push Web App competition</a>? We will make all #worldcup tweets available to you and will also be adding some world class World Cup statistics data for you to use within you application. The developer who builds the best application will win an Apple iPad.
<p />Go on, <a  href="http://wiki.kwwika.com/competitions/world-cup-2010-real-time-push-web-app-competition">enter our competition</a> and show BBC, ITV, Fifa and Twitter what a quality World Cup application should look like.</p>
<p><a  href="http://blog.kwwika.com/the-real-time-web-world-cup-experience">Permalink</a> </p>
<p>	| <a  href="http://blog.kwwika.com/the-real-time-web-world-cup-experience#comment">Leave a comment&nbsp;&nbsp;&raquo;</a></p>
<p>Related posts:<ol>
<li><a href='http://www.leggetter.co.uk/2010/06/11/kwwika-world-cup-2010-real-time-push-web-app-apple-ipad-competition.html' rel='bookmark' title='Kwwika World Cup 2010 Real-Time Push Web App &#8211; Apple iPad competition'>Kwwika World Cup 2010 Real-Time Push Web App &#8211; Apple iPad competition</a></li>
<li><a href='http://www.leggetter.co.uk/2008/11/30/live-mesh-my-experience.html' rel='bookmark' title='Live Mesh &#8211; my experience'>Live Mesh &#8211; my experience</a></li>
<li><a href='http://www.leggetter.co.uk/2011/11/09/the-right-place-at-the-right-time-how-the-real-time-web-influences-the-local-world.html' rel='bookmark' title='The Right Place At The Right Time: How The Real-Time Web Influences The &#8220;local&#8221; World'>The Right Place At The Right Time: How The Real-Time Web Influences The &#8220;local&#8221; World</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.leggetter.co.uk/2010/06/13/the-real-time-web-world-cup-experience.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://posterous.com/getfile/files.posterous.com/kwwika/BGuKZxOCP1nbEd7dAmSEUnuDHMQW3xkFnE5nNHMFdPrzFJ6DcKEtXfaUpSaA/fifa.png" length="" type="image/png" />
<enclosure url="http://posterous.com/getfile/files.posterous.com/kwwika/OvAg6EBZ2BLu86zxeWO1r2agBkscncVUVEFLiM7EUTN1ISEMXReVR0ujnbt5/bbc.png" length="" type="image/png" />
<enclosure url="http://posterous.com/getfile/files.posterous.com/kwwika/AW0erM6Oazay347ou6hz1Wl4WJ8oeyw1s3h78imWQpWOwC65Dy24VW9isIk2/twitter.png" length="" type="image/png" />
<enclosure url="http://posterous.com/getfile/files.posterous.com/kwwika/Av6wrrPtAUDBYoCo9E9EBnCEM41uNnxAQNsHAzzLFamOf9Ip7b0DluPrZieR/itv.png" length="" type="image/png" />
		</item>
		<item>
		<title>A Kwwika Twitter search v search.twitter.com v TweetDeck example</title>
		<link>http://www.leggetter.co.uk/2010/04/27/a-kwwika-twitter-search-v-search-twitter-com-v-tweetdeck-example.html</link>
		<comments>http://www.leggetter.co.uk/2010/04/27/a-kwwika-twitter-search-v-search-twitter-com-v-tweetdeck-example.html#comments</comments>
		<pubDate>Tue, 27 Apr 2010 20:09:49 +0000</pubDate>
		<dc:creator>Phil Leggetter</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Kwwika]]></category>
		<category><![CDATA[TweetDeck]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://blog.kwwika.com/a-kwwika-twitter-search-v-searchtwittercom-v</guid>
		<description><![CDATA[        
	I&#39;ve just recorded a &#34;Kwwik&#34; demonstration of a Twitter page using the Kwwika service versus the http://search.twitter.com page versus TweetDeck to demonstrate the speed of the Kwwika service.Here&#39;s a link to the SPA 2010 c...
Related posts:<ol>
<li><a href='http://www.leggetter.co.uk/2010/06/19/want-to-try-out-the-kwwika-api-but-dont-want-to-register.html' rel='bookmark' title='Want to try out the Kwwika API but don&#8217;t want to register?'>Want to try out the Kwwika API but don&#8217;t want to register?</a></li>
<li><a href='http://www.leggetter.co.uk/2010/05/10/kwwika-silverlight-api-chat-example.html' rel='bookmark' title='Kwwika Silverlight API &#8211; Chat Example'>Kwwika Silverlight API &#8211; Chat Example</a></li>
<li><a href='http://www.leggetter.co.uk/2010/05/04/anybody-fancy-a-real-time-web-workshop.html' rel='bookmark' title='Anybody fancy a real-time web workshop?'>Anybody fancy a real-time web workshop?</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>
	I&#39;ve just recorded a &quot;Kwwik&quot; demonstration of a Twitter page using the Kwwika service versus the <a  href="http://search.twitter.com">http://search.twitter.com</a> page versus TweetDeck to demonstrate the speed of the Kwwika service.
<p />
<div><object height="417" width="500"><param name="movie" value="http://www.youtube.com/v/BweAhqN4Sfw&#038;hl=en&#038;fs=1" /></param><param name="wmode" value="window" /><param name="allowFullScreen" value="true" /></param><param name="allowscriptaccess" value="always" /></param><embed src="http://www.youtube.com/v/BweAhqN4Sfw&#038;hl=en&#038;fs=1" allowfullscreen="true" type="application/x-shockwave-flash" allowscriptaccess="always" wmode="window" height="417" width="500"></embed></object></div>
<p />
<p>Here&#39;s a link to the <a  href="http://www.spaconference.org/spa2010/index.php">SPA 2010 conference</a> I mention in the video and a link to the <a  href="http://www.spaconference.org/spa2010/sessions/session303.html">workshop</a> that I&#39;ll be running with a colleague.</p>
<ul>
<li><a  href="http://www.spaconference.org/spa2010/index.php">SPA 2010 conference</a></li>
<li><a  href="http://www.spaconference.org/spa2010/sessions/session303.html">Real-Time Web Workshop</a></li>
</ul>
<p><a  href="http://blog.kwwika.com/a-kwwika-twitter-search-v-searchtwittercom-v">Permalink</a> </p>
<p>	| <a  href="http://blog.kwwika.com/a-kwwika-twitter-search-v-searchtwittercom-v#comment">Leave a comment&nbsp;&nbsp;&raquo;</a></p>
<p>Related posts:<ol>
<li><a href='http://www.leggetter.co.uk/2010/06/19/want-to-try-out-the-kwwika-api-but-dont-want-to-register.html' rel='bookmark' title='Want to try out the Kwwika API but don&#8217;t want to register?'>Want to try out the Kwwika API but don&#8217;t want to register?</a></li>
<li><a href='http://www.leggetter.co.uk/2010/05/10/kwwika-silverlight-api-chat-example.html' rel='bookmark' title='Kwwika Silverlight API &#8211; Chat Example'>Kwwika Silverlight API &#8211; Chat Example</a></li>
<li><a href='http://www.leggetter.co.uk/2010/05/04/anybody-fancy-a-real-time-web-workshop.html' rel='bookmark' title='Anybody fancy a real-time web workshop?'>Anybody fancy a real-time web workshop?</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.leggetter.co.uk/2010/04/27/a-kwwika-twitter-search-v-search-twitter-com-v-tweetdeck-example.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Real-Time Web Posts 03/03/2010</title>
		<link>http://www.leggetter.co.uk/2010/03/03/real-time-web-posts-03032010.html</link>
		<comments>http://www.leggetter.co.uk/2010/03/03/real-time-web-posts-03032010.html#comments</comments>
		<pubDate>Wed, 03 Mar 2010 09:12:45 +0000</pubDate>
		<dc:creator>Phil Leggetter</dc:creator>
				<category><![CDATA[Real-Time Web Musings]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[real-time web]]></category>
		<category><![CDATA[Real-Time Web News]]></category>
		<category><![CDATA[Social Media]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[websockets]]></category>

		<guid isPermaLink="false">http://www.leggetter.co.uk/?p=726</guid>
		<description><![CDATA[<p>I&#8217;m doing my best to keep up to speed on any news related to the real-time web. I follow interesting people on Twitter who tweet out links, I subscribe to RSS feeds and I&#8217;ve got <a href="http://www.google.com/alerts">Google Alerts</a> set up on a number of phrases. Since I&#8217;m doing all this work I thought it would [...]
Related posts:<ol>
<li><a href='http://www.leggetter.co.uk/2010/06/11/kwwika-world-cup-2010-real-time-push-web-app-apple-ipad-competition.html' rel='bookmark' title='Kwwika World Cup 2010 Real-Time Push Web App &#8211; Apple iPad competition'>Kwwika World Cup 2010 Real-Time Push Web App &#8211; Apple iPad competition</a></li>
<li><a href='http://www.leggetter.co.uk/2011/01/07/marriage-worklife-integration-real-time-web-technology-evangelism-kwwika-a-retrospective-of-my-2010.html' rel='bookmark' title='Marriage, Work/life integration, real-time web technology evangelism &amp; Kwwika: A retrospective of my 2010'>Marriage, Work/life integration, real-time web technology evangelism &#038; Kwwika: A retrospective of my 2010</a></li>
<li><a href='http://www.leggetter.co.uk/2011/01/17/browse-build-and-share-real-time-streams-with-datasift.html' rel='bookmark' title='Browse, Build and Share Real-time Streams with DataSift'>Browse, Build and Share Real-time Streams with DataSift</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m doing my best to keep up to speed on any news related to the real-time web. I follow interesting people on Twitter who tweet out links, I subscribe to RSS feeds and I&#8217;ve got <a  href="http://www.google.com/alerts">Google Alerts</a> set up on a number of phrases. Since I&#8217;m doing all this work I thought it would be a good idea to start sharing it by publishing the findings in an occasional summary blog post. I generally don&#8217;t like blog posts which just say &#8220;this is an interesting article&#8221; but sometimes, if it raises awareness of good articles, it can be useful. Hopefully it will be.</p>
<p>I tend to first post the links on the <a  href="http://www.linkedin.com/groups?&#038;gid=2578818">Real-Time Web Software and Technologies LinkedIn group</a> so if you are interested on getting the news as I find it, or contributing your own real-time web finds then please join <a  href="http://www.linkedin.com/groups?&#038;gid=2578818">the group</a>. Also feel free to <a  href="http://twitter.com/leggetter">Tweet at me</a> or <a  href="http://www.leggetter.co.uk/contact-me">contact me via the website</a> if you find anything interesting and relevant.</p>
<p><span id="more-726"></span></p>
<h2>WebSockets</h2>
<ul>
<li><a  href="http://www.kaazing.com/blog/?p=317">5 Signs You Need HTML5 Web Sockets (Part 1)</a> &#8211; <a  href="http://www.kaazing.com/">Kaazing</a> &#8211; Part <a  href="http://www.kaazing.com/blog/?p=327">2</a>, <a  href="http://www.kaazing.com/blog/?p=338">3</a>, <a  href="http://www.kaazing.com/blog/?p=346">4</a> and <a  href="http://www.kaazing.com/blog/?p=352">5</a> are also available.</li>
<li><a  href="http://blogs.webtide.com/gregw/entry/websocket_chat">WebSocket Chat</a> &#8211; A discussion about creating a Chat application using WebSockets &#8211; <a  href="http://blogs.webtide.com/gregw/">Greg Wilkins</a></li>
<li><a  href="http://blog.caplin.com/2010/03/02/why-we-dont-need-html5-websocket/">Why we don&#8217;t need HTML5 WebSocket</a> &#8211; a discussion on the problems with WebSockets &#8211; <a  href="http://blog.caplin.com/author/martintcaplincom/">Martin Tyler</a></li>
</ul>
<h2>Real-Time Web in action</h2>
<ul>
<li><a  href="http://nten.org/blog/2010/02/17/social-media-response-disaster-haiti">The Social Media Response to Disaster in Haiti</a> &#8211; An article on how real-time web technologies were used in response to the Haiti disaster &#8211; Amy Sample Ward, <a  href="http://www.netsquared.org/">NetSquared</a></li>
<li><a  href="http://blog.caplin.com/2010/02/24/when-were-you-when-tendulkar-scored-200/">When were you when Tendulkar scored 200?</a> &#8211; Ok, this isn&#8217;t actually an example of Real-Time Web in action. But it should be! This is a great example of where adding a dash of real-time web to your website could actually help you scale (stop users hitting <strong>Refresh</strong>) &#8211; <a  href="http://blog.caplin.com/author/martintcaplincom/">Martin Tyler</a></li>
</ul>
<h2>Real-Time Web technology</h2>
<ul>
<li><a  href="http://www.web2media.net/laktek/2010/02/16/building-real-time-web-apps-with-rails3/">Building Real-Time web apps with Rails 3</a> &#8211; <a  href="http://www.web2media.net/laktek/">LakTEK</a></li>
<li><a  href="http://www.leggetter.co.uk/2010/02/27/using-real-time-web-software-and-technology-to-distribute-events.html">Using real-time web software and technology to distribute events</a> &#8211; <a  href="http://www.leggetter.co.uk">Phil Leggetter</a> (that&#8217;s me)</li>
<li><a  href="http://blogs.computerworld.com/15612/its_not_just_twitter">It&#8217;s not just Twitter</a> (who use Open Source real-time web technology) - <a  href="http://blogs.computerworld.com/user/137">Steven J. Vaughan-Nichols</a></li>
<li><a  href="http://images.businessweek.com/ss/09/08/0806_real_time_web/">The Real-Time Web</a> (a list of web applications that are built on or user Real-Time Web technology &#8211; or claim to) &#8211; Robert D. Hof (<a  href="http://www.businessweek.com/">Business Week</a>)</li>
<li><a  href="http://lightstreamer.blogspot.com/2010/02/lightstreamer-36-is-out.html">Lightstreamer 3.6 is out!</a> &#8211; Lightstreamer release new versions of their components including support for Silverlight, Flex AMF, and Bidirectional Web Streaming</li>
</ul>
<h2>General News/Discussion</h2>
<ul>
<li><a  href="http://www.readwriteweb.com/archives/google_adds_myspace_status_updates_to_real-time_search_results.php">Google Now Includes MySpace Status Updates in Real-Time Search Results</a> &#8211; <a  href="http://www.readwriteweb.com/archives/author/frederic-lardinois.php">Frederic Lardinois</a></li>
<li><a  href="http://www.webpronews.com/topnews/2010/02/24/why-even-local-search-is-becoming-more-real-time">Why Even Local Search is Becoming More Real-Time</a> &#8211; <a  href="http://www.webpronews.com/user/chris-crum">Chris Crum</a></li>
<li><a  href="http://www.readwriteweb.com/archives/google_takes_first_shot_at_facebook_search_results.php">Google Takes First Shot at Facebook Search Results</a> - <a  href="http://www.readwriteweb.com/archives/author/mike-melanson-1.php">Mike Melanson</a></li>
<li><a  href="http://www.cloudave.com/link/sliderocket-brings-the-real-time-web-to-presentations">SlideRocket Brings the Real Time Web to Presentations</a> &#8211; <a  href="http://www.cloudave.com/author/Ben-Kepes">Ben Kepes</a></li>
</ul>
<p>Related posts:<ol>
<li><a href='http://www.leggetter.co.uk/2010/06/11/kwwika-world-cup-2010-real-time-push-web-app-apple-ipad-competition.html' rel='bookmark' title='Kwwika World Cup 2010 Real-Time Push Web App &#8211; Apple iPad competition'>Kwwika World Cup 2010 Real-Time Push Web App &#8211; Apple iPad competition</a></li>
<li><a href='http://www.leggetter.co.uk/2011/01/07/marriage-worklife-integration-real-time-web-technology-evangelism-kwwika-a-retrospective-of-my-2010.html' rel='bookmark' title='Marriage, Work/life integration, real-time web technology evangelism &amp; Kwwika: A retrospective of my 2010'>Marriage, Work/life integration, real-time web technology evangelism &#038; Kwwika: A retrospective of my 2010</a></li>
<li><a href='http://www.leggetter.co.uk/2011/01/17/browse-build-and-share-real-time-streams-with-datasift.html' rel='bookmark' title='Browse, Build and Share Real-time Streams with DataSift'>Browse, Build and Share Real-time Streams with DataSift</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.leggetter.co.uk/2010/03/03/real-time-web-posts-03032010.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>A Real Time Rich Internet Application (RTRIA) Example</title>
		<link>http://www.leggetter.co.uk/2009/11/03/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[<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 How to consume real-time data in a Silverlight RIA. 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 [...]
Related posts:<ol>
<li><a href='http://www.leggetter.co.uk/2009/10/29/real-time-rich-internet-applications-rtria.html' rel='bookmark' title='Real-Time Rich Internet Applications (RTRIA)'>Real-Time Rich Internet Applications (RTRIA)</a></li>
<li><a href='http://www.leggetter.co.uk/2009/11/07/which-rich-internet-application-technology-will-dominate.html' rel='bookmark' title='Which Rich Internet Application Technology will dominate?'>Which Rich Internet Application Technology will dominate?</a></li>
<li><a href='http://www.leggetter.co.uk/2011/07/05/the-easiest-way-to-add-real-time-functionality-to-an-asp-net-e-commerce-application.html' rel='bookmark' title='The easiest way to add real-time functionality to an ASP.NET e-commerce application'>The easiest way to add real-time functionality to an ASP.NET e-commerce application</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; title: ; notranslate">
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; title: ; notranslate">
/// &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; title: ; notranslate">
/// &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; title: ; notranslate">
{
    &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; title: ; notranslate">
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; title: ; notranslate">
/// &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; title: ; notranslate">
&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; title: ; notranslate">
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; title: ; notranslate">
/// &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>
<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='Real-Time Rich Internet Applications (RTRIA)'>Real-Time Rich Internet Applications (RTRIA)</a></li>
<li><a href='http://www.leggetter.co.uk/2009/11/07/which-rich-internet-application-technology-will-dominate.html' rel='bookmark' title='Which Rich Internet Application Technology will dominate?'>Which Rich Internet Application Technology will dominate?</a></li>
<li><a href='http://www.leggetter.co.uk/2011/07/05/the-easiest-way-to-add-real-time-functionality-to-an-asp-net-e-commerce-application.html' rel='bookmark' title='The easiest way to add real-time functionality to an ASP.NET e-commerce application'>The easiest way to add real-time functionality to an ASP.NET e-commerce application</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>3</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced
Database Caching 29/78 queries in 0.087 seconds using disk: basic

Served from: www.leggetter.co.uk @ 2012-02-04 20:25:41 -->
