<?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>techno.blog(&#34;Dion&#34;) &#187; Groovy</title>
	<atom:link href="http://almaer.com/blog/category/groovy/feed" rel="self" type="application/rss+xml" />
	<link>http://almaer.com/blog</link>
	<description>blogging about life, the universe, and everything tech</description>
	<lastBuildDate>Tue, 28 Aug 2012 14:41:55 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>SWeb 3.0: Paul Hammant goes from Thicky to Swiby</title>
		<link>http://almaer.com/blog/sweb-30-paul-hammant-goes-from-thicky-to-swiby</link>
		<comments>http://almaer.com/blog/sweb-30-paul-hammant-goes-from-thicky-to-swiby#comments</comments>
		<pubDate>Sun, 14 Oct 2007 03:53:32 +0000</pubDate>
		<dc:creator>dion</dc:creator>
				<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://almaer.com/blog/sweb-30-paul-hammant-goes-from-thicky-to-swiby</guid>
		<description><![CDATA[Paul Hammant has been involved in a ton of fantastic open source projects, and some cool toys too. Thicky was a toy that I would often show off when I was doing the Groovy thing. Building prototypes of Swing apps with a nice builder API was great.
Now he is having a bash on the web, [...]]]></description>
			<content:encoded><![CDATA[<p>Paul Hammant has been involved in a ton of fantastic open source projects, and some cool toys too. Thicky was a toy that I would often show off when I was doing the Groovy thing. Building prototypes of Swing apps with a nice builder API was great.</p>
<p>Now he is having a bash on the web, and has written up his thoughts on <a href="http://paulhammant.com/blog/sweb-3.0.html">SWeb 3.0</a> which gratuitously joins the Web 3.0 debate although it isn&#8217;t some drivel about how &#8220;Web 3.0 will include even MORE participation &#8230;.&#8221;.</p>
<p>Paul has joined up to make Swiby happen:</p>
<blockquote><p>
With Swiby the pages, should be shipped from the server side web frameworks like those today (Ruby on Rails, or Waffle), and executed in the browser via that plugin.  All of these will be possible:</p>
<ul>
<li>AJAX-like behavior</li>
<li>lazy loading of hidden tabs, or sections of a page</li>
<li>threaded / timed events</li>
<li>client side object storage more sophistcated that the current browser cookie</li>
<li>amazingly rich interfaces (YouTube, GMail, Writely should be easy to do)</li>
<li>equivalent of CSS for properties of widgets</li>
<li>server side decoration a la Sitemesh or PhpMesh</li>
<li>tiny pages, quick loading, and quick transitions from one page to another</li>
</ul>
</blockquote>
<p>The philosophy is that Swing has a nice component model and the cool side of the Web is the REST stuff, and a page centric world. </p>
<p>Paul is trying to take the best of both worlds to make it easier to build very rich apps on the Web platform.</p>
<p>It is a bold play, and is obviously an up hill battle against the incumbants, but I am all for more projects pushing the edges here, and I can&#8217;t wait to see more.</p>
]]></content:encoded>
			<wfw:commentRss>http://almaer.com/blog/sweb-30-paul-hammant-goes-from-thicky-to-swiby/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LINQ 101 to Ruby 101 to Groovy 101</title>
		<link>http://almaer.com/blog/linq-101-to-ruby-101-to-groovy-101</link>
		<comments>http://almaer.com/blog/linq-101-to-ruby-101-to-groovy-101#comments</comments>
		<pubDate>Sun, 02 Oct 2005 09:47:07 +0000</pubDate>
		<dc:creator>dion</dc:creator>
				<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://almaer.com/blog2/linq-101-to-ruby-101-to-groovy-101</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><a href="http://weblog.infoworld.com/udell/">Jon Udell</a> posted <a href="http://weblog.infoworld.com/udell/2005/09/28.html#a1310">some code that he was playing with to test out LINQ</a>.</p>
<p>The code takes his blog format, and filters based on the XML, and some internal datastructures.</p>
<p>Then Sam Ruby <a href="http://www.intertwingly.net/blog/2005/09/29/Ruby-1-8-vs-LINQ">ported it to Ruby</a>.</p>
<p>For some reason I just ported it to Groovy:</p>
<blockquote><pre>
def d = ["2005-09" : "September 2005", "2005-08" : "August 2005"]
def a = ["greasemonkey", "ajax"]

def rss = new XmlParser().parse("blog.xml")

def xml = new groovy.xml.MarkupBuilder(new PrintWriter(System.out))

rss.channel.item.findAll { item -&gt;
d.keySet().any { day -&gt;
t(item.date) =~ day;
} &#038;&#038; a.any { tag -&gt;
t(item.tags) =~ tag;
}
}.sort { x, y -&gt; t(y.date) &lt;=&gt; t(x.date) }.each { i -&gt;
xml.item() {
month(d[d.keySet().find { key -&gt; t(i.date) =~ key }])
date(t(i.date))
title(t(i.title))
tags(t(i.tags))
}
}

