<?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>Rich Internet Applications (RIA) &#187; Grails</title>
	<atom:link href="http://www.canoo.com/blog/tag/grails/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.canoo.com/blog</link>
	<description></description>
	<lastBuildDate>Wed, 18 Jan 2012 14:30:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>JavaOne 2011 Wednesday</title>
		<link>http://www.canoo.com/blog/2011/10/06/javaone-2011-wednesday/</link>
		<comments>http://www.canoo.com/blog/2011/10/06/javaone-2011-wednesday/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 17:11:44 +0000</pubDate>
		<dc:creator>Dierk</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaOne]]></category>
		<category><![CDATA[Swing]]></category>
		<category><![CDATA[Dierk König]]></category>

		<guid isPermaLink="false">http://www.canoo.com/blog/?p=2286</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/10/06/javaone-2011-wednesday/";</script>Opinions expressed in this post are totally my own and not necessarily that of my employer. Wednesday started with the infamous &#8220;scriptbowl&#8221;, a competition between various scripting languages. This year the contenters were JRuby, Groovy, Scala, and Clojure. I wondered whether Scala considers itself a scripting language but obviously they either do or just seek [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/10/06/javaone-2011-wednesday/";</script><p><em>Opinions expressed in this post are totally my own and not necessarily that of my employer.</em></p>
<p>Wednesday started with the infamous &#8220;scriptbowl&#8221;, a competition between various scripting languages. This year the contenters were JRuby, Groovy, Scala, and Clojure. I wondered whether Scala considers itself a scripting language but obviously they either do or just seek the opportunity to be on stage.</p>
<p>To keep a long story short: <strong>Groovy has won this event for the third time in a row</strong>! This year the race was tied with Scala. Guillaume presented Groovy in the typical Groovy-idomatic style and explained every single line of his concurrent visual analyzer for Google+ postings. Dick Wall presented only non-idomatic Scala code. I interpret this as: to make Scala appealing you have to make it look like Groovy. Furthermore, he presented Kojo, which is a great interactive learning environment written in Play/Scala. In contrast to all other presentations, this was not specifically created for the scriptbowl, nor was it written by the presenter, nor was it clear how much effort went into it, nor did the audience see a single line the implementation code. How much this skewed the comparison, I leave to everybody&#8217;s judgement. The show was good, though.</p>
<p>I felt a bit sorry for Clojure. It is a great language and deserves a presentation that is more visually appealing to convince the crowd.</p>
<p>Afterwards, I attended a hands-on lab for &#8220;rapid enterprise development with netbeans&#8221;, which was essentially creating a Swing app for database CRUD actions. If I remember correctly, I did the exact same task 1997 with JBuilder. It left me with the feeling of &#8220;Yes, it works&#8221; but it is not less complex than it was 13 years ago.</p>
<p>Early afternoon Gerrit Grunwald (better known as @hansolo_) presented his work on simplified custom components for Swing. Given that he speaks about an activity that is both utterly important and highly underadvertised he would really deserve speaking at the center stage.</p>
<p>Graeme Rocher&#8217;s great session about Grails, polyglot datastores (hibernate, jpa, redis, mongodb, &#8230;), and the cloud was overshadowed by the news that Steve Jobs has died. Accidentally, the demo application was about showing a BBC News stream, which displayed this information live on stage. Both the presenter and the audience were equally touched.</p>
<p>The day officially ended with a big event at treasure island. I decided to not go there, though, and meet the former Canooey Denis Antonioli in Berkely where we had a great evening.</p>
<p>Dierk Koenig</p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script>]]></content:encoded>
			<wfw:commentRss>http://www.canoo.com/blog/2011/10/06/javaone-2011-wednesday/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Grails Podcast Interview with Hamlet D&#8217;Arcy</title>
		<link>http://www.canoo.com/blog/2011/07/11/grails-podcast-interview-with-hamlet-darcy/</link>
		<comments>http://www.canoo.com/blog/2011/07/11/grails-podcast-interview-with-hamlet-darcy/#comments</comments>
		<pubDate>Mon, 11 Jul 2011 20:11:44 +0000</pubDate>
		<dc:creator>Hamlet</dc:creator>
				<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Interview]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[Hackergarten]]></category>
		<category><![CDATA[hamlet]]></category>

		<guid isPermaLink="false">http://www.canoo.com/blog/?p=2207</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/07/11/grails-podcast-interview-with-hamlet-darcy/";</script>Last week I sat down with the gang at the Grails Podcast and talked shop for about 45 minutes. We talked about a lot of different topics such as Groovy, Lean software, Spock, Groovy in Action, and of course Hackergarten. Check out the full audio and shownotes over at Grails Podcast Episode 125. var dzone_style="2";]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/07/11/grails-podcast-interview-with-hamlet-darcy/";</script><p>Last week I sat down with the gang at the <a href="http://www.grailspodcast.com/">Grails Podcast</a> and talked shop for about 45 minutes. We talked about a lot of different topics such as Groovy, Lean software, Spock, Groovy in Action, and of course Hackergarten. Check out the full audio and shownotes over at <a href="http://www.grailspodcast.com/blog/id/247">Grails Podcast Episode 125</a>.</p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script>]]></content:encoded>
			<wfw:commentRss>http://www.canoo.com/blog/2011/07/11/grails-podcast-interview-with-hamlet-darcy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IntelliJ IDEA 10.5 for the Groovy and Grails Developer</title>
		<link>http://www.canoo.com/blog/2011/05/23/intellij-idea-10-5-for-the-groovy-and-grails-developer/</link>
		<comments>http://www.canoo.com/blog/2011/05/23/intellij-idea-10-5-for-the-groovy-and-grails-developer/#comments</comments>
		<pubDate>Mon, 23 May 2011 13:54:41 +0000</pubDate>
		<dc:creator>Hamlet</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[hamlet]]></category>
		<category><![CDATA[idea]]></category>

		<guid isPermaLink="false">http://www.canoo.com/blog/?p=2136</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/05/23/intellij-idea-10-5-for-the-groovy-and-grails-developer/";</script>The formal release of IntelliJ IDEA 10.5 came out this month, and the new Groovy features are all part of the free and open source Community Edition, and the Grails features are part of the Ultimate Edition. IDEA X (or 10 to you non-Romans) was a larger release of the product, and I already blogged [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/05/23/intellij-idea-10-5-for-the-groovy-and-grails-developer/";</script><p>The formal release of <a href="http://www.jetbrains.com/idea/whatsnew/">IntelliJ IDEA 10.5</a> came out this month, and the new Groovy features are all part of the free and open source Community Edition, and the Grails features are part of the Ultimate Edition. IDEA X (or 10 to you non-Romans) was a larger release of the product, and I already blogged about <a href="http://www.canoo.com/blog/2010/12/20/intellij-idea-x-for-groovy-developers/">IDEA X for Groovy</a> and <a href="http://www.canoo.com/blog/2010/12/23/idea-x-for-the-grails-developer/">IDEA X for Grails</a>. There&#8217;s still plenty of nice features in 10.5 though. The prices for IDEA recently dropped between $100 and $50, and anyone purchasing IDEA since last November gets 10.5 as a free upgrade.</p>
