<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>On Clojure &#187; General</title>
	<atom:link href="http://onclojure.com/category/general/feed/" rel="self" type="application/rss+xml" />
	<link>http://onclojure.com</link>
	<description>A blog about everything Clojure</description>
	<lastBuildDate>Thu, 24 May 2012 05:49:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='onclojure.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>On Clojure &#187; General</title>
		<link>http://onclojure.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://onclojure.com/osd.xml" title="On Clojure" />
	<atom:link rel='hub' href='http://onclojure.com/?pushpress=hub'/>
		<item>
		<title>Generating deftype forms in macros</title>
		<link>http://onclojure.com/2010/02/23/generating-deftype-forms-in-macros/</link>
		<comments>http://onclojure.com/2010/02/23/generating-deftype-forms-in-macros/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 14:36:39 +0000</pubDate>
		<dc:creator>khinsen</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://onclojure.com/?p=86</guid>
		<description><![CDATA[One of the common uses of macros in Clojure, as in other Lisp dialects, is to abstract away boilerplate code. Instead of writing very similar lengthy forms several times, one defines a macro that specializes a template for each particular use, and then uses that macro a few times. The template is usually written using [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=onclojure.com&#038;blog=5872423&#038;post=86&#038;subd=onclojure&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>One of the common uses of macros in Clojure, as in other Lisp dialects, is to abstract away boilerplate code. Instead of writing very similar lengthy forms several times, one defines a macro that specializes a template for each particular use, and then uses that macro a few times. The template is usually written using <a href="http://clojure.org/reader#The%20Reader--Macro%20characters">syntax-quote</a>: the template form is preceded by a backquote, and inside the template a tilde marks expressions that are replaced by their values.</p>
<p>Syntax-quote has one more effect: it resolves all symbols in the current namespace (the one in which the macro is <em>defined</em>, not the one where it is used) and replaces the unqualified symbol by its namespace-qualified equivalent. For most symbols in most forms, this is the right thing to do in order to make the macro work in any namespace, as well as to avoid unwanted variable capture. More specifically, it is the right thing to do for symbols that are defined by the macro, and for symbols that will ultimately be evaluated (names referring to vars, in particular function names). It is not the right thing to do for symbols bound locally inside the form (function parameter names, symbols bound in a let form). And it is also not the right thing to do for symbols that just stand for themselves and are used in some special way by the form that the macro expands to.</p>
<p>The latter situation is particularly frequent in macros that generate <a href="http://www.assembla.com/wiki/show/clojure/Datatypes"><code>deftype</code></a> forms. Consider for example the following <code>deftype</code> form, which is a simplified version of the type definition used in my <a href="http://code.google.com/p/clj-multiarray/">multiarray design study</a>:</p>
<pre>
(deftype multiarray

  [descriptor
   data-array]
  :as this

  Object
    (equals [o] ...)
    (hashCode [] ...)

   clojure.lang.Counted
     (count [] ...)

   clojure.lang.Indexed
     (nth [i] ..)

   clojure.lang.Sequential

   clojure.lang.Seqable
     (seq [] ...))
</pre>
<p>Of all the symbols shown in the above example, the only one for which namespace-resolution is appropriate is <code>multiarray</code>, the name of the type being defined. All the other symbols name fields of the type, Java interfaces, or methods. They must remain unqualified. In real-life deftypes, there are of course symbols that could or should be namespace-qualified, in particular most of the symbols used inside the method definitions, which are just like function definitions. However, method definitions are often short, and rarely subject to variable capture, meaning that not namespace-resolving those symbols is rarely a problem.</p>
<p>In a syntax-quote template, there are two ways to deal with symbols for which the default (namespace-resolution) is not appropriate:</p>
<ul>
<li>Prefixing with <code>~'</code> (tilde + quote). This is a special case of an expression inside a template, whose value is the quoted symbol. A tilde-quoted symbol is taken over into the instantiated template without namespace-resolution.</li>
<li>Postfixing with <code>#</code> (hash sign). Such symbols are replaced with system-generated symbols that are guaranteed to be different from any other symbol in existence. This is another technique to avoid variable capture.</li>
</ul>
<p>For generating a <code>deftype</code> form from a syntax-quote template, the only solution is thus to prefix all the symbols shown in the example above with tilde-quote. I tried: it works, but it&#8217;s a mess. It&#8217;s not very readable, and the inevitable mistakes lead to unpleasant error messages.</p>
<p>Well, this is Lisp, and in Lisp you are always free to make your own tools if you are not happy with the ones provided by the system. What I want here is a template expansion system that doesn&#8217;t do namespace resolution on symbols. However, I didn&#8217;t need a full-blown equivalent to syntax-quote templates either, given that I would use those <code>deftype</code> templates only for one application. So I came up with the following definitions, which for me are the right compromise between simplicity and useability:</p>
<pre>
(defn instantiate-template
  [substitution-map form]
  (clojure.walk/prewalk
   (fn [x] (if (and (sequential? x) (= (first x) 'clojure.core/unquote))
	     (substitution-map (second x))
	     x))
   form))

(defmacro template
  [substitutions form]
  (let [substitution-map (into {} (map (fn [[a b]]
					 [(list 'quote a) b])
				       (partition 2 substitutions)))]
    `(instantiate-template ~substitution-map (quote ~form))))
</pre>
<p>Compared to syntax-quote, this has two restrictions: it has no splicing, and it admits only symbols after a tilde, not arbitrary expressions. The <code>template</code> macro takes a let-like vector as its first argument. This vector contains the symbol-value pairs for substitution inside the template. The second argument is the template form, which presumably contains tilde-prefixed symbols for substitution. Note that the Clojure reader translates <code>~x</code> to &lt;code (clojure.core/unquote x)</code>, which is what the above code searches for.</p>
<p>Here is an example for using such templates:</p>
<pre>
(defmacro foo [typename fieldname]
  (template [type  typename
	     field fieldname]
    (deftype ~type
      [~field])))

(foo bar boo)

(bar 42)
</pre>
<p>This prints <code>#:bar{:boo 2}</code>, illustrating that the macros does what it is expected to do. Of course this is not the perfect example for the utility of my little template instantiation system, as it could just as well be written using syntax-quote!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/onclojure.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/onclojure.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/onclojure.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/onclojure.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/onclojure.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/onclojure.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/onclojure.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/onclojure.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/onclojure.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/onclojure.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/onclojure.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/onclojure.wordpress.com/86/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/onclojure.wordpress.com/86/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/onclojure.wordpress.com/86/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=onclojure.com&#038;blog=5872423&#038;post=86&#038;subd=onclojure&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://onclojure.com/2010/02/23/generating-deftype-forms-in-macros/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/305e4cf66ef1179f7e95981b1520ba1a?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=PG" medium="image">
			<media:title type="html">khinsen</media:title>
		</media:content>
	</item>
		<item>
		<title>Managing namespaces</title>
		<link>http://onclojure.com/2010/02/17/managing-namespaces/</link>
		<comments>http://onclojure.com/2010/02/17/managing-namespaces/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 14:38:24 +0000</pubDate>
		<dc:creator>khinsen</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Libraries]]></category>

		<guid isPermaLink="false">http://onclojure.com/?p=80</guid>
		<description><![CDATA[One aspect of Clojure that I have not been quite happy with is namespace management. In a bigger project that consists of several namespaces, I usually end up having nearly identical :use and :require clauses in the initial ns form. These clauses set up the project-specific set of symbols that I want to work with. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=onclojure.com&#038;blog=5872423&#038;post=80&#038;subd=onclojure&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>One aspect of Clojure that I have not been quite happy with is namespace management. In a bigger project that consists of several namespaces, I usually end up having nearly identical <tt>:use</tt> and <tt>:require</tt> clauses in the initial <tt>ns</tt> form. These clauses set up the project-specific set of symbols that I want to work with. Individual namespaces sometimes add symbols for their specific needs, of course. What bothers me is that I have to repeat the <tt>:use</tt> and <tt>:require</tt> clauses, often with <tt>:exclude</tt> or <tt>:</tt><tt>only</tt> options with many symbols, in every single namespace. And of course I often forget a copy when updating my symbol set. Therefore I decided to look at how namespaces work in more detail, and try to find a better way to manage symbols in namespaces.</p>
<p>For those who don&#8217;t want to read all the explanations, my solution (still a bit experimental, for the moment), is in my <a href="http://code.google.com/p/clj-nstools/">nstools library</a>, which is also on <a href="http://clojars.org/nstools">Clojars</a>.</p>
<p>As most Clojure programmers know, a namespace maps symbols to vars. Vars are mutable storage locations with well defined concurrency semantics, but this is not the topic of this post &#8211; see the <a href="http://clojure.org/vars">documentation</a> for details. But a namespace is not a simple map. To start with, a namespace stores two maps: one from symbols to their values, and one from namespace aliases to namespaces. Aliases are usually created using a <tt>(:require ... :as ...)</tt> clause in the <tt>ns</tt> form that opens a namespace. They are used in namespace-qualified symbols before the slash, as a shorthand for the full namespace name. Since aliases are used before the slash and namespace-local symbols are used after the slash (or in an unqualified name with no slash at all), there is no conflict between the two. It is thus possible to use the same symbol both as an alias and as a regular symbol in the same namespace.</p>
<p>The main symbol-to-value map is also not quite as simple as it seems. The values it stores are not always vars. A symbol can also have a Java class as its value. A symbol-to-class entry is created using <tt>import</tt> or using the <tt>:import</tt> clause in <tt>ns</tt>. A submap containing only the symbol-to-class entries of the namespace map can be obtained by calling <tt>ns-imports</tt>. Finally, the symbol-to-var entries can be divided up into two categories: those that refer to vars in the same namespace (created by <tt>def</tt> and the many macros based on it), and those that refer to vars in some other namespace. The latter are created with <tt>use</tt> or the <tt>:use</tt> clause of <tt>ns</tt>, and the submap of these symbols can be obtained by calling <tt>ns-refers</tt>. The first category, a submap of symbols to vars defined in the same namespace, is the return value of <tt>ns-interns</tt>.</p>
<p>There is one more subtlety, and an undocumented one as far as I know: Two symbols, <tt>ns</tt> and <tt>in-ns</tt>, are put in the namespace map when the namespace is created, and can&#8217;t be removed (using <tt>ns-unmap</tt>) nor redefined. This makes sense because they refer to a macro and a function needed to create new namespaces and to switch namespaces. Having them in every namespace (referring to vars in <tt>clojure.core</tt>) ensures that it is always possible to get out of the current namespace.</p>
<p>Next, let&#8217;s look at how namespaces are set up in Clojure. Pretty much all the namespace management functionality is available through the standard <tt>ns</tt> form with its various clauses and options. The one exception is removing symbols, which can be done only by calling <tt>ns-unmap</tt> explicitly. The <tt>ns</tt> form first switches to the namespace it defines, creating it if necessary. The second step is to add references to all public vars defined in namespace <tt>clojure.core</tt>. This step can be modified by specifying a <tt>:refer-clojure</tt> clause that lists the symbols to include or exclude. Then <tt>ns</tt> goes through its optional clauses. A <tt>:require</tt> clause loads another namespace, but doesn&#8217;t normally modify the namespace under construction. Only if the option <tt>:as</tt> is specified, there is an impact on the namespace: an alias is added. A <tt>:use</tt> clause first does a <tt>:require</tt> and then adds all of the newly loaded namespace&#8217;s public vars to the symbol table of the current namespace. The options <tt>:exclude</tt> and <tt>:</tt><tt>only</tt> can be used to select a subset of the public vars. Finally, an <tt>:import</tt> clause adds Java classes to the namespace&#8217;s symbol table.</p>
<p>The most dangerous, but also most convenient, <tt>ns</tt> clause is <tt>:use</tt>. In its basic form, it adds all public vars of another namespace to the symbol table of the namespace under construction. And once those symbols are there, they cannot be redefined in the namespace, except by first removing them using <tt>ns-unmap</tt>. The problem is that &#8220;all public vars of namespace X&#8221; is not something under your control. It&#8217;s the author of the <i>other</i> namespace who decides which symbols you get in <i>your</i> namespace. The next release of namespace X may well have a few more public definitions, and if those are in conflict with your own definitions, then your module will fail to load. Therefore, as a security measure, you should use the <tt>:</tt><tt>only</tt> option of <tt>:use</tt> with all namespaces that are out of your control, listing explicitly the definitions that you need, in order to be certain that you don&#8217;t get more than you expect. Unfortunately, this includes <tt>clojure.core</tt>, which also grows with every new Clojure release. To be on the safe side, you should have a <tt>:refer-clojure</tt> clause with the <tt>:</tt><tt>only</tt> in every namespace that you intend to maintain for a longer time.</p>
<p>So far for what I have, but what do I want? I&#8217;d like to be able to set up a namespace to my taste and then be able to use it as a basis for deriving other namespaces. With that possibility, I would define a master namespace once per project, being careful to always use the <tt>:</tt><tt>only</tt> option in <tt>:refer-clojure</tt> and <tt>:use</tt>. All other namespaces in my project would then be based on this master namespace and only add or remove symbols for their specific local needs.</p>
<p>To implement this functionality, I added three new clauses to <tt>ns</tt>. The <tt>:like</tt> clause takes a namespace as its only argument and adds all symbols from that namespace that refer to vars in yet another namespace to the current namespace (make sure you read this properly; there are at least three namespaces involved here!). The <tt>:clone</tt> clause does the same but also adds the symbols defined in the other namespace. In other words, <tt>:clone</tt> is equivalent to <tt>:like</tt> followed by <tt>:use</tt>. The third new clause is <tt>:remove</tt>, whose arguments are symbols to be removed from the namespace. It is explicitly allowed to &#8220;remove&#8221; symbols that aren&#8217;t there. This creates another way to protect one&#8217;s namespace against future extensions in namespaces that are <tt>:use</tt>d: simply add all symbols defined in your namespace to the <tt>:remove</tt> list.</p>
<p>The above paragraph contains a small lie: I didn&#8217;t add anything to <tt>ns</tt>, of course, though that&#8217;s what I would have liked to do. I made a copy of <tt>ns</tt> and added the new clauses to the copy. The copy is in namespace <tt>nstools.ns</tt> and it&#8217;s called <tt>ns+</tt> &#8211; as explained above, I cannot call it <tt>ns</tt>. So to use nstools, you have to replace <tt>ns</tt> by <tt>ns+</tt> and put a <tt>(use 'nstools.ns)</tt> before it.</p>
<p>As I said, this library is still a bit experimental. I am not sure for example if both <tt>:like</tt> and <tt>:clone</tt> are necessary. And perhaps <tt>:remove</tt> should be called <tt>:exclude</tt>. Of course, any feedback is welcome!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/onclojure.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/onclojure.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/onclojure.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/onclojure.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/onclojure.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/onclojure.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/onclojure.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/onclojure.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/onclojure.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/onclojure.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/onclojure.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/onclojure.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/onclojure.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/onclojure.wordpress.com/80/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=onclojure.com&#038;blog=5872423&#038;post=80&#038;subd=onclojure&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://onclojure.com/2010/02/17/managing-namespaces/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/305e4cf66ef1179f7e95981b1520ba1a?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=PG" medium="image">
			<media:title type="html">khinsen</media:title>
		</media:content>
	</item>
		<item>
		<title>dorun, doseq, doall</title>
		<link>http://onclojure.com/2009/03/04/dorun-doseq-doall/</link>
		<comments>http://onclojure.com/2009/03/04/dorun-doseq-doall/#comments</comments>
		<pubDate>Wed, 04 Mar 2009 04:34:29 +0000</pubDate>
		<dc:creator>cosmin</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://onclojure.com/?p=9</guid>
		<description><![CDATA[It&#8217;s about time that I started writing some posts on this blog. I&#8217;ll start with something small, by talking about the difference between dorun, doseq and doall and how to easily remember what each one of them does. All of them are supposed to force evaluation of lazy sequences. At least to me it was not obvious [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=onclojure.com&#038;blog=5872423&#038;post=9&#038;subd=onclojure&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s about time that I started writing some posts on this blog. I&#8217;ll start with something small, by talking about the difference between <a href="http://clojure.org/api#dorun">dorun</a>, <a href="http://clojure.org/api#doseq">doseq</a> and <a href="http://clojure.org/api#doall">doall</a> and how to easily remember what each one of them does. All of them are supposed to force evaluation of lazy sequences. At least to me it was not obvious from the name of these functions and I had to constantly go back to the docstrings at first.</p>
<p><strong>doall</strong></p>
<p>doall forces the evaluation of the lazy sequence and it retains the head, causing the entire seq to live in memory. Useful when you want to immediately force evaluation of something like <em><a href="http://clojure.org/api#map">map</a></em>. I use the &#8220;all&#8221; part of doall to help me remember that it keeps all the items of the seq in memory.</p>
<p><strong>dorun</strong></p>
<p>Use dorun when you just want the side effects of computing the lazy sequence, but you don&#8217;t care about the items in the sequence itself. But be careful when you see yourself using (dorun (map &#8230;.. )), you should probably <a href="http://groups.google.com/group/clojure/msg/1b45c27dc4627b99">use doseq instead</a>. I use the &#8220;run&#8221; part of dorun to help me remember that it only runs over the seq for side effects, without keeping anything.</p>
<p><strong>doseq</strong></p>
<p>To me <em>doseq</em> has more in common with <em><a href="http://clojure.org/api#for">for</a></em> than with <em>doall</em> or <em>dorun</em>. Since in Clojure <em>for</em> is used for lazy list-comprehension, <em>doseq</em> fulfills the role of something like &#8220;for &#8230; in &#8230;&#8221; or &#8220;foreach&#8221; from other languages. It takes the same arguments that <em>for</em> does, but it runs immediately and it doesn&#8217;t collect the results. I really feel that doseq needs a better name so I don&#8217;t have a good way to remember what it does just by looking at its name.</p>
<p><strong><br />
</strong></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/onclojure.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/onclojure.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/onclojure.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/onclojure.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/onclojure.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/onclojure.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/onclojure.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/onclojure.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/onclojure.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/onclojure.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/onclojure.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/onclojure.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/onclojure.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/onclojure.wordpress.com/9/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=onclojure.com&#038;blog=5872423&#038;post=9&#038;subd=onclojure&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://onclojure.com/2009/03/04/dorun-doseq-doall/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1b5633ca7f3390376c779e5f716a3ed0?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=PG" medium="image">
			<media:title type="html">cosmin</media:title>
		</media:content>
	</item>
	</channel>
</rss>
