<?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</title>
	<atom:link href="http://www.ferretarmy.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ferretarmy.com</link>
	<description>Pushing the Web Forward, Since 2007</description>
	<lastBuildDate>Mon, 10 May 2010 20:29:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<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>Who does a Non-Neutral Internet Benefit?</title>
		<link>http://www.ferretarmy.com/2010/05/03/who-does-a-non-neutral-internet-benefit/</link>
		<comments>http://www.ferretarmy.com/2010/05/03/who-does-a-non-neutral-internet-benefit/#comments</comments>
		<pubDate>Tue, 04 May 2010 02:03:47 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[net neutrality]]></category>

		<guid isPermaLink="false">http://www.ferretarmy.com/?p=513</guid>
		<description><![CDATA[Who really stands to gain if net neutrality loses? The answer is likely not as clear as one would suspect.]]></description>
			<content:encoded><![CDATA[<p>One of the greatest fights over the past few years has been over net neutrality, the fight over whether it&#8217;s okay for broadband providers to charge content providers extra for the fastest lanes on their networks. I&#8217;ll not espouse too much about the issue itself &#8211; just check <a href="http://en.wikipedia.org/wiki/Network_neutrality" target="_blank">Wikipedia</a> for a primer. The question I&#8217;m pondering is this: in the event of a non-neutral internet, who stands to win in the long run?</p>
<p>Current broadband providers (Time Warner, Rogers, AT&amp;T, etc.) believe that they can open a revenue stream by effectively charging content providers for access to the fastest pipes &#8211; basically, squeezing extra of money out of planned network upgrades by offering the fastest lane exclusively to the websites that will pay for it. This strategy assumes a few things, most notably that there is little interest in new parties entering the market. What if there were someone entering the market that didn&#8217;t rely solely on selling broadband as it&#8217;s business model?</p>
<p>There is a notable content provider who is beginning to experiment with broadband providership &#8211; <a href="http://googleblog.blogspot.com/2010/02/think-big-with-gig-our-experimental.html">Google</a>. The Google of today provides boatloads of services that consume massive amounts of bandwidth. Google has the most to lose with a non-neutral internet &#8211; that is, unless they can tip the scales in their favor. Google could enter the broadband market very simply &#8211; have themselves be their their own best customer. Under a non-neutral internet, Google would have an incentive to provide cheap, high speed networks across the US (and, even more so in the developing world). On top of offering competitive broadband, they could offer the fastest access to Gmail and YouTube, just to name a few. By owning the network that they distribute their content over, Google would be less beholden to ransoming broadband providers, and significantly undermine them at the same time through competition.</p>
<p>What would a current broadband provider be able to do to compete against that? They would have to offer some other type of content (on an aging network, probably) &#8211; that would be cost prohibitive, amongst other things. The real inequity in the broadband market is that there is a lack of competition, which has significantly contributed to the idea that net neutrality is even remotely a possibility. However, a non-neutral internet could very well backfire on those that want it most. Share your thoughts!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ferretarmy.com/2010/05/03/who-does-a-non-neutral-internet-benefit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ech, WordPress Hackery!</title>
		<link>http://www.ferretarmy.com/2010/04/27/ech-wordpress-hackery/</link>
		<comments>http://www.ferretarmy.com/2010/04/27/ech-wordpress-hackery/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 21:21:58 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Hack]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[haaack]]></category>

		<guid isPermaLink="false">http://www.ferretarmy.com/2010/04/27/ech-wordpress-hackery/</guid>
		<description><![CDATA[WordPress is a great platform &#8211; it&#8217;s easy to use, fast, reliable, and very popular. Unfortunately, that also makes it a big target for hackers. A few weeks ago, FerretArmy.com got hacked &#8211; essentially, it was serving malicious content from an injected iFrame. In addition, the administrative panel was intentionally broken in an effort to [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress is a great platform &#8211; it&#8217;s easy to use, fast, reliable, and very popular. Unfortunately, that also makes it a big target for hackers.<br />
A few weeks ago, FerretArmy.com got hacked &#8211; essentially, it was serving malicious content from an injected iFrame. In addition, the administrative panel was intentionally broken in an effort to make it harder to fix. The hack directly targeted the WordPress platform &#8211; there are millions of WordPress users, so it was likely an automated attack looking for a known vulnerability. I&#8217;m still unsure of the attack vector, though I believe it was most likely either through a plugin, or through a (hopefully patched) security hole in the framework itself.</p>
<p>In order to get the site back up and running, I had to physically comb through all the files in my site and remove all the bad code. It&#8217;s very apparent that the hack was scripted &#8211; it effectively added a single malicious line to every PHP file in the site. It was all reversible damage (with no data loss, thank goodness), but it still left me pretty upset.</p>
<p>In the end, I changed my passwords and made sure that everything was up to date (site and plugins), and the site has not suffered any similar misfortune since. Being hacked really sucks, and I have absolutely no respect for someone that would do such a thing. FerretArmy is a small fish in a big pond, but I try my hardest to deliver worthwhile content to my visitors. Having someone exploit this (for no real gain, let&#8217;s be serious here) is inexcusable.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ferretarmy.com/2010/04/27/ech-wordpress-hackery/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jQuery Image Overlay 1.3 Released</title>
		<link>http://www.ferretarmy.com/2010/03/29/jquery-image-overlay-1-3-released/</link>
		<comments>http://www.ferretarmy.com/2010/03/29/jquery-image-overlay-1-3-released/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 17:41:06 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[Image Overlay]]></category>

		<guid isPermaLink="false">http://www.ferretarmy.com/?p=509</guid>
		<description><![CDATA[There have been a distinct lack of updates recently on FerretArmy.com &#8211; chock it up to having to do a lot of work-induced overtime over the past few months. Either way, in order to usher in some fresher content, I&#8217;ve updated my Image Overlay plugin to version 1.3. Changes are that you no longer need [...]]]></description>
			<content:encoded><![CDATA[<p>There have been a distinct lack of updates recently on FerretArmy.com &#8211; chock it up to having to do a lot of work-induced overtime over the past few months. Either way, in order to usher in some fresher content, I&#8217;ve updated my Image Overlay plugin to <a href="http://www.ferretarmy.com/files/jQuery/ImageOverlay/ImageOverlay.html">version 1.3</a>. Changes are that you no longer need to specify image width and height, as well as being able to specify different animation speeds for the &#8216;in&#8217; and &#8216;out&#8217; animations.  Hope you enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ferretarmy.com/2010/03/29/jquery-image-overlay-1-3-released/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>jQuery 1.4 Released</title>
		<link>http://www.ferretarmy.com/2010/01/15/jquery-1-4-released/</link>
		<comments>http://www.ferretarmy.com/2010/01/15/jquery-1-4-released/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 18:18:07 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jQuery 1.4]]></category>

		<guid isPermaLink="false">http://www.ferretarmy.com/?p=506</guid>
		<description><![CDATA[jQuery 1.4 is officially out now! The jQuery team is in the process of doing a 14-days-of-jQuery-1.4 promotion, which will run through the 28th of January. This is a major release, with much of the jQuery framework being rewritten in addition to a lot of new functionality. The last major release of jQuery was in [...]]]></description>
			<content:encoded><![CDATA[<p>jQuery 1.4 is officially out now! The jQuery team is in the process of doing a <a href="http://jquery14.com/">14-days-of-jQuery-1.4</a> promotion, which will run through the 28th of January. This is a major release, with much of the jQuery framework being rewritten in addition to a lot of new functionality. The last major release of jQuery was in February 2009, so this has definitely been a long time coming (see my 1.4 preview post <a href="http://www.ferretarmy.com/2009/10/23/jquery-1-4-preview/">here</a>).</p>
<p>There&#8217;s a new set of <a href="http://api.jquery.com/category/version/1.4/">jQuery API</a> documentation, with a new look and some other enhancements. One thing I&#8217;m a big fan of is the ability to see when a particular function was added to jQuery &#8211; it&#8217;s very easy to hone in on the new stuff that way. One thing I feel is still missing is the abilityto jump directly to the function implementation in the library, like how the <a href="http://closure-library.googlecode.com/svn/trunk/closure/goog/docs/index.html">Google Closure API documentation</a> is setup.</p>
<p>Interestingly, the last day of the 14-days-of-jQuery-1.4 promotion will be the release of <a href="http://blog.jqueryui.com/2009/08/jquery-ui-18a1/">jQuery UI 1.8</a>. jQuery UI 1.8 is looking to be a smaller release &#8211; a bunch of bugfixes and few somewhat underwhelming plugins, as well as support for jQuery 1.4. There are a ton of great jQuery UI widgets and enhancements that are in the <a href="http://jqueryui.pbworks.com/">proposal and development stages</a>, but the pace of development has been very slow, which is disappointing. I&#8217;d very much like to see jQuery UI development kicked into high gear.</p>
<p>Overall, this is looking to be a great jQuery release. I&#8217;m impressed with the performance improvements (addClass is three times as fast now? amazing!), and the new functionality improves the experience dramatically. A lot of functionality that used to have to be gotten through plugins is now in the framework itself, which will be a boon to development. Check it out now!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ferretarmy.com/2010/01/15/jquery-1-4-released/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WordPress 2.9</title>
		<link>http://www.ferretarmy.com/2009/12/21/wordpress-2-9/</link>
		<comments>http://www.ferretarmy.com/2009/12/21/wordpress-2-9/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 14:26:52 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[wordpress 2.9]]></category>

		<guid isPermaLink="false">http://www.ferretarmy.com/?p=488</guid>
		<description><![CDATA[WordPress 2.9 is out! It&#8217;s got some cool new features &#8211; a trash bin, better support for video embedding (which has been a major pain in the past), and a bunch of new features. One of the best things I&#8217;ve seen in the update documentation is this: When you’re editing files in the theme and [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="224" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="flashvars" value="guid=NBZ853Xn&amp;width=500&amp;height=280" /><param name="src" value="http://v.wordpress.com/wp-content/plugins/video/flvplayer.swf?ver=1.11" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="400" height="224" src="http://v.wordpress.com/wp-content/plugins/video/flvplayer.swf?ver=1.11" allowfullscreen="true" flashvars="guid=NBZ853Xn&amp;width=500&amp;height=280"></embed></object></p>
<p style="text-align: left;">WordPress 2.9 is out! It&#8217;s got some cool new features &#8211; a trash bin, better support for video embedding (which has been a major pain in the past), and a bunch of new features. One of the best things I&#8217;ve seen in the <a href="http://wordpress.org/development/2009/12/wordpress-2-9/">update documentation</a> is this:</p>
<p style="text-align: left; padding-left: 30px;">When you’re editing files in the theme and plugin editors it remembers your location and takes you back to that line after you save. (Thank goodness!!!)</p>
<p style="text-align: left;">The &#8216;Thank goodness!!!&#8217; was their comment, not mine, which goes to show how annoying that bug was. Other than that, the built-in image editor is a pretty cool feature for on-the-go cropping and rotation, but time will tell whether I end up using it much. Either way, the upgrade process is a cinch, so it&#8217;s a no-brainer to get on the latest version of the greatest platform.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ferretarmy.com/2009/12/21/wordpress-2-9/feed/</wfw:commentRss>
		<slash:comments>4</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[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[javascript]]></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 UI ThemeRoller Should be Distributed</title>
		<link>http://www.ferretarmy.com/2009/11/01/jquery-ui-themeroller-should-be-distributed/</link>
		<comments>http://www.ferretarmy.com/2009/11/01/jquery-ui-themeroller-should-be-distributed/#comments</comments>
		<pubDate>Sun, 01 Nov 2009 20:38:59 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[ThemRoller]]></category>

		<guid isPermaLink="false">http://www.ferretarmy.com/?p=475</guid>
		<description><![CDATA[I use jQuery UI a lot. I&#8217;ve used it at work on internal projects, I&#8217;ve used it on some pages in ferretarmy.com, and it&#8217;s integral to blaqdesign.com. It&#8217;s a great set of rich UI controls and behaviors that work well and are easily integrated into a webpage. I can&#8217;t say enough about the toolset. However, [...]]]></description>
			<content:encoded><![CDATA[<p>I use <a href="http://jqueryui.com">jQuery UI</a> a lot. I&#8217;ve used it at work on internal projects, I&#8217;ve used it on some pages in <a href="http://www.ferretarmy.com">ferretarmy.com</a>, and it&#8217;s integral to <a href="http://www.blaqdesign.com">blaqdesign.com</a>. It&#8217;s a great set of rich UI controls and behaviors that work well and are easily integrated into a webpage. I can&#8217;t say enough about the toolset.</p>
<p>However, there&#8217;s a distinct point of failure of jQuery UI &#8211; <a href="http://jqueryui.com/themeroller/">ThemeRoller</a>. ThemeRoller is the tool that&#8217;s used to create a jQuery UI theme &#8211; without a theme, there&#8217;s a lot less to love about jQuery UI. None of the widgets and CSS styling are available (interactions and effects would still be available, though). This past week, though, ThemeRoller was down. Specifically, it was not outputting custom themes, though the default ones were working. It was down for about <a href="http://groups.google.com/group/jquery-ui/browse_thread/thread/e88fb20db74bf278/1451ed72e6c9ff65#1451ed72e6c9ff65">three days</a>, to be exact. This was a very big deal to me (amongst others, I&#8217;m certain) &#8211; I had to delay a production release because I couldn&#8217;t get a custom theme that I needed at the time.</p>
<p>There are a lot of reasons that ThemeRoller would be down, and it&#8217;s understandable that it will probably break at times as updates are made to it. The bad thing is that if ThemeRoller goes down, for whatever reason, there is no alternative available to create themes with. What I would like to see happen is there be established an alternate home for ThemeRoller. In addition, it should have an archive of all production versions of ThemeRoller. That way, if a bum version gets released for a few days, one can always use the previous version, which should work fine.</p>
<p>With these fairly trivial changes, jQuery UI would eliminate a point of failure. What could possibly be better than that?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ferretarmy.com/2009/11/01/jquery-ui-themeroller-should-be-distributed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery 1.4 Preview</title>
		<link>http://www.ferretarmy.com/2009/10/23/jquery-1-4-preview/</link>
		<comments>http://www.ferretarmy.com/2009/10/23/jquery-1-4-preview/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 20:02:05 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.ferretarmy.com/?p=470</guid>
		<description><![CDATA[I just found this preview of jQuery 1.4. I read some of this stuff at the jQuery site, but this is a nice explanation of the proposed functionality of the next major version of jQuery. I think the new &#8216;live&#8217; event handlers are going to be great. I can&#8217;t stress how much the &#8216;live&#8217; method [...]]]></description>
			<content:encoded><![CDATA[<p>I just found this <a href="http://www.myphpetc.com/2009/10/preview-of-whats-new-in-jquery-14.html">preview of jQuery 1.4</a>. I read some of this stuff at the jQuery site, but this is a nice explanation of the proposed functionality of the next major version of jQuery.</p>
<p>I think the new &#8216;live&#8217; event handlers are going to be great. I can&#8217;t stress how much the &#8216;live&#8217; method has helped my JavaScript development &#8211; it makes event binding much less of a chore when dynamically creating page content (especially for trivial things, like bindings for button hover behavior). One of the things I&#8217;ve disliked, though, is the change event of dropdowns isn&#8217;t able to be live captured, which has led me to use <a href="http://plugins.jquery.com/project/livequery/">Live Query</a> for those purposes. With 1.4, it can be done with jQuery alone.</p>
<p>It will certainly be interesting to see if the Lazy Load code is included, for on-the-fly .css and .js includes. By conditionally loading javascript and css, a lot of bandwidth could be conserved by choosing to defer file retrieval for little-used site features.</p>
<p>Some of the other cool new features will undoubtedly be radio classes and the offset get/set methods &#8211; I can see using those to save a few lines of code. I&#8217;m betting that there will also be some performance increases with 1.4, so I&#8217;m excited about the release, even if it&#8217;s release is still a few months off yet.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ferretarmy.com/2009/10/23/jquery-1-4-preview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
