<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CkMNQX8zfSp7ImA9WhRXEkk.&quot;"><id>tag:blogger.com,1999:blog-7020955483078867032</id><updated>2011-12-18T12:34:50.185-08:00</updated><category term="documentation" /><category term="NORCHIP2007" /><category term="erlang" /><category term="clojure" /><category term="books" /><category term="C" /><category term="resteasy" /><category term="gwt" /><category term="UI" /><category term="sun tech days" /><category term="sed" /><category term="presentation" /><category term="software development" /><category term="EJB" /><category term="bytecode" /><category term="grails" /><category term="awk" /><category term="code kata" /><category term="job" /><category term="jrebel" /><category term="travel" /><category term="JAZOON2008" /><category term="geecon" /><category term="websphere" /><category term="video" /><category term="apache synapse" /><category term="Flex" /><category term="eclipse" /><category term="FPGA" /><category term="ucertify" /><category term="training" /><category term="scripting" /><category term="scala" /><category term="esb" /><category term="jax-rs" /><category term="intellij" /><category term="aspectj" /><category term="bash" /><category term="radar" /><category term="oracle" /><category term="code snippet" /><category term="gsoc2008" /><category term="groovy" /><category term="software" /><category term="youtrack" /><category term="apache activemq" /><category term="dsl" /><category term="openportal" /><category term="waterfall" /><category term="fix" /><category term="fun" /><category term="testing" /><category term="ubuntu" /><category term="jms" /><category term="ide" /><category term=".NET" /><category term="screencast" /><category term="ruby" /><category term="AOP" /><category term="stomp" /><category term="jdbc" /><category term="mule" /><category term="debugger" /><category term="JavaZone2011" /><category term="javaone2010" /><category term="liverebel" /><category term="jvm language summit" /><category term="tomcat" /><category term="hacking" /><category term="gsoc2007" /><category term="apache camel" /><category term="jfokus2012" /><category term="C++" /><category term="33rd degree" /><category term="agile" /><category term="apache commons" /><category term="python" /><category term="BlazeDS" /><category term="jetty" /><category term="devoxx" /><category term="JCR" /><category term="myeclipse" /><category term="quickfixj" /><category term="JAZOON2010" /><category term="Android" /><category term="vaadin" /><category term="jfokus2011" /><category term="linux" /><category term="springframework" /><category term="embedded" /><category term="jackrabbit" /><category term="oss" /><category term="ssh" /><category term="javaone2007" /><category term="jvm" /><category term="Java" /><category term="jboss drools" /><category term="netbeans" /><category term="life" /><category term="asm" /><category term="PHP" /><category term="certification" /><category term="sql" /><category term="unix" /><category term="jbossas" /><category term="university" /><title>Code Impossible</title><subtitle type="html">something about software (development)</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://arhipov.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://arhipov.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Anton Arhipov</name><uri>http://www.blogger.com/profile/11951065633319406772</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="31" src="http://1.bp.blogspot.com/_flYJTi1O_TE/TRrmBRTXBoI/AAAAAAAAMy4/KHqYrZgIvsE/S220/avatar.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>154</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/AntonsBlog" /><feedburner:info uri="antonsblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DUUCQXg5eyp7ImA9WhRQFE4.&quot;"><id>tag:blogger.com,1999:blog-7020955483078867032.post-7017966944434387883</id><published>2011-12-09T05:26:00.000-08:00</published><updated>2011-12-09T05:27:40.623-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-09T05:27:40.623-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="vaadin" /><category scheme="http://www.blogger.com/atom/ns#" term="travel" /><category scheme="http://www.blogger.com/atom/ns#" term="jfokus2012" /><category scheme="http://www.blogger.com/atom/ns#" term="job" /><title>JFokus &amp; Vaadin Meetup</title><content type="html">I'm going to &lt;a href="http://www.jfokus.se/jfokus/register.jsp?lang=en#page=page-1"&gt;JFokus&lt;/a&gt; in February. Is anyone else coming? :)&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.jfokus.se/jfokus/register.jsp?lang=en#page=page-1" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="178" width="400" src="http://2.bp.blogspot.com/-F_U3Za2BqFw/TuIMFYo8zcI/AAAAAAAAOfo/E4Ij2d0NM6A/s400/Jfokus2012_450x200.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
There's also an awesome opportunity to join the &lt;a href="https://vaadin.com/meetup/jfokus-2012"&gt;Vaadin team at the boat to Stockholm from Helsinki&lt;/a&gt; - don't miss it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7020955483078867032-7017966944434387883?l=arhipov.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AntonsBlog/~4/FMcBxJyGCFY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://arhipov.blogspot.com/feeds/7017966944434387883/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7020955483078867032&amp;postID=7017966944434387883" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/7017966944434387883?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/7017966944434387883?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AntonsBlog/~3/FMcBxJyGCFY/jfokus-vaadin-meetup.html" title="JFokus &amp; Vaadin Meetup" /><author><name>Anton Arhipov</name><uri>http://www.blogger.com/profile/11951065633319406772</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="31" src="http://1.bp.blogspot.com/_flYJTi1O_TE/TRrmBRTXBoI/AAAAAAAAMy4/KHqYrZgIvsE/S220/avatar.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-F_U3Za2BqFw/TuIMFYo8zcI/AAAAAAAAOfo/E4Ij2d0NM6A/s72-c/Jfokus2012_450x200.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://arhipov.blogspot.com/2011/12/jfokus-vaadin-meetup.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMCQXYyeSp7ImA9WhdaE0o.&quot;"><id>tag:blogger.com,1999:blog-7020955483078867032.post-8496845657988435509</id><published>2011-10-23T05:34:00.000-07:00</published><updated>2011-10-23T05:37:40.891-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-23T05:37:40.891-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>Sublime: The Awesome Text Editor</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;What is your favorite text editor? Not only to edit text but also to write some code. &lt;a href="http://www.gnu.org/software/emacs/"&gt;Emacs&lt;/a&gt;? &lt;a href="http://www.vim.org/"&gt;Vim&lt;/a&gt;? &lt;a href="http://notepad-plus-plus.org/"&gt;Notepad++&lt;/a&gt; or &lt;a href="http://www.scintilla.org/SciTE.html"&gt;SciTE&lt;/a&gt;? Yeah, for code you can use IDEs, but sometimes it is just too much.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://3.bp.blogspot.com/-oxbQBXJxfyg/TqQAdm7WiRI/AAAAAAAAOSg/iZ4fbI82fhw/s1600/vi_emacs_notepad.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="252" src="http://3.bp.blogspot.com/-oxbQBXJxfyg/TqQAdm7WiRI/AAAAAAAAOSg/iZ4fbI82fhw/s400/vi_emacs_notepad.jpg" width="288" /&gt;&lt;/a&gt;&lt;/div&gt;Myself, I'm a long time Vim fan. I know emacs is really-really powerful, but I could not quite understand the ideology behind it. Sometimes I use Notepad++, just because it works really well for log files. Just recently I discovered &lt;a href="http://www.sublimetext.com/"&gt;Sublime&lt;/a&gt;. This is a really awesome piece of software! &lt;br /&gt;
Sublime is available for OS X, Linux and Windows. It feels really lightweight, and the UI is quite responsive. In Sublime's &lt;a href="http://www.sublimetext.com/blog/"&gt;blog&lt;/a&gt; you will find nice tips and tricks on how to use the editor. And if you take a look at the &lt;a href="http://www.sublimetext.com/forum/"&gt;support forum&lt;/a&gt;, it seems that the guys are quite busy making the editor even more awesome. This all together just makes you want to by a license! :)&lt;/div&gt;&lt;br /&gt;
The UI is rather minimalistic, and all the required windows and dialogs appear on demand by pressing a relevant shortcut. What I really like is the file outline on right (see the screenshot below).&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Co2awzuaA_s/TqQCZ1wwFLI/AAAAAAAAOSs/8DllhPDQpV0/s1600/sublime-main.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="264" width="400" src="http://2.bp.blogspot.com/-Co2awzuaA_s/TqQCZ1wwFLI/AAAAAAAAOSs/8DllhPDQpV0/s400/sublime-main.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Sublime comes with a huge number of code snippets available out of the box and you can define your own.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-dVYCTtJFuhA/TqQGF7g4hGI/AAAAAAAAOS4/NusyO_Mp85w/s1600/sublime-snippets.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="314" width="400" src="http://2.bp.blogspot.com/-dVYCTtJFuhA/TqQGF7g4hGI/AAAAAAAAOS4/NusyO_Mp85w/s400/sublime-snippets.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Regarding the features, you're almost able to use Sublime as a full-featured IDE, not as intelligent as &lt;a href="http://www.jetbrains.com/idea"&gt;IntelliJIDEA&lt;/a&gt;, but still - you can edit code quite efficiently, compile source and execute the apps. Also, Sublime is quite extensible - you can create your own plugins, customize the layout, shortcuts, etc. &lt;br /&gt;
&lt;br /&gt;
I think, Sublime could be the new tool in my toolbox if I'd need to code something besides Java :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7020955483078867032-8496845657988435509?l=arhipov.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AntonsBlog/~4/XlYWi3HyeFE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://arhipov.blogspot.com/feeds/8496845657988435509/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7020955483078867032&amp;postID=8496845657988435509" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/8496845657988435509?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/8496845657988435509?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AntonsBlog/~3/XlYWi3HyeFE/sublime-awesome-text-editor.html" title="Sublime: The Awesome Text Editor" /><author><name>Anton Arhipov</name><uri>http://www.blogger.com/profile/11951065633319406772</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="31" src="http://1.bp.blogspot.com/_flYJTi1O_TE/TRrmBRTXBoI/AAAAAAAAMy4/KHqYrZgIvsE/S220/avatar.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-oxbQBXJxfyg/TqQAdm7WiRI/AAAAAAAAOSg/iZ4fbI82fhw/s72-c/vi_emacs_notepad.jpg" height="72" width="72" /><thr:total>5</thr:total><feedburner:origLink>http://arhipov.blogspot.com/2011/10/sublime-awesome-text-editor.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUBQHo8eip7ImA9WhdbGUs.&quot;"><id>tag:blogger.com,1999:blog-7020955483078867032.post-2815421348185139539</id><published>2011-10-18T11:40:00.001-07:00</published><updated>2011-10-18T11:40:51.472-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-18T11:40:51.472-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="awk" /><category scheme="http://www.blogger.com/atom/ns#" term="bash" /><category scheme="http://www.blogger.com/atom/ns#" term="unix" /><category scheme="http://www.blogger.com/atom/ns#" term="sed" /><category scheme="http://www.blogger.com/atom/ns#" term="presentation" /><title>Slides: Practical Unix Utilities for Text Processing</title><content type="html">&lt;center&gt;&lt;br /&gt;
&lt;div style="width:425px" id="__ss_5338351"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/arhan/practical-unix-utilities-for-text-processing" title="Practical unix utilities for text processing" target="_blank"&gt;Practical unix utilities for text processing&lt;/a&gt;&lt;/strong&gt; &lt;iframe src="http://www.slideshare.net/slideshow/embed_code/5338351" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt; &lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/arhan" target="_blank"&gt;Anton Arhipov&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7020955483078867032-2815421348185139539?l=arhipov.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AntonsBlog/~4/sZ3uueWplpg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://arhipov.blogspot.com/feeds/2815421348185139539/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7020955483078867032&amp;postID=2815421348185139539" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/2815421348185139539?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/2815421348185139539?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AntonsBlog/~3/sZ3uueWplpg/slides-practical-unix-utilities-for.html" title="Slides: Practical Unix Utilities for Text Processing" /><author><name>Anton Arhipov</name><uri>http://www.blogger.com/profile/11951065633319406772</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="31" src="http://1.bp.blogspot.com/_flYJTi1O_TE/TRrmBRTXBoI/AAAAAAAAMy4/KHqYrZgIvsE/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://arhipov.blogspot.com/2011/10/slides-practical-unix-utilities-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcGQXs6eSp7ImA9WhdWFkw.&quot;"><id>tag:blogger.com,1999:blog-7020955483078867032.post-3029068925849873491</id><published>2011-09-09T16:12:00.000-07:00</published><updated>2011-09-09T16:13:40.511-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-09T16:13:40.511-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="video" /><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="asm" /><category scheme="http://www.blogger.com/atom/ns#" term="job" /><category scheme="http://www.blogger.com/atom/ns#" term="bytecode" /><category scheme="http://www.blogger.com/atom/ns#" term="presentation" /><category scheme="http://www.blogger.com/atom/ns#" term="JavaZone2011" /><title>JavaZone 2011: Bytecode for discriminating developers</title><content type="html">&lt;center&gt;&lt;br /&gt;
&lt;iframe src="http://player.vimeo.com/video/28763757?title=0&amp;amp;byline=0&amp;amp;portrait=0" width="601" height="177" frameborder="0" webkitAllowFullScreen allowFullScreen&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="width:425px" id="__ss_9173653"&gt;&lt;iframe src="http://www.slideshare.net/slideshow/embed_code/9173653" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt; &lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/arhan" target="_blank"&gt;Anton Arhipov&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7020955483078867032-3029068925849873491?l=arhipov.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AntonsBlog/~4/1yEim0zi0PQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://arhipov.blogspot.com/feeds/3029068925849873491/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7020955483078867032&amp;postID=3029068925849873491" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/3029068925849873491?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/3029068925849873491?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AntonsBlog/~3/1yEim0zi0PQ/javazone-2011.html" title="JavaZone 2011: Bytecode for discriminating developers" /><author><name>Anton Arhipov</name><uri>http://www.blogger.com/profile/11951065633319406772</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="31" src="http://1.bp.blogspot.com/_flYJTi1O_TE/TRrmBRTXBoI/AAAAAAAAMy4/KHqYrZgIvsE/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://arhipov.blogspot.com/2011/09/javazone-2011.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UFRH4_cCp7ImA9WhdWEEo.&quot;"><id>tag:blogger.com,1999:blog-7020955483078867032.post-1216832228636956224</id><published>2011-09-03T10:33:00.000-07:00</published><updated>2011-09-03T10:33:35.048-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-03T10:33:35.048-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="travel" /><category scheme="http://www.blogger.com/atom/ns#" term="job" /><category scheme="http://www.blogger.com/atom/ns#" term="bytecode" /><category scheme="http://www.blogger.com/atom/ns#" term="presentation" /><category scheme="http://www.blogger.com/atom/ns#" term="JavaZone2011" /><title>Destination: JavaZone, Oslo, Norway</title><content type="html">I'm &lt;a href="http://javazone.no/incogito10/events/JavaZone%202011/sessions#9be936e3-5e00-4bb5-9264-dc8968ca7f99"&gt;presenting at JavaZone&lt;/a&gt; the next week.&lt;br /&gt;
&lt;br /&gt;
There's &lt;a href="http://javazone.no/incogito10/events/JavaZone%202011/sessions"&gt;plenty of interesting sessions&lt;/a&gt; on the schedule that I'm tempted to attend myself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7020955483078867032-1216832228636956224?l=arhipov.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AntonsBlog/~4/OJ_xQ_Q16RU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://arhipov.blogspot.com/feeds/1216832228636956224/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7020955483078867032&amp;postID=1216832228636956224" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/1216832228636956224?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/1216832228636956224?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AntonsBlog/~3/OJ_xQ_Q16RU/destination-javazone-oslo-norway.html" title="Destination: JavaZone, Oslo, Norway" /><author><name>Anton Arhipov</name><uri>http://www.blogger.com/profile/11951065633319406772</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="31" src="http://1.bp.blogspot.com/_flYJTi1O_TE/TRrmBRTXBoI/AAAAAAAAMy4/KHqYrZgIvsE/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://arhipov.blogspot.com/2011/09/destination-javazone-oslo-norway.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8DQnk6cSp7ImA9WhdXGEw.&quot;"><id>tag:blogger.com,1999:blog-7020955483078867032.post-877098119830800940</id><published>2011-08-31T12:27:00.001-07:00</published><updated>2011-08-31T12:27:53.719-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-31T12:27:53.719-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="video" /><category scheme="http://www.blogger.com/atom/ns#" term="jvm language summit" /><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="presentation" /><category scheme="http://www.blogger.com/atom/ns#" term="jvm" /><title>JVM Language Summit 2011: Brian Goetz - Virtual Extension Methods</title><content type="html">&lt;center&gt;&lt;object id="flashObj" width="486" height="322" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,47,0"&gt;&lt;param name="movie" value="http://c.brightcove.com/services/viewer/federated_f9?isVid=1" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;param name="flashVars" value="videoId=1113272518001&amp;linkBaseURL=http%3A%2F%2Fmedianetwork.oracle.com%2Fmedia%2Fshow%2F16999&amp;playerID=1640183659&amp;playerKey=AQ~~,AAAAAFcSbzI~,OkyYKKfkn3za9MF0qI3Ufg1AerdkqfR3&amp;domain=embed&amp;dynamicStreaming=true" /&gt;&lt;param name="base" value="http://admin.brightcove.com" /&gt;&lt;param name="seamlesstabbing" value="false" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="swLiveConnect" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;embed src="http://c.brightcove.com/services/viewer/federated_f9?isVid=1" bgcolor="#FFFFFF" flashVars="videoId=1113272518001&amp;linkBaseURL=http%3A%2F%2Fmedianetwork.oracle.com%2Fmedia%2Fshow%2F16999&amp;playerID=1640183659&amp;playerKey=AQ~~,AAAAAFcSbzI~,OkyYKKfkn3za9MF0qI3Ufg1AerdkqfR3&amp;domain=embed&amp;dynamicStreaming=true" base="http://admin.brightcove.com" name="flashObj" width="486" height="322" seamlesstabbing="false" type="application/x-shockwave-flash" allowFullScreen="true" swLiveConnect="true" allowScriptAccess="always" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7020955483078867032-877098119830800940?l=arhipov.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AntonsBlog/~4/UA-mwgsDySk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://arhipov.blogspot.com/feeds/877098119830800940/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7020955483078867032&amp;postID=877098119830800940" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/877098119830800940?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/877098119830800940?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AntonsBlog/~3/UA-mwgsDySk/jvm-language-summit-2011-brian-goetz_31.html" title="JVM Language Summit 2011: Brian Goetz - Virtual Extension Methods" /><author><name>Anton Arhipov</name><uri>http://www.blogger.com/profile/11951065633319406772</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="31" src="http://1.bp.blogspot.com/_flYJTi1O_TE/TRrmBRTXBoI/AAAAAAAAMy4/KHqYrZgIvsE/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://arhipov.blogspot.com/2011/08/jvm-language-summit-2011-brian-goetz_31.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkANSH86eyp7ImA9WhdXGEw.&quot;"><id>tag:blogger.com,1999:blog-7020955483078867032.post-3452781047749299244</id><published>2011-08-31T12:26:00.000-07:00</published><updated>2011-08-31T12:26:39.113-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-31T12:26:39.113-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="video" /><category scheme="http://www.blogger.com/atom/ns#" term="jvm language summit" /><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="bytecode" /><category scheme="http://www.blogger.com/atom/ns#" term="presentation" /><category scheme="http://www.blogger.com/atom/ns#" term="jvm" /><title>JVM Language Summit 2011: Brian Goetz - From Lambdas to Bytecode</title><content type="html">&lt;center&gt;&lt;object id="flashObj" width="486" height="322" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,47,0"&gt;&lt;param name="movie" value="http://c.brightcove.com/services/viewer/federated_f9?isVid=1" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;param name="flashVars" value="videoId=1113272510001&amp;linkBaseURL=http%3A%2F%2Fmedianetwork.oracle.com%2Fmedia%2Fshow%2F17000&amp;playerID=1640183659&amp;playerKey=AQ~~,AAAAAFcSbzI~,OkyYKKfkn3za9MF0qI3Ufg1AerdkqfR3&amp;domain=embed&amp;dynamicStreaming=true" /&gt;&lt;param name="base" value="http://admin.brightcove.com" /&gt;&lt;param name="seamlesstabbing" value="false" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="swLiveConnect" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;embed src="http://c.brightcove.com/services/viewer/federated_f9?isVid=1" bgcolor="#FFFFFF" flashVars="videoId=1113272510001&amp;linkBaseURL=http%3A%2F%2Fmedianetwork.oracle.com%2Fmedia%2Fshow%2F17000&amp;playerID=1640183659&amp;playerKey=AQ~~,AAAAAFcSbzI~,OkyYKKfkn3za9MF0qI3Ufg1AerdkqfR3&amp;domain=embed&amp;dynamicStreaming=true" base="http://admin.brightcove.com" name="flashObj" width="486" height="322" seamlesstabbing="false" type="application/x-shockwave-flash" allowFullScreen="true" swLiveConnect="true" allowScriptAccess="always" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7020955483078867032-3452781047749299244?l=arhipov.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AntonsBlog/~4/c8_fRsWlLjA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://arhipov.blogspot.com/feeds/3452781047749299244/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7020955483078867032&amp;postID=3452781047749299244" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/3452781047749299244?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/3452781047749299244?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AntonsBlog/~3/c8_fRsWlLjA/jvm-language-summit-2011-brian-goetz.html" title="JVM Language Summit 2011: Brian Goetz - From Lambdas to Bytecode" /><author><name>Anton Arhipov</name><uri>http://www.blogger.com/profile/11951065633319406772</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="31" src="http://1.bp.blogspot.com/_flYJTi1O_TE/TRrmBRTXBoI/AAAAAAAAMy4/KHqYrZgIvsE/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://arhipov.blogspot.com/2011/08/jvm-language-summit-2011-brian-goetz.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UHSHc6eCp7ImA9WhdXF0o.&quot;"><id>tag:blogger.com,1999:blog-7020955483078867032.post-6239335925071263109</id><published>2011-08-30T02:48:00.000-07:00</published><updated>2011-08-31T00:20:39.910-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-31T00:20:39.910-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="video" /><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="geecon" /><category scheme="http://www.blogger.com/atom/ns#" term="presentation" /><title>GeeCON 2011: Java Bytecode For Discriminating Developers</title><content type="html">In May this year I had a pleasure to talk at an awesome conference in Krakow - &lt;a href="http://2011.geecon.org/main/home"&gt;GeeCON&lt;/a&gt;. Here's the video taken at the talk and the slides are below. &lt;br /&gt;
&lt;br /&gt;
The related blog posts:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://arhipov.blogspot.com/2011/01/java-bytecode-fundamentals.html"&gt;Java Bytecode Fundamentals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://arhipov.blogspot.com/2011/02/java-bytecode-fundamentals-part-ii.html"&gt;Java Bytecode Fundamentals. Part II. Passing parameters&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;center&gt;&lt;br /&gt;
&lt;iframe src="http://player.vimeo.com/video/28342292?title=0&amp;amp;byline=0&amp;amp;portrait=0&amp;amp;color=ffffff" width="580" height="326" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="width:595px" id="__ss_7935966"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/arhan/java-bytecode-for-discriminating-developers" title="Java Bytecode For Discriminating Developers"&gt;Java Bytecode For Discriminating Developers&lt;/a&gt;&lt;/strong&gt; &lt;iframe src="http://www.slideshare.net/slideshow/embed_code/7935966" width="595" height="497" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt; &lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/arhan"&gt;Anton Arhipov&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7020955483078867032-6239335925071263109?l=arhipov.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AntonsBlog/~4/WyRZj-Mdu2U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://arhipov.blogspot.com/feeds/6239335925071263109/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7020955483078867032&amp;postID=6239335925071263109" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/6239335925071263109?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/6239335925071263109?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AntonsBlog/~3/WyRZj-Mdu2U/in-may-this-year-i-had-pleasure-to-talk.html" title="GeeCON 2011: Java Bytecode For Discriminating Developers" /><author><name>Anton Arhipov</name><uri>http://www.blogger.com/profile/11951065633319406772</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="31" src="http://1.bp.blogspot.com/_flYJTi1O_TE/TRrmBRTXBoI/AAAAAAAAMy4/KHqYrZgIvsE/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://arhipov.blogspot.com/2011/08/in-may-this-year-i-had-pleasure-to-talk.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEARns4eCp7ImA9WhdXGEs.&quot;"><id>tag:blogger.com,1999:blog-7020955483078867032.post-6660043143293568539</id><published>2011-08-29T11:23:00.000-07:00</published><updated>2011-09-01T00:37:27.530-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-01T00:37:27.530-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="intellij" /><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><title>What’s Cool In IntelliJIDEA. Part III: External Tools</title><content type="html">&lt;b&gt;Previous posts about IntelliJ&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://arhipov.blogspot.com/2011/06/whats-cool-in-intellijidea-part-i.html"&gt;What’s Cool In IntelliJIDEA. Part I&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://arhipov.blogspot.com/2011/07/whats-cool-in-intellijidea-part-ii-live.html"&gt;What’s Cool In IntelliJIDEA. Part II: Live Templates&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although there is almost any kind of functionality available in IntelliJIDEA, either as a base functionality or via plugins, there's still a fraction of probability involved that you might want to do something that goes beyond the power of the IDE. For such rare cases you might want to take a look at &lt;a href="http://www.jetbrains.com/idea/webhelp/external-tools.html"&gt;External Tools&lt;/a&gt; in IntelliJ.&lt;br /&gt;
&lt;br /&gt;
Just recently I've encountered such a case myself - I wanted to use an utility from JDK, but in a more flexible way than just switching to command line and navigating to the correct location. My idea was that I should just press an arbitrary shortcut and get the result. So I decided to give &lt;b&gt;External Tools&lt;/b&gt; a try.&lt;br /&gt;
&lt;br /&gt;
The utility I use a lot when studying Java is &lt;a href="http://download.oracle.com/javase/1,5.0/docs/tooldocs/windows/javap.html"&gt;javap - the java class file disassembler&lt;/a&gt;. This is due I study the bytecode sometimes. And although there's &lt;a href="https://github.com/melix/asm-bytecode-intellij"&gt;ASM plugin&lt;/a&gt; available for IntelliJ that basically can provide me the result I needed, I still prefer to read the raw &lt;b&gt;javap&lt;/b&gt; output.&lt;br /&gt;
&lt;br /&gt;
To setup javap in Intellij as an External Tool go to &lt;b&gt;Settings &amp;gt;&amp;gt; External Tools&lt;/b&gt; and press &lt;b&gt;Add... &lt;/b&gt;. You can then define the location of the tool, the working directory, and the parameters. &lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-g2_YSFMMIMs/TlvT75Jv_BI/AAAAAAAAOBU/bnZY7A9vyAQ/s1600/external-tools.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="214" width="400" src="http://4.bp.blogspot.com/-g2_YSFMMIMs/TlvT75Jv_BI/AAAAAAAAOBU/bnZY7A9vyAQ/s400/external-tools.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
The nice part of it is that IntelliJ provides some basic macros in order to dynamically resolve the parameters for the tool. So for javap it was enough to set &lt;b&gt;$FileClass$&lt;/b&gt; for the parameter, and &lt;b&gt;$OutputPath$&lt;/b&gt; as the working directory. And that's it - the tool is now ready for use. &lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-CIFIrTcuB_o/TlvUo3j6o8I/AAAAAAAAOBc/SzICrEiwnkI/s1600/external-tools-2.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="214" width="400" src="http://3.bp.blogspot.com/-CIFIrTcuB_o/TlvUo3j6o8I/AAAAAAAAOBc/SzICrEiwnkI/s400/external-tools-2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
You can also define a "group" which is then used to group the external tools in the popup menu. I use "jdk" as a group name for &lt;b&gt;javap&lt;/b&gt; so here's what it looks after:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Oe-I6DcnlzE/TlvV1llPw4I/AAAAAAAAOBk/du4A-PbUvj4/s1600/external-tools-3.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="310" width="400" src="http://3.bp.blogspot.com/-Oe-I6DcnlzE/TlvV1llPw4I/AAAAAAAAOBk/du4A-PbUvj4/s400/external-tools-3.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
So that's cool but you might have noticed that it is not that comfortable to use - have to right-click the file, navigate to "jdk" group, expand it, and only then can execute &lt;b&gt;javap&lt;/b&gt;. Well, shortcuts to the rescue! &lt;b&gt;Browse to Settings &amp;gt;&amp;gt; Keymap&lt;/b&gt;, and there you can define any sortcut for the tool. The nice part of it is that IntelliJ detects if you select a conflicting shortcut and notifies you.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-mvBXlf4syhM/TlvXtuybjoI/AAAAAAAAOBs/4SgDYVJorDc/s1600/keymap.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="255" width="400" src="http://3.bp.blogspot.com/-mvBXlf4syhM/TlvXtuybjoI/AAAAAAAAOBs/4SgDYVJorDc/s400/keymap.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
One more tweak left to do. Once I press the shortcut that I've assigned to javap, the result of decompilation is printed out to the IDE console, which is just below the source code. But it would be more convenient to see it side by side. For that, it is possible to drag-and-drop the Run window to the side panel in IntelliJ so the result can be observed right next to the source I'm currently working with.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-_cI-MhefOAM/TlvYvXnKnrI/AAAAAAAAOB0/W_d1QW1t0pY/s1600/javap.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="193" width="400" src="http://1.bp.blogspot.com/-_cI-MhefOAM/TlvYvXnKnrI/AAAAAAAAOB0/W_d1QW1t0pY/s400/javap.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
The only thing that is probably missing is the syntax highlight for the &lt;b&gt;javap&lt;/b&gt; output, but that is probably too much to wish.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7020955483078867032-6660043143293568539?l=arhipov.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AntonsBlog/~4/K8Rzd3BWFiA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://arhipov.blogspot.com/feeds/6660043143293568539/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7020955483078867032&amp;postID=6660043143293568539" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/6660043143293568539?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/6660043143293568539?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AntonsBlog/~3/K8Rzd3BWFiA/whats-cool-in-intellijidea-part-iii.html" title="What’s Cool In IntelliJIDEA. Part III: External Tools" /><author><name>Anton Arhipov</name><uri>http://www.blogger.com/profile/11951065633319406772</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="31" src="http://1.bp.blogspot.com/_flYJTi1O_TE/TRrmBRTXBoI/AAAAAAAAMy4/KHqYrZgIvsE/S220/avatar.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-g2_YSFMMIMs/TlvT75Jv_BI/AAAAAAAAOBU/bnZY7A9vyAQ/s72-c/external-tools.png" height="72" width="72" /><thr:total>7</thr:total><feedburner:origLink>http://arhipov.blogspot.com/2011/08/whats-cool-in-intellijidea-part-iii.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YHRHc-fSp7ImA9WhdRE0g.&quot;"><id>tag:blogger.com,1999:blog-7020955483078867032.post-7390906798312092859</id><published>2011-08-02T15:20:00.000-07:00</published><updated>2011-08-03T00:05:35.955-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-03T00:05:35.955-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="code snippet" /><title>Code Snippet: Redirecting Standard Output to File</title><content type="html">&lt;pre name="code" class="java"&gt;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;


