<?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>Eric Wendelin&#039;s Blog &#187; Groovy</title>
	<atom:link href="http://eriwen.com/category/groovy/feed/" rel="self" type="application/rss+xml" />
	<link>http://eriwen.com</link>
	<description>Programming productively with open-source tools</description>
	<lastBuildDate>Tue, 31 Jan 2012 14:30:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Introducing GroovyRTM: A Groovier way to Remember The Milk</title>
		<link>http://eriwen.com/groovy/introducing-groovyrtm/</link>
		<comments>http://eriwen.com/groovy/introducing-groovyrtm/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 10:00:28 +0000</pubDate>
		<dc:creator>Eric Wendelin</dc:creator>
				<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Project]]></category>

		<guid isPermaLink="false">http://eriwen.com/?p=866</guid>
		<description><![CDATA[I have always wanted to give something back to the wonderful creators of the <a href="http://www.rememberthemilk.com">Remember The Milk</a> to-do list service. It has been a great tool for me the past couple years by helping me keep organized. Thank you, RTM crew!

Over the last couple months I've been taking a bit of spare time to write something that I hope all of us can benefit from: <a href="http://github.com/emwendelin/groovyrtm" title="groovyrtm on GitHub">GroovyRTM</a>

<h2>What is GroovyRTM?</h2>
GroovyRTM allows you to easily take advantage of the <a href="http://www.rememberthemilk.com/services/api/">Remember The Milk REST API</a> using any language on the JVM. In short, you can now write apps for Remember The Milk without having to worry about all the HTTP transaction stuff, error handling, etc. As its name implies, it's written in Groovy, which made it much easier to write and test. <a href="http://eriwen.com/groovy/introducing-groovyrtm/">Continue reading <span class="meta-nav">&#8594;</span></a>


Related posts:<ol><li><a href='http://eriwen.com/tools/cheqlist-remember-the-milk-app/' rel='bookmark' title='Cheqlist: A free, open-source desktop app for Remember The Milk'>Cheqlist: A free, open-source desktop app for Remember The Milk</a></li>
<li><a href='http://eriwen.com/tools/moving-to-github/' rel='bookmark' title='Why I&#8217;m moving my projects to GitHub'>Why I&#8217;m moving my projects to GitHub</a></li>
<li><a href='http://eriwen.com/programming/the-tech-behind-cheqlist/' rel='bookmark' title='What and why: the tech behind Cheqlist'>What and why: the tech behind Cheqlist</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I have always wanted to give something back to the wonderful creators of the <a href="http://www.rememberthemilk.com">Remember The Milk</a> to-do list service. It has been a great tool for me the past couple years by helping me keep organized. Thank you, RTM crew!</p>
<p>Over the last couple months I&#8217;ve been taking a bit of spare time to write something that I hope all of us can benefit from: <a href="http://github.com/eriwen/groovyrtm" title="groovyrtm on GitHub">GroovyRTM</a></p>
<h2>What is GroovyRTM?</h2>
<p>GroovyRTM allows you to easily take advantage of the <a href="http://www.rememberthemilk.com/services/api/">Remember The Milk REST API</a> using any language on the JVM. In short, you can now write apps for Remember The Milk without having to worry about all the HTTP transaction stuff, error handling, etc. As its name implies, it&#8217;s written in Groovy, which made it much easier to write and test. <img src="http://eriwen-cdn.s3.amazonaws.com/images/groovyrtm.png" style="display: block; margin: 0 auto;" alt="Remember The Milk + Groovy = GroovyRTM" /></p>
<h2>How can I use it?</h2>
<p>To get started, you&#8217;ll need 3 things:</p>
<ol>
<li>Download <a href="http://github.com/eriwen/groovyrtm/downloads" title="GroovyRTM downloads">groovyrtm-all.jar</a> from the project on <a href="http://github.com">GitHub</a></li>
<li>Request an <a href="http://www.rememberthemilk.com/services/api/keys.rtm">API key</a> (you&#8217;ll probably want an RTM account to test it with, too)</li>
<li>Create a <em>RtmService.properties</em> file as explained in the project <a href="http://wiki.github.com/eriwen/groovyrtm/" title="GroovyRTM wiki home">Wiki</a></li>
</ol>
<p class='update'><strong>UPDATE:</strong> I&#8217;ve created a quick-start project that has everything you need to get started quickly! I included an application authorization example because that&#8217;s the first hurdle. <a href='https://github.com/downloads/eriwen/groovyrtm/GroovyRtmAuth.zip' title='GroovyRTM quick-start'>Download it here</a></p>
<p>Just how easy is it? Suppose you want to write a little Java app that adds a new task:</p>
<pre class="brush: java; light: true; title: ; notranslate">
import org.eriwen.rtm.*;

class MyGroovyRtmTest {
    public static void main(String[] args) {
        GroovyRtm rtm = new GroovyRtm(&quot;api-key&quot;, &quot;shared-secret&quot;);
        rtm.testEcho();
    }
}
</pre>
<p>It&#8217;s that easy! Now, it&#8217;s a little deceiving because the first time your app runs you have to allow it access via the RTM website. The best part is&#8230; it&#8217;s open source! You can check out the source with Git:</p>
<pre class="brush: bash; light: true; title: ; notranslate">
git clone git://github.com/eriwen/groovyrtm.git
</pre>
<h2>Awesome! Can I help?</h2>
<p>Of course! Get the code, give me suggestions, use it and tell me what you think. I am willing to add people to the project that show me their interest and some good Groovy code. Just hit up the <a href="http://github.com/eriwen/groovyrtm/issues" title="groovyrtm issue tracker">issue tracker</a> or use my <a href="http://eriwen.com/contact/">contact form</a> for questions or suggestions.</p>
<p>If you think it&#8217;s cool but you can&#8217;t use it, help me get it out there by digging it or voting on your favorite aggregator. </p>


<p>Related posts:<ol><li><a href='http://eriwen.com/tools/cheqlist-remember-the-milk-app/' rel='bookmark' title='Cheqlist: A free, open-source desktop app for Remember The Milk'>Cheqlist: A free, open-source desktop app for Remember The Milk</a></li>
<li><a href='http://eriwen.com/tools/moving-to-github/' rel='bookmark' title='Why I&#8217;m moving my projects to GitHub'>Why I&#8217;m moving my projects to GitHub</a></li>
<li><a href='http://eriwen.com/programming/the-tech-behind-cheqlist/' rel='bookmark' title='What and why: the tech behind Cheqlist'>What and why: the tech behind Cheqlist</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://eriwen.com/groovy/introducing-groovyrtm/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Using Groovy Categories to override operators</title>
		<link>http://eriwen.com/groovy/groovy-categories/</link>
		<comments>http://eriwen.com/groovy/groovy-categories/#comments</comments>
		<pubDate>Thu, 14 May 2009 15:25:38 +0000</pubDate>
		<dc:creator>Eric Wendelin</dc:creator>
				<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://eriwen.com/?p=793</guid>
		<description><![CDATA[I recently ran into a case where I was violating the <abbr title="Don't Repeat Yourself">DRY</abbr> principle by having to encode part of a string every time I added to it. After some digging I found the solution: <a href="http://docs.codehaus.org/display/GROOVY/Groovy+Categories">Groovy Categories</a>.

<h2>A bit of Groovy background</h2>
A couple key features of <a href="http://groovy.codehaus.org/" title="Groovy programming language">Groovy</a> are that everything is an object and that operators are just syntactic sugar for calling methods on the objects. What's cool about this is that with Groovy you can override the default behavior of these operators for certain classes. For example, <code>4 + 2</code> in Groovy really means <code>4.plus(2)</code>

<h2>How to implement/override operators in Groovy</h2>
Groovy allows you to override a LOT of stuff, including final methods and operators. If I want to override a method on the <code>String</code> class, all I need to do is:
 <a href="http://eriwen.com/groovy/groovy-categories/">Continue reading <span class="meta-nav">&#8594;</span></a>


Related posts:<ol><li><a href='http://eriwen.com/groovy/groovy-shell-scripts/' rel='bookmark' title='Get groovy for better shell scripts'>Get groovy for better shell scripts</a></li>
<li><a href='http://eriwen.com/groovy/crush-images-with-groovy/' rel='bookmark' title='Crush images on the command-line with Groovy'>Crush images on the command-line with Groovy</a></li>
<li><a href='http://eriwen.com/python/griffon-jython-plugin/' rel='bookmark' title='Griffon, meet Jython'>Griffon, meet Jython</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I recently ran into a case where I was violating the <abbr title="Don't Repeat Yourself">DRY</abbr> principle by having to encode part of a string every time I added to it. After some digging I found the solution: <a href="http://docs.codehaus.org/display/GROOVY/Groovy+Categories">Groovy Categories</a>.</p>
<h2>A bit of Groovy background</h2>
<p>A couple key features of <a href="http://groovy.codehaus.org/" title="Groovy programming language">Groovy</a> are that everything is an object and that operators are just syntactic sugar for calling methods on the objects. What&#8217;s cool about this is that with Groovy you can override the default behavior of these operators for certain classes. For example, <code>4 + 2</code> in Groovy really means <code>4.plus(2)</code></p>
<h2>How to implement/override operators in Groovy</h2>
<p>Groovy allows you to override a LOT of stuff, including final methods and operators. If I want to override a method on the <code>String</code> class, all I need to do is:</p>
<pre class="brush: groovy; title: ; notranslate">
String.metaClass.plus {
    //It is a special term for the argument passed (if there is only 1)
    String stringToEncode = it
    //delegate is a special term for the caller of the method
    delegate &lt;&lt; URLEncoder.encode(it, 'UTF-8')
}

String first = &quot;my delegate &quot;
String second = &quot;twitter @eriwen&quot;
//prints &quot;my delegate twitter+%40eriwen&quot;
println first + second
</pre>
<p>Notice that it (intentionally) only encodes the second <code>String</code>. Check out the list of <a href="http://groovy.codehaus.org/Operator+Overloading">operators and associated methods</a>. This is great, but I need to restrict this to code blocks I so choose. That&#8217;s where Groovy Categories come in.</p>
<h2>Overriding with Categories</h2>
<p>Groovy Categories allow you to add functionality to any class at runtime. This means that you can add in methods to final classes (like <code>java.lang.String</code>). In this case I just want to override a method instead of adding one.</p>
<pre class="brush: groovy; title: ; notranslate">
class MyUtils {
  //Takes 2 java.lang.Strings and returns a String - TYPES ARE OPTIONAL
  static String plus(String first, String second) {
    //Concatenates the Strings and returns
    first &lt;&lt; URLEncoder.encode(second, encoding)
  }
}

//my other class in another file...
import MyUtils

class MyOtherClass {
  String first = &quot;first&quot;
  String second = &quot;to be encoded&quot;
  use (MyUtils) {
    // This will now encode value
    list &lt;&lt; first + second
  }
}
</pre>
<p>Note that Groovy defaults to <code>GString</code>s, so you can&#8217;t just use <code>def actuallyMyString</code>. </p>
<p>How would you make this even <em>more</em> Groovy? Enjoy!</p>


<p>Related posts:<ol><li><a href='http://eriwen.com/groovy/groovy-shell-scripts/' rel='bookmark' title='Get groovy for better shell scripts'>Get groovy for better shell scripts</a></li>
<li><a href='http://eriwen.com/groovy/crush-images-with-groovy/' rel='bookmark' title='Crush images on the command-line with Groovy'>Crush images on the command-line with Groovy</a></li>
<li><a href='http://eriwen.com/python/griffon-jython-plugin/' rel='bookmark' title='Griffon, meet Jython'>Griffon, meet Jython</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://eriwen.com/groovy/groovy-categories/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Crush images on the command-line with Groovy</title>
		<link>http://eriwen.com/groovy/crush-images-with-groovy/</link>
		<comments>http://eriwen.com/groovy/crush-images-with-groovy/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 13:30:29 +0000</pubDate>
		<dc:creator>Eric Wendelin</dc:creator>
				<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://eriwen.com/?p=536</guid>
		<description><![CDATA[One of the ways to speed up your site and save bandwidth is to optimize your images. You can often halve an image's size without losing (much) quality. Many photo editors may give you this option, but it's a slow manual process. What we really need is a way to automate this so that every time we deploy changes we can optimize in one step.

<h2>Getting Started</h2>
You'll need 2 tools (and <a href="http://cygwin.com">Cygwin</a> if you're on Windows) to pull this off:
<ul style="margin-left: 2em; list-style-type: upper-roman;"><li><a href="http://groovy.codehaus.org/Download" title="Download Groovy">Download</a> and <a href="http://groovy.codehaus.org/Tutorial+1+-+Getting+started" title="Getting started with Groovy">setup</a> Groovy</li>
<li><a href="http://www.imagemagick.org/script/download.php" title="Command-line image optimizer">Grab ImageMagick</a> and install it</a></li></ul> <a href="http://eriwen.com/groovy/crush-images-with-groovy/">Continue reading <span class="meta-nav">&#8594;</span></a>


Related posts:<ol><li><a href='http://eriwen.com/productivity/aliases-and-functions/' rel='bookmark' title='Using aliases and command-line functions for speed'>Using aliases and command-line functions for speed</a></li>
<li><a href='http://eriwen.com/groovy/groovy-shell-scripts/' rel='bookmark' title='Get groovy for better shell scripts'>Get groovy for better shell scripts</a></li>
<li><a href='http://eriwen.com/groovy/groovy-categories/' rel='bookmark' title='Using Groovy Categories to override operators'>Using Groovy Categories to override operators</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img src="http://eriwen.com/images/crush-images.jpg" style="float:left; margin: 0 8px 3px 0;"/>One of the ways to speed up your site and save bandwidth is to optimize your images. You can often halve an image&#8217;s size without losing (much) quality. Many photo editors may give you this option, but it&#8217;s a slow manual process. What we really need is a way to automate this so that every time we deploy changes we can optimize in one step.</p>
<h2>Getting Started</h2>
<p>You&#8217;ll need 2 tools (and <a href="http://cygwin.com">Cygwin</a> if you&#8217;re on Windows) to pull this off:</p>
<ul style="margin-left: 2em; list-style-type: upper-roman;">
<li><a href="http://groovy.codehaus.org/Download" title="Download Groovy">Download</a> and <a href="http://groovy.codehaus.org/Tutorial+1+-+Getting+started" title="Getting started with Groovy">setup</a> Groovy</li>
<li><a href="http://www.imagemagick.org/script/download.php" title="Command-line image optimizer">Grab ImageMagick</a> and install it</a></li>
</ul>
<p>You can do a LOT with ImageMagick. Here&#8217;s a <a href="http://www.imagemagick.org/www/command-line-options.html" title="ImageMagick Command-Line options">command-line reference</a> for it.</p>
<h2>Compressing images the Groovy way</h2>
<p>Here is a <a href="http://groovy.codehaus.org/">Groovy</a> script I wrote for that purpose. It would be even cooler to use something like this in a <a href="http://groovy.codehaus.org/Gant">Gant</a> build:</p>
<pre class="brush: groovy; title: ; notranslate">
// If directory not passed use the current directory
def dir = args?.size() ? args[0] : &quot;.&quot;
// 70 is a fairly safe value for quality
def quality = args?.size() &gt; 1 ? args[1] : 70

// Get an ArrayList of all PNG and JPG files
images = new File(dir).listFiles().grep(~/.*(png|jpg)$/)

for (img in images) {
    print &quot;Crushing ${img} - size: ${img.size()}-&gt; &quot;
    // Compress the image
    &quot;convert -quality ${quality} ${img} ${img}&quot;.execute().text
    println &quot;${img.size()}&quot;
}
</pre>
<p>Tweak this to your liking to suit your needs. You can substitute your favorite command-line image editor if you like. Groovy makes it easy! </p>
<p>Run it by typing this on your command-line:</p>
<pre class="brush: bash; title: ; notranslate">
groovy src/groovy/CompressImages images/ 60
</pre>
<p>What do you think? Useful? Share!</p>


<p>Related posts:<ol><li><a href='http://eriwen.com/productivity/aliases-and-functions/' rel='bookmark' title='Using aliases and command-line functions for speed'>Using aliases and command-line functions for speed</a></li>
<li><a href='http://eriwen.com/groovy/groovy-shell-scripts/' rel='bookmark' title='Get groovy for better shell scripts'>Get groovy for better shell scripts</a></li>
<li><a href='http://eriwen.com/groovy/groovy-categories/' rel='bookmark' title='Using Groovy Categories to override operators'>Using Groovy Categories to override operators</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://eriwen.com/groovy/crush-images-with-groovy/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Get groovy for better shell scripts</title>
		<link>http://eriwen.com/groovy/groovy-shell-scripts/</link>
		<comments>http://eriwen.com/groovy/groovy-shell-scripts/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 16:07:14 +0000</pubDate>
		<dc:creator>Eric Wendelin</dc:creator>
				<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://eriwen.com/?p=495</guid>
		<description><![CDATA[I often use shell scripts to automate mundane, repeatable tasks on my computer. Since I've found <a href="http://groovy.codehaus.org/" title="Groovy Programming language home">Groovy</a>, though, I have discovered a great way to <strong>make writing those scripts easier and more enjoyable</strong>. This is especially true if I have anything complex to do, and it saves me a LOT of time. Allow me to elaborate.

<h2>Getting started with command-line Groovy</h2>
Like many of the tools I advocate here, you'll want to grab <a href="http://cygwin.com" title="Windows command-line editor">Cygwin</a> for the best experience. 

There are thorough instructions for <a href="http://groovy.codehaus.org/Tutorial+1+-+Getting+started" title="starting Groovy">getting Groovy running</a> within the Groovy documentation. Basically you just download a ZIP, extract it where you want, and add a couple environment variables.  <a href="http://eriwen.com/groovy/groovy-shell-scripts/">Continue reading <span class="meta-nav">&#8594;</span></a>


Related posts:<ol><li><a href='http://eriwen.com/groovy/crush-images-with-groovy/' rel='bookmark' title='Crush images on the command-line with Groovy'>Crush images on the command-line with Groovy</a></li>
<li><a href='http://eriwen.com/groovy/groovy-categories/' rel='bookmark' title='Using Groovy Categories to override operators'>Using Groovy Categories to override operators</a></li>
<li><a href='http://eriwen.com/groovy/introducing-groovyrtm/' rel='bookmark' title='Introducing GroovyRTM: A Groovier way to Remember The Milk'>Introducing GroovyRTM: A Groovier way to Remember The Milk</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I often use shell scripts to automate mundane, repeatable tasks on my computer. Since I&#8217;ve found <a href="http://groovy.codehaus.org/" title="Groovy Programming language home">Groovy</a>, though, I have discovered a great way to <strong>make writing those scripts easier and more enjoyable</strong>. This is especially true if I have anything complex to do, and it saves me a LOT of time. Allow me to elaborate.</p>
<h2>Getting started with command-line Groovy</h2>
<p>Like many of the tools I advocate here, you&#8217;ll want to grab <a href="http://cygwin.com" title="Windows command-line editor">Cygwin</a> for the best experience. </p>
<p>There are thorough instructions for <a href="http://groovy.codehaus.org/Tutorial+1+-+Getting+started" title="starting Groovy">getting Groovy running</a> within the Groovy documentation. Basically you just download a ZIP, extract it where you want, and add a couple environment variables. </p>
<p>Can be installed easily on Linux or Mac:</p>
<pre class="brush: bash; light: true; title: ; notranslate">
# Homebrew
brew install groovy
# Debian-based
sudo apt-get install groovy
# With yum
sudo yum install groovy
</pre>
<p>Now you can start writing shell scripts in Groovy. Let&#8217;s write a little script to test it out:</p>
<pre class="brush: bash; light: true; title: ; notranslate">
#!/usr/bin/env groovy
println &quot;Yay! I can finally be expressive now!&quot;
</pre>
<p>Actually, there are a ton of ways to run Groovy, but I&#8217;m just going to focus on scripts for now.</p>
<pre class="brush: bash; light: true; title: ; notranslate">
chmod +x hello.groovy
hello.groovy
</pre>
<h2>Bash vs. Groovy example</h2>
<p>Let&#8217;s say I want to have a script that can check my friends&#8217; last X tweets so I don&#8217;t have to leave my command-line to check twitter. </p>
<pre class="brush: bash; light: true; title: ; notranslate">
#!/bin/bash
username=xxxxxxxx
password=yyyyyyyyyy
numTweets=10

#output tweets XML
curl --basic --user $username:$password http://twitter.com/statuses/friends_timeline.xml?count=$numTweets
#Some crazy AWK goes here... your assignment ;)
</pre>
<p>I really don&#8217;t want to read my tweets in XML. Being a Java guy, I wonder if there is a way we can harness it&#8217;s power. <strong>Groovy is basically enhanced Java</strong> so I can </p>
<pre class="brush: groovy; light: true; title: ; notranslate">
#!/usr/bin/env groovy

username = &quot;xxxxxxxx&quot;
password = &quot;yyyyyyyyyyy&quot;
numTweets = &quot;10&quot;

//If we have an argument use it
if (args &amp;&amp; args[0].toFloat() &gt; 0) numTweets = args[0]

//Use twitter API with cURL
output = &quot;curl -u $username:$password http://twitter.com/statuses/friends_timeline.xml?count=$numTweets&quot;.execute().text

//Parsing XML is Amazingly easy in Groovy
tweets = new XmlSlurper().parseText(output)
tweets.status.each { tweet-&gt;
    println &quot;${tweet.user.name}: ${tweet.text}&quot;
}
</pre>
<p>And run it just like any shell script:</p>
<pre class="brush: bash; light: true; title: ; notranslate">
chmod +x checktweets.groovy
checktweets.groovy 15
</pre>
<p>Groovy can certainly do much more than deal with XML, it is a full-featured dynamic language with great expressiveness. It is simply satisfying to write, and you can do everything a shell script can do and more.</p>
<p>As an extra treat, here is a Groovy script to update your twitter status, tweet.groovy:</p>
<pre class="brush: groovy; light: true; title: ; notranslate">
#!/usr/bin/env groovy

username = &quot;xxxxxxxx&quot;
password = &quot;yyyyyyyyyyy&quot;

if (args) {
    status = args[0]
    println &quot;curl -u $username:$password -d status=\&quot;${status}\&quot; http://twitter.com/statuses/update.xml&quot;.execute().text
}
</pre>
<p>I personally have a /scripts directory in my home dir which I put on my path, so to run the previous script I just have to type:</p>
<pre class="brush: bash; light: true; title: ; notranslate">
tweet.groovy &quot;Twitter is now Groovy, baby!&quot;
</pre>
<h2>Conclusion</h2>
<p>Ok, so if you&#8217;re fairly savvy with your old-school shell scripting, I don&#8217;t expect you to switch to Groovy for simple tasks. I see 2 major cases for using it:</p>
<ul style="list-style-type: upper-roman; margin-left: 3em;">
<li>You need to do complex operations on data</li>
<li>You know Java better than your shell scripting</li>
</ul>
<p>If you like Groovy and want to learn more, you might consider checking out the <a href="http://groovy.codehaus.org/Documentation" title="Groovy documentation">Groovy docs</a>.</p>
<p>Tell me your thoughts!</p>


<p>Related posts:<ol><li><a href='http://eriwen.com/groovy/crush-images-with-groovy/' rel='bookmark' title='Crush images on the command-line with Groovy'>Crush images on the command-line with Groovy</a></li>
<li><a href='http://eriwen.com/groovy/groovy-categories/' rel='bookmark' title='Using Groovy Categories to override operators'>Using Groovy Categories to override operators</a></li>
<li><a href='http://eriwen.com/groovy/introducing-groovyrtm/' rel='bookmark' title='Introducing GroovyRTM: A Groovier way to Remember The Milk'>Introducing GroovyRTM: A Groovier way to Remember The Milk</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://eriwen.com/groovy/groovy-shell-scripts/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
	</channel>
</rss>

