<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" version="2.0">

<channel>
	<title>Brightscape</title>
	
	<link>http://brightscape.net/blog</link>
	<description />
	<lastBuildDate>Fri, 06 Nov 2009 21:22:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain="brightscape.net" port="80" path="/blog/?rsscloud=notify" registerProcedure="" protocol="http-post" />
		<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/brightscape" type="application/rss+xml" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">brightscape</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fbrightscape" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fbrightscape" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fbrightscape" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bloglines.com/sub/http://feeds.feedburner.com/brightscape" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fbrightscape" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fbrightscape" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fbrightscape" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2Fbrightscape" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://my.feedlounge.com/external/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2Fbrightscape" src="http://static.feedlounge.com/buttons/subscribe_0.gif">Subscribe with FeedLounge</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2Fbrightscape" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2Fbrightscape" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2Fbrightscape" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Fbrightscape" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fbrightscape" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.yourminis.com/subscribe.aspx?u=http%3A%2F%2Ffeeds.feedburner.com%2Fbrightscape" src="http://www.yourminis.com/images/addtoyourminisbadge.gif">Subscribe with Yourminis.com</feedburner:feedFlare><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>SimplePie &amp; jQuery Flickr Photostream</title>
		<link>http://brightscape.net/blog/simplepie-jquery-flickr-photostream/</link>
		<comments>http://brightscape.net/blog/simplepie-jquery-flickr-photostream/#comments</comments>
		<pubDate>Fri, 06 Nov 2009 16:24:16 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Flickr]]></category>
		<category><![CDATA[Infinite Carousel]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[SimplePie]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://brightscape.net/blog/?p=720</guid>
		<description><![CDATA[<img src="http://brightscape.net/blog/tmp/2009/11/Untitled-2.png" class="blogimg" width="100" alt="Flickr logo" title="Flickr logo" /> If you want to display a number of photos on your website, jQuery Infinite Carousel is a very good option. This carousel works really well when you have a list of images on your page, but [...]<p><hr />
<a href="http://brightscape.net/blog/simplepie-jquery-flickr-photostream/">SimplePie &amp; jQuery Flickr Photostream</a> | Brightscape | Copyright 2006-2009</p>
]]></description>
			<content:encoded><![CDATA[<p><img src="http://brightscape.net/blog/tmp/2009/11/Untitled-2.png" alt="Flickr logo" title="Flickr logo" width="117" height="40" class="blogimg" /> If you want to display a number of photos on your website, <a href="http://jqueryfordesigners.com/jquery-infinite-carousel/" rel="external">jQuery Infinite Carousel</a> is a very good option. This carousel works really well when you have a list of images on your page, but it threw up a number of problems when calling images dynamically on page load (I.e. your latest Flickr Photostream or set).</p>
<p>I found the scroller worked perfectly in Firefox 3.5, but Safari, Chrome and IE all had issues with scrolling the carousel forward and backwards. Without going into too much detail it looks like a DOM issue with the dynamic images not loading correctly.</p>
<p><img src="http://brightscape.net/blog/tmp/2009/11/Untitled-3.png" alt="Infinite Carousel image" title="Infinite Carousel image" width="300" height="57" class="blogimg" /> I fixed this problem by using SimplePie to parse the Flickr feed, cache the images into a folder, and then dynamically pull the images into the HTML on page load. </p>
<p>I also setup a <a href="http://brightscape.net/blog/cronjob-auto-update-rss-cache/">cronjob</a> to automatically update the cache on a weekly basis (I don&#8217;t update my Flickr account anymore than that). This fixed the issue with the carousel and sped up page loads because the images are called from a cache folder rather than being downloaded each time from the Flickr API. It&#8217;s important that the cronjob is in place; otherwise SimplePie will parse the Flickr feed on each load (or however often you set the cache to expire). I covered this in a previous post regarding <a href="http://brightscape.net/blog/simplepie-parse-rss-atom-feeds/">parsing of Google Reader shared items</a>.</p>
<p>See a <a href="http://brightscape.net/about/more-info/">demo of the SimplePie and jQuery Infinite Carousel on this site &raquo;</a></p>
<h3 class="toppad">How to do it</h3>
<p>1. Download carousel.js from <a href="http://brightscape.net/downloads/carousel.js">here</a> and upload to a folder on your server (I.e. www.yoursite.com/js/carousel.js)</p>
<p>2. Download SimplePie <a href="http://simplepie.org/downloads/?download" rel="external">here</a> and follow the instructions for installing SimplePie on your server.</p>
<p>3. Create a PHP page as follows (I&#8217;ve commented within the code with some specific instructions) and upload it to your server:</p>
<pre class="brush: xml;">&lt;?php
	// Change the path below to the location of simplepie.inc on your server
	require '/home/username/public_html/simplepie.inc';

	// Change the URL below to the feed URL for your Flickr Photostream or a specific set
	$url = 'http://api.flickr.com/services/feeds/photoset.gne?set=72157621912224879&amp;nsid=39505387@N02&amp;lang=en-us';
	$feed = new SimplePie();
	$feed-&gt;set_feed_url($url);

	// This allows the cronjob to handle image caching rather than slow page loads as SimplePie parses the feed each time
	$feed-&gt;set_cache_duration(999999999);
	$feed-&gt;set_timeout(-1);

	// Change the location below to where you have placed your cache folder and CHMOD the cache folder to 755 or 777
	$feed-&gt;set_cache_location($_SERVER['DOCUMENT_ROOT'] . '/folder/cache');
	$feed-&gt;init();

	$feed-&gt;handle_content_type();

	function image_from_description($data) {
		preg_match_all('/&lt;img src=&quot;([^&quot;]*)&quot;([^&gt;]*)&gt;/i', $data, $matches);
		return $matches[1][0];
	}

	function select_image($img, $size) {
		$img = explode('/', $img);
		$filename = array_pop($img);

	$s = array(
        	'_s.', // square
	        '_t.', // thumb
	        '_m.', // small
	        '.',   // medium
	        '_b.'  // large
	);

	$img[] = preg_replace('/(_(s|t|m|b))?\./i', $s[$size], $filename);
		return implode('/', $img);
	}
?&gt;&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;en&quot; lang=&quot;en&quot;&gt;
&lt;head&gt;
	&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
	&lt;title&gt;SimplePie and Infinite Carousel Example&lt;/title&gt;
	&lt;script type=&quot;text/css&quot;&gt;
	.infiniteCarousel {
		width:533px;
		position:relative
	}

	.infiniteCarousel #flickrgallery {
		width:465px; /* .infiniteCarousel width - (.wrapper margin-left + .wrapper margin-right) */
		overflow:auto;
		height:110px;
		margin:0 34px;
		position:absolute;
		top:0
	}

	.infiniteCarousel ul a img {
		border:5px solid #fff;
		-moz-border-radius:5px;
		-webkit-border-radius:5px;
	}

	.infiniteCarousel #flickrgallery ul {
		width:840px; /* single item * n */
		list-style-image:none;
		list-style-position:outside;
		list-style-type:none;
		margin:0;
		padding:0;
		position:absolute;
		top:0
	}

	.infiniteCarousel ul li {
		display:block;
		float:left;
		padding:0 10px 0 0;
		height:85px;
		width:85px
	}

	.infiniteCarousel ul li img {
		-webkit-transition:border-color 400ms;
	}

	.infiniteCarousel ul:hover li img {
		border-color:#fff
	}

	.infiniteCarousel ul:hover li:hover img {
		border-color:#fff
	}

	.infiniteCarousel ul li a img {
		display:block
	}

	.infiniteCarousel .arrowflickr {
		display:block;
		height:85px;
		width:30px;
		/* Add images for the forward and back arrows and use negative text-indent to hide the arrow characters */
		/*background:transparent url(&quot;http://www.yourwebsite.com/images/arrows.png&quot;) no-repeat;
		text-indent:-9999px;*/
		position:absolute;
		top:0;
		cursor:pointer;
		outline:0;
		border:0
	}

	.infiniteCarousel .forward {
		background-position:-830px -1020px;
		right:0
	}

	.infiniteCarousel .back {
		background-position:-830px -1128px;
		left:0
	}

	.infiniteCarousel .forward:hover,
	.infiniteCarousel .back:hover {
		background-color:#fff
	}
	&lt;/script&gt;
	&lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
	&lt;script src=&quot;http://www.yourwebsite.com/js/carousel.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot;&gt;$(document).ready(function(){$('.infiniteCarousel').infiniteCarousel();});&lt;/script&gt;
&lt;/head&gt;

&lt;body&gt;
	&lt;h1&gt;SimplePie and Infinite Carousel Example&lt;/h1&gt;
        &lt;div class=&quot;infiniteCarousel&quot;&gt;
      		&lt;div id=&quot;flickrgallery&quot;&gt;
			&lt;ul&gt;
			&lt;?php foreach ($feed-&gt;get_items() as $item): ?&gt;
				&lt;li&gt;&lt;?php
					if ($enclosure = $item-&gt;get_enclosure()) {
						$img = image_from_description($item-&gt;get_description());

						/* Choose image size you want to link to (full_url) and display in carousel (thumb_url)
						$full_url = select_image($img, 3);
						$thumb_url = select_image($img, 0);
						echo '&lt;a href=&quot;' . $full_url . '&quot; title=&quot;' . $enclosure-&gt;get_title() . '&quot;&gt;&lt;img src=&quot;' . $thumb_url . '&quot; alt=&quot; &quot; /&gt;&lt;/a&gt;'.&quot;\n&quot;;
						}
				?&gt;&lt;/li&gt;
           			&lt;?php endforeach; ?&gt;
			&lt;/ul&gt;
          &lt;/div&gt;
       	&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>4. Create the following cronjob PHP file which will tell SimplePie to parse the feed at the time(s) you specify (<a href="http://brightscape.net/blog/cronjob-auto-update-rss-cache/">For a discussion of cronjob see previous post</a>):</p>
<pre class="brush: php;">&lt;?php
	// Change the path below to the location of simplepie.inc on your server
	require '/home/folder/public_html/simplepie.inc';

	// Change the URL below to the feed URL for your Flickr Photostream or a specific set
	$url = 'http://api.flickr.com/services/feeds/photoset.gne?set=72157621912224879&amp;nsid=39505387@N02&amp;lang=en-us';
	$feed = new SimplePie();
	$feed-&gt;set_feed_url($url);

	// Tells SimplePie to update cache every time PHP file is loaded. Cronjob handles specific times that this page is loaded
	$feed-&gt;set_cache_duration(0);
	$feed-&gt;set_timeout(5);

	// Change the location below to where you have placed your cache folder and CHMOD the cache folder to 755 or 777
	$feed-&gt;set_cache_location($_SERVER['DOCUMENT_ROOT'] . '/folder/cache');
	$feed-&gt;init();
	$feed-&gt;handle_content_type();
	function image_from_description($data) {
    preg_match_all('/&lt;img src=&quot;([^&quot;]*)&quot;([^&gt;]*)&gt;/i', $data, $matches);
    return $matches[1][0];
	}
	function select_image($img, $size) {
    $img = explode('/', $img);
    $filename = array_pop($img);
    $s = array(
        '_s.', // square
        '_t.', // thumb
        '_m.', // small
        '.',   // medium
        '_b.'  // large
    );
    $img[] = preg_replace('/(_(s|t|m|b))?\./i', $s[$size], $filename);
    return implode('/', $img);
	}
?&gt;</pre>
<p>5. Upload PHP file to your server and setup a cronjob to automatically load the file at set time(s).</p>
<p><hr />
<a href="http://brightscape.net/blog/simplepie-jquery-flickr-photostream/">SimplePie &amp; jQuery Flickr Photostream</a> | Brightscape | Copyright 2006-2009</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/brightscape?a=ftYnif2ETnI:9wBdBioRgFY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/brightscape?i=ftYnif2ETnI:9wBdBioRgFY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=ftYnif2ETnI:9wBdBioRgFY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/brightscape?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=ftYnif2ETnI:9wBdBioRgFY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/brightscape?i=ftYnif2ETnI:9wBdBioRgFY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=ftYnif2ETnI:9wBdBioRgFY:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/brightscape?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/brightscape/~4/ftYnif2ETnI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://brightscape.net/blog/simplepie-jquery-flickr-photostream/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cronjob Auto Update RSS Cache</title>
		<link>http://brightscape.net/blog/cronjob-auto-update-rss-cache/</link>
		<comments>http://brightscape.net/blog/cronjob-auto-update-rss-cache/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 12:32:11 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[cronjob]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[Scheduled Task]]></category>
		<category><![CDATA[SimplePie]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://brightscape.net/blog/?p=667</guid>
		<description><![CDATA[<img src="http://brightscape.net/blog/tmp/2009/10/Untitled-1.png" class="blogimg" width="100" alt="WebCron" title="WebCron" /> I recently wrote a tutorial on using SimplePie to parse your Google Reader shared items Atom feed (or any other RSS/Atom feed for that matter). However, after implementing it on this site (in the sidebar here) [...]<p><hr />
<a href="http://brightscape.net/blog/cronjob-auto-update-rss-cache/">Cronjob Auto Update RSS Cache</a> | Brightscape | Copyright 2006-2009</p>
]]></description>
			<content:encoded><![CDATA[<p><img src="http://brightscape.net/blog/tmp/2009/10/Untitled-1.png" alt="WebCron" title="WebCron" width="203" height="69" class="blogimg" /> I recently wrote a tutorial on using <a href="http://brightscape.net/blog/simplepie-parse-rss-atom-feeds/">SimplePie to parse your Google Reader shared items</a> Atom feed (or any other RSS/Atom feed for that matter). However, after implementing it on this site (<a href="http://brightscape.net/about/">in the sidebar here</a>) and testing it for a month-or-so, I&#8217;ve found page load times are very slow whenever SimplePie parses the feed and updates the cache. I had it set to request an update every hour (3600 seconds), which in hindsight is probably too often for my needs.</p>
<p>The ultimate solution would be for the cache to update in the background, server-side rather than when the page is loaded by a user and the criteria of 3600 seconds has passed since the last update (I.e. to avoid very slow page load and bad user experience). In other words, when users visit the page, the cache has already been updated in the background so the user arrives on the page without a long delay. The PHP in the header of the page simply calls in the information from the cache file, rather than reparsing and caching.</p>
<p>By setting up a <a href="http://en.wikipedia.org/wiki/Cron" rel="external">cronjob</a> I&#8217;ve been able to specify exactly when I want SimplePie to update the cache which means the page on my site loads without having to reparse and cache the feed.</p>
<p>The problem with setting up a cronjob is that my web hosting isn&#8217;t setup for cronjobs or scheduled tasks. To achieve this I would need to update my hosting&#8211;so I have found another solution to this problem. There are several remote sites that allow you to setup a cronjob on their server, which they then remotely call your file automatically at your specified times.</p>
<p>In the rest of this article I will show you how to <strong>create a cronjob file</strong>, <strong>refer to it in the page</strong> you want to display your updated feed, and how to <strong>setup the scheduled cronjob via an online scheduled task service</strong>. I am basing the rest of this article on the <a href="http://brightscape.net/blog/simplepie-parse-rss-atom-feeds/">SimplePie tutorial</a> that I wrote previously for example purposes.</p>
<h3 class="toppad">SimplePie Example Page</h3>
<p>Below is the original code for parsing and pulling in a Google Reader shared items atom feed. Tutorial <a href="http://brightscape.net/blog/simplepie-parse-rss-atom-feeds/">here</a>.</p>
<pre class="brush: xml;">
&lt;?php
	require '/home/folder/public_html/php/simplepie.inc';

	$url = 'http://www.google.com/reader/public/atom/user%2F13279602483212565421%2Fstate%2Fcom.google%2Fbroadcast';
	$feed = new SimplePie();
	$feed-&gt;set_feed_url($url);
	$feed-&gt;init();

	$start = 0;
	$length = 5;
	$feed-&gt;strip_htmltags(array('img','embed','center','strong'));
?&gt;&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;en&quot; lang=&quot;en&quot;&gt;
&lt;head&gt;
	&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
	&lt;title&gt;SimplePie Test&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
				&lt;h1&gt;SimplePie Test&lt;/h1&gt;
				&lt;ul&gt;
				&lt;?php
		        	// loop through items
					foreach ($feed-&gt;get_items($start,$length) as $item):
				?&gt;
					&lt;li&gt;&lt;a href=&quot;&lt;?php echo $item-&gt;get_link(); ?&gt;&quot;&gt;&lt;?php echo substr($item-&gt;get_title(), 0, 45) . '...'; ?&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;?php echo $item-&gt;get_date('j F Y'); ?&gt;&lt;br /&gt;&lt;?php echo substr($item-&gt;get_description(), 0, 160) . '...'; ?&gt;&lt;/li&gt;
				&lt;?php endforeach; ?&gt;
				&lt;/ul&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<h3 class="toppad">Create a Cronjob File</h3>
<p>By using the example page above, it is simply a case of copying the PHP at the very top of the code into a separate PHP file. So your PHP file should have the following code:</p>
<pre class="brush: php;">
&lt;?php
	// Change location to match simpliepie.inc file location on your server
	require '/home/folder/public_html/php/simplepie.inc';

	// Change atom feed URL to your own
	$url = 'http://www.google.com/reader/public/atom/user%2F13279602483212565421%2Fstate%2Fcom.google%2Fbroadcast';
	$feed = new SimplePie();
	$feed-&gt;set_feed_url($url);
	$feed-&gt;set_cache_duration(0);
	$feed-&gt;set_timeout(5);

	// Change location of cache folder in line below
	$feed-&gt;set_cache_location($_SERVER['DOCUMENT_ROOT'] . '/about/cache');
	$feed-&gt;init();

	$start = 0;
	$length = 5;
	$feed-&gt;strip_htmltags(array('img','embed','center','strong'));
?&gt;
</pre>
<p>Notice the line <code>$feed->set_cache_duration(0);</code> has a value of 0 so that each time the file is called, it will reparse and update the cache. Also add the line <code>$feed->set_timeout(5);</code> below the cache duration line.</p>
<p>Now upload the PHP file to your server. You will need to refer to this file using the cron service later.</p>
<h3 class="toppad">Update SimplePie Example Page</h3>
<p>On your original page where the parsed Atom feed appears you will now need to make some changes to the PHP at the top of the page. This is shown below:</p>
<pre class="brush: xml;">
&lt;?php
	require '/home/folder/public_html/php/simplepie.inc';

	$url = 'http://www.google.com/reader/public/atom/user%2F13279602483212565421%2Fstate%2Fcom.google%2Fbroadcast';
	$feed = new SimplePie();
	$feed-&gt;set_feed_url($url);
	$feed-&gt;set_cache_duration(999999999);
	$feed-&gt;set_timeout(-1);
	$feed-&gt;init();

	$start = 0;
	$length = 5;
	$feed-&gt;strip_htmltags(array('img','embed','center','strong'));
?&gt;&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;en&quot; lang=&quot;en&quot;&gt;
&lt;head&gt;
	&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
	&lt;title&gt;SimplePie Test&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
				&lt;h1&gt;SimplePie Test&lt;/h1&gt;
				&lt;ul&gt;
				&lt;?php
		        	// loop through items
					foreach ($feed-&gt;get_items($start,$length) as $item):
				?&gt;
					&lt;li&gt;&lt;a href=&quot;&lt;?php echo $item-&gt;get_link(); ?&gt;&quot;&gt;&lt;?php echo substr($item-&gt;get_title(), 0, 45) . '...'; ?&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;?php echo $item-&gt;get_date('j F Y'); ?&gt;&lt;br /&gt;&lt;?php echo substr($item-&gt;get_description(), 0, 160) . '...'; ?&gt;&lt;/li&gt;
				&lt;?php endforeach; ?&gt;
				&lt;/ul&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>You will notice that the two differences are the inclusion of <code>$feed->set_cache_duration(999999999);</code> and <code>$feed->set_timeout(-1);</code>. This will stop the page reparsing and caching the Atom feed, and instead will use the cached file already run on a scheduled basis via the separate PHP file. Now once you have uploaded your updated SimplePie Example page and the separate PHP file, you will need to setup the cronjob via an online service such as <a href="http://webcron.org" rel="external">webcron.org</a>.</p>
<h3 class="toppad">Setup Cronjob Via WebCron</h3>
<p><img src="http://brightscape.net/blog/tmp/2009/10/Untitled-1-300x81.gif" alt="Add cronjob" title="Add cronjob" width="300" height="81" class="blogimg" /> Services such as webcron are very easy to use, and for many, it&#8217;s the only solution for scheduled tasks unless you are prepared to pay for an upgrade with your web host.</p>
<p>Once you have registered as a user, it is a very simple process of referring to the PHP file location and then setting up the cronjob schedule.</p>
<p>To add a new cronjob simply click the link &#8216;+ Add a cronjob&#8217;</p>
<p><img src="http://brightscape.net/blog/tmp/2009/10/Untitled-2-228x300.gif" alt="cronjob Schedule" title="cronjob Schedule" width="228" height="300" class="blogimg" /> On the next page setup a cronjob schedule. This is fairly straight-forward. By selecting All for any category the cronjob will run every five minutes. But if you don&#8217;t need to update that often you can specify certain months, days of the week or times of the day.</p>
<p>I set mine up to run every month (All in Month column), every day (All in Day column), only week days (Mon &#8211; Fri in Week day column), 10am, 12am, 2pm, 4pm, 6pm, 9pm (10, 12, 14, 16, 18, 21 in Hour column), on the hour (0 in the Minutes column).</p>
<p>Now it is a simple case of submitting your new cronjob and then hitting the test link. You can also track the history to see if there have been any errors in fetching your PHP file and running the cronjob.</p>
<p><hr />
<a href="http://brightscape.net/blog/cronjob-auto-update-rss-cache/">Cronjob Auto Update RSS Cache</a> | Brightscape | Copyright 2006-2009</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/brightscape?a=HeW1xMK3jpc:WI5I6ugygMc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/brightscape?i=HeW1xMK3jpc:WI5I6ugygMc:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=HeW1xMK3jpc:WI5I6ugygMc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/brightscape?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=HeW1xMK3jpc:WI5I6ugygMc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/brightscape?i=HeW1xMK3jpc:WI5I6ugygMc:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=HeW1xMK3jpc:WI5I6ugygMc:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/brightscape?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/brightscape/~4/HeW1xMK3jpc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://brightscape.net/blog/cronjob-auto-update-rss-cache/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>September Highlights</title>
		<link>http://brightscape.net/blog/september-highlights/</link>
		<comments>http://brightscape.net/blog/september-highlights/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 16:26:18 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://brightscape.net/blog/?p=510</guid>
		<description><![CDATA[<img src="http://brightscape.net/blog/tmp/2009/09/jquerytools.jpg" class="blogimg" width="100" alt="jQuery Tools" title="jQuery Tools" /> Over the past month I have collated a selection of useful articles and resources relating to web design and search engine optimisation. If you have any highlights from the past month feel free to leave a [...]<p><hr />
<a href="http://brightscape.net/blog/september-highlights/">September Highlights</a> | Brightscape | Copyright 2006-2009</p>
]]></description>
			<content:encoded><![CDATA[<p><img src="http://brightscape.net/blog/tmp/2009/09/jquerytools.jpg" alt="jQuery Tools" title="jQuery Tools" width="200" class="blogimg" /> Over the past month I have collated a selection of useful articles and resources relating to web design and search engine optimisation. If you have any highlights from the past month feel free to leave a comment below.</p>
<h3>Useful Articles &amp; Resources</h3>
<p><a href="http://www.sitepoint.com/blogs/2009/09/23/progressive-enhancement-graceful-degradation-choice/" rel="external">Progressive Enhancement and Graceful Degradation: Making a Choice</a><br />
I&#8217;m a big believer in building accessible websites, but where do you draw the line? Browser anomalies still abound in 2009, what sacrifices and necessities do you make in your web designs?</p>
<p><a href="http://www.seo.com/blog/list-of-great-firefox-plugins-for-seo/" rel="external">List of Great Firefox Plugins for SEO</a><br />
A great selection of plugins that make your job as an SEO much quicker. I personally don&#8217;t use all of the plugins mentioned in the article, but I can vouch for <strong>Search Status</strong>, <strong>Firebug</strong> and <strong>Web Developer</strong>. Some of the other plugins have options that can be accessed within these three plugins so it&#8217;s worth having a good browse around the plugin menus to see what capabilities they have. This will avoid unnecessary plugin installation and subsequent Firefox bloat.</p>
<p><a href="http://net.tutsplus.com/tutorials/other/search-engine-optimization-101/" rel="external">Search Engine Optimisation 101</a><br />
This is quite a nice guide for those who are new to search engine optimisation. However, I would always recommend doing your own testing and researching from several reputable sources.</p>
<p><a href="http://www.insidecrm.com/features/101-web-site-fixes-031808/" rel="external">101 Website Fixes</a><br />
An exhaustive list of resources and articles to improve every aspect of your website. This is definitely an article that I will be bookmarking and referring to. The article gives a list of resources that cover the following aspects:</p>
<ul>
<li>Copywriting</li>
<li>Usability</li>
<li>Search Engine Optimisation</li>
<li>Accessibility</li>
<li>Design</li>
<li>Legal</li>
</ul>
<p></p>
<p><a href="http://www.smashingmagazine.com/2009/09/24/10-useful-usability-findings-and-guidelines/" rel="external">10 Useful Usability Findings &amp; Guidelines</a><br />
Useful guidelines from various usability studies that look at where people click on the page, best practice for form design, use of whitespace and the ideal internal search box structure.</p>
<p><a href="http://www.noupe.com/jquery/jquery-tools.html" rel="external">jQuery Tools</a><br />
Noupe has a nice round-up of jQuery Tools. A simple jQuery framework that has a small footprint. The jQuery Tools collection weighs-in at just over 5.5 KB&#8217;s making it an ideal script to include on your pages for some nice presentational enhancements. For many web designers jQuery Tools may be all you need to achieve some excellent aesthetic site improvements. Choose which jQuery elements you need for your design whilst avoiding unnecessary code that you don&#8217;t need.</p>
<h3 class=toppad>Introduction to HTML 5</h3>
<p>One of the hottest topics in web design/development is HTML 5. Brad Neuberg gives an excellent <a href="http://ajaxian.com/archives/introduction-to-html-5" rel="external">Introduction to HTML 5</a>. Brad covers some of the most exciting and interesting elements such as Canvas and SVG and Video in HTML 5.</p>
<p><object width="530" height="424"><param name="allowfullscreen" value="false" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=6691519&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=0" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=6691519&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=0" type="application/x-shockwave-flash" allowfullscreen="false" allowscriptaccess="always" width="530" height="424"></embed></object><a href="http://vimeo.com/6691519" rel="external">Source</a></p>
<h3 class="toppad">Google Chrome Frame</h3>
<p>Render IE as Google Chrome with <a href="http://blog.chromium.org/2009/09/introducing-google-chrome-frame.html" rel="external">Google Chrome Frame</a>. This IE plugin lets developers bring HTML 5 capabilities to Internet Explorer. The plugin is triggered by a meta tag within the page head, and there is a JS script to force the plugin to install on IE. I would assume the forced install will be disabled as standard in many network environments unfortunately.</p>
<p><object width="530" height="424"><param name="movie" value="http://www.youtube.com/v/sjW0Bchdj-w&#038;hl=en&#038;fs=1&#038;"></param><param name="allowFullScreen" value="false"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/sjW0Bchdj-w&#038;hl=en&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="false" width="530" height="424"></embed></object><br />
<a href="http://www.youtube.com/watch?v=sjW0Bchdj-w&#038;feature=player_embedded" rel="external">Source</a></p>
<p><hr />
<a href="http://brightscape.net/blog/september-highlights/">September Highlights</a> | Brightscape | Copyright 2006-2009</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/brightscape?a=fj7bdYlS1CE:1KlY1PGqLII:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/brightscape?i=fj7bdYlS1CE:1KlY1PGqLII:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=fj7bdYlS1CE:1KlY1PGqLII:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/brightscape?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=fj7bdYlS1CE:1KlY1PGqLII:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/brightscape?i=fj7bdYlS1CE:1KlY1PGqLII:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=fj7bdYlS1CE:1KlY1PGqLII:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/brightscape?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/brightscape/~4/fj7bdYlS1CE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://brightscape.net/blog/september-highlights/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone Spotify App Review</title>
		<link>http://brightscape.net/blog/iphone-spotify-app-review/</link>
		<comments>http://brightscape.net/blog/iphone-spotify-app-review/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 12:00:29 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[Spotify]]></category>

		<guid isPermaLink="false">http://brightscape.net/blog/?p=534</guid>
		<description><![CDATA[<img src="http://brightscape.net/blog/tmp/2009/09/spotify_logo-150x150.jpg" class="blogimg" width="100" alt="Spotify" title="Spotify" /> There was much speculation suggesting that Apple would reject the iPhone Spotify app due to it&#8217;s placement as a direct competitor to Apple&#8217;s iTunes Store &#8211; giving users the ability to access hundreds of thousands of [...]<p><hr />
<a href="http://brightscape.net/blog/iphone-spotify-app-review/">iPhone Spotify App Review</a> | Brightscape | Copyright 2006-2009</p>
]]></description>
			<content:encoded><![CDATA[<p><img src="http://brightscape.net/blog/tmp/2009/09/spotify_logo-150x150.jpg" alt="Spotify" title="Spotify" width="150" height="150" class="blogimg" /> There was much speculation suggesting that <a href="http://www.yackyack.co.uk/spotify/spotify-apple-approve-reject/comment-page-1/" rel="external">Apple would reject the iPhone Spotify app</a> due to it&#8217;s placement as a direct competitor to Apple&#8217;s iTunes Store &#8211; giving users the ability to access hundreds of thousands of tunes without having to pay for them individually. However, after a profit sharing deal was settled with Apple, the <a href="http://www.pcworld.com/article/171538/spotify_iphone_app_approved_is_apple_relaxing_its_rules.html" rel="external">Spotify app was approved</a> earlier this month.</p>
<p>The Spotify app is only available to Premium subscribers who pay a monthly fee of £9.99 in the UK. The ability to download music onto your iPhone or Android phone is currently only available for users in the UK, Sweden, France and Spain. The Premium account enables users to enjoy their Spotify playlists without advert interruptions as well having access to exclusive releases. Streaming audio on your Mac or PC are also at a higher sound quality (320kbps) than the free edition.</p>
<p>Prior to the iPhone and Android apps, I personally stuck with the free version of Spotify. Now that Spotify has gone mobile, I am trialling a Premium account. This is how I&#8217;ve got on so far&#8230;</p>
<h2 class="toppad">Spotify App Review</h2>
<p><img src="http://brightscape.net/blog/tmp/2009/09/photo3-200x300.jpg" alt="Spotify Playlist Downloading" title="Spotify Playlist Downloading" width="200" height="300" class="blogimg" /> The iPhone Spotify App makes it very easy to stream your Spotify playlists over a 3G or WiFi network. But the winning feature has to be the ability to download entire playlists onto your iPhone for playback when you don&#8217;t have 3G or WiFi access. Spotify calls these Offline playlists. So you don&#8217;t need to stop listening to your music collection when you&#8217;re on the Subway!</p>
<p>In order to download your Offline playlists, you will need access to 3G or WiFi. It&#8217;s interesting to see real-time updates when you make a change to your playlist on your computer &#8211; if you have Spotify open on your iPhone it will update in real-time, making synchronisation very quick and efficient.</p>
<p>Choosing which playlists to download to your iPhone is very easy as well. The large &#8216;Offline playlists&#8217; button at the top of the screen on playlist view (see image on right) enables you to tick all the playlists you want to make available when you are offline. Downloading playlists is fairly quick, but obviously depends on your WiFi Internet speed.</p>
<p>On the other hand, downloading playlists with 3G is quite slow and should be avoided for large numbers of tracks if possible. Once you are happy with your downloaded playlists you can force the Spotify app to go offline for up to 30 days before you will need to login to the Spotify servers. This can be useful if you plan to go abroad and want to avoid costly data charges, or if you want to listen to music on your iPhone on the airplane.</p>
<p><img src="http://brightscape.net/blog/tmp/2009/09/photo-200x300.jpg" alt="Spotify Track Album Cover" title="Spotify Track Album Cover" width="200" height="300" class="blogimg" /> The overall navigation of the app is quite intuitive and very similar to other iPhone applications. I did find some stability issues where the app crashed when changing tracks, but this has been minimal.</p>
<p>It is worth noting that the Spotify app doesn&#8217;t work in the background in the way the built-in iPod application works. This means that reading a text message or navigating away from the Spotify application closes the application completely. This can be somewhat annoying, but I don&#8217;t see a solution to this unless Apple built the Spotify apps capabilities into the core operating system of the phone.</p>
<p>The track view is pleasant (see image on right), with a large thumbnail of the album cover, and it is possible to flick through tracks to change songs in this view. Clicking the album image also gives you access to additional features &#8211; such as adding the track to other playlists, shuffle and repeat track.</p>
<h2 class="toppad">Recommended Features &amp; Improvements</h2>
<p>The stability of the application is fairly good, however a couple of crashes suggests that there is room for improvement in this area, and I would hope to see more stability in future releases of the app.</p>
<p>I would like to see the vertical alphabet navigation bar present on many iPhone apps such as Contacts. This feature makes it lightening fast to navigate through contacts and other data on the iPhone. If this was added to the Spotify app it would save on having to type into the search box or scroll endlessly to find a specific track in your playlists.</p>
<p><strong><em>What features and improvements would you like to see on the iPhone Spotify app?</em></strong></p>
<h2 class="toppad">Conclusion</h2>
<p>Overall the iPhone Spotify app is very good. It lets you take large playlists of music with you when you are away from an Internet connection. The sound quality is very good and the application feels responsive and fast. I haven&#8217;t tested this application on a 3GS, but I can imagine that it will be even more responsive.</p>
<h3 class="toppad">Spotify for iPhone Preview</h3>
<p>Spotify posted the following video on their website. It gives a good overview of the features available on the app.</p>
<p><object width="530" height="424"><param name="movie" value="http://www.youtube.com/v/QNCb1IdmJ_0&#038;hl=en&#038;fs=1&#038;"></param><param name="allowFullScreen" value="false"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/QNCb1IdmJ_0&#038;hl=en&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="false" width="530" height="424"></embed></object></p>
<p>More information available on the official <a href="http://www.spotify.com/en/" rel="external">Spotify</a> site.</p>
<p><hr />
<a href="http://brightscape.net/blog/iphone-spotify-app-review/">iPhone Spotify App Review</a> | Brightscape | Copyright 2006-2009</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/brightscape?a=GKsD4sHCwR8:Bv8YaejRgkM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/brightscape?i=GKsD4sHCwR8:Bv8YaejRgkM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=GKsD4sHCwR8:Bv8YaejRgkM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/brightscape?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=GKsD4sHCwR8:Bv8YaejRgkM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/brightscape?i=GKsD4sHCwR8:Bv8YaejRgkM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=GKsD4sHCwR8:Bv8YaejRgkM:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/brightscape?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/brightscape/~4/GKsD4sHCwR8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://brightscape.net/blog/iphone-spotify-app-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Show/Hide Content with Noscript, CSS &amp; jQuery</title>
		<link>http://brightscape.net/blog/show-hide-content-noscript-css-jquery/</link>
		<comments>http://brightscape.net/blog/show-hide-content-noscript-css-jquery/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 10:14:52 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://brightscape.net/blog/?p=498</guid>
		<description><![CDATA[The following post tackles an issue I came across on a recent project with form validation. I wanted to provide a javascript:history(-1) link to return a user to the previous page whilst retaining text that was entered [...]<p><hr />
<a href="http://brightscape.net/blog/show-hide-content-noscript-css-jquery/">Show/Hide Content with Noscript, CSS &#038; jQuery</a> | Brightscape | Copyright 2006-2009</p>
]]></description>
			<content:encoded><![CDATA[<p>The following post tackles an issue I came across on a recent project with form validation. I wanted to provide a <code>javascript:history(-1)</code> link to return a user to the previous page whilst retaining text that was entered into the form fields (unlike simply reloading the original page which looses all the form content). However, simply providing a JavaScript link would leave users who have JavaScript disabled orphaned on the page &#8211; certainly quite unprofessional and inaccessible.</p>
<p>The percentage of users who have JavaScript disabled is smaller than those who leave JavaScript enabled, but simply relying on global statistics isn&#8217;t (in my opinion) enough reason to ignore a percentage of Internet users (especially if there is a fairly simple fix that pleases both parties). According to <a href="http://www.w3schools.com/browsers/browsers_stats.asp" rel="external">W3 Schools statistics, 5% of Internet users have JavaScript disabled</a>. In addition to this statistic, more Internet users are turning to browsers such as <a href="http://www.mozilla.com/en-US/" rel="external">Firefox</a> with its many customisation options. There are several security add-ons for Firefox that block JavaScript by default and instead allow users to selectively enable JavaScript on a site-by-site basis.</p>
<p>When validating forms I would always recommend using a JavaScript solution that runs client-side to give the user instant feedback (preferably without needing a page reload), along with a server-side validator to deal with users who have JavaScript disabled and to tackle spammers. But this is beyond the scope of this post, and will be dealt with in future posts.</p>
<p>The following code examples show how it&#8217;s possible to show a certain portion of content for users with JavaScript enabled whilst hiding another portion designed for those with JavaScript disabled &#8211; and vice-versa.</p>
<h3 class="toppad">The HTML</h3>
<p>The example HTML code below shows two paragraphs of text. One uses a JavaScript link whereas the other uses a normal hyperlink. We can toggle the visibility of the two paragraphs by using a combination of the <code><noscript></noscript></code> tag, CSS and jQuery.</p>
<pre class="brush: xml;">
&lt;!--Display paragraph if JavaScript is enabled in the browser.--&gt;
&lt;p id=&quot;hasjs&quot;&gt;&lt;a href=&quot;javascript:javascript:history.go(-1)&quot;&gt;Go back to previous page.&lt;/a&gt;&lt;/p&gt;

&lt;!--Display paragraph if JavaScript is disabled in the browser.--&gt;
&lt;noscript&gt;&lt;p id=&quot;nojs&quot;&gt;&lt;a href=&quot;http://www.examplesite.com/contact/&quot;&gt;Go back to previous page.&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
</pre>
<h3 class="toppad">The CSS</h3>
<p>Within the CSS you need to set the <code>#hasjs</code> paragraph to <code>display:none</code>. We will then use jQuery to override the CSS <em>if</em> JavaScript is enabled.</p>
<pre class="brush: css;">
&lt;style type=&quot;text/css&quot;&gt;
#hasjs {
	display:none
}
&lt;/style&gt;
</pre>
<h3 class="toppad">The jQuery</h3>
<p>The following piece of JavaScript tells the browser to hide the <code>#nojs</code> paragraph and show the <code>#js</code> paragraph. This obviously only applies if JavaScript is enabled in the browser.</p>
<pre class="brush: jscript;">
&lt;script type=&quot;text/javascript&quot;&gt;
$(document).ready(function(){
	$('#nojs').hide();
	$('#hasjs').show();
});
&lt;/script&gt;
</pre>
<h3 class="toppad">Put it all together</h3>
<p>For the purpose of this demonstration we will include the JavaScript and CSS in the head of the HTML page, but these can both be called from external files. </p>
<p>Please note that you will also need to call the jQuery library either directly from Google Code, or by downloading the latest build and referring to its location on your own server. For caching purposes I call jQuery directly from Google Code so this is how it is shown in the example below.</p>
<pre class="brush: xml;">
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Show/Hide Example&lt;/title&gt;
&lt;style type=&quot;text/css&quot;&gt;
#hasjs {
	display:none
}
&lt;/style&gt;
&lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
$(document).ready(function(){
	$('#nojs').hide();
	$('#hasjs').show();
});
&lt;/script&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;!--Display paragraph if JavaScript is enabled in the browser.--&gt;
&lt;p id=&quot;hasjs&quot;&gt;&lt;a href=&quot;javascript:javascript:history.go(-1)&quot;&gt;Go back to previous page.&lt;/a&gt;&lt;/p&gt;

&lt;!--Display paragraph if JavaScript is disabled in the browser.--&gt;
&lt;noscript&gt;&lt;p id=&quot;nojs&quot;&gt;&lt;a href=&quot;http://www.site-domain-name-here.com/contact/&quot;&gt;Go back to previous page.&lt;/a&gt;&lt;/p&gt;&lt;/noscript&gt;
&lt;/body&gt;
&lt;/html
</pre>
<p><hr />
<a href="http://brightscape.net/blog/show-hide-content-noscript-css-jquery/">Show/Hide Content with Noscript, CSS &#038; jQuery</a> | Brightscape | Copyright 2006-2009</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/brightscape?a=4mGDk77mwAE:FN-Gt9ve2VM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/brightscape?i=4mGDk77mwAE:FN-Gt9ve2VM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=4mGDk77mwAE:FN-Gt9ve2VM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/brightscape?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=4mGDk77mwAE:FN-Gt9ve2VM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/brightscape?i=4mGDk77mwAE:FN-Gt9ve2VM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=4mGDk77mwAE:FN-Gt9ve2VM:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/brightscape?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/brightscape/~4/4mGDk77mwAE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://brightscape.net/blog/show-hide-content-noscript-css-jquery/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>SimplePie: Parse RSS/Atom Feeds</title>
		<link>http://brightscape.net/blog/simplepie-parse-rss-atom-feeds/</link>
		<comments>http://brightscape.net/blog/simplepie-parse-rss-atom-feeds/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 14:31:20 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Atom]]></category>
		<category><![CDATA[Google Reader]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[SimplePie]]></category>

		<guid isPermaLink="false">http://brightscape.net/blog/?p=463</guid>
		<description><![CDATA[<img src="http://brightscape.net/blog/tmp/2009/08/simplepie.png" class="blogimg" width="100" alt="SimplePie image" title="SimplePie image" /> I recently wrote a post about using MagpieRSS to parse my Google Reader shared items atom feed. However, I have come across various bugs in the last few days &#8211; from extremely slow page loads, out-of-date [...]<p><hr />
<a href="http://brightscape.net/blog/simplepie-parse-rss-atom-feeds/">SimplePie: Parse RSS/Atom Feeds</a> | Brightscape | Copyright 2006-2009</p>
]]></description>
			<content:encoded><![CDATA[<p><img src="http://brightscape.net/blog/tmp/2009/08/simplepie.png" alt="SimplePie image" title="SimplePie" width="208" height="61" class="blogimg" /> I recently wrote a post about using <a href="http://brightscape.net/blog/show-shared-google-reader-items-on-your-site/">MagpieRSS to parse my Google Reader shared items atom feed</a>. However, I have come across various bugs in the last few days &#8211; from extremely slow page loads, out-of-date cache files and character encoding issues.</p>
<p>This is an example of the error message I was having:</p>
<pre class="brush: xml;">
Warning: MagpieRSS: Failed to fetch http://www.google.com/reader/public/atom/user%2F13279602483212565421%2Fstate%2Fcom.google%2Fbroadcast (HTTP Error: connection failed (11) in /home/public_html/folder/magpierss/rss_fetch.inc on line 238
</pre>
<p>I&#8217;ve read various articles on the causes of the error. Some suggested an issue with the web host or character encoding problems. Rather than spend hours fixing the issue I decided to try <a href="http://simplepie.org/" rel="external">SimplePie</a> instead (something I&#8217;ve been meaning to do for a long time).</p>
<p>The following tutorial will talk you through setting up SimplePie and then parsing your Google Reader shared items atom feed (however, the instructions can easily be adapted for parsing Twitter RSS feeds or pretty much any other RSS/Atom feed).</p>
<p>SimpePie requires the following in order to work correctly:</p>
<h2 class="toppad">Installing SimplePie</h2>
<p>1. <a href="http://simplepie.org/downloads/" rel="external">Download</a> the latest SimplePie zip file from the official site.</p>
<p>2. Create a folder called <code>php</code> and a folder called <code>cache</code> in the root directory of your site.</p>
<p>3. Change file permissions (<a href="http://www.stadtaus.com/en/tutorials/chmod-ftp-file-permissions.php" rel="external">CHMOD</a>) on the <code>cache</code> folder to 777 (755 or 775 may also work depending on your server settings).</p>
<p>4. Unzip the SimplePie file that you downloaded, and upload <code>simplepie.inc</code> to the <code>php</code> folder using FTP. Now you are ready to test your server to check that it is compatible with SimplePie.</p>
<p>5. Create a test page to check that SimplePie is correctly parsing your RSS/Atom feed. Copy and paste the following example page into a text editor and change the <code>require</code> location of the simplepie.inc file to match its location on your server. Also change the <code>$url =</code> location to the URL for the RSS/Atom feed you want to parse. Save the file with a <code>.php</code> file extension and upload to your server.</p>
<pre class="brush: xml;">
&lt;?php
	require '/home/folder/public_html/php/simplepie.inc';

	$url = 'http://www.google.com/reader/public/atom/user%2F13279602483212565421%2Fstate%2Fcom.google%2Fbroadcast';
	$feed = new SimplePie();
	$feed-&gt;set_feed_url($url);
	$feed-&gt;init();

?&gt;&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;en&quot; lang=&quot;en&quot;&gt;
&lt;head&gt;
	&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
	&lt;title&gt;SimplePie Test&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
				&lt;h1&gt;SimplePie Test&lt;/h1&gt;
				&lt;ul&gt;
				&lt;?php
		        	// loop through items
					foreach ($feed-&gt;get_items() as $item):
				?&gt;
					&lt;li&gt;&lt;a href=&quot;&lt;?php echo $item-&gt;get_link(); ?&gt;&quot;&gt;&lt;?php echo $item-&gt;get_title(); ?&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;?php echo $item-&gt;get_date('j F Y'); ?&gt;&lt;br /&gt;&lt;?php echo $item-&gt;get_description(); ?&gt;&lt;/li&gt;
				&lt;?php endforeach; ?&gt;
				&lt;/ul&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>6. Navigate to the URL for the page you just uploaded to your server and you should see your RSS/Atom feed content appear in a rudimentary format. This means it works!</p>
<h2 class="toppad">Parsing Google Reader Shared Items</h2>
<p>When parsing your shared items you may want some extra control over what elements are shown on your page. The following section looks at some simple implementation changes that will allow you to display your feed content in the format you want.</p>
<h3 class="toppad">Control how many feed items are shown</h3>
<p>By adding <code>$start = 0;</code> and <code>$length = 5;</code> to the <code>PHP</code> in the head of your page you will be able to control where SimplePie begins its parsing, and how many items are displayed on your page. To add this extra control your page will look as follows:</p>
<pre class="brush: xml;">
&lt;?php
	require '/home/folder/public_html/php/simplepie.inc';

	$url = 'http://www.google.com/reader/public/atom/user%2F13279602483212565421%2Fstate%2Fcom.google%2Fbroadcast';
	$feed = new SimplePie();
	$feed-&gt;set_feed_url($url);
	$feed-&gt;init();

	$start = 0;
	$length = 5;

?&gt;&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;en&quot; lang=&quot;en&quot;&gt;
&lt;head&gt;
	&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
	&lt;title&gt;SimplePie Test&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
				&lt;h1&gt;SimplePie Test&lt;/h1&gt;
				&lt;ul&gt;
				&lt;?php
		        	// loop through items
					foreach ($feed-&gt;get_items($start,$length) as $item):
				?&gt;
					&lt;li&gt;&lt;a href=&quot;&lt;?php echo $item-&gt;get_link(); ?&gt;&quot;&gt;&lt;?php echo $item-&gt;get_title(); ?&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;?php echo $item-&gt;get_date('j F Y'); ?&gt;&lt;br /&gt;&lt;?php echo $item-&gt;get_description(); ?&gt;&lt;/li&gt;
				&lt;?php endforeach; ?&gt;
				&lt;/ul&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Notice that the PHP loop within the page body has now changed from: <code>foreach ($feed->get_items() as $item):</code> to: <code>foreach ($feed->get_items($start,$length) as $item):</code>.</p>
<p>I have set it to five in the PHP within the page head, which means SimplePie will parse and display the five most recent feed items.</p>
<h3 class="toppad">Truncate long titles</h3>
<p>If you are displaying your parsed feed in a sidebar long titles may wrap across several lines. You can control the length of titles that are displayed and add ellipses (&#8230;) for long titles to avoid wrapping. To truncate long titles your page will look as follows:</p>
<pre class="brush: xml;">
&lt;?php
	require '/home/folder/public_html/php/simplepie.inc';

	$url = 'http://www.google.com/reader/public/atom/user%2F13279602483212565421%2Fstate%2Fcom.google%2Fbroadcast';
	$feed = new SimplePie();
	$feed-&gt;set_feed_url($url);
	$feed-&gt;init();

	$start = 0;
	$length = 5;

?&gt;&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;en&quot; lang=&quot;en&quot;&gt;
&lt;head&gt;
	&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
	&lt;title&gt;SimplePie Test&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
				&lt;h1&gt;SimplePie Test&lt;/h1&gt;
				&lt;ul&gt;
				&lt;?php
		        	// loop through items
					foreach ($feed-&gt;get_items($start,$length) as $item):
				?&gt;
					&lt;li&gt;&lt;a href=&quot;&lt;?php echo $item-&gt;get_link(); ?&gt;&quot;&gt;&lt;?php echo substr($item-&gt;get_title(), 0, 45) . '...'; ?&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;?php echo $item-&gt;get_date('j F Y'); ?&gt;&lt;br /&gt;&lt;?php echo $item-&gt;get_description(); ?&gt;&lt;/li&gt;
				&lt;?php endforeach; ?&gt;
				&lt;/ul&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Within the body the following change has been made: <code>< ?php echo substr($item->get_title(), 0, 45) . '...'; ?></code>. This tells SimplePie to show titles of up to 45 characters (this includes symbols and spaces), and then show ellipses (&#8230;) to show that the title has been truncated.</p>
<h3 class="toppad">Truncate descriptions and exclude elements from display</h3>
<p>You can do the same with the RSS/Atom feed description by adding the following code to the standard PHP echo description statement: <code>< ?php echo substr($item->get_description(), 0, 160) . '...'; ?></code>. This tells SimplePie to display up to 180 characters before truncating the description.</p>
<p>One issue with parsing and displaying the feed description is that images and video boxes will display. This is fine in some situations, but if you want to show your content in a simple form such as in a sidebar, showing this extra content may not be suitable and may break your pages. To deal with these we can specify elements that we don&#8217;t want SimplePie to display in the parsed feed. This is done in the page head with the following statement: <code>$feed->strip_htmltags(array());</code>.</p>
<p>This can be adjusted so that we can exclude certain elements from our parsed feed description, as follows: <code>$feed->strip_htmltags(array('img','embed','center','strong'));</code>. You can easily add and remove elements from the string depending on what you want to exclude from display.</p>
<p>Our final page code will look as follows:</p>
<pre class="brush: xml;">
&lt;?php
	require '/home/folder/public_html/php/simplepie.inc';

	$url = 'http://www.google.com/reader/public/atom/user%2F13279602483212565421%2Fstate%2Fcom.google%2Fbroadcast';
	$feed = new SimplePie();
	$feed-&gt;set_feed_url($url);
	$feed-&gt;init();

	$start = 0;
	$length = 5;
	$feed-&gt;strip_htmltags(array('img','embed','center','strong'));
?&gt;&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;en&quot; lang=&quot;en&quot;&gt;
&lt;head&gt;
	&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
	&lt;title&gt;SimplePie Test&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
				&lt;h1&gt;SimplePie Test&lt;/h1&gt;
				&lt;ul&gt;
				&lt;?php
		        	// loop through items
					foreach ($feed-&gt;get_items($start,$length) as $item):
				?&gt;
					&lt;li&gt;&lt;a href=&quot;&lt;?php echo $item-&gt;get_link(); ?&gt;&quot;&gt;&lt;?php echo substr($item-&gt;get_title(), 0, 45) . '...'; ?&gt;&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;?php echo $item-&gt;get_date('j F Y'); ?&gt;&lt;br /&gt;&lt;?php echo substr($item-&gt;get_description(), 0, 160) . '...'; ?&gt;&lt;/li&gt;
				&lt;?php endforeach; ?&gt;
				&lt;/ul&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>The above code lets you:</p>
<ul>
<li>Show a set amount of feed items</li>
<li>Truncate long feed titles</li>
<li>Show part of the feed description and truncate it past a certain point</li>
<li>Exclude certain elements from the feed description from being displayed</li>
</ul>
<p><hr />
<a href="http://brightscape.net/blog/simplepie-parse-rss-atom-feeds/">SimplePie: Parse RSS/Atom Feeds</a> | Brightscape | Copyright 2006-2009</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/brightscape?a=zveYLwmcX84:79XWfpyBaqE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/brightscape?i=zveYLwmcX84:79XWfpyBaqE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=zveYLwmcX84:79XWfpyBaqE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/brightscape?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=zveYLwmcX84:79XWfpyBaqE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/brightscape?i=zveYLwmcX84:79XWfpyBaqE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=zveYLwmcX84:79XWfpyBaqE:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/brightscape?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/brightscape/~4/zveYLwmcX84" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://brightscape.net/blog/simplepie-parse-rss-atom-feeds/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>JavaScript IE6 PNG Fix</title>
		<link>http://brightscape.net/blog/javascript-ie-6-png-fix/</link>
		<comments>http://brightscape.net/blog/javascript-ie-6-png-fix/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 13:29:44 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Hacks]]></category>
		<category><![CDATA[IE5.5]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[PNG Fix]]></category>

		<guid isPermaLink="false">http://brightscape.net/blog/?p=441</guid>
		<description><![CDATA[In 2009 you&#8217;d think (and hope) that we could completely forget the problems with Internet Explorer 6. One of the issues that has caused me a lot of hassle is IE6s inability to render transparent PNG files [...]<p><hr />
<a href="http://brightscape.net/blog/javascript-ie-6-png-fix/">JavaScript IE6 PNG Fix</a> | Brightscape | Copyright 2006-2009</p>
]]></description>
			<content:encoded><![CDATA[<p>In 2009 you&#8217;d think (and hope) that we could completely forget the problems with Internet Explorer 6. One of the issues that has caused me a lot of hassle is IE6s inability to render transparent PNG files correctly.</p>
<p>There are various ways to deal with IE5.5/IE6s PNG problem. I have tried several different ways of handling this situation &#8211; from using <a href="http://www.twinhelix.com/css/iepngfix/" rel="external">TwinHelix</a> method, right through to serving alternative image content for IE5.5/IE6 via conditional comments and alternative stylesheets.</p>
<p>I&#8217;ve found the problem with the TwinHelix method is page load time is affected quite significantly, then serving alternative content via alternative stylesheets is a time-consuming way to handle this problem.</p>
<p>As I tend to use JavaScript to control various style elements that go above-and-beyond the capabilities of CSS alone, I have decided to use JavaScript to fix PNGs.</p>
<p>The limitation of this solution is that users who disable JavaScript will see the unfixed PNG images on their page if they are using IE5.5/IE6. However, in terms of caching and overall page speed, the small level of users browsing without JavaScript is something that I would balance in favour of a cacheable JavaScript solution to the problem.</p>
<p>I have been using the excellent <a href="http://www.dillerdesign.com/experiment/DD_belatedPNG/" rel="external">DD_belatedPNG fix from Diller Design</a>. All credits go to Diller Design, and to find out more please check out their site.</p>
<p>This easy to use method works in the following way:</p>
<p>1. Download the DD_belatedPNG JavaScript file (Right click > Save As). <a href="http://brightscape.net/downloads/DD_belatedPNG_0.0.8a.js" rel="external">Uncompressed</a> / <a href="http://brightscape.net/downloads/DD_belatedPNG_0.0.8a-min.js" rel="external">Compressed</a>. Check for latest version <a href="http://www.dillerdesign.com/experiment/DD_belatedPNG/#download" rel="external">here</a>.</p>
<p>2. Call the JavaScript file within the head section of your page as follows:</p>
<pre class="brush: xml;">&lt;script src=&quot;http://www.whatever.com/path/to/file/DD_belated_PNG_0.0.8a.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
<p>3. Create a blank JavaScript file in Note Pad or an equivalent text editor and place the following code into the file, then save the file as pngfix.js:</p>
<pre class="brush: xml;">DD_belatedPNG.fix('.png_bg');</pre>
<p>4. In the above code replace .png_bg with any ID or class that you have applied to the image in your HTML code or in your external stylesheet. For example, if you want to apply the fix to your logo, you might give your image the class logo. This would look like the following:</p>
<pre class="brush: xml;">&lt;img src=&quot;http://path/to/image/file/logo.png&quot; width=&quot;100&quot; height=&quot;50&quot; class=&quot;logo&quot; /&gt;</pre>
<p>5. If we carry on the example in step four, you would adjust the pngfix.js file as follows:</p>
<pre class="brush: xml;">DD_belatedPNG.fix('.logo');</pre>
<p>Other classes can be added by separating each class with a comma (I.e. DD_belatedPNG.fix(&#8217;.logo, .icon, img&#8217;);).</p>
<p>6. Now call the pngfix.js file in the head of the page below the DD_belated_PNG_0.0.8a.js file as follows:</p>
<pre class="brush: xml;">&lt;script src=&quot;http://www.whatever.com/path/to/file/pngfix.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
<p>7. In the head of the page you should have the following:</p>
<pre class="brush: xml;">&lt;script src=&quot;http://www.whatever.com/path/to/file/DD_belated_PNG_0.0.8a.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;http://www.whatever.com/path/to/file/pngfix.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
<p>8. Now we want all other browsers to ignore the PNG fix, so we wrap the two JavaScript files in conditional comments as follows:</p>
<pre class="brush: xml;">&lt;!--[if lte IE 6]&gt;
&lt;script src=&quot;http://www.whatever.com/path/to/file/DD_belated_PNG_0.0.8a.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;http://www.whatever.com/path/to/file/pngfix.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;![endif]--&gt; </pre>
<p>Now if you test your page in IE6, you should find transparent PNGs that you have specified in the pngfix.js file are rendered correctly.</p>
<p><hr />
<a href="http://brightscape.net/blog/javascript-ie-6-png-fix/">JavaScript IE6 PNG Fix</a> | Brightscape | Copyright 2006-2009</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/brightscape?a=F4aRKzObxaY:i0wVbTV6wi4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/brightscape?i=F4aRKzObxaY:i0wVbTV6wi4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=F4aRKzObxaY:i0wVbTV6wi4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/brightscape?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=F4aRKzObxaY:i0wVbTV6wi4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/brightscape?i=F4aRKzObxaY:i0wVbTV6wi4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=F4aRKzObxaY:i0wVbTV6wi4:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/brightscape?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/brightscape/~4/F4aRKzObxaY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://brightscape.net/blog/javascript-ie-6-png-fix/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>3 SEO Add-ons for Firefox</title>
		<link>http://brightscape.net/blog/3-seo-add-ons-firefox/</link>
		<comments>http://brightscape.net/blog/3-seo-add-ons-firefox/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 09:53:42 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[Add-on]]></category>
		<category><![CDATA[Extension]]></category>
		<category><![CDATA[Firefox]]></category>

		<guid isPermaLink="false">http://brightscape.net/blog/?p=416</guid>
		<description><![CDATA[Statistics suggest more users are switching away from the well-known traditional browsers such as the various iterations of Internet Explorer, and plumping for Firefox and to a smaller extent Google Chrome.
For power-users, Firefox is almost a given [...]<p><hr />
<a href="http://brightscape.net/blog/3-seo-add-ons-firefox/">3 SEO Add-ons for Firefox</a> | Brightscape | Copyright 2006-2009</p>
]]></description>
			<content:encoded><![CDATA[<p><a rel="external" href="http://www.w3schools.com/browsers/browsers_stats.asp">Statistics</a> suggest more users are switching away from the well-known traditional browsers such as the various iterations of Internet Explorer, and plumping for <a href="http://www.mozilla.com/en-US/" rel="external">Firefox</a> and to a smaller extent Google Chrome.</p>
<p>For power-users, Firefox is almost a given choice due to the huge catalogue of <a rel="external" href="https://addons.mozilla.org/en-US/firefox/">Add-ons available on the Mozilla site</a>. Many of these add-ons can improve workflow, save time and give web developers, SEOs and other professionals the information they need right in the browser sidebar or context menus.</p>
<p>The following list of Firefox add-ons are useful for SEOs and accessibility junkies.</p>
<ul>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/570" rel="external">SEOpen</a><br />SEOpen is a useful add-on which allows you to check Backlinks and Pages Indexed across Google, Yahoo and Bing. There are some additional options for Google, including a PageRank checker, Cached page checker and Related page search feature. SEOpen has several other tools, including a header checker, check robots.txt files, WHOIS lookup and HTML validator. In my opinion, there are other tools that are better or faster at finding certain information so I tend to use SEOpen for purely Backlink checking, HTML validation, and a lazy way to check a robots.txt file for a site.</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/60" rel="external">Web Developer</a><br />The Web Developer toolbar is probably my favourite and most useful tool for SEO, Web Design and accessibility. If you setup Web Developer to run as a bar along the top of your browser you can easily enable/disable JavaScript, view your site devoid of CSS, remove all images and check alt text. This tool is a real time-saver. For SEO purposes it is useful to remove JavaScript then check your code to see that content is not missing. This tool can be used for accessibility purposes to see how navigable your site is with various features disabled (I usually disable images and JavaScript as a basic accessibility check). If you have read earlier posts on Brightscape, you will remember that we used the Web Developer toolbar to check the level of compression for <a href="http://brightscape.net/blog/squeeze-your-css-files-into-shape/">CSS</a>, <a href="http://brightscape.net/blog/compress-javascript-files/">JavaScript</a> files and the use of <a href="http://brightscape.net/blog/compress-your-web-pages-with-mod_deflate/">mod_deflate</a> to compress files.</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/321" rel="external">SearchStatus</a><br />This simple add-on sits in the Firefox status bar and gives details on PageRank. It has various other options including highlighting &#8216;nofollow&#8217; links, keyword density and meta data information. Most options are available by right-clicking on the icon in the status bar &#8211; making this a quick and useful tool. Many of the options in SearchStatus are similar to SEOpen, so some experimentation may highlight a winner over these two extensions (I&#8217;m putting this on my to-do list).</li>
</ul>
<p>In a later post I will look at add-ons that can save web designers time by bringing various tools straight to the browser.</p>
<p><hr />
<a href="http://brightscape.net/blog/3-seo-add-ons-firefox/">3 SEO Add-ons for Firefox</a> | Brightscape | Copyright 2006-2009</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/brightscape?a=FD8HDnHWRIg:8ypmabWgPuI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/brightscape?i=FD8HDnHWRIg:8ypmabWgPuI:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=FD8HDnHWRIg:8ypmabWgPuI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/brightscape?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=FD8HDnHWRIg:8ypmabWgPuI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/brightscape?i=FD8HDnHWRIg:8ypmabWgPuI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=FD8HDnHWRIg:8ypmabWgPuI:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/brightscape?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/brightscape/~4/FD8HDnHWRIg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://brightscape.net/blog/3-seo-add-ons-firefox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Show Shared Google Reader Items on Your Site</title>
		<link>http://brightscape.net/blog/show-shared-google-reader-items-on-your-site/</link>
		<comments>http://brightscape.net/blog/show-shared-google-reader-items-on-your-site/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 16:10:12 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Magpie RSS]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://brightscape.net/blog/?p=238</guid>
		<description><![CDATA[<img src="http://brightscape.net/blog/tmp/2009/07/google-reader_logo.jpg" class="blogimg" width="100" alt="Google Reader logo" title="Google Reader logo" />Google recently launched some updates to Google Reader. This includes the ability to search for users who are sharing items publicly from within Reader. You can also search for keywords to find people who are talking about [...]<p><hr />
<a href="http://brightscape.net/blog/show-shared-google-reader-items-on-your-site/">Show Shared Google Reader Items on Your Site</a> | Brightscape | Copyright 2006-2009</p>
]]></description>
			<content:encoded><![CDATA[<p><img class="blogimg" title="Google Reader logo" src="http://brightscape.net/blog/tmp/2009/07/google-reader_logo.jpg" alt="Google Reader logo" width="136" height="134" />Google recently launched some <a rel="external" href="http://googlereader.blogspot.com/">updates to Google Reader</a>. This includes the ability to search for users who are sharing items publicly from within Reader. You can also search for keywords to find people who are talking about topics of interest to you.</p>
<p>Another addition, is a small icon that you can click to say you liked a particular post. Your name is then shown publicly so that others can see what type of content you are interested in. Google have taken a more social approach to Reader with a few simple additions to what (in my opinion) is probably the best RSS reader around at the moment.</p>
<p>If like me you regularly Share items that you read on Google Reader, you may want to syndicate recent Shared Items on your website. Google provide a simple widget that can be adapted in Google Reader&#8217;s settings page and then cut-and-pasted into your website. However, this widget has limitation in terms of integration into your sites overall design.</p>
<p>Another approach is to parse the Atom feed from your Shared Items page.</p>
<h2>Use Magpie RSS to Parse Your Feed</h2>
<p>1. First you will need to download the latest version of Magpie RSS from <a rel="external" href="http://sourceforge.net/projects/magpierss/files/">here</a>.</p>
<p>2. Unzip Magpie RSS.</p>
<p>3. Download the following <a rel="external" href="http://brightscape.net/downloads/rss_parse.inc.txt">rss_parse.inc.txt</a> file (thanks to <a rel="external" href="http://johnmu.com/google-shared-items-parse/">John Mueller</a>) and save the file as rss_parse.inc (I.e. remove the .txt extension). IMPORTANT: this file replaces the standard rss_parse.inc file that comes with Magpie RSS, so save this file over the rss_parse.inc file in the Magpie RSS folder that you just unzipped.</p>
<p>4. Create a folder for Magpie RSS on your server and upload all the files to this folder. (Remember to upload the adapted rss_parse.inc file from step 4 <em>instead</em> of the rss_parse.inc file  that came with Magpie RSS).</p>
<p>5. Within the main Magpie RSS folder on your server, create a subfolder called &#8216;cache&#8217; and CHMOD the folder to 755 (drwxr-xr-x).</p>
<p>6. Now  add the feed to your webpage. The page needs to be saved with the .php file extension. Add the following code to the top of your page (before your HTML content) and adapt the path to cache folder and path to rss_fetch.inc file.</p>
<pre class="brush: php;">&lt;?php
 // You must include this PHP block in your template once
 // The required settings for Magpie
 define('MAGPIE_CACHE_DIR', '/home/abcxyz/public_html/magpierss/cache');
 define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
 // include the main file
 require_once('/home/abcxyz/public_html/magpierss/rss_fetch.inc');
?&gt;</pre>
<p>7. Now locate the URL for your Google Reader Shared Items page (E.g. <a rel="external" href="http://www.google.com/reader/shared/13279602483212565421">this is mine</a>) and copy your unique number from the URL.</p>
<p>8. Paste your unique number into the code below instead of the asterisks, then copy-and-paste the following code into your page where you want your Shared Items list to be displayed.</p>
<pre class="brush: php;">&lt;h4&gt;Google Reader Shared Items&lt;/h4&gt;
 &lt;ul&gt;
 &lt;?php
 // Settings (modify as required):
 // your Google Reader shared items feed URL
 $sharedfeedurl = 'http://www.google.com/reader/public/atom/user/**********************/state/com.google/broadcast';
 // the (X)HTML page for your Google Reader shared items
 $sharedpageurl = 'http://www.google.com/reader/shared/**********************';
 // maximum number of items displayed
 $maxitems = 10;
 // just in case, some filters
 $htmlfind = array('&quot;', &quot;&lt;&quot;, &quot;&gt;&quot;); // search for these
 $htmlreplace = array(&quot;&amp;quot;&quot;, &quot;&lt;&quot;, &quot;&gt;&quot;); // replace with these
 // This part displays the shared items feed
 $rss = fetch_rss($sharedfeedurl);
 $countitems = 1;
 foreach ($rss-&gt;items as $item ) {
 // get title
 $posttitle = str_replace($htmlfind, $htmlreplace, $item[title]);
 $showtitle = $posttitle;
 // trim the title, if it's too long
 if ( strlen($showtitle) &gt; 50) $showtitle = substr($showtitle, 0, 49) . ' ...';
 $posturl = $item[link];
 $siteurl = $item[&quot;link_&quot;];
 $sitename = $item[&quot;title_&quot;];
 // adjust the output format, if desired (otherwise style via CSS)
 echo '&lt;li&gt;&lt;a title=&quot;' . $posttitle . '&quot; href=&quot;' . $posturl . '&quot; rel=&quot;external&quot;&gt;' . $showtitle . '&lt;/a&gt;';
 echo '&lt;span&gt;';
 echo '&lt;br /&gt; from &lt;a title=&quot;' . $sitename . '&quot; href=&quot;' . $siteurl . '&quot; rel=&quot;external&quot;&gt;' . $sitename . '&lt;/a&gt;';
 echo &quot;&lt;/li&gt;
 &quot;;
 $countitems += 1;
 if ($countitems &gt; $maxitems) break;
 }
 ?&gt;
 &lt;li&gt;&lt;a href=&quot;&lt;?php echo($sharedpageurl);?&gt;&quot; rel=&quot;external&quot;&gt;Read more of my shared items...&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;</pre>
<p>9. Upload your page to your server, and all-being-well, you should see the last 10 items from your Shared Items in a bullet point list.</p>
<h3>Additional Options</h3>
<p>1. You can choose how many posts are shown by adjusting the following line of code in the page content:</p>
<pre class="brush: php;">// maximum number of items displayed
 $maxitems = 10;</pre>
<p>2. Long titles are automatically truncated but  you can change this setting by adjusting the following line of code in the page content:</p>
<pre class="brush: php;">// trim the title, if it's too long
 if ( strlen($showtitle) &gt; 50) $showtitle = substr($showtitle, 0, 49) . ' ...';</pre>
<p><hr />
<a href="http://brightscape.net/blog/show-shared-google-reader-items-on-your-site/">Show Shared Google Reader Items on Your Site</a> | Brightscape | Copyright 2006-2009</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/brightscape?a=U6KVGd8ooss:fLtsTj_TpqQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/brightscape?i=U6KVGd8ooss:fLtsTj_TpqQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=U6KVGd8ooss:fLtsTj_TpqQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/brightscape?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=U6KVGd8ooss:fLtsTj_TpqQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/brightscape?i=U6KVGd8ooss:fLtsTj_TpqQ:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=U6KVGd8ooss:fLtsTj_TpqQ:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/brightscape?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/brightscape/~4/U6KVGd8ooss" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://brightscape.net/blog/show-shared-google-reader-items-on-your-site/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Google Cutting Back</title>
		<link>http://brightscape.net/blog/google-cutting-back/</link>
		<comments>http://brightscape.net/blog/google-cutting-back/#comments</comments>
		<pubDate>Wed, 03 Dec 2008 15:14:12 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Finance]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://brightscape.net/?p=182</guid>
		<description><![CDATA[Google&#8217;s success has climbed almost exponentially with record profits year-on-year as its market share has grown on an unprecedented scale.
Although it looked like the market region occupied by Google could remain recession-proof, it looks like this isn&#8217;t [...]<p><hr />
<a href="http://brightscape.net/blog/google-cutting-back/">Google Cutting Back</a> | Brightscape | Copyright 2006-2009</p>
]]></description>
			<content:encoded><![CDATA[<p>Google&#8217;s success has climbed almost exponentially with record profits year-on-year as its market share has grown on an unprecedented scale.</p>
<p>Although it looked like the market region occupied by Google could remain recession-proof, it looks like this isn&#8217;t necessarily the case. The Wall Street Journal reported on Google tightening its belt.</p>
<blockquote><p>The WSJ stated, &#8220;For much of its 10-year history, Google spent money at a pace that was the marvel of Silicon Valley.&#8221; &#8211; <a rel="external" href="http://online.wsj.com/article/SB122826503489174369.html?mod=testMod">WSJ.com</a></p></blockquote>
<p>Google is well known for its numerous employee perks aimed to keep employees in tip-top condition for coming up with the companies future bright ideas. However, rumours suggest <a rel="external" href="http://valleywag.com/5040986/googles-food-perks-on-the-chopping-block">cut backs</a> in this area look likely.</p>
<p>In the past year, Google have moved out of pure Internet advertising, into the realm of TV advertising and products such as Google Checkout. However, these haven&#8217;t performed as well as expected, with 97% of revenue still coming from online advertising.</p>
<p>Comments from Eric Schmidt, Google CE, suggests that employee cut backs and the dropping of new projects is a precautionary measure rather than an indication of the overall health of the business. He said, &#8220;we have to behave as though we don&#8217;t know what&#8217;s going to happen.&#8221;</p>
<p>Google is looking at generating more growth by putting adverts on products that are presently free to use and have no advertising revenue stream. Google are pulling back in other areas, including finishing the SearchMash project which allows users to view search data in different ways, as well as dropping &#8216;Lively&#8217;. This approach is aimed to put the priority back on Google&#8217;s core search provision.</p>
<p><strong>The Big Three</strong></p>
<p>The fact that this global heavy-weight is feeling the heat of the global recession doesn&#8217;t bode well for traditional businesses like Ford, GMC and Chrysler &#8211; who have been putting forth their cases for US Government bailout funding.</p>
<p>Conditions for the three largest car manufacturers in the US look gloomy, with the <a rel="external" href="http://online.wsj.com/article/SB122823078705672467.html?mod=testMod">WSJ reporting</a> that both GM and Chrysler could collapse by the end of December unless they get billions of dollars in emergency government loans.</p>
<p><strong>Banks Cutting Costs</strong></p>
<p>There are several ways to get in on the action with market volatility. Trading foreign currencies allows retail investors to speculate on fluctuations between currency pairings. The most traded pair being the euro dollar. For corporate institutions there are various solutions to offering <a href="http://www.wallstreetsystems.com/solutions/banks/fx-trading/" rel="external">fx trading solutions</a>, one being an advanced solution specifically designed to meet the needs of major market players, including <a href="http://www.wallstreetsystems.com/solutions/central-banks/" rel="external">central banking software</a> to support large scale institutions with large market capitalizations and liquidity of funds.</p>
<p>Cutting costs in this area is of prime concern for many large banking institutions with the present global crisis biting hard. An advanced solution that can cut costs as well as offer better functionality enables banks to positions themselves more adequately in these difficult financial times.</p>
<p><hr />
<a href="http://brightscape.net/blog/google-cutting-back/">Google Cutting Back</a> | Brightscape | Copyright 2006-2009</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/brightscape?a=CeVTM_g92o0:OnhgwxRoOwQ:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/brightscape?i=CeVTM_g92o0:OnhgwxRoOwQ:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=CeVTM_g92o0:OnhgwxRoOwQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/brightscape?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=CeVTM_g92o0:OnhgwxRoOwQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/brightscape?i=CeVTM_g92o0:OnhgwxRoOwQ:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/brightscape?a=CeVTM_g92o0:OnhgwxRoOwQ:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/brightscape?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/brightscape/~4/CeVTM_g92o0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://brightscape.net/blog/google-cutting-back/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
