<?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; Dierk König</title>
	<atom:link href="http://www.canoo.com/blog/tag/dierk-konig/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 Thursday and wrap-up</title>
		<link>http://www.canoo.com/blog/2011/10/07/javaone-2011-thursday-and-wrap-up/</link>
		<comments>http://www.canoo.com/blog/2011/10/07/javaone-2011-thursday-and-wrap-up/#comments</comments>
		<pubDate>Fri, 07 Oct 2011 05:15:10 +0000</pubDate>
		<dc:creator>Dierk</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaFX]]></category>
		<category><![CDATA[JavaOne]]></category>
		<category><![CDATA[Swing]]></category>
		<category><![CDATA[canoo]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[Dierk König]]></category>

		<guid isPermaLink="false">http://www.canoo.com/blog/?p=2291</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/10/07/javaone-2011-thursday-and-wrap-up/";</script>Opinions expressed in the post are solely my own and not necessarily those of my employer. Thursday started with the Community Keynote. Well, it actually started with a 25 minutes IBM presentation about their cloud story. This had obviously nothing to do with the topic of the event and later speakers pointed this out rather [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/10/07/javaone-2011-thursday-and-wrap-up/";</script><div id="_mcePaste"><em>Opinions expressed in the post are solely my own and not necessarily those of my employer.</em></div>
<div><em><br />
</em></div>
<div>Thursday started with the Community Keynote. Well, it actually started with a 25 minutes IBM presentation about their cloud story. This had obviously nothing to do with the topic of the event and later speakers pointed this out rather frankly. At least it was interesting to hear that there is a job title like &#8220;Cloud Architect&#8221;.</div>
<div id="_mcePaste">The real part of the Community Keynote started with a <em>quiet moment to honor Steve Jobs</em>.</div>
<div id="_mcePaste">Later on, various winners of the Duke choice award and JUG luminaries cared for a lighter mood again, presented their work and asked the audience for participation in their local JUGs and in the advancement of Java via the OpendJDK. The JavaPosse appeared on stage and presented a funny show.</div>
<div id="_mcePaste">It was also announced that many of the JavaOne talks will be available on parleys.com, which provide by far the best experience when it comes to viewing live-captured talks.</div>
<div id="_mcePaste">Afterwards I attended the ZeroTurnaround (JRebel) talk on classloader issues. The rather big room (~300 ppl) was packed and left the impression that many Java developers share a common pain around classloaders. It was a good talk, covering the basics and typical pifalls. The only surprise for me was *how* easily you can end up with a classloader leak.</div>
<div id="_mcePaste">In order to improve my fathering skills, I went into Ken Sipe&#8217;s talk on &#8220;Rocking the Gradle&#8221;, where I met Adam Bien. Ken is a great presenter. However, convincing the crowd is a challenge especially as many Maven users seem to suffer from the Stockholm syndrome.</div>
<div id="_mcePaste">Then onto &#8220;Visualization of Geomaps and Topic Maps with JavaFX 2.0&#8243;, which had some interesting visuals captured <a href="http://www.lodgon.com/lodgon/NEWS/Artikelen/2010/9/22_Our_CTO_presented_a_JavaOne_session_on_JavaFX.html">here</a>.</div>
<div>For me JavaOne 2011 finished with Jim Clarke and Dean Iverson on GroovyFX, where they made some really good points suggesting that Groovy is the best language to drive the JavaFX 2.0 API.</div>
<div>As a side note, James Weaver introduced me to Jim Clarke by pointing out &#8220;He is from *<strong>Canoo</strong>*&#8221;. Then the discussion went into how well-known Canoo is in the community and that all employees must be true geniuses to achieve so much with so few people <img src='http://www.canoo.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </div>
<div>Fazit: Still, JavaOne is nowhere near where it was before the Oracle acquisition both in terms of size and in terms of being an unparalleled community experience. Distribution all over various hotels just doesn&#8217;t feel right. However, meeting friends has been and still remains the most important part of JavaOne and the conference still delivers on that account.</div>
<div id="_mcePaste">Important topics were new Java versions, JavaEE (+cloud), and Java for the Desktop with 50+ talks on JavaFX. Whenever the audience was asked about which alternative languages they use, Groovy was the clear winner. It appears that in the mainstream, Groovy has become the default choice for dynamic programming on the JVM.</div>
<div id="_mcePaste">The topic of concurrent programming was in my eyes underrepresented. Guillaume and myself had simple usage of GPars in our demos but for such a big and increasingly important topic the coverage should be much more extensive.</div>
<div>Finally, some visual impressions.</div>
<div>Good-bye SF</div>
<div>Dierk Koenig</div>
<p><a href="http://www.canoo.com/blog/wp-content/uploads/2011/10/j1-01.jpg"><img class="alignnone size-medium wp-image-2292" title="j1-01" src="http://www.canoo.com/blog/wp-content/uploads/2011/10/j1-01-225x300.jpg" alt="" width="225" height="300" /></a><a href="http://www.canoo.com/blog/wp-content/uploads/2011/10/j1-02.jpg"><img class="alignnone size-medium wp-image-2293" title="j1-02" src="http://www.canoo.com/blog/wp-content/uploads/2011/10/j1-02-300x225.jpg" alt="" width="300" height="225" /></a><a href="http://www.canoo.com/blog/wp-content/uploads/2011/10/j1-03.jpg"><img class="alignnone size-medium wp-image-2294" title="j1-03" src="http://www.canoo.com/blog/wp-content/uploads/2011/10/j1-03-300x225.jpg" alt="" width="300" height="225" /></a><a href="http://www.canoo.com/blog/wp-content/uploads/2011/10/j1-04.jpg"><img class="alignnone size-medium wp-image-2295" title="j1-04" src="http://www.canoo.com/blog/wp-content/uploads/2011/10/j1-04-225x300.jpg" alt="" width="225" height="300" /></a><a href="http://www.canoo.com/blog/wp-content/uploads/2011/10/j1-17.jpg"><img class="alignnone size-medium wp-image-2296" title="j1-17" src="http://www.canoo.com/blog/wp-content/uploads/2011/10/j1-17-300x225.jpg" alt="" width="300" height="225" /></a><a href="http://www.canoo.com/blog/wp-content/uploads/2011/10/j1-25.jpg"><img class="alignnone size-medium wp-image-2297" title="j1-25" src="http://www.canoo.com/blog/wp-content/uploads/2011/10/j1-25-300x225.jpg" alt="" width="300" height="225" /></a><a href="http://www.canoo.com/blog/wp-content/uploads/2011/10/j1-27.jpg"><img class="alignnone size-medium wp-image-2298" title="j1-27" src="http://www.canoo.com/blog/wp-content/uploads/2011/10/j1-27-300x225.jpg" alt="" width="300" height="225" /></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/10/07/javaone-2011-thursday-and-wrap-up/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>JavaOne 2011 Tuesday</title>
		<link>http://www.canoo.com/blog/2011/10/05/javaone-2011-tuesday/</link>
		<comments>http://www.canoo.com/blog/2011/10/05/javaone-2011-tuesday/#comments</comments>
		<pubDate>Wed, 05 Oct 2011 05:33:59 +0000</pubDate>
		<dc:creator>Dierk</dc:creator>
				<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaOne]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[Dierk König]]></category>
		<category><![CDATA[JavaFX]]></category>

		<guid isPermaLink="false">http://www.canoo.com/blog/?p=2281</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/10/05/javaone-2011-tuesday/";</script>The Java strategy keynote started slowly with Juniper networks presenting their take on Java, which was in my eyes not really related to the topic of the keynote. It then went on into the Java roadmap with the announcement that new Java versions should come every two years, which sounded to me like an excuse [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/10/05/javaone-2011-tuesday/";</script><div id="_mcePaste">The Java strategy keynote started slowly with Juniper networks presenting their</div>
