<?xml version="1.0" encoding="utf-8"?>
<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:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" version="2.0">
<channel>
	<title>Elroy Jetson's Lifestream</title><description>Elroy Jetson's Lifestream Feed Digest</description><image>
				<url>http://feed.informer.com/images/fd.gif</url>
				<title>Powered By Feed Informer</title>
				<link>http://feed.informer.com/</link>
        			</image>
				<link>http://app.feed.informer.com/digest3/ZLCUZQR3JY.html</link>
											<copyright>Respective post owners and feed distributors</copyright>
											<generator>http://feed.informer.com/</generator>

<item>
	<title>Authenticating the Google Reader API</title>
	<description></description>
	<link>http://mezzoblue.com/archives/2008/12/11/authenticati/</link>
	<source url="http://del.icio.us/rss/elroyjetson">del.icio.us/elroyjetson</source>
	<guid isPermaLink="false">http://mezzoblue.com/archives/2008/12/11/authenticati/?</guid>
	<pubDate>Thu, 08 Jan 2009 09:41 GMT</pubDate>

</item>

<item>
	<title>Twist - see trends in twitter</title>
	<description></description>
	<link>http://twist.flaptor.com/?tz=-6</link>
	<source url="http://del.icio.us/rss/elroyjetson">del.icio.us/elroyjetson</source>
	<guid isPermaLink="false">http://twist.flaptor.com/?tz=-6?</guid>
	<pubDate>Thu, 08 Jan 2009 09:12 GMT</pubDate>

</item>

<item>
	<title>SitePoint » Top 10 Ways to Track Buzz</title>
	<description></description>
	<link>http://www.sitepoint.com/blogs/2008/07/19/top-10-ways-to-track-buzz/</link>
	<source url="http://del.icio.us/rss/elroyjetson">del.icio.us/elroyjetson</source>
	<guid isPermaLink="false">http://www.sitepoint.com/blogs/2008/07/19/top-10-ways-to-track-buzz/?</guid>
	<pubDate>Thu, 08 Jan 2009 08:22 GMT</pubDate>

</item>

<item>
	<title>GiiNii's Movit Mini is like the iPod Touch for Android</title>
	<description>&lt;p&gt;&lt;img alt="movitmini0109ces.jpg" src="http://blog.searchenginewatch.com/blog/img/movitmini0109ces.jpg" width="200" align="left" style="margin-right:5px"&gt; Last week, we talked about the idea of putting &lt;a href="http://blog.searchenginewatch.com/blog/090102-091050"&gt;Google's mobile operating system Android on a netbook&lt;/a&gt;. This week at the Consumers Electronic Show (CES), a device akin to the iPod Touch is also running Android.&lt;/p&gt;

&lt;p&gt;The GiiNii Movit Mini is basically a small tablet running Android. It's Wifi-enabled, has a touch screen and of course, can play music. The screen is 4.3 inches with a resolution of 480 x 272. It only comes with 256mb of storage, but a microSD slot allows users to add memory cards.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.engadget.com/2009/01/07/giiniis-movit-mini-wifi-android-tablet-hands-on/"&gt;Engadget&lt;/a&gt; got to play with the device at the trade show and when they asked about pricing, they got a very vague answer about the device costing less than an iPod Touch.&lt;/p&gt;

&lt;p&gt;With less internal storage, lack of multi-touch and a not-so-sexy design, pricing it below the iPod Touch will be a necessity!&lt;/p&gt;&lt;div&gt;
&lt;a href="http://feeds.searchenginewatch.com/~f/sewblog?a=0nmBDo.P"&gt;&lt;img src="http://feeds.searchenginewatch.com/~f/sewblog?i=0nmBDo.P" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.searchenginewatch.com/~f/sewblog?a=Omyo7G.P"&gt;&lt;img src="http://feeds.searchenginewatch.com/~f/sewblog?i=Omyo7G.P" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.searchenginewatch.com/~r/sewblog/~4/506304194" height="1" width="1"&gt;</description>
	<link>http://feeds.searchenginewatch.com/~r/sewblog/~3/506304194/090108-103443</link>
	<source url="http://google.com/reader/public/atom/user/06056730815072438377/state/com.google/broadcast">James' shared items in Google Reader</source>
	<guid isPermaLink="false">http://feeds.searchenginewatch.com/~r/sewblog/~3/506304194/090108-103443?</guid>
	<pubDate>Thu, 08 Jan 2009 03:34 GMT</pubDate>