public class SystemOutRedirect {

  public static void main(String[] args) throws FileNotFoundException {
    System.setOut(new PrintStream(new FileOutputStream("stdout.txt")));
    System.setErr(new PrintStream(new FileOutputStream("error.txt")));

    System.out.println("hello");  //goes to stdout.txt
    System.err.println("error");  //goes to error.txt
  }

}

&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7020955483078867032-7390906798312092859?l=arhipov.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AntonsBlog/~4/rwFaNQ7-23Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://arhipov.blogspot.com/feeds/7390906798312092859/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7020955483078867032&amp;postID=7390906798312092859" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/7390906798312092859?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/7390906798312092859?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AntonsBlog/~3/rwFaNQ7-23Q/code-snippet-redirecting-standard.html" title="Code Snippet: Redirecting Standard Output to File" /><author><name>Anton Arhipov</name><uri>http://www.blogger.com/profile/11951065633319406772</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="31" src="http://1.bp.blogspot.com/_flYJTi1O_TE/TRrmBRTXBoI/AAAAAAAAMy4/KHqYrZgIvsE/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://arhipov.blogspot.com/2011/08/code-snippet-redirecting-standard.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIMRX8_eCp7ImA9WhdXFkk.&quot;"><id>tag:blogger.com,1999:blog-7020955483078867032.post-1844009309663709399</id><published>2011-07-27T09:24:00.001-07:00</published><updated>2011-08-29T11:29:44.140-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-29T11:29:44.140-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="websphere" /><category scheme="http://www.blogger.com/atom/ns#" term="jrebel" /><category scheme="http://www.blogger.com/atom/ns#" term="eclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="myeclipse" /><title>Using JRebel with MyEclipse Blue and WebSphere</title><content type="html">Just recently &lt;a href="http://www.zeroturnaround.com/blog/genuitec-joins-the-rebellion-jrebel-for-myeclipse-released/"&gt;ZeroTurnaround and Genuitec announce JRebel for MyEclipse&lt;/a&gt;. Here's what it looks like in combination with WebSphere application server. It is quite easy to install and configure. &lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;br /&gt;
&lt;iframe src="http://player.vimeo.com/video/28014173?title=0&amp;amp;byline=0&amp;amp;portrait=0&amp;amp;color=ffffff" width="580" height="435" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7020955483078867032-1844009309663709399?l=arhipov.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AntonsBlog/~4/hsZQhKY2hUw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://arhipov.blogspot.com/feeds/1844009309663709399/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7020955483078867032&amp;postID=1844009309663709399" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/1844009309663709399?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/1844009309663709399?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AntonsBlog/~3/hsZQhKY2hUw/using-jrebel-with-myeclipse-blue-and.html" title="Using JRebel with MyEclipse Blue and WebSphere" /><author><name>Anton Arhipov</name><uri>http://www.blogger.com/profile/11951065633319406772</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="31" src="http://1.bp.blogspot.com/_flYJTi1O_TE/TRrmBRTXBoI/AAAAAAAAMy4/KHqYrZgIvsE/S220/avatar.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://arhipov.blogspot.com/2011/07/using-jrebel-with-myeclipse-blue-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8CQ3c7eSp7ImA9WhdSF0g.&quot;"><id>tag:blogger.com,1999:blog-7020955483078867032.post-347793735609158122</id><published>2011-07-27T02:27:00.000-07:00</published><updated>2011-07-27T02:27:42.901-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-27T02:27:42.901-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="debugger" /><category scheme="http://www.blogger.com/atom/ns#" term="jrebel" /><category scheme="http://www.blogger.com/atom/ns#" term="job" /><title>JRebel 4.0.x</title><content type="html">JRebel 4.0.3 was released just recently. The debugger support is maturing - some features are still missing, like expression evaluation support for the reloaded classes, but stepping functionality and breakpoints installation are quite well polished now.  &lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;&lt;br /&gt;
&lt;iframe src="http://player.vimeo.com/video/26914212?title=0&amp;amp;byline=0&amp;amp;portrait=0" width="601" height="512" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;/center&gt;&lt;br /&gt;
&lt;br /&gt;
See the &lt;a href="http://www.zeroturnaround.com/blog/jrebel-releases-4-0-x/"&gt;press release&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7020955483078867032-347793735609158122?l=arhipov.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AntonsBlog/~4/G-AiTWCgHgE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://arhipov.blogspot.com/feeds/347793735609158122/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7020955483078867032&amp;postID=347793735609158122" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/347793735609158122?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/347793735609158122?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AntonsBlog/~3/G-AiTWCgHgE/jrebel-40x.html" title="JRebel 4.0.x" /><author><name>Anton Arhipov</name><uri>http://www.blogger.com/profile/11951065633319406772</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="31" src="http://1.bp.blogspot.com/_flYJTi1O_TE/TRrmBRTXBoI/AAAAAAAAMy4/KHqYrZgIvsE/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://arhipov.blogspot.com/2011/07/jrebel-40x.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAFSHs5fip7ImA9WhdREkk.&quot;"><id>tag:blogger.com,1999:blog-7020955483078867032.post-2235790601639964791</id><published>2011-07-25T16:53:00.000-07:00</published><updated>2011-08-01T16:18:39.526-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-01T16:18:39.526-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="jvm language summit" /><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="travel" /><category scheme="http://www.blogger.com/atom/ns#" term="jvm" /><title>JVM Language Summit 2011</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://openjdk.java.net/projects/mlvm/images/SummitFlyer.png" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"&gt;&lt;img border="0" height="531" width="288" src="http://openjdk.java.net/projects/mlvm/images/SummitFlyer.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Back from Santa Clara, CA where I've attended an awesome event - &lt;a href="http://openjdk.java.net/projects/mlvm/jvmlangsummit/"&gt;JVM Language Summit&lt;/a&gt;. Before the event I thought I know some Java, but it seems I was too self-confident :) The 3 days of technical sessions revealed to me a lot of new things in Java world, including the new features coming in the next versions of Java as well as some JVM-based languages that I didn't pay attention to previously.&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Day 1&lt;/h1&gt;&lt;br /&gt;
The event started with a short intro by &lt;a href="http://twitter.com/BrianGoetz"&gt;Brian Goetz&lt;/a&gt; followed by a keynote speech by &lt;a href="http://twitter.com/cpurdy"&gt;Cameron Purdy&lt;/a&gt;. Cameron presented an awesome wishlist for the upcoming versions of Java/JVM. Some of the features I liked the most on that list:&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;&lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Immutable_object"&gt;Immutability&lt;/a&gt;.&lt;/i&gt; The main concern was pretty much about how could Java get so far without immutability natively supported by the language? &lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;i&gt;Obvious Intrinsic Types&lt;/i&gt; are just missing from Java. And this is the major pain for the developers dealing with financial calculations whereas the rule of thumb is - never use double for  operations on monetary values. Indeed, every &lt;s&gt;Java&lt;/s&gt; programmer should see this presentation - &lt;a href="http://www.cs.berkeley.edu/~wkahan/JAVAhurt.pdf"&gt;How Java's Floating-Point Hurts Everyone Everywhere&lt;/a&gt;. The good news is, IEEE 754-2008 a.k.a. IEEE 754r – defines decimal types, the bad news, it is not yet implemented.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;i&gt;Alternative class format&lt;/i&gt; is something that tool implementers would definitely love - why &lt;a href="http://download.oracle.com/javase/tutorial/java/javaOO/innerclasses.html"&gt;inner classes&lt;/a&gt; aren't &lt;i&gt;inner&lt;/i&gt; classes? why &lt;a href="http://docstore.mik.ua/orelly/java-ent/jnut/ch03_12.htm"&gt;anonymous classes&lt;/a&gt; are not properties of a method where they are defined?. In fact, I was carrying the idea around with myself on why not to try to implement the class nesting into the VM? I was actually thinking it is a crazy idea of mine but it turns out other people do have same crazy ideas! :)&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Tail_call"&gt;Tail Recursion / Tail Call Optimization&lt;/a&gt;&lt;/i&gt; is something that every developer, who tried some FP language, misses from Java. I've tried &lt;a href="http://www.erlang.org/"&gt;Erlang&lt;/a&gt; a while ago, and after a few weeks I really could live without this feature.&lt;/p&gt;&lt;br /&gt;
Cameron had plenty of other stuff on the list but I'd rather skip mentioning all the points. The presentation slides are available &lt;a href="http://www.wiki.jvmlangsummit.com/images/2/23/2011_Purdy.pdf"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Async .NET&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
It was quite an interesting presentation by &lt;a href="http://www.linkedin.com/in/madst"&gt;Mads Torgersen&lt;/a&gt;. It is nice to know, what are the people working on the other major managed runtime come up with in a while. The main feature that Mads was talking about was the asynchronous task execution coming in C# 5. Basically it is similar to what Java has with Futures. The presentation slides are available &lt;a href="http://www.wiki.jvmlangsummit.com/images/3/33/Async_in_.NET.pdf"&gt;here&lt;/a&gt;, and actually I've found a video on the same subject at &lt;a href="http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async"&gt;Channel 9&lt;/a&gt; - recommended!. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Indy FTW!&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Now it was all about &lt;a href="http://hg.openjdk.java.net/jdk7/hotspot-comp/hotspot/rev/be93aad57795"&gt;invokedynamic&lt;/a&gt;, &lt;a href="http://hg.openjdk.java.net/jdk7/hotspot-comp/hotspot/rev/e5b0439ef4ae"&gt;method handles&lt;/a&gt;, call sites, etc. First, &lt;a href="http://blogs.oracle.com/jrose"&gt;John Rose&lt;/a&gt; talked about &lt;a href="http://www.wiki.jvmlangsummit.com/images/8/88/Rose-2011-FutureDirections.pdf"&gt;Method Handles&lt;/a&gt;. And after that, Dan Heidinga talked about the &lt;a href="http://www.wiki.jvmlangsummit.com/images/6/6b/2011_Heidinga.pdf"&gt;method handles implementation&lt;/a&gt; in &lt;a href="http://wiki.eclipse.org/index.php/J9"&gt;IBM J9&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
These followed by the language implementers - demonstrating how invokedynamic and method handles can be used: &lt;a href="http://www.wiki.jvmlangsummit.com/images/3/3e/2011_Nutter.pdf"&gt;Charles Nutter on JRuby&lt;/a&gt;, and Remi Forax on &lt;a href="http://www.wiki.jvmlangsummit.com/images/9/93/2011_Forax.pdf"&gt;JSR-292 Cookbook&lt;/a&gt;. JRuby folks take a great advantage of the invokedynamic which allows a lot of optimizations hence improving the performance. Remi Forax presented a number of Method Handle usage tips. The collection can be found at &lt;a href="https://code.google.com/p/jsr292-cookbook"&gt;https://code.google.com/p/jsr292-cookbook&lt;/a&gt;. One really cool thing I've got to know is the &lt;a href="http://download.oracle.com/javase/7/docs/api/java/lang/ClassValue.html"&gt;ClassValue&lt;/a&gt; which can serve as a metadata carrier that might be required for dynamic method invocation.&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Day 2&lt;/h1&gt;&lt;br /&gt;
The first half of day 2 was mostly related to all the same &lt;a href="http://jcp.org/en/jsr/detail?id=292"&gt;JSR-292&lt;/a&gt; features: &lt;a href="http://www.wiki.jvmlangsummit.com/images/e/e5/Roos-Rtalk.pdf"&gt;porting Smalltalk to JVM&lt;/a&gt;, &lt;a href="http://www.wiki.jvmlangsummit.com/images/c/ce/Nashorn.pdf"&gt;new implementation of JavaScript on JVM&lt;/a&gt;, &lt;a href="http://www.wiki.jvmlangsummit.com/images/8/8d/Indy_and_Jython-Shashank_Bharadwaj.pdf"&gt;Jython&amp;Indy&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.wiki.jvmlangsummit.com/images/a/ae/Dynalink_2011_JVM_Language_Summit.pdf"&gt;Dynalink, presented by Attila Szegedi&lt;/a&gt;, is an interesting project for dynamic linking in Java - as far as I understand &lt;a href="https://github.com/szegedi/dynalink"&gt;Dynalink&lt;/a&gt; could be used to implement invokedynamic behavior on JVM. &lt;br /&gt;
&lt;br /&gt;
After all the dynamic fluff-and-stuff the statically typed languages came on stage.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://gosu-lang.org/images/gosu.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="40" width="174" src="http://gosu-lang.org/images/gosu.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;&lt;a href="http://gosu-lang.org/"&gt;Gosu&lt;/a&gt;&lt;/b&gt;. Honestly, I underestimated the language when I learned about it the first time. This time I was actually surprised by the features presented in Gosu, accompanied with compiler support and the open type system. A couple of years ago I used Drools and Groovy to implement the rules-based system. If I knew about &lt;a href="http://gosu-lang.org/"&gt;Gosu&lt;/a&gt; at that time it would probably be my language of choice. Especially neat is that one can basically connect some XML or properties file to the type system and tell that this is a new type in Gosu, and get all the type-checking backed by the compiler. Just awesome!&lt;br /&gt;
Gosu doesn't seem to tackle any of the general-purpose language but it definitely has its niche - a statically-typed language for writing business rules.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://confluence.jetbrains.net/download/attachments/40702622/Kotlin?version=3&amp;modificationDate=1310660344000" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"&gt;&lt;img border="0" height="50" width="58" src="http://confluence.jetbrains.net/download/attachments/40702622/Kotlin?version=3&amp;modificationDate=1310660344000" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;&lt;a href="http://confluence.jetbrains.net/display/Kotlin/Welcome"&gt;Project Kotlin&lt;/a&gt;,&lt;/b&gt; presented by JetBrains developers, &lt;a href="http://twitter.com/#!/abreslav"&gt;Andrey Breslav&lt;/a&gt; and &lt;a href="http://twitter.com/#!/intelliyole"&gt;Dmitry Jemerov&lt;/a&gt;, has definitely created a lot of buzz by now. According to the creators, Kotlin is designed to be &lt;i&gt;nicier than Java, and simpler than Scala&lt;/i&gt;. Here're the slides from &lt;a href="http://www.wiki.jvmlangsummit.com/images/6/6e/Jetbrains-Kotlin.pdf"&gt;the presentation&lt;/a&gt; &amp; &lt;a href="http://www.wiki.jvmlangsummit.com/images/9/93/Jetbrains-Kotlin-workshop.pdf"&gt;the workshop&lt;/a&gt;. At first sight, the language is definitely nice to read and the syntax seems to be more friendly than in Scala, but going deeper into more advanced features, the claim tends to diminish. I noticed a lot of similarities with Scala, Groovy and C#, whereas C# features (i.e. non-virtual methods) do not seem as coherent with the other two languages. I do not have any strong opinion on the project yet  - need to study it a bit and compare to other languages (read Scala) but one thing I quite sure about is that the IDE support &lt;i&gt;&lt;b&gt;should&lt;/b&gt;&lt;/i&gt; be top class. There are &lt;a href="http://habrahabr.ru/blogs/java/124494/"&gt;a lot of&lt;/a&gt; &lt;a href="http://www.jroller.com/scolebourne/date/20110724"&gt;opinions&lt;/a&gt; &lt;a href="http://www.infoq.com/news/2011/07/kotlin"&gt;currently&lt;/a&gt;, whether JetBrains should rather have contributed to &lt;a href="http://plugins.intellij.net/plugin/?id=1347"&gt;Scala tooling&lt;/a&gt;, or &lt;a href="http://relation.to/19161.lace"&gt;Ceylon project&lt;/a&gt;.. don't know what is best - time will show. I do understand the scepsis of Scala fanboys regarding Kotlin, but it is quite stupid to underestimate this effort. IMHO, nothing replaces Java any time soon - it rather benefits of all the language experiments. &lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Day 3&lt;/h1&gt;&lt;br /&gt;
On the day 3 there have been a few talks related to Java language itself.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.wiki.jvmlangsummit.com/images/a/a9/Inti2011.pdf"&gt;Interface injection by Tobias Ivarsson&lt;/a&gt;, &lt;a href="http://www.wiki.jvmlangsummit.com/images/a/a1/2011_Goetz_Extension_Slides.pdf"&gt;Extension Methods&lt;/a&gt; &amp; &lt;a href="http://www.wiki.jvmlangsummit.com/images/1/1e/2011_Goetz_Lambda.pdf"&gt;Lambda Bytecode&lt;/a&gt; by Brian Goetz - awesome content and ideas presented. IMO, properly combined autoboxing, interface injection and extesion methods with lambdas could enable ruby-like syntax in Java, e.g. &lt;code&gt;5.times({ int x -&gt; println(x); }&lt;/code&gt;. Neat, huh? &lt;br /&gt;
&lt;br /&gt;
A very interesting project &lt;a href="http://wikis.sun.com/display/MaxineVM/Graal"&gt;Graal&lt;/a&gt;, &lt;a href="http://www.wiki.jvmlangsummit.com/images/8/8e/GraalJVMSummit2011.pdf"&gt;presented&lt;/a&gt; by &lt;a href="http://www.ssw.uni-linz.ac.at/General/Staff/TW/"&gt;Thomas Wuerthinger&lt;/a&gt; (one of the core developers on &lt;a href="http://ssw.jku.at/dcevm/"&gt;DCEVM&lt;/a&gt;. Graal includes a mechanism to execute the compiler outside of the HotSpot JVM which leads to "distributed compilation".&lt;br /&gt;
&lt;br /&gt;
At the end &lt;a href="http://twitter.com/#!/pdeva"&gt;Prashant Deva&lt;/a&gt; talked about the &lt;a href="http://www.wiki.jvmlangsummit.com/images/a/ab/2011_Chronon.pdf"&gt;Chronon debugger&lt;/a&gt;. In fact, it turns out that Chronon isn't really a debugger but you can rather record the dataflow of your program execution and do "post-debugging" using the data recorded at runtime. It really looks as if you're debugging in the IDE, stepping through the lines of code and observing the values of variables. But technically, the plugin doesn't even connect via JVMTI - it rather emulates the program under inspection - executing queries to the recorded data set and jumping to the correct line of code in the IDE.&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Summary&lt;/h1&gt;&lt;br /&gt;
I think this was the most advanced and interesting Java-related event I've attended so far. I really feel myself being so dumb now - very motivating to finally take a look at some textbook on the compiler construction :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7020955483078867032-2235790601639964791?l=arhipov.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AntonsBlog/~4/WSp97yjTTC4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://arhipov.blogspot.com/feeds/2235790601639964791/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7020955483078867032&amp;postID=2235790601639964791" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/2235790601639964791?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/2235790601639964791?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AntonsBlog/~3/WSp97yjTTC4/jvm-language-summit-2011.html" title="JVM Language Summit 2011" /><author><name>Anton Arhipov</name><uri>http://www.blogger.com/profile/11951065633319406772</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="31" src="http://1.bp.blogspot.com/_flYJTi1O_TE/TRrmBRTXBoI/AAAAAAAAMy4/KHqYrZgIvsE/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://arhipov.blogspot.com/2011/07/jvm-language-summit-2011.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkACSX0zeip7ImA9WhdTE0k.&quot;"><id>tag:blogger.com,1999:blog-7020955483078867032.post-496997215151410876</id><published>2011-07-10T16:31:00.000-07:00</published><updated>2011-07-10T16:32:48.382-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-10T16:32:48.382-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="intellij" /><title>What’s Cool In IntelliJIDEA. Part II: Live Templates</title><content type="html">In IntelliJ, I use Live Templates quite heavily and still think that these are underused. It is not only the standard number of templates that can make your life easier while typing yet another piece of code, but it is also the ability to define new templates with all the bells and whistles that are available in IntelliJ standard template list.&lt;br /&gt;
&lt;br /&gt;
In the &lt;a href="http://arhipov.blogspot.com/2011/06/whats-cool-in-intellijidea-part-i.html"&gt;previous post&lt;/a&gt; I've covered the basics of Live Templates but I think that it would be cool to cover these in more details and to point out some less-known aspects of this functionality.&lt;br /&gt;
&lt;br /&gt;
First of all, &lt;b&gt;Ctrl+J&lt;/b&gt; is &lt;i&gt;&lt;b&gt;the shortcut&lt;/b&gt;&lt;/i&gt; to use in order to get a list of the available by default. But if you had time to practice, most likely you can remember the abbreviations by heart, like &lt;b&gt;psvm&lt;/b&gt;, &lt;b&gt;iter&lt;/b&gt;, &lt;b&gt;psfs&lt;/b&gt;, &lt;b&gt;soutv&lt;/b&gt;, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-nyMy7zErr_o/ThjWoR25YCI/AAAAAAAANl0/9QtI6appNXM/s1600/intellij-live-templates.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="204" src="http://1.bp.blogspot.com/-nyMy7zErr_o/ThjWoR25YCI/AAAAAAAANl0/9QtI6appNXM/s400/intellij-live-templates.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
One thing I do for sure before using Live Templates is that I change the default expansion key, which is &lt;i&gt;Tab&lt;/i&gt; by default, to a &lt;i&gt;Space&lt;/i&gt; key. It seems to me that it is more natural to use Space for this purpose as when you type you actually hit the Space key almost automatically.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-2s_htU-5O8g/ThjY3qbZBDI/AAAAAAAANl8/e16MeLPjSeg/s1600/intellij-live-templates-settings.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="216" src="http://2.bp.blogspot.com/-2s_htU-5O8g/ThjY3qbZBDI/AAAAAAAANl8/e16MeLPjSeg/s400/intellij-live-templates-settings.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="" name="templates-surround-example"&gt;&lt;/a&gt;&lt;br /&gt;
Another cool feature of Live Templates is to surround a capable statement with a block of code - &lt;a href="http://arhipov.blogspot.com/2011/06/whats-cool-in-intellijidea-part-i.html#surround-with-live-template"&gt;also covered in the previous post&lt;/a&gt;.  &lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-cL3qXITpATA/TgZOu1U7qZI/AAAAAAAANh4/NJuEygnE7X0/s1600/LiveTemplates-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="271" src="http://3.bp.blogspot.com/-cL3qXITpATA/TgZOu1U7qZI/AAAAAAAANh4/NJuEygnE7X0/s400/LiveTemplates-3.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;h1&gt;How do I define my own template?&lt;/h1&gt;&lt;br /&gt;
IntelliJ provides a number of templates in its default distribution but obviously it doesn't cover all cases you might need. So here's the main purpose of this post - how to define a custom live template in IntelliJ. First, let's make up a use case - a situation where we'd like to have some means for typing faster but which isn't defined in the IDE by default.&lt;br /&gt;
&lt;br /&gt;
For some reason, IntelliJ doesn't provide try-catch template by default. It only suggests this option if you'd like to surround an existing statement with the try-catch block, but not when you just want to create an empty one. Here's what we can do: open Settings window (&lt;b&gt;Ctrl+Alt+S&lt;/b&gt;) and start typing 'Live Templates' - this will lead you to the templates' settings - and hit the "Add.." button on the right.&lt;br /&gt;
&lt;br /&gt;
It is quite easy to create a simple template which just has to generate a defined text for the given keyword. For the empty try-catch block we just need to fill in the abbreviation and the code itself, and not to forget to bind it to Java context using the corresponding checkbox.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-IXWGY4yydPs/ThjirKCdVUI/AAAAAAAANmE/ln_PdSKwPMc/s1600/intellij-live-templates-add1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="343" src="http://4.bp.blogspot.com/-IXWGY4yydPs/ThjirKCdVUI/AAAAAAAANmE/ln_PdSKwPMc/s400/intellij-live-templates-add1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
This is quite a dumb template, nothing intelligent here. But what if we'd like to suggest the exception type in the catch block? What if we'd like to position the cursor in some particular place after the template is applied? Let's make our brand new template a little smarter. &lt;br /&gt;
&lt;br /&gt;
To ask IntelliJ for a type of the throwable in the catch block we can add a variable (&lt;i&gt;&lt;b&gt;$EXCEPTION$&lt;/b&gt;&lt;/i&gt;) and define its value using a special function provided by IntelliJ. Say, I'd like the type to be a subtype of &lt;b&gt;java.lang.Exception&lt;/b&gt; class, hence I'm using the &lt;b&gt;subtype(&lt;i&gt;&amp;lt;type&amp;gt;&lt;/i&gt;)&lt;/b&gt; function:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-6Nfy0vsX-RY/ThojqJcvd5I/AAAAAAAANmM/eq8mazYyguE/s1600/intellij-live-templates-add2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="166" src="http://4.bp.blogspot.com/-6Nfy0vsX-RY/ThojqJcvd5I/AAAAAAAANmM/eq8mazYyguE/s400/intellij-live-templates-add2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
You've probably noticed that I've used another variable, &lt;b&gt;&lt;i&gt;$END$&lt;/i&gt;&lt;/b&gt;, but there's no value defined in the dialog window. This is a predefined variable, meaning where should the cursor be positioned after the last choice made within the templates.&lt;br /&gt;
&lt;br /&gt;
So now once I type 'try' and hit the space key, the template is expanded to the following:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-K0ndNYL7BXk/Thokii0ECOI/AAAAAAAANmU/lRX-pSVRIPQ/s1600/intellij-live-templates-add3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="214" src="http://3.bp.blogspot.com/-K0ndNYL7BXk/Thokii0ECOI/AAAAAAAANmU/lRX-pSVRIPQ/s400/intellij-live-templates-add3.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
First the cursor will be positioned inside the catch block in order to choose the type of the exception to be handled. Right after I make my mind about the type and hit the Enter key, the cursor will be positioned back into the try block.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
We can go further and add an option to choose the method call on the exception instance by emulating the Ctrl+Space behavior using a special function again. This is a fictional example but let's assume we want that :)&lt;br /&gt;
&lt;br /&gt;
For the purpose, I've defined a &lt;b&gt;&lt;i&gt;$METHOD$&lt;/i&gt;&lt;/b&gt; variable which is assigned a &lt;b&gt;complete()&lt;/b&gt; function in the template editor:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/--XaR9JnlvTc/Thom-K6J-9I/AAAAAAAANmc/TGUSEtPhv0I/s1600/intellij-live-templates-add4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="144" src="http://2.bp.blogspot.com/--XaR9JnlvTc/Thom-K6J-9I/AAAAAAAANmc/TGUSEtPhv0I/s400/intellij-live-templates-add4.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Now, once the type of the exception is selected, the next thing to happen is the automatic auto-completion action on the instance of the exception within the catch block - the list of available methods will popup:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-q2Q4uzsO4uU/Thon45bkXPI/AAAAAAAANmk/-bvK6Fbo1GI/s1600/intellij-live-templates-add5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="235" src="http://4.bp.blogspot.com/-q2Q4uzsO4uU/Thon45bkXPI/AAAAAAAANmk/-bvK6Fbo1GI/s400/intellij-live-templates-add5.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
There's actually &lt;a href="http://www.jetbrains.com/idea/webhelp/edit-template-variables-dialog.html"&gt;a fair number of functions&lt;/a&gt; that could be used in Live Templates for the variable assignment. The nice part is that these work not only for Java but also other languages - when writing JavaScript, HTML or Groovy code, for instance.&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Surround with template&lt;/h1&gt;&lt;br /&gt;
The other type of live templates available in IntelliJ is the surrounding templates. It means you can select a text block (or just position the cursor to a desired location) and hit the &lt;b&gt;Ctrl+Alt+T&lt;/b&gt; shortcut - a popup with the templates list &lt;a href="http://www.blogger.com/post-edit.g?blogID=7020955483078867032&amp;amp;postID=496997215151410876&amp;amp;from=pencil#templates-surround-example"&gt;will be suggested&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
Defining a custom surround template isn't any different from the normal templates besides that the selected block of code (or text) is assigned to a predefined &lt;b&gt;&lt;i&gt;$SELECTION$&lt;/i&gt;&lt;/b&gt; variable. Also, if a template contains this variable it will not appear in the list of normal templates provided via &lt;b&gt;Ctrl+J&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Let's make an example for defining a custon surrounding template. Assume we'd like to quote a selected text. This is a very simple template - just need to add the quotes around the &lt;b&gt;&lt;i&gt;$SELECTION$&lt;/i&gt;&lt;/b&gt; variable in the template editor:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-okGJbt_rEkQ/ThozIqdx_2I/AAAAAAAANms/doPsNpgwpGs/s1600/intellij-live-templates-surround.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="237" src="http://4.bp.blogspot.com/-okGJbt_rEkQ/ThozIqdx_2I/AAAAAAAANms/doPsNpgwpGs/s400/intellij-live-templates-surround.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Now if I select a text and hit &lt;b&gt;Ctrl+Alt+T&lt;/b&gt; shortcut and then "Q" key the selected text will be put into quotes:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-8pvQPH0YJDk/Tho0RSviHZI/AAAAAAAANm0/vv9FsB1NxTc/s1600/intellij-live-templates-surround2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="164" src="http://4.bp.blogspot.com/-8pvQPH0YJDk/Tho0RSviHZI/AAAAAAAANm0/vv9FsB1NxTc/s400/intellij-live-templates-surround2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;h1&gt;Resume&lt;/h1&gt;&lt;br /&gt;
If you use IntelliJ, Live Templates should be your bread and butter for tying the code faster. There's plenty of the standard templates defined in IntelliJ, but don't be limited only to the standard template list - define your own templates according to your code specifics - you will not regret that!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7020955483078867032-496997215151410876?l=arhipov.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AntonsBlog/~4/NSOuZRDWRg0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://arhipov.blogspot.com/feeds/496997215151410876/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7020955483078867032&amp;postID=496997215151410876" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/496997215151410876?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/496997215151410876?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AntonsBlog/~3/NSOuZRDWRg0/whats-cool-in-intellijidea-part-ii-live.html" title="What’s Cool In IntelliJIDEA. Part II: Live Templates" /><author><name>Anton Arhipov</name><uri>http://www.blogger.com/profile/11951065633319406772</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="31" src="http://1.bp.blogspot.com/_flYJTi1O_TE/TRrmBRTXBoI/AAAAAAAAMy4/KHqYrZgIvsE/S220/avatar.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-nyMy7zErr_o/ThjWoR25YCI/AAAAAAAANl0/9QtI6appNXM/s72-c/intellij-live-templates.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://arhipov.blogspot.com/2011/07/whats-cool-in-intellijidea-part-ii-live.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQDQn0-eCp7ImA9WhdTEkg.&quot;"><id>tag:blogger.com,1999:blog-7020955483078867032.post-2238463210285781269</id><published>2011-06-29T08:59:00.000-07:00</published><updated>2011-07-09T15:59:33.350-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-09T15:59:33.350-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="intellij" /><category scheme="http://www.blogger.com/atom/ns#" term="software development" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><title>What’s Cool In IntelliJIDEA. Part I</title><content type="html">Eclipse or IntelliJ? NetBeans or Eclipse? IntelliJ or NetBeans? The dispute about the IDEs is the most popular among the software developers and hardly will ever end. I consider myself being a big IntelliJ fan, but I do realize that there are a lot of things that IntelliJ could do better and that NetBeans and Eclipse are better in some ways. In this post I’d like to make an overview of IntelliJ’s features which I like the most, and and beyond that. Also I’d like point out some of the aspects in which IntelliJ could do better.&lt;br /&gt;
&lt;br /&gt;
One of my friends said once:&lt;br /&gt;
&lt;blockquote&gt;I don't like IDEs. They help to write verbose code. In real life 90% of time I spend on code reading. Verbose code kills my productivity&lt;/blockquote&gt;&lt;br /&gt;
I think he's wrong. The reality is that IDEs are used not only for writing/generating code, but to a greater extent IDEs are used to read and analyze the code. You might be a hard-core Emacs/Vim ninja but still, there are things that you just cannot do with the text editors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Navigation&lt;/h1&gt;&lt;br /&gt;
Navigation through the source code is one of the activities that programmer executes on a regular basis. Basically, it is not hard to navigate the code with Emacs or Vim, but it would limit you only to a basic navigation options. IDEs take navigation abilities one step further.&lt;br /&gt;
&lt;br /&gt;
Let's see what are the navigation features in IntelliJ. First of all, "Open Type" which is executed via &lt;b&gt;Ctrl+N&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-z7u7Wr1-xwQ/TgSpb-0Jn3I/AAAAAAAANe4/pJIQfBtp0LI/s1600/CtrlN.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="84" src="http://3.bp.blogspot.com/-z7u7Wr1-xwQ/TgSpb-0Jn3I/AAAAAAAANe4/pJIQfBtp0LI/s400/CtrlN.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
The same can be achieved with Ctrl+Shift+T in Eclipse and the behavior is exactly the same.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ctrl+Shift+N&lt;/b&gt; will help you to open any resource. Eclipse does the same with Ctrl+Shift+R.&lt;br /&gt;
&lt;br /&gt;
And it could have been all but there's more - &lt;b&gt;Ctrl+Shift+Alt+N&lt;/b&gt; will find you all the appearances of a specific symbol, e.g. a method name:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-iksIvvyLWjw/TgSrfr27BlI/AAAAAAAANfA/Q_hSM1MJwAQ/s1600/CtrlShiftAltN.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="74" src="http://4.bp.blogspot.com/-iksIvvyLWjw/TgSrfr27BlI/AAAAAAAANfA/Q_hSM1MJwAQ/s400/CtrlShiftAltN.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
It doesn't mean IntelliJ will scan the code for the occurrence of the specific symbols but it rather will match the code structure and look for the elements in your code so you will get a list of method declarations but not just any appearance of the method name in the code. This is quite useful if your classes are not sharing the same hierarchy.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-uVPyD8dlgRk/TgSvSTqqqrI/AAAAAAAANfI/mf-8DgGX5rg/s1600/CtrlE.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="356" src="http://2.bp.blogspot.com/-uVPyD8dlgRk/TgSvSTqqqrI/AAAAAAAANfI/mf-8DgGX5rg/s400/CtrlE.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;Often when you navigate the source code you jump over class hierarchies, browse different methods, open type declarations, etc. It is quite common that once in a while you would like to step several steps back in your navigation and proceed with some other direction. &lt;b&gt;Ctrl+Alt+(left|right) arrow&lt;/b&gt; is a very useful shortcut for such purpose. Whenever a caret hits any place in the code this place is remembered and you can go back and forward in the your browsing history. This is quite cool as if you navigate a large code base you might not even remember which classes you actually opened just a second ago.&lt;br /&gt;
&lt;br /&gt;
Actually you can get a list of the recently visited files by pressing &lt;b&gt;Ctrl+E&lt;/b&gt; - also quite often used to reopen the recently closed files.&lt;br /&gt;
&lt;br /&gt;
Navigating back in forward is the same in Eclipse (with Alt+(left|right)arrow shortcuts). But I failed to find a list of recently edited files there, while this can be done in IntelliJ by hitting &lt;b&gt;Ctrl+Shift+E&lt;/b&gt; shortcut.&lt;br /&gt;
&lt;br /&gt;
There are plenty of other feature that make your code browsing experience more pleasant. For instance, both IntelliJ and Eclipse provide a feature to quickly browse the location of the currently opened class - &lt;b&gt;Alt+Home&lt;/b&gt; will popup a navigation bar with the path to the class.&lt;br /&gt;
&lt;br /&gt;
The cool feature in IntelliJ for this navigation par is that it is possible to brows the content of any file with &lt;b&gt;Ctrl+Shift+I&lt;/b&gt; without having to really open the file:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-E0aqtcRmzho/TgUXRHaYiCI/AAAAAAAANf4/J3V4pDE83Fw/s1600/AltHomeCtrlShiftI.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="129" src="http://4.bp.blogspot.com/-E0aqtcRmzho/TgUXRHaYiCI/AAAAAAAANf4/J3V4pDE83Fw/s400/AltHomeCtrlShiftI.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
In Eclipse a similar feature is called "Browse in Breadcrumb" called via Alt+Shift+B. The difference is that in Eclipse it works only if a Java type is opened and it acts only as a navigation bar - no quick preview available. Also, I didn't find an easy way how to get rid of that "Breadcrumb" in Eclipse besides clicking a dedicated button on the toolbar.&lt;br /&gt;
&lt;br /&gt;
Ctrl+Shift+I also works in IntelliJ for any symbol that you'd probably like to inspect. For instance, you may press this shortcut on any method call, and it will raise a popup that displays the methods source code:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-MUgjprX0gSE/TgUZhhQv4jI/AAAAAAAANgA/WqnmFHFy-x4/s1600/CtrlShiftI.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="172" src="http://1.bp.blogspot.com/-MUgjprX0gSE/TgUZhhQv4jI/AAAAAAAANgA/WqnmFHFy-x4/s400/CtrlShiftI.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Also, if you try to browse the code that maybe involved in the type hierarchy, it is possible to select the implementation by choosing the type in the very same quick view popup:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-xtpn9n20T9I/TgUagF47J2I/AAAAAAAANgI/_uch902bvTg/s1600/CtrlShiftI-interface.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="246" src="http://3.bp.blogspot.com/-xtpn9n20T9I/TgUagF47J2I/AAAAAAAANgI/_uch902bvTg/s400/CtrlShiftI-interface.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Talking about navigation on the hierarchy of classes, IntelliJ implements that also quite nicely - quick hierarchy view is available the same way as in Eclipse. The feature that distinguishes IntelliJ is the ability to easily navigate to implementation. For instance, from interface method declaration to any of the implementations. If there are multiple implementations of an interface method Ctrl+Alt+B will call a popup dialog with the list of implementations: &lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-XnQoN7QgXHc/TgUelHeq-zI/AAAAAAAANgQ/V4Ebna9zww0/s1600/CtrlAltB.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="80" src="http://2.bp.blogspot.com/-XnQoN7QgXHc/TgUelHeq-zI/AAAAAAAANgQ/V4Ebna9zww0/s400/CtrlAltB.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Find Usages&lt;/h1&gt;&lt;br /&gt;
"Find Usages" functionality is something that always made me nervous in Eclipse. &lt;i&gt;Ctrl+Shift+G&lt;/i&gt; (find references in workspace) alone is ridiculously unusable. I mean, fine, you can find all the references to a method in the workspace with a single shortcut, but to do the same in a project scope you have to touch the mouse.&lt;br /&gt;
&lt;br /&gt;
Here's what you have in IntelliJ. First of all &lt;b&gt;Alt+F7&lt;/b&gt; would give you almost the same as Gtrl+Shift+G in Eclipse besides that you don't have to touch the mouse in order to define scope of the lookup. &lt;b&gt;Arrow down&lt;/b&gt; will give you a choice of scopes available for the reference loopup, the hit &lt;b&gt;Enter&lt;/b&gt; and you're done. Even such simple feature is much usable in IntelliJ.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-eU2z75Avd_0/TgX32PReI5I/AAAAAAAANgY/sPqLZ6gP6HA/s1600/AltF7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="285" src="http://2.bp.blogspot.com/-eU2z75Avd_0/TgX32PReI5I/AAAAAAAANgY/sPqLZ6gP6HA/s400/AltF7.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Besides that a quick lookup is also available - with &lt;b&gt;Ctrl+Alt+F7&lt;/b&gt; you will get a popup with the list of the references for a method of interest and directly from there you can use the &lt;b&gt;Ctrl+Shift+I&lt;/b&gt; (mentioned before) to view the sources code in which the method is used:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-hom4dasyjQA/TgX4-1r1I3I/AAAAAAAANgg/RSo-YpWi2rw/s1600/CtrlAltF7CtrlShiftI.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="189" src="http://4.bp.blogspot.com/-hom4dasyjQA/TgX4-1r1I3I/AAAAAAAANgg/RSo-YpWi2rw/s400/CtrlAltF7CtrlShiftI.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Marking the occurrences of a variable works the same way in IntelliJ and Eclipse, besides that in Eclipse you can toggle the highligh and in IntelliJ you press a shortcut (&lt;b&gt;Ctrl+Shift+F7&lt;/b&gt;) but no essential difference in the result for me. In IntelliJ, though, the highlight works on multiple variables while in Eclipse only on a single one.&lt;br /&gt;
&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt; &lt;td&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-CrNsiB-t0Uw/TgYDagSXc7I/AAAAAAAANgo/dMMeodLq9-w/s1600/CtrlShiftF7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="310" src="http://2.bp.blogspot.com/-CrNsiB-t0Uw/TgYDagSXc7I/AAAAAAAANgo/dMMeodLq9-w/s400/CtrlShiftF7.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-Zjg4NnIu6sI/TgYHtM2QKSI/AAAAAAAANgw/IlRBECbgMaE/s1600/EclipseVariableHighlight.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="227" src="http://1.bp.blogspot.com/-Zjg4NnIu6sI/TgYHtM2QKSI/AAAAAAAANgw/IlRBECbgMaE/s400/EclipseVariableHighlight.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;h1&gt;Bookmarks&lt;/h1&gt;&lt;br /&gt;
Navigating through the code is easier if there are means to bookmark some places in the code in order to be able return back to the location of interest. It seems that IntelliJ developers think of it as a priority as all the &lt;b&gt;&lt;i&gt;Ctrl+Shift+#&lt;/i&gt;&lt;/b&gt; and &lt;b&gt;&lt;i&gt;Ctrl+#&lt;/i&gt;&lt;/b&gt; shortcuts are reserved for bookmarking needs.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;Ctrl+Shift+#&lt;/i&gt;&lt;/b&gt; (e.g &lt;b&gt;Ctrl+Shift+1&lt;/b&gt;) sets a quick bookmark on the line where the cursor is located. After that you can return back to the bookmarked location by pressing &lt;b&gt;&lt;i&gt;Ctrl+#&lt;/i&gt;&lt;/b&gt; (e.g. &lt;b&gt;Ctrl+1&lt;/b&gt;). The character symbols can also be used for bookmarking the locations but without quick access to the location afterwards - a special menu must be used. The screencast below demonstrates this feature:&lt;br /&gt;
&lt;br /&gt;
&lt;object data="http://tv.jetbrains.net/flowplayer/flowplayer-3.2.7.swf" height="600" id="_ipad" type="application/x-shockwave-flash" width="800"&gt;&lt;param name="movie" value="http://tv.jetbrains.net/flowplayer/flowplayer-3.2.7.swf" /&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="flashvars" value='config={"clip":{"scaling":"orig","autoPlay":false,"autoBuffering":true,"url":"/sites/default/files/videos/converted/idea-bookmarks.mp4"},"plugins":{"controls":{"stop":true}},"playlist":[{"scaling":"orig","autoPlay":false,"autoBuffering":true,"url":"http://tv.jetbrains.net/sites/default/files/videos/converted/idea-bookmarks.mp4"}]}' /&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
In Eclipse, the bookmarking functionality &lt;a href="http://sandarenu.blogspot.com/2008/02/using-bookmarks-in-eclipse.html"&gt;is also available&lt;/a&gt;, but it lacks same level of usability as in IntelliJ - no shortcuts by default and not that simple to use without the mouse.&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Local History&lt;/h1&gt;&lt;br /&gt;
Both the IDEs, IntelliJ and Eclipse, keep track of local changes and provide &lt;b&gt;local history&lt;/b&gt; view where you can browse the changes you've made. The feature is somewhat similar to using VCS, but without VCS.&lt;br /&gt;
&lt;br /&gt;
At first it seems that the feature is implemented the same way in IntelliJ and Eclipse but if you dig deeper and start really using it - you'll notice the difference. Again, IntelliJ takes the feature a bit further in respect to usability (but I'm quite biased on this).&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-DTJgmo9CpWI/TgYVOhvdHMI/AAAAAAAANg4/fACy9GFMWaA/s1600/IntelliJLocalHistoryView.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="205" src="http://4.bp.blogspot.com/-DTJgmo9CpWI/TgYVOhvdHMI/AAAAAAAANg4/fACy9GFMWaA/s400/IntelliJLocalHistoryView.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Specially the diff-view, is quite intuitive for this feature - you can clearly see what are the changes and easily migrate 'em. In Eclipse, the view is really similar but when I tested it - added new methods to a class, introduced new statements - I could not find those changes afterwards although an entry was created in the history view. In IntelliJ's view you can create a patch or revert to a desired version.  &lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ZbOR_UhHQHo/TgYV3sIuLwI/AAAAAAAANhA/F4GgJsvC0kk/s1600/EclipseLocalHistoryView.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="247" src="http://1.bp.blogspot.com/-ZbOR_UhHQHo/TgYV3sIuLwI/AAAAAAAANhA/F4GgJsvC0kk/s400/EclipseLocalHistoryView.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;h1&gt;Smart Code Completion&lt;/h1&gt;&lt;br /&gt;
Typing is just tying, right? It is actually amazing how intelligent cat the IDE be for this purpose. Isn't it cool when the IDE can autocomplete your statements just as you wanted?&lt;br /&gt;
&lt;br /&gt;
Here's a simple example. I'd like to introduce a field in a class - I'll type &lt;b&gt;List&amp;lt;String&amp;gt; list = new &lt;/b&gt; .. and hit Ctrl+Space then. And what does Eclipse suggests me? List and a name of the class I'm declaring this field in. Not really intelligent, uh?&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-pqbjDE-_Wt0/TgYdkg47ixI/AAAAAAAANhI/MpDU4RsiUW8/s1600/EclipseAutocomplete.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="83" src="http://2.bp.blogspot.com/-pqbjDE-_Wt0/TgYdkg47ixI/AAAAAAAANhI/MpDU4RsiUW8/s400/EclipseAutocomplete.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
In IntelliJ, after tying the same line of code, and pressing &lt;b&gt;Ctrl+Space&lt;/b&gt; the popup gives me a list of List implementations available in classpath. Also, &lt;b&gt;Ctrl+Shift+Space&lt;/b&gt; tries to be even smarter and proposes me ArrayList as a preferred choice.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-WaoeOVBO5II/TgYpoDY33RI/AAAAAAAANhQ/bbp3_L5pYoA/s1600/CtrlSpace.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="114" src="http://4.bp.blogspot.com/-WaoeOVBO5II/TgYpoDY33RI/AAAAAAAANhQ/bbp3_L5pYoA/s400/CtrlSpace.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-HZMKzIg8cEk/TgYpoVovZaI/AAAAAAAANhY/VMmQTUggzpg/s1600/CtrlShiftSpace.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="107" src="http://1.bp.blogspot.com/-HZMKzIg8cEk/TgYpoVovZaI/AAAAAAAANhY/VMmQTUggzpg/s400/CtrlShiftSpace.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Another cool autocomplete behavior I discovered in IntelliJ is that if you try smart type completion &lt;u&gt;twice&lt;/u&gt; (&lt;b&gt;Ctrl+Shift+Space&lt;/b&gt;) then IntelliJ will search for chained expressions which have expected type.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-82RqCy4QiPg/TgZDIHWvXsI/AAAAAAAANhg/yJP2XHKQY98/s1600/CtrlShiftSpaceCtrlShiftSpace.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="54" src="http://4.bp.blogspot.com/-82RqCy4QiPg/TgZDIHWvXsI/AAAAAAAANhg/yJP2XHKQY98/s400/CtrlShiftSpaceCtrlShiftSpace.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;h1&gt;Live Templates&lt;/h1&gt;&lt;br /&gt;
Templates is the other feature that helps you to write code fast. Usually an IDE provides you a set of templates but you're allowed to add new templates also. Let's see how it is done in IntelliJ.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ctrl+J&lt;/b&gt; will popup a list of all the templates available and can be filtered by the template name. In case if you have just a few templates in the list it is not hard to find a correct one. But in case the list is too long it would be nice to have &lt;a href="http://youtrack.jetbrains.net/issue/IDEA-66033"&gt;some other means for filtering the list&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Just a coupe use cases for the templates:&lt;br /&gt;
&lt;br /&gt;
It is quite common to check the method parameter for null equality. The corresponding if-statement can be generated with &lt;b&gt;&lt;i&gt;inn&lt;/i&gt;&lt;/b&gt; template. So by typing "inn" in the editor and pressing the expansion key (TAB by default) we get the null-check-if-statement.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-NDBuMsAC3e8/TgZJL26DtZI/AAAAAAAANho/K6TQugsBaYo/s1600/LiveTemplates-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="152" src="http://3.bp.blogspot.com/-NDBuMsAC3e8/TgZJL26DtZI/AAAAAAAANho/K6TQugsBaYo/s400/LiveTemplates-1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Next, quite common piece of code, is iteration over a collection of elements. IntelliJ provides a number of iteration templates for various types of loops. The common thing among the iteration  templates is that all they start with "it" - &lt;b&gt;&lt;i&gt;iter&lt;/i&gt;&lt;/b&gt;, &lt;b&gt;&lt;i&gt;itco&lt;/i&gt;&lt;/b&gt;, &lt;b&gt;&lt;i&gt;itar&lt;/i&gt;&lt;/b&gt;, etc. So for instance we have a collection of elements and by typing iter and the expansion key we'll generate a foreach loop iterating the collection in context.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-uXKt8WsXYsc/TgZL52HnncI/AAAAAAAANhw/pRJXPfGxGJ4/s1600/LiveTemplates-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="122" src="http://3.bp.blogspot.com/-uXKt8WsXYsc/TgZL52HnncI/AAAAAAAANhw/pRJXPfGxGJ4/s400/LiveTemplates-2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;a name="surround-with-live-template"&gt;&lt;/a&gt;&lt;br /&gt;
Templates could also be used for surrounding statements in case it is applicable. &lt;b&gt;Ctrl+Alt+T&lt;/b&gt; does the trick. For instance, id like to surround the objects retrieval with try/catch block but I've already managed to generate a loop iterating the resulting collection:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-cL3qXITpATA/TgZOu1U7qZI/AAAAAAAANh4/NJuEygnE7X0/s1600/LiveTemplates-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="271" src="http://3.bp.blogspot.com/-cL3qXITpATA/TgZOu1U7qZI/AAAAAAAANh4/NJuEygnE7X0/s400/LiveTemplates-3.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Another template that I would mess in Eclipse by default is &lt;b&gt;soutv&lt;/b&gt; that expands to a System.out.println(...) statement with a variable in context:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-X8zg9BkGRng/TgZQkkUtjhI/AAAAAAAANiA/Sa-oWQXd0v0/s1600/LiveTemplates-4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="172" src="http://4.bp.blogspot.com/-X8zg9BkGRng/TgZQkkUtjhI/AAAAAAAANiA/Sa-oWQXd0v0/s400/LiveTemplates-4.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Editing and creating the templates is quite straightforward and &lt;a href="http://www.jetbrains.com/idea/webhelp/creating-and-editing-template-variables.html"&gt;well-documented&lt;/a&gt;. Usually I define my own try/catch template as it is not provided out-of-the box (which is strange).&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-kKsIXNaTzn8/TgZZDx7a7EI/AAAAAAAANiI/Z5JfYF0W94g/s1600/LiveTemplates-5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="289" src="http://2.bp.blogspot.com/-kKsIXNaTzn8/TgZZDx7a7EI/AAAAAAAANiI/Z5JfYF0W94g/s400/LiveTemplates-5.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
The unique feature of the templates in IntelliJ is that you can define new templates that are backed with available features from the IDE, e.g smart code completion and &lt;a href="http://www.jetbrains.com/idea/webhelp/edit-template-variables-dialog.html"&gt;other useful functions&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;Refactoring&lt;/h1&gt;&lt;br /&gt;
I think I'll skip the refactoring part at large - this is just insane to compare the huge amount of refactorings available in the IDEs. Only one note on the usability for a simple refactoring use case - extract local variable/method/etc. In Eclipse you have to select the full statement before you press Alt+Shift+L (or position the cursor just after the expression), otherwise the IDE refused to understand what do you want to do popping up a message &lt;i&gt;"An expression must be selected to activate this refactoring"&lt;/i&gt;. &lt;br /&gt;
&lt;br /&gt;
IntelliJ seems to be a bit more intelligent still detecting the context and providing you options for the same refactoring:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Fd6lW9EyQS0/TgZnBhNQ1nI/AAAAAAAANiQ/Ru9U7RQJmZ4/s1600/CtrlAltV.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="169" src="http://3.bp.blogspot.com/-Fd6lW9EyQS0/TgZnBhNQ1nI/AAAAAAAANiQ/Ru9U7RQJmZ4/s400/CtrlAltV.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;More to come, stay tuned :)&lt;/b&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7020955483078867032-2238463210285781269?l=arhipov.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AntonsBlog/~4/qOQAiyO9Mes" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://arhipov.blogspot.com/feeds/2238463210285781269/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7020955483078867032&amp;postID=2238463210285781269" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/2238463210285781269?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/2238463210285781269?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AntonsBlog/~3/qOQAiyO9Mes/whats-cool-in-intellijidea-part-i.html" title="What’s Cool In IntelliJIDEA. Part I" /><author><name>Anton Arhipov</name><uri>http://www.blogger.com/profile/11951065633319406772</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="31" src="http://1.bp.blogspot.com/_flYJTi1O_TE/TRrmBRTXBoI/AAAAAAAAMy4/KHqYrZgIvsE/S220/avatar.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-z7u7Wr1-xwQ/TgSpb-0Jn3I/AAAAAAAANe4/pJIQfBtp0LI/s72-c/CtrlN.png" height="72" width="72" /><thr:total>5</thr:total><feedburner:origLink>http://arhipov.blogspot.com/2011/06/whats-cool-in-intellijidea-part-i.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIFQX49fip7ImA9WhZVGE4.&quot;"><id>tag:blogger.com,1999:blog-7020955483078867032.post-8537209240608613445</id><published>2011-05-31T03:25:00.000-07:00</published><updated>2011-05-31T03:25:10.066-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-31T03:25:10.066-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="jrebel" /><title>JRebel 4.0 Released</title><content type="html">&lt;a href="http://www.zeroturnaround.com/blog/jrebel-4-0-released-redeploys-beware/"&gt;HotSwap, EJB, Hibernate Validator, Spring Security, anonymous classes and other &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7020955483078867032-8537209240608613445?l=arhipov.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AntonsBlog/~4/i74HwSAUtVE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://arhipov.blogspot.com/feeds/8537209240608613445/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7020955483078867032&amp;postID=8537209240608613445" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/8537209240608613445?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/8537209240608613445?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AntonsBlog/~3/i74HwSAUtVE/jrebel-40-released.html" title="JRebel 4.0 Released" /><author><name>Anton Arhipov</name><uri>http://www.blogger.com/profile/11951065633319406772</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="31" src="http://1.bp.blogspot.com/_flYJTi1O_TE/TRrmBRTXBoI/AAAAAAAAMy4/KHqYrZgIvsE/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://arhipov.blogspot.com/2011/05/jrebel-40-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUBRH49fyp7ImA9WhZWFk8.&quot;"><id>tag:blogger.com,1999:blog-7020955483078867032.post-6888938751922232856</id><published>2011-05-17T02:57:00.000-07:00</published><updated>2011-05-17T02:57:35.067-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-17T02:57:35.067-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="liverebel" /><title>LiveRebel 1.0 is Live!</title><content type="html">Read the announcement here: &lt;a href="http://0t.ee/lr1dot0"&gt;http://0t.ee/lr1dot0&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7020955483078867032-6888938751922232856?l=arhipov.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AntonsBlog/~4/2rnqIgnTKs0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://arhipov.blogspot.com/feeds/6888938751922232856/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7020955483078867032&amp;postID=6888938751922232856" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/6888938751922232856?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/6888938751922232856?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AntonsBlog/~3/2rnqIgnTKs0/liverebel-10-is-live.html" title="LiveRebel 1.0 is Live!" /><author><name>Anton Arhipov</name><uri>http://www.blogger.com/profile/11951065633319406772</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="31" src="http://1.bp.blogspot.com/_flYJTi1O_TE/TRrmBRTXBoI/AAAAAAAAMy4/KHqYrZgIvsE/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://arhipov.blogspot.com/2011/05/liverebel-10-is-live.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ECSHc9fyp7ImA9WhZRGUQ.&quot;"><id>tag:blogger.com,1999:blog-7020955483078867032.post-3152444061398670664</id><published>2011-04-16T13:16:00.000-07:00</published><updated>2011-04-16T16:14:29.967-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-16T16:14:29.967-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="intellij" /><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><title>Code Snippet. Intercepting "On Save" Action in IntelliJIDEA</title><content type="html">1. Add the following to META-INF/plugin.xml of your plug-in:&lt;br /&gt;
&lt;pre name="code" class="xml"&gt;&amp;lt;application-components&amp;gt;
   &amp;lt;component&amp;gt;
      &amp;lt;implementation-class&amp;gt;my.plugin.OnFileSaveComponent&amp;lt;/implementation-class&amp;gt;
    &amp;lt;/component&amp;gt;
 &amp;lt;/application-components&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