<div id="_mcePaste">take on Java, which was in my eyes not really related to the topic of the keynote.</div>
<div id="_mcePaste">It then went on into the Java roadmap with the announcement that new Java versions</div>
<div id="_mcePaste">should come every two years, which sounded to me like an excuse for Java 8 being</div>
<div id="_mcePaste">deferred until &#8220;Summer 2013&#8243;.</div>
<div id="_mcePaste">The real surprise was a demonstration of JavaFX running various devices like</div>
<div id="_mcePaste">tablets and smartphones running Windows, Android, and even iOS! It appeard to</div>
<div id="_mcePaste">be experimental but the sheer possibility makes a difference.</div>
<div id="_mcePaste">In addition, JavaFX will be fully open-source such that everybody is free to</div>
<div id="_mcePaste">port it to his platform of choice.</div>
<div id="_mcePaste">Over lunch, the &#8220;Java Desktop Community&#8221; assembled in a nearby restaurant.</div>
<div id="_mcePaste">That was an awesome opportunity for meeting the Swing and JavaFX luminaries just like in the years before.</div>
<div id="_mcePaste">In the early afternoon, I headed for the talk about custom JavaFX components</div>
<div id="_mcePaste">presented by Jonathan Giles and Jasper Potts. It appears customizing any</div>
<div id="_mcePaste">control is mainly done via CSS. In other words, there is no typesafe API.</div>
<div id="_mcePaste">I would rather prefer to use CSS only for &#8220;skinning&#8221; and keeping an API for</div>
<div id="_mcePaste">source-code integration.</div>
<div id="_mcePaste">It also came out that the current JavaFX version doesn&#8217;t contain e.g. a</div>
<div id="_mcePaste">ComboBox. This came as a surprise since I would expect this as being part</div>
<div id="_mcePaste">of the standard widget set. I curious what else is missing.</div>
<div id="_mcePaste">There also is a distinction between public and private APIs that didn&#8217;t</div>
<div id="_mcePaste">make immediate sense to me &#8211; other than the private parts are not yet</div>
<div id="_mcePaste">finished.</div>
<div id="_mcePaste">The afternoon JavaPosse BOF was rather disappointing. They re-told the</div>
<div id="_mcePaste">story of this morning&#8217;s keynote. Who needs that?</div>
<div id="_mcePaste">Visiting the pavillion was nice even though it was just as small as</div>
<div id="_mcePaste">last year. Anyway, I ran into a number of friends and dropped by the</div>
<div id="_mcePaste">gradleware booth. They liked my animated Gradle logo, that I implemented</div>
<div id="_mcePaste">with the Groovy-based FXG interpreter.</div>
<div id="_mcePaste">The SpringSource friends were just shutting down the booth and invited</div>
<div id="_mcePaste">me to dinner: http://t.co/LfxhjIH8 . Thanks a lot!</div>
<p>Finally, late in the evening I joined Dan Sline&#8217;s talk on WebServices in the Groovy space. The major take-away for me was a repercussion of the well-known advice: &#8220;keep it simple&#8221;.</p>
<p>Throughout the day, a lot of people approached me to tell how much they liked my talks yesterday. That was a really nice experience. Last year I had the very last talk of the conference and only this year I recognized how much of a difference the scheduling of the talks make.</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/05/javaone-2011-tuesday/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaOne 2011 Monday</title>
		<link>http://www.canoo.com/blog/2011/10/04/javaone-2011-monday/</link>
		<comments>http://www.canoo.com/blog/2011/10/04/javaone-2011-monday/#comments</comments>
		<pubDate>Tue, 04 Oct 2011 06:40:38 +0000</pubDate>
		<dc:creator>Dierk</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[JavaOne]]></category>
		<category><![CDATA[Dierk König]]></category>

		<guid isPermaLink="false">http://www.canoo.com/blog/?p=2273</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/10/04/javaone-2011-monday/";</script>The technical keynote started with a weird JavaZone-style video featuring a Java programmer as a rapper. It was certainly intended to be funny but as far as I can tell, it didn&#8217;t catch on. The keynote was packed but the somehow reduced ballroom layout added to this impression. Attendance was said to be twice that [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/10/04/javaone-2011-monday/";</script><p>The technical keynote started with a weird JavaZone-style video featuring a Java programmer as a rapper. It was certainly intended to be funny but as far as I can tell, it didn&#8217;t catch on.</p>