def t(node) { return node[0]!=null ? node[0].text() : '' }
</pre>
</blockquote>
<p>
There are some uglies in there (especially the &#8220;node to text&#8221; pain), but I do prefer the native build syntax that we have in Ruby and Groovy, compared to nesting <code>new XElement("item", ....)</code>. They could easily add more sugar to make that work on the .NET side of course.
</p>
<p>
The other interesting differences are that I didn&#8217;t use XPath in the Groovy version, and the lack of SQL like stuff. Here it is just method chaining. No need for a special <code>orderby</code>, you simply do a sort. Of course, the beauty of LINQ is its polymorphism across XML, SQL, etc etc.
</p>
<p><b>Update: New Version</b></p>
<p>
<a href="http://www.wilson.co.uk/">John Wilson</a> took out his namespace aware XmlSlurper (to access dc:date vs. date), and a new builder syntax that handle multiple objects:</p>
<blockquote><pre>
def d = ["2005-09" : "September 2005", "2005-08" : "August 2005"]
def a = ["greasemonkey", "ajax"]

System.out &lt;&lt; new StreamingMarkupBuilder().bind {
mkp.declareNamespace(dc: "http://purl.org/dc/elements/1.1/")

new XmlSlurper().parseText(blog).channel.item.findAll {item -&gt;
d.any{entry -&gt; item.date.text() =~ entry.key} &#038;&#038;
a.any{entry -&gt; item.tags.text() =~ entry}
}.list().sort{x, y -&gt; y.date.text() &lt;=&gt; x.date.text()}.each {i -&gt;
item([{month d.find{entry -&gt; i.date.text() =~ entry.key}.value}, i.date, i.title, i.tags])
}
}
</pre>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://almaer.com/blog/linq-101-to-ruby-101-to-groovy-101/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>invokedynamic: New Java Bytecode for the Dynamics</title>
		<link>http://almaer.com/blog/invokedynamic-new-java-bytecode-for-the-dynamics</link>
		<comments>http://almaer.com/blog/invokedynamic-new-java-bytecode-for-the-dynamics#comments</comments>
		<pubDate>Thu, 29 Sep 2005 06:23:12 +0000</pubDate>
		<dc:creator>dion</dc:creator>
				<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://almaer.com/blog2/invokedynamic-new-java-bytecode-for-the-dynamics</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>I am thrilled to see <a href="http://blogs.sun.com/roller/page/gbracha?entry=invokedynamic">this post</a> by <a href="http://blogs.sun.com/roller/page/gbracha">Gilad Bracha</a>, on the new <code>invotedynamic</code> bytecode that is &#8220;coming to a JSR near you very soon&#8221;.</p>
<p>I was beginning to think that this may not be coming, even though I know that people asked for it at the dynamically type language meetup at Sun, but look:</p>
<blockquote><p>
Last winter we had a meeting with various people who work on such languages &#8211; things like Groovy, Perl, Python/Jython.  Our conclusion was that the most practicable thing was to support dynamically typed method invocation at the byte code level.</p>
<p>The new byte code, invokedynamic , is coming to a JSR near  you very soon. I</p>
]]></content:encoded>
			<wfw:commentRss>http://almaer.com/blog/invokedynamic-new-java-bytecode-for-the-dynamics/feed</wfw:commentRss>
		<slash:comments>83</slash:comments>
		</item>
		<item>
		<title>Speaking to your applications via Jabber</title>
		<link>http://almaer.com/blog/speaking-to-your-applications-via-jabber</link>
		<comments>http://almaer.com/blog/speaking-to-your-applications-via-jabber#comments</comments>
		<pubDate>Thu, 08 Sep 2005 17:39:13 +0000</pubDate>
		<dc:creator>dion</dc:creator>
				<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://almaer.com/blog2/speaking-to-your-applications-via-jabber</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>Guillaume Laforge has written about how you can get Groovy with <a href="http://glaforge.free.fr/weblog/index.php?itemid=142">Web services RPC calls over Google Talk</a>.</p>
