<?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>Kris &#34;Justise&#34; Gray &#187; development</title>
	<atom:link href="http://www.justise.com/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.justise.com</link>
	<description>Programming - Development</description>
	<lastBuildDate>Mon, 28 Dec 2009 16:59:27 +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>Self executing recursive javascript functions</title>
		<link>http://www.justise.com/2009/12/28/self-executing-recursive-javascript-functions/</link>
		<comments>http://www.justise.com/2009/12/28/self-executing-recursive-javascript-functions/#comments</comments>
		<pubDate>Mon, 28 Dec 2009 16:59:27 +0000</pubDate>
		<dc:creator>Kris Gray</dc:creator>
				<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.justise.com/?p=426</guid>
		<description><![CDATA[The title is intimidating, but fear not. This will be short, sweet and probably really easy to understand. And you'll have something to impress me with in interviews if you ever have the pleasure.
Why?
A while back I was writing some code and it turned out it was executed by two different code paths. In one [...]]]></description>
			<content:encoded><![CDATA[<p>The title is intimidating, but fear not. This will be short, sweet and probably really easy to understand. And you'll have something to impress me with in interviews if you ever have the pleasure.</p>
<h3>Why?</h3>
<p>A while back I was writing some code and it turned out it was executed by two different code paths. In one case, the control was all ready and the code needed to be executed right away. In the other case, the control wasn't ready but would be shortly after the window.load event has been fired. Yea I'm not explaining it very well, but really it doesn't matter, lets see code.</p>
<h3>Code</h3>
<div class="igBar"><span id="ljavascript-4"><a href="#" onclick="javascript:showPlainTxt('javascript-4'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-4">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> isLoaded = <span style="color: #003366; font-weight: bold;">false</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span>isLoaded<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; document.<span style="color: #006600;">getElementById</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"out"</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">innerHTML</span> = <span style="color: #3366CC;">"Loaded"</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// Every 10th of a second call this method again.</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; document.<span style="color: #006600;">getElementById</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"out"</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">innerHTML</span> += <span style="color: #3366CC;">"Trying Again&lt;br/&gt;"</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; setTimeout<span style="color: #66cc66;">&#40;</span>arguments.<span style="color: #006600;">callee</span>, <span style="color: #CC0000;color:#800000;">100</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// If your inside an object, you probably want to keep the THIS pointer.</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// For that, you would do the following.</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// var self = this, fn = arguments.callee;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// setTimeout(function() { fn.call(self); }, 100);</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// The page will be loaded in 3 seconds</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// We would probably want to wait for something like</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// a DOM event, but its just sample code. So...</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; setTimeout<span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span> isLoaded = <span style="color: #003366; font-weight: bold;">true</span>; <span style="color: #66cc66;">&#125;</span>, <span style="color: #CC0000;color:#800000;">3000</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>We have both techniques of the example in use here, a self executing anonymous function, and a recursive function. </p>
<p>For the self executing anonymous function, we are wrapping our function in parenthesis and then calling it just like any other function.</p>
<div class="igBar"><span id="ljavascript-5"><a href="#" onclick="javascript:showPlainTxt('javascript-5'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-5">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// The anonymous part</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>For the self executing part, we get a reference to the function using <code>arguments.callee</code>, which just so happens to be itself. With it we can use a <code>setTimeout</code> to have the function try again later. We could have just kept calling it, but with javascripts single threaded nature, I would think nothing would happen while your calling your function over and over.</p>
<div class="igBar"><span id="ljavascript-6"><a href="#" onclick="javascript:showPlainTxt('javascript-6'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-6">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// BAD</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// At least in our case. You could have </span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// a perfectly justifiable reason for doing this </span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// though.</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">arguments.<span style="color: #006600;">callee</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p><a href="http://www.justise.com/prototype/selfexecuting.html">You can see a live example of this code here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.justise.com/2009/12/28/self-executing-recursive-javascript-functions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IE 6, 7, 8 Only CSS</title>
		<link>http://www.justise.com/2009/12/22/ie-6-7-8-only-css/</link>
		<comments>http://www.justise.com/2009/12/22/ie-6-7-8-only-css/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 01:24:41 +0000</pubDate>
		<dc:creator>Kris Gray</dc:creator>
				<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.justise.com/?p=418</guid>
		<description><![CDATA[Introduction
This topic doesn't really need an introduction, so lets move on!
Options
DOM wrappers using Conditional Comments
This is the technique used by the jQuery UI site. The basics are that if you wrap your entire page in a DIV with the browser version as the class name, you can just add extra rules to your one stylesheet [...]]]></description>
			<content:encoded><![CDATA[<h3>Introduction</h3>
<p>This topic doesn't really need an introduction, so lets move on!</p>
<h2>Options</h2>
<h3>DOM wrappers using Conditional Comments</h3>
<p>This is the technique used by the jQuery UI site. The basics are that if you wrap your entire page in a DIV with the browser version as the class name, you can just add extra rules to your one stylesheet that will get picked up. Then you can use conditional comments to show the appropriate DIV when necessary. </p>
<div class="igBar"><span id="lhtml-9"><a href="#" onclick="javascript:showPlainTxt('html-9'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">HTML:</span>
<div id="html-9">
<div class="html">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/body.html"><span style="color: #000000; font-weight: bold;">&lt;body</span></a> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"home"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span> </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="color: #808080; font-style: italic;">&lt;!--[if IE 5]&gt;</span></span><span style="color: #009900;"><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">&lt;div</span></a> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"ie5"</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">"ie"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>!<span style="color: #66cc66;">&#91;</span>endif<span style="color: #66cc66;">&#93;</span>--<span style="color: #000000; font-weight: bold;">&gt;</span></a></span> </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="color: #808080; font-style: italic;">&lt;!--[if IE 6]&gt;</span></span><span style="color: #009900;"><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">&lt;div</span></a> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"ie6"</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">"ie"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>!<span style="color: #66cc66;">&#91;</span>endif<span style="color: #66cc66;">&#93;</span>--<span style="color: #000000; font-weight: bold;">&gt;</span></a></span> </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="color: #808080; font-style: italic;">&lt;!--[if IE 7]&gt;</span></span><span style="color: #009900;"><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">&lt;div</span></a> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"ie7"</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">"ie"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>!<span style="color: #66cc66;">&#91;</span>endif<span style="color: #66cc66;">&#93;</span>--<span style="color: #000000; font-weight: bold;">&gt;</span></a></span> </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="color: #808080; font-style: italic;">&lt;!--[if lte IE 7]&gt;</span></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div&gt;</span></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>!<span style="color: #66cc66;">&#91;</span>endif<span style="color: #66cc66;">&#93;</span>--<span style="color: #000000; font-weight: bold;">&gt;</span></a></span> </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/body&gt;</span></span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>With this solution, you can include all your CSS in one file, so everything is tidy and theres no extra web requests necessary. </p>
<p>It comes at the cost of your HTML cleanliness, but its overall very minimal.</p>
<h3>Conditional Stylesheets</h3>
<p>Using the same trick as above, you can include stylesheets conditionally on IE with conditional comments. The abilities of the conditional comment syntax is quite powerful, it seems like its wasted doing just stylesheet inclusion. </p>
<div class="igBar"><span id="lhtml-10"><a href="#" onclick="javascript:showPlainTxt('html-10'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">HTML:</span>
<div id="html-10">
<div class="html">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="color: #808080; font-style: italic;">&lt;!--[if IE]&gt;</span></span> <span style="color: #009900;"><a href="http://december.com/html/4/element/link.html"><span style="color: #000000; font-weight: bold;">&lt;link</span></a> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">"ie_only.css"</span> <span style="color: #000066;">rel</span>=<span style="color: #ff0000;">"stylesheet"</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/css"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span> <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;</span></a>!<span style="color: #66cc66;">&#91;</span>endif<span style="color: #66cc66;">&#93;</span>--<span style="color: #000000; font-weight: bold;">&gt;</span></a></span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>This is probably what I would suggest to most of you out there. Its quick, un-invasive and you can pretty much throw it out there and only worry about it when you really have to do something for just IE.</p>
<h3>Let the server do it</h3>
<p>I only mention this because I work in an enterprise environment that does just that. It includes an IE version of the stylesheet you referenced if the user is browsing in IE.</p>
<p>So if you have a stylesheet <strong>Calendar.css</strong> and you navigated to the page using IE, you would get tags for both <strong>Calendar.css</strong> and <strong>Calendar_ie.css</strong>. If of course <strong>Calendar_ie.css</strong> exists.</p>
<h3>CSS Hacks, Syntax and Selector</h3>
<p>So I'm regurgitating a bunch of information from this <a href="http://www.webdevout.net/css-hacks">Web Dev Out CSS Hacks page</a>  which is that there are some CSS hacks based on selector engine parsing issues that are possible. </p>
<p>The primary options are those which are valid CSS, as invalid CSS is much more likely to cause you problems down the line. </p>
<p>Here's some of the selectors from that article.</p>
<blockquote><p>
<strong>IE 6 and below</strong><br />
* html {}</p>
<p><strong>IE 7 and below</strong><br />
*:first-child+html {} * html {}</p>
<p><strong>IE 7 only</strong><br />
*:first-child+html {}</p>
<p><strong>IE 7 and modern browsers only</strong><br />
html>body {}</p>
<p><strong>Modern browsers only (not IE 7)</strong><br />
html>/**/body {}</p>
<p><strong>Recent Opera versions 9 and below</strong><br />
html:first-child {}</p>
</blockquote>
<p>Its perfectly understandable that these may be your only options at the moment, but the chance they come back to bite you is so much higher as to make conditional comments worth your effort.</p>
<h3>So, what to use?</h3>
<p>Well, I tend to use the conditional extra stylesheet method, but between that and the DOM inclusion which are both good options its really up to you. You'll still have the comfort of knowing that your doing things the right way, and that the next .0.0.1 version of FireFox, IE, or WebKit won't break your site and bring down the internet.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.justise.com/2009/12/22/ie-6-7-8-only-css/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Google Sites Data API Prototype</title>
		<link>http://www.justise.com/2009/12/19/google-sites-data-api-prototype/</link>
		<comments>http://www.justise.com/2009/12/19/google-sites-data-api-prototype/#comments</comments>
		<pubDate>Sat, 19 Dec 2009 21:32:03 +0000</pubDate>
		<dc:creator>Kris Gray</dc:creator>
				<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.justise.com/?p=412</guid>
		<description><![CDATA[I've made note of my fondness of Google sites before. 
This project originated from the need to consolidate our JSDocs into a single search able source with all our other data. As that data is all in Google Sites at the moment, integration with Google Sites seemed the sensible choice.

Last thing I want to mention [...]]]></description>
			<content:encoded><![CDATA[<p>I've made <a href="http://www.justise.com/2009/08/04/free-services-solving-expensive-problems/">note of my fondness of Google sites</a> before. </p>
<p>This project originated from the need to consolidate our <a href="http://jsdoc.sourceforge.net/">JSDocs</a> into a single search able source with all our other data. As that data is all in Google Sites at the moment, integration with Google Sites seemed the sensible choice.<br />
<em><br />
Last thing I want to mention is that I don't claim to be super knowledgable on this topic, I'm only going to talk about what I've experienced in developing this prototype.<br />
</em></p>
<h3>High Level</h3>
<p>Google provides REST API's for <a href="http://code.google.com/more/">a lot of its services</a> as well several different <a href="http://code.google.com/apis/gdata/docs/client-libraries.html">client libraries</a> to interact with said REST API's without having to worry to much about xml, namespaces and such. </p>
<p>I used the <a href="http://code.google.com/p/gdata-javascript-client/">gdata-javascript-client</a> in this example as its more my specialty.</p>
<p>In the js client, for getting the content feed (which is the listing of your sites information) you'll want to login, instantiate a GoogleService, and make a getFeed call using the GoogleService instance. Lets get to the prototype to see how we do that.</p>
<h3>Prototype</h3>
<p>In my prototype, I have 3 buttons that allow you to login, get your content feed, and then update one of the pages with new HTML.</p>
<p>Here's a link to the <a href="http://justise.com/prototype/googlesitesdataapi/test.html">Prototype</a>. Be aware, you'll need to to change the URL's to a google site you control (probably), otherwise you won't be able interact with its API. (At least not the update, the get should work)</p>
<p>Here's the full text of that prototype.</p>
<div class="igBar"><span id="lhtml-15"><a href="#" onclick="javascript:showPlainTxt('html-15'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">HTML:</span>
<div id="html-15">
<div class="html">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #00bbdd;">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/html.html"><span style="color: #000000; font-weight: bold;">&lt;html&gt;</span></a></span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/head.html"><span style="color: #000000; font-weight: bold;">&lt;head&gt;</span></a></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/title.html"><span style="color: #000000; font-weight: bold;">&lt;title&gt;</span></a></span>Sample using the Google data JavaScript client library<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/title&gt;</span></span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/link.html"><span style="color: #000000; font-weight: bold;">&lt;link</span></a> <span style="color: #000066;">rel</span>=<span style="color: #ff0000;">"stylesheet"</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/css"</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">"http://code.google.com/css/dev_docs.css"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/style.html"><span style="color: #000000; font-weight: bold;">&lt;style&gt;</span></a></span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; blockquote { margin: 2px 6px; padding: 0; border: 1px solid silver;&nbsp;}</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; span { display: block; font: 11px Arial; color: #999; }</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; input { border: 1px solid #333; margin: 3px 0 12px 0; width: 600px; }</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; textarea { width: 600px; height: 300px; }</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; h3 { display: block; margin: 0; padding: 0; height: 25px;}</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; #out { margin: 10px 0 0 0; border: 2px solid #F00; }</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/style&gt;</span></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000; font-weight: bold;">&lt;script</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">"http://www.google.com/jsapi"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/script&gt;</span></span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/script.html"><span style="color: #000000; font-weight: bold;">&lt;script</span></a> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"text/javascript"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">/* Loads the Google data JavaScript client library */</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">google.load(&quot;gdata&quot;, &quot;2.x&quot;);</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">function init() {}</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">function logMeIn() {</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; var nameOfMyGoogleServiceThatIsTotallyMadeUp = &quot;test-app&quot;;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; var scope = &quot;http://sites.google.com/feeds/&quot;;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; var token = google.accounts.user.login(scope);</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; service = new google.gdata.client.GoogleService(&quot;jotspot&quot;, nameOfMyGoogleServiceThatIsTotallyMadeUp);</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">}</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">function get() {</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; var feed = document.getElementById(&quot;siteUrl&quot;).value;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; logMeIn();</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; // Call the content feed, pass the result to the output function</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; service.getFeed(feed, output);</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">}</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">function update() {&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; var pageId = document.getElementById(&quot;pageId&quot;).value;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; logMeIn();</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; // Get an entry object for the page</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; service.getEntry(pageId, function(entryRoot) {</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; // $t indicates the text of the content node.</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; // We are setting it to whats in the textarea.</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; entryRoot.entry.content.$t = txt();</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; service.updateEntry(pageId, entryRoot.entry, output, output);</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; });</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">}</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">function output(obj) {</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; if(!obj) { out('Watch was passed nothing');}</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; out((function(o) {</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; var s = [];</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; for(var i in o) {</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s.push([i, '=', o[i]].join(''));</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(!o[i]) {</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; continue;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else if(o[i].constructor == Object) {</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s.push('<span style="color: #009900;"><a href="http://december.com/html/4/element/blockquote.html"><span style="color: #000000; font-weight: bold;">&lt;blockquote&gt;</span></a></span>' + arguments.callee(o[i]) + '<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/blockquote&gt;</span></span>');</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else if(o[i].constructor == Array) {</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for(var c=0;c<span style="color: #009900;">&lt;o<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>.length;c++<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s.push<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'&lt;blockquote&gt;</span>' + arguments.callee(o[i][c]) + '<span style="color: #009900;">&lt;/blockquote&gt;</span>');</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; }</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; return s.join('<span style="color: #009900;">&lt;br/&gt;</span>');</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; })(obj));</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">}</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">function out(str){ document.getElementById(&quot;out&quot;).innerHTML = str; }</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">function txt() { return document.getElementById(&quot;updateText&quot;).value; }</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">google.setOnLoadCallback(init);</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;">&lt;/script&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;">&lt;/head&gt;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;">&lt;body&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900;">&lt;button onclick=&quot;logMeIn()&quot;&gt;</span>Login<span style="color: #009900;">&lt;/button&gt;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900;">&lt;button onclick=&quot;get()&quot;&gt;</span>Get Content of Site<span style="color: #009900;">&lt;/button&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900;">&lt;button onclick=&quot;update()&quot;&gt;</span>Update<span style="color: #009900;">&lt;/button&gt;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900;">&lt;br/&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900;">&lt;h3&gt;</span>Site Id<span style="color: #009900;">&lt;/h3&gt;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900;">&lt;input type=&quot;text&quot; id=&quot;siteUrl&quot; value=&quot;http://sites.google.com/feeds/content/site/justisetest&quot;/&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900;">&lt;br/&gt;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900;">&lt;h3&gt;</span>Page Id<span style="color: #009900;">&lt;/h3&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900;">&lt;span&gt;</span>Obviously you should get this programmatically, but its a prototype so yea...<span style="color: #009900;">&lt;/span&gt;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900;">&lt;input type=&quot;text&quot; id=&quot;pageId&quot; value=&quot;http://sites.google.com/feeds/content/site/justisetest/8416968326017325843&quot;/&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900;">&lt;br/&gt;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900;">&lt;textarea id=&quot;updateText&quot;&gt;</span><span style="color: #009900;">&lt;h1&gt;</span>updated!<span style="color: #009900;">&lt;/h1&gt;</span><span style="color: #009900;">&lt;/textarea&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900;">&lt;div id=&quot;out&quot;&gt;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900;">&lt;/div&gt;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900;">&lt;img src=&quot;bullet.jpg&quot; border=&quot;0&quot;/&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;">&lt;/body&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;">&lt;/html&gt;</span> </span></div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<h3>Login and instantiate a service</h3>
<div class="igBar"><span id="ljavascript-16"><a href="#" onclick="javascript:showPlainTxt('javascript-16'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-16">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> scope = <span style="color: #3366CC;">"http://sites.google.com/feeds/"</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> token = google.<span style="color: #006600;">accounts</span>.<span style="color: #006600;">user</span>.<span style="color: #006600;">login</span><span style="color: #66cc66;">&#40;</span>scope<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; service = <span style="color: #003366; font-weight: bold;">new</span> google.<span style="color: #006600;">gdata</span>.<span style="color: #006600;">client</span>.<span style="color: #006600;">GoogleService</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"jotspot"</span>, nameOfMyGoogleServiceThatIsTotallyMadeUp<span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Here we are logging into the google service using oAuth, then we create a new GoogleService object, passing the type of service we want to interact with. (Which is jotspot) Then we supply just some name for our application.</p>
<h3>Getting the content</h3>
<div class="igBar"><span id="ljavascript-17"><a href="#" onclick="javascript:showPlainTxt('javascript-17'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-17">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> feed = document.<span style="color: #006600;">getElementById</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"siteUrl"</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">value</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; logMeIn<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// Call the content feed, pass the result to the output function</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; service.<span style="color: #006600;">getFeed</span><span style="color: #66cc66;">&#40;</span>feed, output<span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>The feed URL for my little public site is <strong>http://sites.google.com/feeds/content/site/justisetest</strong></p>
<p>So thats what I plug into our service's get feed. (It gets declared as a global variable in the logMeIn() call)</p>
<p>Its an async call, so it doesn't return anything, it passes the result to an onSuccess function.</p>
<p>My onSuccess function is just a method that takes something and outputs it to a div, so its basically a kind of a little watch window.</p>
<h3>Updating content</h3>
<div class="igBar"><span id="ljavascript-18"><a href="#" onclick="javascript:showPlainTxt('javascript-18'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-18">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> pageId = document.<span style="color: #006600;">getElementById</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"pageId"</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">value</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; logMeIn<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// Get an entry object for the page</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; service.<span style="color: #006600;">getEntry</span><span style="color: #66cc66;">&#40;</span>pageId, <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>entryRoot<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// $t indicates the text of the content node.</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// We are setting it to whats in the textarea.</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; entryRoot.<span style="color: #006600;">entry</span>.<span style="color: #006600;">content</span>.$t = txt<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; service.<span style="color: #006600;">updateEntry</span><span style="color: #66cc66;">&#40;</span>pageId, entryRoot.<span style="color: #006600;">entry</span>, output, output<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>The Page id I just stole from the content field, which I'm basically hard-coding.</p>
<p>Ensure I'm logged in, and then I make a call to the service to request the entry object.</p>
<p>Once my onSuccess function is called, I update the entry's page text, and then use the service to update the entry again. </p>
<p>Those two output calls are the onSuccess and onError functions, which right now just output the result. </p>
<h3>Thats it</h3>
<p>Obviously a lot left to figure out, but I think once you've got to this point, you can actually start exploring the features of the API without having to figure out how to the most basic of operations.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.justise.com/2009/12/19/google-sites-data-api-prototype/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I moved desks, Upgrade? Strangely yes.</title>
		<link>http://www.justise.com/2009/09/23/i-moved-desks-upgrade-strangely-yes/</link>
		<comments>http://www.justise.com/2009/09/23/i-moved-desks-upgrade-strangely-yes/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 17:28:22 +0000</pubDate>
		<dc:creator>Kris Gray</dc:creator>
				<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.justise.com/?p=388</guid>
		<description><![CDATA[At Salesforce, we have a 3 building setup here at One Market, there's two gray ugly towers, and one nicer brick building. The towers are named Spear and Steuart for the streets they are on, and then the nice brick building we call Landmark, I'm not exactly sure why. The Development teams were spread out [...]]]></description>
			<content:encoded><![CDATA[<p>At Salesforce, we have a 3 building setup here at One Market, there's two gray ugly towers, and one nicer brick building. The towers are named Spear and Steuart for the streets they are on, and then the nice brick building we call Landmark, I'm not exactly sure why. The Development teams were spread out over two of the buildings Spear and Landmark and someone decided it would be good to get the teams as close together as possible. It was decided that all us devs would consolidate to the Landmark building, which meant I had to move from my Spear tower desk.  Here's a picture of spear here (Its the taller one on the right).</p>
<p><img src="http://www.justise.com/wp-content/uploads/2009/09/spearTower.jpg" alt="The Spear Tower" title="The Spear Tower" width="250" height="375" class="alignright size-full wp-image-389" /></p>
<p>I had a nice spot too, a pretty good view, quick access to the beer fridge, and close to the team. Here's my desk.</p>
<p><img src="http://www.justise.com/wp-content/uploads/2009/09/IMG_0301-Medium-470x352.jpg" alt="Desk in Spear Tower" title="Desk in Spear Tower" width="470" height="352" class="alignnone size-medium wp-image-390" /></p>
<p>Yes its one small side desk with two gigantic 24" monitors on it, and I'm in a small corner with a large palm. But it has a nice view!</p>
<p><img src="http://www.justise.com/wp-content/uploads/2009/09/IMG_0302-Medium-470x352.jpg" alt="Spear Tower View" title="Spear Tower View" width="470" height="352" class="alignnone size-medium wp-image-391" /></p>
<p>I was a mixed bag of emotions. I did have some nice perks; good view, was sitting right next to the important members of my team, and then there was that I wasn't sure where we were headed. But since I had about 10" of desk space after all my computer equipment, I figured the trade off might be worth it.</p>
<p>We ended up on the 3rd floor of the <a href="http://maps.google.com/maps?f=q&#038;source=s_q&#038;hl=en&#038;geocode=&#038;q=1+Market+St,+San+Francisco,+CA%E2%80%8E+&#038;sll=37.775206,-122.419209&#038;sspn=0.516143,1.056747&#038;ie=UTF8&#038;z=17&#038;iwloc=A">Landmark building at One Market Plaza in San Francisco</a>, which you can't deny is a sexier building.</p>
<p><img src="http://www.justise.com/wp-content/uploads/2009/09/OneMarket-470x440.jpg" alt="Landmark at One Market" title="Landmark at One Market" width="470" height="440" class="alignnone size-medium wp-image-392" /></p>
<p>Here's my new desk.</p>
<p><img src="http://www.justise.com/wp-content/uploads/2009/09/IMG_0378-470x352.jpg" alt="IMG_0378" title="IMG_0378" width="470" height="352" class="alignnone size-medium wp-image-393" /></p>
<p>And my new view! Yay! (Sarcasm!)</p>
<p><img src="http://www.justise.com/wp-content/uploads/2009/09/IMG_0380-470x352.jpg" alt="Landmark View" title="Landmark View" width="470" height="352" class="alignnone size-medium wp-image-394" /></p>
<p>As you can expect, being here only a half dozen months the re-org was able to give the better window seats to the more senior developers, though I would expect nothing less especially if I was one of those senior developers myself.</p>
<p>The move turned out much better then I imagined. I'm amazed that any company gets anything like this right when presented with an opportunity, but Salesforce did a really good job. The manual labor was provided for us, all we had to do was box and label our personal items, computer equipment  and chairs and it showed up at our designated cubes the next morning with our computer equipment already setup.  </p>
<p>The Landmark building was as big a character upgrade inside as it was outside. Its colored better, its got exposed brick walls, and its just a better feel. </p>
<p>Our desks are great, they went from an ugly gray (or white in my case) to a nice speckled wood color, the cubicle walls are a bit lower so you can see peoples top of their heads but looking around doesn't weird anyone out and make them stop working. Also with the open desk layout vs enclosed cubicles, we have a tendency to converse from our chairs and break out in random friendly conversations a bit more. We still get just as much work done so its not at the expense of work, but I think its more efficient conversation time.</p>
<p>So even though I lost out on my nice view, a larger desk, an office with some character, a much better color scheme and better cube layout won out. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.justise.com/2009/09/23/i-moved-desks-upgrade-strangely-yes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding your logo to the page in an SEO optimized way.</title>
		<link>http://www.justise.com/2009/09/19/adding-your-logo-to-the-page-in-an-seo-optimized-way/</link>
		<comments>http://www.justise.com/2009/09/19/adding-your-logo-to-the-page-in-an-seo-optimized-way/#comments</comments>
		<pubDate>Sat, 19 Sep 2009 21:41:10 +0000</pubDate>
		<dc:creator>Kris Gray</dc:creator>
				<category><![CDATA[Markup]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.justise.com/?p=374</guid>
		<description><![CDATA[Everyone has one, either your name, your logo or some cute picture you use to discern that the user has landed on your little piece of the web. Here's mine just for reference.

But there is a specific optimal way to include it on your page.
The things to concern here.

Any images you add to page that [...]]]></description>
			<content:encoded><![CDATA[<p>Everyone has one, either your name, your logo or some cute picture you use to discern that the user has landed on your little piece of the web. Here's mine just for reference.</p>
<p><img src="http://www.justise.com/wp-content/themes/justise/images/headerLogo.png" style="background: maroon"/></p>
<p>But there is a specific optimal way to include it on your page.</p>
<h3>The things to concern here.</h3>
<ul>
<li>Any images you add to page that are not content related but are theme related pollutes your markup with un-necessary elements and makes it harder to re-skin in the future.</li>
<li>Search engines can't read text from an image, so your primary identification doesn't get indexed.</li>
<li>If images aren't loaded (hey it happens, really!) they the visitor doesn't know where they are. There is the alt text of the image that doesn't load, but its size in comparison to the rest of the page is very poor.</li>
<li>What if you want to change your logo based on the page your on, or user activity, you'll need to change the img src, meaning script, or markup changes per page.</li>
</ul>
<p>There's probably a few more, but you get the idea, beyond the <a href="http://en.wikipedia.org/wiki/Happy_path">Happy Path</a>, using an image for your logo starts to cause problems.</p>
<p>The solution is actually beautiful in its simplicity, here's the markup you'll want to generate.</p>
<div class="igBar"><span id="lhtml-23"><a href="#" onclick="javascript:showPlainTxt('html-23'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">HTML:</span>
<div id="html-23">
<div class="html">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/a.html"><span style="color: #000000; font-weight: bold;">&lt;a</span></a> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"logo"</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">"[Your Site Address Here]"</span> <span style="color: #000066;">title</span>=<span style="color: #ff0000;">"[Your Site Name Here]"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/h1.html"><span style="color: #000000; font-weight: bold;">&lt;h1&gt;</span></a></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [Your Site Name Here]</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/h1&gt;</span></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/a&gt;</span></span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>and then you can pair this with some simple CSS to add our logo image.</p>
<div class="igBar"><span id="lcss-24"><a href="#" onclick="javascript:showPlainTxt('css-24'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CSS:</span>
<div id="css-24">
<div class="css">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">a<span style="color: #cc00cc;">#logo <span style="color: #66cc66;">&#123;</span></span> <span style="color: #000000; font-weight: bold;">display</span>:<span style="color: #993333;">block</span>; <span style="color: #000000; font-weight: bold;">width</span>: <span style="color: #ff0000;">'[logo width]'</span>; <span style="color: #000000; font-weight: bold;">height</span>: <span style="color: #ff0000;">'[logo height]'</span>; <span style="color: #000000; font-weight: bold;">background</span>: <span style="color: #993333;">url</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'[logourl]'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333;">no-repeat</span>; <span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">a#logo h1,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">a#logo h2 <span style="color: #66cc66;">&#123;</span> <span style="color: #000000; font-weight: bold;">display</span>: <span style="color: #993333;">none</span>; <span style="color: #66cc66;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>And then your pretty much done, here's what I would end up with for my site.</p>
<div class="igBar"><span id="lhtml-25"><a href="#" onclick="javascript:showPlainTxt('html-25'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">HTML:</span>
<div id="html-25">
<div class="html">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><a href="http://december.com/html/4/element/a.html"><span style="color: #000000; font-weight: bold;">&lt;a</span></a> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"logo"</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">"http://www.justise.com"</span> <span style="color: #000066;">title</span>=<span style="color: #ff0000;">"Kris Gray"</span><span style="color: #000000; font-weight: bold;">&gt;</span></a></span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><a href="http://december.com/html/4/element/h1.html"><span style="color: #000000; font-weight: bold;">&lt;h1&gt;</span></a></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Kris &quot;Justise&quot; Gray</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/h1&gt;</span></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/a&gt;</span></span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<div class="igBar"><span id="lcss-26"><a href="#" onclick="javascript:showPlainTxt('css-26'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CSS:</span>
<div id="css-26">
<div class="css">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">body <span style="color: #66cc66;">&#123;</span> <span style="color: #000000; font-weight: bold;">background</span>: <span style="color: #993333;">maroon</span>; <span style="color: #66cc66;">&#125;</span> </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">a<span style="color: #cc00cc;">#logo <span style="color: #66cc66;">&#123;</span></span> <span style="color: #000000; font-weight: bold;">display</span>:<span style="color: #993333;">block</span>; <span style="color: #000000; font-weight: bold;">width</span>: 185px; <span style="color: #000000; font-weight: bold;">height</span>: 63px; <span style="color: #000000; font-weight: bold;">background</span>: <span style="color: #993333;">url</span><span style="color: #66cc66;">&#40;</span>http://www.justise.com/wp-<span style="color: #000000; font-weight: bold;">content</span>/themes/justise/images/headerLogo.png<span style="color: #66cc66;">&#41;</span> <span style="color: #993333;">no-repeat</span>; <span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">a#logo h1,</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">a#logo h2 <span style="color: #66cc66;">&#123;</span> <span style="color: #000000; font-weight: bold;">display</span>: <span style="color: #993333;">none</span>; <span style="color: #66cc66;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<h3>Why is this markup preferable?</h3>
<p>If we render without images, and CSS, we still get a very big peice of text that lets the user know where they are. </p>
<div id="attachment_378" class="wp-caption alignright" style="width: 468px"><img src="http://www.justise.com/wp-content/uploads/2009/09/HeaderTest.png" alt="What the Logo Looks like without CSS" title="HeaderTest" width="458" height="144" class="size-full wp-image-378" /><p class="wp-caption-text">What the Logo Looks like without CSS</p></div>
<p>We also use an H1 or an H2 (more on that later) to mark our logo text so that search engines realize that the text is important and they should give a large amount of weight to that text. </p>
<p>It was a question of mine at some point writing this if Search Engines really do index text that is hidden with display none? So I went and looked it up, and according to <a href="http://www.iwdn.net/showthread.php?t=5914">this SEO optimization post on "Do search engines index that"</a> the answer is Yes, so lets move on.</p>
<p>We attach the image of our logo to the background image of the logo link, so we still have the flexibility of changing our logo at any time by just updating the CSS, while also being able to change the logo link based on its context in the document, such as a different parent class.</p>
<p>We will obviously want our logo linked back to the main page, its just a common standard, and so you'd need pretty much the same amount of markup if you were going to just insert an image. </p>
<p>Lastly, this <a href="http://www.w3.org/QA/Tips/Use_h1_for_Title">w3c article on using the H1</a> tells us that we want to mark the most important text on the page with the H1 element. Since on the main page, that is most likely our logo this is fine, but on sub pages, we'll probably want the title of each blog post as the H1, so we'll want to make our logo now an H2. With the technique we are using here, it requires no change to the CSS, just a simple markup change.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.justise.com/2009/09/19/adding-your-logo-to-the-page-in-an-seo-optimized-way/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>There&#8217;s a Javascript Magazine, and its really good!</title>
		<link>http://www.justise.com/2009/09/15/theres-a-javascript-magazine-and-its-really-good/</link>
		<comments>http://www.justise.com/2009/09/15/theres-a-javascript-magazine-and-its-really-good/#comments</comments>
		<pubDate>Tue, 15 Sep 2009 21:59:35 +0000</pubDate>
		<dc:creator>Kris Gray</dc:creator>
				<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.justise.com/?p=359</guid>
		<description><![CDATA[

I stumbled upon the JSMag website and decided to sign up and try out the trial PDF. 
The magazine is put together by Michael Kimsal, who also does GroovyMag and he compiles articles from writers in the JavaScript community to publish in this online only magazine (is it an e-zine then?).
In the trial PDF your [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.jsmag.com/"><br />
<img src="http://jsmag.com/images/jsmag_200.png" alt="The magazine for Javascript Developers." /></a></p>
<p>I stumbled upon the <a href="http://www.jsmag.com/">JSMag website</a> and decided to sign up and try out the trial PDF. </p>
<p>The magazine is put together by Michael Kimsal, who also does <a href="http://www.groovymag.com/">GroovyMag</a> and he compiles articles from writers in the JavaScript community to publish in this online only magazine (is it an e-zine then?).</p>
<p>In the trial PDF your topics are </p>
<ul>
<li>JazzRecord: JavaScript Databases Made Painless</li>
<li>The Red Pill: Functional Programming in JavaScript</li>
<li>Using Object Literals to Organize your Features</li>
<li>Community News</li>
</ul>
<p>I've long been interested in Functional JavaScript programming, and so the article is pure candy. Its written well, I don't feel like I'm being talked down to, but I'm also able to keep up on a subject that is a shift from traditional programming concepts. The article was written by <a href="http://enfranchisedmind.com/blog/">Robert Fischer</a>, and I've gained a healthy respect for him from it.</p>
<p>The only real negative is the price, typically, I'll sign up for magazines and they will cost about 20 for a subscription, but <a href="http://www.jsmag.com/">JSMag</a> actually costs $59.88 for a years worth of soft copies. Granted, you get a magazine devoid of advertisements, making it pure content, but its still a heavy price to pay for a magazine.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.justise.com/2009/09/15/theres-a-javascript-magazine-and-its-really-good/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Using Sizzle</title>
		<link>http://www.justise.com/2009/08/31/using-sizzle/</link>
		<comments>http://www.justise.com/2009/08/31/using-sizzle/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 21:42:41 +0000</pubDate>
		<dc:creator>Kris Gray</dc:creator>
				<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.justise.com/?p=355</guid>
		<description><![CDATA[Sizzle is a basic DOM selection engine utilizing CSS queries, available in most libraries available out there such as jQuery, Mootools, Ext, pretty much everything. Because of its overlap with the other libraries that your almost certainly have included in your project already the need for Sizzle is primarily for Custom Frameworks. 
In enterprise, you'll [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://sizzlejs.com/">Sizzle</a> is a basic DOM selection engine utilizing CSS queries, available in most libraries available out there such as jQuery, Mootools, Ext, pretty much everything. Because of its overlap with the other libraries that your almost certainly have included in your project already the need for Sizzle is primarily for Custom Frameworks. </p>
<p>In enterprise, you'll typically have one of these frameworks being worked on that isn't based on an existing framework and has a really big need for great selector support, so Sizzle can probably find a really great niche there.</p>
<p>Using Sizzle is really easy, much to easy for a whole blog post really, but who cares. So here it is.</p>
<div class="igBar"><span id="ljavascript-28"><a href="#" onclick="javascript:showPlainTxt('javascript-28'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-28">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// arrayOfResult is just a flat array.</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> arrayOfResults = Sizzle<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"CSS.selector"</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">// Simple enough right?</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> allDivs = Sizzle<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"DIV"</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">var</span> divsWithBatmanClass = Sizzle<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"DIV.batman"</span><span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Its simplicity is really a large part of its beauty. Users who aren't used to using a selector engine should start to grasp it pretty quickly, we don't have a weird scalar($) value confusing those same people and it returns an array which has no special sauce attached to it for users to try to have to learn.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.justise.com/2009/08/31/using-sizzle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gunnar Optiks</title>
		<link>http://www.justise.com/2009/08/28/gunnar-optiks/</link>
		<comments>http://www.justise.com/2009/08/28/gunnar-optiks/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 05:35:58 +0000</pubDate>
		<dc:creator>Kris Gray</dc:creator>
				<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.justise.com/?p=342</guid>
		<description><![CDATA[
Gunnars Optiks are indoor computer oriented glasses geared towards saving your eye's from the constant strain of staring at a flashlight all day. Most of the frames have a yellowish tint which is supposed to filter out harmful light, and then they also have a .25 focus which is supposed to allow words to stick [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.justise.com/wp-content/uploads/2009/08/IMG_0370-470x352.jpg" alt="Gunnar Optiks" title="Gunnar Optiks" width="470" height="352" class="alignright size-medium wp-image-343" /></p>
<p><a href="http://www.gunnars.com/">Gunnars Optiks</a> are indoor computer oriented glasses geared towards saving your eye's from the constant strain of staring at a flashlight all day. Most of the frames have a yellowish tint which is supposed to filter out harmful light, and then they also have a .25 focus which is supposed to allow words to stick out a bit more.</p>
<p><img src="http://www.justise.com/wp-content/uploads/2009/08/IMG_0364-450x600.jpg" alt="Yellowish Tint Effect" title="Yellowish Tint Effect" width="450" height="600" class="alignright size-medium wp-image-344" /></p>
<p>After hearing about these glasses I was intrigued, but didn't really consider getting them until I read that they are covered by VSP which is the most common vision plan out there. VSP will cover usually about 100 dollars of a pair of any eye glasses you want to get, so since the glasses are listed at around 75-100 dollars on their website I figured it would be free to try out.</p>
<p>I went down to Optiks (a random boutique) in the mall and tried out all of their different frames before settling on <a href="http://www.amazon.com/Gunnar-Optiks-G005-C001-Performance-Technology/dp/B001DUQU0A/ref=sr_1_1?ie=UTF8&#038;s=electronics&#038;qid=1251436443&#038;sr=8-1">this pair in the Sheadog style</a>. Unfortunetly they weren't a VSP provider, and it turns out if your in San Francisco its really hard to find a provider who carries Gunnars at this time so I ended up just buying them on <a href="http://www.amazon.com/Gunnar-Optiks-G005-C001-Performance-Technology/dp/B001DUQU0A/ref=sr_1_1?ie=UTF8&#038;s=electronics&#038;qid=1251436443&#038;sr=8-1">Amazon</a>. Since they were listed for about 100 on Amazon, and Optiks was selling them for 150, so yay! </p>
<p>After getting them, I'm not going to say I LOVE them, that wouldn't be exactly true, but... </p>
<p><strong>Pros</strong></p>
<ul>
<li>They do help with eye strain, my eye's can stare at a monitor all day without feeling like they will de-focus and never see anything again. A big problem I had is at night after staring  at a monitor all day, words would be very blurry but I haven't had that problem since getting the Gunnars. </li>
<li>I love the .25 focus they have, which makes words stick out.</li>
<li>I love the feel of the frames and the glasses on my face feel good. They don't feel cheap, though they are light and professional.</li>
<li>In my opinion the glasses look good, you don't look like your wearing sunglasses inside.</li>
</ul>
<p><strong>Cons</strong></p>
<ul>
<li>I'll still start programming for a while and forget I'm not wearing them, so the difference isn't that crucial.</li>
<li>My Headphones, which grip my head like a vice, squish the glasses a bit and make them hard to adjust. Not a problem for most, but tight headphones and Gunnars aren't a match made in harmony.</li>
<li>Items at a distance, say out a window are very blurry. Since it has a small focus adjustment to it, not a correction for most people, it screws up looking at distances. You'll end up taking them off every time you step away from your monitor. </li>
<li>I've got 3-5 VSP providers within 2 blocks of my office, and nobody carries these glasses! Frustrating...</li>
</ul>
<p><strong>Overall</strong></p>
<p>I think I'm actually starting a trend at work, as several people are starting to consider getting the glasses themselves as eye strain is a big deal for us who sit in front of a monitor all day. It is totally worth it if you can get VSP to pay for them, even 2/3's of the price would absolutely be worth it.</p>
<div id="attachment_347" class="wp-caption alignright" style="width: 480px"><img src="http://www.justise.com/wp-content/uploads/2009/08/IMG_0368-470x352.jpg" alt="My Boss wearing the Gunnars" title="My Boss wearing the Gunnars" width="470" height="352" class="size-medium wp-image-347" /><p class="wp-caption-text">My Boss wearing the Gunnars</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.justise.com/2009/08/28/gunnar-optiks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A shout out to Alvin Ashcraft’s Morning Dew</title>
		<link>http://www.justise.com/2009/08/16/a-shout-out-to-alvin-ashcraft%e2%80%99s-morning-dew/</link>
		<comments>http://www.justise.com/2009/08/16/a-shout-out-to-alvin-ashcraft%e2%80%99s-morning-dew/#comments</comments>
		<pubDate>Sun, 16 Aug 2009 00:50:12 +0000</pubDate>
		<dc:creator>Kris Gray</dc:creator>
				<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.justise.com/?p=320</guid>
		<description><![CDATA[Alvin Ashcraft’s Morning Dew is an aggregating site of interesting blog posts out there, just like Jason Haley and Sam Gentile. 
Recently Alvin featured one of my articles and I just wanted to give a shout out to Alvin and tell you to check out his blog.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alvinashcraft.com/">Alvin Ashcraft’s Morning Dew</a> is an aggregating site of interesting blog posts out there, just like <a href="http://jasonhaley.com/blog/">Jason Haley</a> and <a href="http://samgentile.com/">Sam Gentile</a>. </p>
<p>Recently Alvin featured <a href="http://www.justise.com/2009/07/28/team-office-hours/">one of my articles</a> and I just wanted to give a shout out to Alvin and tell you to check out his blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.justise.com/2009/08/16/a-shout-out-to-alvin-ashcraft%e2%80%99s-morning-dew/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Free services solving expensive problems.</title>
		<link>http://www.justise.com/2009/08/04/free-services-solving-expensive-problems/</link>
		<comments>http://www.justise.com/2009/08/04/free-services-solving-expensive-problems/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 19:03:51 +0000</pubDate>
		<dc:creator>Kris Gray</dc:creator>
				<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.justise.com/?p=292</guid>
		<description><![CDATA[Free doesn't mean crappy anymore, companies like Google are now trying to get everyone hooked on internet products to promote its brand and to change the way people think about applications. Others like Unfuddle are trying to get you locked into their services with the free versions and then up-sell you when the time is [...]]]></description>
			<content:encoded><![CDATA[<p>Free doesn't mean crappy anymore, companies like Google are now trying to get everyone hooked on internet products to promote its brand and to change the way people think about applications. Others like Unfuddle are trying to get you locked into their services with the free versions and then up-sell you when the time is right. </p>
<p>Either way, we win! So with that in mind, lets check out some free stuff that I love.</p>
<h3>Source Control (<a href="http://www.unfuddle.com/">Unfuddle</a>)</h3>
<p><a href="http://www.unfuddle.com"><img src="http://www.justise.com/wp-content/uploads/2009/08/Unfuddle.jpg" alt="Unfuddle" title="Unfuddle" width="300" height="254" class="alignright size-full wp-image-305"/></a><br />
<a href="http://www.unfuddle.com/">Unfuddle</a> is a project management Software as a Service solution that gives you a bunch of typical project management features; bug management, projects, even milestones. </p>
<p>The best part though is that they give you an unlimited amount of SVN repositories (200mb file size limit). So you can create a repository for each project and its all free. Good free source control isn't something I've been able to easily find, so its good to know of Unfuddle which makes things easy for me.</p>
<h3>Collaboration (<a href="http://sites.google.com/">Google Sites</a>)</h3>
<p><a href="http://sites.google.com/"><img src="http://www.justise.com/wp-content/uploads/2009/08/GoogleSites.gif" alt="Google Sites" title="Google Sites" width="300" height="140" class="alignright size-full wp-image-308" /></a><br />
It probably speaks volumes that after talking about using Unfuddle a project management service, I suggest you use Google Sites for collaboration. I can't believe people out there still don't know about Google Sites, its the best thing ever. Really. </p>
<p>Google sites is the mutation of the wiki and the WYSIWYG into one. You get the Wiki part because it allows anyone to create pages and edit data at will, yet the barrier to entry of a Wiki is mostly removed with the visual editing abilities of the page editor. You can share your site with the world and let everyone see your collaboration baby, or you can restrict it to a few select individuals and keep it amongst those who are really involved with your project.  There's no limit to the amount of users you can add, you can add any of the Google Gadgets available out there, and it even comes with a full <a href="http://www.google.com/google-d-s/tour1.html">Office Suite</a>. </p>
<p>Also because its Google, they have a team constantly working to improve the sites feature, they have recently added more layout options for your page, additional themes which can make some pages actually look like a real homepage, and even AdSense support.</p>
<h3>Metrics (<a href="http://analytics.google.com/">Google Analytics</a>)</h3>
<p><a href="http://analytics.google.com/"><img src="http://www.justise.com/wp-content/uploads/2009/08/GoogleAnayltics.png" alt="GoogleAnayltics" title="GoogleAnayltics" width="300" height="321" class="alignright size-full wp-image-309" /></a><br />
The First thing I do when I start a new web project, or take over someones website, is to introduce <a href="http://analytics.google.com/">Google Analytics</a>. If your not familiar with the product, it tracks your sites traffic, and gives you a mountain of data in relation to your visitors. Some of my favorite stats are listed below.</p>
<ul>
<li>From which referring sites did your visitors originate?</li>
<li>What page are people navigating to most?</li>
<li>What are your most popular days of the week.</li>
<li>What search terms are people using to find your site?</li>
</ul>
<p>The nature of your site and the method of campaign to get your site out there will determine which stats mean the most to you, but there is so much information there that its just interesting to browse through and play with, even if you don't care how many hits your site gets. </p>
<p>As a note, I tend to do this as quickly as possible at the start of the project so I can start gathering data to work with as early as possible. It takes a day to gather enough data to present you with a report, so you can't see the results of your hits today, but tomorrow you'll be good to go.</p>
<h3>Entertainment (<a href="http://www.pandora.com/">Pandora</a>)</h3>
<p><a href="http://www.pandora.com/"><img src="http://www.justise.com/wp-content/uploads/2009/08/Pandora.jpg" alt="Pandora" title="Pandora" width="300" height="278" class="alignright size-full wp-image-310" /></a><br />
Pandora is a streaming music service that generates playlists based on your suggestions to the system. So you can type in a band or song name and it will play songs for you similar in type to the songs you added to it. The free version is becoming more and more handicapped, so proceed with caution if your wary of such things.  </p>
<p>Also a word of caution, when you get a playlist that you really like, DON'T TOUCH IT! Pandora by its nature is meant to branch out and if you add something, its likely to start branching out to areas your not so excited about. I've ruined a few playlists by adding a song/band that got me something I totally wasn't expecting.</p>
<h3>Finances (<a href="http://www.mint.com/">Mint</a>)</h3>
<p><a href="http://www.mint.com/"><img src="http://www.justise.com/wp-content/uploads/2009/08/Mint.jpg" alt="Mint" title="Mint" width="300" height="313" class="alignright size-full wp-image-311" /></a><br />
Mint is amazing, its a model of usability, technilogical achievements, and provides an amazing service for free. I have tried to setup a financial system 3 times in my past, one of them being a free copy of MS Money, and two others being Free Open Source systems. I never did get any single bit of information from them that helped me make a decision in my spending habits. I didn't know what I was spending my money on, how much I was brining in, how much I had saved. Its probably because I didn't read the 250 page, MS Money for Dummies book.</p>
<p>Mint walks you through the happy path for getting setup, prompts you for your account information, gets everything setup and then provides you with intelligent screens, graphs and overviews to give you the perfect picture of whats going where and whats left. You'll never escape having to categorize transactions for the system, but Mint still helps you do that in a simple way. (Could be better though guys, keep at it!)</p>
<h3>Billing (<a href="http://www.invoicemachine.com/">InvoiceMachine</a>)</h3>
<p><a href="http://www.invoicemachine.com/"><img src="http://www.justise.com/wp-content/uploads/2009/08/InvoiceMachine.png" alt="Invoice Machine" title="Invoice Machine" width="300" height="337" class="alignright size-full wp-image-313" /></a><br />
As a developer at a company like Salesforce, I probably do 20-30 different things in a single day, and only maybe 2 of those involve coding. When you start to do some work on your own and no longer have the advantage of a Finance Dept, you find yourself doing 40-50 different things in the course of a project. </p>
<p>With InvoiceMachine, it really is a simple little system that allows you to send invoices off to your client that look acceptably professional. </p>
<h3>Thats it!</h3>
<p>I'm sure theres other alternatives to all these services, they are just the ones I use. Though if you got ones better then what I posted that are free, please mention them!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.justise.com/2009/08/04/free-services-solving-expensive-problems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