<p>The keynote was packed but the somehow reduced ballroom layout added to this impression. Attendance was said to be twice that of last year (so probably around 10&#8217;000). Even though there are certainly more people than last year, a doubled number seems a bit exaggerated to me. Throughout the day, all talks were well attended, though, but nothing like in the days when JavaOne had 10&#8217;000 attendees in Moscone Center.</p>
<p>The technical content was not surprising, beside that Oracle now advertises its NoSQL solution, which is based on the former Berkeley DB. As expected JavaFX 2.0 GA has been announced along with the respective tooling and covered by 50 (!) talks on JavaFX at JavaOne. The JavaFX presentation started very conventionally but in the end showed some really cool lab projects with a dancing duke steered by gesture recognition.</p>
<p>The best presenter was Mark Reinhold on Java 7/8/9. Good style, nice slides, perfect pace, interesting (but not really surprising) content. New to me was project Nashorn: new JavaScript implementation for the JVM expected for Java 8. Project Lambda is planned to contain &#8220;defender methods&#8221;, default implementations for interface methods. That sounds like traits and actually I expect some issues when doing this in Java.</p>
<p>Overall, the keynote was missing the JavaOne &#8220;feeling&#8221; from the olden Sun times. There was no host that led through the event, welcomed the attendees, and encouraged everybody to network. No big names on stage, no overwhelming achievements. The crowd left the room unexcited.</p>
<p>For the rest of the day I was mainly concerned with preparing and delivering my own talks on &#8220;Extending Java&#8217;s reach with Groovy&#8221; and &#8220;Pro Groovy&#8221;. They were well attended and received.</p>
<p>Andres delivered his Griffon talk in parallel.</p>
<p>Afterwards, I was a tired but still listened to Charles Nutter on JVM bytecode, Dan Sline on Griffon, and Jim Discroll on Groovy DSLs. Quote to take away: &#8220;Oracle ADFm makes <strong>heavy</strong> use of Groovy!&#8221;</p>
<p>That&#8217;s it for today.</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/04/javaone-2011-monday/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaOne 2011 Arrival</title>
		<link>http://www.canoo.com/blog/2011/10/02/javaone-2011-arrival/</link>
		<comments>http://www.canoo.com/blog/2011/10/02/javaone-2011-arrival/#comments</comments>
		<pubDate>Sun, 02 Oct 2011 14:36:37 +0000</pubDate>
		<dc:creator>Dierk</dc:creator>
				<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaOne]]></category>
		<category><![CDATA[Dierk König]]></category>

		<guid isPermaLink="false">http://www.canoo.com/blog/?p=2261</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/10/02/javaone-2011-arrival/";</script>This is gonna be a short series about my impressions of JavaOne 2011. As always, it is nice to see the town decorated for the event, even though Oracle World gets certainly much higher attention. So the immigration officer as well as the nice guy sitting next to me on a bench at Union Square [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/10/02/javaone-2011-arrival/";</script><p>This is gonna be a short series about my impressions of JavaOne 2011.</p>