<p>Here&#8217;s what 10.5 is all about (or skip straight to the <a href="http://confluence.jetbrains.net/display/IDEADEV/IDEA+10.5+RC+Release+Notes">release notes</a>).</p>
<p><strong>Groovy 1.8 Support</strong><br />
A big push in IDEA 10.5 was Groovy 1.8 support. Groovy 1.8 contains many compile time AST transformations that do things like write out new methods and fields into the Groovy .class files. Normal IDEs will show in-IDE compile errors when using these annotations yet still allow you to compile and execute the script. This has been fixed in IDEA, so the IDE should give you proper code completion and support when you use <a href="http://groovy.codehaus.org/gapi/groovy/transform/Field.html">@Field</a>, <a href="http://groovy.codehaus.org/gapi/groovy/transform/TupleConstructor.html">@TupleConstructor</a>, and <a href="http://www.canoo.com/blog/2010/09/20/log-groovys-new-and-extensible-logging-conveniences/">@Log</a>. This is especially helpful when invoking these synthetic members from Java code.</p>
<p><strong>Introduce Parameter and Introduce Field Refactorings</strong><br />
Introduce Parameter is one of my favorite refactorings. Select a local variable within a method, press Ctrl+Alt+P, and the local variable is extracted into a method parameter. It doesn&#8217;t <em>yet</em> work for closures, but you can <a href="http://youtrack.jetbrains.net/issue/IDEA-70064">vote for that feature</a>. Introduce Field is also handy: select a local variable in either a method <em>or a closure</em>, press Ctrl+Alt+F, and the local variable is extracted into a field on the enclosing class. IDEA is not capable of extracting a field in a script yet, which would logically create an <a href="http://groovy.codehaus.org/gapi/groovy/transform/Field.html">@Field</a> script field, but feel free to <a href="http://youtrack.jetbrains.net/issue/IDEA-70065">upvote the issue</a>.</p>
<p><strong>Go To Test (and vice versa) Support</strong><br />
Tests and production source follows a naming convention, for example MyClass and MyClassTest. You can now press Ctrl+Shift+T to jump to the test (if you&#8217;re in production code) or jump to the production code (if you&#8217;re in the test). And if there is no test, then it will prompt you to create a new one. This works great in most cases. Of course, with Groovy it is not so rare to have several top-level classes in a single source file. In these cases the feature can sometimes get confused. <a href="http://youtrack.jetbrains.net/issue/IDEA-70036">Upvote the fix here</a> if you want it to be just that much smarter in the future.</p>
<p><strong>More Code Completion and Intentions</strong><br />
The &#8220;add static import&#8221; intention is nice for those who use a lot of static imports. Just set your cursor in a constant referenced from your code, press Alt+Enter, and viola&#8230; the constant is statically imported. Also, code completion is now available when creating an object using named parameters, which makes them a little easier to use. A whole bunch of other code completion issues were fixed as well, but these were technically marked as bugs not features. You can always peruse the release notes to see the whole story.</p>
<p><strong>Performance</strong><br />
JetBrains claims that file indexing (typically at IDE startup) is now faster and that working with large Groovy files is more performant. It is hard for me to see a difference since I use the EAP versions and don&#8217;t currently work on any massive projects currently.</p>
<p><strong>Grails Code Generation &amp; Completion</strong> (Ultimate Edition)<br />
Some small but nice things here. If you reference a controller action from a GSP, and that action does not exist, then pressing Alt+Enter creates an empty action for you. Also, the type inference for values on the GrailsPlugins has been improved, such as the closure parameters for doWithApplicationContext, doWithDynamicMethods, etc, and code completion for controllers and action in custom plugins are now discovered automatically. Finally, the code inside &lt;r:script&gt; tags from the <a href="http://grails.org/plugin/resources">Grails Resource plugin</a> is now parsed as JavaScript, so full IDE JavaScript is available within them. This is supposed to become a standard for Grails 1.4, so it should continue to work with that release.</p>
<p><strong>Improved Grails Resource Bundle and i18n Support</strong><br />
With 10.5, if you reference a property using the &lt;g:message&gt; tag in a GSP, and that property does not exist, then the property will be underlined in red and you&#8217;ll be given an Alt+Enter Intention to create it for you. Nifty. Also, the existing i18n intentions should now work better when you have GString syntax in your text. For instance, the string &#8220;Hello, ${user}&#8221; should now be properly handled when extracting to a resource bundle.</p>
<p><strong>Various Usability Improvements</strong><br />
Last on the list are a few odds and ends around usability. Closures can now have the separator line between them in the IDE, the way methods show a line between them. GSP stacktraces have correct (and clickable) hyperlinks. The scripts folder is visible in the Grails view. And code navigation and formatting has been improved for several Grails Artefacts.</p>
<p>That&#8217;s it. Enjoy the upgrade, may your solid state disk never fail, and may your caches always be valid. Caio!</p>
<p>If you like this sort of thing, then there is also a whole bunch of other IDEA related content on <a href="http://hamletdarcy.blogspot.com/search/label/IDEA">my own blog</a> and on <a href="http://www.canoo.com/blog/tag/idea/">the Canoo blog</a>. Enjoy.</p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script>]]></content:encoded>
			<wfw:commentRss>http://www.canoo.com/blog/2011/05/23/intellij-idea-10-5-for-the-groovy-and-grails-developer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IntelliJ IDEA series (II) advanced navigation</title>
		<link>http://www.canoo.com/blog/2011/01/05/intellij-idea-series-ii/</link>
		<comments>http://www.canoo.com/blog/2011/01/05/intellij-idea-series-ii/#comments</comments>
		<pubDate>Wed, 05 Jan 2011 21:55:29 +0000</pubDate>
		<dc:creator>Dierk</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Dierk König]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[idea]]></category>

		<guid isPermaLink="false">http://www.canoo.com/blog/?p=1815</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/01/05/intellij-idea-series-ii/";</script>As promised, here are some more strategies I use when navigating inside IDEA. Please note that this is for Groovy and Grails development on Mac OS X with Swiss-german keyboard layout, so the keybindings may differ on your machine. (For Windows, you most often can replace Cmd with Ctrl) Alt F1 &#8220;Select in&#8230;&#8221; is your [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/01/05/intellij-idea-series-ii/";</script><p>As promised, here are some more strategies I use when navigating inside IDEA.</p>