2. Implement com.intellij.openapi.components.ApplicationComponent:&lt;br /&gt;
&lt;pre name="code" class="java"&gt;package my.plugin;

import com.intellij.AppTopics;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.ApplicationComponent;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.fileEditor.FileDocumentManagerAdapter;
import com.intellij.util.messages.MessageBus;
import com.intellij.util.messages.MessageBusConnection;
import org.jetbrains.annotations.NotNull;

public class OnFileSaveComponent implements ApplicationComponent {
  @NotNull
  public String getComponentName() {
    return "My On-Save Component";
  }

  public void initComponent() {
    MessageBus bus = ApplicationManager.getApplication().getMessageBus();

    MessageBusConnection connection = bus.connect();

    connection.subscribe(AppTopics.FILE_DOCUMENT_SYNC, 
      new FileDocumentManagerAdapter() {
      @Override
      public void beforeDocumentSaving(Document document) {
         // create your custom logic here
      }
    });
  }

  public void disposeComponent() {
  }
}
&lt;/pre&gt;&lt;br /&gt;
That's it! :)&lt;br /&gt;
&lt;br /&gt;
So how could it be used? If you'd like to perform some synchronization with a remote server on each file save in IntelliJ, probably, this code snippet would help you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7020955483078867032-3152444061398670664?l=arhipov.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AntonsBlog/~4/JM-wEgPxTp4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://arhipov.blogspot.com/feeds/3152444061398670664/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7020955483078867032&amp;postID=3152444061398670664" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/3152444061398670664?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/3152444061398670664?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AntonsBlog/~3/JM-wEgPxTp4/code-snippet-intercepting-on-save.html" title="Code Snippet. Intercepting &quot;On Save&quot; Action in IntelliJIDEA" /><author><name>Anton Arhipov</name><uri>http://www.blogger.com/profile/11951065633319406772</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="31" src="http://1.bp.blogspot.com/_flYJTi1O_TE/TRrmBRTXBoI/AAAAAAAAMy4/KHqYrZgIvsE/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://arhipov.blogspot.com/2011/04/code-snippet-intercepting-on-save.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4AQnw8eyp7ImA9WhZREkQ.&quot;"><id>tag:blogger.com,1999:blog-7020955483078867032.post-2893142719966753271</id><published>2011-04-08T14:25:00.000-07:00</published><updated>2011-04-08T14:25:43.273-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-08T14:25:43.273-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="33rd degree" /><title>33rd Degree Conference. Photos</title><content type="html">&lt;center&gt;&lt;embed type="application/x-shockwave-flash" src="https://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&amp;captions=1&amp;hl=en_US&amp;feat=flashalbum&amp;RGB=0x000000&amp;feed=https%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fant.arhipov%2Falbumid%2F5592587527556515057%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_US" pluginspage="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7020955483078867032-2893142719966753271?l=arhipov.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AntonsBlog/~4/k_qFGxKYcNw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://arhipov.blogspot.com/feeds/2893142719966753271/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7020955483078867032&amp;postID=2893142719966753271" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/2893142719966753271?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/2893142719966753271?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AntonsBlog/~3/k_qFGxKYcNw/33rd-degree-conference-photos.html" title="33rd Degree Conference. Photos" /><author><name>Anton Arhipov</name><uri>http://www.blogger.com/profile/11951065633319406772</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="31" src="http://1.bp.blogspot.com/_flYJTi1O_TE/TRrmBRTXBoI/AAAAAAAAMy4/KHqYrZgIvsE/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://arhipov.blogspot.com/2011/04/33rd-degree-conference-photos.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAGQ3s6fip7ImA9WhZREU8.&quot;"><id>tag:blogger.com,1999:blog-7020955483078867032.post-8530998172322543206</id><published>2011-04-06T15:08:00.000-07:00</published><updated>2011-04-06T15:08:42.516-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-06T15:08:42.516-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="jrebel" /><category scheme="http://www.blogger.com/atom/ns#" term="33rd degree" /><category scheme="http://www.blogger.com/atom/ns#" term="job" /><title>33rd Degree, 2011, Day 1</title><content type="html">&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="https://lh3.googleusercontent.com/_flYJTi1O_TE/TZzcv2gvz1I/AAAAAAAANGw/VXzfegjzLkI/s400/IMG_7346.CR2.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="266" width="400" src="https://lh3.googleusercontent.com/_flYJTi1O_TE/TZzcv2gvz1I/AAAAAAAANGw/VXzfegjzLkI/s400/IMG_7346.CR2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
ZeroTurnaround is exhibiting at &lt;a href="http://33degree.org"&gt;33rd degree&lt;/a&gt; conference in Krakow. In fact, we are the only software product company at the tiny expo here. The others, Luxoft and Tieto are the outsourcing companies, so we feel a bit lonely in this situation. BTW, Luxof has the most meaningless booth I've ever seen - it is huge and it completely ineffective.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/_flYJTi1O_TE/TZzdKa6cQGI/AAAAAAAANHU/s0SChzIvUJs/s400/IMG_7358.CR2.jpg" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"&gt;&lt;img border="0" height="266" width="400" src="https://lh6.googleusercontent.com/_flYJTi1O_TE/TZzdKa6cQGI/AAAAAAAANHU/s0SChzIvUJs/s400/IMG_7358.CR2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Anyways, we've met a lot of smart people asking a lot of smart questions about &lt;a href="http://www.jrebel.com"&gt;JRebel&lt;/a&gt; and it is tough to answer all kind of questions - I wish I could.&lt;br /&gt;
&lt;br /&gt;
I didn't have much time to attend the sessions myself. However I've managed to escape from the expo area and to attend Ted Neward's talk &lt;a href="http://33degree.org/talks.html#BusyScala"&gt;Busy Developer's Guide to Scala: Patterns&lt;/a&gt;. I've got smarter in a way. I've learned about some Scala idioms that diminish some of the classical design patterns that you need to implement in Java from scratch. In fact, I realized that many of the design patterns become obsolete once the target language supports &lt;i&gt;&lt;b&gt;closures&lt;/b&gt;&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
At the end of the day we've organized the beer party for all the conference attendees. It is a funny thing but people are more interested in JRebel if they're are served with the free beer :)&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/_flYJTi1O_TE/TZzdeuzXrxI/AAAAAAAANH0/LOnoH1_HGTY/s400/IMG_7372.CR2.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="266" width="400" src="https://lh6.googleusercontent.com/_flYJTi1O_TE/TZzdeuzXrxI/AAAAAAAANH0/LOnoH1_HGTY/s400/IMG_7372.CR2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7020955483078867032-8530998172322543206?l=arhipov.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AntonsBlog/~4/1_j0vmlRcv0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://arhipov.blogspot.com/feeds/8530998172322543206/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7020955483078867032&amp;postID=8530998172322543206" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/8530998172322543206?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/8530998172322543206?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AntonsBlog/~3/1_j0vmlRcv0/33rd-degree-2011-day-1.html" title="33rd Degree, 2011, Day 1" /><author><name>Anton Arhipov</name><uri>http://www.blogger.com/profile/11951065633319406772</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="31" src="http://1.bp.blogspot.com/_flYJTi1O_TE/TRrmBRTXBoI/AAAAAAAAMy4/KHqYrZgIvsE/S220/avatar.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/_flYJTi1O_TE/TZzcv2gvz1I/AAAAAAAANGw/VXzfegjzLkI/s72-c/IMG_7346.CR2.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://arhipov.blogspot.com/2011/04/33rd-degree-2011-day-1.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4DRXc8fCp7ImA9WhZRGUU.&quot;"><id>tag:blogger.com,1999:blog-7020955483078867032.post-7427863581462214301</id><published>2011-04-01T00:27:00.000-07:00</published><updated>2011-04-16T13:49:34.974-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-16T13:49:34.974-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><title>Just Some Java Reflection Madness</title><content type="html">&lt;pre name="code" class="java"&gt;import java.lang.reflect.Field;

