<?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>The If Works &#187; Functional</title>
	<atom:link href="http://blog.jcoglan.com/category/functional/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.jcoglan.com</link>
	<description>This dirt was a building before</description>
	<lastBuildDate>Mon, 19 Jul 2010 07:46:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1-alpha-15443</generator>
		<item>
		<title>Evented programming patterns: Round-up</title>
		<link>http://blog.jcoglan.com/2010/02/26/evented-programming-patterns-round-up/</link>
		<comments>http://blog.jcoglan.com/2010/02/26/evented-programming-patterns-round-up/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 17:10:25 +0000</pubDate>
		<dc:creator>James Coglan</dc:creator>
				<category><![CDATA[Evented]]></category>
		<category><![CDATA[Faye]]></category>
		<category><![CDATA[Functional]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Lisp]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=623</guid>
		<description><![CDATA[This post is part of a series on event-driven programming. The complete series is: Events: they&#8217;re not just for the DOM, you know Observable objects Deferrable values Asynchronous methods Round-up and final remarks Over the last few articles, I&#8217;ve covered a few of the evented programming patterns I use most often. It&#8217;s by no means [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2010/02/26/evented-programming-patterns-round-up/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Evented programming patterns: Asynchronous methods</title>
		<link>http://blog.jcoglan.com/2010/02/24/evented-programming-patterns-asynchronous-methods/</link>
		<comments>http://blog.jcoglan.com/2010/02/24/evented-programming-patterns-asynchronous-methods/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 21:03:15 +0000</pubDate>
		<dc:creator>James Coglan</dc:creator>
				<category><![CDATA[Evented]]></category>
		<category><![CDATA[Functional]]></category>
		<category><![CDATA[JS.Class]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Node]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=602</guid>
		<description><![CDATA[This post is part of a series on event-driven programming. The complete series is: Events: they&#8217;re not just for the DOM, you know Observable objects Deferrable values Asynchronous methods Round-up and final remarks Building on the pattern for deferred processing that we just saw, asynchronous methods are typically used to return a value from a [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2010/02/24/evented-programming-patterns-asynchronous-methods/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Evented programming patterns: Deferrable values</title>
		<link>http://blog.jcoglan.com/2010/02/23/evented-programming-patterns-deferrable-values/</link>
		<comments>http://blog.jcoglan.com/2010/02/23/evented-programming-patterns-deferrable-values/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 12:48:51 +0000</pubDate>
		<dc:creator>James Coglan</dc:creator>
				<category><![CDATA[Evented]]></category>
		<category><![CDATA[Faye]]></category>
		<category><![CDATA[Functional]]></category>
		<category><![CDATA[JS.Class]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Node]]></category>
		<category><![CDATA[Ojay]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=577</guid>
		<description><![CDATA[This post is part of a series on event-driven programming. The complete series is: Events: they&#8217;re not just for the DOM, you know Observable objects Deferrable values Asynchronous methods Round-up and final remarks The Deferrable pattern is a specialisation of observable objects that mixes state into the event dispatch process. The goal is to encapsulate [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2010/02/23/evented-programming-patterns-deferrable-values/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Evented programming patterns: Observable objects</title>
		<link>http://blog.jcoglan.com/2010/02/22/evented-programming-patterns-observable-object/</link>
		<comments>http://blog.jcoglan.com/2010/02/22/evented-programming-patterns-observable-object/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 14:37:41 +0000</pubDate>
		<dc:creator>James Coglan</dc:creator>
				<category><![CDATA[Evented]]></category>
		<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=559</guid>
		<description><![CDATA[This post is part of a series on event-driven programming. The complete series is: Events: they&#8217;re not just for the DOM, you know Observable objects Deferrable values Asynchronous methods Round-up and final remarks As I mentioned in the previous article, events are not things that only live in the DOM. An event is simply a [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2010/02/22/evented-programming-patterns-observable-object/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Events: they&#8217;re not just for the DOM, you know</title>
		<link>http://blog.jcoglan.com/2010/02/21/events-theyre-not-just-for-the-dom-you-know/</link>
		<comments>http://blog.jcoglan.com/2010/02/21/events-theyre-not-just-for-the-dom-you-know/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 16:42:15 +0000</pubDate>
		<dc:creator>James Coglan</dc:creator>
				<category><![CDATA[Evented]]></category>
		<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=533</guid>
		<description><![CDATA[This post is part of a series on event-driven programming. The complete series is: Events: they&#8217;re not just for the DOM, you know Observable objects Deferrable values Asynchronous methods Round-up and final remarks Over recent months we&#8217;ve seen the major JavaScript libraries talking up their event support. Back in October Luke Smith spoke about the [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2010/02/21/events-theyre-not-just-for-the-dom-you-know/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Faye: a Comet client and server for Node.js and Rack</title>
		<link>http://blog.jcoglan.com/2010/02/02/faye-a-comet-client-and-server-for-node-js-and-rack/</link>
		<comments>http://blog.jcoglan.com/2010/02/02/faye-a-comet-client-and-server-for-node-js-and-rack/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 23:21:00 +0000</pubDate>
		<dc:creator>James Coglan</dc:creator>
				<category><![CDATA[Evented]]></category>
		<category><![CDATA[Faye]]></category>
		<category><![CDATA[Functional]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Node]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=526</guid>
		<description><![CDATA[I&#8217;m doing my traditional birthday software announcement a little early this year, mostly because I really want to get this out and partly because I&#8217;m doing a lot of little bits of work on old projects at the moment and this is the only fancy new thing I&#8217;ve got to show. Spurred on by the [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2010/02/02/faye-a-comet-client-and-server-for-node-js-and-rack/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Adding a dynamic defmacro to Heist</title>
		<link>http://blog.jcoglan.com/2010/01/20/adding-a-dynamic-defmacro-to-heist/</link>
		<comments>http://blog.jcoglan.com/2010/01/20/adding-a-dynamic-defmacro-to-heist/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 00:18:45 +0000</pubDate>
		<dc:creator>James Coglan</dc:creator>
				<category><![CDATA[Functional]]></category>
		<category><![CDATA[Heist]]></category>
		<category><![CDATA[Lisp]]></category>
		<category><![CDATA[Metaprogramming]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=511</guid>
		<description><![CDATA[I&#8217;ve just picked up the opening chapters of Let Over Lambda, which describes itself as a book on macro programming &#8211; particularly Common Lisp macro programming. One of the early macros given in the book is unit-of-time which looks like this: (defmacro unit-of-time (value unit) `(* ,value ,(case unit ((s) 1) ((m) 60) ((h) 3600) [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2010/01/20/adding-a-dynamic-defmacro-to-heist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Load everything asynchronously</title>
		<link>http://blog.jcoglan.com/2009/12/18/load-everything-asynchronously/</link>
		<comments>http://blog.jcoglan.com/2009/12/18/load-everything-asynchronously/#comments</comments>
		<pubDate>Fri, 18 Dec 2009 13:45:15 +0000</pubDate>
		<dc:creator>James Coglan</dc:creator>
				<category><![CDATA[Functional]]></category>
		<category><![CDATA[Helium]]></category>
		<category><![CDATA[JS.Class]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Metaprogramming]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=476</guid>
		<description><![CDATA[A couple weeks ago there was rather a lot of excitement over the fact that Google released a new Analytics snippet that loads the tracking library asynchronously. This is indeed great news, for reasons pored over in the aforelinked articles. But let&#8217;s take a closer look at Google&#8217;s implementation: var _gaq = _gaq &#124;&#124; []; [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2009/12/18/load-everything-asynchronously/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Heist 0.3: complete set of Scheme data types</title>
		<link>http://blog.jcoglan.com/2009/08/24/heist-03-complete-set-of-scheme-data-types/</link>
		<comments>http://blog.jcoglan.com/2009/08/24/heist-03-complete-set-of-scheme-data-types/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 22:17:03 +0000</pubDate>
		<dc:creator>James Coglan</dc:creator>
				<category><![CDATA[Functional]]></category>
		<category><![CDATA[Heist]]></category>
		<category><![CDATA[Lisp]]></category>
		<category><![CDATA[Metaprogramming]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=389</guid>
		<description><![CDATA[I actually tagged the 0.3.0 release of Heist, my Ruby Scheme implementation, about a month back, mostly to get it off my desk for a while. I&#8217;ve made a few minor tweaks and released 0.3.1 over the weekend, so now&#8217;s as good a time as any to go over what&#8217;s new. The major milestone for [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2009/08/24/heist-03-complete-set-of-scheme-data-types/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Talk: Writing a language in 15 minutes</title>
		<link>http://blog.jcoglan.com/2009/05/19/talk-writing-a-language-in-15-minutes/</link>
		<comments>http://blog.jcoglan.com/2009/05/19/talk-writing-a-language-in-15-minutes/#comments</comments>
		<pubDate>Tue, 19 May 2009 22:03:58 +0000</pubDate>
		<dc:creator>James Coglan</dc:creator>
				<category><![CDATA[Functional]]></category>
		<category><![CDATA[Heist]]></category>
		<category><![CDATA[Lisp]]></category>
		<category><![CDATA[Math]]></category>
		<category><![CDATA[Metaprogramming]]></category>
		<category><![CDATA[Prototype]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Talks]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=311</guid>
		<description><![CDATA[I gave a talk at London Ruby User Group yesterday, based on the work I&#8217;ve been doing on Heist, my Scheme interpreter project. I wrote the core of a basic Scheme interpreter in about 15 minutes as a live-coded demo (well, kind of &#8211; the coding was pre-recorded so I could focus on talking), which [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2009/05/19/talk-writing-a-language-in-15-minutes/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>April fool: area man releases world&#8217;s slowest Scheme interpreter</title>
		<link>http://blog.jcoglan.com/2009/04/02/april-fool-area-man-releases-worlds-slowest-scheme-interpreter/</link>
		<comments>http://blog.jcoglan.com/2009/04/02/april-fool-area-man-releases-worlds-slowest-scheme-interpreter/#comments</comments>
		<pubDate>Thu, 02 Apr 2009 00:29:28 +0000</pubDate>
		<dc:creator>James Coglan</dc:creator>
				<category><![CDATA[Functional]]></category>
		<category><![CDATA[Heist]]></category>
		<category><![CDATA[Lisp]]></category>
		<category><![CDATA[Metaprogramming]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=284</guid>
		<description><![CDATA[With apologies to the ever-entertaining Onion, I&#8217;m announcing the 0.2.0 release of Heist, henceforth to be known as &#8220;the one with the lists&#8221;. To recap, Heist is a Scheme interpreter I&#8217;m writing in Ruby in order to teach myself a few things about how languages work while I read Structure and Interpretation of Computer Programs [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2009/04/02/april-fool-area-man-releases-worlds-slowest-scheme-interpreter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Announcing Heist, a new Scheme implementation written in Ruby</title>
		<link>http://blog.jcoglan.com/2009/02/25/announcing-heist-a-new-scheme-implementation-written-in-ruby/</link>
		<comments>http://blog.jcoglan.com/2009/02/25/announcing-heist-a-new-scheme-implementation-written-in-ruby/#comments</comments>
		<pubDate>Wed, 25 Feb 2009 00:11:21 +0000</pubDate>
		<dc:creator>James Coglan</dc:creator>
				<category><![CDATA[Functional]]></category>
		<category><![CDATA[Heist]]></category>
		<category><![CDATA[Lisp]]></category>
		<category><![CDATA[Metaprogramming]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=269</guid>
		<description><![CDATA[There seems to be a tradition of some two years&#8217; standing that dictates I must release some piece of open source software on or around my birthday. A couple of years ago it was Flagger, a Rails plugin for doing useful things with boolean &#8216;flag&#8217; columns in your database, and last year it was (with [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2009/02/25/announcing-heist-a-new-scheme-implementation-written-in-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>And now, the rules</title>
		<link>http://blog.jcoglan.com/2009/01/16/and-now-the-rules/</link>
		<comments>http://blog.jcoglan.com/2009/01/16/and-now-the-rules/#comments</comments>
		<pubDate>Fri, 16 Jan 2009 00:35:04 +0000</pubDate>
		<dc:creator>James Coglan</dc:creator>
				<category><![CDATA[Consent]]></category>
		<category><![CDATA[Functional]]></category>
		<category><![CDATA[Metaprogramming]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=241</guid>
		<description><![CDATA[In my last post I wrote about how to write your own mini-language in Ruby by abusing method_missing and operator overloading. I know, I know, it totally blew your mind and whatever, but I missed out this huge part of the language I was demonstrating: the rules. And without the rules, all it&#8217;s good for [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2009/01/16/and-now-the-rules/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Consent: a little firewall DSL for your Rails app</title>
		<link>http://blog.jcoglan.com/2009/01/03/consent-a-little-firewall-dsl-for-your-rails-app/</link>
		<comments>http://blog.jcoglan.com/2009/01/03/consent-a-little-firewall-dsl-for-your-rails-app/#comments</comments>
		<pubDate>Sat, 03 Jan 2009 17:13:06 +0000</pubDate>
		<dc:creator>James Coglan</dc:creator>
				<category><![CDATA[Consent]]></category>
		<category><![CDATA[Functional]]></category>
		<category><![CDATA[Metaprogramming]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=188</guid>
		<description><![CDATA[Well, it&#8217;s been a couple of months. Rest assured I&#8217;ve still been hacking away; JS.Class will be getting hashes and constants at some point in the future, I&#8217;ve got a bunch of improvements to make on Bluff, and I&#8217;ve been contributing to PDoc which is a really promising JavaScript doc engine from Tobie Langel that [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2009/01/03/consent-a-little-firewall-dsl-for-your-rails-app/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Where did all my code go? Using Ojay chains to express yourself clearly</title>
		<link>http://blog.jcoglan.com/2008/07/16/where-did-all-my-code-go-using-ojay-chains-to-express-yourself-clearly/</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 Coglan</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>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