<p><em>Please note that this is for Groovy and Grails development on Mac OS X with  Swiss-german keyboard layout, so the keybindings may differ on your  machine. (For Windows, you most often can replace Cmd with Ctrl)</em></p>
<p><strong>Alt F1 </strong>&#8220;Select in&#8230;&#8221;</p>
<blockquote><p>is your friend when you are in a file or class and you have lost track on where in the project this file lives or you want to navigate in the &#8220;neighborhood&#8221;. You get a selection like below</p>
<p><a href="http://www.canoo.com/blog/wp-content/uploads/2011/01/SelectIn.png"><img class="alignnone size-full wp-image-1817" title="SelectIn" src="http://www.canoo.com/blog/wp-content/uploads/2011/01/SelectIn.png" alt="" width="185" height="257" /></a></p>
<p>From this selection, I most often choose the project view, which is even quicker accessible via <strong>Cmd 1</strong> (like all the numbered toggle buttons around your frame can be reached via <strong>Cmd <em>number</em></strong>).</p></blockquote>
<p>When I started working with IDEA, I used the project view pretty much like a Windows Explorer or Mac Finder. But it is actually much more versatile. Especially when working with Grails, where you have quite a number of different source roots, it is interesting to switch to the <em>package</em> view, e.g. to see production classes and their tests beneath each other.</p>
<p>Moreover, in the project view &#8211; <em>just like in any other tree view in IDEA</em> &#8211; you can simply <strong>start typing</strong> and this will select the closest match in the tree! For example like so:</p>
<p><a href="http://www.canoo.com/blog/wp-content/uploads/2011/01/TypeInTree.png"><img class="alignnone size-full wp-image-1821" title="TypeInTree" src="http://www.canoo.com/blog/wp-content/uploads/2011/01/TypeInTree.png" alt="" width="291" height="232" /></a></p>
<p>This can speed up your navigation dramatically.</p>
<p>But you can even spare using the project view (for better screen real-estate) with the <strong>Navigation Bar</strong>.</p>
<p><strong>Fn Alt left-arrow</strong> (or <strong>Alt-Home</strong> but I have no Home key on my MBP)</p>
<blockquote><p>jumps to the navigation bar like so:</p>
<p><a href="http://www.canoo.com/blog/wp-content/uploads/2011/01/NavBar.png"><img class="alignnone size-full wp-image-1822" title="NavBar" src="http://www.canoo.com/blog/wp-content/uploads/2011/01/NavBar.png" alt="" width="463" height="159" /></a></p>
<p>You can now use the left/right arrow keys to &#8220;cd&#8221; up/down, use up/down arrow keys to make your choice of file or subdir.<br />
I discovered this functionality only recently but I must say that I like it very much. It keeps the maximum space available for the code. What could be better?</p></blockquote>
<p>This brings me to the point that <strong>ESC</strong> always brings you back to the editor (returns from any tool window) and <strong>Shift ESC</strong> does the same but closes the tool window and <strong>double clicking the editor tab</strong> closes all tool windows and allows maximum space for your code editors.</p>
<p>When navigating through many classes, one easily opens a lot of editors &#8211; more than can be displayed. I ususally keep the allowed number of open editors pretty low, since with many open editors it is anyway too tedious to find the one that I am looking for. I rather use</p>
<p><strong>Cmd E</strong></p>
<blockquote><p>to show the list of all recent <strong>e</strong>ditors or</p></blockquote>
<p><strong>Cmd Shift E</strong></p>
<blockquote><p>to show the list of all recently <em>changed</em> editors.</p></blockquote>
<p><strong>F11</strong></p>
<blockquote><p>toggles a bookmark for the current line and</p></blockquote>
<p><strong>Shift F11</strong></p>
<blockquote><p>allows navigating to any bookmark, including a preview. I like to use bookmarks a lot and use them as reminders for things to do before committing.</p></blockquote>
<p><strong>Gutter icons</strong> (that is the area just left to the beginning of code lines)</p>
<blockquote><p>allow quick access to superclasses and subclasses (also on method level).</p></blockquote>
<p>Interestingly, this is not a lot of different devices for navigating around, but those are the ones that are sufficient for me. I hardly never use the &#8220;UML&#8221; tab below each editor, even though the graphical hierarchy-based navigation works as good as all the other hierarchy views and tools. Well, I avoid complex inheritance structures in my code anyway&#8230;<br />
I also tried Ctrl Tab for the &#8220;Switcher&#8221; (while holding down Ctrl use Tab and Alt to make selections) but this doesn&#8217;t really align with my style of working.</p>
<p>Later, I will also talk about various search and inspection capabilities, which can also be seen as means of navigation.</p>
<p>But the next post will be about avoiding navigation at all &#8211; meaning you get the information without leaving your current edit location.</p>
<p>keep groovin&#8217;<br />
Dierk</p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script>]]></content:encoded>
			<wfw:commentRss>http://www.canoo.com/blog/2011/01/05/intellij-idea-series-ii/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>IntelliJ IDEA series (I) basic navigation</title>
		<link>http://www.canoo.com/blog/2011/01/05/intellij-idea-series-i/</link>
		<comments>http://www.canoo.com/blog/2011/01/05/intellij-idea-series-i/#comments</comments>
		<pubDate>Wed, 05 Jan 2011 15:11:27 +0000</pubDate>
		<dc:creator>Dierk</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Dierk König]]></category>
		<category><![CDATA[idea]]></category>

		<guid isPermaLink="false">http://www.canoo.com/blog/?p=1808</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/01/05/intellij-idea-series-i/";</script>I have used IntelliJ IDEA since 2001 and I&#8217;m happy to share some of my experiences, useful shortcuts, lesser-known features, and useful personal settings. My descriptions apply to using IDEA X Ultimate almost exclusively for Groovy and Grails development on Mac OS X with Swiss-german keyboard layout, so the keybindings may differ on your machine. [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/01/05/intellij-idea-series-i/";</script><p>I have used IntelliJ IDEA since 2001 and I&#8217;m happy to share some of my experiences, useful shortcuts, lesser-known features, and useful personal settings. My descriptions apply to using IDEA X Ultimate almost exclusively for Groovy and Grails development on Mac OS X with Swiss-german keyboard layout, so the keybindings may differ on your machine. (For Windows, you most often can replace Cmd with Ctrl)</p>