public class Test {

  public static void main(String[] args) throws Exception {
    doStuff();
    System.out.println("Hello".equals("World"));  // --&amp;gt; &lt;b&gt;true&lt;/b&gt;
  }

  public static void doStuff() throws Exception {
    Field value = String.class.getDeclaredField("value");
    value.setAccessible(true);
    value.set("Hello", "World".toCharArray());
  }

}
&lt;/pre&gt;&lt;br /&gt;
&lt;a href="http://www.javaspecialists.eu/talks/oslo09/ReflectionMadness.pdf"&gt;http://www.javaspecialists.eu/talks/oslo09/ReflectionMadness.pdf&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7020955483078867032-7427863581462214301?l=arhipov.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AntonsBlog/~4/P6RgXzeNwKA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://arhipov.blogspot.com/feeds/7427863581462214301/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7020955483078867032&amp;postID=7427863581462214301" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/7427863581462214301?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/7427863581462214301?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AntonsBlog/~3/P6RgXzeNwKA/just-some-java-reflection-madness.html" title="Just Some Java Reflection Madness" /><author><name>Anton Arhipov</name><uri>http://www.blogger.com/profile/11951065633319406772</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="31" src="http://1.bp.blogspot.com/_flYJTi1O_TE/TRrmBRTXBoI/AAAAAAAAMy4/KHqYrZgIvsE/S220/avatar.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://arhipov.blogspot.com/2011/04/just-some-java-reflection-madness.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcNQXo7eCp7ImA9WhZTGEk.&quot;"><id>tag:blogger.com,1999:blog-7020955483078867032.post-6982801048799519096</id><published>2011-03-22T18:01:00.000-07:00</published><updated>2011-03-22T18:01:30.400-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-22T18:01:30.400-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="job" /><title>Presentation Slides: Java Bytecode Fundamentals I - Tech Talk for JUG.lv, March 2011</title><content type="html">&lt;center&gt;&lt;br /&gt;
&lt;div style="width:425px" id="__ss_7352580"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/arhan/java-bytecode-fundamentals-i" title="Java Bytecode Fundamentals I"&gt;Java Bytecode Fundamentals I&lt;/a&gt;&lt;/strong&gt; &lt;object id="__sse7352580" width="425" height="355"&gt; &lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=javabytecodefundamentals-110322195110-phpapp01&amp;stripped_title=java-bytecode-fundamentals-i&amp;userName=arhan" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse7352580" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=javabytecodefundamentals-110322195110-phpapp01&amp;stripped_title=java-bytecode-fundamentals-i&amp;userName=arhan" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt; &lt;/object&gt; &lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/arhan"&gt;Anton Arhipov&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7020955483078867032-6982801048799519096?l=arhipov.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AntonsBlog/~4/1sISDMEoT8Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://arhipov.blogspot.com/feeds/6982801048799519096/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7020955483078867032&amp;postID=6982801048799519096" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/6982801048799519096?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/6982801048799519096?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AntonsBlog/~3/1sISDMEoT8Y/presentation-slides-java-bytecode.html" title="Presentation Slides: Java Bytecode Fundamentals I - Tech Talk for JUG.lv, March 2011" /><author><name>Anton Arhipov</name><uri>http://www.blogger.com/profile/11951065633319406772</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="31" src="http://1.bp.blogspot.com/_flYJTi1O_TE/TRrmBRTXBoI/AAAAAAAAMy4/KHqYrZgIvsE/S220/avatar.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://arhipov.blogspot.com/2011/03/presentation-slides-java-bytecode.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QEQHg4eyp7ImA9WhZTGE4.&quot;"><id>tag:blogger.com,1999:blog-7020955483078867032.post-3155788153681354588</id><published>2011-03-22T17:11:00.000-07:00</published><updated>2011-03-22T17:15:01.633-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-22T17:15:01.633-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="jrebel" /><category scheme="http://www.blogger.com/atom/ns#" term="job" /><title>JRebel 4.0 M1 Released</title><content type="html">JRebel 4.0-M1 was released. &lt;a href="http://www.zeroturnaround.com/blog/announcing-jrebel-4-0-m1-the-novel-features/"&gt;Grab it while it's hot&lt;/a&gt;!&lt;br /&gt;
&lt;br /&gt;
The new features include integration with HotSwap, support for anonymous classes and adding new session beans to JBoss 4.2/5.1 and Glassfish 2/3.&lt;br /&gt;
&lt;br /&gt;
For the new features, I would encourage everyone to give it a try! JRebel already provides the integration for JSF (Mojarra), JAX-RS (Jersey), CDI (Weld), and now the support for EJBs is extended! It is possible to create a JavaEE6 app with almost no redeploys already. Things are improving quite fast!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7020955483078867032-3155788153681354588?l=arhipov.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AntonsBlog/~4/aMBbNkLt02U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://arhipov.blogspot.com/feeds/3155788153681354588/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7020955483078867032&amp;postID=3155788153681354588" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/3155788153681354588?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/3155788153681354588?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AntonsBlog/~3/aMBbNkLt02U/jrebel-40-m1-released.html" title="JRebel 4.0 M1 Released" /><author><name>Anton Arhipov</name><uri>http://www.blogger.com/profile/11951065633319406772</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="31" src="http://1.bp.blogspot.com/_flYJTi1O_TE/TRrmBRTXBoI/AAAAAAAAMy4/KHqYrZgIvsE/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://arhipov.blogspot.com/2011/03/jrebel-40-m1-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMAQ348fip7ImA9Wx9aGEU.&quot;"><id>tag:blogger.com,1999:blog-7020955483078867032.post-2298755384084408785</id><published>2011-03-11T14:44:00.000-08:00</published><updated>2011-03-11T14:44:02.076-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-11T14:44:02.076-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="jrebel" /><category scheme="http://www.blogger.com/atom/ns#" term="tomcat" /><title>Embedded Tomcat 7 with JRebel</title><content type="html">&lt;object width="800" height="600"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=20934120&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=00ADEF&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=20934120&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=00ADEF&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="800" height="600"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/20934120"&gt;Embedded Tomcat 7 with JRebel&lt;/a&gt; from &lt;a href="http://vimeo.com/user1355264"&gt;Anton Arhipov&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7020955483078867032-2298755384084408785?l=arhipov.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AntonsBlog/~4/qTpHiaBhetI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://arhipov.blogspot.com/feeds/2298755384084408785/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7020955483078867032&amp;postID=2298755384084408785" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/2298755384084408785?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/2298755384084408785?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AntonsBlog/~3/qTpHiaBhetI/embedded-tomcat-7-with-jrebel.html" title="Embedded Tomcat 7 with JRebel" /><author><name>Anton Arhipov</name><uri>http://www.blogger.com/profile/11951065633319406772</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="31" src="http://1.bp.blogspot.com/_flYJTi1O_TE/TRrmBRTXBoI/AAAAAAAAMy4/KHqYrZgIvsE/S220/avatar.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://arhipov.blogspot.com/2011/03/embedded-tomcat-7-with-jrebel.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcFQ3o_cSp7ImA9WhZRGUU.&quot;"><id>tag:blogger.com,1999:blog-7020955483078867032.post-7107691173855061310</id><published>2011-03-06T13:32:00.000-08:00</published><updated>2011-04-16T13:50:12.449-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-16T13:50:12.449-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="tomcat" /><title>Embedded Tomcat, The Minimal Version</title><content type="html">Tomcat 7 has been improved a lot and along with all the features that it brings, a very nice feature is provided - the API for embedding tomcat into the application. &lt;a href="http://onjava.com/pub/a/onjava/2002/04/03/tomcat.html"&gt;The API was provided in earlier versions of Tomcat&lt;/a&gt; but it was quite cumbersome to use.&lt;br /&gt;
&lt;br /&gt;
To to start the embedded version of Tomcat one may need to build the required JARs.&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
$&gt; svn co https://svn.apache.org/repos/asf/tomcat/trunk tomcat&lt;br /&gt;
$&gt; cd tomcat&lt;br /&gt;
$&gt; ant embed-jars&lt;br /&gt;
$&gt; ls -l output/embed&lt;br /&gt;
total 5092&lt;br /&gt;
-rw-r--r-- 1 anton None   56802 2011-03-06 17:09 LICENSE&lt;br /&gt;
-rw-r--r-- 1 anton None    1194 2011-03-06 17:09 NOTICE&lt;br /&gt;
-rw-r--r-- 1 anton None 1690519 2011-03-06 17:09 ecj-3.6.jar&lt;br /&gt;
-rw-r--r-- 1 anton None  234625 2011-03-06 17:09 tomcat-dbcp.jar&lt;br /&gt;
-rw-r--r-- 1 anton None 2402517 2011-03-06 17:09 tomcat-embed-core.jar&lt;br /&gt;
-rw-r--r-- 1 anton None  781989 2011-03-06 17:09 tomcat-embed-jasper.jar&lt;br /&gt;
-rw-r--r-- 1 anton None   34106 2011-03-06 17:09 tomcat-embed-logging-juli.jar&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
The following snippet demonstrates the embedded Tomcat usage with a deployed servlet instance.&lt;br /&gt;
&lt;br /&gt;
&lt;pre name="code" class="java"&gt;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.Writer;