<p>As always, it is nice to see the town decorated for the event, even though Oracle World gets certainly much higher attention. So the immigration officer as well as the nice guy sitting next to me on a bench at Union Square ask &#8220;ah &#8211; you are a programmer? Are you here for Oracle World?&#8221; &#8220;Hmpf&#8230;&#8221;</p>
<p><a href="http://www.canoo.com/blog/wp-content/uploads/2011/10/IMG_2737.jpg"><img class="alignnone size-medium wp-image-2262" title="town decoration" src="http://www.canoo.com/blog/wp-content/uploads/2011/10/IMG_2737-225x300.jpg" alt="" width="225" height="300" /></a></p>
<p>Should you ask yourself &#8220;what&#8217;s in for me&#8221;? Here is a first answer: the conference material</p>
<p><a href="http://www.canoo.com/blog/wp-content/uploads/2011/10/IMG_2733.jpg"><img class="alignnone size-medium wp-image-2263" title="JavaOne 2011 material" src="http://www.canoo.com/blog/wp-content/uploads/2011/10/IMG_2733-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>The bag is not very practical for a software developer. I guess the selection has been taken by an Oracle employee who assumes that their conference attendees never carry any material themselves in the first place (which may be true for OracleWorld). The jacket is very nice, though.</p>
<p>And, yes, you can rate conference organizers by the badges they produce. Hey, that should not be too difficult, right? Here is what you still can make wrong:</p>
<ul>
<li>Printing the delegate&#8217;s name so small that it is hardly readable from more than 20 cm away. Now since the badge usually hangs at belly height (if not lower) this can be a bit embarrassing for both involved parties.</li>
<li>Second, the name belongs on both sides of the badge! Really! How often did you try to read the name only finding that the badge hangs the wrong way around?</li>
</ul>
<p>Otherwise, the waiting time was not too long. The speakers registration was actually empty when I arrived. The attendees registration was pretty well filled, though. But then everybody has to go to the material pickup which was for me in Moscone West 3rd floor where I waited in line for about 20 minutes and I was very early and the queue grew much longer afterwards.</p>
<p><a href="http://www.canoo.com/blog/wp-content/uploads/2011/10/IMG_2734.jpg"><img class="alignnone size-medium wp-image-2265" title="material pickup waiting line" src="http://www.canoo.com/blog/wp-content/uploads/2011/10/IMG_2734-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>This made me think about my latest work on highly concurrent producer-consumer scenarios (http://people.canoo.com/mittie/kanbanflow.html) and what it would need to improve the situation.</p>
<p>Otherwise, from studying the program schedule, I found that Oracle has wisely chosen to pretty much always put two Groovy-related talks in parallel as if to make sure that nobody can escape the Groovy (\G) in these time-slots.</p>
<p>I&#8217;m eager to see what the week will bring.</p>
<p>Dierk Koenig, @mittie</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/02/javaone-2011-arrival/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IDEA series (ix) selective actions</title>
		<link>http://www.canoo.com/blog/2011/01/12/idea-series-ix-selective-actions/</link>
		<comments>http://www.canoo.com/blog/2011/01/12/idea-series-ix-selective-actions/#comments</comments>
		<pubDate>Wed, 12 Jan 2011 21:39:32 +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=1882</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/01/12/idea-series-ix-selective-actions/";</script>Working with selections Please note that this is for Groovy and Grails development on Mac OS X with Swiss-german keyboard layout and default keymap, so the keybindings may differ on your machine. (For Windows, you most often can replace Cmd with Ctrl) We have seen the editing support for lines, combined with selections. This part [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/01/12/idea-series-ix-selective-actions/";</script><div id="_mcePaste"><strong>Working with selections</strong></div>
<div><strong><br />
</strong></div>
<div id="_mcePaste"><em>Please note that this is for Groovy and Grails development on Mac OS X with Swiss-german keyboard layout and default keymap, so the keybindings may differ on your machine. (For Windows, you most often can replace Cmd with Ctrl)</em></div>
<div><em><br />
</em></div>
<div id="_mcePaste">We have seen the editing support for lines, combined with selections. This part is more specifically about working with selections.</div>
<div></div>
<div id="_mcePaste"><strong>know your keyboard navigation</strong></div>
<blockquote>
<div id="_mcePaste">first of all, it is very helpful to familiarize yourself with your OS-specific keyboard commands for moving the cursor around and with the <strong>Shift</strong> key pressed, doing a selection. On Mac that is <strong>Cmd <em>left</em>/<em>right</em></strong> for begin/end of line and <strong>Alt <em>left</em>/<em>right</em></strong> for jumping over words. Of course you can use the mouse for selections but once you master the keystrokes, you will be faster and more precise.</div>
</blockquote>
<div id="_mcePaste"><strong>Cmd W</strong> (<strong>Shift</strong> for reverse)</div>
<blockquote>
<div id="_mcePaste">is <strong>w</strong>idening the current selection. That is, if you already have a selection, it expands it to the next enclosing syntactical scope (expression, statement, block). Without a selection, it starts a selection at the caret.</div>
</blockquote>
<blockquote>
<div id="_mcePaste">Mac users may expect <strong>Cmd W</strong> to close the current editor (internal window) as typical for mac applications, but that functionality is mapped to <strong>Cmd F4</strong> in the standard keymap (somehow resembles the Windows keystroke).</div>
</blockquote>
<blockquote>
<div id="_mcePaste">I use widening most of the time to select a small expression precisely &#8211; often for later use in a refactoring. I start in the middle of the code and hit <strong>Cmd W</strong> repeatedly.</div>
<div id="_mcePaste">When selecting a larger block, let&#8217;s say a method or a whole class body, it&#8217;s efficient to place the cursor <em>just after the opening brace</em> and hit <strong>Cmd W</strong> just once to select the whole block.</div>
</blockquote>
<div id="_mcePaste"><strong>Cmd Alt T</strong></div>
<blockquote>
<div id="_mcePaste">surrounds the selection (or current line if there is no selection) with a live <strong>t</strong>emplate. This features spares you the need for fiddling around with cursor positioning to put some code into an &#8220;if&#8221; block and the likes. I even made my own templates for surrounding a selection with parentheses, brackets (to make a literal Groovy list), braces (to make a closure or block), single quotes, and double quotes.</div>
<div><a href="http://www.canoo.com/blog/wp-content/uploads/2011/01/SurroundWith.png"><img class="alignnone size-full wp-image-1883" title="SurroundWith" src="http://www.canoo.com/blog/wp-content/uploads/2011/01/SurroundWith.png" alt="" width="281" height="461" /></a></div>
<div id="_mcePaste">Especially putting quotes around a selection is nice since otherwise IDEA sometimes inserts pairs of quotes when it shouldn&#8217;t.</div>
</blockquote>
<div id="_mcePaste"><strong>Context menu -&gt; Compare with Clipboard</strong></div>
<blockquote>
<div id="_mcePaste">when you have a selection and open the context menu (<em>right mouse click</em>) you&#8217;ll see a &#8220;<em>Compare with clipboard</em>&#8221; entry, which opens the internal diffing view. Nice.</div>
</blockquote>
<div id="_mcePaste">keep groovin&#8217;</div>
<div id="_mcePaste">Dierk</div>
<div id="_mcePaste">@mittie</div>
<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/12/idea-series-ix-selective-actions/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>IDEA series (viii) line management</title>
		<link>http://www.canoo.com/blog/2011/01/11/idea-series-viii-line-management/</link>
		<comments>http://www.canoo.com/blog/2011/01/11/idea-series-viii-line-management/#comments</comments>
		<pubDate>Tue, 11 Jan 2011 16:33:15 +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=1878</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/01/11/idea-series-viii-line-management/";</script>Rethinking your line management (pun intended) Please note that this is for Groovy and Grails development on Mac OS X with Swiss-german keyboard layout and default keymap, so the keybindings may differ on your machine. (For Windows, you most often can replace Cmd with Ctrl) This series has come to the point where we do [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/01/11/idea-series-viii-line-management/";</script><div id="_mcePaste"><strong>Rethinking your line management (pun intended)</strong></div>