<p>I have actually seen a bunch of applications that take use of this kind of functionality.</p>
<p>One smart friend has integrated Jabber with Confluence.</p>
<p>Imagine being able to get on IM and start asking questions, and having a bot answer them, based on your wiki.</p>
<p>Add voice recognition to the mix, and you can start talking to your applications :)</p>
]]></content:encoded>
			<wfw:commentRss>http://almaer.com/blog/speaking-to-your-applications-via-jabber/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Getting around BigDecimal pain with Groovy</title>
		<link>http://almaer.com/blog/getting-around-bigdecimal-pain-with-groovy</link>
		<comments>http://almaer.com/blog/getting-around-bigdecimal-pain-with-groovy#comments</comments>
		<pubDate>Tue, 02 Aug 2005 02:47:44 +0000</pubDate>
		<dc:creator>dion</dc:creator>
				<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://almaer.com/blog2/getting-around-bigdecimal-pain-with-groovy</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>BigDecimal is a necessary evil, isn&#8217;t it. Without it, you end up over-running primitive bounds and suddenly your results are weird &#8220;what is with the negative numbers?&#8221;.</p>
<p>I was talking with someone whose &#8220;users&#8221; are uber-intense actuaries.</p>
<p>They need to be able to write quick reports, and change functionality on the fly.</p>
<p>Rather than using full on Java, they interfaced via a scripting language, to give them concise scripts versus the verbosity that we know and love from Java :)</p>
<p>JavaScript was one choice, but they quickly ran into problems with double/float/int/BigDecimal, and they had to manually do a lot of work with BigDeminal objects and methods.</p>
<p>Then along came Groovy, which automatically groks the fact that it should take care of autogrowing the world.</p>
<p>
E.g.</p>
<blockquote><pre>
def x = 10;

println x.class;

(1.0..100.0).step(20) { y ->
println x;

x = x * y;
}

println x.class;
</blockquote>
</pre>
<p><b>Output</b></p>
<blockquote><pre>
class java.lang.Integer
10
10.0
210.00
8610.000
525210.0000
class java.math.BigDecimal
</blockquote>
</pre>
<p>Note the auto change, and how operators such as * / &#8211; + all JUST WORK.</p>
]]></content:encoded>
			<wfw:commentRss>http://almaer.com/blog/getting-around-bigdecimal-pain-with-groovy/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Native XML support in Dolphin</title>
		<link>http://almaer.com/blog/native-xml-support-in-dolphin</link>
		<comments>http://almaer.com/blog/native-xml-support-in-dolphin#comments</comments>
		<pubDate>Sun, 17 Jul 2005 17:49:45 +0000</pubDate>
		<dc:creator>dion</dc:creator>
				<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://almaer.com/blog2/native-xml-support-in-dolphin</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>Kirill Grouchnikov&#8217;s <a href="http://weblogs.java.net/blog/kirillcool/archive/2005/07/native_xml_supp_1.html">discusses thoughts on native XML support in Dolphin</a>. There are definitely some interesting items, but I really hope that Sun takes a LONG look at what comes from C# 3.0 (send someone to PDC guys!), and look at the current <a href="http://www.almaer.com/blog/archives/000749.html">E4X</a>. It was BEA after all that came up with <a href="http://www.almaer.com/blog/archives/000971.html">E4X</a>!</p>