<p>It is very tempting to show a looooong list of features and keybindings, but I rather keep the list very short to make it easier to digest, remember, or try yourself right away.</p>
<p>Let&#8217;s start with how I typically navigate the project.</p>
<p><strong>Cmd N</strong></p>
<blockquote><p>Finds a class by <strong>N</strong>ame. As with any lookup facility in IDEA, you can provide only parts of the classname, camel-case abbreviations, and wildcards. When the class is not found in the project, the libraries are searched.</p></blockquote>
<p><strong>Cmd Shift N</strong></p>
<blockquote><p>Same as Cmd N, but for files by <strong>N</strong>ame in the project, instead of classes. The &#8220;Shift&#8221;ed version of a short can generally be translated to &#8220;smart&#8221;.</p></blockquote>
<p><strong>Cmd Alt Shift N</strong></p>
<blockquote><p>I can hardly overemphasize how much I like that one! It&#8217;s a smart search for any member (field, method) in your codebase. And it is fast! How often did I asks myself: &#8220;I know there was a getMy&lt;Something&gt; method in the code somewhere, but where was it?&#8221; This shortcut has the answer.</p></blockquote>
<p><strong>Cmd click or Cmd B</strong></p>
<blockquote><p>To jump to the definition of the sym<strong>b</strong>ol under the cursor.</p></blockquote>
<p>Once you have navigated to some information, you often want to navigate back to your starting point. You can use</p>
<p><strong>Cmd Alt left/right</strong></p>
<blockquote><p>to navigate back and forth the navigation history or</p></blockquote>
<p><strong>Cmd Shift Backspace</strong></p>
<blockquote><p>to bring you <strong>back</strong> to the last edit point. I use that all the time. And it also has a history, i.e. when you hit the shortcut twice, it will bring you back to the last-but-one edit point.</p></blockquote>
<p>You can cover quite some ground with only these basic operations.</p>
<p>In the next post of this series, I will show some even more advanced navigation techniques.</p>
<p>keep groovin&#8217;<br />
Dierk</p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script>]]></content:encoded>
			<wfw:commentRss>http://www.canoo.com/blog/2011/01/05/intellij-idea-series-i/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>IDEA X for the Grails Developer</title>
		<link>http://www.canoo.com/blog/2010/12/23/idea-x-for-the-grails-developer/</link>
		<comments>http://www.canoo.com/blog/2010/12/23/idea-x-for-the-grails-developer/#comments</comments>
		<pubDate>Thu, 23 Dec 2010 06:06:12 +0000</pubDate>
		<dc:creator>Hamlet</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[hamlet]]></category>
		<category><![CDATA[idea]]></category>

		<guid isPermaLink="false">http://www.canoo.com/blog/?p=1641</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2010/12/23/idea-x-for-the-grails-developer/";</script>The new version of IntelliJ IDEA was released last week. I already blogged what IDEA X means for Groovy developers, and all of those features are obviously available to any Community Edition user (that&#8217;s the free one). This post looks at all the new Grails features available in the Ultimate Edition (the one you pay [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2010/12/23/idea-x-for-the-grails-developer/";</script><p>The new version of <a href="http://www.jetbrains.com/idea/">IntelliJ IDEA</a> was released last week. I already blogged what <a href="http://www.canoo.com/blog/2010/12/20/intellij-idea-x-for-groovy-developers/">IDEA X means for Groovy developers</a>, and all of those features are obviously available to any Community Edition user (that&#8217;s the free one). This post looks at all the new Grails features available in the Ultimate Edition (the one you pay for). These features are a little harder for me to try out personally as my current project is EJB3 and not Grails (someone save me please!). I&#8217;ve tried quite a few of them personally, but feedback is always welcome in case I miss or exaggerate something. Without further ado:</p>