</item>

<item>
	<title>Write Automated Unit Tests for Zend Framework Applications</title>
	<description>&lt;p&gt;A.J.Brown has published the first of a two-part series explaining how to write automated unit tests for Zend Framework applications. &lt;a href="http://ajbrown.org/blog/2009/01/04/automated-testing-using-zend-framework-part-1.html"&gt;His article&lt;/a&gt;, which makes use of &lt;a href="http://www.phpunit.de/"&gt;PHPUnit&lt;/a&gt; and &lt;a href="http://framework.zend.com/manual/en/zend.test.html"&gt;Zend_Test&lt;/a&gt; in the context of a user account controller, also discusses creating seed data, setting authentication state and writing test cases.&lt;/p&gt;
                 &lt;br&gt; &lt;br&gt;</description>
	<link>http://devzone.zend.com/article/4149-Write-Automated-Unit-Tests-for-Zend-Framework-Applications</link>
	<source url="http://google.com/reader/public/atom/user/06056730815072438377/state/com.google/broadcast">James' shared items in Google Reader</source>
	<guid isPermaLink="false">http://devzone.zend.com/article/4149-Write-Automated-Unit-Tests-for-Zend-Framework-Applications?</guid>
	<pubDate>Wed, 07 Jan 2009 10:22 GMT</pubDate>

</item>

<item>
	<title>Two New Free SEO Tools Released by Bruce Clay</title>
	<description>&lt;p&gt;The folks over Bruce Clay have released two new SEO tools and the best part is that they're free.&lt;/p&gt;

&lt;p&gt;The first one is called the &lt;a href="http://www.bruceclay.com/web_rank.htm#seoksp"&gt;Search Engine Optimization/KSP tool&lt;/a&gt;. It helps you know how competitive the keyword term or phrase is that you wish to optimize for. Just type in the keywords and the results appear in a chart below. Here's a screenshot of how it works. &lt;/p&gt;

&lt;p&gt;&lt;img alt="seokspbruceclay010609.jpg" src="http://blog.searchenginewatch.com/blog/img/seokspbruceclay010609.jpg" width="600"&gt;&lt;/p&gt;

&lt;p&gt;The second tool is the &lt;a href="http://www.bruceclay.com/web_rank.htm#semtoolbar"&gt;SEMToolBar&lt;/a&gt;. It's only available for Internet Explorer. Use the search box with the toolbar to conduct a search for the keyword or phrase you're interested in. Once the regular results load, wait a few moments as the toolbar performs its magic. Underneath the results, you'll see a variety of competitive intelligence data including page rank and inbound links. &lt;/p&gt;

&lt;p&gt;&lt;img alt="semtoolbarbruceclay010609.jpg" src="http://blog.searchenginewatch.com/blog/img/semtoolbarbruceclay010609.jpg" width="600"&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Related Reading:&lt;/em&gt;&lt;br&gt;
&lt;a href="http://blog.searchenginewatch.com/blog/080131-102806"&gt;CrazyEgg: Free SEM/SEO Analytics Tool Blows My Mind&lt;/a&gt;&lt;br&gt;
&lt;a href="http://blog.searchenginewatch.com/blog/081119-084741"&gt;Google AdWords Launches Search-Based Keyword Tool&lt;/a&gt;&lt;br&gt;
&lt;a href="http://blog.searchenginewatch.com/blog/081118-115950"&gt;TNS Unveils Next Generation of Online Advertising Monitoring Tools&lt;/a&gt;&lt;br&gt;
&lt;a href="http://blog.searchenginewatch.com/blog/081016-110942"&gt;magnify360 Launches New Paid Search Tool: Google Cost Optimizer&lt;/a&gt;&lt;br&gt;
&lt;a href="http://blog.searchenginewatch.com/blog/080709-111834"&gt;AdWords Keyword Tool Now Shows Numerical Data&lt;/a&gt;&lt;/p&gt;&lt;div&gt;
&lt;a href="http://feeds.searchenginewatch.com/~f/sewblog?a=b7N7IY.P"&gt;&lt;img src="http://feeds.searchenginewatch.com/~f/sewblog?i=b7N7IY.P" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.searchenginewatch.com/~f/sewblog?a=LqDvVB.P"&gt;&lt;img src="http://feeds.searchenginewatch.com/~f/sewblog?i=LqDvVB.P" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.searchenginewatch.com/~r/sewblog/~4/505408947" height="1" width="1"&gt;</description>
	<link>http://feeds.searchenginewatch.com/~r/sewblog/~3/505408947/090107-114131</link>
	<source url="http://google.com/reader/public/atom/user/06056730815072438377/state/com.google/broadcast">James' shared items in Google Reader</source>
	<guid isPermaLink="false">http://feeds.searchenginewatch.com/~r/sewblog/~3/505408947/090107-114131?</guid>
	<pubDate>Wed, 07 Jan 2009 04:41 GMT</pubDate>