<p>Even look at Groovy&#8217;s <a href="http://today.java.net/pub/a/today/2004/08/12/groovyxml.html">XML builders and parsing w/ GPath</a>.</p>
<p>I just want to be able to work with XML in a trivial way, instead of with the ugly mess of DOM/SAX/X APIs.</p>
<p>I like having a smart for() loop for XML, that is good&#8230;.. but some of the &#8220;extends&#8221; stuff just looks more complicated than it needs to be.</p>
]]></content:encoded>
			<wfw:commentRss>http://almaer.com/blog/native-xml-support-in-dolphin/feed</wfw:commentRss>
		<slash:comments>311</slash:comments>
		</item>
		<item>
		<title>More Rails / Java Talk</title>
		<link>http://almaer.com/blog/more-rails-java-talk</link>
		<comments>http://almaer.com/blog/more-rails-java-talk#comments</comments>
		<pubDate>Fri, 15 Jul 2005 07:50:36 +0000</pubDate>
		<dc:creator>dion</dc:creator>
				<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Web Frameworks]]></category>

		<guid isPermaLink="false">http://almaer.com/blog2/more-rails-java-talk</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>Wow it keeps on coming (and ironically I am adding to it). This last slew of postings on Rails vs. Java came after Patrick Peak <a href="http://www.patrickpeak.com/comments/patrick/Weblog/rails_where_are_the_implications">Rails: Where are the Implications for &#8220;No Deploying&#8221;?</a>.</p>
