<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Kris "Justise" Gray</title>
	
	<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>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/BlackBeltCoder" /><feedburner:info uri="blackbeltcoder" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Self executing recursive javascript functions</title>
		<link>http://feedproxy.google.com/~r/BlackBeltCoder/~3/EAbBGIxrr5o/</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>
		<feedburner:origLink>http://www.justise.com/2009/12/28/self-executing-recursive-javascript-functions/</feedburner:origLink></item>
		<item>
		<title>IE 6, 7, 8 Only CSS</title>
		<link>http://feedproxy.google.com/~r/BlackBeltCoder/~3/d4jga6AVt6M/</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>
		<feedburner:origLink>http://www.justise.com/2009/12/22/ie-6-7-8-only-css/</feedburner:origLink></item>
		<item>
		<title>JS Methods, static and instance</title>
		<link>http://feedproxy.google.com/~r/BlackBeltCoder/~3/sJhSzSjGur8/</link>
		<comments>http://www.justise.com/2009/12/21/js-methods-static-and-instance/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 18:53:29 +0000</pubDate>
		<dc:creator>Kris Gray</dc:creator>
				<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.justise.com/?p=408</guid>
		<description><![CDATA[When you start having objects in your code, its only natural that methods would follow. With methods there are many different ways to define them, all have various side effects so it'll be important to know why one is preferable to the other.
Instance method in object
PLAIN TEXT
JavaScript:




function FooObject&#40;&#41; &#123;


&#160; &#160;this.mBar = function&#40;&#41;&#123;&#125;;


&#160; &#160;this.mBlah = fnBlah;


&#125;


&#160;


function [...]]]></description>
			<content:encoded><![CDATA[<p>When you start having objects in your code, its only natural that methods would follow. With methods there are many different ways to define them, all have various side effects so it'll be important to know why one is preferable to the other.</p>
<h3>Instance method in object</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;">function</span> FooObject<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;">&nbsp; &nbsp;<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">mBar</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>;</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: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">mBlah</span> = fnBlah;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><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;</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;">function</span> fnBlah<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Here we have an object <code>FooObject</code>, and every time we instantiate it, it gets methods of <code>mBar </code>and <code>mBlah </code>on it.</p>
<p>The primary thing to consider here is that every time you instantiate an instance of <code>FooObject</code>, a new copy of the function assigned to <code>mBar </code>is created. So we have a memory penalty. </p>
<p>We also get two extra operations which assign functions to the two method properties of our <code>FooObject </code>for each new instance of <code>FooObject</code>.</p>
<p>Though because<code> mBar's </code>function is defined inside of the <code>FooObject</code>, it does have access to its scope via closure. Which is something. </p>
<h3>Instance method on prototype</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;">function</span> FooObject<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</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;">FooObject.<span style="color: #006600;">prototype</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;mBar: <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>,</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;mBlah: fnBlah</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></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;">FooObject.<span style="color: #006600;">prototype</span>.<span style="color: #006600;">mBoo</span> = fnBoo;</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;">function</span> fnBlah<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</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;"><span style="color: #003366; font-weight: bold;">function</span> fnBoo<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Assigning to the Prototype of your new class has some major advantages. The prototype object is consistent for each instance of the <code>FooObject</code>, so you don't have extra operations for each method you assign on each object instance. </p>
<p>You can specify a new blah method that will inject itself as first into the chain to be called, yet still maintain a copy of the old method.</p>
<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: #009900; font-style: italic;">// New FooObject with a blah method which alerts a string.</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;">function</span> FooObject<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</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;">FooObject.<span style="color: #006600;">prototype</span> = <span style="color: #66cc66;">&#123;</span>blah: <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>s<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span><span style="color: #000066;">alert</span><span style="color: #66cc66;">&#40;</span>s<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#125;</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;">&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; font-style: italic;">// New instance of Foo Object</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> x = <span style="color: #003366; font-weight: bold;">new</span> FooObject<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;</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;">// Redefine the Blah method, now it should prompt instead of alert.</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;">x.<span style="color: #006600;">blah</span> = <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>s<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span> <span style="color: #000066;">prompt</span><span style="color: #66cc66;">&#40;</span>s,s<span style="color: #66cc66;">&#41;</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;">&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; font-style: italic;">// Call the original blah method which alerts.</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">FooObject.<span style="color: #006600;">prototype</span>.<span style="color: #006600;">blah</span>.<span style="color: #006600;">call</span><span style="color: #66cc66;">&#40;</span>x, <span style="color: #3366CC;">'asdf'</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;</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;">// Call the blah method on our instance, it will prompt not alert.</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;">x.<span style="color: #006600;">blah</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'xyz'</span><span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>A note about assigning to the prototype though, if your doing inheritance, you've just blown up your inheritance chain. Here's some code to show you what I mean.</p>
<div class="igBar"><span id="ljavascript-19"><a href="#" onclick="javascript:showPlainTxt('javascript-19'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-19">
<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;">function</span> Animal<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</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;"><span style="color: #003366; font-weight: bold;">function</span> Cat<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</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;">&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; font-style: italic;">// Cat is an animal</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;">Cat.<span style="color: #006600;">prototype</span> = <span style="color: #003366; font-weight: bold;">new</span> Animal<span style="color: #66cc66;">&#40;</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;">&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; font-style: italic;">// Uhhh yea, now its no longer an animal</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">Cat.<span style="color: #006600;">prototype</span> = <span style="color: #66cc66;">&#123;</span> <span style="color: #3366CC;">'meow'</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;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Its because of this most (all?) of the JS Libraries out there would end up Iterating over the <code>Animal</code> class and assigning all its properties to the <code>Cat</code> prototype. Its a bit of a brute force technique, but its what must be done.</p>
<p>The only thing I dislike about this method is how clean looking it is. I'm not a fan of having your methods declared after your object all the way down the page, its just not very easy on the eyes. But with using a method like <a href="http://mootools.net/docs/core/Class/Class#Class:implement">Mootools's Class.Implement</a> you can still use this basic technique with it still looking good.</p>
<h3>Static Methods</h3>
<p>With static methods, we want to call the method from the definition of the object, not an instance of it. Since functions are essentially objects themselves, we can add whatever we like to them.</p>
<div class="igBar"><span id="ljavascript-20"><a href="#" onclick="javascript:showPlainTxt('javascript-20'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-20">
<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;">function</span> Animal<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</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;"><span style="color: #003366; font-weight: bold;">function</span> Cat<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</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;">Animal.<span style="color: #006600;">GetName</span> = <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>petObj<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</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;">&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; font-style: italic;">// This works</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">Animal.<span style="color: #006600;">GetName</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">new</span> Cat<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</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;</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;">// FAIL!</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: #003366; font-weight: bold;">new</span> Animal<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">GetName</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">new</span> Cat<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Since Static methods are declared on the declaration it doesn't get inherited. Thus, there is no <code>Cat.GetName()</code>. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.justise.com/2009/12/21/js-methods-static-and-instance/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.justise.com/2009/12/21/js-methods-static-and-instance/</feedburner:origLink></item>
		<item>
		<title>Google Sites Data API Prototype</title>
		<link>http://feedproxy.google.com/~r/BlackBeltCoder/~3/7AHu_VwOKeI/</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-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: #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-26"><a href="#" onclick="javascript:showPlainTxt('javascript-26'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-26">
<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-27"><a href="#" onclick="javascript:showPlainTxt('javascript-27'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-27">
<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-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: #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>
		<feedburner:origLink>http://www.justise.com/2009/12/19/google-sites-data-api-prototype/</feedburner:origLink></item>
		<item>
		<title>I moved desks, Upgrade? Strangely yes.</title>
		<link>http://feedproxy.google.com/~r/BlackBeltCoder/~3/Ms0PfTfBq3U/</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>
		<feedburner:origLink>http://www.justise.com/2009/09/23/i-moved-desks-upgrade-strangely-yes/</feedburner:origLink></item>
		<item>
		<title>Adding your logo to the page in an SEO optimized way.</title>
		<link>http://feedproxy.google.com/~r/BlackBeltCoder/~3/SAVGWJ8k0Ok/</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-33"><a href="#" onclick="javascript:showPlainTxt('html-33'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">HTML:</span>
<div id="html-33">
<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-34"><a href="#" onclick="javascript:showPlainTxt('css-34'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CSS:</span>
<div id="css-34">
<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-35"><a href="#" onclick="javascript:showPlainTxt('html-35'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">HTML:</span>
<div id="html-35">
<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-36"><a href="#" onclick="javascript:showPlainTxt('css-36'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CSS:</span>
<div id="css-36">
<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>
		<feedburner:origLink>http://www.justise.com/2009/09/19/adding-your-logo-to-the-page-in-an-seo-optimized-way/</feedburner:origLink></item>
		<item>
		<title>There’s a Javascript Magazine, and its really good!</title>
		<link>http://feedproxy.google.com/~r/BlackBeltCoder/~3/W-zR9eNRD2E/</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>
		<feedburner:origLink>http://www.justise.com/2009/09/15/theres-a-javascript-magazine-and-its-really-good/</feedburner:origLink></item>
		<item>
		<title>Using Sizzle</title>
		<link>http://feedproxy.google.com/~r/BlackBeltCoder/~3/oulmGTrN87I/</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-38"><a href="#" onclick="javascript:showPlainTxt('javascript-38'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-38">
<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>
		<feedburner:origLink>http://www.justise.com/2009/08/31/using-sizzle/</feedburner:origLink></item>
		<item>
		<title>Gunnar Optiks</title>
		<link>http://feedproxy.google.com/~r/BlackBeltCoder/~3/dLTaHqnjMPE/</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>
		<feedburner:origLink>http://www.justise.com/2009/08/28/gunnar-optiks/</feedburner:origLink></item>
		<item>
		<title>A shout out to Alvin Ashcraft’s Morning Dew</title>
		<link>http://feedproxy.google.com/~r/BlackBeltCoder/~3/3GnXgcsNgOk/</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>
		<feedburner:origLink>http://www.justise.com/2009/08/16/a-shout-out-to-alvin-ashcraft%e2%80%99s-morning-dew/</feedburner:origLink></item>
	</channel>
</rss>