</item>

<item>
	<title>Facebook Reaches 150 Million Users Worldwide</title>
	<description>&lt;p&gt;Facebook is starting off the new year with a bang. Today, the social network announced that it has reached the 150 million user mark. Members speak in 35 different languages and represent 170 countries and territories.&lt;/p&gt;

&lt;p&gt;But how many of those users are active? Facebook says half of them use the social network every day. That's remarkable.&lt;br&gt;
&lt;a href="http://blog.facebook.com/blog.php?post=46881667130"&gt;&lt;br&gt;
Writing on the Facebook blog&lt;/a&gt;, founder Mark Zuckerberg said, "The full potential of the web is to make the world more open, so everyone has a voice and can share what is important to them. With 150 million voices and counting, we can't wait for the rest of 2009, and we look forward to offering even more ways for you to connect with the people who matter most."&lt;/p&gt;

&lt;p&gt;This should make Microsoft happy as well. Last year, they struck a deal to become the &lt;a href="http://blog.searchenginewatch.com/blog/081008-084235"&gt;search engine for Facebook&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;br&gt;
Related Reading:&lt;/em&gt;&lt;br&gt;
&lt;a href="http://searchenginewatch.com/3631270"&gt;Facebook: Get Educated on the Hottest Social Media Platform &lt;/a&gt;&lt;br&gt;
&lt;a href="http://blog.searchenginewatch.com/blog/081222-080553"&gt;Facebook's New Privacy Problem: Groups Created Under False Pretenses&lt;/a&gt;&lt;/p&gt;&lt;div&gt;
&lt;a href="http://feeds.searchenginewatch.com/~f/sewblog?a=XGWTWZ.P"&gt;&lt;img src="http://feeds.searchenginewatch.com/~f/sewblog?i=XGWTWZ.P" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.searchenginewatch.com/~f/sewblog?a=FFc4iO.P"&gt;&lt;img src="http://feeds.searchenginewatch.com/~f/sewblog?i=FFc4iO.P" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.searchenginewatch.com/~r/sewblog/~4/505374173" height="1" width="1"&gt;</description>
	<link>http://feeds.searchenginewatch.com/~r/sewblog/~3/505374173/090107-110825</link>
	<source url="http://google.com/reader/public/atom/user/06056730815072438377/state/com.google/broadcast">James' shared items in Google Reader</source>
	<guid isPermaLink="false">http://feeds.searchenginewatch.com/~r/sewblog/~3/505374173/090107-110825?</guid>
	<pubDate>Wed, 07 Jan 2009 04:08 GMT</pubDate>

</item>

<item>
	<title>Paid Search Spend up 12% in Q4 2008</title>
	<description>&lt;p&gt;Paid search spending was up 12% in the fourth quarter of 2008 compared to the same quarter in 2007, according to &lt;a href="http://www.searchignite.com"&gt;SearchIgnite&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We've been hearing that advertising dollars were being shifted online, with the strategy accelerated by the rough economy. But is that trend slowing?&lt;/p&gt;

&lt;p&gt;SearchIgnite says October's spend was up by 15% and November was up by 43% year-over-year. But December's spend dropped 14% from the previous year.&lt;/p&gt;

&lt;p&gt;It could be a reaction to consumer behavior. Conversion rates increased by 11% in October, but dropped 2% in November. They went back up in December but just by a 4% increase.&lt;/p&gt;

&lt;p&gt;Still, Roger Barnette, President of SearchIgnite, suggests that in all the confusion there is opportunity for the technologically innovative.&lt;/p&gt;

