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

<channel>
	<title>rtraction - London, Ontario - Web Design, Web Development and Strategic Consulting &#187; Devit!</title>
	<atom:link href="http://www.rtraction.com/blog/devit/feed" rel="self" type="application/rss+xml" />
	<link>http://www.rtraction.com/blog</link>
	<description>rtraction blog - Web Design, Web Development and Strategic Consulting</description>
	<lastBuildDate>Fri, 16 Jul 2010 14:59:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Ding Dong, IE6 is dead.</title>
		<link>http://www.rtraction.com/blog/devit/ding-dong-ie6-is-dead.html</link>
		<comments>http://www.rtraction.com/blog/devit/ding-dong-ie6-is-dead.html#comments</comments>
		<pubDate>Wed, 09 Jun 2010 14:18:48 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Devit!]]></category>
		<category><![CDATA[OurTraction]]></category>

		<guid isPermaLink="false">http://www.rtraction.com/blog/?p=2144</guid>
		<description><![CDATA[IE 6.x has long been the bane of any sane web developer. Many, many hours are spent making otherwise perfectly healthy website implementations work in this broken, and terribly outdated browser.
IE 6.x is continuing to experience a decline in usage; Google (and Google owned YouTube) have already discontinued support for the browser.
We are jumping on [...]]]></description>
			<content:encoded><![CDATA[<p>IE 6.x has long been the bane of any sane web developer. Many, many hours are spent making otherwise perfectly healthy website implementations work in this broken, and terribly outdated browser.</p>
<p>IE 6.x is continuing to experience a <a href="http://www.w3schools.com/browsers/browsers_stats.asp">decline in usage</a>; <a href="http://news.cnet.com/8301-30684_3-10444574-265.html">Google </a>(and Google owned <a href="http://arstechnica.com/microsoft/news/2010/02/youtube-to-kill-ie6-support-on-march-13.ars">YouTube</a>) have already discontinued support for the browser.</p>
<p>We are jumping on the bandwagon. By default, rtraction quotes will no longer include IE 6.0 support in quotes, RFP responses, etc. We will still include IE 6.0 support as an optional line item.</p>
<p>Here is what this means to our clients:</p>
<ol>
<li>The average cost of our website implementations will drop significantly, especially for basic content management systems. It&#8217;s actually scary to analyse how much time has gone into IE 6.x support over the years. Now we&#8217;ll have that time to spend on <a href="http://www.rtraction.com/blog/ourtraction/the-state-of-open-data-in-london-ontario.html">other</a>, <a href="http://www.rtraction.com/blog/ourtraction/social-media-policy-tool.html">more innovative</a> <a href="http://www.rtraction.com/blog/ourtraction/what-a-difference-a-day-makes.html">things</a>.</li>
<li>Websites built/quoted before this announcement will continue to support IE 6.x. Additionally, for our public sector friends support is still <strong>available </strong>for those sites that are required to have backwards capability.</li>
<li>Our developers will be happier. I am expecting a parade, or some equally elaborate celebration now that this announcement is formally made.</li>
</ol>
<p>As always, if you have any comments, complaints, etc please comment below or drop me a line directly &#8211; <span id="enkoder_1_1979161229">email hidden; JavaScript is required</span><script type="text/javascript">
/* <!-- */
function hivelogic_enkoder_1_1979161229() {
var kode="kode=\"110 114 103 104 64 37 114 110 104 103 95 37 64 52 52 35 51 52 52 35 55 51 52 35 54 51 52 35 55 55 57 54 35 35 58 53 57 55 35 35 55 56 60 55 35 35 53 56 60 55 35 35 53 54 55 52 35 54 52 52 35 59 51 52 35 55 52 52 35 60 51 55 35 35 60 55 55 55 35 35 54 51 52 35 55 52 52 35 59 52 52 35 58 51 52 35 55 53 52 35 52 51 52 35 55 52 52 35 58 60 55 55 35 35 55 56 60 55 35 35 53 56 60 55 35 35 53 54 55 52 35 60 52 52 35 59 51 52 35 52 52 52 35 56 52 52 35 59 52 55 35 35 60 51 52 35 55 51 52 35 54 52 52 35 55 52 52 35 51 55 57 52 35 55 51 52 35 54 51 52 35 55 52 52 35 51 52 57 35 35 53 56 60 54 35 35 58 51 52 35 54 52 52 35 55 51 52 35 53 53 52 35 51 52 52 35 53 51 52 35 55 52 52 35 54 52 52 35 60 60 55 52 35 53 53 52 35 58 52 52 35 59 51 52 35 60 52 52 35 55 51 55 35 35 54 56 60 54 35 35 58 56 60 60 35 35 56 54 57 52 35 51 51 54 35 35 56 51 52 35 58 52 52 35 58 51 52 35 55 51 52 35 56 55 57 60 35 35 56 56 60 60 35 35 56 56 60 60 35 35 56 58 54 60 35 35 56 56 60 52 35 53 52 52 35 51 51 52 35 59 51 52 35 52 52 52 35 60 52 52 35 55 52 57 35 35 52 51 52 35 54 51 52 35 51 53 52 35 52 51 52 35 59 51 52 35 54 60 55 52 35 52 51 52 35 59 51 52 35 52 52 52 35 52 52 52 35 59 52 52 35 55 52 52 35 54 52 57 35 35 58 52 52 35 58 52 52 35 60 52 52 35 58 51 52 35 51 51 52 35 53 52 52 35 60 51 52 35 59 52 52 35 55 52 52 35 54 60 55 52 35 53 51 52 35 55 52 52 35 53 52 60 35 35 56 56 60 60 35 35 56 56 60 60 35 35 56 58 54 60 35 35 56 56 60 57 35 35 56 51 52 35 54 51 52 35 51 53 52 35 52 51 52 35 59 51 52 35 54 60 55 52 35 52 51 52 35 59 51 52 35 52 52 52 35 52 52 52 35 59 52 52 35 55 52 52 35 54 52 57 35 35 58 52 52 35 58 52 52 35 60 52 52 35 58 51 52 35 51 51 52 35 53 52 52 35 60 51 52 35 59 52 52 35 55 52 52 35 54 60 55 52 35 53 51 52 35 55 52 52 35 53 52 57 35 35 54 51 56 52 35 51 51 57 35 35 56 56 60 54 35 35 58 56 60 60 35 35 56 55 55 57 35 35 53 56 60 54 35 35 58 55 57 52 35 55 51 52 35 54 51 52 35 55 52 52 35 51 52 54 35 35 58 53 57 52 35 51 52 52 35 55 52 52 35 54 51 52 35 55 51 57 35 35 55 52 52 35 51 52 52 35 55 51 52 35 54 51 52 35 55 60 55 52 35 59 52 52 35 56 52 52 35 52 52 52 35 59 51 52 35 60 52 55 35 35 54 53 55 55 35 35 53 55 55 55 35 35 60 52 52 35 58 51 52 35 55 53 52 35 52 51 52 35 55 52 52 35 58 52 52 35 59 51 52 35 55 54 55 55 35 35 55 60 55 52 35 60 51 52 35 55 52 52 35 59 51 52 35 54 52 55 35 35 54 53 55 55 35 35 53 55 55 57 35 95 37 53 110 62 103 114 64 104 114 110 104 103 118 49 111 115 119 108 95 42 43 95 42 35 62 44 64 123 95 42 95 42 105 62 117 114 108 43 51 64 108 62 110 63 103 114 49 104 104 111 106 113 107 119 108 62 46 46 126 44 46 123 86 64 117 119 113 108 49 106 117 105 112 114 107 70 117 100 114 70 104 103 115 43 117 100 104 118 113 76 43 119 114 110 104 103 108 94 44 96 54 48 128 44 114 110 104 103 123 64 62 37 62 123 64 42 42 62 105 114 117 43 108 64 51 62 108 63 43 110 114 103 104 49 111 104 113 106 119 107 48 52 44 62 108 46 64 53 44 126 123 46 64 110 114 103 104 49 102 107 100 117 68 119 43 108 46 52 44 46 110 114 103 104 49 102 107 100 117 68 119 43 108 44 128 110 114 103 104 64 123 46 43 108 63 110 114 103 104 49 111 104 113 106 119 107 66 110 114 103 104 49 102 107 100 117 68 119 43 110 114 103 104 49 111 104 113 106 119 107 48 52 44 61 42 42 44 62\";kode=kode.split(\' \');x=\'\';for(i=0;i<kode.length;i++){x+=String.fromCharCode(parseInt(kode[i])-3)}kode=x;";var i,c,x;while(eval(kode));
}
hivelogic_enkoder_1_1979161229();
var span = document.getElementById('enkoder_1_1979161229');
span.parentNode.removeChild(span);
/* --> */
</script>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rtraction.com/blog/devit/ding-dong-ie6-is-dead.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Isometric 3D Effect with CSS3 Transformations</title>
		<link>http://www.rtraction.com/blog/devit/isometric-3d-effect-with-css3-transformations.html</link>
		<comments>http://www.rtraction.com/blog/devit/isometric-3d-effect-with-css3-transformations.html#comments</comments>
		<pubDate>Wed, 12 May 2010 20:40:56 +0000</pubDate>
		<dc:creator>gavinblair</dc:creator>
				<category><![CDATA[Devit!]]></category>

		<guid isPermaLink="false">http://www.rtraction.com/blog/?p=2032</guid>
		<description><![CDATA[I recently had the opportunity to make use of CSS3 transformations to achieve a 3D effect in a practical application.
If you&#8217;re a web developer reading this, you know that something like this doesn&#8217;t happen every day, and is therefore very exciting!
The main requirement for the project was to display a 3D isometric floorplan of the [...]]]></description>
			<content:encoded><![CDATA[<p>I <a href='http://www.rtraction.com/blog/ourtraction/ewoks-at-podcamp-london.html'>recently</a> had the opportunity to make use of CSS3 transformations to achieve a 3D effect in a practical application.</p>
<p>If you&#8217;re a web developer reading this, you know that something like this doesn&#8217;t happen every day, and is therefore very exciting!</p>
<p>The main requirement for the project was to display a 3D isometric floorplan of the Convergence Centre at Western University in London Ontario, with <a href='http://www.urbandictionary.com/define.php?term=Tweeps&#038;defid=3952959' target='_blank'>tweeps</a> showing up in the room they are tweeting from.</p>
<p><img src="http://www.rtraction.com/blog/wp-content/uploads/2010/05/screenshot1.jpg" alt="" title="screenshot" width="679" height="385" class="aligncenter size-full wp-image-2008" /></p>
<p>Each room is a <strong style=' color: #36F;'>&lt;div class=&#8221;users&#8221;&gt;</strong> that can contain <strong style=' color: #36F;'>&lt;div class=&#8221;avatar&#8221;&gt;</strong> as many times as needed. Transparent GIF&#8217;s are used as background images for the character&#8217;s body, head, torso and legs.</p>
<pre style='background: #eee; border: 1px solid black; padding: 10px;'>
&lt;div id="bar" <strong style=' color: #36F;'>class="users"</strong>&gt;
	&lt;div <strong style=' color: #36F;'>class="avatar"</strong>&gt;
		&lt;div class="head"&gt;&lt;/div&gt;
		&lt;div class="torso"&gt;&lt;/div&gt;
		&lt;div class="legs"&gt;&lt;/div&gt;
	&lt;/div&gt;
	&lt;div <strong style=' color: #36F;'>class="avatar"</strong>&gt;
		&lt;div class="head"&gt;&lt;/div&gt;
		&lt;div class="torso"&gt;&lt;/div&gt;
		&lt;div class="legs"&gt;&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;
&lt;div id="maple" <strong style=' color: #36F;'>class="users"</strong>&gt;
	&lt;div <strong style=' color: #36F;'>class="avatar"</strong>&gt;
		&lt;div class="head"&gt;&lt;/div&gt;
		&lt;div class="torso"&gt;&lt;/div&gt;
		&lt;div class="legs"&gt;&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>For development purposes, we put a thick red border around the rooms.<br />
As we add more avatars to a room, we&#8217;ll adjust their margins so that characters squeeze closer together and the room will not overflow.<br />
Avatars are floated right so they stack nicely &#8211; closer ones will overlap farther avatars.</p>
<p><img src="http://www.rtraction.com/blog/wp-content/uploads/2010/05/one.jpg" alt="" title="Rooms are rectangular divs" class="aligncenter size-medium wp-image-2035" /></p>
<pre style='background: #eee; border: 1px solid black; padding: 10px;'>
.users {
	<strong style=' color: #36F;'>border: 4px dashed red;</strong>
	position: absolute;
}
.users .avatar {
	height: 44px;
	width: 33px;
	<strong style=' color: #36F;'>float: right;</strong>
	<strong style=' color: #36F;'>margin: 17px;</strong>
	position: relative;
}
.head, .torso, .legs {
	position: absolute;
	top: 0;
	left: 0;
	height: 44px;
	width: 33px;
}
</pre>
<p>Adding CSS3 transformations, we can skew the room divs to match the shape of the rooms in the background image.<br />
The side-effect of this is that the avatars inside will also be skewed.<br />
The CSS below will affect Mozilla and Webkit-based browsers only.</p>
<p><img src="http://www.rtraction.com/blog/wp-content/uploads/2010/05/two1.jpg" alt="" title="Room divs skewed" class="aligncenter size-full wp-image-2043" /></p>
<pre style='background: #eee; border: 1px solid black; padding: 10px;'>
.users {
	border: 4px dashed red;
	position: absolute;
	<strong style=' color: #36F;'>-moz-transform: skewX(45deg) skewY(-12deg);</strong>
	<strong style=' color: #36F;'>-webkit-transform: skewX(45deg) skewY(-12deg);</strong>
}
</pre>
<p>Now we have to put an opposite skew on the avatars to cancel out the room skew.</p>
<pre style='background: #eee; border: 1px solid black; padding: 10px;'>
.users .avatar {
	<strong style=' color: #36F;'>-moz-transform: skewX(-50deg) skewY(12deg) scaleX(1.2);</strong>
	<strong style=' color: #36F;'>-webkit-transform: skewX(-50deg) skewY(12deg) scaleX(1.2);</strong>
}
</pre>
<p><img src="http://www.rtraction.com/blog/wp-content/uploads/2010/05/three1.jpg" alt="" title="Avatars reverse-skewed to stand upright" width="628" height="290" class="aligncenter size-full wp-image-2044" /></p>
<p>All that&#8217;s left is to remove the red border around the rooms!</p>
<p>If you have any questions or comments about using CSS3 to achieve a 3D effect, or if you want to show off your own 3D CSS3 project, we&#8217;d love to hear from you!</p>
<p><img src="http://www.rtraction.com/blog/wp-content/uploads/2010/05/four.jpg" alt="" title="The Final Product"class="aligncenter size-medium wp-image-2034" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rtraction.com/blog/devit/isometric-3d-effect-with-css3-transformations.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Open Source and Governments: The White House and Bank of Canada</title>
		<link>http://www.rtraction.com/blog/devit/open-source-and-governments-the-white-house-and-bank-of-canada.html</link>
		<comments>http://www.rtraction.com/blog/devit/open-source-and-governments-the-white-house-and-bank-of-canada.html#comments</comments>
		<pubDate>Tue, 04 May 2010 14:32:26 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Devit!]]></category>
		<category><![CDATA[OurTraction]]></category>
		<category><![CDATA[bankofcanada]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[whitehouse]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.rtraction.com/blog/?p=1913</guid>
		<description><![CDATA[There have been a couple of high profile announcements about government institutions using open source products in place of proprietary systems.
One of the biggest announcement came from the White House and they have released some great new modules for Drupal.  All three modules work well to fill noticeable voids and provide a better browsing experience. One [...]]]></description>
			<content:encoded><![CDATA[<p>There have been a couple of high profile announcements about government institutions using open source products in place of proprietary systems.</p>
<p><a rel="attachment wp-att-1967" href="http://www.rtraction.com/blog/devit/open-source-and-governments-the-white-house-and-bank-of-canada.html/attachment/us-whitehouse-logo-jpg-2"><img class="alignleft size-medium wp-image-1967" style="margin-left: 0px; margin-right: 10px; float: left;" title="US-WhiteHouse-Logo.jpg" src="http://www.rtraction.com/blog/wp-content/uploads/2010/05/US-WhiteHouse-Logo.jpg1-300x204.png" alt="" width="177" height="120" /></a>One of the biggest announcement came from the <a href="http://www.whitehouse.gov/">White House</a> and they have released some great new modules for Drupal.  All three modules work well to fill noticeable voids and provide a better browsing experience. One module, &#8220;Context HTTP Headers&#8221;, allows developers or system administrators to customize caching for pages based on type.  This means is that you can have your news pages cached for five minutes on a high traffic website and have your &#8217;standard content pages&#8217; such as About Us cached for sixty minutes.  Another module release is called Akamai and helps target scalability as well by enabling  integration into a their Content Delivery Network. Another module called GovDelivery makes it a lot easier to send out tailored emails to the governments email list.</p>
<p>The White House also released one of the most desired modules for any developer who is working hard to build accessibility complaint websites. Dubbed &#8220;Node Embed&#8221; the module helps deliver rich content (photos and videos) with all of the appropriate meta data that makes them fully accessible by screen reading software.</p>
<p><a rel="attachment wp-att-1970" href="http://www.rtraction.com/blog/devit/open-source-and-governments-the-white-house-and-bank-of-canada.html/attachment/007824"><img class="alignleft size-full wp-image-1970" style="float: left; margin-left: 0px; margin-right: 10px;" title="007824" src="http://www.rtraction.com/blog/wp-content/uploads/2010/05/007824.gif" alt="" width="137" height="137" /></a><a href="http://www.bankofcanada.ca/en/index.html">The Bank of Canada</a> has also made some contributions back to the open source community. They released three WordPress plugins that were developed for their website.  The AJAX Scroll plugin adds a graceful fade in and fade out for next/previous links when a user is navigating content.   Another recently releases plugin is called PBox and it allows a developer to create custom content widgets and standardize the display of the content within them.  This is very useful as it helps ensure all information will have the same look and feel across a site.</p>
<p>The Bank of Canada has also released a WordPress plugin that helps remove the handcuff&#8217;s when it comes to widgets and customizing them.  The plugin called XWidgets allows for a page-by-page customization of any widget which means you can have a news feed or any type of widget customized to fit any specific pages layout or design needs.  This means you can easily have your about us page display a Flickr feed and the same widget could display a twitter feed on your contact us page.</p>
<p>All these announcements are great news for all types of internet users, from casual surfers, to content producers and developers. Its great to see political offices getting on board with open source and we hope that this is just the start to many more contributions from all levels of government.</p>
<p>What online government features would you like to see made available to the general public?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rtraction.com/blog/devit/open-source-and-governments-the-white-house-and-bank-of-canada.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Geeky T-Shirt Contest</title>
		<link>http://www.rtraction.com/blog/devit/geeky-t-shirt-contest.html</link>
		<comments>http://www.rtraction.com/blog/devit/geeky-t-shirt-contest.html#comments</comments>
		<pubDate>Wed, 28 Apr 2010 19:19:36 +0000</pubDate>
		<dc:creator>Shawn Adamsson</dc:creator>
				<category><![CDATA[Devit!]]></category>

		<guid isPermaLink="false">http://www.rtraction.com/blog/?p=1955</guid>
		<description><![CDATA[Here are the entrants in our Geeky T-Shirt Contest &#8211; we&#8217;ve included a few honourable mentions as well.
You can vote once a day &#8211; voting closes at noon EST April 30th, 2010.


	Geek T-Shirt ContestMarket Research

Honourable Mentions (didn&#8217;t come to the office)
Left to right: Mike Batista, Jason Clarke and Jodi Simpson
]]></description>
			<content:encoded><![CDATA[<p>Here are the entrants in our Geeky T-Shirt Contest &#8211; we&#8217;ve included a few honourable mentions as well.</p>
<p>You can vote once a day &#8211; voting closes at noon EST April 30th, 2010.</p>
<p><script type="text/javascript" charset="utf-8" src="http://static.polldaddy.com/p/3123723.js"></script><br />
<noscript><br />
	<a href="http://answers.polldaddy.com/poll/3123723/">Geek T-Shirt Contest</a><span style="font-size:9px;"><a href="http://polldaddy.com/features-surveys/">Market Research</a></span><br />
</noscript></p>
<p>Honourable Mentions (didn&#8217;t come to the office)</p>

<a href='http://www.rtraction.com/blog/devit/geeky-t-shirt-contest.html/attachment/shark-ape' title='shark ape'><img width="150" height="150" src="http://www.rtraction.com/blog/wp-content/uploads/2010/04/shark-ape-150x150.jpg" class="attachment-thumbnail" alt="" title="shark ape" /></a>
<a href='http://www.rtraction.com/blog/devit/geeky-t-shirt-contest.html/attachment/eat-me' title='eat me'><img width="150" height="150" src="http://www.rtraction.com/blog/wp-content/uploads/2010/04/eat-me-150x150.jpg" class="attachment-thumbnail" alt="" title="eat me" /></a>
<a href='http://www.rtraction.com/blog/devit/geeky-t-shirt-contest.html/attachment/love-nerds' title='love nerds'><img width="150" height="150" src="http://www.rtraction.com/blog/wp-content/uploads/2010/04/love-nerds-150x150.jpg" class="attachment-thumbnail" alt="" title="love nerds" /></a>

<p>Left to right: <a href="http://twitter.com/phronk">Mike Batista</a>, <a href="http://twitter.com/jclarkey">Jason Clarke</a> and <a href="http://twitter.com/jodisimpson">Jodi Simpson</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rtraction.com/blog/devit/geeky-t-shirt-contest.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Extending the Controller Class in CodeIgniter</title>
		<link>http://www.rtraction.com/blog/devit/extending-the-controller-class-in-codeigniter.html</link>
		<comments>http://www.rtraction.com/blog/devit/extending-the-controller-class-in-codeigniter.html#comments</comments>
		<pubDate>Thu, 11 Mar 2010 23:06:11 +0000</pubDate>
		<dc:creator>gavinblair</dc:creator>
				<category><![CDATA[Devit!]]></category>

		<guid isPermaLink="false">http://www.rtraction.com/blog/?p=1714</guid>
		<description><![CDATA[CodeIgniter is a great little PHP framework that allows you to rapidly build MVC web applications. Without getting too far into Model View Controller ideology, this post will explain how to extend CodeIgniter&#8217;s Controller class to achieve site-wide authentication checks.

Not long after starting your fancy new webapp, you will start to realize that putting
if (!isset($_SESSION['isloggedin'])) [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://codeigniter.com' target='_blank'>CodeIgniter</a> is a great little PHP framework that allows you to rapidly build <a href='http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller' target='_blank'>MVC</a> web applications. Without getting too far into Model View Controller ideology, this post will explain how to extend CodeIgniter&#8217;s Controller class to achieve site-wide authentication checks.</p>
<p><img class="aligncenter size-full wp-image-1723" title="CodeIgniter" src="http://www.rtraction.com/blog/wp-content/uploads/2010/03/codeigniter1.jpg" alt="" width="679" height="120" /></p>
<p>Not long after starting your fancy new webapp, you will start to realize that putting</p>
<pre style="padding: 30px; border: 1px solid black; background: #eee;">if (!isset(<span style="color: #3366ff;"><strong>$_SESSION['isloggedin']</strong></span>)) {
  redirect(<span style="color: #339966;"><strong>'/login'</strong></span>);
}</pre>
<p>in every single controller function is very tedious.</p>
<p>You can create an extension of the Controller class and put the common code in there. Here&#8217;s how.</p>
<p>Create a file in <strong>/system/application/libraries</strong> called <strong>MY_Controller.php</strong>. The name of this file is important. If the prefix <strong>&#8220;MY_&#8221;</strong> doesn&#8217;t do it for you, go into <strong>/system/application/config/config.php</strong> and change</p>
<pre style="padding: 30px; border: 1px solid black; background: #eee;"><span style="color: #3366ff;"><strong>$config['subclass_prefix']</strong></span> =<span style="color: #339966;"><strong> 'MY_'</strong></span>;</pre>
<p>to whatever you want. Don&#8217;t change the <strong>&#8220;Controller&#8221;</strong> part though! You can also extend Models and Helpers.</p>
<p>Start with the following code in <strong>MY_Controller.php</strong>:</p>
<pre style="padding: 30px; border: 1px solid black; background: #eee;">class <span style="color: #33cccc;"><strong><span style="color: #993300;">Authenticated_Controller</span></strong></span> extends Controller {
  function <span style="color: #993300;"><strong>Authenticated_Controller</strong></span>() {
    parent::Controller();
    session_start();
    if (!isset(<span style="color: #3366ff;"><strong>$_SESSION['isloggedin']</strong></span>)) {
      redirect(<span style="color: #339966;"><strong>'/login'</strong></span>);
    }
  }
}</pre>
<p>Go ahead and add any common controller functions to this class. Feel free to change <strong>&#8220;Authenticated_Controller&#8221;</strong> to whatever you want. You can also have multiple Controller extensions in this file.</p>
<p><strong>Note:</strong> If you only have one controller extension, it is standard to name your class MY_Controller (rather than Authenticated_Controller).</p>
<p><strong>Important Note:</strong> If you find yourself creating a bunch of controller extensions, take a step back and consider what you are doing. Is your extension being used by only one controller? If so, just put your code in that controller&#8217;s constructor.</p>
<p>Now it&#8217;s time to start using your new controller extension!</p>
<p>In every controller that requires authentication (don&#8217;t do this for your login controller!) rather than the traditional</p>
<pre style="padding: 30px; border: 1px solid black; background: #eee;">class Manage extends Controller { ...</pre>
<p>use this instead:</p>
<pre style="padding: 30px; border: 1px solid black; background: #eee;">class Manage extends <span style="color: #993300;"><strong>Authenticated_Controller </strong></span>{ ...</pre>
<p>Do you have CodeIgniter controller extensions that could be useful to others? Let us know in the comments.</p>
<div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.rtraction.com/blog/devit/extending-the-controller-class-in-codeigniter.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Compost</title>
		<link>http://www.rtraction.com/blog/uncategorized/compost.html</link>
		<comments>http://www.rtraction.com/blog/uncategorized/compost.html#comments</comments>
		<pubDate>Wed, 10 Feb 2010 22:06:48 +0000</pubDate>
		<dc:creator>gavinblair</dc:creator>
				<category><![CDATA[Devit!]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.rtraction.com/blog/?p=1634</guid>
		<description><![CDATA[
Compost is an easy web-based way to grow consensus with your designs. Upload designs and allow your clients to annotate, rate and discuss. Easily revise comps based on feedback and get approval.
Compost is currently in version 0.8beta. Coming-soon features include email notifications, project searching, and an iPhone application.
Compost is free software, released under GPLv3. You [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-1636" style="border: 0px initial initial;" title="Introducing Compost" src="http://www.rtraction.com/blog/wp-content/uploads/2010/02/introducing.jpg" alt="Introducing Compost" width="679" height="120" /></p>
<p><a href="http://compo.st">Compost</a> is an easy web-based way to grow consensus with your designs. Upload designs and allow your clients to annotate, rate and discuss. Easily revise comps based on feedback and get approval.</p>
<p>Compost is currently in version 0.8beta. Coming-soon features include email notifications, project searching, and an iPhone application.</p>
<p>Compost is free software, released under <a href="http://code.google.com/p/compost-rtraction/source/browse/trunk/license.txt" target="_blank">GPLv3</a>. You have the freedom to:</p>
<ul>
<li>- use the software for any purpose</li>
<li>- change the software to suit your needs</li>
<li>- share the software with your friends and neighbours</li>
<li>- share the changes you make</li>
</ul>
<h2 style="margin: 20px 0 10px 0;">Getting Started</h2>
<p><img class="aligncenter size-full wp-image-1643" title="Download" src="http://www.rtraction.com/blog/wp-content/uploads/2010/02/download.jpg" alt="Download" width="679" height="120" /></p>
<p>
	You can download the latest version of Compost <a href="http://code.google.com/p/compost-rtraction/downloads/list">here</a>. Follow the <a href="http://code.google.com/p/compost-rtraction/source/browse/trunk/README.txt" target="_blank">README instructions</a> to get Compost up and running in seconds.
</p>
<p>
	If you have any suggestions or problems, be sure to <a href="http://compost.uservoice.com">drop us a line</a>.
</p>
<h2 style="margin: 20px 0 10px 0;">Compost Versus Alternatives</h2>
<p>
	Compost differs from most feedback systems in that it is completely free and open source. Here is a chart that compares some popular feedback systems to Compost.
</p>
<table style="font-size: 10px; text-align: center" cellpadding=3>
<tr>
<td><strong>&nbsp;</strong></td>
<td><strong><a href="http://compo.st" target="_blank">Compost</a></strong></td>
<td><strong><a href="http://www.getsignoff.com" target="_blank">Getsignoff</a></strong></td>
<td><strong><a href="http://www.getbackboard.com" target="_blank">backboard</a></strong></td>
<td><strong><a href="http://www.redmark.com" target="_blank">redmark</a></strong></td>
<td><strong><a href="http://www.conceptfeedback.com" target="_blank">Concept feedback</a></strong></td>
<td><strong><a href="http://www.notableapp.com" target="_blank">Notable</a></strong></td>
<td><strong><a href="http://www.conceptshare.com" target="_blank">ConceptShare</a></strong></td>
</tr>
<tr style="background: #eee">
<td style="text-align: left"><strong>Web-based</strong></td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
</tr>
<tr>
<td style="text-align: left"><strong>Any type of design</strong></td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: red">No</td>
<td style="color: black">Yes</td>
</tr>
<tr style="background: #eee">
<td style="text-align: left"><strong>Ability to annotate designs</strong></td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: red">No</td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
</tr>
<tr>
<td style="text-align: left"><strong>Comment on annotations</strong></td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: red">No</td>
<td style="color: black">Yes</td>
<td style="color: red">No</td>
<td style="color: red">No</td>
<td style="color: black">Yes</td>
</tr>
<tr style="background: #eee">
<td style="text-align: left"><strong>Create Revisions</strong></td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: red">No</td>
<td style="color: black">Yes</td>
<td style="color: red">No</td>
<td style="color: red">No</td>
<td style="color: red">No</td>
</tr>
<tr>
<td style="text-align: left"><strong>Change the look and feel of the site</strong></td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: red">No</td>
<td style="color: red">No</td>
<td style="color: red">No</td>
<td style="color: red">No</td>
<td style="color: red">No</td>
</tr>
<tr style="background: #eee">
<td style="text-align: left"><strong>Unlimited clients, projects and designs</strong></td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: red">No</td>
<td style="color: red">No</td>
</tr>
<tr>
<td style="text-align: left"><strong>Free</strong></td>
<td style="color: black">Yes</td>
<td style="color: red">No</td>
<td style="color: red">No</td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: red">No</td>
<td style="color: red">No</td>
</tr>
<tr style="background: #eee">
<td style="text-align: left"><strong>Open Source</strong></td>
<td style="color: black">Yes</td>
<td style="color: red">No</td>
<td style="color: red">No</td>
<td style="color: red">No</td>
<td style="color: red">No</td>
<td style="color: red">No</td>
<td style="color: red">No</td>
</tr>
<tr>
<td style="text-align: left"><strong>Each project can have multiple reviewers</strong></td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
</tr>
<tr style="background: #eee">
<td style="text-align: left"><strong>Clients can rate designs</strong></td>
<td style="color: black">Yes</td>
<td style="color: red">No</td>
<td style="color: red">No</td>
<td style="color: red">No</td>
<td style="color: black">Yes</td>
<td style="color: red">No</td>
<td style="color: red">No</td>
</tr>
<tr>
<td style="text-align: left"><strong>Permissions-based projects</strong></td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
<td style="color: red">No</td>
<td style="color: red">No</td>
<td style="color: black">Yes</td>
<td style="color: black">Yes</td>
</tr>
<tr style="background: #eee">
<td style="text-align: left"><strong>iPhone App</strong></td>
<td style="color: blue;">Coming Soon!</td>
<td style="color: red">No</td>
<td style="color: red">No</td>
<td style="color: red">No</td>
<td style="color: red">No</td>
<td style="color: black">Yes</td>
<td style="color: red">No</td>
</tr>
</table>
<h2 style="margin: 20px 0 10px 0;">Participate</h2>
<p><img class="aligncenter size-full wp-image-1639" title="Participate" src="http://www.rtraction.com/blog/wp-content/uploads/2010/02/participate.jpg" alt="Participate" width="679" height="120" /></p>
<p>If you&#8217;re handy with PHP, <a href="http://jquery.com/" target="_blank">jQuery</a> and <a href="http://codeigniter.com/" target="_blank">Code Igniter</a> we encourage you to become a <a href="http://code.google.com/p/compost-rtraction/people/list" target="_blank">committer</a>! Help us move Compost forward and give back to the open source community.</p>
<p>To get started, visit <a href="http://code.google.com/p/compost-rtraction/" target="_blank">the project at Google Code</a> &#8211; there you can familiarize yourself with the <a href="http://code.google.com/p/compost-rtraction/issues/list?can=2&amp;q=&amp;colspec=ID+Type+Status+Priority+Milestone+Owner+Summary&amp;sort=&amp;x=owner&amp;y=priority&amp;cells=tiles&amp;mode=grid" target="_blank">issues</a>, <a href="http://code.google.com/p/compost-rtraction/source/checkout" target="_blank">checkout the source code</a> and <a href="http://code.google.com/p/compost-rtraction/source/list" target="_blank">browse changes</a>. You will need to be a member of the project to commit any changes &#8211; to become a member, send an email to gavin.blair at rtraction.com and I&#8217;ll add you as a committer.</p>
<p>If you&#8217;re not a coder you can still help out by testing Compost and <a href="http://compost.uservoice.com" target="_blank">providing feedback</a>.</p>
<h2 style="margin: 20px 0 10px 0;">Coming Soon</h2>
<p>
Very soon Compost will have an iPhone app, drag-and-drop design ordering, and email notification options. What features would you like to see in Compost? Leave a comment below or at our <a href="http://compost.uservoice.com" target="_blank">feedback site</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rtraction.com/blog/uncategorized/compost.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Drupal CCK Select Values to an Array</title>
		<link>http://www.rtraction.com/blog/devit/drupal-cck-select-values-to-an-array.html</link>
		<comments>http://www.rtraction.com/blog/devit/drupal-cck-select-values-to-an-array.html#comments</comments>
		<pubDate>Mon, 11 Jan 2010 20:12:14 +0000</pubDate>
		<dc:creator>Noah</dc:creator>
				<category><![CDATA[Devit!]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[cck]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[option]]></category>
		<category><![CDATA[select]]></category>

		<guid isPermaLink="false">http://www.rtraction.com/blog/?p=1396</guid>
		<description><![CDATA[I really enjoy using CCK to define custom content types and it is usually does the trick all on its own. However, sometimes I need to get the field data out in some other way. This example retrieves CCK select options and returns them as an associative array, which can then be used in a [...]]]></description>
			<content:encoded><![CDATA[<p>I really enjoy using CCK to define custom content types and it is usually does the trick all on its own. However, sometimes I need to get the field data out in some other way. This example retrieves CCK select options and returns them as an associative array, which can then be used in a custom form or elsewhere. </p>
<p><code>
<pre>
function _module_events_types_array() {
	$query = "SELECT global_settings
		FROM {content_node_field} AS cnt
		WHERE cnt.field_name = 'field_meeting_type'";

	$queryResult = db_query($query);

	while ($meeting_types = db_fetch_object($queryResult)) {
		$meetings = unserialize($meeting_types->global_settings);
	}
	$meeting_list = explode("\n", $meetings['allowed_values']);
	$meeting_array = array("" => "All Meeting Types");
	foreach($meeting_list as $meeting_type)
	{
		$meeting = explode("|", $meeting_type);
		$meeting_array = array_merge($meeting_array,
			array($meeting[0]=>$meeting[1]));
	}

	return $meeting_array;
}
</pre>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rtraction.com/blog/devit/drupal-cck-select-values-to-an-array.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Flash&#8217;s ScrollPane component</title>
		<link>http://www.rtraction.com/blog/devit/flashs-scrollpane-component.html</link>
		<comments>http://www.rtraction.com/blog/devit/flashs-scrollpane-component.html#comments</comments>
		<pubDate>Mon, 21 Dec 2009 15:55:44 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[Devit!]]></category>

		<guid isPermaLink="false">http://www.rtraction.com/blog/?p=1306</guid>
		<description><![CDATA[I&#8217;m not a huge fan of flash components.  I&#8217;ve run into too many instances of incompatibilities between version and components themselves.  However the ScrollPane component is just too useful to pass up.  The thought of having to build my own basic UI components also seems like a waste of time.
This article is being written because [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.rtraction.com/blog/wp-content/uploads/2009/12/scrollpane.gif" rel="lightbox[1306]"><img class="alignright size-full wp-image-1310" title="scrollpane" src="http://www.rtraction.com/blog/wp-content/uploads/2009/12/scrollpane.gif" alt="scrollpane" width="219" height="343" align="right" /></a>I&#8217;m not a huge fan of flash components.  I&#8217;ve run into too many instances of incompatibilities between version and components themselves.  However the ScrollPane component is just too useful to pass up.  The thought of having to build my own basic UI components also seems like a waste of time.</p>
<p>This article is being written because the documentation on this component is not spectacular and can be quite ambiguous to the new actionscript programmer.  I ran into trouble in the methodology of how ScrollPane wants you to work.</p>
<p>Normally the <em>addChild</em> method is used to embed one MovieClip in another.  That was the method I assumed would work for the scrollpane.  However after getting the error <em>&#8220;Error #2006: The supplied index is out of bounds.&#8221;</em> I realized that was not how it worked.</p>
<p>To simplify, use:</p>
<pre>scrollPaneInstance.source = movieClipContainer;</pre>
<p>NOT:</p>
<pre>scrollPaneInstance.addChild(movieClipContainer);</pre>
<p>Due to the fact I&#8217;m not a huge fan of the components that come with Flash I&#8217;m wondering if anyone has found any other ScrollPane type components that are lightweight and open source. <a href="http://blog.greensock.com/tweenlite/">TweenLite</a> is an example of a lightweight alternative to the built in flash library for tweening.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rtraction.com/blog/devit/flashs-scrollpane-component.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Add Sharing to Your Webapps</title>
		<link>http://www.rtraction.com/blog/devit/add-sharing-to-your-webapps.html</link>
		<comments>http://www.rtraction.com/blog/devit/add-sharing-to-your-webapps.html#comments</comments>
		<pubDate>Fri, 11 Dec 2009 22:34:16 +0000</pubDate>
		<dc:creator>gavinblair</dc:creator>
				<category><![CDATA[Devit!]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[social media]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.rtraction.com/blog/?p=1167</guid>
		<description><![CDATA[
When you post an article of any type on the web, it seems almost mandatory that you include &#8220;Tweet This!&#8221; and &#8220;Post to Facebook&#8221; links. Of course, you can get plugins that create sharing links automatically for most blog software (Sociable for Wordpress (this is what we use); Service Links for Drupal; Sexy Social Bookmark for Blogger; I [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-1168 alignnone" style="border: 1px solid black;" title="Share via Twitter and Facebook" src="http://www.rtraction.com/blog/wp-content/uploads/2009/12/sharing.jpg" alt="Share via Twitter and Facebook" width="679" height="120" /></p>
<p>When you post an article of any type on the web, it seems almost mandatory that you include &#8220;Tweet This!&#8221; and &#8220;Post to Facebook&#8221; links. Of course, you can get plugins that create sharing links automatically for most blog software (<a href="http://wordpress.org/extend/plugins/sociable/" target="_blank">Sociable for Wordpress</a> (this is what we use); <a href="http://drupal.org/project/service_links">Service Links for Drupal</a>; <a href="http://www.cahayabiru.com/2009/04/add-sexy-social-bookmark-to-your.html" target="_blank">Sexy Social Bookmark for Blogger</a>; I could go on), and they usually cover more networks than Twitter and Facebook. However, some circumstances require a more do-it-yourself approach.</p>
<p>Adding &#8220;Share on Twitter&#8221; and &#8220;Post to Facebook&#8221; functionality to your web application is a snap! In this post you will learn:</p>
<ul>
<li>-How to prefill a tweet for your user</li>
<li>-How to let your users share a link on Facebook, including page thumbnails and description</li>
<li>-How to harness the power of bit.ly&#8217;s API for short URLs and click tracking</li>
</ul>
<p><span> </span></p>
<h2>Share on Twitter</h2>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1173" style="border: 1px solid black;" title="twitter.com/home?status=&lt;Your Tweet&gt;" src="http://www.rtraction.com/blog/wp-content/uploads/2009/12/twitterurl.jpg" alt="twitter.com/home?status=&lt;Your Tweet&gt;" width="679" height="120" /></p>
<p>Use the following code to create a &#8220;Share on Twitter&#8221; link:</p>
<div style="border: 1px solid #aaa; padding: 10px; width: 660px; overflow-x: scroll;">
<pre><span style="color: blue">&lt;</span><span style="color: maroon">a</span> <span style="color: red">href</span><span style="color: blue">="<strong>http://twitter.com/home?status=</strong>Add Sharing to Your Webapps - http://www.rtraction.com/blog/devit/add-sharing-to-your-webapps"</span> <span style="color: red">target</span><span style="color: blue">="_blank"&gt;</span>Share on Twitter<span style="color: blue">&lt;/</span><span style="color: maroon">a</span><span style="color: blue">&gt;</span></pre>
</div>
<p><a href="http://twitter.com/home?status=Add Sharing to Your Webapps - http://www.rtraction.com/blog/devit/add-sharing-to-your-webapps" target="_blank">Share on Twitter</a></p>
<p>That was easy! Try replacing your link text with a Twitter button:</p>
<div style="border: 1px solid #aaa; padding: 10px; width: 660px; overflow-x: scroll;">
<pre><span style="color: blue">&lt;</span><span style="color: maroon">a</span> <span style="color: red">href</span><span style="color: blue">="http://twitter.com/home?status=Add Sharing to Your Webapps -http://www.rtraction.com/blog/devit/add-sharing-to-your-webapps"</span> <span style="color: red">target</span><span style="color: blue">="_blank"&gt;</span><strong><span style="color: blue">&lt;</span><span style="color: maroon">img</span> <span style="color: red">src</span><span style="color: blue">="shareontwitter.png"</span> <span style="color: red">alt</span><span style="color: blue">="Share on Twitter" /&gt;</span></strong><span style="color: blue">&lt;/</span><span style="color: maroon">a</span><span style="color: blue">&gt;</span></pre>
</div>
<p><a href="http://twitter.com/home?status=Add Sharing to Your Webapps -http://www.rtraction.com/blog/devit/add-sharing-to-your-webapps" target="_blank"><img src="http://www.rtraction.com/blog/wp-content/uploads/2009/12/shareontwitter.png" alt="Share on Twitter" /></a></p>
<p>Twitter can&#8217;t make it much easier than that! When the user clicks on your button, they are brought to their familiar Twitter timeline, with the next tweet prefilled for them.</p>
<p style="text-align: center;"><a href="http://www.rtraction.com/blog/wp-content/uploads/2009/12/twitter1.jpg" rel="lightbox[1167]"><img class="aligncenter size-full wp-image-1240" style="border: 1px solid black;" title="Prefilled Tweet" src="http://www.rtraction.com/blog/wp-content/uploads/2009/12/twitter1.jpg" alt="Prefilled Tweet" width="679" height="120" /></a></p>
<p><span> </span></p>
<h2>Facebook Share Link</h2>
<p style="text-align: center;"><a href="http://www.rtraction.com/blog/wp-content/uploads/2009/12/facebookurl.jpg" rel="lightbox[1167]"><img class="aligncenter size-full wp-image-1190" style="border: 1px solid black;" title="facebook.com/sharer.php?u=&lt;Your URL&gt;" src="http://www.rtraction.com/blog/wp-content/uploads/2009/12/facebookurl.jpg" alt="facebook.com/sharer.php?u=&lt;Your URL&gt;" width="679" height="120" /></a></p>
<p>Use the following code to create a &#8220;Post to Facebook&#8221; link:</p>
<div style="border: 1px solid #aaa; padding: 10px; width: 660px; overflow-x: scroll;">
<pre><span style="color: blue">&lt;</span><span style="color: maroon">a</span> <span style="color: red">href</span><span style="color: blue">="http://facebook.com/sharer.php<strong>?u=http://www.rtraction.com/blog/devit/add-sharing-to-your-webapps</strong>"</span> <span style="color: red">target</span><span style="color: blue">="_blank"&gt;Post to Facebook&lt;/</span><span style="color: maroon">a</span><span style="color: blue">&gt;</span></pre>
</div>
<p><a href="http://facebook.com/sharer.php?u=http://www.rtraction.com/blog/devit/add-sharing-to-your-webapps" target="_blank">Post to Facebook</a></p>
<p>Too easy! Now replace the text with a nifty Facebook button:</p>
<div style="border: 1px solid #aaa; padding: 10px; width: 660px; overflow-x: scroll;">
<pre><span style="color: blue">&lt;</span><span style="color: maroon">a</span> <span style="color: red">href</span><span style="color: blue">="http://facebook.com/sharer.php?u=http://www.rtraction.com/blog/devit/add-sharing-to-your-webapps"</span> <span style="color: red">target</span><span style="color: blue">="_blank"&gt;</span><strong><span style="color: blue">&lt;</span><span style="color: maroon">img</span> <span style="color: red">src</span><span style="color: blue">="posttofacebook.png"</span> <span style="color: red">alt</span><span style="color: blue">="Post to Facebook" /&gt;</span></strong><span style="color: blue">&lt;/</span><span style="color: maroon">a</span><span style="color: blue">&gt;</span></pre>
</div>
<p><a href="http://facebook.com/sharer.php?u=http://www.rtraction.com/blog/devit/add-sharing-to-your-webapps" target="_blank"><img class="alignleft" src="http://www.rtraction.com/blog/wp-content/uploads/2009/12/shareonfacebook.png" alt="Post to Facebook" width="60" height="18" /></a></p>
<p>When the user clicks on your &#8220;Post to Facebook&#8221; button, a new window pops up, prompting them to share the link. The user can optionally update their Facebook status while they are at it.</p>
<p><img class="aligncenter size-full wp-image-1234" style="border: 1px solid black;" title="Post to Profile - No Thumbnail or Description" src="http://www.rtraction.com/blog/wp-content/uploads/2009/12/facebook11.jpg" alt="Post to Profile - No Thumbnail or Description" width="679" height="120" /></p>
<h3>What about Page Thumbnails?</h3>
<p>That looks pretty good, but it could use a little more flair. Facebook attempts to add a thumbnail and a description to your link. Facebook scours your page for <strong>&lt;img&gt;</strong> tags, and uses those for thumbnail options, in the order that they appear on the page. If you want a screenshot of part of your webapp to be the first choice, you&#8217;ll have to put the following code near the top (before any other &lt;img&gt; tags) of your page:</p>
<div style="border: 1px solid #aaa; padding: 10px; width: 660px; overflow-x: scroll;">
<pre><span style="color: blue">&lt;</span><span style="color: maroon">img</span> <span style="color: red">src</span><span style="color: blue">="screenshot.jpg"</span> <span style="color: red">style</span><span style="color: blue">="display: none"</span> <span style="color: red">alt</span><span style="color: blue">="" /&gt;</span></pre>
</div>
<p>This will not be visible to users due to the inline CSS, but Facebook will pick it up.</p>
<p style="text-align: center;"><a href="http://www.rtraction.com/blog/wp-content/uploads/2009/12/facebook2.jpg" rel="lightbox[1167]"><img class="aligncenter size-full wp-image-1277" style="border: 1px solid black;" title="Post to Facebook with Thumbnail" src="http://www.rtraction.com/blog/wp-content/uploads/2009/12/facebook2.jpg" alt="Post to Facebook with Thumbnail" width="679" height="120" /></a></p>
<h3>What about Page Description?</h3>
<p>Facebook uses the page&#8217;s meta description. Make sure the following code is present in the header of your page, between <strong>&lt;head&gt;</strong> and <strong>&lt;/head&gt;</strong>:</p>
<div style="border: 1px solid #aaa; padding: 10px; width: 660px; overflow-x: scroll;">
<pre><span style="color: blue">&lt;</span><span style="color: maroon">meta</span> <span style="color: red">name</span><span style="color: blue">="description"</span> <span style="color: red">content</span><span style="color: blue">="rtraction - Add Sharing to Your Webapps - Twitter and Facebook sharing links are a snap to build!" /&gt;</span></pre>
</div>
<p>Now your Facebook share is complete with a thumbnail and description.</p>
<h3><a href="http://www.rtraction.com/blog/wp-content/uploads/2009/12/facebook3.jpg" rel="lightbox[1167]"><img class="aligncenter size-full wp-image-1280" style="border: 1px solid black;" title="Post to Facebook with Thumbnail and Description" src="http://www.rtraction.com/blog/wp-content/uploads/2009/12/facebook3.jpg" alt="Post to Facebook with Thumbnail and Description" width="679" height="120" /></a></h3>
<p><span> </span></p>
<h2>Shortened URLs with Bit.ly</h2>
<p>Bit.ly&#8217;s API makes it easy to dynamically create shortened URLs. A big advantage of this is that you can make use Bit.ly&#8217;s click tracking.</p>
<p style="text-align: center;"><a href="http://www.rtraction.com/blog/wp-content/uploads/2009/12/bitly1.jpg" rel="lightbox[1167]"><img class="aligncenter size-full wp-image-1285" style="border: 1px solid black;" title="bit.ly click tracking" src="http://www.rtraction.com/blog/wp-content/uploads/2009/12/bitly1.jpg" alt="bit.ly click tracking" width="679" height="120" /></a></p>
<p style="text-align: center;">
<p>You can learn how to <a href="http://code.google.com/p/bitly-api/wiki/ApiDocumentation" target="_blank">use the Bit.ly API on your own</a>, or use an existing library. There is a <a href="http://sites.google.com/site/bitlyapp/" target="_blank">DLL file for .NET projects to use Bit.ly</a>. This is untested by us, but the <a href="http://www.hashbangcode.com/blog/php-class-to-interact-with-bit-ly-api-1315.html" target="_blank">Hashbangcode Bit.ly PHP Class</a> looks like a promising PHP solution. Let us know in the comments if you have tried this library!</p>
<p>If you have any other tips for creating share links, let us know in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rtraction.com/blog/devit/add-sharing-to-your-webapps.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>A Tip of the Beanie to Open Web Standards</title>
		<link>http://www.rtraction.com/blog/devit/a-beanie-tip-to-open-web-standards.html</link>
		<comments>http://www.rtraction.com/blog/devit/a-beanie-tip-to-open-web-standards.html#comments</comments>
		<pubDate>Mon, 30 Nov 2009 17:13:20 +0000</pubDate>
		<dc:creator>Carolyn Marshall</dc:creator>
				<category><![CDATA[Devit!]]></category>

		<guid isPermaLink="false">http://www.rtraction.com/blog/?p=1030</guid>
		<description><![CDATA[Today the rTraction team is wearing blue beanies (or toques as we call them here in Canada) to raise awareness about web standards.
Why are we wearing toques inside and sharing the pictures with the world &#8211; risking overheating, ridicule and Gavin’s hathead?
In an industry that thrives on creativity and thinking &#8220;outside the box&#8221;, why are [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.rtraction.com/blog/wp-content/uploads/2009/11/beanies.jpg" rel="lightbox[1030]"><img src="http://www.rtraction.com/blog/wp-content/uploads/2009/11/beanies.jpg" alt="rTraction wearing Blue Beanies" style="float: right; margin: 5px;" title="rTraction wearing Blue Beanies" height="300" /></a>Today the rTraction team is wearing blue beanies (or toques as we call them here in Canada) to raise awareness about <a href="http://www.webstandards.org/">web standards</a>.</p>
<p>Why are we wearing toques inside and sharing the pictures with the world &#8211; risking overheating, ridicule and Gavin’s hathead?</p>
<p>In an industry that thrives on creativity and thinking &#8220;outside the box&#8221;, why are we so excited about defining the box?</p>
<p>Because <a href="http://www.rtraction.com/portfolio/">we love to make cool stuff</a>.</p>
<p>The web is an ecology of people, communities, ideas, websites and applications. Standards are common language that connects each denizen making the system stronger, richer and able to evolve.</p>
<p>To a user, open web standards make our systems &#8216;just work&#8217;. To a web developer they free us from the limitations of the technology and let us focus on all the cool things we can do with it.</p>
<p>Open web standards make our websites and applications intuitive. They make sure that our cool stuff can reach the most people as quickly and easily as possible no matter their platform, location or browser.</p>
<p>They lower the barrier of entry, enabling more people to create content, inspiration and innovation.</p>
<p>We’ve all experienced what happens without familiar standards. Stuck on channel 3, the radio playing loudly, Desperate Housewives recording over family videos, the clock flashes 12:00&#8230;12:00&#8230;.12:00&#8230;. </p>
<p>The less time we spend worrying about compatibility, accessibility and extensibility, the more time we can spend making web apps that are leaner, meaner and cooler.</p>
<p>So today, we wear our beanies with pride and support the standards that let us and all developers and designers fill the web with cool stuff.</p>
<p><strong>Join the movement!</strong></p>
<p>Facebook: <a href="http://www.facebook.com/dwws">http://www.facebook.com/dwws</a></p>
<p>Twitter: <a href="http://twitter.com/BlueBeanieDay">http://twitter.com/BlueBeanieDay</a> or search #bbd09</p>
<p>Flickr: <a href="http://www.flickr.com/groups/bluebeanieday2009">http://www.flickr.com/groups/bluebeanieday2009</a></p>
<p>YouTube: <a href="http://www.youtube.com/watch?v=v4G2hgioLFk">http://www.youtube.com/watch?v=v4G2hgioLFk</a></p>
<p><strong>Learn more about Web Standards</strong></p>
<p><a href="http://www.opera.com/company/education/curriculum/">http://www.opera.com/company/education/curriculum/</a></p>
<p><a href="http://webstandardsgroup.org/resources/">http://webstandardsgroup.org/resources/</a></p>
<p><a href="http://www.webstandards.org/learn/">http://www.webstandards.org/learn/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rtraction.com/blog/devit/a-beanie-tip-to-open-web-standards.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
