<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>The If Works</title>
	
	<link>http://blog.jcoglan.com</link>
	<description>This dirt was a building before</description>
	<pubDate>Tue, 28 Oct 2008 08:35:56 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/theifworks" type="application/rss+xml" /><item>
		<title>New possibilities with modules in JS.Class 2.0</title>
		<link>http://feeds.feedburner.com/~r/theifworks/~3/434484768/</link>
		<comments>http://blog.jcoglan.com/2008/10/28/new-possibilities-with-modules-in-jsclass-20/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 08:35:56 +0000</pubDate>
		<dc:creator>James</dc:creator>
		
		<category><![CDATA[JS.Class]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Metaprogramming]]></category>

		<category><![CDATA[Ojay]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=130</guid>
		<description><![CDATA[It&#8217;s been out and about a couple months now, and I&#8217;ve been putting it to good use in the upcoming release of Ojay. The new version (fingers crossed it&#8217;ll be out by the end of the month) features an extension to the custom event system that lets events published using Observable &#8216;bubble&#8217; up the type [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2008/10/28/new-possibilities-with-modules-in-jsclass-20/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.jcoglan.com/2008/10/28/new-possibilities-with-modules-in-jsclass-20/</feedburner:origLink></item>
		<item>
		<title>Bug fix updates for Bluff and JS.Class</title>
		<link>http://feeds.feedburner.com/~r/theifworks/~3/408674774/</link>
		<comments>http://blog.jcoglan.com/2008/10/01/bug-fix-updates-for-bluff-and-jsclass/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 22:48:57 +0000</pubDate>
		<dc:creator>James</dc:creator>
		
		<category><![CDATA[Bluff]]></category>

		<category><![CDATA[JS.Class]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Ojay]]></category>

		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=171</guid>
		<description><![CDATA[First off, let me say that the response to the release of Bluff over the last couple of weeks has been astonishing, due in no small part to a helpful link from John Gruber. Thanks to everyone who&#8217;s reported bugs and suggested features; some of these have now been fixed but others will need to [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2008/10/01/bug-fix-updates-for-bluff-and-jsclass/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.jcoglan.com/2008/10/01/bug-fix-updates-for-bluff-and-jsclass/</feedburner:origLink></item>
		<item>
		<title>Announcing Bluff, plus a few other project updates</title>
		<link>http://feeds.feedburner.com/~r/theifworks/~3/392592093/</link>
		<comments>http://blog.jcoglan.com/2008/09/14/announcing-bluff-plus-a-few-other-project-updates/#comments</comments>
		<pubDate>Sun, 14 Sep 2008 20:58:25 +0000</pubDate>
		<dc:creator>James</dc:creator>
		
		<category><![CDATA[Bluff]]></category>

		<category><![CDATA[JS.Class]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[PackR]]></category>

		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=162</guid>
		<description><![CDATA[I put out a few new software releases over the last few days, and thought I&#8217;d gather them into one post rather than lots of little ones. Let&#8217;s start with the biggest.
Update: for those wishing to contribute bug reports (as failing test cases) and patches, Bluff is hosted on Github.
In what can only be described [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2008/09/14/announcing-bluff-plus-a-few-other-project-updates/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.jcoglan.com/2008/09/14/announcing-bluff-plus-a-few-other-project-updates/</feedburner:origLink></item>
		<item>
		<title>Enumerable#to_hash for Unix-style flags in Ruby methods</title>
		<link>http://feeds.feedburner.com/~r/theifworks/~3/386950339/</link>
		<comments>http://blog.jcoglan.com/2008/09/08/enumerableto_hash-for-unix-style-flags-in-ruby-methods/#comments</comments>
		<pubDate>Mon, 08 Sep 2008 19:37:45 +0000</pubDate>
		<dc:creator>James</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=153</guid>
		<description><![CDATA[A question came up on the Ruby mailing list today about how one might pass boolean flags in an option hash to a Ruby method, without having to explicitly declare them as true. To clarify, here&#8217;s the original question from Woody Peterson:

I have a unix-inspired desire to pass arguments to a method where some are [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2008/09/08/enumerableto_hash-for-unix-style-flags-in-ruby-methods/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.jcoglan.com/2008/09/08/enumerableto_hash-for-unix-style-flags-in-ruby-methods/</feedburner:origLink></item>
		<item>
		<title>Checking your JavaScript for variable leaks</title>
		<link>http://feeds.feedburner.com/~r/theifworks/~3/370927833/</link>
		<comments>http://blog.jcoglan.com/2008/08/21/checking-your-javascript-for-variable-leaks/#comments</comments>
		<pubDate>Thu, 21 Aug 2008 13:26:36 +0000</pubDate>
		<dc:creator>James</dc:creator>
		
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=124</guid>
		<description><![CDATA[Ah, global variables, the bain of any JavaScript developer&#8217;s working life. Especially if you&#8217;re in the business of writing a library, you want to minimise the number of global vars your code produces so as to minimise the potential for conflicts with other scripts running in the same environment. It&#8217;s all too easy to miss [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2008/08/21/checking-your-javascript-for-variable-leaks/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.jcoglan.com/2008/08/21/checking-your-javascript-for-variable-leaks/</feedburner:origLink></item>
		<item>
		<title>JS.Class 2.0, now with even more Ruby-ness</title>
		<link>http://feeds.feedburner.com/~r/theifworks/~3/363874662/</link>
		<comments>http://blog.jcoglan.com/2008/08/13/jsclass-20-now-with-even-more-ruby-ness/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 13:04:29 +0000</pubDate>
		<dc:creator>James</dc:creator>
		
		<category><![CDATA[JS.Class]]></category>

		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=116</guid>
		<description><![CDATA[A couple of months ago, I began a complete rewrite of JS.Class, as I&#8217;d become dissatisfied at some of its incompatibilities with Ruby, specifically with respect to module support. The 1.x series supported mixins in a reasonable way, but would not allow callSuper() to call methods from mixins. There were also a number of issues [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2008/08/13/jsclass-20-now-with-even-more-ruby-ness/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.jcoglan.com/2008/08/13/jsclass-20-now-with-even-more-ruby-ness/</feedburner:origLink></item>
		<item>
		<title>Where did all my code go? Using Ojay chains to express yourself clearly</title>
		<link>http://feeds.feedburner.com/~r/theifworks/~3/337139966/</link>
		<comments>http://blog.jcoglan.com/2008/07/16/where-did-all-my-code-go-using-ojay-chains-to-express-yourself-clearly/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 14:59:13 +0000</pubDate>
		<dc:creator>James</dc:creator>
		
		<category><![CDATA[ChainCollector]]></category>

		<category><![CDATA[Functional]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Ojay]]></category>

		<category><![CDATA[Yahoo! UI]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=113</guid>
		<description><![CDATA[I&#8217;ve been putting together a presentation to be given internally at work on what Ojay is and why we&#8217;re doing it. It occurred to me that I&#8217;ve not spoken very much about it here, hoping the documentation and examples would speak for themselves. So, today I&#8217;m going to go through how to take an animation [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2008/07/16/where-did-all-my-code-go-using-ojay-chains-to-express-yourself-clearly/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.jcoglan.com/2008/07/16/where-did-all-my-code-go-using-ojay-chains-to-express-yourself-clearly/</feedburner:origLink></item>
		<item>
		<title>Brain teaser</title>
		<link>http://feeds.feedburner.com/~r/theifworks/~3/329643348/</link>
		<comments>http://blog.jcoglan.com/2008/07/08/brain-teaser/#comments</comments>
		<pubDate>Tue, 08 Jul 2008 08:53:21 +0000</pubDate>
		<dc:creator>James</dc:creator>
		
		<category><![CDATA[Functional]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Ojay]]></category>

		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=112</guid>
		<description><![CDATA[In response to Dustin Diaz (you&#8217;ll need a JavaScript 1.8 capable browser, or Ojay):
var arr = ['a', 'b', 'c', 'c', 'd','e', 'e',
'e', 'e', 'e', 'f', 'e', 'f', 'e',
'f', 'a', 'a', 'a', 'f', 'f', 'f'];

arr.reduce(function(memo, letter) {
    var last = memo[memo.length - 1];
    if (!last &#124;&#124; last[0] != letter) memo.push([letter]);
 [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2008/07/08/brain-teaser/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.jcoglan.com/2008/07/08/brain-teaser/</feedburner:origLink></item>
		<item>
		<title>Git history rewriting</title>
		<link>http://feeds.feedburner.com/~r/theifworks/~3/327585973/</link>
		<comments>http://blog.jcoglan.com/2008/07/05/git-history-rewriting/#comments</comments>
		<pubDate>Sat, 05 Jul 2008 20:19:42 +0000</pubDate>
		<dc:creator>James</dc:creator>
		
		<category><![CDATA[Git]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=111</guid>
		<description><![CDATA[A little off-topic, but I just spent hours trying to get this to work. Basically, I&#8217;m moving a bunch of Rails plugins over to github and need to edit the history to move all files up one level. For example, PackR looks like this in SVN:
trunk
  packr
    lib
    [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2008/07/05/git-history-rewriting/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.jcoglan.com/2008/07/05/git-history-rewriting/</feedburner:origLink></item>
		<item>
		<title>Inheritance, revisited</title>
		<link>http://feeds.feedburner.com/~r/theifworks/~3/325863198/</link>
		<comments>http://blog.jcoglan.com/2008/07/03/inheritance-revisited/#comments</comments>
		<pubDate>Thu, 03 Jul 2008 15:14:28 +0000</pubDate>
		<dc:creator>James</dc:creator>
		
		<category><![CDATA[JS.Class]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Metaprogramming]]></category>

		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=110</guid>
		<description><![CDATA[Late last year, I wrote a piece titled &#8220;Where&#8217;s my inheritance&#8220;, in which I argued against the inheritance implementation of various JavaScript libraries. I&#8217;ve recently been working on a rewrite of JS.Class that is much more Ruby-like, and it&#8217;s caused me to re-examine my thoughts on this issue.
With JS.Class 1.x, I made the conscious decision [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2008/07/03/inheritance-revisited/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.jcoglan.com/2008/07/03/inheritance-revisited/</feedburner:origLink></item>
		<item>
		<title>There is no such thing as a JavaScript plugin</title>
		<link>http://feeds.feedburner.com/~r/theifworks/~3/325015872/</link>
		<comments>http://blog.jcoglan.com/2008/07/02/there-is-no-such-thing-as-a-javascript-plugin/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 16:31:05 +0000</pubDate>
		<dc:creator>James</dc:creator>
		
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=106</guid>
		<description><![CDATA[One thing that you often hear people say about jQuery is that is has a neat plugin mechanism. It&#8217;s true there are a great many useful plugins available for jQuery and it makes them super-easy to write, but I want to let you in on a little secret:
jQuery.fn = jQuery.prototype;
That is jQuery&#8217;s plugin mechanism in [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2008/07/02/there-is-no-such-thing-as-a-javascript-plugin/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.jcoglan.com/2008/07/02/there-is-no-such-thing-as-a-javascript-plugin/</feedburner:origLink></item>
		<item>
		<title>Ojay 0.2.0: easy keyboarding, a validation DSL, and two new UI widgets</title>
		<link>http://feeds.feedburner.com/~r/theifworks/~3/311290879/</link>
		<comments>http://blog.jcoglan.com/2008/06/13/ojay-020-easy-keyboarding-a-validation-dsl-and-two-new-ui-widgets/#comments</comments>
		<pubDate>Fri, 13 Jun 2008 17:34:20 +0000</pubDate>
		<dc:creator>James</dc:creator>
		
		<category><![CDATA[Functional]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Ojay]]></category>

		<category><![CDATA[Yahoo! UI]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=109</guid>
		<description><![CDATA[It&#8217;s been about four months since our last release (and I really did want this to happen about a month ago, but I&#8217;ve only so much time), and now we have a new version of Ojay for you to download and play around with. It&#8217;s a drop-in replacement for 0.1.x so you really have no [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2008/06/13/ojay-020-easy-keyboarding-a-validation-dsl-and-two-new-ui-widgets/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.jcoglan.com/2008/06/13/ojay-020-easy-keyboarding-a-validation-dsl-and-two-new-ui-widgets/</feedburner:origLink></item>
		<item>
		<title>Dispatching YouTube API events to individual JavaScript objects</title>
		<link>http://feeds.feedburner.com/~r/theifworks/~3/296018742/</link>
		<comments>http://blog.jcoglan.com/2008/05/22/dispatching-youtube-api-events-to-individual-javascript-objects/#comments</comments>
		<pubDate>Thu, 22 May 2008 18:49:38 +0000</pubDate>
		<dc:creator>James</dc:creator>
		
		<category><![CDATA[Functional]]></category>

		<category><![CDATA[JS.Class]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Ojay]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=107</guid>
		<description><![CDATA[Last week, I had the enviable task of creating a skinnable version of the YouTube player using JavaScript; something that would drop some HTML into the page that could be styled using CSS. Naturally, I wanted to package it up as a reusable class so you could, if required, create several videos on a single [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2008/05/22/dispatching-youtube-api-events-to-individual-javascript-objects/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.jcoglan.com/2008/05/22/dispatching-youtube-api-events-to-individual-javascript-objects/</feedburner:origLink></item>
		<item>
		<title>Another super-tiny Rails plugin: classy_inputs</title>
		<link>http://feeds.feedburner.com/~r/theifworks/~3/292760609/</link>
		<comments>http://blog.jcoglan.com/2008/05/18/another-super-tiny-rails-plugin-classy_inputs/#comments</comments>
		<pubDate>Sun, 18 May 2008 10:04:52 +0000</pubDate>
		<dc:creator>James</dc:creator>
		
		<category><![CDATA[Rails]]></category>

		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=105</guid>
		<description><![CDATA[Good lord do I ever hate input tags. (YUI hates them too, but I&#8217;ll leave that story for another time). All the different types should really have been different tag names, and they are a total pain to use with CSS. As such, I used to end up doing tedious stuff like adding a :class [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2008/05/18/another-super-tiny-rails-plugin-classy_inputs/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.jcoglan.com/2008/05/18/another-super-tiny-rails-plugin-classy_inputs/</feedburner:origLink></item>
		<item>
		<title>Anything that can be automated should be</title>
		<link>http://feeds.feedburner.com/~r/theifworks/~3/288292238/</link>
		<comments>http://blog.jcoglan.com/2008/05/11/anything-that-can-be-automated-should-be/#comments</comments>
		<pubDate>Sun, 11 May 2008 22:35:55 +0000</pubDate>
		<dc:creator>James</dc:creator>
		
		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Ojay]]></category>

		<category><![CDATA[Yahoo! UI]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=104</guid>
		<description><![CDATA[I&#8217;ve been using a few bits of YUI&#8217;s widget library lately and am constantly surprised by the markup requirements they list in the examples. For example, if you want a text field to be autocompletable, you need to use the following markup:
&#60;div id="myAutoComplete"&#62;
    &#60;input id="myInput" type="text"&#62;
    &#60;div id="myContainer"&#62;&#60;/div&#62;
&#60;/div&#62;
Given their [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2008/05/11/anything-that-can-be-automated-should-be/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.jcoglan.com/2008/05/11/anything-that-can-be-automated-should-be/</feedburner:origLink></item>
	</channel>
</rss>