&lt;p&gt;“Retailers were more aggressive with their paid search spend in the first half of the quarter compared with the year earlier in an effort to capture more consumer dollars ahead of the holidays.” said Barnette. “This is evidence that the challenging and changing economic environment is requiring retail marketers to adjust their online marketing strategies accordingly. As such, tools for testing and understanding how both search and other online media are performing together will become increasingly important for retailers as they look to make more nimble, data-driven decisions about where to allocate their media spend.”&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Related Reading:&lt;/em&gt;&lt;br&gt;
&lt;a href="http://blog.searchenginewatch.com/blog/081216-100443"&gt;59% of Small Businesses Don't Do Paid Search Marketing&lt;/a&gt;&lt;br&gt;
&lt;a href="http://blog.searchenginewatch.com/blog/090106-090151"&gt;Yahoo Gives Itself Permission to Change Your Search Marketing Campaigns&lt;/a&gt;&lt;/p&gt;&lt;div&gt;
&lt;a href="http://feeds.searchenginewatch.com/~f/sewblog?a=VUGVVD.P"&gt;&lt;img src="http://feeds.searchenginewatch.com/~f/sewblog?i=VUGVVD.P" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.searchenginewatch.com/~f/sewblog?a=u7lyYM.P"&gt;&lt;img src="http://feeds.searchenginewatch.com/~f/sewblog?i=u7lyYM.P" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.searchenginewatch.com/~r/sewblog/~4/505306436" height="1" width="1"&gt;</description>
	<link>http://feeds.searchenginewatch.com/~r/sewblog/~3/505306436/090107-093413</link>
	<source url="http://google.com/reader/public/atom/user/06056730815072438377/state/com.google/broadcast">James' shared items in Google Reader</source>
	<guid isPermaLink="false">http://feeds.searchenginewatch.com/~r/sewblog/~3/505306436/090107-093413?</guid>
	<pubDate>Wed, 07 Jan 2009 02:34 GMT</pubDate>

</item>

<item>
	<title>Cisco launches Community Platform “Eos” and aims at Media Industry</title>
	<description>&lt;p&gt;&lt;strong&gt;Cisco launches “Entertainment Operating System” (EOS)&lt;/strong&gt;&lt;br&gt;