<p><strong>Grails Aware IDE Features</strong></p>
<p><em>Better MVC Rename Refactoring</em> &#8211; Related artifacts are now renamed together, such as renaming a view when renaming a controller action, or renaming test cases when the main class changes (<a href="http://youtrack.jetbrains.net/issue/IDEA-45378">IDEA-45378</a>).</p>
<p><em>Functional-Test Plugin Support</em> &#8211; The Functional-Test plugin got some love, and support is the same as normal unit and integration tests (<a href="http://youtrack.jetbrains.net/issue/IDEA-51853">IDEA-51853</a>). Testing is good.</p>
<p><em>Filter Support</em> &#8211; There is a new action to easily create filters, code completion of actions and controllers works within the filter mapping code, and method like render() and getRequests() resolve from the filter body (<a href="http://youtrack.jetbrains.net/issue/IDEA-60331">IDEA-60331</a> and <a href="http://youtrack.jetbrains.net/issue/IDEA-60167">IDEA-60167</a>).</p>
<p><em>Mapping DSL Support </em>- In domain class mappings you now get code completion that is aware of HibernateMappingBuilder, and the rename refactoring is aware of the mappings (<a href="http://youtrack.jetbrains.net/issue/IDEA-49089">IDEA-49089</a>.</p>
<p><em>Constraint DSL Support</em> &#8211; Domain object constraints definitions now have code completion on common constraint names, completion on field names, and is correctly updated when using the Rename refacotring (<a href="http://youtrack.jetbrains.net/issue/IDEA-49115">IDEA-49115</a>).</p>
<p><em>Service and Bean Inference</em> &#8211; The names and types of services and beans can be inferred in controllers and other artifacts (<a href="http://youtrack.jetbrains.net/issue/IDEA-49111">IDEA-49111</a> and <a href="http://youtrack.jetbrains.net/issue/IDEA-45610">IDEA-45610</a>).</p>
<p><strong>GSP and View Improvements</strong></p>
<p><em> Easy Internationalization</em> &#8211; I love this. There&#8217;s a new intention in GSP files to move a static string into a message bundle. Alt+Enter does the trick. <a href="http://youtrack.jetbrains.net/issue/IDEA-44846">IDEA-44846</a> and <a href="http://youtrack.jetbrains.net/issue/IDEA-59519">IDEA-59519</a></p>
<p><em>Groovy Inspection Support</em> &#8211; In the past, only some Groovy inspections worked in GSP files. Support for more of the inspections have been added, like &#8220;divide by zero&#8221;, &#8220;double negation&#8221;, and &#8220;unresolved expression&#8221;. It&#8217;s not clear if <em>all</em> inspections are supported, but at least more are <a href="http://youtrack.jetbrains.net/issue/IDEA-50414">IDEA-50414</a></p>
<p><em>Better Variable Resolution</em> &#8211; References to controllers and controller properties are now resolved within GSP view pages. I assume this means at least control click navigation and code completion. See <a href="http://youtrack.jetbrains.net/issue/IDEA-49731">IDEA-49731</a> and <a href="http://youtrack.jetbrains.net/issue/IDEA-48692">IDEA-48692</a>. Also, release notes claim &#8220;Completion for value of action/controller parameters in built-in methods redirect(), render(), forward(), chain()&#8221;.</p>
<p><em>g:fieldValue Support </em>- g:fieldValue tags reference a field. Rename, completion, and find usages should all now work within the tag. <a href="http://youtrack.jetbrains.net/issue/IDEA-60858">IDEA-60858</a></p>
<p><em>Debugging in GSP </em>- Release notes claim &#8220;Preliminary debugging of GSP pages&#8221;. Not 100% sure what this means in practice.</p>
<p><em>JavaScript in Tags</em> &#8211; Release notes claim &#8220;support javascript in tags like &#8220;onSuccess&#8221;, &#8220;onFailure&#8221;, etc&#8221;. Again, I&#8217;m not sure what this means in practice.</p>
<p><strong>Find Usages</strong></p>
<p><em>Domain class fields </em>- Find usages for domain class fields has been improved. The ticket indicates that usages of fields within GORM dynamic queries are now supported (<a href="http://youtrack.jetbrains.net/issue/IDEA-58025">IDEA-58025</a>).</p>
<p><em>Variables from tags</em> &#8211; Find usage support for variables defined using a g:set tag within a GSP (<a href="http://youtrack.jetbrains.net/issue/IDEA-58185">IDEA-58185</a>).</p>
<p><em>Property Usages </em>- i18n message properties are now included in Find Usages, and the corresponding &#8220;unused property&#8221; inspections should be working (<a href="http://youtrack.jetbrains.net/issue/IDEA-52117">IDEA-52117</a>).</p>
<p><strong>Even More Code Completion</strong> &#8211; Besides what&#8217;s already been mentioned, we also have&#8230;</p>
<p><em>Model Aware GSPs </em>- Related to above, views are now aware of which model is returned from the controller, and autocomplete works for them. More info at <a href="http://youtrack.jetbrains.net/issue/IDEA-40926">IDEA-40926</a></p>
<p><em>Variable Aware GSPs</em> &#8211; When you define a variable in a GSP then IDEA now autocompletes it and stops pestering you for missing imports <a href="http://youtrack.jetbrains.net/issue/IDEA-50257">IDEA-50257</a></p>
<p><em>Attribute Aware GSPs</em> &#8211; Finally, code completion and navigation exists for the standard attributes: &#8220;action&#8221;, &#8220;controller&#8221;, &#8220;template&#8221;, &#8220;contextPath&#8221;, &#8220;plugin&#8221;, and well as variables defined in tags like g:each, g:set, etc.</p>
<p><em>And more, and more, and more</em> &#8211; There&#8217;s practically too many to list. Code completion works in <a href="http://youtrack.jetbrains.net/issue/IDEA-51414">type convertors</a>, in <a href="http://youtrack.jetbrains.net/issue/IDEA-57638">named queries</a>, in <a href="http://youtrack.jetbrains.net/issue/IDEA-51444">URL Mappings</a> and their <a href="http://youtrack.jetbrains.net/issue/IDEA-51444">GSP attribute values</a>, in <a href="http://youtrack.jetbrains.net/issue/IDEA-49052">scope objects</a> like servletContext, session, request, params, and flash (they also appear in the debugger as well), in views references from <a href="http://youtrack.jetbrains.net/issue/IDEA-48169">&#8216;render&#8217; and &#8216;redirect&#8217;</a> controller calls, and in <a href="http://youtrack.jetbrains.net/issue/IDEA-51390">hasOne mappings</a> which was missed in the last release.</p>
<p><strong>Grails Framework Support</strong></p>
<p><em>Gant Script Support </em>- IDEA is now aware than .groovy files in the scripts directory are Gant scripts. Targets are completed and imports are resolved better (<a href="http://youtrack.jetbrains.net/issue/IDEA-49738">IDEA-49738</a>).</p>
<p><em>Grails Target History </em>- Running a Grails target brings up a dialog box. You can now use up and down arrow to scroll through your history (<a href="http://youtrack.jetbrains.net/issue/IDEA-46943">IDEA-46943</a>).</p>
<p><em>Ivy Integration</em> &#8211; IDEA reads your Ivy cache and automatically loads source and javadoc jars if they&#8217;re available (<a href="http://youtrack.jetbrains.net/issue/IDEA-53294">IDEA-53294</a>).</p>
<p><em>UI Improvements</em> &#8211; The &#8220;Browse to http://localhost:8080/xxx&#8221; message in the console now lets you click it to open a browser (<a href="http://youtrack.jetbrains.net/issue/IDEA-47166">IDEA-47166</a>), the test console allows keyboard input in case your tests read from standard input (<a href="http://youtrack.jetbrains.net/issue/IDEA-57035">IDEA-57035</a>), the gutter of controller actions show an icon that lets you jump to the corresponding view (<a href="http://youtrack.jetbrains.net/issue/IDEA-49320">IDEA-49320</a>, and the &#8220;New&#8221; menu now has context sensitive sorting (<a href="http://youtrack.jetbrains.net/issue/IDEA-49086">IDEA-49086</a>). How&#8217;s that for productivity boosting?</p>
<p>I believe that covers it. If you want a free IDEA Ultimate license then there are ways to get them&#8230; speaking at your local Java/Groovy Users Group is usually the easiest, and many JUGs have giveaways if you feel lucky. If your group isn&#8217;t sponsored by JetBrains then you can always ask: email jugs@jetbrains.com!</p>
<p>Happy Holidays everyone. I&#8217;m hoping Santa brings IDEA 10.1.</p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script>]]></content:encoded>
			<wfw:commentRss>http://www.canoo.com/blog/2010/12/23/idea-x-for-the-grails-developer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Groovy CodeNarc 0.11 Unofficial Guide</title>
		<link>http://www.canoo.com/blog/2010/11/13/groovy-codenarc-0-11-unofficial-guide/</link>
		<comments>http://www.canoo.com/blog/2010/11/13/groovy-codenarc-0-11-unofficial-guide/#comments</comments>
		<pubDate>Sat, 13 Nov 2010 13:42:02 +0000</pubDate>
		<dc:creator>Hamlet</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[hamlet]]></category>

		<guid isPermaLink="false">http://canoo.com/blog/?p=1606</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2010/11/13/groovy-codenarc-0-11-unofficial-guide/";</script>Groovy CodeNarc is a static analysis tool for the Groovy language and does for Groovy what PMD and FindBugs does for Java: it analyses Groovy code for defects, mistakes, and bad practices. The new version 0.11 is a huge release for us. We&#8217;ve added over 50 new rules to the product (bringing the total to [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2010/11/13/groovy-codenarc-0-11-unofficial-guide/";</script><p>Groovy CodeNarc is a static analysis tool for the Groovy language and does for Groovy what PMD and FindBugs does for Java: it analyses Groovy code for defects, mistakes, and bad practices. The new version 0.11 is a huge release for us. We&#8217;ve added over 50 new rules to the product (bringing the total to 130+ rules) and a few really great features. This is THE new look CodeNarc, and it&#8217;s ready to use today in beta form using the <a href="http://meetcodenarc.appspot.com/edit/2001">CodeNarc Web Console</a> with the release coming by Monday, and we&#8217;ll be updating the Grails, Gradle, and Griffon plugins shortly. This post explains a few of my favorite new rules and features, and explains how you can help out. You can play with all the new rules today in the <a href="http://meetcodenarc.appspot.com/edit/2001">CodeNarc Web Console</a>, so if you find any rule misses, false positives, or just new ideas then save the script and drop us an email! So here is my list:</p>