<p>As soon as that came out we saw:</p>
<ul>
<li>Dave Thomas: <a href="http://blogs.pragprog.com/cgi-bin/pragdave.cgi/Tech/Ruby/DeployingRails.rdoc">Rails and FUD</a></li>
<li>DHH: <a href="http://www.loudthinking.com/arc/000483.html">Letting cooler minds prevail</a></li>
<li>Jamis Buck: <a href="http://jamis.jamisbuck.org/articles/2005/07/14/application-deployment-with-rails">Application Deployment with Rails</a></li>
<li>James Duncan Davidson: <a href="http://blog.x180.net/2005/07/rails_sandbox_d.html">Rails: Sandbox, Develop, and Deploy</a></li>
<li>Patrick Lightbody: <a href="http://www.lightbody.net/~plightbo/archives/000168.html">It&#8217;s the tools, stupid!</a></li>
<ul>
<p>The funny thing is that it is hard to know what we are really arguing about :)</p>
<p><b>Scalability</b></p>
<p>Can Rails scale? Sure. As <a href="http://kasparov.skife.org/blog/src/ruby-and-java-get-along.html">Brian McCallister just said, scalability isn&#8217;t about a particular language</a>.</p>
<p>Do the different languages/platforms give you different implementation choices for scaling? Sure.  Scaling with FCGI clusters is different to using Tangosol Coherence in a J2EE cluster.</p>
<p>In some ways it is much simpler to scale a web app with shared nothing. However, on really huge enterprise systems (not web apps), tools *like* Coherence really help you out. It is nice to have the many levels and buttons available in your architecture.</p>
<p>Again, Slashdot? Scales like a champ with Perl. There are a lot of huge enterprise Java systems that take in billions of transactions.</p>
<p>So, conclusion? You can make both scale. You can make both run like a dog :)</p>
<p><b>Tools</b></p>
<p>Patrick has some good points in his post. I am not sure if he has checked out Textmate for doing Ruby development. It is quite nice indeed, although I do miss IDEA for some things (can&#8217;t beat its refactoring etc).</p>
<p>With Ruby you really don&#8217;t need as MUCH tooling though. It is a nice concise language which doesn&#8217;t need as much scaffolding in the tools area. You can be very productive with Ruby &#8211; IDEA.</p>
<p>However, IDEA really does do a good job of getting you closer to the productivity. I notice this a lot in Groovy world, and I am excited about GroovyJ.</p>
<p>Tool support is only one leg on the chair though. There are many other components that matter as much, more-so, and maybe not as much.</p>
<p><b>Refresh, Reload</b></p>
<p>Tools can help get around the dev cycle that we have in Java, but we aren&#8217;t there yet. Patrick is correct in spotting the <i>potential</i> with dynamic languages on the JVM, where we could get the best of both. But we aren&#8217;t quite there yet.</p>
<p>It is painful to jump to the Java world once you are used to hitting SAVE and refresh for every type of change (we can get far w/ JSP, etc etc).</p>
<p><b>Both are beautiful, both can be ugly</b></p>
<p>I love both platforms in many ways. I don&#8217;t like both platforms in others.</p>
<ul>
<li><b>Java Dion</b>: I wish we had the Ruby language on the JVM.</li>
<li><b>Ruby Dion</b>: I wish Ruby had a nice VM to run on (the JVM would be really nice).</li>
</ul>
<p>Or maybe I will just do everything in JavaScript 2.0? ;)</p>
<p>Oh, and <a href="http://jroller.com/page/dgeary/20050714#the_rails_caf%C3%A9">David Geary had too much caffeine at the Rails Cafe? :)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://almaer.com/blog/more-rails-java-talk/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Grails: Groovy on Rails</title>
		<link>http://almaer.com/blog/grails-groovy-on-rails</link>
		<comments>http://almaer.com/blog/grails-groovy-on-rails#comments</comments>
		<pubDate>Mon, 04 Jul 2005 07:25:05 +0000</pubDate>
		<dc:creator>dion</dc:creator>
				<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://almaer.com/blog2/grails-groovy-on-rails</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>It was bound to happen. The Groovy folk have seen the boon from Ruby on Rails, and want to get in on some of that action :)</p>
<p>A discussion of <a href="http://docs.codehaus.org/display/GROOVY/Grails">Grails</a> (Groovy on Rails) sparked up on the mailing list, and miracles happen&#8230; code has come out of it.</p>
<p>Steven Devijver put together the first 0.0001 release of this code:</p>
<blockquote><p>
A first version of Grails is available in CVS. It&#8217;s located under groovy/modules/grails. Currently simple controllers are implemented together with JSP support. The MVC part is based on Spring MVC.</p>
<p>Build the project via &#8220;ant jar&#8221;</p>
<p>To start your own project with Grails set the GRAILS_HOME environment variable. Next create a directory for your project and from within this directory run this command:</p>
<p>ant -f ${GRAILS_HOME}/src/grails/build.xml -Dbasedir=`pwd` init</p>
<p>to initialize the project directory structure.</p>
<p>Place your controllers under the grails-app directory and your JSP&#8217;s under the jsp directory. A simple controller in Grails looks like<br />
this:</p>
<p>class NamesController {<br />
@Property String namesView = &#8220;names&#8221;<br />
@Property Closure names = {<br />
request, response -></p>
<p>return [ "names" : [ "John", "Jill", "Jack", "Jaqueline" ] ]<br />
}<br />
}</p>
<p>Then make sure to create a view.</p>
<p>To create a WAR for deployment run this command:</p>
<p>ant -f ${GRAILS_HOME}/src/grails/build.xml -Dbasedir=`pwd` war</p>
<p>This will create a war names grails-app.war.</p>
<p>When the WAR is deployed access it through this URI:</p>
<p>/grails-app/app/names
</p></blockquote>
<p>Obviously, this is insanely early days. It is so interesting to see how people are revisiting their way of dealing with web applications after Rails.</p>
]]></content:encoded>
			<wfw:commentRss>http://almaer.com/blog/grails-groovy-on-rails/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Gravy: Using Ant from Groovy for short non-build scripts</title>
		<link>http://almaer.com/blog/gravy-using-ant-from-groovy-for-short-non-build-scripts</link>
		<comments>http://almaer.com/blog/gravy-using-ant-from-groovy-for-short-non-build-scripts#comments</comments>
		<pubDate>Wed, 22 Jun 2005 19:52:50 +0000</pubDate>
		<dc:creator>dion</dc:creator>
				<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://almaer.com/blog2/gravy-using-ant-from-groovy-for-short-non-build-scripts</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>