I spent the day with &lt;a href="http://www.cisco.com/web/solutions/cmsg/connect_content_customers.html"&gt;Cisco’s Eos&lt;/a&gt; team a few weeks ago in their shiny SF offices, and learned a great deal about their SaaS platform and intentions to provide a community platform to the media industry, much of my conversation is still under NDA, although they’ve already gone public with this announcement from &lt;a href="http://news.cnet.com/8301-1023_3-10133792-93.html"&gt;CNET &lt;/a&gt;and &lt;a href="http://online.wsj.com/article/SB123128575997659063.html?mod=googlenews_wsj"&gt;WSJ&lt;/a&gt;.  This project, while we certainly had our suspicions was kept very quiet, and even Cisco’s social media teams I’ve spoken to weren’t fully aware of the project.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stemming from Community Experience at Five Across&lt;/strong&gt;&lt;br&gt;
In Feb 2007 (yes way back then) &lt;a href="http://venturebeat.com/2007/02/08/cisco-dives-into-web-20-buys-five-across/"&gt;Cisco acquired community platform Five Across&lt;/a&gt;, and has since integrated the team with this media solutions business.  Their goal? To provide a community platform to the media industry, of course eventually served up on Cisco’s infrastructure.  This moves Cisco away from infrastructure (servers, networking, routers) and now to the application space, providing a broader offering to the large networks that don’t just want to put their videos on YouTube for Google to monetize.  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;New kid on the block will have some challenges&lt;/strong&gt;&lt;br&gt;
This doesn’t come without challenges for Cisco’s Eos team, as our research has indicated that community deployments are only 20% technology and the other 80% being process, roles, culture, &lt;a href="http://blog.strategicheading.com/2008/11/18/analytics-are-the-next-competitive-frontier-for-social-networking-vendors/"&gt;measurement&lt;/a&gt;, and change management, this gives Cisco’s Eos a sharp learning curve, they’ll need to combat this with the success the team from Five Across and Tribe have gleaned over the years.  Secondly, any new product is going to be plagued with areas to be tweaked, and some media brands may not want to be the early guinea pigs for such a deployment.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Takes aim at Kickapps and Pluck but backed by huge name&lt;/strong&gt;&lt;br&gt;
While there’s plenty of market share to go around during this growth period, this is a direct insertion into the deal flow of media focused vendors like &lt;a href="http://www.pluck.com/"&gt;Pluck &lt;/a&gt;and &lt;a href="http://www.kickapps.com/"&gt;Kickapps&lt;/a&gt;, so you can expect brands to be sending RFPs to Cisco’s Eos team for evaluation.  While the encumbants have a track record of success and Eos doesn’t have a folder filled with case studies, they do lead with Warner Music and have launched &lt;a href="http://www.lauraizibor.com/"&gt;Laura Izibor &lt;/a&gt;and &lt;a href="http://www.allseanpaul.com/"&gt;Sean Paul&lt;/a&gt; (I checked the code, it’s calling Cisco EOS code), they do have two strong things going for them: 1) Cisco’s existing footprint in the enterprise, 2) The thousands in the Cisco sales force and all of their contacts.  and  3) Brand recognition from the big, safe, and profitable Cisco.  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Over 100 vendors in this space&lt;/strong&gt;&lt;br&gt;
Exciting times ahead, &lt;a href="http://www.web-strategist.com/blog/2007/02/12/list-of-white-label-social-networking-platforms/"&gt;I’ve just added Cisco to the ever growing list of community platforms –it’s over 100 vendors now&lt;/a&gt;.  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;li&gt;Great move for Cisco as it puts more ‘bits in the pipe’, as online video increases demand for their networking gear.&lt;/li&gt;
&lt;li&gt;Cisco EOS team will need to demonstrate they offer more than just technology to be successful, media companies need solution vendors –not technology vendors.&lt;/li&gt;
&lt;li&gt;Competitors now have to compete against infrastructure play and big brand backing. &lt;/li&gt;
&lt;li&gt;Cisco could drive down prices by offering Eos at bargain prices as a loss leader for other offerings.&lt;/li&gt;
&lt;li&gt;Social Networking software is a cheap commodity and market is oversaturated, expect a shakeout during this recession.&lt;/li&gt;
&lt;li&gt;Other large infrastructure players like Sun, IBM, Microsoft, EMC, and CMS vendors will eye the community platform space for buyout –yet startups will resist during periods of low valuation.&lt;/li&gt;
&lt;/blockquote&gt;
&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~f/WebStrategyByJeremiah?a=a6by2G.P"&gt;&lt;img src="http://feeds.feedburner.com/~f/WebStrategyByJeremiah?i=a6by2G.P" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WebStrategyByJeremiah/~4/505210707" height="1" width="1"&gt;</description>
	<link>http://feeds.feedburner.com/~r/WebStrategyByJeremiah/~3/505210707/</link>
	<source url="http://google.com/reader/public/atom/user/06056730815072438377/state/com.google/broadcast">James' shared items in Google Reader</source>
	<guid isPermaLink="false">http://feeds.feedburner.com/~r/WebStrategyByJeremiah/~3/505210707/?</guid>
	<pubDate>Wed, 07 Jan 2009 00:42 GMT</pubDate>

</item>

<item>
	<title>Detecting twitter users with JavaScript - handy or evil?</title>
	<description>&lt;p&gt;Earlier this week I blogged about a &lt;a href="http://www.wait-till-i.com/2009/01/05/detecting-and-displaying-the-information-of-a-logged-in-twitter-user/"&gt;proof of concept that you can detect if a user is logged in to twitter and display their data&lt;/a&gt; with a few lines of JavaScript. This could be used to show for example "tweet this" buttons in a blog application. &lt;/p&gt;