<p><strong>@SuppressWarnings Support</strong><br />
All rules now recognize the java.lang.SuppressWarnings annotation on fields, methods, and classes. If this annotation is added then there will be no violations produced. This is great for the times when you really do want to ignore a rule or in the rare case where you find a false positive. Just as in Java, the annotation requires a String or List parameter. For example, annotating a class with @SuppressWarnings(&#8216;UnusedPrivateField&#8217;) will ignore the rule for that class. Annotating a method with @SuppressWarnings(['UnusedPrivateField', 'UnnecessaryIfStatementRule']) will ignore both rules for the annotated method.</p>
<p><strong>New Rules: Should use Operator not Method Call</strong><br />
Groovy supports Operator Overloading. &#8220;a.plus(b)&#8221; should be written as &#8220;a + b&#8221;. Likewise &#8220;a.minus(b)&#8221; should be &#8220;a &#8211; b&#8221;. Every single operator overloading in Groovy is supported: And, or, CompareTo, GetAt, etc., etc. This is great for newcomers (and old-timers) who often revert back to the Java way of doing things without realizing it. Check out these rules in the <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">basic ruleset</a> of the CodeNarc docs for more information: <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">ExplicitCallToAndMethod</a>, <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">ExplicitCallToCompareToMethod</a>, <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">ExplicitCallToDivMethod</a>, <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">ExplicitCallToEqualsMethod</a>, <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">ExplicitCallToGetAtMethod</a>, <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">ExplicitCallToLeftShiftMethod</a>, <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">ExplicitCallToMinusMethod</a>, <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">ExplicitCallToMultiplyMethod</a>, <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">ExplicitCallToModMethod</a>, <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">ExplicitCallToOrMethod</a>, <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">ExplicitCallToPlusMethod</a>, <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">ExplicitCallToPowerMethod</a>, <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">ExplicitCallToRightShiftMethod</a>, and <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">ExplicitCallToXorMethod</a>,</p>
<p><strong>New Rules: Explicit Creation of Collection Types</strong><br />
We all know the &#8220;[]&#8221; is an ArrayList and &#8220;[:]&#8221; is a HashMap. Do you know the syntax for Sets, HashSets, LinkedList, Stack, and TreeSet as well? CodeNarc does, and will tell you when you explicitly create an object of this type instead of using the Groovy shorthand. You&#8217;d be surprised how often it catches you out. Check out these rules in the <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">basic ruleset</a> of the CodeNarc docs for more information: <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">ExplicitCreationOfArrayList</a>, <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">ExplicitCreationOfHashMap</a>, <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">ExplicitCreationOfHashSet</a>, <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">ExplicitCreationOfLinkedList</a>, <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">ExplicitCreationOfStack</a>, and <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">ExplicitCreationOfTreeSet</a></p>
<p><strong>New Rules: Null Safety</strong><br />
Null stinks, don&#8217;t use it. Easier said then done and hand-rolling an <a href="http://www.scala-lang.org/api/current/scala/Option.html">option type</a> will raise the eyebrow of even the most hardened Scalar. So here are some rules: if your method returns a collection or map, then never return null. Return an empty collection instead. It makes the calling code a lot prettier to not worry about the null checks. Likewise, don&#8217;t return null from Boolean methods or CatchBlocks. They are accidents waiting to happen. The cool thing about these rules is that they analyze methods and closures to infer return types. It doesn&#8217;t just look at the method signatures it <em>discovers</em> the return type using type inference. We&#8217;re trying to make this more powerful and have even swapped some ideas with the groovy++ guys to see what we can share. In the meantime, check out these rules: <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">BooleanMethodReturnsNull</a>, <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">ReturnsNullInsteadOfEmptyArray</a>, <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">ReturnsNullInsteadOfEmptyCollection</a>, and <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">ReturnNullFromCatchBlock</a></p>
<p><strong>New Rules: Useless Constructs and Dead Code</strong><br />
Code <em>can</em> appear after a return or throw statement, but you should probably delete it. The <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">Dead Code Rule</a> helps you here. But many other things are pointless as well, such as double negatives in boolean expressions (<a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">DoubleNegative Rule</a>), supplying a default constructor as your only constructor (<a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">UnnecessaryConstructor Rule</a>), various useless calls on collections like &#8220;x.containsAll(x)&#8221; (<a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">UselessCollectionCall Rule</a>), overriding a method only to call super() as your single line implementation (<a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">UselessOverridingMethod Rule</a>), and return keywords in general (<a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">UnnecessaryReturnKeyword Rule</a>).</p>
<p><strong>New Rules: JUnit Clarity Rules</strong><br />
xUnit Patterns is a great book, but who has time to read the 800 page tome? No worries, we mined the text for good Junit rules. Don&#8217;t bother reading, just configure CodeNarc to do the learning for you. The <a href="http://codenarc.sourceforge.net/codenarc-rules-junit.html">UseAssertEqualsInsteadOfAssertTrue</a> makes sure you use assertEquals instead of assertTrue with an explicit .equals() invocation, and <a href="http://codenarc.sourceforge.net/codenarc-rules-junit.html">UseAssertTrueInsteadOfAssertEqualsRule</a> does the opposite: use assertTrue instead of assertEquals(true, &#8230;). You can guess what the rules <a href="http://codenarc.sourceforge.net/codenarc-rules-junit.html">UseAssertNullInsteadOfAssertEquals</a> and <a href="http://codenarc.sourceforge.net/codenarc-rules-junit.html">UseAssertSameInsteadOfAssertTrue</a> do. Also, using the fail() method instead of fail(String) obscures test failures. <a href="http://codenarc.sourceforge.net/codenarc-rules-junit.html">UseFailWithMessageInsteadOfWithout</a> makes sure you don&#8217;t use it. Lastly, you may want to abandon JUnit entirely and use Groovy <a href="http://hamletdarcy.blogspot.com/2009/05/new-power-assertions-in-groovy.html">Power Asserts</a>. We have you covered with <a href="http://codenarc.sourceforge.net/codenarc-rules-junit.html">JUnitStyleAssertions</a>.</p>
<p><strong>New Rules: Naming and Inheritance Problems</strong><br />
Some simple rules&#8230; don&#8217;t name a class Exception if it doesn&#8217;t extend Exception (<a href="http://codenarc.sourceforge.net/codenarc-rules-exceptions.html">ConfusingClassNamedException Rule</a>). Don&#8217;t name fields, methods, or closures with names that differ only in capitalization (<a href="http://codenarc.sourceforge.net/codenarc-rules-naming.html">ConfusingMethodName Rule</a>), and make sure that methods subclassed off Object are spelled correctly (<a href="http://codenarc.sourceforge.net/codenarc-rules-naming.html">ObjectOverrideMisspelledMethodName Rule</a>).</p>
<p><strong>And many other rules:</strong><br />
OK, I don&#8217;t want to leave any out, so here are the other rules included in the release:<br />
The <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">DuplicateCaseStatement Rule</a> check for duplicate case statements in a switch block, such as two equal integers or strings. The <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">GStringAsMapKey Rule</a> checks that GString are not used as a map key since its hashcode is not guaranteed to be stable. The <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">InvertedIfElse Rule</a> checks for an inverted if-else statement, which is where there is a single if statement with a single else branch and the boolean test of the if is negated. The <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">SerialVersionUID Rule</a> checks for a serialVersionUID field that is not long, static, and final. The <a href="http://codenarc.sourceforge.net/codenarc-rules-basic.html">RemoveAllOnSelf Rule</a> checks that you don&#8217;t use removeAll to clear a collection which is unsafe.</p>
<p>The <a href="http://codenarc.sourceforge.net/codenarc-rules-concurrency.html">SynchronizedOnGetClass</a> checks for synchronization on getClass() rather than class literal which is again unsafe. The <a href="http://codenarc.sourceforge.net/codenarc-rules-concurrency.html">UseOfNotifyMethod Rule</a> Checks for code that calls notify() rather than notifyAll() which is also usually unsafe. And the <a href="http://codenarc.sourceforge.net/codenarc-rules-exceptions.html">CatchIllegalMonitorStateException Rule</a> checks for catching IllegalMonitorStateException which is usually a sign of faulty multithreading and interruption logic.</p>
<p>The last few are <a href="http://codenarc.sourceforge.net/codenarc-rules-size.html">MethodCount Rule</a> which checks if the number of methods within a class exceeds the maximum (configurable), the <a href="http://codenarc.sourceforge.net/codenarc-rules-dry.html">DuplicateNumberLiteral Rule</a> which checks for duplicate number literals within the current class, and the <a href="http://codenarc.sourceforge.net/codenarc-rules-dry.html">DuplicateStringLiteral Rule</a> which checks for duplicate String literals within the current class.</p>
<p>If you turn on all of these rules I am sure you will have hundreds if not thousands of violations. That&#8217;s a good thing!</p>
<p><strong>How to Help</strong><br />
Yes, we need your help. We want 50 more rules for the next release. Here&#8217;s some ideas to help for those without much time.<br />
<em> Got 2 Seconds?</em> &#8211; Vote for the <a href="http://youtrack.jetbrains.net/issue/IDEA-61209?projectKey=IDEA">IntelliJ IDEA feature request to support CodeNarc</a> in the IDE.<br />
<em> Got 1 Minute?</em> &#8211; When you find a false positive then head to our <a href="https://sourceforge.net/tracker/?group_id=250145&amp;atid=1126575">Bug Tracker</a> and enter a ticket.<br />
<em> Got 2 Minutes?</em> &#8211; In your next code review write down one of the problems you found and the correct fix. Email it to me at hamletdrc@gmail.com or just save the script in the <a href="http://meetcodenarc.appspot.com">CodeNarc Web Console</a>. I&#8217;ll create a rule for it. Could be a bug, an idiom, or just a preference.<br />
<em> Got 5 Minutes?</em> &#8211; Take the issue from your code review and brainstorm some edge cases. Then head to our <a href="https://sourceforge.net/tracker/?group_id=250145&amp;atid=1126575">Bug Tracker</a> and enter a ticket.<br />
<em> Got an Hour?</em> &#8211; Write a rule. It&#8217;s simple and automated. Checkout the source, do a &#8220;mvn clean install&#8221; from the root, and run &#8220;groovy codenarc.groovy create-rule&#8221;. You&#8217;ll be prompted for input and the script creates everything you need, including failing unit tests. If you need help email the mailing lists.<br />
<em> Got Photoshop Skills?</em> &#8211; Can you <em>please</em> make us a <a href="https://sourceforge.net/mailarchive/forum.php?thread_name=BADB2D232D3C454E95C7C52A2ABA61E8%40GatewayNotebook&amp;forum_name=codenarc-user">new logo</a>? Pretty please?</p>
<p>Now go download those bits, run the reports, and see what you learn!</p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script>]]></content:encoded>
			<wfw:commentRss>http://www.canoo.com/blog/2010/11/13/groovy-codenarc-0-11-unofficial-guide/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>J1 2009: Grails Podcast Live with Dierk König</title>
		<link>http://www.canoo.com/blog/2009/06/09/j1-2009-grails-podcast-live-with-dierk-konig/</link>
		<comments>http://www.canoo.com/blog/2009/06/09/j1-2009-grails-podcast-live-with-dierk-konig/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 07:18:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[JavaOne]]></category>
		<category><![CDATA[Dierk König]]></category>

		<guid isPermaLink="false">http://canoo.com/blog/?p=422</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2009/06/09/j1-2009-grails-podcast-live-with-dierk-konig/";</script>  CGUG was at the first ever live Grails Podcast event during JavaOne 2009 in San Francisco, CA. This was the first time Sven Haiges and Glen Smith have ever broadcasted from the same location in front of a live audience. Panelists included Canoo Fellow Dierk König, Scott Davis, Andres Almiray, Danno Ferrin and James [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2009/06/09/j1-2009-grails-podcast-live-with-dierk-konig/";</script><p> </p>