I recently had to whip out a one/few-off script that took a directory, and recursively grabbed jar files from it, and put all of the classes in one place. I looked at <a href="http://jarjar.sf.net/">JarJar</a> and Uberjar, but in the end it was easier to whip together a few lines of <a href="http://groovy.codehaus.org">Groovy</a> to make it happen (although I could have used Ruby, JavaScript/Rhino, Perl, etc etc).
</p>
<p>
When it came to jar&#8217;ing and unjaring files, instead of using the Java APIs, it was easier to just use ant via the <code>AntBuilder</code>. This allowed me in one simple line to use the tasks available there:</p>
<blockquote><p>
ant.unjar(src: file.path, dest: structure[typeOfJar].outputDir)
</p></blockquote>
<p>Very convenient. This isn&#8217;t using Ant in a more formal &#8220;I am driving the build from Groovy&#8221; way, but rather being pragmatic and thinking &#8220;oh there is a simple ant task that already does this, so lets just call into it&#8221;.
</p>
<p>
<b><u>Example</u></b></p>
<blockquote><pre>
def buildJar(String typeOfJar) {
println "Building a jar file for the type: $typeOfJar"
new java.io.File(structure[typeOfJar].dir).eachFileRecurse { file ->
try {
//println file.path
if (file.path =~ "\\.jar") {
println "jar xf $file.path $structure[typeOfJar].outputDir";
ant.unjar(src: file.path, dest: structure[typeOfJar].outputDir)
}
} catch (Exception e) {
println e
}
}

ant.jar(destfile: structure[typeOfJar].jar, basedir: structure[typeOfJar].outputDir)
ant.delete(dir: structure[typeOfJar].outputDir)
}
</pre>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://almaer.com/blog/gravy-using-ant-from-groovy-for-short-non-build-scripts/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Groovy Strachan Song</title>
		<link>http://almaer.com/blog/groovy-strachan-song</link>
		<comments>http://almaer.com/blog/groovy-strachan-song#comments</comments>
		<pubDate>Mon, 16 May 2005 04:18:58 +0000</pubDate>
		<dc:creator>dion</dc:creator>
				<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://almaer.com/blog2/groovy-strachan-song</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p>Stephan Janssen of <a href="http://www.javapolis.com">JavaPolis</a> and BeJUG fame, sent over a mixed song, based on James Strachan quotes from the presentation on Groovy that we both gave to the euro crowd in Belgium (which was a really lovely time).</p>
<p>I have put the <a href="/GroovyJamesSong.mp3">groovy song up here</a>.</p>
<p>Quality :)</p>
]]></content:encoded>
			<wfw:commentRss>http://almaer.com/blog/groovy-strachan-song/feed</wfw:commentRss>
		<slash:comments>51</slash:comments>
		</item>
	</channel>
</rss>