&lt;p&gt;The trick is easy: use the &lt;code&gt;user_timeline&lt;/code&gt; to get the correct data back and provide it with a callback:&lt;/p&gt;
&lt;div&gt;&lt;a href="javascript:void(0);"&gt;PLAIN TEXT&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#000000;font-weight:bold"&gt;JAVASCRIPT:&lt;/span&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li style="font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;color:black;font-weight:normal;font-style:normal;color:#3A6A8B"&gt;
&lt;div style="color:#000000;font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;font-weight:normal"&gt;&lt;span style="color:#003366;font-weight:bold"&gt;function&lt;/span&gt; hasTwitter&lt;span style="color:#006600;font-weight:bold"&gt;(&lt;/span&gt;data&lt;span style="color:#006600;font-weight:bold"&gt;)&lt;/span&gt;&lt;span style="color:#006600;font-weight:bold"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style="font-weight:bold;color:#26536A"&gt;
&lt;div style="color:#000000;font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;font-weight:normal"&gt;  &lt;span style="color:#009900;font-style:italic"&gt;// gets the user's real name&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style="font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;color:black;font-weight:normal;font-style:normal;color:#3A6A8B"&gt;
&lt;div style="color:#000000;font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;font-weight:normal"&gt;  &lt;span style="color:#000066"&gt;alert&lt;/span&gt;&lt;span style="color:#006600;font-weight:bold"&gt;(&lt;/span&gt;data&lt;span style="color:#006600;font-weight:bold"&gt;[&lt;/span&gt;&lt;span style="color:#800000"&gt;0&lt;/span&gt;&lt;span style="color:#006600;font-weight:bold"&gt;]&lt;/span&gt;.&lt;span style="color:#006600"&gt;user&lt;/span&gt;.&lt;span style="color:#006600"&gt;name&lt;/span&gt;&lt;span style="color:#006600;font-weight:bold"&gt;)&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li style="font-weight:bold;color:#26536A"&gt;
&lt;div style="color:#000000;font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;font-weight:normal"&gt;  &lt;span style="color:#009900;font-style:italic"&gt;// other data is .screen_name, .location and&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style="font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;color:black;font-weight:normal;font-style:normal;color:#3A6A8B"&gt;
&lt;div style="color:#000000;font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;font-weight:normal"&gt;  &lt;span style="color:#009900;font-style:italic"&gt;// data[0].text is the latest update&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style="font-weight:bold;color:#26536A"&gt;
&lt;div style="color:#000000;font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;font-weight:normal"&gt;&lt;span style="color:#006600;font-weight:bold"&gt;}&lt;/span&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;a href="javascript:void(0);"&gt;PLAIN TEXT&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#000000;font-weight:bold"&gt;HTML:&lt;/span&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li style="font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;color:black;font-weight:normal;font-style:normal;color:#3A6A8B"&gt;
&lt;div style="color:#000000;font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;font-weight:normal"&gt;&lt;span style="color:#009900"&gt;&lt;a href="http://december.com/html/4/element/script.html"&gt;&lt;span style="color:#000000;font-weight:bold"&gt;&lt;script&lt;/span&gt;&lt;/a&gt; &lt;span style="color:#000066"&gt;type&lt;/span&gt;=&lt;span style="color:#ff0000"&gt;"text/javascript"&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style="font-weight:bold;color:#26536A"&gt;
&lt;div style="color:#000000;font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;font-weight:normal"&gt;&lt;span style="color:#000066"&gt;src&lt;/span&gt;=&lt;span style="color:#ff0000"&gt;&quot;&amp;#39;http://twitter.com/statuses/user_timeline.json&amp;count=1&amp;callback=hasTwitter&quot;&lt;/span&gt;&lt;span style="color:#000000;font-weight:bold"&gt;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style="font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;color:black;font-weight:normal;font-style:normal;color:#3A6A8B"&gt;
&lt;div style="color:#000000;font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;font-weight:normal"&gt;&lt;span style="color:#009900"&gt;&lt;span style="color:#000000;font-weight:bold"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/span&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You can see the proof of concept &lt;a href="http://icant.co.uk/sandbox/twitter-hi-demo.html"&gt;here&lt;/a&gt;. The only problem with the code above is that if the user is not authenticated, Twitter's API will prompt an authentication dialog. You can work around this one by providing an extra parameter called "suppress_response_codes" which is meant to be used with apps that can only handle 200 response codes and don't allow for authentication (Flash apps for example):&lt;/p&gt;
&lt;div&gt;&lt;a href="javascript:void(0);"&gt;PLAIN TEXT&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#000000;font-weight:bold"&gt;HTML:&lt;/span&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li style="font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;color:black;font-weight:normal;font-style:normal;color:#3A6A8B"&gt;
&lt;div style="color:#000000;font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;font-weight:normal"&gt;&lt;span style="color:#009900"&gt;&lt;a href="http://december.com/html/4/element/script.html"&gt;&lt;span style="color:#000000;font-weight:bold"&gt;&lt;script&lt;/span&gt;&lt;/a&gt; &lt;span style="color:#000066"&gt;type&lt;/span&gt;=&lt;span style="color:#ff0000"&gt;"text/javascript"&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style="font-weight:bold;color:#26536A"&gt;
&lt;div style="color:#000000;font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;font-weight:normal"&gt;&lt;span style="color:#000066"&gt;src&lt;/span&gt;=&lt;span style="color:#ff0000"&gt;&quot;&amp;#39;http://twitter.com/statuses/user_timeline.json&amp;count=1&amp;hasTwitter&amp;suppress_response_codes&quot;&lt;/span&gt;&lt;span style="color:#000000;font-weight:bold"&gt;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style="font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;color:black;font-weight:normal;font-style:normal;color:#3A6A8B"&gt;
&lt;div style="color:#000000;font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;font-weight:normal"&gt;&lt;span style="color:#009900"&gt;&lt;span style="color:#000000;font-weight:bold"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/span&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This also means that you need to do your own error handling for cases where the user is not authenticated:&lt;/p&gt;
&lt;div&gt;&lt;a href="javascript:void(0);"&gt;PLAIN TEXT&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#000000;font-weight:bold"&gt;JAVASCRIPT:&lt;/span&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li style="font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;color:black;font-weight:normal;font-style:normal;color:#3A6A8B"&gt;
&lt;div style="color:#000000;font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;font-weight:normal"&gt;&lt;span style="color:#003366;font-weight:bold"&gt;function&lt;/span&gt; hasTwitter&lt;span style="color:#006600;font-weight:bold"&gt;(&lt;/span&gt;data&lt;span style="color:#006600;font-weight:bold"&gt;)&lt;/span&gt;&lt;span style="color:#006600;font-weight:bold"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style="font-weight:bold;color:#26536A"&gt;
&lt;div style="color:#000000;font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;font-weight:normal"&gt;  &lt;span style="color:#000066;font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#006600;font-weight:bold"&gt;(&lt;/span&gt;data.&lt;span style="color:#006600"&gt;error&lt;/span&gt;&lt;span style="color:#006600;font-weight:bold"&gt;)&lt;/span&gt;&lt;span style="color:#006600;font-weight:bold"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style="font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;color:black;font-weight:normal;font-style:normal;color:#3A6A8B"&gt;
&lt;div style="color:#000000;font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;font-weight:normal"&gt;    &lt;span style="color:#000066"&gt;alert&lt;/span&gt;&lt;span style="color:#006600;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#3366CC"&gt;'No authenticated user'&lt;/span&gt;&lt;span style="color:#006600;font-weight:bold"&gt;)&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li style="font-weight:bold;color:#26536A"&gt;
&lt;div style="color:#000000;font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;font-weight:normal"&gt;  &lt;span style="color:#006600;font-weight:bold"&gt;}&lt;/span&gt; &lt;span style="color:#000066;font-weight:bold"&gt;else&lt;/span&gt; &lt;span style="color:#006600;font-weight:bold"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style="font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;color:black;font-weight:normal;font-style:normal;color:#3A6A8B"&gt;
&lt;div style="color:#000000;font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;font-weight:normal"&gt;    &lt;span style="color:#009900;font-style:italic"&gt;// gets the user's real name&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style="font-weight:bold;color:#26536A"&gt;
&lt;div style="color:#000000;font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;font-weight:normal"&gt;    &lt;span style="color:#000066"&gt;alert&lt;/span&gt;&lt;span style="color:#006600;font-weight:bold"&gt;(&lt;/span&gt;data&lt;span style="color:#006600;font-weight:bold"&gt;[&lt;/span&gt;&lt;span style="color:#800000"&gt;0&lt;/span&gt;&lt;span style="color:#006600;font-weight:bold"&gt;]&lt;/span&gt;.&lt;span style="color:#006600"&gt;user&lt;/span&gt;.&lt;span style="color:#006600"&gt;name&lt;/span&gt;&lt;span style="color:#006600;font-weight:bold"&gt;)&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li style="font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;color:black;font-weight:normal;font-style:normal;color:#3A6A8B"&gt;
&lt;div style="color:#000000;font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;font-weight:normal"&gt;    &lt;span style="color:#009900;font-style:italic"&gt;// other data is .screen_name, .location and&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style="font-weight:bold;color:#26536A"&gt;
&lt;div style="color:#000000;font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;font-weight:normal"&gt;    &lt;span style="color:#009900;font-style:italic"&gt;// data[0].text is the latest update&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style="font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;color:black;font-weight:normal;font-style:normal;color:#3A6A8B"&gt;
&lt;div style="color:#000000;font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;font-weight:normal"&gt;  &lt;span style="color:#006600;font-weight:bold"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style="font-weight:bold;color:#26536A"&gt;
&lt;div style="color:#000000;font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;font-weight:normal"&gt;&lt;span style="color:#006600;font-weight:bold"&gt;}&lt;/span&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;a href="javascript:void(0);"&gt;PLAIN TEXT&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color:#000000;font-weight:bold"&gt;HTML:&lt;/span&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li style="font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;color:black;font-weight:normal;font-style:normal;color:#3A6A8B"&gt;
&lt;div style="color:#000000;font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;font-weight:normal"&gt;&lt;span style="color:#009900"&gt;&lt;a href="http://december.com/html/4/element/script.html"&gt;&lt;span style="color:#000000;font-weight:bold"&gt;&lt;script&lt;/span&gt;&lt;/a&gt; &lt;span style="color:#000066"&gt;type&lt;/span&gt;=&lt;span style="color:#ff0000"&gt;"text/javascript"&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style="font-weight:bold;color:#26536A"&gt;
&lt;div style="color:#000000;font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;font-weight:normal"&gt;&lt;span style="color:#000066"&gt;src&lt;/span&gt;=&lt;span style="color:#ff0000"&gt;&quot;&amp;#39;http://twitter.com/statuses/user_timeline.json&amp;count=1&amp;hasTwitter&amp;suppress_response_codes&quot;&lt;/span&gt;&lt;span style="color:#000000;font-weight:bold"&gt;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style="font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;color:black;font-weight:normal;font-style:normal;color:#3A6A8B"&gt;
&lt;div style="color:#000000;font-family:&amp;#39;Courier New&amp;#39;, Courier, monospace;font-weight:normal"&gt;&lt;span style="color:#009900"&gt;&lt;span style="color:#000000;font-weight:bold"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/span&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Now, this is pretty cool, but it also caused quite a stir on the twitter developer mailing list as it is a privacy concern. Using this technique I could simulate a user's homepage, fake an error, ask for re-authentication and phish their login data. &lt;/p&gt;
&lt;p&gt;Whilst this is a problem, it is not really Twitter's fault - if anything then browsers and the lack of secure sandboxes are to blame. Some questions a proof of concept like this throws up are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do we need something like "tweet this" buttons (as a call to action they can be very effective)?&lt;/li&gt;
&lt;li&gt;If we do, isn't it better to only show them when the user is a twitter user instead of cluttering the interface with all kind of buttons?&lt;/li&gt;
&lt;li&gt;Is a provider-unknown secret like &lt;a href="http://security.yahoo.com/article.html?aid=2006102507"&gt;Yahoo's sign in seal&lt;/a&gt; a step in the right direction (educating users instead of patching technology)?&lt;/li&gt;
&lt;li&gt;Is &lt;a href="http://oauth.net/"&gt;oAuth&lt;/a&gt; the answer?&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~f/ajaxian?a=QXKu7d.P"&gt;&lt;img src="http://feeds.feedburner.com/~f/ajaxian?i=QXKu7d.P" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ajaxian?a=kWn7Be.P"&gt;&lt;img src="http://feeds.feedburner.com/~f/ajaxian?i=kWn7Be.P" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ajaxian?a=OugoFk.p"&gt;&lt;img src="http://feeds.feedburner.com/~f/ajaxian?i=OugoFk.p" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;</description>
	<link>http://feeds.feedburner.com/~r/ajaxian/~3/505113616/detecting-twitter-users-with-javascript-handy-or-evil</link>
	<source url="http://google.com/reader/public/atom/user/06056730815072438377/state/com.google/broadcast">James' shared items in Google Reader</source>
	<guid isPermaLink="false">http://feeds.feedburner.com/~r/ajaxian/~3/505113616/detecting-twitter-users-with-javascript-handy-or-evil?</guid>
	<pubDate>Tue, 06 Jan 2009 22:06 GMT</pubDate>

</item>


</channel></rss>

