<?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; Metaprogramming</title>
	<atom:link href="http://blog.jcoglan.com/category/metaprogramming/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>Terminus: control your browser from the command line</title>
		<link>http://blog.jcoglan.com/2010/04/05/terminus-control-your-browser-from-the-command-line/</link>
		<comments>http://blog.jcoglan.com/2010/04/05/terminus-control-your-browser-from-the-command-line/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 18:33:23 +0000</pubDate>
		<dc:creator>James Coglan</dc:creator>
				<category><![CDATA[Evented]]></category>
		<category><![CDATA[Faye]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Metaprogramming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Terminus]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=673</guid>
		<description><![CDATA[I&#8217;ve been saying for a while that I want to use Faye for automating JavaScript and integration testing, especially now that it has server-side clients. Well I took the first step in that direction this afternoon by hacking together Terminus, a distributed JavaScript console. You just install and run like so: $ sudo gem install [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2010/04/05/terminus-control-your-browser-from-the-command-line/feed/</wfw:commentRss>
		<slash:comments>3</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>Cross-process metaprogramming on the cheap</title>
		<link>http://blog.jcoglan.com/2010/01/14/cross-process-metaprogramming-on-the-cheap/</link>
		<comments>http://blog.jcoglan.com/2010/01/14/cross-process-metaprogramming-on-the-cheap/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 01:30:33 +0000</pubDate>
		<dc:creator>James Coglan</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Metaprogramming]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=503</guid>
		<description><![CDATA[I will preface my first post of the new decade by saying: this is not by any means elegant. It&#8217;s an egregious hack, but it may come in handy for those of you using Culerity for testing your Rails front-end using JavaScript. This is not so much about JavaScript as about dealing with the multitude [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2010/01/14/cross-process-metaprogramming-on-the-cheap/feed/</wfw:commentRss>
		<slash:comments>1</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>Helium: a package server for JavaScript</title>
		<link>http://blog.jcoglan.com/2009/11/02/helium-a-package-server-for-javascript/</link>
		<comments>http://blog.jcoglan.com/2009/11/02/helium-a-package-server-for-javascript/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 23:32:02 +0000</pubDate>
		<dc:creator>James Coglan</dc:creator>
				<category><![CDATA[Git]]></category>
		<category><![CDATA[Helium]]></category>
		<category><![CDATA[JS.Class]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Metaprogramming]]></category>
		<category><![CDATA[Ojay]]></category>
		<category><![CDATA[PackR]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Yahoo! UI]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=435</guid>
		<description><![CDATA[Last week, my former employer theOTHERmedia open-sourced the last project I worked on there: Helium. It&#8217;s a web application that lets you deploy JavaScript packages from Git and load them on-demand into any website by including a single script tag. There&#8217;s been a lot of innovation in JavaScript deployment recently, and Helium fits a particular [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2009/11/02/helium-a-package-server-for-javascript/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Getting started with Cucumber, RSpec, Webrat and multiruby</title>
		<link>http://blog.jcoglan.com/2009/10/03/getting-started-with-cucumber-rspec-webrat-and-multiruby/</link>
		<comments>http://blog.jcoglan.com/2009/10/03/getting-started-with-cucumber-rspec-webrat-and-multiruby/#comments</comments>
		<pubDate>Sat, 03 Oct 2009 13:24:47 +0000</pubDate>
		<dc:creator>James Coglan</dc:creator>
				<category><![CDATA[Metaprogramming]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=410</guid>
		<description><![CDATA[.cuke-pass { color: #4e9a06; } .cuke-fail { color: #d73734; } .cuke-pending { color: #c4a000; } .cuke-skipped { color: #06989a; } After a couple years off from full-time Ruby/Rails work, I&#8217;m getting back into it having just joined the development team at Songkick. Much as I&#8217;ve tried to keep my hand in with the Ruby world [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2009/10/03/getting-started-with-cucumber-rspec-webrat-and-multiruby/feed/</wfw:commentRss>
		<slash:comments>6</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>When bugs become features</title>
		<link>http://blog.jcoglan.com/2009/06/06/when-bugs-become-features/</link>
		<comments>http://blog.jcoglan.com/2009/06/06/when-bugs-become-features/#comments</comments>
		<pubDate>Sat, 06 Jun 2009 09:14:39 +0000</pubDate>
		<dc:creator>James Coglan</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=345</guid>
		<description><![CDATA[Been a while since we had a good rant, what with Zed calming down and Giles talking about winding up his blog. I had a great post lined up on browser performance and why all the advice you&#8217;ve heard is wrong and so on and so on, and I&#8217;d gathered tons of data and sunk [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2009/06/06/when-bugs-become-features/feed/</wfw:commentRss>
		<slash:comments>1</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>Writing your own expression language in Ruby</title>
		<link>http://blog.jcoglan.com/2009/01/07/writing-your-own-expression-language-in-ruby/</link>
		<comments>http://blog.jcoglan.com/2009/01/07/writing-your-own-expression-language-in-ruby/#comments</comments>
		<pubDate>Wed, 07 Jan 2009 00:12:53 +0000</pubDate>
		<dc:creator>James Coglan</dc:creator>
				<category><![CDATA[Consent]]></category>
		<category><![CDATA[Metaprogramming]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.jcoglan.com/?p=212</guid>
		<description><![CDATA[The last few days, I&#8217;ve been writing Consent, a tool for writing declarative firewalls for Rails apps. I thought it would be interesting to dig into its implementation now that the code&#8217;s settled down, as it&#8217;s one of the more complicated DSLs I&#8217;ve written, and certainly the first one that makes decent use of Ruby&#8217;s [...]]]></description>
		<wfw:commentRss>http://blog.jcoglan.com/2009/01/07/writing-your-own-expression-language-in-ruby/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>New possibilities with modules in JS.Class 2.0</title>
		<link>http://blog.jcoglan.com/2008/10/28/new-possibilities-with-modules-in-jsclass-20/</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 Coglan</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>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