<p>CGUG was at the first ever live Grails Podcast event during JavaOne 2009 in San Francisco, CA. This was the first time Sven Haiges and Glen Smith have ever broadcasted from the same location in front of a live audience. Panelists included Canoo Fellow <strong>Dierk König</strong>, Scott Davis, Andres Almiray, Danno Ferrin and James Williams. </p>
<p> </p>
<p> <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="300" height="200" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://blip.tv/play/AYGH9TiXtDM" /><embed type="application/x-shockwave-flash" width="300" height="200" src="http://blip.tv/play/AYGH9TiXtDM"></embed></object></p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script>]]></content:encoded>
			<wfw:commentRss>http://www.canoo.com/blog/2009/06/09/j1-2009-grails-podcast-live-with-dierk-konig/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interview with Canoo Fellow Dierk König</title>
		<link>http://www.canoo.com/blog/2009/06/04/interview-with-canoo-fellow-dierk-konig/</link>
		<comments>http://www.canoo.com/blog/2009/06/04/interview-with-canoo-fellow-dierk-konig/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 09:36:31 +0000</pubDate>
		<dc:creator>Felix Schrape</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[JavaFX]]></category>
		<category><![CDATA[JavaOne]]></category>
		<category><![CDATA[Swing]]></category>
		<category><![CDATA[WebTest]]></category>
		<category><![CDATA[canoo]]></category>
		<category><![CDATA[Dierk König]]></category>
		<category><![CDATA[Webstest]]></category>

		<guid isPermaLink="false">http://canoo.com/blog/?p=401</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2009/06/04/interview-with-canoo-fellow-dierk-konig/";</script>  Scott Davis interviewed Dierk König, Canoo Fellow and Grails/Groovy-Evangelist for Thirsty Head at blip.tv. In the interview, Dierk gives an inside-view about new Grails improvements, about his JavaOne talk, JavaFX and the impact of Canoo Webtest. Enjoy this interesting chat about &#8220;beauty and code&#8221;!     var dzone_style="2";]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2009/06/04/interview-with-canoo-fellow-dierk-konig/";</script><p> </p>
