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

<channel>
	<title>FerretArmy: A Web Developer&#039;s Paradise &#187; Geeky</title>
	<atom:link href="http://www.ferretarmy.com/category/geeky/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ferretarmy.com</link>
	<description>Pushing the Web Forward, Since 2007</description>
	<lastBuildDate>Wed, 18 Jan 2012 15:58:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>jsFiddle: The Online Web Editor</title>
		<link>http://www.ferretarmy.com/2011/06/23/jsfiddle-the-online-web-editor/</link>
		<comments>http://www.ferretarmy.com/2011/06/23/jsfiddle-the-online-web-editor/#comments</comments>
		<pubDate>Thu, 23 Jun 2011 19:01:48 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Geeky]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.ferretarmy.com/?p=547</guid>
		<description><![CDATA[I just started playing with jsFiddle, which is an online tool that allows you to test and share HTML/JavaScript fragments. It&#8217;s a really neat tool &#8211; I&#8217;m not entirely sure what it&#8217;s boundaries are quite yet, but it&#8217;s been pretty amazing so far. The interface is fairly intuitive &#8211; just three panes for HTML, JavaScript, [...]]]></description>
			<content:encoded><![CDATA[<p>I just started playing with <a href="http://jsfiddle.net/">jsFiddle</a>, which is an online tool that allows you to test and share HTML/JavaScript fragments. It&#8217;s a really neat tool &#8211; I&#8217;m not entirely sure what it&#8217;s boundaries are quite yet, but it&#8217;s been pretty amazing so far.</p>
<p>The interface is fairly intuitive &#8211; just three panes for HTML, JavaScript, and CSS, and an output pane that displays your rendered content. It also has support for a number of JavaScript frameworks (jQuery, MooTools, etc), and a number of addons for those frameworks. It&#8217;s also setup as a collaborative tool &#8211; by default, your &#8216;Fiddles&#8217; are public and accessible by URL. As a quick test of the tool, I ported the code I wrote for my &#8216;<a href="http://www.ferretarmy.com/2010/05/10/extending-jquery-selectors-between/">:between</a>&#8216; jQuery selector &#8211; check out the demo here: <a href="http://jsfiddle.net/jneal/WmnNJ/">http://jsfiddle.net/jneal/WmnNJ/</a>.</p>
<p>You can even embed your Fiddles on other websites. Next time I write a post on a coding technique, I&#8217;m planning on setting up some examples through jsFiddle. Hopefully it turns out well!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ferretarmy.com/2011/06/23/jsfiddle-the-online-web-editor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Triple MBS Drafting</title>
		<link>http://www.ferretarmy.com/2011/02/27/triple-mbs-drafting/</link>
		<comments>http://www.ferretarmy.com/2011/02/27/triple-mbs-drafting/#comments</comments>
		<pubDate>Mon, 28 Feb 2011 03:08:11 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Geeky]]></category>
		<category><![CDATA[M:TG]]></category>
		<category><![CDATA[drafting]]></category>
		<category><![CDATA[Mirrodin Besieged]]></category>
		<category><![CDATA[MTGO]]></category>

		<guid isPermaLink="false">http://www.ferretarmy.com/?p=528</guid>
		<description><![CDATA[I&#8217;ve been doing a ton of triple Mirrodin Besieged drafting on Magic Online lately, and I&#8217;ve been winning my fair share of packs. Triple MBS is a limited-time draft format, so there likely won&#8217;t be much strategy written around it. Triple MBS is a great format to draft because it&#8217;s a small set (less packs [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been doing a ton of triple Mirrodin Besieged drafting on Magic Online lately, and I&#8217;ve been winning my fair share of packs. Triple MBS is a limited-time draft format, so there likely won&#8217;t be much strategy written around it. Triple MBS is a great format to draft because it&#8217;s a small set (less packs opened) and because it has relatively more money cards than Scars of Mirrodin. Okay, onto some thoughts.</p>
<p>First, I don&#8217;t think infect is a very good strategy in triple MBS. The infect cards are spread out across too many colors, so getting a deck together is tough. Second, the best infect cards are also the best cards against infect. Blight Widow and Priests of Norn will be highly picked by everyone, so you&#8217;ll end up with the drecks, like Flensermite. Third, infect is a popular (but bad) strategy, so the cards will be that much harder to come by.</p>
<p>Fangren Marauder is first-pickable. I&#8217;ve not had any trouble picking up a full playset of these in most of my drafts, and I&#8217;ll always splash green to play them. They are the nuts against non-infect decks, and they are even great against infect. Next, anything that gives a -1/-1 counter or does one damage is playable, and probably will be awesome in your deck. Any guaranteed 2-for-1 is playable (even Myr Sire). Sword of Feast and Famine isn&#8217;t nearly as threatening as you think &#8211; it&#8217;s a mana sink in the early turns, and every deck should have an answer to it (maindecked, none the less). There are far fewer mana fixing cards to make splashing three colors easy in triple MBS than there are in Scars (no mana Myrs), so Sphere of the Suns is a great pickup, as well as Viridian Emissary.</p>
<p>So, what do I think is the most playable strategy in this format? Red-Green artifact sacrifice. The core of this deck is anything that works with artifact sacrfice &#8211; Fangren Marauder, Gnathosaur, Ichor Wellspring, Myr Sire, Kutholda Flamefiend, Myr Turbine, Spine of Ish Sah, and such. Red in general has powerful cards all along the curve, and the synergy that can be put together in with this core of cards is amazing. In general, I&#8217;m very open to also splashing white in these colors, for things like Master&#8217;s Call, Divine Offering, Priests of Norn, and Choking Fumes. If you happen to open a Spine of Ish Sah, try your hardest to get a Treasure Mage, and pick Gnathosaur high.</p>
<p>I highly recommend triple MBS drafting to anyone that has such an inclination. It&#8217;s a great format that won&#8217;t be around for long, so enjoy it while you can!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ferretarmy.com/2011/02/27/triple-mbs-drafting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cube</title>
		<link>http://www.ferretarmy.com/2010/09/13/cube/</link>
		<comments>http://www.ferretarmy.com/2010/09/13/cube/#comments</comments>
		<pubDate>Tue, 14 Sep 2010 04:09:23 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[Geeky]]></category>
		<category><![CDATA[M:TG]]></category>

		<guid isPermaLink="false">http://www.ferretarmy.com/?p=526</guid>
		<description><![CDATA[I&#8217;ve always been a gamer at heart, be it video games or board games, or my absolute favorite genre, collectible card games. This month marks nearly a year into my refound romance with the card game Magic: the Gathering. A bit of background here: I used to play Magic back in 1995 or so as [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve always been a gamer at heart, be it video games or board games, or my absolute favorite genre, collectible card games. This month marks nearly a year into my refound romance with the card game <a href="http://http://wizards.com/Magic/Multiverse/">Magic: the Gathering</a>. A bit of background here: I used to play Magic back in 1995 or so as a teen, in the &#8216;Revised&#8217; era. After finding some cards at my mom&#8217;s house over Thanksgiving last year, I got the itch for it yet again. I&#8217;m taking my hobby a bit more seriously nowadays (though it&#8217;s still just a hobby &#8211; I still try to find some balance in my life!) &#8211; I&#8217;ve take the opportunity to go to try a few professional tournaments in the area, and I&#8217;ve built up a decent collection of cards over the past ten or so months.</p>
<p>The one thing that has been bugging me lately is how to bridge the gap between my friends who know how to play Magic, but aren&#8217;t into playing  competitively like I am. To some extent, I&#8217;m sure I could convince a few friends to get together and draft, but nothing more than that, and even then on rare occasions. As a group, we are far more likely to play a good game of <a href="http://boardgamegeek.com/boardgame/40692/small-world">Smallworld</a>, <a href="http://boardgamegeek.com/boardgame/2651/power-grid">Power Grid</a>, or any other board game than we are to do anything Magic-related. Being the problem-solver I am, I decided fairly recently to create a <a href="http://http://www.cubedrafting.com/">Cube</a>.</p>
<p>Cube is an informal Magic format that is similar to Draft. Essentially, you create &#8216;packs&#8217; of fifteen cards out of an available pool of 500 or so cards, and you hold a draft tournament using those cards. I won&#8217;t go into the specifics of drafting, but essentially all the cards you need to play are going to be provided to you at the outset, though winning requires a fair amount of skill and familiarity with the rules of Magic.</p>
<p>Creating a cube is a very time consuming effort. I&#8217;m currently in the acquisition stage of my cube &#8211; I still can&#8217;t play with my cube, though it is roughly half-complete. Having a theme for your cube is somewhat essential in creating it &#8211; in my case, I&#8217;ve decided upon a hybrid of a powerful-game-state cube and a good-limited-cards cube. This means that I want to add to my cube some of the most powerful cards available in Magic, as well as to add cards that are particularly powerful in draft format. I&#8217;ve been tracking my progress in a <a href="https://spreadsheets.google.com/ccc?key=0AmntRv9woTxidHZCMmt4OEZuYmVReldaN1BaV182TWc&amp;hl=en#gid=1">Google Docs spreadsheet</a>. I&#8217;ve picked out a good portion of the cards I want in the cube, though I haven&#8217;t acquired them all to this point. My one additional caveat to this story is that I want my cube to be primarily foil cards (say 95%+ foil, and almost no non-foil-non-promo cards &#8211; if I have to put a non-foil Primeval Titan into my cube I will, but not without some regret).</p>
<p>Normally, a cube is actually surprisingly cheap to put together &#8211; were it not for the foil cards restriction I&#8217;ve self-imposed, I would be fairly near completion of my cube. I&#8217;ve been trading and buying cards at a pretty furious pace in order to get where I am now, which is about 180 cards in, with an additional 100 or so picked out but not yet acquired. Feel free to comment on my pics if you so desire, and by all means, challenge me to a cube draft when I&#8217;m complete. I&#8217;m very energized to complete this project, so I can play with some of these amazing new cards that I&#8217;ve acquired over the preceding few months!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ferretarmy.com/2010/09/13/cube/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Extending jQuery Selectors: &#8216;between&#8217;</title>
		<link>http://www.ferretarmy.com/2010/05/10/extending-jquery-selectors-between/</link>
		<comments>http://www.ferretarmy.com/2010/05/10/extending-jquery-selectors-between/#comments</comments>
		<pubDate>Mon, 10 May 2010 20:23:52 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Geeky]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[extending jQuery]]></category>

		<guid isPermaLink="false">http://www.ferretarmy.com/?p=516</guid>
		<description><![CDATA[There are a ton of jQuery selectors to get at just about any data imaginable on a page. Between actual selectors (such as ID and attribute selectors) and pseudo-selectors (such as :first and :checked), the bulk of HTML element selection is trivial. There are, however, a few selectors I&#8217;ve had a need for but aren&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>There are a ton of jQuery selectors to get at just about any data imaginable on a page. Between actual selectors (such as ID and attribute selectors) and pseudo-selectors (such as :first and :checked), the bulk of HTML element selection is trivial. There are, however, a few selectors I&#8217;ve had a need for but aren&#8217;t in jQuery currently &#8211; for instance, there is a <a href="http://api.jquery.com/next-adjacent-Selector/">next adjacent selector</a>, but there is no analogous &#8216;previous adjacent&#8217; selector baked in. How does one get around this? Let&#8217;s find out, after the jump.</p>
<p><span id="more-516"></span></p>
<p>There is a solution, of course &#8211; just like almost every part of jQuery, the <a href="http://sizzlejs.com/">Sizzle  selector engine</a> is extensible. That&#8217;s right &#8211; you can implement your own selectors that you can then use just like native selectors (big props to Ben Nadel for <a href="http://www.bennadel.com/blog/1457-How-To-Build-A-Custom-jQuery-Selector.htm">demonstrating this technique</a>). One of my first needs in this realm was to create a &#8216;between&#8217; selector &#8211; give me all the elements &#8216;between&#8217; selectors for element A and element B. Here&#8217;s an example of what we want the syntax to look like:</p>
<pre style="padding-left: 30px;">var rowsBetween = $('tr:between(tr:contains(Start), tr:contains(End))');
</pre>
<p>Given the selector above, we would expect it to return the following table rows:</p>
<p><a href="http://www.ferretarmy.com/wp-content/uploads/2010/05/capRows.png"><img class="alignnone size-full wp-image-517" title="Rows To Capture" src="http://www.ferretarmy.com/wp-content/uploads/2010/05/capRows.png" alt="" width="398" height="178" /></a></p>
<p>In order to implement this selector, we&#8217;re going to make a few assumptions in order to get it to work. First, we&#8217;re going to assume that both the inside selectors resolve to a single element (actually, they can resolve to any number of elements, we will just use only the first match). Next, we are going to assume that the first element actually occurs before the last element. These assumptions obviously make for a buggy implementation of a real selector, but they are perfectly acceptable for a user-driven project.<br />
So, down to it. The first thing we are going to do is setup the jQuery selector engine extension method:</p>
<pre>$.expr[':'].between = function(
    objNode,
    intStackIndex,
    arrProperties,
    arrNodeStack)
{
	// Placeholder logic...
	return false;
};
</pre>
<p>Ben Nadel has an excellent writeup on the selector engine interface in his article http://www.bennadel.com/blog/1457-How-To-Build-A-Custom-jQuery-Selector.htm, so no need to cover it again. Now, our next task is to write the guts of our selector. Here&#8217;s the algorithm we are going to be implementing:</p>
<ol>
<li>Split the arguments by &#8216;,&#8217; (comma), so that we have the start and end selectors.</li>
<li>Find the start and end elements that correspond to the start and end selectors.</li>
<li>Is the element we are currently testing between the start and end elements?
<ol>
<li>Yes -&gt; return true</li>
<li>No -&gt; return false</li>
</ol>
</li>
</ol>
<p>This is a relatively easy algorithm to implement. First, let&#8217;s do the chopping:</p>
<pre>    var args = arrProperties[3].split(",");
    var startSelector = args[0];
    var endSelector = args[1];
</pre>
<p>Now that we have the &#8216;between&#8217; selector values, let&#8217;s get the corresponding elements from the element collection.</p>
<pre> var startIndex = -1;
    var endIndex = -1;

    // Find the start and end indexes.
    for (var index = 0; index &lt; arrNodeStack.length; index++)
    {
        if ($(arrNodeStack[index]).is(startSelector) &amp;&amp; startIndex &lt; 0)
            startIndex = index;
        else if ($(arrNodeStack[index]).is(endSelector) &amp;&amp; endIndex &lt; 0)
            endIndex = index;
    }
</pre>
<p><em>$(arrNodeStack[index])</em> gives us the element that we are currently iterating over. In order to see if it matches our start/end selector, we use the jQuery <a href="http://api.jquery.com/is/">is()</a> method. We have a little handling here to keep from overwriting our values if we&#8217;ve already found a match, but it&#8217;s all pretty self-explanatory.</p>
<p>Our last task is to check to see if our selected element is between the start and end elements, and return the appropriate value. That again is pretty straightforward:</p>
<pre>    if (startIndex &gt;= 0 &amp;&amp;
        endIndex &gt; 0 &amp;&amp;
        intStackIndex &gt; startIndex &amp;&amp;
        intStackIndex &lt; endIndex)
        return true;
    else
        return false;
</pre>
<p>Putting this all together, we get the following:</p>
<pre>$.expr[':'].between = function(
    objNode,
    intStackIndex,
    arrProperties,
    arrNodeStack)
{
    var args = arrProperties[3].split(",");
    var startSelector = args[0];
    var endSelector = args[1];

    var startIndex = -1;
    var endIndex = -1;

    // Find the start and end indexes.
    for (var index = 0; index &lt; arrNodeStack.length; index++)
    {
        if ($(arrNodeStack[index]).is(startSelector) &amp;&amp; startIndex &lt; 0)
            startIndex = index;
        else if ($(arrNodeStack[index]).is(endSelector) &amp;&amp; endIndex &lt; 0)
            endIndex = index;
    }

    if (startIndex &gt;= 0 &amp;&amp;
        endIndex &gt; 0 &amp;&amp;
        intStackIndex &gt; startIndex &amp;&amp;
        intStackIndex &lt; endIndex)
        return true;
    else
        return false;
};
</pre>
<p>That&#8217;s it! We&#8217;ve now got the ability to use the &#8216;between&#8217; selector just like any other jQuery selector. Pretty simple, no? From not knowing a thing about selector engine extension to a finished product, this was only a few hours of work (mostly research, too). If you&#8217;re looking for an opportunity to try implementing a custom selector, try that &#8216;previous adjacent&#8217; selector I talked about in the opening paragraph &#8211; it should be pretty easy to implement.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ferretarmy.com/2010/05/10/extending-jquery-selectors-between/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Musings on SPDY Protocol</title>
		<link>http://www.ferretarmy.com/2009/11/23/musings-on-spdy-protocol/</link>
		<comments>http://www.ferretarmy.com/2009/11/23/musings-on-spdy-protocol/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 01:03:14 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Geeky]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[spdy]]></category>

		<guid isPermaLink="false">http://www.ferretarmy.com/?p=481</guid>
		<description><![CDATA[So, yet another week, and another fairly large announcement from Google. They&#8217;ve been coming pretty fast and furious lately &#8211; the open-sourcing of both Closure and Chrome OS are two fairly recent developments. However, the one this post will focus on is the announcement that Google is working on a new application-level protocol, dubbed SPDY. [...]]]></description>
			<content:encoded><![CDATA[<p>So, yet another week, and another fairly large announcement from Google. They&#8217;ve been coming pretty fast and furious lately &#8211; the open-sourcing of both Closure and Chrome OS are two fairly recent developments. However, the one this post will focus on is the announcement that Google is working on a new application-level protocol, dubbed <a href="http://dev.chromium.org/spdy/spdy-whitepaper">SPDY</a>.</p>
<p>SPDY (pronounced &#8216;speedy&#8217;) is designed as an adjunct to the <a href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol">http protocol</a>, which has been around for nearly twenty years now. SPDY was designed to run atop of tcp/ip, which is the place in the networking stack that the browser talks to the web server. Hence, to be able to utilize SPDY, both the browser and the web server need to understand the protocol. However, the router need not change at all, which will greatly aid in implementation, if it&#8217;s standardized as a protocol.</p>
<p>So what are the features of the SPDY protocol? First, it&#8217;s faster than standard HTTP through a number of mechanisms. By default, it gzips it&#8217;s headers (and all content), making the packets more lightweight. It only needs one channel for data transfer (it multiplexes requests through the channel, which functions as a stream), so there&#8217;s a tremendous amount of connection overhead reduction versus standard-fare HTTP. The connection is designed to remain open as long as the client wants, which means that new content can be pushed from the server to the client. Packet prioritization is built into the protocol as well.</p>
<p>The nicest part of SPDY, in my opinion, is that it requires the use of SSL by default. This means that every packet sent over the wire is encrypted. Deep packet injection and packet sniffing are realities in the world, so a switch to secure communication is long overdue.</p>
<p>The roadmap for SPDY seems pretty straightforward. It&#8217;s not finished yet, but being an open source effort, a standard could be developed in a few years. Browsers and web servers can build in protocol support as the standard is still being developed. Browsers and can try to handshake in SPDY with a web server, then default back to HTTP if necessary. There aren&#8217;t many competing protocols out there, especially ones that don&#8217;t require any router firmware updates (which would take a decade to roll out, at least). Even if the web doesn&#8217;t decide to run on SPDY, the only reason for that would be someone came up with an even better idea in the meantime. A new protocol is definitely in store for the future of the web.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ferretarmy.com/2009/11/23/musings-on-spdy-protocol/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Closure</title>
		<link>http://www.ferretarmy.com/2009/11/09/google-closure/</link>
		<comments>http://www.ferretarmy.com/2009/11/09/google-closure/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 00:23:47 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Closure]]></category>
		<category><![CDATA[Geeky]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[WebDev]]></category>

		<guid isPermaLink="false">http://www.ferretarmy.com/?p=477</guid>
		<description><![CDATA[Google just open sourced Closure, their robust JavaScript library. Closure is used in a variety of Google products, notably GMail and Google Docs. I had a chance to play with it for a few minutes, and I&#8217;m posting my first impressions. Google Closure is a fairly complete JavaScript framework. In that sense, it duplicates a [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://code.google.com/closure/"><img class="alignnone size-full wp-image-478" title="Google Closure" src="http://www.ferretarmy.com/wp-content/uploads/2009/11/closureLogo.png" alt="Google Closure" width="128" height="128" /></a></p>
<p>Google just open sourced <a href="http://code.google.com/closure/">Closure</a>, their robust JavaScript library. Closure is used in a variety of Google products, notably <a href="http://mail.google.com">GMail</a> and <a href="http://docs.google.com">Google Docs</a>. I had a chance to play with it for a few minutes, and I&#8217;m posting my first impressions.</p>
<p>Google Closure is a fairly complete JavaScript framework. In that sense, it duplicates a lot of the functionality of existing JavaScript libraries, such as <a href="http://jquery.com/">jQuery</a> and <a href="http://developer.yahoo.com/yui/">YUI</a>. It contains behaviors, AJAX, event handling, selectors, UI components, and more. The syntax is fairly straightforward, but it&#8217;s not the same as other libraries, so there&#8217;s a learning curve in getting acquainted with it.</p>
<p>Closure has excellent dependency management through a robust loading mechanism. Basically, if you don&#8217;t reference a certain piece of the library, rest assured that it&#8217;s not going to load (and slow down your page as a result). In addition, it comes with the <a href="http://code.google.com/closure/compiler/docs/gettingstarted_ui.html">Closure Compiler</a>, which will walk your JavaScript, determine what libraries you need, then aggregate and compress all the required files. Being able to deploy one file instead of many is a great way of speeding up your site.</p>
<p>One thing that irks me is that there only way to get Closure is through Subversion access to the trunk. If Google wants Closure to be adopted widely, they&#8217;re going to need to start offering discrete, packaged versions of it. Many developers (and novices) will be put off by the current distribution method otherwise.</p>
<p>The <a href="http://closure-library.googlecode.com/svn/trunk/closure/goog/docs/index.html">API</a> is well documented, and has links to the actual code for each method (something that I&#8217;ve not really seen before in API documentation). The API itself is very robust, with a ton of methods and accessors on each object. I&#8217;m not sure I&#8217;m a big fan of the way things are laid out in the API, but I don&#8217;t have enough experience with it to say anything definitively here.</p>
<p>One doesn&#8217;t have to stretch the imagination to believe that Closure has amazing potential. This is, after all, what <a href="http://mail.google.com">GMail</a> is built from. I&#8217;m excited that it&#8217;s been open-sourced and I can&#8217;t wait to use it a bit more. Google has given a grand gift to the developer community with this release.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ferretarmy.com/2009/11/09/google-closure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery Image Overlay Plugin 1.1</title>
		<link>http://www.ferretarmy.com/2009/08/21/jquery-image-overlay-plugin-1-1/</link>
		<comments>http://www.ferretarmy.com/2009/08/21/jquery-image-overlay-plugin-1-1/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 17:12:35 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Geeky]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[Image Overlay]]></category>

		<guid isPermaLink="false">http://www.ferretarmy.com/?p=442</guid>
		<description><![CDATA[A quick note &#8211; I&#8217;ve updated my jQuery Image Overlay Plugin to version 1.1. This version adds support for pinning the overlay so it is always viewable (not just when you mouse over the image). There were no other changes, so you should be able to upgrade without worry.]]></description>
			<content:encoded><![CDATA[<p>A quick note &#8211; I&#8217;ve updated my <a href="http://www.ferretarmy.com/files/jQuery/ImageOverlay/ImageOverlay.html">jQuery Image Overlay Plugin</a> to version 1.1. This version adds support for pinning the overlay so it is always viewable (not just when you mouse over the image). There were no other changes, so you should be able to upgrade without worry.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ferretarmy.com/2009/08/21/jquery-image-overlay-plugin-1-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>3D CSS Animated Image Carousel</title>
		<link>http://www.ferretarmy.com/2009/08/14/3d-css-animated-image-carousel/</link>
		<comments>http://www.ferretarmy.com/2009/08/14/3d-css-animated-image-carousel/#comments</comments>
		<pubDate>Fri, 14 Aug 2009 23:46:05 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[Geeky]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[webkit]]></category>
		<category><![CDATA[3D CSS Animation]]></category>
		<category><![CDATA[css animation]]></category>

		<guid isPermaLink="false">http://www.ferretarmy.com/?p=438</guid>
		<description><![CDATA[Here&#8217;s a 3D CSS Animated Image Carousel that I created while I was learning about 3D CSS animation. Watch the video above to see the technique in action. If you&#8217;re on a 3D CSS animation capable browser (currently a non-production version of MAC Safari and mobile Safari in the iPhone and iPod Touch), go ahead [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="350" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.youtube.com/v/TAJw0J6L8lI" /><embed type="application/x-shockwave-flash" width="425" height="350" src="http://www.youtube.com/v/TAJw0J6L8lI"></embed></object></p>
<p>Here&#8217;s a <a href="http://www.ferretarmy.com/files/css-animation/3DCarousel/index.html">3D CSS Animated Image Carousel</a> that I created while I was learning about 3D CSS animation. Watch the video above to see the technique in action. If you&#8217;re on a 3D CSS animation capable browser (currently a non-production version of MAC Safari and mobile Safari in the iPhone and iPod Touch), go ahead and check it out. The video was shot with my XBOX360 webcam, of all things.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ferretarmy.com/2009/08/14/3d-css-animated-image-carousel/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Determining Geolocation on the Web</title>
		<link>http://www.ferretarmy.com/2009/08/05/determining-geolocation/</link>
		<comments>http://www.ferretarmy.com/2009/08/05/determining-geolocation/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 18:49:18 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Geeky]]></category>
		<category><![CDATA[geolocation]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[WebDev]]></category>

		<guid isPermaLink="false">http://www.ferretarmy.com/?p=433</guid>
		<description><![CDATA[Here&#8217;s a GeoLocator example I put together that showcases two popular GeoLocation techniques &#8211; IP lookup and using the GeoLocation API &#8211; in order to both demonstrate the techniques as well as to show the issues with each. In HTML, there are a few ways of determining the location of a user. Traditionally, this has [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.ferretarmy.com/files/geolocation/geolocator.html"><img class="size-full wp-image-434 aligncenter" title="Geolocator Tool" src="http://www.ferretarmy.com/wp-content/uploads/2009/08/geolocator.jpg" alt="Geolocator Tool" width="425" height="102" /></a></p>
<p>Here&#8217;s a <a href="http://www.ferretarmy.com/files/geolocation/geolocator.html">GeoLocator example</a> I put together that showcases two popular GeoLocation techniques &#8211; IP lookup and using the GeoLocation API &#8211; in order to both demonstrate the techniques as well as to show the issues with each.</p>
<p>In HTML, there are a few ways of determining the location of a user. Traditionally, this has always been accomplished by IP lookup &#8211; a lookup is performed with your IP against a database of known IP locations. This technique leaves a lot to be desired, but it&#8217;s been all that&#8217;s been available for a very long time.</p>
<p>In HTML5, however, there&#8217;s a new <a href="http://dev.w3.org/geo/api/spec-source.html">Geolocation API</a>. The gist of this feature is that instead of relying on IP address lookup, the browser will instead interrogate the device for this information. This allows devices that have native geolocation hardware (GPS receivers and Wifi antennas, for example) to be able to pass their known location to the browser. Many web-enabled devices of today already provide support for this feature, including the iPhone, the Palm Pre, Android phones, and some netbooks.</p>
<p>The problem with all these methods, however, is that none of them just work on all devices. IP lookup works best in the workplace, but it doesn&#8217;t work as well for home users and doesn&#8217;t work at all for mobile users, as it pretty much requires a stationary device (amongst other things). The Geolocation API is not supported in all browsers yet (with the major notable holdout being all versions of Internet Explorer), and it tends not to work well on devices that don&#8217;t have built-in GPS capabilities (which the bulk of desktop and laptop devices still aren&#8217;t equipped with).</p>
<p>Worse yet, when location is returned via any technique, it is often inaccurate. In my case, IP lookup and Geolocation lookup provide locations that are over 10 miles away from each other! That&#8217;s not a discrepancy that can be resolved in many cases.</p>
<p>In the longer term, the Geolocation API is almost certainly the way to go. When it is fully supported, it is the most accurate method available. Today, though, the landscape is still fractured and implementing accurate geolocation is not trivial on the web.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ferretarmy.com/2009/08/05/determining-geolocation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery Image Overlay Plugin</title>
		<link>http://www.ferretarmy.com/2009/07/26/jquery-image-overlay-plugin/</link>
		<comments>http://www.ferretarmy.com/2009/07/26/jquery-image-overlay-plugin/#comments</comments>
		<pubDate>Sun, 26 Jul 2009 19:30:43 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Geeky]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[Image Overlay]]></category>
		<category><![CDATA[metadata plugin]]></category>

		<guid isPermaLink="false">http://www.ferretarmy.com/?p=415</guid>
		<description><![CDATA[I&#8217;ve created my first jQuery plugin this week &#8211; it&#8217;s an image overlay plugin (the static pic above doesn&#8217;t do the plugin justice, so click through to see it in action). Creating a jQuery plugin isn&#8217;t that big a stretch for a competent JavaScript developer. There are quite a few tutorials out there where you [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.ferretarmy.com/files/jQuery/ImageOverlay/ImageOverlay.html"><img class="size-full wp-image-416 aligncenter" title="jQuery Image Overlay Plugin" src="http://www.ferretarmy.com/wp-content/uploads/2009/07/Image-Overlay.jpg" alt="jQuery Image Overlay Plugin" width="204" height="202" /></a></p>
<p>I&#8217;ve created my first jQuery plugin this week &#8211; it&#8217;s an <a href="http://www.ferretarmy.com/files/jQuery/ImageOverlay/ImageOverlay.html">image overlay plugin</a> (the static pic above doesn&#8217;t do the plugin justice, so click through to see it in action).</p>
<p>Creating a jQuery plugin isn&#8217;t that big a stretch for a competent JavaScript developer. There are quite a few tutorials out there where you can grab a template and start working very quickly. In addition to writing my plugin, I also made sure that it supported the <a href="http://plugins.jquery.com/project/metadata">metadata plugin</a>, so that you can dynamically change properties on individual galleries and images, which should go a long way towards usefulness.</p>
<p>If you end up using this plugin, drop a line in the comments with a link so we can check out your work. Hope you enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ferretarmy.com/2009/07/26/jquery-image-overlay-plugin/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