<div id="_mcePaste"><em>Please note that this is for Groovy and Grails development on Mac OS X with Swiss-german keyboard layout and default keymap, so the keybindings may differ on your machine. (For Windows, you most often can replace Cmd with Ctrl)</em></div>
<div><em><br />
</em></div>
<div id="_mcePaste">This series has come to the point where we do the actual editing of the code and we start with working on the <strong>current line</strong>. That is, the actions below work on the current line where the caret is positioned in. When it says &#8220;or selection&#8221; then the action works on the current selection if there is any and on the current line otherwise.</div>
<div id="_mcePaste"><strong>Cmd Y</strong></div>
<blockquote>
<div><strong>y</strong>anks out the current line. I use this a lot. It is quicker than selecting and deleting even when yanking many lines, since you can simply press the same keystroke again (remember the discussion about interaction design?).</div>
</blockquote>
<div id="_mcePaste"><strong>Cmd D</strong></div>
<blockquote>
<div id="_mcePaste"><strong>d</strong>uplicate the current line (or selection). Again, a much used shortcut for me for making variants of the current line or selection. Some Eclipse converts take issue with this one since they expect a delete action. (It&#8217;s worse when you get from IDEA to Eclipse and mistakingly delete a line that you want to duplicate, but then you deserve the pain)</div>
</blockquote>
<div id="_mcePaste"><strong>Cmd /</strong></div>
<blockquote>
<div id="_mcePaste">comments the current line or selection with a line comment (//). This has a little gotcha when working with non-english keyboards where you need to press Shift to get to the slash character. With my swiss-german layout the shortcut is actually <strong>Cmd .</strong> (dot) because the dot is where the slash is on english keyboards (see also http://youtrack.jetbrains.net/issue/IDEA-63779).</div>
</blockquote>
<div id="_mcePaste"><strong>Ctrl Shift J</strong></div>
<blockquote>
<div id="_mcePaste"><strong>j</strong>oin the current line with next line. This shortcut is used by many text-editors. It is worth remembering. Much faster than a manual join.</div>
</blockquote>
<div id="_mcePaste"><strong>Cmd Shift <em>up</em>/<em>down</em></strong></div>
<blockquote>
<div id="_mcePaste">moves the current line (or selection) one line up or down. This used to have issues in older versions when it tried to be too clever about which lines to jump over, e.g. when you select a whole method, it jumps not per-line but per-method. This makes sense for methods but other blocks are not as easy to support since you may want to nest them. The &#8220;intelligent&#8221; jumping sometimes led to unexpected results, especially in Groovy code. I haven&#8217;t seen any trouble with version X, yet.</div>
</blockquote>
<div id="_mcePaste"><strong>Cmd Alt V</strong></div>
<blockquote>
<div id="_mcePaste">the &#8220;insert explaining variable&#8221; refactoring is something you normally call on a selected expression but when there is no selection, it takes the current line as the expression. Now, this has an interesting effect: in a variable assignment, you never have to write the left-hand side! I learned this from IDEA uber-guru Vaclav Pech himself. It works like this: you don&#8217;t type &#8220;<em>MyType myRef = expression</em>&#8221; but only &#8220;<em>expression</em>&#8221; then strike <strong>Cmd Alt V</strong>. Try this and enjoy the effect.</div>
</blockquote>
<div id="_mcePaste">keep groovin&#8217;</div>
<div id="_mcePaste">Dierk</div>
<div id="_mcePaste">@mittie</div>
<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/11/idea-series-viii-line-management/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>IntelliJ IDEA series (vii)</title>
		<link>http://www.canoo.com/blog/2011/01/10/intellij-idea-series-vii/</link>
		<comments>http://www.canoo.com/blog/2011/01/10/intellij-idea-series-vii/#comments</comments>
		<pubDate>Mon, 10 Jan 2011 13:46:17 +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=1865</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/01/10/intellij-idea-series-vii/";</script>helpful selection modes and type inference Please note that this is for Groovy and Grails development on Mac OS X with Swiss-german keyboard layout and default keymap, so the keybindings may differ on your machine. (For Windows, you most often can replace Cmd with Ctrl) With only a few keystrokes it becomes much easier to [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/01/10/intellij-idea-series-vii/";</script><p><strong>helpful selection modes and type inference</strong></p>
<p><em>Please note that this is for Groovy and Grails development on Mac OS X with Swiss-german keyboard layout and default keymap, so the keybindings may differ on your machine. (For Windows, you most often can replace Cmd with Ctrl)</em></p>
<p>With only a few keystrokes it becomes much easier to move code around in your editor or gather more information.</p>
<p>Press the <strong>Alt</strong> key while selecting with the mouse</p>
<blockquote><p>and the selection is in &#8220;column&#8221; mode. Very useful for many well-formatted source files and often even more in resource files with tabular format.</p></blockquote>
<p><strong>Column mode</strong></p>
<blockquote><p>can also be toggled with a keystroke. I couldn&#8217;t quite remember the default keystroke, so I&#8217;ve set it to Cmd Alt Backspace. To find your keystroke look in the <em>Edit</em> menu under <em>Column Mode</em> (or as always use <strong>Cmd Shift A</strong> and type &#8220;col&#8221;).</p></blockquote>
<p>Hold <strong>Cmd</strong> while <strong>hovering</strong> over a reference</p>
<blockquote><p>and you will see the inferred type like so:</p>
<p><a href="http://www.canoo.com/blog/wp-content/uploads/2011/01/TypeInference.png"><img class="alignnone size-full wp-image-1866" title="TypeInference" src="http://www.canoo.com/blog/wp-content/uploads/2011/01/TypeInference.png" alt="" width="614" height="186" /></a></p>
<p>Note that this is Groovy code and from the content of the dynamically typed <em>myMap</em>, IDEA infers that this is a <em>Map</em> from <em>Strings</em> to <em>Integers</em>, i.e. not only the raw type is inferred but also the generic type! Is that cool or is that cool?</p></blockquote>
<p>We touch a very important topic here.</p>
<p>Many developers are under the misconception that IDEs can only do what the compiler of a specific language does. The Groovy compiler does no type inference but still, IDEA does and uses this info for code completion, analysis, refactorings, warnings on mistyped method names, and so on.</p>
<p>This shouldn&#8217;t come as a big surprise. Even for Java, IDEs do a lot more analysis than what the Java compiler does.</p>
<p>Using a dynamic language like Groovy does not mean that you lose all the IDE support (as you can hear occasionally). Also note that in Groovy you can always declare your types, making it an optionally typed language.<br />
Inside IDEA, you can seamlessly switch between Groovy and Java, using cross-language testing, debugging, analysis tools, and refactoring.</p>
<p>The next post will be about more editing commands.</p>
<p>keep groovin&#8217;<br />
Dierk<br />
@mittie</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/10/intellij-idea-series-vii/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>IntelliJ IDEA series (vi)</title>
		<link>http://www.canoo.com/blog/2011/01/09/intellij-idea-series-vi/</link>
		<comments>http://www.canoo.com/blog/2011/01/09/intellij-idea-series-vi/#comments</comments>
		<pubDate>Sun, 09 Jan 2011 17:41:00 +0000</pubDate>
		<dc:creator>Dierk</dc:creator>
				<category><![CDATA[General]]></category>
		<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=1853</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/01/09/intellij-idea-series-vi/";</script>Understanding dependencies &#8211; a smooth intro Beside all the navigation, editing, and refactoring goodness that IDEA brings to the table, there is one feature that I really adore and find under-utilized by most teams: the dependency structure matrix (DSM). It seems that many developers shy away because they expect it to be difficult, while in [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/01/09/intellij-idea-series-vi/";</script><p><strong>Understanding dependencies &#8211; a smooth intro</strong></p>
<p>Beside all the navigation, editing, and refactoring goodness that IDEA brings to the table, there is one feature that I really adore and find under-utilized by most teams: the <strong>dependency structure matrix</strong> (<strong>DSM</strong>).</p>
<p>It seems that many developers shy away because they expect it to be difficult, while in fact it is easy to understand and remember with just a little bit of intro. Here it comes.</p>
<p><strong>Prerequisites</strong>: your project must compile. That&#8217;s it.</p>
<p><strong>How to start</strong>: from the <em>Analyze</em> menu choose <em>Analyze Dependency Matrix</em>.</p>
<p>This is what you see (this is the code from my personal wiki &#8211; yes, it has only 5 classes. The code is under github.com/Dierk/MittieWiki)</p>
<p><a href="http://www.canoo.com/blog/wp-content/uploads/2011/01/Initial.png"><img class="alignnone size-full wp-image-1855" title="Initial" src="http://www.canoo.com/blog/wp-content/uploads/2011/01/Initial.png" alt="" width="300" height="155" /></a></p>
<p>Now, what does this mean? Well, it actually shows the <em>layering of your architecture</em> &#8211; not how you want it to be but how it actually <em>is</em>.</p>
<p>How would you depict the architectural layers in a document? Probably as some kind of pyramid with the common functionality as the fundamental bottom layers and users of the infrastructure on top of it. The DSM is exactly that!</p>
<blockquote><p>If you want, you can imagine the pyramid being slightly pushed to the left such that the left edges align. Then you have exactly the lower-left triangle of the DSM. The upper layers depend on what is below them. They use the common base functionality.<br />
The common base layers use nothing, therefore they go to the bottom. The uppermost layers are used by nobody.</p></blockquote>
<p>For the moment, we don&#8217;t look at the numbers since we only seek to <strong>understand the structure</strong>.</p>
<p>The structure of the DSM shows that <em>EventController</em> (second line) uses classes below it. But which ones? Simply click on the <em>EventController</em> label and you will see this picture:</p>
<p><a href="http://www.canoo.com/blog/wp-content/uploads/2011/01/uses.png"><img class="alignnone size-full wp-image-1857" title="uses" src="http://www.canoo.com/blog/wp-content/uploads/2011/01/uses.png" alt="" width="300" height="152" /></a></p>
<p><a href="http://www.canoo.com/blog/wp-content/uploads/2011/01/uses.png"></a>Every class that <em>EventController</em> actually uses gets an <strong>orange marker</strong>. Do yo see the one at <em>CookService</em>? From that we can tell that <em>EventController</em> uses <em>CookService</em> and <strong>no other</strong> project class!</p>
<p>CookService seems to be an interesting class. So let&#8217;s click on its label:</p>
<p><a href="http://www.canoo.com/blog/wp-content/uploads/2011/01/usedBy.png"><img class="alignnone size-full wp-image-1858" title="usedBy" src="http://www.canoo.com/blog/wp-content/uploads/2011/01/usedBy.png" alt="" width="301" height="151" /></a></p>
<p>Do you see the green markers? They tell that CookService is <strong>used by</strong> <em>EventController</em>, <em>FindController</em>, and <em>PageController</em>.</p>
<blockquote><p>From this intro you can infer that green markers should always be above the current selection and orange ones below.</p></blockquote>
<p><strong>Understanding the numbers</strong></p>
<p>The numbers quite obviously show how often a class uses some other class. But which cell contains this information? Well, if you think about it, there is only one possible way of arranging numbers in cells that makes sense. Let&#8217;s revisit</p>
<p><a href="http://www.canoo.com/blog/wp-content/uploads/2011/01/uses.png"><img class="alignnone size-full wp-image-1857" title="uses" src="http://www.canoo.com/blog/wp-content/uploads/2011/01/uses.png" alt="" width="300" height="152" /></a></p>
<p>The blue cross covers the number 5 saying that <em>EventController</em> uses <em>CookService</em> 5 times.</p>
<blockquote><p>I mean, you only use classes below yourself, that means a cell that tells how often you use it must necessarily be placed below you, right? And where else should it be than in the row of the used class? And it is quite obviously in the column that responds to the using class.<br />
The columns are not labeled explicitely but they are in same sequence as the rows and therefore you can simply use the diagonal as a &#8220;mirror&#8221;.</p></blockquote>
<p>Fazit: <strong>usages</strong> along with usage counts are shown <strong>in the column below the diagonal</strong>!</p>
<p>With this knowledge we can anticipate what happens when we select the other controller classes. They equally show 5 usages of <em>CookService</em>.</p>
<p>Now, think in the opposite direction. <strong>Who uses our class</strong>?</p>
<p><em>EventController</em> uses <em>CookService</em> 5 times. In other words: <em>CookService</em> is <strong>used by</strong> <em>EventController</em> 5 times. And the same is true for <em>FindController</em> and <em>PageController</em>. That&#8217;s three times the used-by count of 5 in the same row. This means: <strong>used-by</strong> along with its counts is shown <strong>in the row of the used class</strong>!</p>
<p>In cases where the situation is less obvious, you can select a single cell (here where the 5 is in) to see the whole picture:</p>
<p><a href="http://www.canoo.com/blog/wp-content/uploads/2011/01/cellSelection.png"><img class="alignnone size-full wp-image-1859" title="cellSelection" src="http://www.canoo.com/blog/wp-content/uploads/2011/01/cellSelection.png" alt="" width="299" height="151" /></a></p>
<p>So much for the intro.</p>
<p>A very comprehensive description with many use cases and screencasts is under http://www.jetbrains.com/idea/features/dependency_analysis.html . You will see that this intro helps you understanding it. Once you have understood the concept, you will easily grasp package dependencies, module dependencies, and cyclic references.</p>
<p>The DSM has become an indispensable tool for my consulting work. Whenever I visit a new project, it is my first tool to fire up. There is so much to tell from this simple matrix.</p>
<p>After a while, you start to see patterns like a horizontal line of dependencies (as in <em>CookService</em>) to show a service or utility class or a line just below the diagonal to show a strict layering, breaches of layering, and so on.</p>
<p><strong>A word of caution</strong></p>
<blockquote><p>Static analysis never shows the whole truth. Especially, it doesn&#8217;t show <em>semantic</em> dependencies. Just recently I heard a friend advocating the use of dependency injection to avoid unwanted dependencies in the DSM. It is very easy to fool oneself with that approach if the <em>semantic</em> dependency is not resolved at the same time.<br />
Actually, I&#8217;d rather like to see my unwanted dependencies in the DSM than hiding it with tricks (DI, AOP, &#8220;Object&#8221; in signatures, &#8220;def&#8221; in Groovy).</p></blockquote>
<p>I hope this little intro motivated you to give the DSM a try.</p>
<p>keep groovin&#8217;<br />
Dierk<br />
@mittie<br />
dzone: http://www.dzone.com/links/r/intellij_idea_tips.html</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/09/intellij-idea-series-vi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>IntelliJ IDEA series (v) workspace layout</title>
		<link>http://www.canoo.com/blog/2011/01/08/intellij-idea-series-v/</link>
		<comments>http://www.canoo.com/blog/2011/01/08/intellij-idea-series-v/#comments</comments>
		<pubDate>Sat, 08 Jan 2011 21:29:18 +0000</pubDate>
		<dc:creator>Dierk</dc:creator>
				<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=1845</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/01/08/intellij-idea-series-v/";</script>Workspace layout, handling tips &#38; tricks Please note that this is for Groovy and Grails development on Mac OS X with Swiss-german keyboard layout and default keymap, so the keybindings may differ on your machine. (For Windows, you most often can replace Cmd with Ctrl) When working with teammates, I always find it interesting to [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://www.canoo.com/blog/2011/01/08/intellij-idea-series-v/";</script><p><strong>Workspace layout, handling tips &amp; tricks</strong></p>
<p><em>Please note that this is for Groovy and Grails development on Mac    OS X with  Swiss-german keyboard layout and default keymap, so the keybindings may differ    on your  machine. (For Windows, you most often can replace Cmd with    Ctrl)</em></p>
<p>When working with teammates, I always find it interesting to see how they organize their screens. It starts with how they use multiple physical monitors and virtual desktops (&#8220;spaces&#8221; on Mac). Some of my friends use external monitors in portrait (instead of landscape) mode. It looks weird but makes sense for them. The reason is that when programming you otherwise often have a lot of blank, white space wasted on the right-hand side of your code while there is a lot of code above and below that you cannot see. They feel that portrait mode improves the situation.</p>
<p>I am not quite so certain. I see the problem but I think they go for the wrong solution since the code 50 lines below my current edit point is usually not of specific interest for me.</p>
<p>But we can do better than wasting the blank space and that is by <strong>splitting editors</strong> vertically like below by using the menu entry <em>Window.&#8221;Split vertically&#8221;</em>.</p>
<p><a href="http://www.canoo.com/blog/wp-content/uploads/2011/01/Splitters.png"><img class="alignnone size-full wp-image-1846" title="Splitters" src="http://www.canoo.com/blog/wp-content/uploads/2011/01/Splitters.png" alt="" width="1279" height="621" /></a></p>
<p>You can simply drag and drop editors in either direction my dragging their tabs. That way, you can for example arrange production classes on the left and test cases on the right hand side as in the example above. I&#8217;m sure you will find more good usages, maybe</p>
<ul>
<li>application classes vs infrastructure classes</li>
<li>project classes vs library classes</li>
<li>contoller classes vs service classes</li>
<li>and so on</li>
</ul>
<p>Per default, you can move the caret between the splitters by <strong>Ctrl</strong> &lt;<em><strong>arrow keys</strong></em>&gt;. However, I use these already for switching between virtual desktops (&#8220;spaces&#8221;), therefore I mapped this functionality to <strong>Alt Tab</strong> (Settings.Keymap).</p>
<p>Here is another cool use for the splitter: whenever you have to move or copy from multiple sources into a single target, put the target editor in a separate splitter. You can then easily <em>drag and drop from your sources into the target splitter</em>!<br />
It even works in the same file! You can have the same file in two splitters and drag and drop from multiple edit points!</p>
<p>This brings me to the next feature:</p>
<p><strong>Cmd Shift V</strong></p>
<p>for paste with history. You certainly know <strong>Cmd V</strong> for paste (the traditional WordStar keybindings with X, C, and V to cut, copy, and paste). Now, when you have a number of pieces to cut or copy into one target, it is a pain to navigate back and forth all the time. As we have seen above, splitters can help you, but even without them, just do all your cut or copy operations without caring. They will all be stored in the history. Then go to your insertion point, hit <strong>Cmd Shift V</strong> and choose what to insert from the history like below</p>
<p><a href="http://www.canoo.com/blog/wp-content/uploads/2011/01/MultipleInsert.png"><img class="alignnone size-full wp-image-1847" title="MultipleInsert" src="http://www.canoo.com/blog/wp-content/uploads/2011/01/MultipleInsert.png" alt="" width="503" height="296" /></a></p>
<p>The history also contains a small preview pane such that you can see what will be inserted if it is more than one line.</p>
<p>While we are on the &#8220;shifted&#8221; variants:</p>
<p><strong>Cmd Shift C</strong></p>
<p>inserts the current file path into the clipboard. This can be very helpful at times, e.g. to use it on the command line for &#8220;cd&#8221; or other operations.</p>
<p>To just follow-through this line of thought: jumping to the directory that contains the current file is even easier.</p>
<p><strong>Cmd Alt F12</strong> (or <strong>Cmd <em>click</em></strong> on the editor tab)</p>
<p>pops up the selection below where you can select the dir or any of it&#8217;s parents to open it in the OS file browser (Finder, Explorer, and the likes)</p>
<p><a href="http://www.canoo.com/blog/wp-content/uploads/2011/01/FilePath.png"><img class="alignnone size-full wp-image-1848" title="FilePath" src="http://www.canoo.com/blog/wp-content/uploads/2011/01/FilePath.png" alt="" width="405" height="256" /></a></p>
<p>More such cool OS-integration comes with the (recommended) &#8220;Native Neighborhood&#8221; plugin, which is the only plugin that I always install in addition to the ones that come bundled with the IDEA installation.</p>
<p>For completing the topic it must be said that since version X, IDEA also has &#8220;<em>detachable editor panes</em>&#8220;, see http://tv.jetbrains.net/videocontent/detachable-editors-in-intellij-idea . Since I usually run IDEA in full-screen mode, I rarely have space where I would like to see a detached pane &#8211; unless I work with multiple physical monitors. Also, detached panes is a very joung feature and needs some improvement in terms of keyboard-navigation support.</p>
<p>I found it very useful, though, for files that I don&#8217;t touch all the time but need to have in sight and refer to occasionally like the <em>grails-app/conf/*</em> files.</p>
<p>keep groovin&#8217;<br />
Dierk<br />
@mittie<br />
dzone: http://www.dzone.com/links/intellij_idea_tips.html</p>
<p>P.S. at a later point we will see how the IDEA &#8220;task&#8221; feature keeps track of your editor layout for each task.</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/08/intellij-idea-series-v/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