public class Main {

  public static void main(String[] args)
  throws LifecycleException, InterruptedException, ServletException {
    Tomcat tomcat = new Tomcat();
    tomcat.setPort(8080);

    Context ctx = tomcat.addContext("/", new File(".").getAbsolutePath());

    Tomcat.addServlet(ctx, "hello", new HttpServlet() {
      protected void service(HttpServletRequest req, HttpServletResponse resp) 
      throws ServletException, IOException {
        Writer w = resp.getWriter();
        w.write("Hello, World!");
        w.flush();
      }
    });
    ctx.addServletMapping("/*", "hello");

    tomcat.start();
    tomcat.getServer().await();
  }

}
&lt;/pre&gt;&lt;br /&gt;
The only two JARs required are &lt;b&gt;tomcat-embed-core.jar&lt;/b&gt; and &lt;b&gt;tomcat-embed-logging-juli.jar&lt;/b&gt;. It means that there will be no JSP support and pooling will also be disabled. But that's enough to start a servlet and in most cases that is what you probably need.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7020955483078867032-7107691173855061310?l=arhipov.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AntonsBlog/~4/-2dmz9Q4BzQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://arhipov.blogspot.com/feeds/7107691173855061310/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7020955483078867032&amp;postID=7107691173855061310" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/7107691173855061310?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7020955483078867032/posts/default/7107691173855061310?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AntonsBlog/~3/-2dmz9Q4BzQ/embedded-tomcat-minimal-version.html" title="Embedded Tomcat, The Minimal Version" /><author><name>Anton Arhipov</name><uri>http://www.blogger.com/profile/11951065633319406772</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="31" src="http://1.bp.blogspot.com/_flYJTi1O_TE/TRrmBRTXBoI/AAAAAAAAMy4/KHqYrZgIvsE/S220/avatar.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://arhipov.blogspot.com/2011/03/embedded-tomcat-minimal-version.html</feedburner:origLink></entry></feed>