<p>Scott Davis interviewed <strong>Dierk König</strong>, Canoo Fellow and Grails/Groovy-Evangelist for Thirsty Head at blip.tv. In the interview, Dierk gives an inside-view about new Grails improvements, about his JavaOne talk, JavaFX and the impact of Canoo Webtest. Enjoy this interesting chat about &#8220;beauty and code&#8221;!</p>
<p> </p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="390" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://blip.tv/play/AYGG0FqXyGY" /><embed type="application/x-shockwave-flash" width="480" height="390" src="http://blip.tv/play/AYGG0FqXyGY"></embed></object></p>
<p> </p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script>]]></content:encoded>
			<wfw:commentRss>http://www.canoo.com/blog/2009/06/04/interview-with-canoo-fellow-dierk-konig/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Canoo @ WJAX/SOACon 2008</title>
		<link>http://www.canoo.com/blog/2008/11/17/canoo-wjaxsoacon-2008/</link>
		<comments>http://www.canoo.com/blog/2008/11/17/canoo-wjaxsoacon-2008/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 09:11:32 +0000</pubDate>
		<dc:creator>andreas</dc:creator>
				<category><![CDATA[Canoo.net]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java RIA]]></category>
		<category><![CDATA[JavaFX]]></category>
		<category><![CDATA[Rich Internet Applications]]></category>
		<category><![CDATA[Sample Apps]]></category>
		<category><![CDATA[Swing]]></category>
		<category><![CDATA[UltraLightClient]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[canoo]]></category>
		<category><![CDATA[ria]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Why ULC?]]></category>
		<category><![CDATA[WJAX]]></category>

		<guid isPermaLink="false">http://canoo.com/blog/?p=314</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2008/11/17/canoo-wjaxsoacon-2008/";</script>This is just a quick note about the WJAX Java developer conference that take place last week in Munich. The conference program was quite balanced and beside the main stream topics about SOA (ServiceOrientedArchitektur &#8211; represented by the SOACon conference), Spring, Application Security and OSGi there was a huge number of different topics, which were [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2008/11/17/canoo-wjaxsoacon-2008/";</script><p>This is just a quick note about the WJAX Java developer conference that take place last week in Munich.</p>
<p>The conference program was quite balanced and beside the main stream topics about SOA (ServiceOrientedArchitektur &#8211; represented by the SOACon conference), Spring, Application Security and OSGi there was a huge number of different topics, which were addressed by several talks.</p>
<p>Most interesting from my point of view were following sessions:</p>
<ul>
<li>Keynote from Jonas Jacobi: Re-architecting the Web with HTML 5 Communication.</li>
<li>Talk from Karsten Lentzsch: Efficient design of swing UI&#8217;s.</li>
<li>Talk from Angelika Langer: Java programming in the age of multicore.</li>
<li>Talk from Dierk Koenig: RESTful JEE with Grails.</li>
</ul>
<p><a href="http://canoo.com/blog/wp-content/uploads/2008/11/img_8517.jpg"><img class="alignnone size-medium wp-image-315" title="Dirk Krampe at the canoo booth" src="http://canoo.com/blog/wp-content/uploads/2008/11/img_8517-300x209.jpg" alt="" width="300" height="209" /></a><br />
Canoo was exhibiting on a booth, which gave the great opportunity to present and talk about our products <a title="UltraLightClient (ULC)" href="http://canoo.com/ulc">UltraLightClient (ULC)</a>, the just released language application for the IPhone (using <a title="canoo.net" href="http://www.canoo.net">canoo.net</a>), our demo for the new <a title="JavaFX platform" href="http://www.musicpinboard.com/">JavaFX platform</a> and <a title="fancy UltraLightClient / Swing rich client applications" href="http://www.canoo.com/ulc/demos/onlineshop.html">fancy UltraLightClient / Swing rich client applications</a>. In addition Canoo members used the presence to keep in touch with existing costumers, contact new ones or presented the company to potential new staff members.</p>
<p><strong>Canoo Online Quiz </strong></p>
<p>All the visitors on the booth and all other interested software developers had and still have the possibility to join an online quiz. Its possible to win an iPod touch or one of ten &#8216;Groovy in Action&#8217; books. The quiz can be found at <a title="www.canoo.com/quiz" href="http://www.canoo.com/quiz">www.canoo.com/quiz</a> and will end at the 30.11.2008.</p>
<p><a href="http://canoo.com/blog/wp-content/uploads/2008/11/img_8540_24.jpg"><img class="alignnone size-medium wp-image-320" title="Dierk König" src="http://canoo.com/blog/wp-content/uploads/2008/11/img_8540_24-255x300.jpg" alt="" width="255" height="300" /></a></p>
<p>Dierk König, Canoo fellow and author of the &#8216;Groovy in Action&#8217; book, was holding a groovy workshop and was giving a talk about RESTful JEE with Grails.</p>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script>]]></content:encoded>
			<wfw:commentRss>http://www.canoo.com/blog/2008/11/17/canoo-wjaxsoacon-2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

