<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1479535086136999079</id><updated>2012-01-31T17:36:40.082+01:00</updated><category term='code recommenders'/><category term='extended javadoc'/><category term='eclipse'/><category term='vision'/><category term='project proposal'/><category term='code examples  recommender'/><category term='code search engine'/><category term='ide 2.0'/><category term='mined documentation'/><title type='text'>How much can the IDE predict what you will write in the next seconds?</title><subtitle type='html'>This is the project blog of the Eclipse Code Recommenders project (http://eclipse.org/recommenders). Here we blog about new features of "Code Recommenders" but also from time to time about related projects and research ideas we would like to present and discuss with you.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Marcel Bruch</name><uri>https://profiles.google.com/100908752439953740476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-i2lFK0vZDP8/AAAAAAAAAAI/AAAAAAAAAwA/IZJzvq1KhBk/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>26</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1479535086136999079.post-8523167224698796811</id><published>2011-12-02T17:16:00.001+01:00</published><updated>2011-12-02T18:17:27.104+01:00</updated><title type='text'>How should code search work?</title><content type='html'>&lt;i&gt;Hey all. As you probably all know, this is the Code Recommenders project blog we typically use to announce new features, releases or other noteworthy topics related to Code Recommenders. This blog post is a bit different than the others: It's our first "guest blog post" written by &lt;a href="https://twitter.com/#!/boehmtobias"&gt;Tobias Boehm&lt;/a&gt;, a master student doing his master thesis in the scope of the Code Recommenders project.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;This post is basically a brain dump how he thinks code search engines like Google Code Search, Krugle, or Koders *should* work and how we should be able to use them. He introduces an early prototype of a code search query language (which he will implement using&amp;nbsp;&lt;a href="http://eclipse.org/Xtext"&gt;Xtext&lt;/a&gt;) and a client tightly integrate into the &lt;a href="http://eclipse.org/"&gt;Eclipse IDE&lt;/a&gt;. His work will be based on the previous code search engine and Eclipse client we already blogged about a few months ago here: &lt;a href="http://code-recommenders.blogspot.com/2010/07/why-is-google-codesearch-not-google-for.html"&gt;"Why is Google Codesearch not google for code search?"&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;This blog post is a "heads-up! Your feedback is wanted!" post. So, please do not hesitate to ask tough questions or provide any other kind of feedback. All kind of feedback is appreciated and will help Tobias to &lt;a href="http://www.youtube.com/watch?v=X1jWe5rOu3g"&gt;catch idea bugs early&lt;/a&gt;! If you are interested in joining the work on code search engines, get in contact via the &lt;a href="http://eclipse.org/forums/eclipse.recommenders/"&gt;Code Recommenders forum&lt;/a&gt;. We are looking forward to your feedback.&amp;nbsp;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;Thanks,&lt;/i&gt;&lt;br /&gt;&lt;i&gt;Marcel&lt;/i&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-HRiL6FTNy9w/TtkFzYfvSGI/AAAAAAAAA5Q/skyR3oKR79k/s1600/Tobias_Boehm_002_small.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-HRiL6FTNy9w/TtkFzYfvSGI/AAAAAAAAA5Q/skyR3oKR79k/s1600/Tobias_Boehm_002_small.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;How should code search work?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;We all know that learning an API is hard. But we do it day by day by day... &amp;nbsp;When learning a new framework we often ask things like &lt;i&gt;"Which classes should I extend?"&lt;/i&gt;, &lt;i&gt;"Which methods should I invoke on this object?"&lt;/i&gt;, &lt;i&gt;"How can I create an instance of this particular type?", "How does the code of others look like that is similar to mine?".&lt;/i&gt; Hopefully, some documentation is available that answers these kinds of questions. But how many frameworks do you know that have such excellent documentation? If you know a few: How many do you know which have not?&lt;br /&gt;&lt;br /&gt;Let's assume that there is some documentation somewhere. Who wants to work through heaps of documents just to know how obtain an instance of the famous &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;IStatusLineManager&lt;/span&gt;? In my opinion, the best possible documentation already exists. It's existing and tested code which is available in masses in code repositories where these API are actually used, the classes are extended, the methods called and the objects actually instantiated. &lt;b&gt;The code is there, it just has to be found!&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;But searching for source code is still a tedious task. Although many search engines exists and even Google has a product targeted at code search - they are not too useful in certain situations. First it seems most of them treat source code the way web search engines treat websites they index - as plain text. While that might make sense for some code search use cases - it is not enough for most others. Moreover they are too generic to be useful. Most code search engines seem to identify the programming language the code is written in, yet they are not using the language-specific semantic that lies underneath.&lt;br /&gt;&lt;br /&gt;And then there is "&lt;i&gt;availability"&lt;/i&gt;. For a developer to be able to search for source code this source code has to be indexed by the search engine. So the code available is always restricted to open source code publicly available in the web with all personal and company repositories being unused.&lt;br /&gt;&lt;br /&gt;Lastly, there is no IDE integration. What that means is that every time we want to issue a query we are shifting focus away from our IDE to a website.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In this blog post, I describe may plans on how to implement a Code Search engine with Apache Lucene. I'll go through a set of sample queries and explain what get's indexed and how developers can query the index to solve common day-to-day tasks.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you are interested in code search and are maybe seeking for good alternative to (almost closed) Google Code Search or want to build your own code search engine for your own company - please continue reading and don't hesitate to ask questions about it here or in the &lt;a href="http://eclipse.org/forums/eclipse.recommenders"&gt;Code Recommenders forum&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;Query&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;As said above, search query capabilities of todays code search engines are somewhat limited. Code Recommenders might come to rescue here. The heart of this prototype currently in development is a novel query language. This query language must be very simple to use. We want to create queries very easily. Yet it must be so powerful that we can express all the requests we might have to a code base. What might these requests be? Before we dig into the search criteria let's take a step back and think about what it is we would like to find. Are we interested in source files? Probably not. Java developers don't think in source files. At the bottom level we think in classes, methods and maybe even smaller blocks of code. Then these are probably the units of code we want to find. Now what questions might a developer have? She might for example want to find methods that have a certain name. The query will look like the following.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;METHODS WHERE Name IS "set.*"&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;This query will return those methods with a name starting with "set". Let's say we are interested in methods that add something to a&amp;nbsp;&lt;i&gt;java.util.Set&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;METHODS WHERE CalledMethods CONTAINS {java.util.Set.add}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;By combining multiple search criteria and using negation the developer is able to refine the query to get exactly what she needs.&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;METHODS WHERE ReturnType IS {org.eclipse.jface.action.IStatusLineManager}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; AND +IsPublic AND !IsStatic&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;A Query that will search for public, non-static methods that should return an instance of &lt;i&gt;IStatusLineManager&lt;/i&gt;. When using the prefix "+" and "!" the developer can explicitly mark criteria as mandatory or non-occurring. If we omit the prefix the condition is optional and the results we get might not meet the criteria. In this particular example we would want the query to look like this.&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;METHODS WHERE ReturnType IS {+org.eclipse.jface.action.IStatusLineManager}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; AND +IsPublic AND !IsStatic&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;This way we can be sure that the methods we find will return&amp;nbsp;&lt;i&gt;IStatusLineManager&lt;/i&gt;. What if we - for whatever reason - are interested in public methods that use an&amp;nbsp;&lt;i&gt;IStatusLineManager&lt;/i&gt;, are annotated with &lt;i&gt;SuppressWarnings &lt;/i&gt;and that should be constructors? Here's the query for that.&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;METHODS WHERE IsConstructor&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; AND UsedTypes CONTAINS {+org.eclipse.jface.action.IStatusLineManager}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; AND +IsPublic&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; AND ANNOTATED WITH {+java.lang.SuppressWarnings}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;This is really just supposed to be an example of how detailed we can get. There are many more criteria available and they are not bound to just methods. Many of the criteria applicable to methods can be applied to classes too. We might as well search for classes with a certain name.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;CLASSES WHERE Name IS "set.*"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;With a more complex query for example we search for abstract classes that implement the interface &lt;i&gt;ASTVisitor &lt;/i&gt;preferably using the type &lt;i&gt;java.util.Set&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;CLASSES WHERE +IsAbstract&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; AND ImplementedInterfaces CONTAINS {+org.eclipse.jdt.core.dom.ASTVisitor}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; AND UsedTypes CONTAINS {java.util.Set}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Or how about classes that contain deprecated methods?&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;CLASSES WHERE&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; CONTAINS METHOD WERE ANNOTATED WITH {java.lang.Deprecated}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The list goes on. And we don't stop at classes and methods. Sometimes we would like to bring in more context information. For instance a typical question a developer sometimes asks is how other developers handled a certain exception. Did they close the stream afterwards or did others just log the exception?&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;CATCHBLOCKS WHERE CaughtType IS {+java.io.IOException}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;What we can express here is a question many of us ask themselves over and over again. What have other developers done in my situation?&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;Repositories&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;The quality of the results is dependent mainly on the quality and the volume of the search index. The public index will consist of many open source types (&lt;a href="http://eclipse.org/recommenders/documentation/completion/"&gt;http://eclipse.org/recommenders/documentation/completion/&lt;/a&gt;) that we can offer code examples from. A dilemma arises when we think about precious code that lies dormant in hundreds of types and thousands of methods in the developer's company repository. These sources are most likely not open source and hence can't be put into a public index. The solution is a private search index that is build and stored inside the company infrastructure. The query can then be performed on the public as well as the local search index.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;IDE integration&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Queries of this kind can then already be used easily from inside the Eclipse IDE. The editor assists with things such as the query grammar and resolving of types. The goal is to make it as efficient as possible to express a query that reflects what the developer searches for. While a query of this kind can easily be created by hand its full potential is still not exploited. In many use cases where the developer would like to find code examples, the query will consist of information that reflect the user's current code context. That might be the interfaces the current class implements, the overridden method we are in and the uninitialized type that we desperately need an instance for. Most of this information the query consists of are usually ones that the IDE could provide. So why shouldn't it? By abstracting further and bundling the search into a few easy to understand search types the query complexity is now hidden underneath plain proposals in the Eclipse content assist popup window. Let's consider the following situation.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;IStatusLineManager slm = null;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;|&amp;lt;^Space&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;We just declared an IStatusLineManager and set it to null. One of the proposal would probably be a search for code that initializes this type in some way and might find code that for example creates an actual instance of IStatusLineManager or just a method that returns it. Do we now copy the whole method or even the whole class? Or do we just reuse an already existing method that we now knows exists? It's up to us the developer how to use the code examples that are found.&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;How does that sound. Like something that could make your life easier? Let us know.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1479535086136999079-8523167224698796811?l=code-recommenders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/8523167224698796811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-recommenders.blogspot.com/2011/12/how-should-code-search-work.html#comment-form' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/8523167224698796811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/8523167224698796811'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/2011/12/how-should-code-search-work.html' title='How should code search work?'/><author><name>Tobias Boehm</name><uri>http://www.blogger.com/profile/16566717488907771051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-oqRRw5WDCNw/Ttj5pXgzqzI/AAAAAAAAANg/KA2ZWjowyp8/s1600/photo.jpg%253Fsz%253D200'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-HRiL6FTNy9w/TtkFzYfvSGI/AAAAAAAAA5Q/skyR3oKR79k/s72-c/Tobias_Boehm_002_small.png' height='72' width='72'/><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1479535086136999079.post-5084478914520686707</id><published>2011-11-17T14:06:00.001+01:00</published><updated>2011-11-17T14:38:03.858+01:00</updated><title type='text'>Do you still read source code to learn how to use an API?</title><content type='html'>We all agree that learning new APIs is a challenging and time consuming task. However, we can't get around this, right? It is the way how software development works nowadays. But it's also part of the fun we have when creating new software and make it work.  However, sometimes we wish we would be little more efficient - especially when digging into the source code written by others to learn how to use an API, or when using code search to find code examples.&lt;br /&gt;&lt;br /&gt;Apparently, reading source code is valuable. But have you ever though about how the knowledge how others used an API could be leveraged to improve IDE services such as Code Completion, Code Search, or even API documentation?&lt;br /&gt;&lt;br /&gt;In early 2011, the Eclipse Code Recommenders project was created to tread new paths on how the next generation of IDEs could enable developers to share knowledge with each other over their IDEs and to improve tools like code completion, code-search, and even to enrich existing documentation by leveraging the knowledge of the masses.&lt;br /&gt;&lt;br /&gt;Since it's inception, the project made an amazing progress. Many tools have been developed since such as:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Intelligent (context-aware) Code Completion,&lt;/li&gt;&lt;li&gt;Dynamic (mined) Code Templates,&lt;/li&gt;&lt;li&gt;Code snippet search engines,&lt;/li&gt;&lt;li&gt;Extended (mined) Documentation platform,&lt;/li&gt;&lt;/ul&gt;and a lot more. 9 Months later, we published v0.4 of Code Recommenders and presented it at &lt;a href="http://www.eclipsecon.org/europe2011/sessions/eclipse-code-recommenders-code-completion-steroids"&gt;EclipseCon Europe&lt;/a&gt;. If you haven't heard about Code Recommenders yet, it's time to spent a few minutes now to learn how IDEs will change your way of developing software in the next year:&lt;br /&gt;&lt;div style="background-color: white; margin-bottom: 1em; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="text-align: center;"&gt;&lt;iframe allowfullscreen="" frameborder="0" height="372" src="http://blip.tv/play/hdlkgt3lagI.html" style="color: black; font-family: Times; font-size: medium; line-height: normal;" width="480"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div style="color: #2e2f2d; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/div&gt;The  video is made available by&amp;nbsp;&lt;a href="http://www.fosslc.org/drupal/content/eclipse-code-recommenders-code-completion-steroids"&gt;FOSSLC&lt;/a&gt;. Thanks to FOSSLC and FOSSLCde to make this public available.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Talk Abstract:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This talk introduces Code Recommenders’ tool suite, demonstrates the potential to support you and your team on your daily work, and shows in a live session how to setup your own knowledge base for your own products by adding support for Google’s Android to Code Recommenders. The talk provides you a substantial understanding of how Code Recommenders tools work, which knowledge gets extracted from code and how recommendations for code search, code completion and other tools are made.&lt;br /&gt;&lt;br /&gt;This talk targets on developers, team leads, and CTOs. It aims to familiarize you with the ideas of Code Recommenders, to interactively demonstrate the current state-of-the-art, and provides perspectives how to leverage the knowledge of the masses for your products in your own company.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you want to learn more about Eclipse Code Recommenders, visit &lt;a href="http://eclipse.org/recommenders"&gt;http://eclipse.org/recommenders&lt;/a&gt;.&lt;br /&gt;If you have any comments about Code Recommenders and its vision of IDE 2.0, let me know via &lt;a href="https://twitter.com/#!/MarcelBruch"&gt;twitter&lt;/a&gt;, &lt;a href="https://plus.google.com/100908752439953740476/"&gt;google plus&lt;/a&gt;, or the project's&amp;nbsp;&lt;a href="http://www.eclipse.org/forums/eclipse.recommenders"&gt;forum&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Best,&lt;br /&gt;Marcel&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1479535086136999079-5084478914520686707?l=code-recommenders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/5084478914520686707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-recommenders.blogspot.com/2011/11/do-you-still-read-source-code-to-learn.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/5084478914520686707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/5084478914520686707'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/2011/11/do-you-still-read-source-code-to-learn.html' title='Do you still read source code to learn how to use an API?'/><author><name>Marcel Bruch</name><uri>https://profiles.google.com/100908752439953740476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-i2lFK0vZDP8/AAAAAAAAAAI/AAAAAAAAAwA/IZJzvq1KhBk/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1479535086136999079.post-6075952198824755143</id><published>2011-10-31T09:02:00.003+01:00</published><updated>2011-10-31T09:13:29.462+01:00</updated><title type='text'>It's even not your father's IDE...</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/-p7ODl0vr1EU/Tq5YmQu3LZI/AAAAAAAAA4U/43WFW-AOo_I/s1600/130x100_speaking.gif" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-p7ODl0vr1EU/Tq5YmQu3LZI/AAAAAAAAA4U/43WFW-AOo_I/s1600/130x100_speaking.gif" /&gt;&lt;/a&gt;As Sven outlined in &lt;a href="http://blog.efftinge.de/2011/10/this-is-not-your-fathers-java.html"&gt;his last post&lt;/a&gt;, much &lt;b&gt;has changed&lt;/b&gt; since Java's inception somewhere in the mid 90s and it's worth looking on how things are &lt;b&gt;going to change&lt;/b&gt; in the future. &amp;nbsp;I'm looking forward to this session - even more&amp;nbsp;after Sven's announcement (&lt;a href="http://www.infoq.com/presentations/Java-Puzzlers"&gt;Java Puzzlers&lt;/a&gt;). I'm now pretty curios how this session will look like. I guess, it will be fun!&lt;br /&gt;&lt;br /&gt;Regarding the general topic: programming languages have been subject to change in the past years, each claiming to improve developer productivity. &amp;nbsp;But as advances in programming language&amp;nbsp;improve developer productivity, so do advances in todays IDEs. And there are massive changes coming to your favorite IDE!&lt;br /&gt;&lt;br /&gt;In &lt;a href="http://www.eclipsecon.org/sessions/eclipse-code-recommenders-code-completion-steroids"&gt;my session&lt;/a&gt;&amp;nbsp;at EclipseCon on Friday morning, I'll demonstrate how leveraging &lt;b&gt;your&lt;/b&gt; knowledge about how to use an API helps &lt;b&gt;others&lt;/b&gt; to quickly learn how to use these APIs correctly - or the other way round: how other's knowledge help you to get productive in minutes.&lt;br /&gt;&lt;br /&gt;You should attend this session if:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;you have to learn about new/unfamiliar APIs often.&lt;/li&gt;&lt;li&gt;your team frequently gets new team members that have to learn how to use your (internal) APIs.&lt;/li&gt;&lt;li&gt;you have customers that have to use your APIs and you wanna support them in a novel, pioneering way.&lt;/li&gt;&lt;li&gt;you wanna know how leveraging source code works to improve code completion, API documentation, code search, and many more tools.&lt;/li&gt;&lt;li&gt;&lt;b&gt;you wanna see &lt;a href="http://eclipse.org/recommenders/"&gt;Code Recommenders&lt;/a&gt; in Action!&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;In 50 minutes, I'll take you through Code Recommenders tool suite by demoing its&amp;nbsp;&lt;a href="http://code-recommenders.blogspot.com/2010/05/its-all-about-intelligent-code.html"&gt;intelligent code completion&lt;/a&gt;, &lt;a href="http://code-recommenders.blogspot.com/2010/12/how-do-i-get-instance-of.html"&gt;chain completion&lt;/a&gt;, &lt;a href="http://code-recommenders.blogspot.com/2011/08/eclipse-subwords-completion-1-here-you.html"&gt;subwords completion&lt;/a&gt;,&amp;nbsp;&amp;nbsp;&lt;a href="http://snipmatch.com/"&gt;crowd-sourced template completion&lt;/a&gt;,&amp;nbsp;&lt;a href="http://code-recommenders.blogspot.com/2011/08/extdocs-extended-documentation-platform.html"&gt;extended javadoc platform&lt;/a&gt;,&amp;nbsp;and &lt;a href="http://code-recommenders.blogspot.com/2010/07/why-is-google-codesearch-not-google-for.html"&gt;code search&lt;/a&gt;, and explain which information is leveraged to make these tools work.&amp;nbsp;At the end of the session, I'll demonstrate how &lt;b&gt;you&lt;/b&gt; can use all these tools for your own development teams or customers to improve their productivity by adding support for &lt;a href="http://code-recommenders.blogspot.com/2011/04/say-hello-android.html"&gt;Google Android&lt;/a&gt; to Code Recommenders - live.&lt;br /&gt;&lt;br /&gt;This session will be packed with latest features and tools which you haven't seen in any other IDE before - nor your father :)&amp;nbsp;Looking forward to see you on&lt;a href="http://www.eclipsecon.org/sessions/eclipse-code-recommenders-code-completion-steroids"&gt; Friday, 10:30 in the Theater: "Code Recommenders: Code Completion on Steroids&lt;/a&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/1479535086136999079-6075952198824755143?l=code-recommenders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/6075952198824755143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-recommenders.blogspot.com/2011/10/its-even-not-your-fathers-ide.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/6075952198824755143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/6075952198824755143'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/2011/10/its-even-not-your-fathers-ide.html' title='It&apos;s even not your father&apos;s IDE...'/><author><name>Marcel Bruch</name><uri>https://profiles.google.com/100908752439953740476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-i2lFK0vZDP8/AAAAAAAAAAI/AAAAAAAAAwA/IZJzvq1KhBk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-p7ODl0vr1EU/Tq5YmQu3LZI/AAAAAAAAA4U/43WFW-AOo_I/s72-c/130x100_speaking.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1479535086136999079.post-8006956513392917853</id><published>2011-08-26T16:20:00.001+02:00</published><updated>2011-08-26T18:06:41.602+02:00</updated><title type='text'>Eclipse Code Recommenders 0.3!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-5XNnPhfX77k/TVqEEv4WYrI/AAAAAAAAAo8/16oqQy5ia_8/s1600/recommenders.logo.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="238" src="http://1.bp.blogspot.com/-5XNnPhfX77k/TVqEEv4WYrI/AAAAAAAAAo8/16oqQy5ia_8/s640/recommenders.logo.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;We've been a bit quiet for a while, right?&amp;nbsp;Yes, that's true, but today we announced quite a lot new stuff. At least too much stuff for one blog post, so we split things up ;-)&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;So what has changed?&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Model store for recommendation models:&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;For 0.3 we completely rewrote the way how we manage and deliver our models for code completion. In a nutshell, the models are no longer shipped on installation but are downloaded automatically from the web as needed. &amp;nbsp;This reduces download size to a minimum and enables services such as automated model updates, manually generated models and many things more as you shall see below.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Support for version ranges:&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Assuming that the way we have to use the same API will not change on every build but only on major version changes (3.6--&amp;gt;3.7), we now generate models that match multiple versions of a framework. For example, we generate a single model for org.eclipse.jface matching versions for 3.6.x and another one for all 3.7.x releases.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-4N-F8a03MWg/TlfEhufMRvI/AAAAAAAAA0M/fzLBylY3Bg4/s1600/Screen+shot+2011-08-26+at+18.05.46.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="451" src="http://1.bp.blogspot.com/-4N-F8a03MWg/TlfEhufMRvI/AAAAAAAAA0M/fzLBylY3Bg4/s640/Screen+shot+2011-08-26+at+18.05.46.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Automated model updates:&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The current drop will contain all you need to automatically download models matching your used framework libraries. Code Recommenders just computes the fingerprint of your library, and extracts the library-name and -version for OSGI, Android, and Maven-build files and sends this to the server to find the appropriate model.&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Community-sourcing and custom model support:&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;One of the long-term goals of Code Recommenders is to enable every developer to build his own models for his libraries.&amp;nbsp;Unfortunately, this feature is not ready for 0.3 yet. However, there is a student project that aims to add this feature to Code Recommenders and it may be ready for 0.4. If you are keen to build your own models from your own Eclipse Workspace, please &lt;a href="http://wiki.eclipse.org/Recommenders/TechTalk"&gt;check out this page&lt;/a&gt; for a (pretty rough) description how to get started. There is also a link to 90 minutes video (in German) available that shows how we added support for Android live to a local Code Recommenders installation. If you'd like to build your own models, follow the instructions there. If you got stuck, just send a comment to the &lt;a href="http://eclipse.org/forums/eclipse.recommenders"&gt;forum&lt;/a&gt;. We'll improve on the scrips and documentation as soon as you request it. Of course: Your assistance in generating models and improving Code Recommenders community-sourcing approach is greatly appreciated!&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;What else has changed?&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-mUGXmX2exxM/TleJq2f0d_I/AAAAAAAAAHg/grLyxh2qUNo/s1600/update-site.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="350" src="http://3.bp.blogspot.com/-mUGXmX2exxM/TleJq2f0d_I/AAAAAAAAAHg/grLyxh2qUNo/s640/update-site.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Let's step over to the other things that changed:&lt;/b&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://code-recommenders.blogspot.com/2010/07/why-is-google-codesearch-not-google-for.html"&gt;Codesearch&lt;/a&gt; gets two new friends and is not alone in the sandbox category anymore. One of the two new experimental projects is code completion based on &lt;a href="http://code-recommenders.blogspot.com/2011/08/eclipse-subwords-completion-1-here-you.html"&gt;subwords matching&lt;/a&gt; and the other is &lt;a href="http://code-recommenders.blogspot.com/2011/08/extdocs-extended-documentation-platform.html"&gt;ExtDoc&lt;/a&gt;, an integrated documentation platform implemented by a student as &lt;i&gt;google summer of code&lt;/i&gt; project. Both are described in a separate blog post: Enjoy reading!&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Get the new stuff&lt;/b&gt;&amp;nbsp;:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;All plug-ins are available form the &lt;a href="http://marketplace.eclipse.org/content/eclipse-code-recommenders"&gt;Eclipse Marketplace&lt;/a&gt; and our DEV&amp;nbsp;&lt;a href="http://download.eclipse.org/recommenders/updates/dev/"&gt;update-site &lt;/a&gt;&amp;nbsp;-&amp;nbsp;and don't hesitate to tell us what you think about it. We'd like to get your feedback!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1479535086136999079-8006956513392917853?l=code-recommenders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/8006956513392917853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-recommenders.blogspot.com/2011/08/eclipse-code-recommenders-03.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/8006956513392917853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/8006956513392917853'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/2011/08/eclipse-code-recommenders-03.html' title='Eclipse Code Recommenders 0.3!'/><author><name>Johannes Lerch</name><uri>http://www.blogger.com/profile/17363604115951892855</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-5XNnPhfX77k/TVqEEv4WYrI/AAAAAAAAAo8/16oqQy5ia_8/s72-c/recommenders.logo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1479535086136999079.post-5089829522184057366</id><published>2011-08-26T15:38:00.000+02:00</published><updated>2011-08-26T15:38:00.412+02:00</updated><title type='text'>Extdocs: Extended Documentation Platform for crowd-sourced, mined, and other documentation!</title><content type='html'>&lt;div&gt;Writing documentation is one of those tasks a programmer is typically not very keen about.&amp;nbsp;Good and comprehensive documentation, &amp;nbsp;however, is crucial for the success of open source software. But creating such documentation takes time and energy, is boring and has almost no immediate rewards. Consequently, documentation is (too) often incomplete - or even worse: outdated (meaning&amp;nbsp;&lt;b&gt;plain wrong&lt;/b&gt;) as this example shows:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-w8KbrIcjZa8/TleLmkXyUhI/AAAAAAAAAz8/NmT5KREgNsI/s1600/documentation01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="452" src="http://4.bp.blogspot.com/-w8KbrIcjZa8/TleLmkXyUhI/AAAAAAAAAz8/NmT5KREgNsI/s640/documentation01.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;I can't say what's more annoying: Having &lt;b&gt;outdated and wrong documentation&lt;/b&gt; or having &lt;b&gt;no documentation at all&lt;/b&gt;...&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Some guys might postulate that well written (aka clean) code doesn't need any documentation - and they may be right. Others may argue that before documentation gets outdated it should be generated from code - since "the code is the design" this sounds reasonable too.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Based on this observation (and maybe driven by some project manager) a resourceful programmer came up with a tool that generates &lt;strike&gt;high-quality&lt;/strike&gt;&amp;nbsp;API documentation directly from code:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-VWJJxvx0i7I/TleMhuizYQI/AAAAAAAAA0A/mbjbPDd53TE/s1600/documentation02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="452" src="http://2.bp.blogspot.com/-VWJJxvx0i7I/TleMhuizYQI/AAAAAAAAA0A/mbjbPDd53TE/s640/documentation02.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Impressive, right? I especially like its ability to take a statement &amp;nbsp;such as "throws IllegalArgumentException" and create the JavaDoc comment "@throws the illegal argument exception"!&amp;nbsp;&amp;nbsp;Awesome. (OMG...)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;No, seriously. Generating documentation using tools like &lt;a href="http://jautodoc.sourceforge.net/"&gt;JAutodoc&lt;/a&gt;&amp;nbsp;at most pleases our team lead since they improve the documentation ratio - from a programmer point of view this documentation is pretty useless.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;OK, but what can Code Recommenders do about it? Can we improve it?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Yes. To some extent. In an &lt;a href="http://code-recommenders.blogspot.com/2010/03/problem-of-incomplete-javadocs.html"&gt;earlier post&lt;/a&gt;&amp;nbsp;we described the idea of how&amp;nbsp;example code that uses a framework's API could be leveraged to create valuable usage-driven documentation from, such as subclassing directives, which self-calls to execute, displaying code snippets showing common usages etc. If you haven't read this post before, you should reserve a few extra minutes to get the idea of mining documentation from example code.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However, mined documentation extracted from example applications is not the only information you want to leverage when using unfamiliar APIs. Often you refer to other resources on the web such as &lt;a href="http://vogella.de/"&gt;tutorial sites,&lt;/a&gt;&amp;nbsp;&lt;a href="http://www.google.com/codesearch"&gt;codesearch engines&lt;/a&gt;, or &lt;a href="https://gist.github.com/"&gt;code snippet repositories&lt;/a&gt;. So what you rather would like to have is this: A documentation platform, that tightly integrates various information into your IDE:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-a315iZSDmu8/TleVP0YR2QI/AAAAAAAAA0E/WLQDWyykUUU/s1600/documentation03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="452" src="http://4.bp.blogspot.com/-a315iZSDmu8/TleVP0YR2QI/AAAAAAAAA0E/WLQDWyykUUU/s640/documentation03.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Something like this:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-_HBGIfpVJow/TleVwPifM0I/AAAAAAAAA0I/c_v4H-__BVQ/s1600/documentation04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="452" src="http://3.bp.blogspot.com/-_HBGIfpVJow/TleVwPifM0I/AAAAAAAAA0I/c_v4H-__BVQ/s640/documentation04.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;I'm extremely glad to announce that a first draft of this extended documentation platform is ready for download from the &lt;a href="http://marketplace.eclipse.org/content/eclipse-code-recommenders"&gt;Eclipse Markeplace&lt;/a&gt;. This platform has been developed by &lt;a href="http://stefanhenss.com/"&gt;Stefan Henss&lt;/a&gt; during this year's&amp;nbsp;&lt;a href="http://code.google.com/soc/"&gt;Google Summer of Code&lt;/a&gt;. An outstanding work which I would like to present with this post.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The text below is copy of Stefan's final Project summary which I cross-post here:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;&lt;b&gt;Stefan Henss: Summing Up Eclipse ExtDoc (GSOC 2011)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This year I’ve participated in &lt;a href="http://code.google.com/soc/"&gt;Google Summer of Code&lt;/a&gt; by contributing to &lt;a href="http://www.eclipse.org/recommenders/"&gt;Eclipse Code Recommenders&lt;/a&gt;. The goal of Code Recommenders is to develop various tools which analyze code frameworks and their usage to mine information useful for code documentation and to increase productivity. For example, it compares the user’s code with code from various sources and makes statistical assumptions on which methods should be called next. ExtDoc was created to compile all available information into a handy documentation format integrated in Eclipse.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;The Idea&lt;/span&gt;&lt;br /&gt;ExtDoc’s approach is to adopt the way Eclipse displays Javadoc, i.e. in a view or when hovering code elements, and to create a framework which allows to contribute any information to similar displays. For instance, Code Recommenders holds statistical information of many kinds for many popular frameworks, but currently lacks a way of displaying all in one place. In order to have information displayed with ExtDoc, each information contributor simply has to implement a “provider” through which he is asked to submit his data for the current user selection. ExtDoc then puts together all providers and allows the user to navigate through the information in multiple spots.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;The ExtDoc View&lt;/span&gt;&lt;br /&gt;Just like the console or the Javadoc view, the ExtDoc view can be located somewhere around the main editor and reacts to any selection in the editor. In the following, all available providers are depicted as they appear in the ExtDoc view. Additional to the providers’ contents, which are displayed as one scrollable “document” on the right, there is a table on the left indicating all available providers and their status. For example, providers are grayed out if they have nothing available for the current selection or are disabled by the user.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://stefanhenss.com/wp-content/uploads/2011/08/drag.png"&gt;&lt;img height="215" src="http://stefanhenss.com/wp-content/uploads/2011/08/drag.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The table also offers the possibility to change the provider order by drag and drop and to disable/re-enable providers perminately. Finally, on top of the table the selection’s location type is displayed (e.g. “field declaration”), since some providers distinct between up to 9 location types. For example, a user might find different information useful when selecting a type in an “extends” statement than in a method body. Therefore the user’s selection of providers is also location-sensitive.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Currently available Providers&lt;/span&gt;&lt;br /&gt;The method calls provider offers information on which methods should typically be called for the selected Java element. For example, when selecting SWT’s Text type, it displays the most frequently called methods. When selecting a local variable of type Text, it even takes into consideration which methods have already been called on the variable, which usually influences the probabilities of further method calls.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://stefanhenss.com/wp-content/uploads/2011/08/calls.png"&gt;&lt;img height="214" src="http://stefanhenss.com/wp-content/uploads/2011/08/calls.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sometimes even whole blocks frequently occur in different source codes, e.g. the configuration of reoccurring elements. As a result, not only single method calls but also whole code examples are proposed by ExtDoc. Note: this provider is currently in development and only displays information for a few selected elements.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://stefanhenss.com/wp-content/uploads/2011/08/examples.png"&gt;&lt;img height="214" src="http://stefanhenss.com/wp-content/uploads/2011/08/examples.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The usage of a framework typically involves extending provided interfaces, abstract classes or even concrete classes. Not seldom, one is expected to override already implemented methods in order to achieve certain tasks and therefore has to understand the superclass(es) code or rely on a comprehensive documentation. Code Recommenders computes which methods of a class typically are overriden, so-called subclassing directives, which are also displayed in ExtDoc. When selecting an overriden method, ExtDoc even displays which of the superclass’ methods are typically called from the method implementation, e.g. for configuration purposes.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://stefanhenss.com/wp-content/uploads/2011/08/subclassing.png"&gt;&lt;img height="213" src="http://stefanhenss.com/wp-content/uploads/2011/08/subclassing.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Often framework objects are such comprehensive that the set of overriden methods differs between tasks, i.e. one method might be required to be specified in one scenario, but of no interest at all in the other. Therefore also subclassing patterns are mined, as depicted in the following screenshot.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://stefanhenss.com/wp-content/uploads/2011/08/subclassingpatterns.png"&gt;&lt;img height="213" src="http://stefanhenss.com/wp-content/uploads/2011/08/subclassingpatterns.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Finally, the social bookmarks provider allows the users to share web resources. For example, when one experiences difficulties with an API element, he might submit a solution he found on the web as a reference for all other users that might come along this element and have similar issues. In order to filter the most relevant resources, the community is able to rate each link.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://stefanhenss.com/wp-content/uploads/2011/08/bookmarks.png"&gt;&lt;img height="213" src="http://stefanhenss.com/wp-content/uploads/2011/08/bookmarks.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Community Feedback&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As depicted in all screenshots, all current providers allow users to rate their content through a 5-star system, either the displayed element information as a whole, or single items such as a specific patterns. Furthermore, there is a standard ExtDoc widget which allows commenting the provider content. The following screenshot depicts the expanded comments section underneath the subclassing patterns provider.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://stefanhenss.com/wp-content/uploads/2011/08/comments.png"&gt;&lt;img height="213" src="http://stefanhenss.com/wp-content/uploads/2011/08/comments.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The ExtDoc community widgets allow both, communication between the users, e.g. additional information to the displayed data, and feedback to the provider author.&lt;br /&gt;Further ExtDoc Locations&lt;br /&gt;&lt;br /&gt;All above screenshots displayed the providers as they appear in the ExtDoc view. However, similar display is also available in two additional locations in which users typically look for documentation. First, the Javadoc pop-up, which is displayed when hovering an element in the editor, is replaced with an ExtDoc pop-up. It contains the same providers “document” as the view does and an additional toolbar underneath, which allows jumping/auto-scrolling to the specific provider. Now, there is no more Javadoc available!? Don’t worry, ExtDoc also contains a provider displaying the traditional Javadoc, as depicted in the very first screenshot :-)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://stefanhenss.com/wp-content/uploads/2011/08/hover.png"&gt;&lt;img height="249" src="http://stefanhenss.com/wp-content/uploads/2011/08/hover.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The third location for ExtDoc is the documentation of elements selected in the code assistant pop-up. It offers the same features as the hover pop-up does, as shown below:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://stefanhenss.com/wp-content/uploads/2011/08/completion.png"&gt;&lt;img height="232" src="http://stefanhenss.com/wp-content/uploads/2011/08/completion.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Obtaining ExtDoc&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strike&gt;Since ExtDoc, among some other Code Recommenders features, is in the testing phase for an upcoming drop, you have to access it either through the head update site or the ExtDoc update site. Both links are given below:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eclipse.org/recommenders/download/"&gt;http://www.eclipse.org/recommenders/download/&lt;/a&gt;&lt;/strike&gt;&lt;strike&gt;&lt;a href="http://vandyk.st.informatik.tu-darmstadt.de/updates/extdoc/"&gt;http://vandyk.st.informatik.tu-darmstadt.de/updates/extdoc/&lt;/a&gt;&lt;/strike&gt;&lt;/div&gt;&lt;div&gt;&lt;strike&gt;&lt;br /&gt;&lt;/strike&gt;&lt;/div&gt;&lt;div&gt;[It's here: Install it directly from the &lt;a href="http://marketplace.eclipse.org/content/eclipse-code-recommenders"&gt;Eclipse Marketplace&lt;/a&gt;!]&lt;/div&gt;&lt;div&gt;&lt;strike&gt;&lt;br /&gt;&lt;/strike&gt;Feedback on the current state as well as suggestions for further development are much welcome :-)&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;&lt;b&gt;Disclaimer ;-)&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Code Recommenders' Extended Documentation Platform is experimental - and so is the mined documentation shown for various Eclipse APIs. For 0.4 we are planning to add a community sourcing approach that enables us to support arbitrary frameworks.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Whatever comments you have (ranging from like to dislike), let us know about it. Here, in the forum or via &lt;a href="https://twitter.com/#%21/MarcelBruch"&gt;twitter&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Best,&lt;/div&gt;&lt;div&gt;Marcel, Stefan and Johannes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1479535086136999079-5089829522184057366?l=code-recommenders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/5089829522184057366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-recommenders.blogspot.com/2011/08/extdocs-extended-documentation-platform.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/5089829522184057366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/5089829522184057366'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/2011/08/extdocs-extended-documentation-platform.html' title='Extdocs: Extended Documentation Platform for crowd-sourced, mined, and other documentation!'/><author><name>Marcel Bruch</name><uri>https://profiles.google.com/100908752439953740476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-i2lFK0vZDP8/AAAAAAAAAAI/AAAAAAAAAwA/IZJzvq1KhBk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-w8KbrIcjZa8/TleLmkXyUhI/AAAAAAAAAz8/NmT5KREgNsI/s72-c/documentation01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1479535086136999079.post-8206561796220051139</id><published>2011-08-26T15:35:00.000+02:00</published><updated>2011-08-26T15:35:13.791+02:00</updated><title type='text'>Eclipse Clean Code Method Sorter: Try #1</title><content type='html'>&lt;br /&gt;A few months ago, a colleague and I had a hot discussion on good styles of sorting methods in source code, and (of course) we also discussed the advantages of the&amp;nbsp;newspaper-style as proposed by Robert C. Martin:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Have you ever chased your tail through a class, hopping from one function to the next, scrolling up and down the source file, trying to divine how the functions relate and operate, only to get lost in a rat’s nest of confusion? Have you ever hunted up the chain of inheritance for the definition of a variable or function? This is frustrating because you are trying to understand what the system does, but you are spending your time and mental energy on trying to locate and remember where the pieces are.&lt;br /&gt;Concepts that are closely related should be kept vertically close to each other. We want to avoid forcing our readers to hop around through our source files and classes.&lt;/i&gt;&lt;/blockquote&gt;&lt;i&gt;&lt;/i&gt;&lt;br /&gt;&lt;div style="text-align: right;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;i&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: right;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;i&gt;&lt;b&gt;Robert C. Martin "Clean Code" pp. 80&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;Unfortunately, Eclipse doesn't support sorting members in "clean-code style". Thus, we decided to give away this idea to a pair of students as an Eclipse hand's-on training. This post is a follow-up of my &lt;a href="http://code-recommenders.blogspot.com/2011/04/clean-code-method-sorter-for-eclipse.html"&gt;post in May&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;To get you started,&amp;nbsp;here is a quick refresh of the problem:&lt;br /&gt;&lt;br /&gt;Typically, there are two types of code ordering. Alphabetically (+ modifiers) or completely hand-crafted (which in many cases means "without any particular order"). But is it that complicated to let the IDE sort a class' members for you? Reducing the need to hop from top to the bottom of the file and thus minimizing scrolling and confusion?&lt;br /&gt;&lt;br /&gt;The slide below gives you an example of how a well-sorted piece of code might look like. As you see the number of hops required to read the whole code is minimal since there is a clear ordering between the code:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-Pfz2UVb6G3Q/TbrjXd9MIWI/AAAAAAAAAqw/zjmww8mvImw/s1600/Folie34.jpg"&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/-Pfz2UVb6G3Q/TbrjXd9MIWI/AAAAAAAAAqw/zjmww8mvImw/s1600/Folie34.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-Pfz2UVb6G3Q/TbrjXd9MIWI/AAAAAAAAAqw/zjmww8mvImw/s1600/Folie34.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;How complicated can it be?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;It's amazingly complex :) We had to learn that an optimal solution would be APX-hard to find (did you no that complexity class before? I didn't.) Anyways, we had quite tough discussions with our students and sometimes even bar room fights what might be the best solution. To make that part of the story short, &amp;nbsp;Mateusz and Fabian came up with two solutions. One solution is already available for testing.&lt;br /&gt;&lt;br /&gt;If you like the newspaper-style as described by Robert C. Martin, you should give it a try! Please &lt;a href="http://wiki.eclipse.org/Recommenders/CleanCodeMethodSorter"&gt;check this wiki page&lt;/a&gt; for further information about the plug-in and installation instructions (it's not an official part of Code Recommenders yet).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To track the progress of this feature, add yourself to this&amp;nbsp;&lt;a href="http://www.blogger.com/I%20created%20https://bugs.eclipse.org/bugs/show_bug.cgi?id=344394%20for%20tracking%20purpose."&gt;bugzilla&lt;/a&gt;&amp;nbsp;report.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Best,&lt;br /&gt;Marcel&lt;br /&gt;&lt;br /&gt;&lt;strike&gt;&lt;br /&gt;&lt;/strike&gt;&lt;br /&gt;Stay in touch with Code Recommenders via&amp;nbsp;&lt;a href="http://twitter.com/MarcelBruch"&gt;Twitter&lt;/a&gt;.&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1479535086136999079-8206561796220051139?l=code-recommenders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/8206561796220051139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-recommenders.blogspot.com/2011/08/eclipse-clean-code-method-sorter-try-1.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/8206561796220051139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/8206561796220051139'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/2011/08/eclipse-clean-code-method-sorter-try-1.html' title='Eclipse Clean Code Method Sorter: Try #1'/><author><name>Marcel Bruch</name><uri>https://profiles.google.com/100908752439953740476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-i2lFK0vZDP8/AAAAAAAAAAI/AAAAAAAAAwA/IZJzvq1KhBk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-Pfz2UVb6G3Q/TbrjXd9MIWI/AAAAAAAAAqw/zjmww8mvImw/s72-c/Folie34.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1479535086136999079.post-4104431073215553432</id><published>2011-08-26T14:32:00.000+02:00</published><updated>2011-08-26T14:32:41.386+02:00</updated><title type='text'>Eclipse Subwords Completion #1 - Here You Are:</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;Did you ever&amp;nbsp;type something like &lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;"&gt;text.lay&amp;lt;^Space&amp;gt;&lt;/span&gt;&amp;nbsp;and wished Eclipse would complete it to &lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;"&gt;text.setLayoutData()&lt;/span&gt;? If you do that with Eclipse as it is today you will get all proposals that start with &lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;"&gt;lay*&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; as shown below&lt;/span&gt;:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-b8G7IfOK8cE/ThVHcA5-roI/AAAAAAAAAs4/QofadsoekyA/s1600/Screen+shot+2011-07-07+at+07.42.52.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-b8G7IfOK8cE/ThVHcA5-roI/AAAAAAAAAs4/QofadsoekyA/s1600/Screen+shot+2011-07-07+at+07.42.52.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;No surprise yet. Eclipse has a strict prefix matching that ensures that every completion proposal matches the prefix entered by the user. This limitation is somewhat relaxed by allowing &lt;a href="http://www.ralfebert.de/blog/eclipseide/camel_case/"&gt;CamelCase&lt;/a&gt; matches. For instance if you trigger code completion on&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;"&gt;container.sLD&amp;lt;^Space&amp;gt;&lt;/span&gt;&amp;nbsp;you get all completions that match the upper-case letter as shown here:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Ty3TUuys-HM/ThVJwW0ee-I/AAAAAAAAAtA/CDg4kMgA6Aw/s1600/Screen+shot+2011-07-07+at+07.52.42.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-Ty3TUuys-HM/ThVJwW0ee-I/AAAAAAAAAtA/CDg4kMgA6Aw/s1600/Screen+shot+2011-07-07+at+07.52.42.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;b&gt;CamelCase is excellent.&lt;/b&gt; However, most of the time when using CamelCase matchers we have to carefully think about what CamelCase shortcut would match the proposal we want to see. But given the benefit that I only have to type 3 letters instead of 11 to make the match unique (or by typing&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;"&gt;setl+↓&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;"&gt;)&amp;nbsp;&lt;/span&gt;CamelCase is a real relief.&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;Yet, quite some people aren't happy enough with the way CamelCase abbreviations work. They would like to have a &lt;i&gt;subword&lt;/i&gt; matching rather than a strict prefix or CamelCase matching (see&amp;nbsp;&lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=350000"&gt;[1]&lt;/a&gt;, &lt;a href="http://stackoverflow.com/questions/6369400/autocomplete-in-eclipse-skipping-getters-and-setters"&gt;[2]&lt;/a&gt;, &lt;a href="http://stackoverflow.com/questions/5755869/eclipse-fulltext-autocompletion-for-java"&gt;[3]&lt;/a&gt;&amp;nbsp;for &amp;nbsp;recent discussions on this).&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;b&gt;Subwords is coming to rescue&lt;/b&gt; those. A few weeks ago &lt;a href="http://www.eclipse.org/forums/index.php/t/209269/"&gt;we had been asked&lt;/a&gt;&amp;nbsp;to provide&amp;nbsp;such a completion engine. It didn't seem very complex (at first). Thus I spent a few hours on implementing a first prototype and announced it via twitter and Code Recommenders' newsgroup. &amp;nbsp;I got a lot of feedback and helpful discussions on what expectations users have how such a completion engine should work. Thanks to Maxime Jeanmart, &lt;a href="http://www.vogella.de/"&gt;Lars Vogel&lt;/a&gt;, &lt;a href="http://twitter.com/#%21/deepakazad"&gt;Deepak Azad&lt;/a&gt;, Sascha Vogt, Sebastian Proksch, Gary Fritz, Michael Kutschke and quite a few others for their comments on this prototype.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Today, we are happy to announce the first "official" "drop" of this subwords completion engine!&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Below you find a few screenshots showing the subwords completion engine in action.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-a0nfwY-cmYw/ThVFs9GnnkI/AAAAAAAAAs0/0vES03zgpA8/s1600/Screen+shot+2011-07-07+at+07.29.08.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-a0nfwY-cmYw/ThVFs9GnnkI/AAAAAAAAAs0/0vES03zgpA8/s1600/Screen+shot+2011-07-07+at+07.29.08.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Completion proposals if triggered at container.lay&amp;lt;^Space&amp;gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-CzAmIdj8xHg/ThVFsZ16e7I/AAAAAAAAAsw/gDhInpMagx4/s1600/Screen+shot+2011-07-07+at+07.27.52.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-CzAmIdj8xHg/ThVFsZ16e7I/AAAAAAAAAsw/gDhInpMagx4/s1600/Screen+shot+2011-07-07+at+07.27.52.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Proposal when triggering completion at text.&amp;lt;^Space&amp;gt; and then typing lay with open completion window&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-CEx_W6guIrY/ThVFr5fX3fI/AAAAAAAAAss/yES3obL29yM/s1600/Screen+shot+2011-07-07+at+07.26.48.png" style="margin-left: auto; margin-right: auto;" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Subwords completion matching on variable names&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;You will experience a few more features as you go.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;I would like to thank &lt;a href="http://developpef.blogspot.com/2011/06/welcome-in-eclipse-community.html"&gt;Paul-Emmanuel Faidherbe&lt;/a&gt; who implemented large parts of this system and contributed it to Code Recommenders! &amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;What's coming next?&lt;/span&gt;&lt;br /&gt;Subwords is experimental and needs your feedback. If you like the completion let us (Code Recommenders and the JDT team) know by adding yourself to CC list at&amp;nbsp;&lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=350000"&gt;https://bugs.eclipse.org/bugs/show_bug.cgi?id=350000&lt;/a&gt; and by adding comments and new feature requests to this bug report.&lt;br /&gt;&lt;br /&gt;And of course: If you experience strange behavior, let us know by sending a post to the code recommenders forum or by creating a bug report at Eclipse Bugzilla.&lt;br /&gt;&lt;br /&gt;If you'd like to support subwords: all ideas and issues are tracked by &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=350000"&gt;bug 350000&lt;/a&gt; &lt;b&gt;and wait for your help.&lt;/b&gt;&amp;nbsp;&amp;nbsp;If you would like to add a feature (such as completion on type names for instance), just let us know!&lt;br /&gt;&lt;br /&gt;Best,&lt;br /&gt;Marcel&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1479535086136999079-4104431073215553432?l=code-recommenders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/4104431073215553432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-recommenders.blogspot.com/2011/08/eclipse-subwords-completion-1-here-you.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/4104431073215553432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/4104431073215553432'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/2011/08/eclipse-subwords-completion-1-here-you.html' title='Eclipse Subwords Completion #1 - Here You Are:'/><author><name>Marcel Bruch</name><uri>https://profiles.google.com/100908752439953740476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-i2lFK0vZDP8/AAAAAAAAAAI/AAAAAAAAAwA/IZJzvq1KhBk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-b8G7IfOK8cE/ThVHcA5-roI/AAAAAAAAAs4/QofadsoekyA/s72-c/Screen+shot+2011-07-07+at+07.42.52.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1479535086136999079.post-1777416405923340802</id><published>2011-06-10T11:16:00.002+02:00</published><updated>2011-06-10T11:31:38.302+02:00</updated><title type='text'>Eclipse DemoCamp in Darmstadt 21.06. is Approaching!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/-AKdihK4SVRg/TfHUjkT7x9I/AAAAAAAAArw/g0vOcguFYuU/s1600/democamp-tent.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-AKdihK4SVRg/TfHUjkT7x9I/AAAAAAAAArw/g0vOcguFYuU/s1600/democamp-tent.png" /&gt;&lt;/a&gt;&lt;/div&gt;I'm happy to announce this year's Eclipse DemoCamp in Darmstadt. The DemoCamp is organized by Deutsche Telekom and Darmstadt University of Technology - and it's going to be great again :)&lt;br /&gt;&lt;br /&gt;The last time we had ~120 attendees and quite packed program: Lars Vogel spoke about e4, Benjamin Muskalla and Holger Staudacher talked about the regular day of a committer at Eclipse.org, Manuel Bork presented UMLLab, Karsten Thoms introduced Maven Tycho, Kai Kreuzer demonstrated how to control your home with OSGI, Berthold Daum showed his photo managing software Zora, Stefan Lay gave first insights into EGit, Janos Koppany spoke about DVCS, and Lothar Wieske highlighted Bespin. Who had known at this time that Orion was going to come, Tycho would be that popular, e4 looks that neat, and life as a committer has so much to do with latency :)&lt;br /&gt;&lt;br /&gt;This program was hard to beat. But we spent quite some time to get comitters for the latest "en vogue" topics. This time we have 8 talks. Each one will be 15 minutes + &amp;nbsp;one extended talk with 30 minutes. This is the program of this year's Eclipse DemoCamp Darmstadt:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Andreas Hoegger and Matthias Zimmermann (BSI Business Systems Integration AG) introduce &lt;a href="http://eclipse.org/scout/"&gt;Eclipse Scout&lt;/a&gt;. Thanks for presenting Scout the first time ever on a DemoCamp!&lt;/li&gt;&lt;li&gt;Christian Schneider (Yatta Solutions) speaks about creating Taks-focused diagrams with &lt;a href="http://eclipse.org/mylyn"&gt;Mylyn&lt;/a&gt; and &lt;a href="http://www.yatta.de/"&gt;UML Lab&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Simon Kaufmann and Jochen Hiller (SAP AG / Deutsche Telekom) speak about &lt;a href="http://eclipse.org/skalli"&gt;Eclipse Skalli&lt;/a&gt; - the latest approach to project management portal which brings more transparency to your teams.&lt;/li&gt;&lt;li&gt;Sascha Scholz (SAP AG) talks about integrating Git/Gerrit with Jenkins and Mylyn (AKA &lt;a href="http://www.eclipse.org/mylyn/builds/"&gt;Mylyn Builds ++&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Stefan Lay and Matthias Sohn (SAP AG) let us know whether or not "Egit is ready for prime time". I bet it is!&lt;/li&gt;&lt;li&gt;Holger Staudacher (EclipseSource) let's you know what's going on in &lt;a href="http://www.eclipse.org/rt/"&gt;Eclipse RT&lt;/a&gt; Universe.&lt;/li&gt;&lt;li&gt;Falko Menge (Camunda) gives you the spirit of modeling your business with &lt;a href="http://activiti.org/"&gt;Activiti&lt;/a&gt; and BPMN2.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Marcus Ficner (Itemis) gives an extended talk about cross-platform mobile development with &lt;a href="http://code.google.com/p/applause/"&gt;APPLause&lt;/a&gt;. Friends of Android and iOS keep your mobiles ready for this talk!&amp;nbsp;&lt;/li&gt;&lt;/ol&gt;&lt;ul&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;And of course, there will be free food and drinks.&lt;/b&gt; This event is sponsored by &lt;a href="http://bsiag.com/"&gt;BSI Business Systems Integration AG&lt;/a&gt;,&amp;nbsp;&lt;a href="http://msg.de/"&gt;msg systems&lt;/a&gt;, &lt;a href="http://telekom.de/"&gt;Deutsche Telekom&lt;/a&gt;, and &lt;a href="http://tu-darmstadt.de/"&gt;Darmstadt University of Technology&lt;/a&gt;. Thanks to our sponsors for their support and helping us to make this event happen again the third time now!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-n7xxqwn5EwM/TfHQfKZ00CI/AAAAAAAAArs/5xh1e8a5hSM/s1600/bsi.png" /&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-zETJT_NU_Tw/TfHVBA5ZWdI/AAAAAAAAAr0/hGPQSzuJLx8/s1600/msgsystems-logo.png" /&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-1-9eQ1ek9Wk/TfHkOs5dvXI/AAAAAAAAAsA/5sw0YwOiM5k/s1600/TelekomDeveloperGarden.gif" /&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-0Q1v1vQIg_A/TfHVL6rd5yI/AAAAAAAAAr4/ZnkBXoA-jR4/s1600/Tu-darmstadt-logo.gif" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;The event starts on 21.06., 17:00 at Deutsche Telekom AG, T-Online-Allee 1 in Darmstadt. For location details and latest news please check &lt;a href="http://wiki.eclipse.org/Eclipse_DemoCamps_Indigo_2011/Darmstadt"&gt;http://wiki.eclipse.org/Eclipse_DemoCamps_Indigo_2011/Darmstadt&lt;/a&gt;.&lt;br /&gt;&lt;div&gt;Register for the event here:&amp;nbsp;&lt;a href="http://democamp-darmstadt.eventbrite.com/"&gt;http://democamp-darmstadt.eventbrite.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Looking forward to a great event!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1479535086136999079-1777416405923340802?l=code-recommenders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/1777416405923340802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-recommenders.blogspot.com/2011/06/eclipse-democamp-in-darmstadt-2106-is.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/1777416405923340802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/1777416405923340802'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/2011/06/eclipse-democamp-in-darmstadt-2106-is.html' title='Eclipse DemoCamp in Darmstadt 21.06. is Approaching!'/><author><name>Marcel Bruch</name><uri>https://profiles.google.com/100908752439953740476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-i2lFK0vZDP8/AAAAAAAAAAI/AAAAAAAAAwA/IZJzvq1KhBk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-AKdihK4SVRg/TfHUjkT7x9I/AAAAAAAAArw/g0vOcguFYuU/s72-c/democamp-tent.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1479535086136999079.post-1448781282803563290</id><published>2011-05-24T21:51:00.005+02:00</published><updated>2011-06-04T00:01:08.392+02:00</updated><title type='text'>Oh Stacktrace, My Stacktrace...</title><content type='html'>Do you remember the first time you wrote a Wizard for Eclipse? Do you still know what went wrong the first time (and maybe a few times more)? Let's assume you wrote a wizard page like the one below which just contains a simple text widget inside the page's composite:&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/-SOMb5h4y4t0/Tdvnjbhcz1I/AAAAAAAAArM/5ACaoaHVJZU/s1600/Screen+shot+2011-05-24+at+19.14.39.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-SOMb5h4y4t0/Tdvnjbhcz1I/AAAAAAAAArM/5ACaoaHVJZU/s1600/Screen+shot+2011-05-24+at+19.14.39.png" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;It's not necessarily a fancy UI nor complete but it doesn't look obviously wrong, right?&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;However, when you run the wizard it just fails without any error message.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;A look into the error log reveals that there is a problem with JFace - but not your code:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-RoHSCpTLm08/TdvorTpVixI/AAAAAAAAArQ/Y3Uc8Or2Jdo/s1600/Screen+shot+2011-05-24+at+19.19.26.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="613" src="http://1.bp.blogspot.com/-RoHSCpTLm08/TdvorTpVixI/AAAAAAAAArQ/Y3Uc8Or2Jdo/s640/Screen+shot+2011-05-24+at+19.19.26.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Now, you &lt;i&gt;might&lt;/i&gt; guess that this exception is caused by you, but frankly: When I wrote my first wizard page I was &lt;i&gt;quite sure&lt;/i&gt; I didn't make any mistakes... God, yes. How wrong I've been...&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;After googleing for an explanation for a while, I found out that I was missing just one simple method call. Namely, calling &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;setControl(..)&lt;/span&gt; on my wizard page. I figured this out thirty minutes later - what a great waste of time...&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;But as I've learned from my talk at Eclipse Summit, I'm actually not the only jerk doing this wrong.&amp;nbsp; I asked the audience to raise their hands if they know that error - and after a while they started grinning and one-by-one raised the hand to show that they experienced the same problem just some time ago. How about you? Do you know it too?&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Let's see what Google returned me when I pasted the first line of my exception into its search box: ("&lt;i&gt;null argument: has no page control" &lt;/i&gt;is part of the query but was cut off in the screenshot):&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-2qF6uakZ-es/Tdvt99OWi0I/AAAAAAAAArU/eSvmnl5hgng/s1600/Screen+shot+2011-05-24+at+19.40.03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-2qF6uakZ-es/Tdvt99OWi0I/AAAAAAAAArU/eSvmnl5hgng/s1600/Screen+shot+2011-05-24+at+19.40.03.png" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;Google obviously does not a good job here. It still doesn't know the answer - even after years this error (better: wrong usage) exists. &lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;So what can we do to get rid of this? Bug trackers like Jira and Bugzilla (with Mylyn extension) have shown the way. These tools have duplicate stacktrace detectors that, whenever they observe a stacktrace in a new report, query the bug database for bugs that contain &lt;i&gt;similar&lt;/i&gt; stacktraces.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;And guess what: They work - and not too bad! To evaluate that, we replayed the bug reports from Eclipse Bugzilla from 2001 to 2008 one by one and for each new bug report containing a stacktrace we tried to find the corresponding bug id this new report was marked as duplicate of). The amazing result: In ~70% of all cases we found the right bug id under the top 3 positions! Goodbye duplicates - if you submit a stacktrace...&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Just another example. Maven had a neat feature that whenever an exception occurs during a build, it printed out a message that directs you to some wiki page which may contain further help about this error. Unfortunately, these pages have been mostly empty (at least for the cases I looked at them). However, the idea is great! &lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;What if there would be a place where you can send your stacktrace to and get a list of resources in the web that discuss exactly your problem? With such a help it should be quite easy to nail down and fix your problem in just a few minutes, right? You may think of it as being similar to&amp;nbsp; stackoverflow.com - but just for stacktraces. Something like&lt;i&gt;&lt;b&gt; stacktraces.org &lt;/b&gt;&lt;/i&gt;- or &lt;i&gt;&lt;b&gt;stacktraces.eclipse.org&lt;/b&gt;&lt;/i&gt; - a repository which contains stacktraces of the users, error descriptions and solutions including pointers to resources in the web that deal with these problems.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;What we have in mind is something like this: An Eclipse client that listens for exceptions printed on the console or written into the log:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-6kk4jMsZDWM/TdwAg3JZJCI/AAAAAAAAArc/jwC6SYDO_XE/s1600/Unbenannt-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="502" src="http://1.bp.blogspot.com/-6kk4jMsZDWM/TdwAg3JZJCI/AAAAAAAAArc/jwC6SYDO_XE/s640/Unbenannt-1.png" width="640" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;which are parsed automatically by the tool Whenever it observes an exception it may show a pop-up (3) which starts a search dialog that shows your most recent stacktraces: &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-DABsleKp-T0/TdwArwNov-I/AAAAAAAAArg/iAWl-mZQ5MI/s1600/Screen+shot+2011-05-24+at+20.41.17.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="345" src="http://3.bp.blogspot.com/-DABsleKp-T0/TdwArwNov-I/AAAAAAAAArg/iAWl-mZQ5MI/s640/Screen+shot+2011-05-24+at+20.41.17.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;If you know click on "search" it will search stacktraces.org for similar stacktraces and returns pointers to resources in the web that deal with similar stacktraces - it may even include a discussion on this stacktrace with some explanation of what caused this exception and how to fix it. This summary could be displayed in your browser or directly in Eclipse as shown below:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-3K7V6tx4kBg/TdwB3usahBI/AAAAAAAAArk/8CLCwBap3rw/s1600/Screen+shot+2011-05-24+at+20.42.44.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="514" src="http://2.bp.blogspot.com/-3K7V6tx4kBg/TdwB3usahBI/AAAAAAAAArk/8CLCwBap3rw/s640/Screen+shot+2011-05-24+at+20.42.44.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;Additional tabs may provide additional information like similar stacktraces, related web-resources etc.:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ObWLegaZ6Fg/TdwCLdtqCRI/AAAAAAAAAro/NPxvIEYhnj0/s1600/Screen+shot+2011-05-24+at+20.42.50.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="514" src="http://1.bp.blogspot.com/-ObWLegaZ6Fg/TdwCLdtqCRI/AAAAAAAAAro/NPxvIEYhnj0/s640/Screen+shot+2011-05-24+at+20.42.50.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;That's just a thought about how we could get rid of it. Best of it: in its minimum version there is no additional effort of a user required. We may just give pointers to existing resources or we may integrate the results into a forum etc.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;What do you think?&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Would you use such a stacktrace search engine that leverages the community knowledge about common pitfalls and usage errors of your favorite open source project? How much time you could have saved if someone had pointed you directly to the forum post telling you that you simply forgot to call &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;setControl&lt;/span&gt;.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Just click on the like/dislike button below - and if you have a few minutes, feel invited to drop a comment below.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Thanks,&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Marcel&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Update #1:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;If you like the idea you may also consider commenting on it at/for &lt;a href="http://meta.stackoverflow.com/questions/93653/stack-trace-wiki-on-so"&gt;stackoverflow.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Stay in touch: Follow me on&amp;nbsp;&lt;a href="https://twitter.com/MarcelBruch"&gt;Twitter&lt;/a&gt;.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1479535086136999079-1448781282803563290?l=code-recommenders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/1448781282803563290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-recommenders.blogspot.com/2011/05/oh-stacktrace-my-stacktrace.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/1448781282803563290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/1448781282803563290'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/2011/05/oh-stacktrace-my-stacktrace.html' title='Oh Stacktrace, My Stacktrace...'/><author><name>Marcel Bruch</name><uri>https://profiles.google.com/100908752439953740476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-i2lFK0vZDP8/AAAAAAAAAAI/AAAAAAAAAwA/IZJzvq1KhBk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-SOMb5h4y4t0/Tdvnjbhcz1I/AAAAAAAAArM/5ACaoaHVJZU/s72-c/Screen+shot+2011-05-24+at+19.14.39.png' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1479535086136999079.post-6983429742084681073</id><published>2011-05-15T15:59:00.019+02:00</published><updated>2011-05-17T09:49:54.882+02:00</updated><title type='text'>A Subword Matching Completion Engine for Eclipse?</title><content type='html'>A few hours ago stumbled across a post at stackoverflow.com titled&amp;nbsp;&amp;nbsp;"&lt;a href="http://stackoverflow.com/questions/5755869/eclipse-fulltext-autocompletion-for-java"&gt;Eclipse: Fulltext autocompletion for Java?&lt;/a&gt;"&amp;nbsp;where a programmer is essentially asking whether Eclipse' code completion supports partial proposal matching.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I copied the question here to make this post a bit more self-contained:&lt;br /&gt;&lt;br /&gt;================================================&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-size: 14px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline; word-wrap: break-word;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"&gt;Hi, can I have fulltext autocompletion for Java @ Eclipse? Let's demonstrate:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"&gt;&lt;b style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Final piece of code:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="lang-java prettyprint" style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 14px; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-height: 600px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; vertical-align: baseline; width: auto;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"&gt;&lt;code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="pln" style="background-color: transparent; border-width: 0px; color: black; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;getVariants&lt;/span&gt;&lt;span class="pun" style="background-color: transparent; border-width: 0px; color: black; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;().&lt;/span&gt;&lt;span class="pln" style="background-color: transparent; border-width: 0px; color: black; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;add&lt;/span&gt;&lt;span class="pun" style="background-color: transparent; border-width: 0px; color: black; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span class="kwd" style="background-color: transparent; border-width: 0px; color: darkblue; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;new&lt;/span&gt;&lt;span class="pln" style="background-color: transparent; border-width: 0px; color: black; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;"&gt; &lt;/span&gt;&lt;span class="typ" style="background-color: transparent; border-width: 0px; color: #2b91af; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;Variant&lt;/span&gt;&lt;span class="pun" style="background-color: transparent; border-width: 0px; color: black; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span class="typ" style="background-color: transparent; border-width: 0px; color: #2b91af; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;MediaType&lt;/span&gt;&lt;span class="pun" style="background-color: transparent; border-width: 0px; color: black; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span class="pln" style="background-color: transparent; border-width: 0px; color: black; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;TEXT_XML&lt;/span&gt;&lt;span class="pun" style="background-color: transparent; border-width: 0px; color: black; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;));&lt;/span&gt;&lt;span class="pln" style="background-color: transparent; border-width: 0px; color: black; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-size: 14px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline; word-wrap: break-word;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"&gt;&lt;b style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;How do I code now:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 1px; padding-left: 10px; padding-right: 10px; padding-top: 10px; quotes: none; vertical-align: baseline;"&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-size: 14px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline; word-wrap: break-word;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"&gt;getv[ctrl+space].a[Enter]new V[ctrl+space, down arrow, Enter]M[Ctrl+Space, Enter].&lt;b style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;text_x&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-size: 14px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline; word-wrap: break-word;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"&gt;Basically, Eclipse completes word "TEXT_XML" when I provide letters "TEXT_X".&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-size: 14px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline; word-wrap: break-word;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"&gt;&lt;b style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;How would I like to code:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 1px; padding-left: 10px; padding-right: 10px; padding-top: 10px; quotes: none; vertical-align: baseline;"&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-size: 14px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline; word-wrap: break-word;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"&gt;getv[ctrl+space].a[Enter]new V[ctrl+space, down arrow, Enter]M[Ctrl+Space, Enter].&lt;b style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 14px; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;xml&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-size: 14px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline; word-wrap: break-word;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"&gt;and Eclipse should realise I meant "TEXT_XML" (fulltext autocompletion).&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;================================================&lt;br /&gt;&lt;br /&gt;Well, thanks to JDT's quite comprehensive APIs this is not too complex to implement, and I wrote down a simple version of this completion engine (10 locs).&lt;br /&gt;&lt;br /&gt;This is how it looks like in action now:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: Times;"&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-size: small; line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"&gt;&lt;a href="http://4.bp.blogspot.com/-xPbWvP6CMZc/Tc_aDUJOEHI/AAAAAAAAAq8/__8TEzvTS84/s1600/Screen+shot+2011-05-15+at+14.59.29.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-xPbWvP6CMZc/Tc_aDUJOEHI/AAAAAAAAAq8/__8TEzvTS84/s1600/Screen+shot+2011-05-15+at+14.59.29.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-size: 14px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline; word-wrap: break-word;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: Times;"&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-size: small; line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;But now I wonder:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;How often do you just remember a few letters but don't know the complete name of a method or member?&lt;/li&gt;&lt;li&gt;Would you like to see such a completion engine in Eclipse?&lt;/li&gt;&lt;li&gt;What else would be missing?&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;I would be glad if you could send your thoughts to the &lt;a href="http://www.eclipse.org/forums/index.php/t/209269/"&gt;code recommenders forum&lt;/a&gt;.&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: Times;"&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; font-size: small; line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Best,&lt;br /&gt;Marcel&lt;br /&gt;&lt;br /&gt;Stay in touch. Follow me on &lt;a href="http://twitter.com/marcelbruch"&gt;Twitter&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;&lt;span class="Apple-style-span" style="font-size: small; font-weight: normal;"&gt; &lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Update #1: Neat research on this topic.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;&lt;span class="Apple-style-span" style="font-size: small; font-weight: normal;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I just found a paper (almost) exactly on this topic. Could you check out these screencasts? &lt;br /&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="http://vimeo.com/11664433"&gt;http://vimeo.com/11664433&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://vimeo.com/19369928"&gt;http://vimeo.com/19369928&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Maybe it's even more than you/we would like to see :-) But I think that's pretty cool stuff and having a similar completion engine for Eclipse could be very, very cool. Internally it's based on Hidden Markov Models which learn how people abbreviated certain identifiers (like&amp;nbsp; stx --&amp;gt; 'setText') in the past. The nice thing about it is that we don't have to come up with our own matching algorithm but just use what the programmers used before... I like the Han's work :)&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;&lt;span class="Apple-style-span" style="font-size: small; font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;Update #2: Prototype available.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;After a quick and dirty monday afternoon hack a first prototype is ready. In a nutshell, it takes your prefix entered and creates a regular expression from it. For example, when entering &lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;"&gt;button.stx|&amp;lt;^Space&amp;gt;&lt;/span&gt;&amp;nbsp;the engine only presents those proposals that match this regular expression .&lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;"&gt;*s.*t.*x.*&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;which finally may match "&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;"&gt;setText(text)&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;". This is roughly what Maxime proposed in his comment below.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;In addition it now respects upper case letters as suggested by Deepak. For example &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;button.sT&amp;lt;^Space&amp;gt;&lt;/span&gt; now evaluates to&amp;nbsp; &lt;/span&gt;'.&lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;"&gt;*s.*T.*' &lt;/span&gt;whereas&lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;"&gt;&lt;span style="font-family: Arial,Helvetica,sans-serif;"&gt; &lt;/span&gt;button.st&lt;/span&gt; would evaluate to .&lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;"&gt;*s.*[tT].*&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Currently, it does not reduce the proposal score as recommended by another comment nor does is give precedence to those words that match the prefix - but we may do that if you find this more useful. Just drop a comment in the forum mentioned below.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Please find the installation instructions here:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;a href="http://www.eclipse.org/forums/index.php/mv/msg/209269/671088/#msg_671088"&gt;http://www.eclipse.org/forums/index.php/mv/msg/209269/671088/#msg_671088&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Please send your comments to the forum here:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;a href="http://www.eclipse.org/forums/index.php/f/211/"&gt;http://www.eclipse.org/forums/index.php/f/211/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Stay in touch. Follow me on&amp;nbsp;&lt;a href="http://twitter.com/marcelbruch"&gt;Twitter&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1479535086136999079-6983429742084681073?l=code-recommenders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/6983429742084681073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-recommenders.blogspot.com/2011/05/subword-matching-completion-engine-for.html#comment-form' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/6983429742084681073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/6983429742084681073'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/2011/05/subword-matching-completion-engine-for.html' title='A Subword Matching Completion Engine for Eclipse?'/><author><name>Marcel Bruch</name><uri>https://profiles.google.com/100908752439953740476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-i2lFK0vZDP8/AAAAAAAAAAI/AAAAAAAAAwA/IZJzvq1KhBk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-xPbWvP6CMZc/Tc_aDUJOEHI/AAAAAAAAAq8/__8TEzvTS84/s72-c/Screen+shot+2011-05-15+at+14.59.29.png' height='72' width='72'/><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1479535086136999079.post-4320419333159253511</id><published>2011-05-13T21:12:00.000+02:00</published><updated>2011-05-13T21:12:07.900+02:00</updated><title type='text'>Google Summer of Code 2011 - Extended Documentation Platform Get's Going</title><content type='html'>&lt;div style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; color: #555555; font-family: Arial, Helvetica, sans-serif; font-size: 12px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;b&gt;&lt;reposted. ate="" blogger="" its="" last="" maintenance="" on="" post="" this=""&gt;&lt;/reposted.&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; color: #555555; font-family: Arial, Helvetica, sans-serif; font-size: 12px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;b&gt;&lt;reposted because="" blogger.com="" during="" last="" maintenance="" of="" some="" trouble=""&gt;&lt;/reposted&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;IDEs do a great job when it comes to searching and presenting documentation on how to use an API. However, one recurring problem with open source software is that it is frequently outdated, misleading or even missing. In these cases, example code that used an API successfully before become an interesting source of information.&lt;br /&gt;&lt;br /&gt;However, extracting patterns from reading source code is a tedious and time-consuming process and the question arises whether we couldn't support developers better by, for example, automatically extracting frequent patterns from example code and provide them as additional documentation. There is quite a large body of research on how useful information can be extracted from code and put into documentation but means to present such mined documentation inside Eclipse are missing, however.&lt;br /&gt;&lt;br /&gt;I'm happy to announce that Stefan Henß will fix this during this year's Google Summer of Code. He will implement an "extended documentation platform" for Eclipse - an extensible documentation platform that enriches existing documentation with various information contributed from various documentation providers (not necessarily just mined information).&lt;/div&gt;&lt;div style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; color: #555555; font-family: Arial, Helvetica, sans-serif; font-size: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;br style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;&lt;/div&gt;&lt;div class="separator" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; clear: both; color: #555555; font-family: Arial, Helvetica, sans-serif; font-size: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Jew1WQtkptc/TcuCtNTSPqI/AAAAAAAAAq4/I5f3oo8siZc/s1600/teaser1.jpg" style="color: #0066cc; margin-bottom: 0px; margin-left: 1em; margin-right: 1em; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;img border="0" height="310" src="http://4.bp.blogspot.com/-Jew1WQtkptc/TcuCtNTSPqI/AAAAAAAAAq4/I5f3oo8siZc/s400/teaser1.jpg" style="border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; color: #555555; font-family: Arial, Helvetica, sans-serif; font-size: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;br style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;&lt;/div&gt;&lt;div style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; color: #555555; font-family: Arial, Helvetica, sans-serif; font-size: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;br style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;&lt;/div&gt;&lt;div style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; color: #555555; font-family: Arial, Helvetica, sans-serif; font-size: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Stefan already started to outline his thoughts on&amp;nbsp;&lt;a href="http://stefanhenss.com/vision-extended-documentation-for-eclipse" style="color: #0066cc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;his blog&lt;/a&gt;.&amp;nbsp;If you like the idea just visit his post, drop a comment, and keep in touch to get the latest news about this GSOC project either by following us on Twitter&amp;nbsp;(&lt;a href="http://twitter.com/#!/henss" style="color: #0066cc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;Stefan&lt;/a&gt;,&amp;nbsp;&lt;a href="http://twitter.com/#!/MarcelBruch" style="color: #0066cc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;me&lt;/a&gt;)&amp;nbsp;&amp;nbsp;or by subscribing to Stefan's&amp;nbsp;&lt;a href="http://stefanhenss.com/feed" style="color: #0066cc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;news feed&lt;/a&gt;&amp;nbsp;(a&amp;nbsp;request to&amp;nbsp;&lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=345103" style="color: #0066cc; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;add Stefan's blog to planet-eclipse&lt;/a&gt;&amp;nbsp;is currently on the way).&lt;/div&gt;&lt;div style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; color: #555555; font-family: Arial, Helvetica, sans-serif; font-size: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;br style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" /&gt;&lt;/div&gt;&lt;div style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; color: #555555; font-family: Arial, Helvetica, sans-serif; font-size: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Good Luck Stefan! I'm looking forward to your first prototype screenshots!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1479535086136999079-4320419333159253511?l=code-recommenders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/4320419333159253511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-recommenders.blogspot.com/2011/05/google-summer-of-code-2011-extended.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/4320419333159253511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/4320419333159253511'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/2011/05/google-summer-of-code-2011-extended.html' title='Google Summer of Code 2011 - Extended Documentation Platform Get&apos;s Going'/><author><name>Marcel Bruch</name><uri>https://profiles.google.com/100908752439953740476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-i2lFK0vZDP8/AAAAAAAAAAI/AAAAAAAAAwA/IZJzvq1KhBk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-Jew1WQtkptc/TcuCtNTSPqI/AAAAAAAAAq4/I5f3oo8siZc/s72-c/teaser1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1479535086136999079.post-2813175725864334414</id><published>2011-04-29T19:12:00.003+02:00</published><updated>2011-05-24T07:59:55.297+02:00</updated><title type='text'>"Clean Code" Method Sorter for Eclipse?</title><content type='html'>Have you ever chased your tail through a class, hopping from one function to the next, scrolling up and down the source file, trying to divine how the functions relate and operate, only to get lost in a rat’s nest of confusion? Have you ever hunted up the chain of inheritance for the definition of a variable or function? This is frustrating because you are trying to understand what the system does, but you are spending your time and mental energy on trying to locate and remember where the pieces are.&lt;br /&gt;&lt;br /&gt;Concepts that are closely related should be kept vertically close to each other. We want to avoid forcing our readers to hop around through our source files and classes.&lt;i&gt;&lt;/i&gt;&lt;br /&gt;&lt;div style="text-align: right;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;i&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: right;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;i&gt;&lt;b&gt;Robert C. Martin "Clean Code" pp. 80&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;br /&gt;If you have to read other people's code quite often you probably know this, right?&lt;br /&gt;&lt;br /&gt;Typically, there are two types of code ordering. Alphabetically (+ modifiers) or completely hand-crafted (which in many cases means "without any particular order").  But is it that complicated to let the IDE sort a class' members for you? Reducing the need to hop from top to the bottom of the file and thus minimizing scrolling and confusion?&lt;br /&gt;&lt;br /&gt;The slide below gives you an example of how a well-sorted piece of code might look like. As you see the number of hops required to read the whole code is minimal since there is a clear ordering between the code:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-Pfz2UVb6G3Q/TbrjXd9MIWI/AAAAAAAAAqw/zjmww8mvImw/s1600/Folie34.jpg"&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/-Pfz2UVb6G3Q/TbrjXd9MIWI/AAAAAAAAAqw/zjmww8mvImw/s1600/Folie34.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-Pfz2UVb6G3Q/TbrjXd9MIWI/AAAAAAAAAqw/zjmww8mvImw/s1600/Folie34.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;How complicated can it be?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In the end, there are just a few things to do:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Extracting the caller-callee relationships from code,  &lt;/li&gt;&lt;li&gt;Sorting these relations using some topological sorting algorithm,  &lt;/li&gt;&lt;li&gt;Dealing with some pat/remi situations where several elements may have the same ordering, and finally &lt;/li&gt;&lt;li&gt;A "physically"reordering these methods in your source file. &lt;/li&gt;&lt;/ol&gt;That's all. At least in theory. It's well known that &lt;b&gt;"in theory, there is no difference between theory and practice"&lt;/b&gt;, and thus, it should be straight-forward to implement :-P&lt;br /&gt;&lt;br /&gt;I'm glad that we found two students who will implement this nice &lt;b&gt;Clean Code Method Sorter&lt;/b&gt; during their Eclipse hands-on this semester. I'm really looking forward to their clean code!&lt;br /&gt;&lt;br /&gt;Good Luck, Mateusz and Fabian!&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Track progress of this feature via &lt;a href="http://www.blogger.com/I%20created%20https://bugs.eclipse.org/bugs/show_bug.cgi?id=344394%20for%20tracking%20purpose."&gt;Bugzilla&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Stay in touch with Code Recommenders via&amp;nbsp;&lt;a href="http://twitter.com/MarcelBruch"&gt;Twitter&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;&lt;div class="post-footer" style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 1.6; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 1.5em;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1479535086136999079-2813175725864334414?l=code-recommenders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/2813175725864334414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-recommenders.blogspot.com/2011/04/clean-code-method-sorter-for-eclipse.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/2813175725864334414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/2813175725864334414'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/2011/04/clean-code-method-sorter-for-eclipse.html' title='&quot;Clean Code&quot; Method Sorter for Eclipse?'/><author><name>Marcel Bruch</name><uri>https://profiles.google.com/100908752439953740476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-i2lFK0vZDP8/AAAAAAAAAAI/AAAAAAAAAwA/IZJzvq1KhBk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-Pfz2UVb6G3Q/TbrjXd9MIWI/AAAAAAAAAqw/zjmww8mvImw/s72-c/Folie34.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1479535086136999079.post-711874721659723316</id><published>2011-04-29T17:24:00.004+02:00</published><updated>2011-06-12T12:11:02.047+02:00</updated><title type='text'>Say "Hello Android!"</title><content type='html'>Android is all around you, isn't it? It's in your smartphone, in your tablet - and chances are not too bad that you already wrote your own app for your device.&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/-Tz3TIGKK_n4/TbqXxq0s0AI/AAAAAAAAAqk/4A9HaQhjBkY/s1600/6230iL.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-Tz3TIGKK_n4/TbqXxq0s0AI/AAAAAAAAAqk/4A9HaQhjBkY/s320/6230iL.jpg" width="301" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Me myself is still using an old-school Nokia 6230 that is used more often as watch than as phone or even internet device.&lt;br /&gt;&lt;br /&gt;This is nagging me. I'm looking for a new phone. A smarter phone. A smartphone.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&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/-hXtm7TP3gWY/TbqXyRCPTHI/AAAAAAAAAqs/JfBRXh0f9Ik/s1600/samsung-galaxy-s-2.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-hXtm7TP3gWY/TbqXyRCPTHI/AAAAAAAAAqs/JfBRXh0f9Ik/s320/samsung-galaxy-s-2.jpg" width="312" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I'd like to have this one.&lt;br /&gt;&lt;br /&gt;A phone which I can use to explore the internet, write emails, and even to write apps for myself (and sometimes to call people).&lt;br /&gt;&lt;br /&gt;Unfortunately, I've no knowledge about how to write apps with Android. How about you? Do you know how to write apps in Android? How smooth was your start with Android?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-2KCPeYVWDmo/TfSQk3OnGzI/AAAAAAAAAsE/GeSJK8ch9RI/s1600/a.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-2KCPeYVWDmo/TfSQk3OnGzI/AAAAAAAAAsE/GeSJK8ch9RI/s1600/a.png" /&gt;&lt;/a&gt;For beginners (and experts alike) Lars' blog &lt;a href="http://vogella.de/"&gt;vogella.de&lt;/a&gt; is an excellent resource to learn about Android and related technologies. &lt;br /&gt;&lt;br /&gt;However, not all details are yet covered in tutorials and two weeks ago Lars asked me wether we couldn't run Code Recommenders on Android?&lt;br /&gt;&lt;br /&gt;It took me a few hours to figure out but yes - Code Recommenders is capable to learn models for Android too!&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The only disadvantage with Android is, that there are not too many open source projects available. That means, that is quite tricky to get a reasonable amount of data to train Code Recommenders. Thus, we have to come up with a purely community driven approach that allows developers to share their knowledge about how to use Android directly from their IDE and - in turn - generating new models from this usage data on a daily basis. With such a system in place we think it should be possible to create a continuously growing knowledge base for Android.&lt;br /&gt;&lt;br /&gt;Since my spare time is currently very low, I'm glad that Andreas Frankenberger signed up to implement this upload-train-deliver life-cycle for Android in his bachelor thesis. I'm really looking forward to his results. Until now he has collected a set of 119 open source Android applications (taken from &lt;a href="http://en.wikipedia.org/wiki/List_of_open_source_Android_applications"&gt;http://en.wikipedia.org/wiki/List_of_open_source_Android_applications&lt;/a&gt;) which he will use to train the initial Android recommendation models used as proof of concept before implementing the upload and train cycle.&lt;br /&gt;&lt;br /&gt;If you like the idea let us know. We will soon create an early set of recommendation models for Android and we would be glad to get your feedback about it. In addition, if you know any other open source Android projects not listed above, please feel free to give us a pointer to them (preferably as Eclipse ADT projects). Andreas will be glad to add them to the initial training repository.&lt;br /&gt;&lt;br /&gt;If you have any other comments or ideas on this idea just discuss them here on the blog or in our &lt;a href="http://www.eclipse.org/forums/eclipse.recommenders"&gt;forum&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;See you!&lt;br /&gt;Marcel&lt;br /&gt;&lt;br /&gt;Stay in touch with Code Recommenders via &lt;a href="http://twitter.com/#%21/MarcelBruch"&gt;Twitter&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1479535086136999079-711874721659723316?l=code-recommenders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/711874721659723316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-recommenders.blogspot.com/2011/04/say-hello-android.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/711874721659723316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/711874721659723316'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/2011/04/say-hello-android.html' title='Say &quot;Hello Android!&quot;'/><author><name>Marcel Bruch</name><uri>https://profiles.google.com/100908752439953740476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-i2lFK0vZDP8/AAAAAAAAAAI/AAAAAAAAAwA/IZJzvq1KhBk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-Tz3TIGKK_n4/TbqXxq0s0AI/AAAAAAAAAqk/4A9HaQhjBkY/s72-c/6230iL.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1479535086136999079.post-5514911196941109013</id><published>2011-04-01T11:30:00.007+02:00</published><updated>2011-04-01T14:20:09.388+02:00</updated><title type='text'>At Lunch with JDT Team Zurich...</title><content type='html'>Just a few weeks ago I had the pleasure to present Code Recommenders to Frank Tip from IBM Research - a nice guy who, as I learned during the demo, has implemented some of the refactorings we use day in, day out in Eclipse!&amp;nbsp;Today he's not working on Eclipse anymore but manages the &lt;i&gt;Program Analysis and Transformation Group&lt;/i&gt; at IBM Research which is developing (among many other things) the outstanding&amp;nbsp;&lt;a href="http://wala.sf.net/"&gt;WALA&lt;/a&gt; analysis toolkit we use inside Code Recommenders - definitely a must-have when doing static analysis in Java/JS.&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;During a 30 minutes demo I presented him the whole collection of tools we worked on in the group - a quite compact session with lots of ideas and concepts in it. After I finished, Frank asked whether we already presented the project to the JDT team and (as I negated) just said "well I will tell Erich about it. I think he should see that." Wow. Is it actually that easy to get in contact?&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Just a few days later I was introduced to Daniel Megert and Markus Keller from IBM Research Zurich, two guys who are working on Eclipse JDT from its first day (and even before :)). We arranged a meeting in Zurich&amp;nbsp;last Monday&amp;nbsp;where I got the opportunity to present Code Recommenders during a so called "lunch talk"... I had no idea what a lunch talk actually looks like - but hey! No worries :)&lt;br /&gt;&lt;br /&gt;On Monday morning I arrived at IBM Rationale in Zurich downtown. I had a nice chat with Daniel and learned quite a few things what the JDT team keeps busy behind the scenes. Then at&amp;nbsp;12 o'clock everyone in the office moved out to grab some food from the surrounding restaurants and went back to the group's common room where they unpacked their lunch and started eating.&lt;br /&gt;&lt;br /&gt;Except me. I started talking.&lt;br /&gt;&lt;br /&gt;Okay, so that's a lunch talk: 10 people having lunch while one guy is sitting in front of the desk entertaining the audience... Well, this looks odd for moment but frankly: it was a great atmosphere! I only wonder how previous speakers managed to eat their food. I guess they didn't... :)&lt;br /&gt;&lt;br /&gt;However, after one hour we finished the lunch talk and started a detailed discussion on how Code Recommenders uses JDT and where JDT's defensive APIs affect code recommenders performance.&amp;nbsp;We identified several potential changes / extensions to JDT which I would like to summarize in this post.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;More Chatty JavaCompletionContentAssistContext&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So far, the java content assist context provides plug-in developers with just a small number of interesting facts:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The position in text where code completion has been triggered on,&lt;/li&gt;&lt;li&gt;Some completion prefix like 'setT' as in 'button.setT&amp;lt;^Space&amp;gt;',&lt;/li&gt;&lt;li&gt;The expected type the proposal should return if any,&lt;/li&gt;&lt;li&gt;The enclosing Java element, i.e., the method or class in which code completion was triggered.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;But what to do if you need the information of which kind the receiver of a code completion event is, or which name the receiver has? In a completion event like 'b.setT' you are almost on your own to figure out information like type and name of the receiver, the exact type of completion event (CompletionOnMemberAccess, CompletionOnMessageSend...) by either parsing the source file or rerunning the completion parser as we do in Code Recommenders. Both ways are time-consuming and take between 10 to 50 ms in our cases. Fast in general but unnecessary given that JDT completion already computed (almost) all relevant information before.&lt;br /&gt;&lt;br /&gt;During discussion we identified a set of potential changes how content assist context could be improved to help other plug-ins to leverage the analysis results of JDT and how to provide access to more structural information like variable names and types etc.&lt;br /&gt;&lt;br /&gt;If you are interested in discussing advances to JDT&amp;nbsp;JavaCompletionContentAssistContext, just add your comments to &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=340945"&gt;Bug 340945 - Extension Request of JavaContentAssistInvocationContext&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;More flexible Content Assist Lists&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Currently, JDT provides two types of content assist windows. The 'default' content assist that shows the proposals of several engines on the first ^Space cycle, followed by various content assists lists that present proposals per category one-by-one. For instance when you press ^Space twice you get to the 'Templates' proposals, pressing ^Space three times in a row you get to SWT Templates etc.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;This works pretty well and is a neat way to group things if there are just a few completion engines available. But how to deal with cases where your Eclipse installation has, say, 10 different completion engines? Putting all of them on the first, default, content assist list is not necessarily the best choice - but having to press ^Space ten times in a row to get the proposals of the last category seems odd too, right?&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Agreed. This scenario is a bit special to Code Recommenders because it adds five new code completion engines to Eclipse (Intelligent Call Completion, Overrides Completion, Dynamic Templates, Chain Completion, and Example Code Search). However, it shows a configuration limitation that is not necessarily required. Wouldn't it be great if you could decide completely yourself which proposals are displayed on which content assist list? Maybe by configuring something like "Show all template proposals on the second ^Space"? How do you feel about a drag'n drop UI to configure Code Completion as sketched here:&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-NBWfouzYn_s/TZWKlyXpj9I/AAAAAAAAAps/ayhdPKchg-k/s1600/ContentAssist-PreferencePage.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="499" src="http://1.bp.blogspot.com/-NBWfouzYn_s/TZWKlyXpj9I/AAAAAAAAAps/ayhdPKchg-k/s640/ContentAssist-PreferencePage.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-G2PYxpxNblw/TZWKi_4QALI/AAAAAAAAApo/gkNJvLDV7BM/s1600/ContentAssist-PreferencePage3-drag.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="500" src="http://2.bp.blogspot.com/-G2PYxpxNblw/TZWKi_4QALI/AAAAAAAAApo/gkNJvLDV7BM/s640/ContentAssist-PreferencePage3-drag.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;There is a feature request&amp;nbsp;&lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=340876"&gt;Bug 340876 - [preferences][content assist] Request for more flexible configuration of content assist lists&lt;/a&gt;&amp;nbsp;on this. We'll come up with a first patch for this request - but if you are interested in discussing how to implement this feature we'd appreciate your comments!&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Now, the final topic and probably the most exciting one for tool developers at Eclipse!&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Fine-grained IElementChangedListener notification on content change that is not a structural change&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you ever tried to get notifications about AST changes inside a method body, you probably know that there was no way to figure out which method's body actually changed. The only information you received was "this AST has changed... somewhere." As a tool builder who relies on information in source code you now have to reanalyze the whole AST to figure out what has changed and rerun your analysis. There was no way to build something like an incremental analyzer - and thus these tools were unnecessarily slowed down. Significantly.&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;With &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=100267"&gt;Bug 100267 - Fine-grained IElementChangedListener notification on content change that is not a structural change&lt;/a&gt;&amp;nbsp;the world of Eclipse tool builders changes. Drastically. JDT currently considers to notify listeners about fine-grained deltas on method level! That's incredibly great since this would allow tools like Findbugs, PMD, and any other code analyzer to drastically improve their performance by only reanalyzing those parts that actually changed - or are affected by these changes.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;I can't say how exciting this feature is to me. If you are interested in discussing fine-grained AST deltas and want to add your requirements - please join the discussion and vote for this bug!&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Code Recommenders Contributing Back to JDT&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;I'm also happy to announce that &lt;a href="http://code-recommenders.blogspot.com/2010/12/how-do-i-get-instance-of.html"&gt;Code Recommenders Chain Completion&lt;/a&gt; will move to Eclipse JDT! Therefore, we'll develop a pure JDT-based implementation and contribute this engine to JDT when ready.&amp;nbsp;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;That's thrilling for me too :)&amp;nbsp;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Sum Up&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;It was a very exciting event being at Erich Gamma's group in Zurich and presenting Code Recommenders to JDT experts. I'm very glad and thankful for the planned support - I'm looking forward to all these improvements!&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Unfortunately, most things won't happen before Eclipse 3.8. Eclipse Release cycles for such changes are unfortunately extremely long - and thus most of the changes become effective next year earliest. &amp;nbsp;But that's the way it goes. Thus: If you have any comments on any of these features - tell us about them now (here or in bugzilla)!&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;All the best,&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Marcel&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1479535086136999079-5514911196941109013?l=code-recommenders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/5514911196941109013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-recommenders.blogspot.com/2011/04/at-lunch-with-jdt-team-zurich.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/5514911196941109013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/5514911196941109013'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/2011/04/at-lunch-with-jdt-team-zurich.html' title='At Lunch with JDT Team Zurich...'/><author><name>Marcel Bruch</name><uri>https://profiles.google.com/100908752439953740476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-i2lFK0vZDP8/AAAAAAAAAAI/AAAAAAAAAwA/IZJzvq1KhBk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-NBWfouzYn_s/TZWKlyXpj9I/AAAAAAAAAps/ayhdPKchg-k/s72-c/ContentAssist-PreferencePage.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1479535086136999079.post-3655310457823955636</id><published>2011-03-29T16:34:00.001+02:00</published><updated>2011-03-29T16:35:07.526+02:00</updated><title type='text'>Code Recommenders' Next Steps: Interviews at jaxenter.com and jaxenter.de</title><content type='html'>Two interviews about Code Recommenders' current state and next steps have been published at jaxenter.de &amp;nbsp;(German) and jaxenter.com (English). Comments appreciated - just send them to the forum &lt;a href="http://eclipse.org/forums/eclipse.recommenders"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Interviews are published here:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;jaxenter.de:&amp;nbsp;&lt;a href="http://goo.gl/2buhj"&gt;Das Eclipse der Zukunft: Intelligent, sozial, kollaborativ&lt;/a&gt;&lt;/li&gt;&lt;li&gt;jaxenter.com:&amp;nbsp;&lt;a href="http://goo.gl/09Nd3"&gt;Changing the Way Developers Learn About New APIs&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Best,&lt;br /&gt;Marcel&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1479535086136999079-3655310457823955636?l=code-recommenders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/3655310457823955636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-recommenders.blogspot.com/2011/03/code-recommenders-interviews-at.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/3655310457823955636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/3655310457823955636'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/2011/03/code-recommenders-interviews-at.html' title='Code Recommenders&apos; Next Steps: Interviews at jaxenter.com and jaxenter.de'/><author><name>Marcel Bruch</name><uri>https://profiles.google.com/100908752439953740476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-i2lFK0vZDP8/AAAAAAAAAAI/AAAAAAAAAwA/IZJzvq1KhBk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1479535086136999079.post-2850844924025649543</id><published>2011-03-01T15:53:00.005+01:00</published><updated>2011-03-01T21:49:02.068+01:00</updated><title type='text'>Eclipse Code Recommenders 0.2!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-5XNnPhfX77k/TVqEEv4WYrI/AAAAAAAAAo8/16oqQy5ia_8/s1600/recommenders.logo.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="238" src="https://lh3.googleusercontent.com/-5XNnPhfX77k/TVqEEv4WYrI/AAAAAAAAAo8/16oqQy5ia_8/s640/recommenders.logo.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;We are happy to announce the second drop of Eclipse Code Recommenders today! Two weeks after the first drop &lt;b&gt;two very exciting&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;b&gt;new features&lt;/b&gt; are ready to be released - and we are curios to hear what you think about them!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Feature #1: Java chain completion for Eclipse&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;How many times did you ask yourself "How do I get an instance of, say, IStatusLineManager" in scenarios like the one below?&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-8w7E4Is4XVs/TWz6AsvR7eI/AAAAAAAAAD0/2SlYREUdcCg/s1600/IStatusLineManager.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh4.googleusercontent.com/-8w7E4Is4XVs/TWz6AsvR7eI/AAAAAAAAAD0/2SlYREUdcCg/s1600/IStatusLineManager.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And how much time did you then spent with shimming from one method call to another to find a call chain returning the type you were looking for - OR- reading &lt;a href="http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/jface/action/class-use/IStatusLineManager.html"&gt;Javadoc's Uses documentation&lt;/a&gt; to learn how to obtain such an instance?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;If you have the feeling that this was quite too long, then this feature is for you:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Code Recommenders chain completion (described in more detail &lt;a href="http://code-recommenders.blogspot.com/2010/12/how-do-i-get-instance-of.html"&gt;here&lt;/a&gt;) supports you in situations like the one above by automatically searching the API jungle for &lt;i&gt;you&lt;/i&gt;, i.e., it takes every local variable, every field and every method it can invoke and follows its members until it finds a field or method returning an instance of the requested type.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For example when searching for an IStatusLineManager inside a ViewPart it returns:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-hxaMoPenFEc/TWydn81pI_I/AAAAAAAAApQ/41wYqMv2l64/s1600/recommenders-chain-completion-on-IStatusLineManager.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="221" src="https://lh5.googleusercontent.com/-hxaMoPenFEc/TWydn81pI_I/AAAAAAAAApQ/41wYqMv2l64/s640/recommenders-chain-completion-on-IStatusLineManager.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Code Recommender chain completion also works on static classes:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-GEwRL4tfPT4/TWydoSTx8wI/AAAAAAAAApU/pwQuAmTMZpY/s1600/recommenders-chain-completion-on-IWorkbenchHelpSystem.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="231" src="https://lh3.googleusercontent.com/-GEwRL4tfPT4/TWydoSTx8wI/AAAAAAAAApU/pwQuAmTMZpY/s640/recommenders-chain-completion-on-IWorkbenchHelpSystem.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;And directly on method returns:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" src="https://lh5.googleusercontent.com/-lsDQhF3bma4/TWydoy_dgyI/AAAAAAAAApY/5kcOB3oxbfE/s1600/recommenders-chain-completion-on-method-return.png" /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;And even on method returns with type casts:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;a href="https://lh5.googleusercontent.com/-lsDQhF3bma4/TWydoy_dgyI/AAAAAAAAApY/5kcOB3oxbfE/s1600/recommenders-chain-completion-on-method-return.png" imageanchor="1" style="clear: left; display: inline ! important; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="https://lh5.googleusercontent.com/-lsDQhF3bma4/TWydoy_dgyI/AAAAAAAAApY/5kcOB3oxbfE/s1600/recommenders-chain-completion-on-method-return.png" imageanchor="1" style="clear: left; display: inline ! important; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="https://lh5.googleusercontent.com/-lsDQhF3bma4/TWydoy_dgyI/AAAAAAAAApY/5kcOB3oxbfE/s1600/recommenders-chain-completion-on-method-return.png" imageanchor="1" style="clear: left; display: inline ! important; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="https://lh5.googleusercontent.com/-lsDQhF3bma4/TWydoy_dgyI/AAAAAAAAApY/5kcOB3oxbfE/s1600/recommenders-chain-completion-on-method-return.png" imageanchor="1" style="clear: left; display: inline ! important; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="https://lh5.googleusercontent.com/-lsDQhF3bma4/TWydoy_dgyI/AAAAAAAAApY/5kcOB3oxbfE/s1600/recommenders-chain-completion-on-method-return.png" imageanchor="1" style="clear: left; display: inline ! important; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="https://lh5.googleusercontent.com/-lsDQhF3bma4/TWydoy_dgyI/AAAAAAAAApY/5kcOB3oxbfE/s1600/recommenders-chain-completion-on-method-return.png" imageanchor="1" style="clear: left; display: inline ! important; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="https://lh5.googleusercontent.com/-lsDQhF3bma4/TWydoy_dgyI/AAAAAAAAApY/5kcOB3oxbfE/s1600/recommenders-chain-completion-on-method-return.png" imageanchor="1" style="clear: left; display: inline ! important; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="https://lh5.googleusercontent.com/-lsDQhF3bma4/TWydoy_dgyI/AAAAAAAAApY/5kcOB3oxbfE/s1600/recommenders-chain-completion-on-method-return.png" imageanchor="1" style="clear: left; display: inline ! important; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;div style="color: black; display: inline ! important; text-align: left;"&gt;&lt;img border="0" height="161" src="https://lh4.googleusercontent.com/-uLVb5-Ue6uI/TWydpGprlsI/AAAAAAAAApc/MkqJu6jSDrM/s640/recommenders-chain-completion-with-cast.png" width="640" /&gt;&lt;/div&gt;&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Many thanks to Andreas Kaluza and Gary Fritz who implemented this feature for Eclipse Code Recommenders!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Feature #2: Dynamic, example-driven templates engine&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The second feature is something I'm getting really excited about.&lt;br /&gt;&lt;br /&gt;Have you ever wondered how to deal with a framework's object you are not used to? While  working with SWT you may stumbled across &lt;i&gt;SWT Templates&lt;/i&gt;. SWT Templates offer common best practices of how to use SWT directly inside your IDE as code completion proposals. For instance, when triggered on the literal "Text" in your current editor, they propose a complete object creation pattern as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-optkpyesgwk/TWzccY3TCDI/AAAAAAAAADk/cc75CyIKaVc/s1600/SWTTemplates.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="171" src="https://lh5.googleusercontent.com/-optkpyesgwk/TWzccY3TCDI/AAAAAAAAADk/cc75CyIKaVc/s640/SWTTemplates.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;These templates are excellent for occasional users of SWT. However, these templates suffer from one major drawback: They are hand-crafted by experts and consequently only a small number of such templates exist - and only for SWT.&lt;br /&gt;&lt;br /&gt;But what if you want to use JFace? Or core parts of Eclipse UI? Or whatever framework you use in your projects?&lt;br /&gt;&lt;br /&gt;Let's stick with JFace to illustrate Code Recommenders' template completion engine. Assume that we want to use a JFace TableViewer inside our own view. When triggering SWT Templates on the literal "TableViewer" Eclipse tells you that there are no matching SWT templates (well, not a big surprise, eh?) :&lt;br /&gt;&lt;br /&gt;&lt;a href="https://lh4.googleusercontent.com/-gMrAXkaIUb8/TWzeFa0WofI/AAAAAAAAADo/G23hjIlNOHU/s1600/No_SWTTemplates_for_jface.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh4.googleusercontent.com/-gMrAXkaIUb8/TWzeFa0WofI/AAAAAAAAADo/G23hjIlNOHU/s1600/No_SWTTemplates_for_jface.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;But the question is: Couldn't we generate something similar to SWT Templates for every other framework too? Automatically? Maybe by just looking on how others used the APIs before?&lt;br /&gt;&lt;br /&gt;Right, that's Code Recommenders' template completion engine!&amp;nbsp;The idea behind our template engine is to identify common usage patterns from example code and to create something similar to SWT templates for every type we came across when analyzing code examples.&lt;br /&gt;&lt;br /&gt;The result of this is shown below: The screenshots show the same situation as above, but just with our example-driven template completion engine and its proposals for JFace TableViewer:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-crv7ZpeppkY/TWzfK4-aS2I/AAAAAAAAADs/uUAbitaLS_w/s1600/DynamicTemplate1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-crv7ZpeppkY/TWzfK4-aS2I/AAAAAAAAADs/uUAbitaLS_w/s1600/DynamicTemplate1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="https://lh6.googleusercontent.com/-crv7ZpeppkY/TWzfK4-aS2I/AAAAAAAAADs/uUAbitaLS_w/s640/DynamicTemplate1.png" width="640" /&gt; &lt;/a&gt;&lt;a href="https://lh5.googleusercontent.com/-mmA-VeG2tWM/TWzfL0ydh_I/AAAAAAAAADw/T_ip4wIUzCs/s1600/DynamicTemplate2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;a href="https://lh5.googleusercontent.com/-mmA-VeG2tWM/TWzfL0ydh_I/AAAAAAAAADw/T_ip4wIUzCs/s1600/DynamicTemplate2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="238" src="https://lh5.googleusercontent.com/-mmA-VeG2tWM/TWzfL0ydh_I/AAAAAAAAADw/T_ip4wIUzCs/s640/DynamicTemplate2.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Neat, isn't it? Well, as you might see, these templates are not always as perfect as hand-crafted examples but good enough to be valuable, right? What do you think? Do you like it? Let us know.&lt;br /&gt;&lt;br /&gt;And as you may expect from call completion: Of course these templates adopt themselves based on what you have typed before! See this screencast for a detailed example of this:&lt;br /&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;iframe allowfullscreen="" frameborder="0" height="510" src="http://www.youtube.com/embed/xfG1KnsG4dI?rel=0" title="YouTube video player" width="640"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;Many thanks to Stefan Henß who did an amazing job to integrate Code Recommenders intelligent call completion engine into this pretty neat templates completion engine!&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;Where do I get it?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;If you have Code Recommenders 0.1 installed already&lt;/span&gt;&lt;span class="Apple-style-span"&gt; you can simply choose Help &amp;gt; Check for Updates in Eclipse.&lt;/span&gt; &lt;span class="Apple-style-span"&gt;Otherwise you can get it from the &lt;/span&gt;&lt;b&gt;Eclipse Marketplace&lt;/b&gt;&lt;span class="Apple-style-span"&gt; or from our update site:&lt;/span&gt;&lt;br /&gt;http://download.eclipse.org/recommenders/updates/dev/. You may also check the &lt;a href="http://eclipse.org/recommenders/documentation/completion"&gt;project homepage&lt;/a&gt; for more screencasts one code recommenders.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;It's a &lt;b&gt;drop!&amp;nbsp;&lt;span class="Apple-style-span" style="font-size: small;"&gt;(not a release)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;To avoid any confusions we had with our first drop, we want to explicitly state that we are currently publishing &lt;b&gt;drops&lt;/b&gt; only but &lt;b&gt;no releases&lt;/b&gt; as defined by the Eclipse Incubator guidelines.&amp;nbsp;Before we can officially &lt;i&gt;release&lt;/i&gt; new versions of Code Recommenders we have to pass an official&amp;nbsp;&lt;i&gt;release review&lt;/i&gt;&amp;nbsp;by the Eclipse EMO (read more about  that &lt;a href="http://wiki.eclipse.org/Development_Resources/HOWTO/Release_Reviews"&gt;here&lt;/a&gt;). So far we didn't request a release review because some dependencies are under examination by the IP team - but should do so for later versions to avoid further confusion :-)&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;What's next?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;For 0.3 the goal is to stabilize the current tool suite. Thus do no hesitate to file bugs against the project. The more the better!&lt;br /&gt;&lt;br /&gt;Also some exciting news:&lt;br /&gt;We will start collaboration with UC Irvine's &lt;a href="http://goo.gl/tmqck"&gt;Sourcer Research Group&lt;/a&gt;&amp;nbsp;- a research group which has an excellent body of knowledge in how to create next generation of code search engines. &amp;nbsp;This will be an exciting project - we will blog about it separately when more details are out. But just to let them know that you like the idea: &lt;a href="http://goo.gl/tmqck"&gt;Click this link&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;Johannes &amp;amp; Marcel&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1479535086136999079-2850844924025649543?l=code-recommenders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/2850844924025649543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-recommenders.blogspot.com/2011/03/eclipse-code-recommenders-02.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/2850844924025649543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/2850844924025649543'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/2011/03/eclipse-code-recommenders-02.html' title='Eclipse Code Recommenders 0.2!'/><author><name>Marcel Bruch</name><uri>https://profiles.google.com/100908752439953740476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-i2lFK0vZDP8/AAAAAAAAAAI/AAAAAAAAAwA/IZJzvq1KhBk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh3.googleusercontent.com/-5XNnPhfX77k/TVqEEv4WYrI/AAAAAAAAAo8/16oqQy5ia_8/s72-c/recommenders.logo.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1479535086136999079.post-2552879527286548199</id><published>2011-02-15T18:52:00.006+01:00</published><updated>2011-02-16T17:36:28.591+01:00</updated><title type='text'>Eclipse Code Recommenders 0.1!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-5XNnPhfX77k/TVqEEv4WYrI/AAAAAAAAAo8/16oqQy5ia_8/s1600/recommenders.logo.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="236" src="http://1.bp.blogspot.com/-5XNnPhfX77k/TVqEEv4WYrI/AAAAAAAAAo8/16oqQy5ia_8/s640/recommenders.logo.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;We are happy to announce the first&amp;nbsp;&lt;s&gt;release&lt;/s&gt;&amp;nbsp;drop of Code Recommenders as Eclipse project! &amp;nbsp;It's just 4 weeks ago that the project was provisioned - but quite a lot has changed since.&lt;br /&gt;&lt;br /&gt;During last weeks Code Recommenders stepped out of its fairly ad hoc build and test process and moved towards a somewhat more mature and defined process. We'll see whether the love we put into the build system pays out in future :-)&lt;br /&gt;&lt;br /&gt;Apropos love: The project website is up with a new project logo and new screencasts. Please check out&amp;nbsp;&lt;a href="http://eclipse.org/recommenders/"&gt;eclipse.org/recommenders/&lt;/a&gt;&amp;nbsp;and read&amp;nbsp;&lt;a href="http://eclipse.org/recommenders/about/logo"&gt;eclipse.org/recommenders/about/logo&lt;/a&gt;&amp;nbsp;for an explanation of the logo. We are curios to hear how you like website and logo!&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;But despite all this, let's get to the nitty-gritty stuff. What has changed in the code?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Okay, okay... let's get to the important stuff!&lt;br /&gt;&lt;br /&gt;The guiding principle for the first &lt;s&gt;releases&lt;/s&gt;&amp;nbsp;drops of Code Recommenders is "It shouldn't hurt!" This means we spent most of the time on improving performance.&lt;br /&gt;&lt;br /&gt;For instance, a&amp;nbsp;lot effort has been spent on making Code Recommenders' code completion &lt;b&gt;fast&lt;/b&gt;. There is still some extra overhead when a recommendation model has to be loaded the first time, but after that, computing &amp;nbsp;recommendations for these types takes 10-50 milliseconds only! Compared to previous versions this is at least one order of magnitude faster!&lt;br /&gt;&lt;br /&gt;Furthermore, given that most of the time is spent (re-) doing work that JDT code completion has done before (computing proposals, figuring out which completion kind was requested etc.), there is quite a lot potential push performance down to just a few milliseconds! The pure recommendation process is that fast!&lt;br /&gt;&lt;br /&gt;What else changed? Let's look at the screenshots below:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Code Completion on Variables:&lt;/b&gt;&lt;br /&gt;Well, this stayed the same compared to previous versions. Thus, just for completeness:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-OVwYRxMgoR8/TVq_07EtwCI/AAAAAAAAApM/y3TeTsoQ-1c/s1600/recommenders-completion-on-field.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-OVwYRxMgoR8/TVq_07EtwCI/AAAAAAAAApM/y3TeTsoQ-1c/s1600/recommenders-completion-on-field.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Of course, this works with prefix tokens as well:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-LtJhntBd5FA/TVq_xDvmmyI/AAAAAAAAApI/kDayQfRdtdI/s1600/recommenders-completion-on-local.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-LtJhntBd5FA/TVq_xDvmmyI/AAAAAAAAApI/kDayQfRdtdI/s1600/recommenders-completion-on-local.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Completion in Anonymous Inner Classes:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;This is pretty new - and fast! Whenever you trigger code completion on variables even declared in an enclosing class, Code Recommenders can propose you a set of likely methods for this&amp;nbsp;context too.&lt;/div&gt;&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/-MckqCDf_rVI/TVp8QXzzShI/AAAAAAAAAog/pwbJDBMcc4w/s1600/recommenders-completion-on-local-from-nested.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-MckqCDf_rVI/TVp8QXzzShI/AAAAAAAAAog/pwbJDBMcc4w/s1600/recommenders-completion-on-local-from-nested.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Completion on This:&lt;/b&gt;&lt;br /&gt;Maybe obvious but somewhat tricky to implement is &lt;i&gt;this:&lt;/i&gt;&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/-Qqnr1XluMYA/TVq6g9tglNI/AAAAAAAAApA/sEKQTDKu5eU/s1600/recommenders-completion-on-this.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-Qqnr1XluMYA/TVq6g9tglNI/AAAAAAAAApA/sEKQTDKu5eU/s1600/recommenders-completion-on-this.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Completion on Anonymous Method Returns:&lt;/b&gt;&lt;br /&gt;Earlier versions of Code Recommenders required you assign anonymous types to local variables before anything was proposed. This is history now:&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/-P3uF2j_rPJ8/TVp8RMfJR7I/AAAAAAAAAoo/NKNF-bwiibg/s1600/recommenders-completion-on-method-return.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-P3uF2j_rPJ8/TVp8RMfJR7I/AAAAAAAAAoo/NKNF-bwiibg/s1600/recommenders-completion-on-method-return.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: left;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: left;"&gt;&lt;b&gt;Completion on Class Bodies:&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: left;"&gt;Want to know which methods you may override in the given class? Here you go:&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://3.bp.blogspot.com/-P3uF2j_rPJ8/TVp8RMfJR7I/AAAAAAAAAoo/NKNF-bwiibg/s1600/recommenders-completion-on-method-return.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/-iCm8rThZl1A/TVp8PwG9kHI/AAAAAAAAAoY/fn-hpkCvxaI/s1600/recommenders-completion-on-class-body.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-iCm8rThZl1A/TVp8PwG9kHI/AAAAAAAAAoY/fn-hpkCvxaI/s1600/recommenders-completion-on-class-body.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Cool! What else changed?&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The configuration. Code Recommenders is now &lt;b&gt;enabled&lt;/b&gt; on a &lt;b&gt;per project&lt;/b&gt; basis. Thus to enable Code Recommenders you have to &lt;i&gt;either&lt;/i&gt;:&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Enable Code Recommenders via code completion shown below:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-yfgbtegmWRQ/TVp8SWbtb2I/AAAAAAAAAo0/CZJl2xPpYbU/s1600/recommenders-enable-recommenders-completion.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-yfgbtegmWRQ/TVp8SWbtb2I/AAAAAAAAAo0/CZJl2xPpYbU/s1600/recommenders-enable-recommenders-completion.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;or by selecting &lt;i&gt;Add Recommenders Nature&lt;/i&gt; from &amp;nbsp;the project's context menu:&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/-omKj-yRkprY/TVp8Ss6Am8I/AAAAAAAAAo4/ZSImHQrXfxI/s1600/recommenders-enable-recommenders-context-menu.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="332" src="http://3.bp.blogspot.com/-omKj-yRkprY/TVp8Ss6Am8I/AAAAAAAAAo4/ZSImHQrXfxI/s400/recommenders-enable-recommenders-context-menu.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Can I Use It For My Projects? Which Frameworks Are Supported?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For this &lt;s&gt;release&lt;/s&gt;&amp;nbsp;drop we worked on performance and IP cleanliness. Over the next &lt;s&gt;releases&lt;/s&gt;&amp;nbsp;drops we will add more and more frameworks. Luckily, the guys around &lt;a href="http://eclipsesource.com/en/yoxos/"&gt;Yoxos&lt;/a&gt;&amp;nbsp;/&amp;nbsp;&lt;a href="http://eclipsesource.com/"&gt;EclipseSource&lt;/a&gt;&amp;nbsp;support our mining efforts by providing us with tons of example applications. Many thanks to the team around Jochen Krause, Jordi Böhme Lopez - and Holger Staudacher as the &lt;i&gt;man-in-the-middle&lt;/i&gt;&amp;nbsp;supporting us with tips and tricks in many ways :-)&lt;br /&gt;&lt;br /&gt;To see which frameworks are currently well supported please checkout this temporary listing &lt;a href="http://eclipse.org/recommenders/documentation/completion/"&gt;here&lt;/a&gt;. We will provide more detailed statistics as soon as we have the new data collection framework online. Promised.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Where do I get it?&lt;/span&gt;&lt;br /&gt;Pick it from the Eclipse marketplace or direct your Eclipse update client to this update site: http://download.eclipse.org/recommenders/updates/dev&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;What Comes Next?&lt;/span&gt;&lt;br /&gt;Exciting features are almost ready:&lt;br /&gt;&lt;br /&gt;Andreas Kaluza further improve the call chain completion as described in &lt;a href="http://code-recommenders.blogspot.com/2010/12/how-do-i-get-instance-of.html"&gt;this post&lt;/a&gt;. This feature will probably be part of the next &lt;s&gt;release&lt;/s&gt;&amp;nbsp;drop.&lt;br /&gt;&lt;s&gt;&lt;/s&gt;&lt;br /&gt;&lt;br /&gt;Stefan Henß' templates completion engine (somewhat similar to the SWT templates engine but driven by the calls recommender engine) is almost ready for &lt;s&gt;release&lt;/s&gt;&amp;nbsp;next drop.&lt;br /&gt;&lt;br /&gt;But there is quite a lot in the pipeline... stay tuned.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Special Thanks&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;First, the Code Recommenders team now consists of two full time committers (and a bunch of students :-)). Johannes Lerch joined me back in December and has made a fantastic job since then. My thanks to him for his great passion on working on code recommenders' website, build/test system and in particular for improving code recommenders.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Second, I wanna thank the Eclipse IP team, namely Sharon Corbett and Gunnar Wagenknecht, who already spent quite some time on checking our dependencies - and will probably spent much more time later on. Thanks!&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Third, thanks to my project mentor Chris Aniszczyk for pushing me through the IP process and initial steps, and thanks to Jochen Krause and Ralph Mueller for the meetings and discussions on Code Recommenders.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Please enjoy this &lt;s&gt;release&lt;/s&gt; &lt;s&gt;update&lt;/s&gt; drop but report all errors (even the smallest one) to the &lt;a href="http://eclipse.org/forums/eclipse.recommenders"&gt;forum&lt;/a&gt; or directly to our bugzilla!&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;Marcel&lt;br /&gt;&lt;br /&gt;P.S.: Say it thousand times: "It's a drop, it's a drop, it's a drop..." until there is a official review by the EMO :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1479535086136999079-2552879527286548199?l=code-recommenders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/2552879527286548199/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-recommenders.blogspot.com/2011/02/eclipse-code-recommenders-01.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/2552879527286548199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/2552879527286548199'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/2011/02/eclipse-code-recommenders-01.html' title='Eclipse Code Recommenders 0.1!'/><author><name>Marcel Bruch</name><uri>https://profiles.google.com/100908752439953740476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-i2lFK0vZDP8/AAAAAAAAAAI/AAAAAAAAAwA/IZJzvq1KhBk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-5XNnPhfX77k/TVqEEv4WYrI/AAAAAAAAAo8/16oqQy5ia_8/s72-c/recommenders.logo.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1479535086136999079.post-4011740061104816597</id><published>2010-12-29T00:28:00.047+01:00</published><updated>2011-01-03T12:00:06.137+01:00</updated><title type='text'>How do I get an instance of ... IStatuslineManager?</title><content type='html'>As of yesterday the Code Recommenders Demo Tour 2010 is over. This year I had the pleasure to talk at JAX, Andrena Developers Days, Eclipse Summit, FoSER, as well as on several (five or so?) Eclipse demo camps in Darmstadt, Bonn, Kassel, Dortmund and Karlsruhe. Further talks have be given by my colleague Martin at ECOOP and MSR. Quite a lot of events but is was fun and my pleasure to talk to all these audiences. Thanks for your interest in code recommenders and thank you to the organizers of these events. 2011 will be a great year: there are already a few talks scheduled for Java User Groups and others in January, February and March and I'm looking forward to these events. See you there in 2011!&lt;br /&gt;&lt;br /&gt;However, aside traveling and talking about code recommenders we also worked on several new features - one of which I want to give a preview in this post. It's a feature I was looking for several years now and now it's there!&lt;br /&gt;&lt;br /&gt;Whenever coding, how often did you spent hours on finding a path in the API jungle that returns you a highly required instance of a certain type? For Eclipse developers one such example might be&lt;br /&gt;&lt;br /&gt;&lt;b&gt;"How do I get an instance of an IStatusLineManager inside my Eclipse View?"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_HyaSneawrU8/TRpaPGeDC5I/AAAAAAAAAns/gZ7kfJqFu8g/s1600/Screen+shot+2010-12-28+at+22.43.51.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="215" src="http://1.bp.blogspot.com/_HyaSneawrU8/TRpaPGeDC5I/AAAAAAAAAns/gZ7kfJqFu8g/s640/Screen+shot+2010-12-28+at+22.43.51.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Personally, it took me more than half an hour to figure out how to obtain such an &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;IStatusLineManager&lt;/span&gt; when doing it the first time. Most of the time I spent in manually traversing the Eclipse API jungle to find a method call chain that would return me an instance of the requested &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;IStatusLineManager&lt;/span&gt;. The tough part in traversing the API call graph is that my base class &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;ViewPart&lt;/span&gt; already provides more than 50 methods I might (!) call - not counting the methods I might invoke on all accessible fields and locals!&lt;br /&gt;&lt;br /&gt;&lt;i&gt;"Okay, but how hard can it be to scan 50 methods?"&lt;/i&gt; you say. Let's do some math. The call chain I was searching was three hops away. Each method gave me in average 20 more methods to invoke. Summing things up for a call chain of length 2 only, I already ended up in 50*20=1000 potential call chains to check! Make a guess how many call chains to check for a call chain of length 3... (granted, it is much more clever to check the Javadoc uses pages of each accessible type to reduce the search scope.)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The call chain I was looking for was &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;this.getViewSite().getActionBars().getStatusLineManager()&lt;/span&gt;. Simple for the expert who knows the API. Challenging to figure out for a developer new to the framework.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I guess, you have been in many very similar situations, right? Haven't you ever thought &lt;i&gt;"Damn, couldn't someone create a smart completion engine that does this **** tedious search for me?"&lt;/i&gt; Actually there are some guys who did. They created a fully automated call chain completion engine that searches the API jungle for all possible call chains that - starting from something that is available in your active working context - results in an instance of the requested type (like IStatusLineManager in the example above). This idea was developed by Naiyana Sahavechaphan, Kajal Claypool, and others in 2006 and their tool XSnippet was developed for Eclipse. Although an amazing idea and cited many times in academic world, the idea behind XSnippet never made it into Eclipse. But I can hear IntlliJ users yelling &lt;a href="http://www.jetbrains.com/idea/features/code_assistance.html#Chained_Java_Code_Completion"&gt;"Yeah, we have this features for years already!"&lt;/a&gt; ... right ... sad enough. Time to close that gap.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Java call chain completion is now available for Eclipse!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_HyaSneawrU8/TRpnWMVdP5I/AAAAAAAAAnw/ohC1M2cAjmI/s1600/Screen+shot+2010-12-28+at+23.40.01.png"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_HyaSneawrU8/TRpnWMVdP5I/AAAAAAAAAnw/ohC1M2cAjmI/s640/Screen+shot+2010-12-28+at+23.40.01.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Whenever you tip &lt;i&gt;ctrl+space&lt;/i&gt; twice now, you get this nice completion window which contains all call sequences that will result in an instance of the requested type on the left-hand-side of an assignment. Note that the exact behavior can (needs to) be configured in Eclipse Preferences as depicted below.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_HyaSneawrU8/TRpod2pCcOI/AAAAAAAAAn0/axFOAh1_uJ0/s1600/Screen+shot+2010-12-28+at+23.44.53.png"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_HyaSneawrU8/TRpod2pCcOI/AAAAAAAAAn0/axFOAh1_uJ0/s640/Screen+shot+2010-12-28+at+23.44.53.png" /&gt;&lt;/a&gt;&lt;br /&gt;The call chain completion is currently under active development by &lt;b&gt;Gary Fritz&lt;/b&gt; and &lt;b&gt;Andreas Kaluza&lt;/b&gt;. Thanks to you both for your superb work! They made available a prototype implementation of their call chain completion engine. If you wanna check out the current prototype simply download it from &lt;a href="http://goo.gl/fMHfh"&gt;http://goo.gl/fMHfh&lt;/a&gt;, unzip it into your eclipse/dropins/ folder, restart Eclipse and configure code completion as shown above. There is also a short demo video showing code recommenders' call chain completion in action &lt;a href="http://goo.gl/aTgTX"&gt;http://goo.gl/aTgTX&lt;/a&gt;. Please note that this is a sneak preview and as such we (Gary, Andreas, and me) appreciate all your comments, bug reports and feature requests! The final version will come along with the first incubator release of Eclipse Code Recommenders. To make this tool as helpful as possible, please comment on this idea and tool, tell your friends, and don't forget to send all bugs and feature requests to our &lt;a href="http://goo.gl/cyyzt"&gt;issue tracker&lt;/a&gt;. Don't be quiet - let us know what you think about this idea. Your feedback motivates!&lt;br /&gt;&lt;h6 class="uiStreamMessage" data-ft="{&amp;quot;type&amp;quot;:&amp;quot;msg&amp;quot;}" style="font-family: inherit; font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Is this all?&lt;/span&gt;&lt;/h6&gt;&lt;b&gt;No, reimplementing XSnippet is just the beginning.&lt;/b&gt; Can you imagine what happens when developers start sharing usage statistics for such code snippets among each other - or even share their own code snippets in a central snippet repository? We could create tons of extremely valuable code snippets for our daily work and - in combination with smart completion engines that know what we need and how to leverage these knowledge base - provide you with code snippets you actually need for your task at hand! This is where we go! Stay tuned... we are working hard on this vision!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;All the best,&lt;br /&gt;Marcel&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1479535086136999079-4011740061104816597?l=code-recommenders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/4011740061104816597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-recommenders.blogspot.com/2010/12/how-do-i-get-instance-of.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/4011740061104816597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/4011740061104816597'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/2010/12/how-do-i-get-instance-of.html' title='How do I get an instance of ... IStatuslineManager?'/><author><name>Marcel Bruch</name><uri>https://profiles.google.com/100908752439953740476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-i2lFK0vZDP8/AAAAAAAAAAI/AAAAAAAAAwA/IZJzvq1KhBk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_HyaSneawrU8/TRpaPGeDC5I/AAAAAAAAAns/gZ7kfJqFu8g/s72-c/Screen+shot+2010-12-28+at+22.43.51.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1479535086136999079.post-2426205171530696469</id><published>2010-11-10T21:37:00.000+01:00</published><updated>2010-11-10T21:37:58.619+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='project proposal'/><category scheme='http://www.blogger.com/atom/ns#' term='code recommenders'/><title type='text'>Gathering Community... now!</title><content type='html'>Finally, Eclipse Code Recommenders has been &lt;a href="http://www.eclipse.org/proposals/code-recommenders/"&gt;proposed&lt;/a&gt; officially by the Eclipse Foundation today. We are now in the &lt;i&gt;&lt;a href="http://wiki.eclipse.org/Development_Resources/HOWTO/Proposal_Phase"&gt;Gathering Community Phase&lt;/a&gt;&lt;/i&gt; which precedes the &lt;i&gt;&lt;a href="http://wiki.eclipse.org/Development_Resources/HOWTO/Creation_Reviews"&gt;Creation Review&lt;/a&gt;&lt;/i&gt;. But what exactly is the goal of this phase?&lt;br /&gt;&lt;br /&gt;Basically it's a reality check that aims to figure out whether there is a community which is interested in the project. More formally, the &lt;a href="http://www.eclipse.org/projects/dev_process/development_process_2010.php#6_2_2_Proposal"&gt;Eclipse Development Process&lt;/a&gt; says "&lt;i&gt;The proposers, in conjunction with the destination PMC and  the community, collaborate in public to enhance, refine, and clarify  the proposal&lt;/i&gt;". And "w&lt;i&gt;hen the proposers and the EMO are confident that the proposers have  sufficient community support for the proposal, the process can progress  to the next step: the &lt;a href="http://wiki.eclipse.org/Development_Resources/HOWTO/Creation_Reviews" title="Development Resources/HOWTO/Creation Reviews"&gt;Creation Review&lt;/a&gt;.&lt;/i&gt;"&lt;br /&gt;&lt;br /&gt;So, here we go :-) The proposal is available &lt;a href="http://www.eclipse.org/proposals/code-recommenders/"&gt;here&lt;/a&gt;. It presents a set of of five initial (groups of) tools we want to bring to Eclipse:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;Intelligent Code Completion Systems&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Smart Template Engines&lt;/b&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Usage-Driven and Crowdsourced API Documentation&lt;/b&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Stacktrace Search Engine&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;API Misuse / Bug Detector&lt;/b&gt;&lt;/li&gt;&lt;/ol&gt;Read more about these tools in the &lt;a href="http://www.eclipse.org/proposals/code-recommenders/"&gt;project proposal&lt;/a&gt;, and send your comments, questions, support/ "I like" statements etc. to the &lt;a href="http://www.eclipse.org/forums/index.php?t=thread&amp;amp;frm_id=202"&gt;proposals forum&lt;/a&gt; - and don't hesitate to ask tough questions :-)&lt;br /&gt;&lt;br /&gt;We'd also appreciate to hear about your ideas and personal visions of how code recommenders may/should improve Eclipse. &lt;br /&gt;&lt;br /&gt;And one last favor: Please help spread the word, for instance, via twitter, blogs, facebook or good old email! Thanks!&lt;br /&gt;&lt;br /&gt;All the best,&lt;br /&gt;Marcel&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1479535086136999079-2426205171530696469?l=code-recommenders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/2426205171530696469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-recommenders.blogspot.com/2010/11/gathering-community-now.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/2426205171530696469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/2426205171530696469'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/2010/11/gathering-community-now.html' title='Gathering Community... now!'/><author><name>Marcel Bruch</name><uri>https://profiles.google.com/100908752439953740476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-i2lFK0vZDP8/AAAAAAAAAAI/AAAAAAAAAwA/IZJzvq1KhBk/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1479535086136999079.post-701485065310350212</id><published>2010-10-29T00:33:00.005+02:00</published><updated>2010-10-29T12:53:34.868+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='project proposal'/><title type='text'>Code Recommenders Goes Eclipse!</title><content type='html'>&lt;span style="font-size: x-large;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;Today is probably one of the most exciting days I had in the last year and a half. The EMO gave its ack for officially proposing&lt;i&gt; Code Recommenders&lt;/i&gt; as Eclipse Incubator Project. &lt;/span&gt;&lt;span style="font-size: small;"&gt;For me this is a welcome point in time to look back what happened in the past 18 months and to give an outline of what will happen in the next 18 months (or so...:-) ).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;The Past.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-large;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-large;"&gt;&lt;span style="font-size: small;"&gt; Last year in July I decided to present my research project &lt;i&gt;Code Recommenders&lt;/i&gt;&lt;/span&gt;&lt;/span&gt; the first time on an Eclipse Demo Camp in town (Darmstadt, organized by Jochen Hiller from T-Systems) - just to see whether people would like or dislike the idea of having tools that learn what is relevant for a developer and make this knowledge available in a somewhat "&lt;a href="http://code-recommenders.blogspot.com/2010/05/its-all-about-intelligent-code.html"&gt;educated version of code completion&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;Well, I must admit that my first demo left some remarkable room for improvements... However, after my presentation I had nice and motivating discussions with Bernd Kolb and others which encouraged me to continue my work and to intensify building tools that leverage various kinds of collective intelligence and to integrate them into Eclipse.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;At the beginning of September my advisor received an email of Ralph Mueller in which he invited several universities to submit a poster to ESE 2009 - and we submitted. This is the poster we presented at ESE 2009:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_HyaSneawrU8/TMna6HOtsCI/AAAAAAAAAnQ/bE32duAHIsw/s1600/poster.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="451" src="http://4.bp.blogspot.com/_HyaSneawrU8/TMna6HOtsCI/AAAAAAAAAnQ/bE32duAHIsw/s640/poster.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Roughly at the same time my &lt;span lang="EN-US" style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; line-height: 115%;"&gt;colleague &lt;/span&gt;Martin Monperrus and I worked on a paper how to &lt;a href="http://code-recommenders.blogspot.com/2010/03/problem-of-incomplete-javadocs.html"&gt;extend javadocs by mined real-usage patterns&lt;/a&gt; and somehow Martin managed to get in contact with Boris Bokowski who reviewed some of our mined documentation snippets. After some mails we met in Darmstadt and we presented him the project and the current tools we had developed so far. But he wasn't completely hooked. Okay, back to training :-P&lt;br /&gt;&lt;br /&gt;A few weeks later I received a mail from S&amp;amp;S Editor Hartmut Schlosser who asked me whether I would like to present code recommenders on a November Eclipse Demo Camp in Frankfurt. This was pretty cool experience: This was my first invited talk. Maybe this was another highlight in the past year :-P&lt;br /&gt;&lt;br /&gt;Summit 2009: The conference was pretty cool and the poster session was real fun. Starting at 6PM I rolled up my poster and quit service at 10PM. I got to know quite a lot well-known people from Eclipse. Among them Jochen Krause from EclipseSource whose Yoxos platform was incredibly valuable for my studies because it contained thousands of plug-ins to analyze and to learn from. Over the whole evening I received a lot of input of what people liked and disliked, what they say is missing in current IDEs or had just nice and encouraging chats.&lt;br /&gt;&lt;br /&gt;A few weeks later I attended the Eclipse Demo Camp in Frankfurt organized by Lars Martin from Itemis. This time the presentation was a lot better than a few months ago in Darmstadt and I had the pleasure to meet Stephan and Leif from Andrena (&lt;a href="http://code.google.com/p/projectusus/"&gt;Project Usus&lt;/a&gt;) , Hartmut and Sebastian Meyen from S&amp;amp;S, Karsten Thoms and Benny Muskalla. We had a nice evening in a Greek tavern, lots of good discussions, and frosty beverages.&lt;br /&gt;&lt;br /&gt;A few weeks later Hartmut asked me to write an &lt;a href="http://it-republik.de/jaxenter/artikel/IDE-2.0-2671.html"&gt;online-article about code recommenders &lt;/a&gt;for JAX which was a huge honor. This article made it into the February edition of the German Eclipse Magazin. Another huge honor - and pleasure - for me.&lt;br /&gt;&lt;br /&gt;Next, I received the opportunity to give a short talk at JAX 2010. There I chat up Mik Kersten from Mylyn and he &lt;span class="bold"&gt;took his time&lt;/span&gt; and patience, stepped through the slides of my talk (in an incredible speed :-) ) and checked out the prototype on my laptop. Then he sat back, looked at me and asked: "And what now? What are your plans?" Hmm, plans... "What do you think? Would it be cool for Eclipse?" "Of course!" - and there the idea of becoming an Eclipse project materialized much more than ever before...&lt;br /&gt;&lt;br /&gt;To shorten the remainder. In June I had a long talk at Andrena Developer's Day in Karlsruhe where I presented the complete tools suite developed so far. In July I had the pleasure to assist Jochen Hiller in organizing the Eclipse Demo Camp in Darmstadt and present code recommenders again on a demo camp. This November I'm on tour: Eclipse Demo Camps in &lt;a href="http://wiki.eclipse.org/Eclipse_DemoCamps_November_2010/Bonn"&gt;Bonn&lt;/a&gt;, &lt;a href="http://wiki.eclipse.org/Eclipse_DemoCamps_November_2010/Dortmund"&gt;Dortmund &lt;/a&gt;and &lt;a href="http://wiki.eclipse.org/Eclipse_DemoCamps_November_2010/Kassel"&gt;Kassel&lt;/a&gt;. BTW: if you are near these locations consider attending these demo camps which demo pretty interesting stuff!&lt;br /&gt;&lt;br /&gt;And I'm also very glad to present Eclipse Code Recommenders to the Eclipse Community at the Eclipse Summit Europe 2010:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.eclipsecon.org/summiteurope2010/static/image/friends/130x100_speaking.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.eclipsecon.org/summiteurope2010/static/image/friends/130x100_speaking.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Ok, that's a quick summary of the last 18 (Eclipse-centric) months. What has changed since the first demo? In the meanwhile we refined our implementations, developed new tools like bug detectors, new kinds of code search engines, stacktrace search engines, variuos code completion engines and many things more. The word 'We' may need some refinement: In the past three semesters more than 50 students supported the code recommenders project by various hands-ons, bachelor or master theses and spent innummerable hours in designing and implementing all these ideas. Many thanks to you doing all this great work!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;The Future?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;So &lt;/span&gt;what happens next? As I mentioned, the project proposal is underway and Code Recommenders will become an Eclipse Incubator. The proposal is available for review &lt;a href="http://wiki.eclipse.org/Recommenders/Proposal"&gt;here&lt;/a&gt;. However, the proposal hasn't been officially published yet because we are &lt;b&gt;seeking your voice &lt;/b&gt;to support this project!&lt;br /&gt;&lt;br /&gt;Thus, if you like the ideas described here in the blog or in the &lt;a href="http://wiki.eclipse.org/Recommenders/Proposal"&gt;project propsal&lt;/a&gt; tell your friends about this project proposal and &lt;span style="font-size: small;"&gt;&lt;b&gt;add a comment on this post containing your name &lt;/b&gt;&lt;/span&gt;so that we can put you on the list of &lt;i&gt;interested parties&lt;/i&gt; (or put your name on the wiki page directly)!&lt;br /&gt;&lt;br /&gt;Many thanks,&lt;br /&gt;Marcel&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1479535086136999079-701485065310350212?l=code-recommenders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/701485065310350212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-recommenders.blogspot.com/2010/10/code-recommenders-goes-eclipse-today-is.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/701485065310350212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/701485065310350212'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/2010/10/code-recommenders-goes-eclipse-today-is.html' title='Code Recommenders Goes Eclipse!'/><author><name>Marcel Bruch</name><uri>https://profiles.google.com/100908752439953740476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-i2lFK0vZDP8/AAAAAAAAAAI/AAAAAAAAAwA/IZJzvq1KhBk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_HyaSneawrU8/TMna6HOtsCI/AAAAAAAAAnQ/bE32duAHIsw/s72-c/poster.png' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1479535086136999079.post-5859063408095535052</id><published>2010-08-24T17:38:00.009+02:00</published><updated>2010-10-29T10:28:01.917+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ide 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='vision'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='project proposal'/><title type='text'>IDE 2.0: Bringing Collective Intelligence into Software Development</title><content type='html'>A few months ago Chris started a discussion about &lt;a href="http://aniszczyk.org/2010/03/11/eclipse-and-academia/"&gt;Eclipse and Academia&lt;/a&gt; and how Eclipse could support research projects to participate in the Eclipse Ecosystem. Furthermore, the upcoming &lt;a href="http://it-republik.de/jaxenter/eclipse-magazin-ausgaben/"&gt;Eclipse Magazin&lt;/a&gt; will also contribute to this discussion. However, the discussion how Eclipse could help and benefit from research projects is dangling. With this post, I would like to pick pick up Chris' blog post and present an idea how eclipse and research community could get together to create something (I think) very fancy...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In my last posts, I presented our preliminary work on improving IDEs leveraging the hidden knowledge available in example code that uses other APIs (visit &lt;a href="http://code.google.com/a/eclipselabs.org/p/code-recommenders/"&gt;code-recommenders@eclipselabs&lt;/a&gt; and the &lt;a href="http://www.stg.tu-darmstadt.de/research/core/"&gt;official project homepage&lt;/a&gt; for more details). A few weeks ago we wrote down our vision of how future IDEs should work---which you can find and comment below. This post is basically the preprint version of this paper (which got accepted today at the Working Conference "Future of Software Engieering Research") and we would love to get the your feedback to the vision we present here. As said above, we did a lot of work to get where we are today and the question is now: Should we continue to let the visions below come reality? Clearly, this vision will only work with a very vital community around the project - which I think can be found nowhere else than at Eclipse. But how do you feel about that? Just read the vision and tell us about your opinion (yes, I know it's longer than a standard post. Sorry for that but I hope it's worth reading ;-) ).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-large;"&gt;IDE 2.0: Collective Intelligence in Software Development&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Marcel Bruch, Eric Bodden, Martin Monperrus, and Mira Mezini&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Software Technology Group&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Department of Computer Science&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Technische Universität Darmstadt, Germany&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt; {bruch,bodden,monperrus,mezini}@cs.tu-darmstadt.de&lt;/b&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;ABSTRACT &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Today’s Integrated Development Environments (IDEs) only integrate the tools and knowledge of a single user and workstation. This neglects the fact that the way in which we develop and maintain a piece of software and interact with our IDE provides a rich source of information that can help ourselves and other programmers to avoid mistakes in the future, or improve productivity otherwise. We argue that, in the near future, IDEs will undergo a revolution that will significantly change the way in which we develop and maintain software, through integration of collective intelligence, the knowledge of the masses. We describe the concept of an IDE based on collective intelligence and discuss three example instantiations of such IDEs. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;1 Introduction&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Under the right circumstances, groups are remarkably intelligent and are often better than the smartest person in them. – James Surowiecki: Wisdom of the Crowds &lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;During the past decades, software systems have grown significantly in size and complexity, making software development and maintenance an extremely challenging endeavor. Integrated Development Environments (IDEs) greatly facilitate this endeavor by providing a convenient means to browse and manipulate a system’s source code and to obtain helpful documentation on Application Programming Interfaces (APIs). Yet, we argue that there is great space for improvement by exploiting collective intelligence, the knowledge of the masses. &lt;br /&gt;&lt;br /&gt;The leveraging of user data to build intelligent and user-centric web-based systems, commonly summarized as the Web 2.0, is the source of our inspiration. A Web 2.0 site allows its users to interact with each other as contributors to the website’s content, in contrast to websites where users are limited to the passive viewing of information that is provided to them. Web 2.0 examples include web-based communities, web applications, social-networking sites, video-sharing sites, wikis, blogs, mashups, and folksonomies. &lt;br /&gt;&lt;br /&gt;Amazon, for instance, creates recommendations based on purchase behaviors of its customers or finds interesting similar products based on how customers interact with search results. Netflix, a video-on-demand service, features a web application that leverages user ratings on movies to recommend likely interesting movies to other users. These systems have in common that they leverage crowds to continuously improve the quality of their services, either through implicit feedback (e.g., user click-through behaviors), explicit feedback (e.g., ratings for movies) or user-generated content (e.g., product reviews and movie critics). &lt;br /&gt;&lt;br /&gt;Today’s IDEs behave more like traditional “Web 1.0” applications in the way that they do not enable their users to contribute and share their knowledge with others, neither explicitly nor implicitly, and thus hinder themselves to effectively exchange knowledge among developers. What would it mean to bring collective intelligence into software development? Figure 1a shows the current state of the practice: software developers use IDEs that are “integrated” only in the sense that they integrate all tools necessary to browse, manipulate and build software on a single machine. If a programmer has a question about a particular piece of code, for instance an API, she has to browse the web for solutions—by hand. After she has found the solution and solved her problem, the newly gained knowledge is usually lost. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_HyaSneawrU8/THPjRQd5yrI/AAAAAAAAAnA/Ym75YYN7S6U/s1600/ide2.0.png"&gt;&lt;img height="344" src="http://4.bp.blogspot.com/_HyaSneawrU8/THPjRQd5yrI/AAAAAAAAAnA/Ym75YYN7S6U/s640/ide2.0.png" width="640" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Figure 1: Our vision: in the future, IDEs will be linked through global knowledge bases &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Figure 1b shows our vision of the near future: IDEs will support developers through integration with a global knowledge base. This knowledge base will receive information from implicit and explicit user feedback. By implicit feedback we mean anonymized usage data that the cross-linked IDEs will send to the knowledge base automatically and spontaneously (in the figure, we represent such spontaneous activity through dashed arrows). The knowledge base will also comprise explicit user feedback in the form of user-written documentation, error reports, manuals, etc. In this work, we will show that such data can help, for example, to improve ranking heuristics, or to focus developer activity. &lt;br /&gt;&lt;br /&gt;Crucially, the knowledge base itself is intelligent: it will use novel data-mining techniques to integrate the different sources of information to produce new information that has added value. For instance, if the knowledge base discovers that people who write an equals method in Java often write a hashCode method on the same type at the same time, or do so after a longer debugging session, then the knowledge base may be able to discover the important rule that, in Java, every type that implements equals should also implement hashCode, and that missing this rule likely causes bugs. &lt;br /&gt;&lt;br /&gt;The remainder of this paper is organized as follows. In Sec. 2, we materialize IDE 2.0 by discussing example intelligent IDE services that leverage implicit and explicit user feedback to aid programmers in everyday software-development tasks. We show that not only feedback data itself but in particular derived information, obtained through data mining, has the potential of greatly easing the software-development process as a whole. Moreover, as the data is persisted, it will survive over time, unlike today, where much information gets lost and needs to be re-discovered over and over again. In Sec.3, we materialize IDE 2.0 by drawing parallels between the main characteristics of IDE 2.0 and those of Web 2.0. Finally, Sec. 4 summarizes the paper.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;2 From IDE 1.0 towards IDE 2.0 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In the following we give three examples of how research in collective intelligence can improve existing IDE services. We split the discussion of each example into three sections. IDE 1.0 sections describe the state-of-the-art in today’s IDEs. Under IDE 1.5, we briefly summarize current research to improve IDE 1.0 services. IDE 2.0 sections discuss how collective intelligence could solve some of the issues of these approaches. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;Intelligent Code Completion &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE 1.0&lt;/b&gt;: Code completion is a very popular feature of modern IDEs, a life without which many developers find hard to imagine. One major reason for its popularity is that developers are frequently unaware of what methods they can invoke on a given variable. Here, code completion systems (CCSs) serve as an API browser, allowing developers to browse methods and select the appropriate one from the list of proposals. However, current completions are either computed by rather simplistic reasoning systems or are simply hard-coded. For instance, for method completion, CCSs only consider the receiver’s declared type. This often leads to an overwhelming number of proposals. Triggering code completion on a variable of javax.swing.JButton results in 381 method proposals. Clearly, developers only need a fraction of the proposed methods to make their code work. Code templates are an example for hard-coded proposals. Templates (like the Eclipse SWT Code Templates) serve as shortcuts and documentation for developers. Manual proposal definitions are labor intensive and error prone. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE 1.5:&lt;/b&gt; Researchers have recognized these issues. For instance, approaches exist that analyse client code to learn which methods the clients frequently use in certain contexts, and rearrange method proposals according to this notion of relevance [2]. Tools like XSnippet, Prospector and Parseweb [7 9 10] attempt to solve the issue of hard-coded code templates by also analyzing source code, identifying common patterns in code. Although obviously useful, these systems didn’t made it into current IDEs. We argue that the primary reason for this is the lack of a continuously growing knowledge base. To build reliable models, source-code based approaches require example applications and full knowledge about the execution environment (i.e., classpath, library versions etc.). However, finding a sufficiently large set of example projects is difficult and tedious, and creating models for new frameworks is too time-consuming yet. While such approaches can sufficiently support a few selected APIs, we argue that they do not scale when tens of thousands of APIs should be supported. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE 2.0:&lt;/b&gt; So, how can we build continuously improving code completion systems then? To solve the scalability problem, code completion systems must allow users to share usage information among each other in an anonymized and automated way—from within the developer’s IDE. This continuous data sharing allows recommender systems to learn models for every API that developers actually use. IDEs are very powerful when it comes to extracting information: they have access to information about the execution environment and about user interactions, even with respect to certain APIs. But the new, massive data sets derived from this information pose a challenge. We will likely require new algorithms to find reliable and valuable patterns in this data. Whatever means future code completion systems will use to build better recommendation models, the systems will be based on shared data. It will be the users who provide this data, and it is important to realize that, as the user base grows, the recommendation systems will be able to continuously improve over time, making intelligent completions that are useful for novice developers and experts alike. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;Example Code-Snippet Recommendations &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE 1.0:&lt;/b&gt; Source-code examples appear to be highly useful to developers, whenever the documentation of the API at hand is insufficient [8]. This is evident by the raise of several code search engines (CSEs) over the last few years, like Google Codesearch, Krugle, and Koders, just to name a few. However, current CSEs almost exclusively use standard information-retrieval techniques that were developed for text documents. While source code is text, it also bears important inherent structure. Disregarding this structure causes less effective rankings and misleading code summaries. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE 1.5:&lt;/b&gt; Researchers have presented a number of approaches [3 5 11] that improve certain aspects of CSEs. All these approaches exploit structure, like inheritance relations, method calls, type usages, control flow and more, however they face two severe problems. First, source code provides much more structure than text. Thus, ranking systems have to take into account many more features when building the final ranking for a search query. Consequently, it is hard to derive optimal weights for these features, so that the resulting scoring function will perform as well as possible. Often, a fixed scoring systems will perform "well enough" but not be optimal. Another issue with current CSEs is that they ignore the personal experience of the user who issued the query. Many current web search engines now support “personalized search”, which leverages the personal background and interests of a user to find documents that are likely to be interesting for this user, but not necessarily for others. Current CSEs lack such functionality. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE 2.0:&lt;/b&gt; How can one improve ranking and realize personalized search in CSEs? The key to solving both problems is to leverage implicit user feedback. To solve the manual-weight-tweaking problem of search engines, recent work [4] has shown that leveraging observations of how users interact with the search results can significantly improve the precision of existing search engines. The authors used the information whether or not the user inspects a search result to automatically adjust feature weights. This produces an optimized ranking where all inspected results are listed above those that the user did not investigate. To implement personalized code search engines, one can infer the personal background (or experience) of a developer by the code she has already written. Then, CSEs could first display code examples that are similar to examples previously explored or, on demand, code examples that allow the developer to learn new information. We are certain that IDE services in general, not only those that we discussed, can greatly benefit from leveraging implicit user feedback. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Extended Documentation &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE 1.0:&lt;/b&gt; Software engineers widely accept that documenting software is a tedious job. Especially open-source projects frequently lacks sufficient resources to produce comprehensive documentation. Both Sun and the Eclipse Foundation recently started to address this problem by opening their documentation platforms to their users. Eclipse asks its users to provide and update tutorials at the central Eclipse Wiki. Sun’s “Docweb” allows users to edit Javadoc API documentation, and to provide code examples or cross references to other interesting articles in the web. These tools aim to leverage a Wikipedia-style approach tailored to software documentation. Past experience has shown, however, that such systems often suffer from a lack of user participation. We believe that the primary cause for this lack of participation is the fact that people may not be willing to document APIs which they have no control over, because these APIs may change rapidly at any time: they may be completely outdated in just a few months. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE 1.5:&lt;/b&gt; Recent research therefore addresses the problem from another angle, enriching existing documentation with automatically mined documentation [1 6]. Such approaches identify frequent patterns or interesting relations in code, and generate helpful guidelines from these relations. However, generated documentation may not always be helpful. Like text mining, documentation mining uncovers any relation between code elements, no matter whether or not this relation is useful to consider. The problem is aggravated by the fact that it is sometimes the surprising relations that are the most useful. Another drawback of mining approaches is that they cannot provide rationales for their observations, leaving it up to the developer to make sense of the data. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;IDE 2.0:&lt;/b&gt; How could collective intelligence address the issues mentioned above? The key to a solution is a mixture of explicit user feedback and user-provided content. In the future, we expect generated documentation to be judged by thousands of users, enabling people to evaluate the quality of their services immediately—tool developers and documentation providers alike. Furthermore, we expect collective intelligence to enable us to migrate documentation from older to newer versions more easily. For example, when a new version of an API becomes available, explicit user feedback will make apparent which parts of the documentation remain valid for the newer version and which parts require updating. Explicit user feedback will also allow users to attach rationale to mined documentation, allowing the documentation to not only state that users must follow a certain principle but why. &lt;br /&gt;&lt;br /&gt;These examples are just the tip of the iceberg. We are confident that the software engineering research community will invent many more interesting techniques to generate, judge, and complete documentation. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;3 From Web 2.0 to IDE 2.0 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We have used the analogy to “Web 2.0” to indicate that this new generation of web applications and our view of future IDEs have something in common. In the following, we discuss the similarities between Web 2.0 and IDE 2.0 to make this analogy more concrete. &lt;br /&gt;&lt;br /&gt;In this section, we define a set of principles that we expect successful IDE 2.0 services to follow. Some of the concepts are paraphrased from Tim O’Reilly’s principles for successful Web 2.0, described in his article “What is Web 2.0?”. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. The Web as Platform.&lt;/b&gt; The web as platform is the core concept of Web 2.0. In various ways, clients and servers share data over the web. We expect the same to hold for future collaborative IDE 2.0 services. These services rely on client-side usage data and thus, the web is also fundamental to them. A notable difference between IDE 2.0 and Web2.0 is that IDEs offer a much larger spectrum of data and also allow for client-side pre-processing of data like static analysis code analysis. Such pre-processing may even be crucial to allow for proper privacy. Furthermore, one needs to distribute to clients recommendation models that are built on the server-side. Local databases or caches can increase the scalability of these systems; crucial, when dealing with millions of request per day. Whatever the particular technology may be, the web will be the platform for IDE 2.0. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Data is key.&lt;/b&gt; Data is key to any IDE 2.0 service. However, here we fundamentally differ from Tim O’Reilly’s understanding of who owns this data. In Web 2.0, data is the key factor for the success of an application over its competitors. In contrast, we strongly believe in Open Data: all collected data is publicly available. This fosters a vital ecosystem around the concepts of IDE 2.0 and enables sustainable research. Successfully IDE 2.0 services will use both raw data and derived knowledge will facilitate innovation instead of locking in data or users. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. Harnessing Collective Intelligence.&lt;/b&gt; Leveraging the wisdom of the crowds is the third fundamental concept of successful Web 2.0 applications—and same holds for IDE 2.0. The examples introduced in the previous section used either user-provided content (like source code, updated documentation or code snippets), implicit feedback (like user click-through data used to improve rankings), or explicit feedback (like ratings for judging the quality of relevance of generated documentation) to build new kind of services. It is important to recognize that, while individuals may be able to build these services, these services cannot unleash their potential without the crowds sharing their knowledge. Only with collective intelligence, IDE services like intelligent code completion, example recommenders or even smart documentation systems become possible. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. Rich User Experiences.&lt;/b&gt; The appearance of AJAX gave web applications a new look and feel, bringing web applications much closer to desktop applications than ever before. In the context of IDE 2.0, intelligent, context-sensitive recommender systems will evolve that recommend relevant APIs or documentation where appropriate and help to reduce the clutter in IDEs at the same time. However, providing a rich user experiences is fundamental for users to accept such services. Similar to Google Search, simple and intuitive interfaces seamlessly integrated into existing IDE concepts like code completion, quick fixes etc. are the major key to success. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;5. Lightweight Programming Models.&lt;/b&gt; In web 2.0, mashups (applications that combine several other (web) applications to build new services on top of existing ones) evolved, building new services the application developers never considered. Excellent IDE 2.0 services will encourage others to build their services on top of existing ones by providing public and easy-to-use APIs. Clearly, in the early days we expect such services to be data-driven, i.e., they will leverage the same data for enhancing several aspects of current IDEs or to port existing services to other IDEs. Note that Open Data is necessary to enable such services. However, over time, services will use other services to build what we call IDE mashups. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;4 Summary &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The concepts behind Web 2.0 are a great fit for future IDE services and we expect future services to meet at least one if not almost all of these properties. However, the Software Engineering research community has to play a key role in unleashing the full power of the crowds. First, and most importantly, it has to provide an appropriate environment for building and evaluating IDE 2.0 services. Strong partners like the Eclipse Foundation or Sun/Oracle already support and promote such new IDE concepts today, and their help will be crucial to providing access to large user communities in the future. But there is an incentive for these partners: they will profit from new exciter features, making the IDE itself appear very innovative. &lt;br /&gt;&lt;br /&gt;Second, the Software Engineering research community is the connective link between practitioners and researchers in machine learning. Most IDEs only contain instances of rather primitive machine-learning algorithms. It will be our job to identify the problems that developers face in their day-to-day work, to provide appropriate data as input for machine learners, and to evaluate and reintegrate these results into IDEs. Thus, IDE 2.0 research will create new fascinating and challenging applications of machine learning aside the current markets. &lt;br /&gt;&lt;br /&gt;To sum up, IDE 2.0 services have much potential to improve developer productivity and provide a fantastic playground for new algorithms. They bring together several research communities at the same time, to solve a new generation of challenges in software engineering. When tackling the problem now and in a farsighted, IDE 2.0 will be one of the major research areas of the near future. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;5 References &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;[1] Marcel Bruch, Mira Mezini, and Martin Monperrus. Improving the quality of framework subclassing directives. InMSR, 2010. &lt;br /&gt;&lt;br /&gt;[2] Marcel Bruch, Martin Monperrus, and Mira Mezini. Learning from examples to improve code completion systems.In FSE, 2009. &lt;br /&gt;&lt;br /&gt;[3] Reid Holmes and Gail C. Murphy. Using structural context to recommend source code examples. In ICSE, 2005. &lt;br /&gt;&lt;br /&gt;[4] Thorsten Joachims. Optimizing search engines using clickthrough data. In KDD, 2002. &lt;br /&gt;&lt;br /&gt;[5] Erik Linstead, Sushil Bajracharya, Trung Ngo, Paul Rigor, Cristina Lopes, and Pierre Baldi. Sourcerer: mining andsearching internet-scale software repositories. Data Min. Knowl. Discov., 18(2), 2009. &lt;br /&gt;&lt;br /&gt;[6] Fan Long, Xi Wang, and Yang Cai. Api hyperlinking via structural overlap. In FSE, 2009. &lt;br /&gt;&lt;br /&gt;[7] David Mandelin, Lin Xu, Rastislav Bodík, and Doug Kimelman. Jungloid mining: helping to navigate the api jungle.In PLDI, 2005. &lt;br /&gt;&lt;br /&gt;[8] Martin Robillard. What makes apis hard to learn? answers from developers. IEEE Software, 2009. &lt;br /&gt;&lt;br /&gt;[9] Naiyana Sahavechaphan and Kajal Claypool. Xsnippet: Mining for sample code. In OOPSLA, 2006. &lt;br /&gt;&lt;br /&gt;[10] Suresh Thummalapenta and Tao Xie. Parseweb: a programmer assistant for reusing open source code on the web.In ASE, 2007. &lt;br /&gt;&lt;br /&gt;[11] Hao Zhong, Tao Xie, Lu Zhang, Jian Pei, and Hong Mei. Mapo: Mining and recommending api usage patterns. InECOOP, 2009. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(Please note, this list is by far incomplete but a 4 pages limitation requires you to select just a few publications) &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;6 Disclaimer ;-)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This is a vision of what we want to achieve with the code recommenders project. So far you have seen preliminary versions of&lt;a href="http://code-recommenders.blogspot.com/2010/05/its-all-about-intelligent-code.html"&gt; intelligent code completion&lt;/a&gt;, &lt;a href="http://code-recommenders.blogspot.com/2010/03/problem-of-incomplete-javadocs.html"&gt;extendend javadocs&lt;/a&gt;, and &lt;a href="http://code-recommenders.blogspot.com/2010/07/why-is-google-codesearch-not-google-for.html"&gt;example code search&lt;/a&gt;. In the pipeline is a API misuse detector we will present in a few weeks. However, we are currently starting to make all these tools "ide 2.0-ready" and would propose this project as Eclipse Incubator project. But this project would need your help in many ways to be successful! Thus:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Let us know whether you like the idea and would support this project when becoming an open source / open data Eclipse Project. And even if you would not support it: Tells us what would prevent you from using it. If it is a technical issue I'm sure we can fix it. In other cases we would love to learn what causes "rumbling in the tummy" ;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you want to learn more about the project drop us a &lt;a href="mailto:bruch@cs.tu-darmstadt.de"&gt;mail &lt;/a&gt;and/or visit the &lt;a href="http://www.stg.tu-darmstadt.de/research/core/"&gt;project homepage&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;All the best,&lt;br /&gt;Marcel&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1479535086136999079-5859063408095535052?l=code-recommenders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/5859063408095535052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-recommenders.blogspot.com/2010/08/eclipse-and-academia-briding-gap.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/5859063408095535052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/5859063408095535052'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/2010/08/eclipse-and-academia-briding-gap.html' title='IDE 2.0: Bringing Collective Intelligence into Software Development'/><author><name>Marcel Bruch</name><uri>https://profiles.google.com/100908752439953740476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-i2lFK0vZDP8/AAAAAAAAAAI/AAAAAAAAAwA/IZJzvq1KhBk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_HyaSneawrU8/THPjRQd5yrI/AAAAAAAAAnA/Ym75YYN7S6U/s72-c/ide2.0.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1479535086136999079.post-3949684386951696661</id><published>2010-07-05T15:04:00.004+02:00</published><updated>2010-07-05T20:34:54.081+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='code examples  recommender'/><category scheme='http://www.blogger.com/atom/ns#' term='code search engine'/><title type='text'>Why is Google Codesearch not 'google for code search'?</title><content type='html'>Whenever we are searching some information in the web, we use Google to find it. Google is actually so popular that we often use ‘google’ as a synonym for searching the web – and sometimes we ask ourselves: “Who did we ask before Google?”&lt;br /&gt;&lt;br /&gt;Google works amazingly well when searching the web for articles or documentation etc. However, with the large scale availability of open source code, developers started to search for example code using Google. Although text documents too, applying the same techniques (like word stemming, word splitting etc.) on source code doesn’t work too well.&amp;nbsp; Therefore in October 2006 Google announced their own search engine specially designed to find source code:&amp;nbsp; &lt;i&gt;Google Codesearch&lt;/i&gt;.&amp;nbsp; And with Google Codesearch a plenty of other code search engines appeared on the screen like &lt;i&gt;Koders&lt;/i&gt;, &lt;i&gt;Krugle&lt;/i&gt;, and &lt;i&gt;ByteMyCode &lt;/i&gt;- just to name a few.&lt;br /&gt;&lt;br /&gt;However, although considered being extremely useful, we had the feeling that code search engines still aren’t used by the majority of software developers. But why? For that reason we started some research on what may hinder the widespread use of such search engines. This post is about some (more or less obvious) findings and a new prototype (re)search engine that aims to solve some of the issues of existing approaches.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Issues with existing code search engines &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;#1: Usage of plain text-based information retrieval techniques.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The most critical issue with current code search engines (CSEs for short) is that they treat source code still more like text documents than like code. Of course, CSEs adopted their stemming algorithms and phrase detections etc. to better fit source code syntax, but these algorithms still ignore the large amount of structured information that is available in source code. For illustration, consider the code snippet below taken from the Eclipse &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;JavaSnippetEditor&lt;/span&gt;. What information can you extract from this piece of source code?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;protected void showStatus(String message) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; IEditorSite site=(IEditorSite)getSite();&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; site.getActionBarContributor().getActionBars()&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .getStatusLineManager().setMessage(message);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Well, basically only the literals used in the snippet. You can extract the names of the methods and variables used and the simple type names given in the method or variable declaration. But how can you determine what kind of object the method &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;getActionBars()&lt;/span&gt; is working on? You can’t – at least not from looking at this snippet or its enclosing Java source file only. This information can only be resolved if you have a detailed knowledge about the classpath this piece of code will be executed with and that’s what the compiler does for us: When compiling the source code to binary it resolves all these implicit dependencies using the classpath and thus knows exactly about the types and methods used (this is more or less correct since it only knows about the static types but not the runtime types – but it’s far more knowledge than we get by just looking on the source code of a single file). Without that information we loose most of the structural information in code. To compensate this, CSEs allow us to use regular expressions to get at least some meaning back into our queries. However, regex aren’t a perfect compensation of what we have lost…&lt;br /&gt;&lt;br /&gt;This little example reveals the most fundamental problem of current CSEs: They just look in the source code without resolving the implicit (method and type) bindings. For sure, current CSE have to address many other challenges but we think that knowing about your types, methods and even inheritance hierarchies is important to find the best matching code examples. If you are interested to learn how for instance Krugle implemented its search engine I recommend you to get a copy of &lt;i&gt;Lucene In Action Ed. 2&lt;/i&gt;. Here Krugle developers wrote a case study chapter about how they implemented their search engine using Apache Lucene and which challenges and design decisions they had to make…&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;#2: Ignorance of prior knowledge.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A second issue of current CSEs is their ignorance of the developer’s prior knowledge. Consider for instance a developer who is very familiar with SWT and JFace but not familiar with, say, Eclipse Help. A code search engine that presents to him hundreds of examples that use SWT and JFace are less helpful to him than examples that actually use Eclipse Help – these examples carry some new knowledge for him, and thus are much more interesting than code that does not contain any new information.&lt;br /&gt;&lt;br /&gt;Consequently, CSEs should leverage the personal knowledge of a developer to build personalized search results. This is, however, difficult when using a web browser to submit and display query results. But it becomes much easier when we integrate this process into the IDE. We will detail on that later.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;#3: Almost no IDE integration.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;When using CSEs we typically have to leave the IDE and enter our code search query manually into the webpage’s search field. This is disturbing and - in conjunction with the limited query language support (using simple terms and regular expressions for search) - makes it very hard to for developers to specify their query.&lt;br /&gt;&lt;br /&gt;Here, approaches are needed that automatically extract the relevant search terms from the code the developer is currently working , automatically sends the query and presents the results within the IDE. Such a tool would greatly ease the use of CSEs.&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;#4: Scoring of example code is based on words rather than on semantics.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Current scoring of example code works comparable to the scoring of plain text documents. However, as said above, code contains much more structure than text. For instance all used types, all implemented interfaces, all superclasses, overridden methods, called methods etc. Since all existing approaches do not (at least rarely) leverage this structure their current scoring mechanisms are rather simple. But when the structure in code is preserved during search, new, much more complex scoring functions become available.&lt;br /&gt;&lt;br /&gt;In the end of this post we will present an approach how CSEs could learn what is actually relevant for a given user or query by looking at how users interact with the search results – and in response to this user feedback updates its scoring function to produce better results next time it is used.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Four issues. How can we solve them?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let’s start with a simple example how searching for example code from inside your IDE looks like with our current prototype:&lt;br /&gt;&lt;br /&gt;Let’s assume we created a new Eclipse View by extending the class ViewPart class as depicted in the figure below.&amp;nbsp; Let’s assume further that we want to update the view’s status line using an IStatusLineManager whenever we do some background computation. The problem here is how can we obtain a handle on IStatusLineManager (cf. line 18)?&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/_HyaSneawrU8/TDHU27v2AJI/AAAAAAAAAmI/6FtuYHX3rY0/s1600/image001-top.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="336" src="http://1.bp.blogspot.com/_HyaSneawrU8/TDHU27v2AJI/AAAAAAAAAmI/6FtuYHX3rY0/s640/image001-top.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;When using a CSE like Google Codesearch or Krugle we have to enter some keywords on the web page’s search field on our own like “IStatusLineManger setMessage” and hope that we get som appropriate code snippets showing how to obtain such a reference. However, when doing so, you get probably something like this:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&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/_HyaSneawrU8/TDHVCV48X0I/AAAAAAAAAmQ/E84E5OTMmiM/s1600/image002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="548" src="http://1.bp.blogspot.com/_HyaSneawrU8/TDHVCV48X0I/AAAAAAAAAmQ/E84E5OTMmiM/s640/image002.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;Which you may or may not find very helpful.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;How could a fully integrated code search look like then?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Well, first of all it could create the query fully automatically from the class code itself or just a user selected portion. The figure below highlights various information that could be added automatically to the query when searching for example classes similar to the whole class:&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/_HyaSneawrU8/TDHVSu5MSoI/AAAAAAAAAmY/RYua-4BctB4/s1600/image003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/_HyaSneawrU8/TDHVSu5MSoI/AAAAAAAAAmY/RYua-4BctB4/s640/image003.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;At the end the query contains the information about the overridden methods, the extended classes, the declared fields, used types and methods (IStatusLineManager and IStatusLineManager#setText() for instance). &lt;br /&gt;&lt;br /&gt;Next the tool sends this query to the server and displays the results inside the IDE as shown below. The developer now browses the example recommendations and double clicks on those examples he find interesting to look on them in detail. In this case the second example might be very interesting since it contains a method call to IActionBars#getStatusLineManager() which is very likely to contain the information we are actually looking for:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_HyaSneawrU8/TDHVaH-QGyI/AAAAAAAAAmg/EF5oZwn-xgw/s1600/image001-bottom.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="238" src="http://4.bp.blogspot.com/_HyaSneawrU8/TDHVaH-QGyI/AAAAAAAAAmg/EF5oZwn-xgw/s640/image001-bottom.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The Code Examples Results view gives a very brief summary of each code snippet. It shows both the types and methods used within the code snippet, and gives some inheritance information like the name of the super-class and implemented interfaces where appropriate.&amp;nbsp; It serves like an abstract of the class.&lt;br /&gt;&lt;br /&gt;As said above, example #2 looks quite interesting and the developer may decide to open the source code by double-clicking on the summary.&amp;nbsp; Next, a java editor opens showing the source code of the example but also highlights the relevant statements in code and put some markers on the right bar to indicate other relevant places in code:&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/_HyaSneawrU8/TDHVyBhgNvI/AAAAAAAAAmo/PL3XIPZqe1I/s1600/image004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="100" src="http://4.bp.blogspot.com/_HyaSneawrU8/TDHVyBhgNvI/AAAAAAAAAmo/PL3XIPZqe1I/s640/image004.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;From here, he may copy the interesting lines into his code. All within ~30 seconds :-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;That’s the prototype UI implementation of our code search engine. To summarize, it’s most important features are:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Automatic query creation from the current editor’s content (whole classes or selected lines)&lt;/li&gt;&lt;li&gt;Sending the query and displaying its results directly inside the IDE&lt;/li&gt;&lt;li&gt;Uses structure preserving queries that uses fully qualified method and type names (requires a special indexing structure on server-side too)&lt;/li&gt;&lt;li&gt;Condensed code summaries&lt;/li&gt;&lt;li&gt;Opens source code with relevant statement highlighting and markers to indicate interesting locations in code.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;The UI is, however, just one side of the coin and probably the most challenging part is the backend that is actually performing the search. Although important, I tend think that details on how the backend is actually implemented is not that interesting here. However, there is one important feature I want to discuss: Learning what has been important to continuously improve the search results.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Best results always on top&lt;br /&gt;How to continuously improving the ranking&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As we said before, code contains much more structure than actually leveraged by current CSEs. With the availability of such a rich feature set we have to decide which features we consider to be more important than others so that at the end the best examples are ranked on top. Since we take into account different information in code (like the inheritance information, used methods and types etc.) we currently have a set of ~20 different features we use to score a code example. But determining the best weights for each of these features is rather difficult; tweaking one parameter here may affect another parameter there, and thus finally may result in a configuration worse than before.&lt;br /&gt;&lt;br /&gt;To overcome this need a machine learning algorithm that learns the optimal parameters/weights for our scoring function. The intuition behind this algorithm is what I want to explain in a nutshell.&lt;br /&gt;&lt;br /&gt;Consider that a developer issued a query that returned six results as shown below. Consider further that the user gave some feedback about the quality of these examples by explicitly saying that example #1 and #4 was actually very helpful, example #3 wasn’t helpful, example #6 was somehow helpful and example #2 and #5 weren’t looked at.&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/_HyaSneawrU8/TDHWKr-RSZI/AAAAAAAAAmw/0UBOu-jzEEU/s1600/image005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="521" src="http://3.bp.blogspot.com/_HyaSneawrU8/TDHWKr-RSZI/AAAAAAAAAmw/0UBOu-jzEEU/s640/image005.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;How could such a feedback be used to improve the quality of the search engine? Well, we could use this feedback to learn what the user actually looked at and liked or disliked. Therefore we create a partial ranking of the examples that were deemed helpful by the user, look at the features that caused the examples to be ranked that high in the actual ranking and automatically tweak the weights for these features so that the search engine would have produced an optimal ranking where all useful examples where ranked on top and the less useful ones at the bottom.&lt;br /&gt;&lt;br /&gt;Or in really simplified: If a user clicked on the second result and ignored the first one (based on a not-interesting summary) we want the next time example #2 to appear before example #1:&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/_HyaSneawrU8/TDHWWQ_mKHI/AAAAAAAAAm4/_DzwkyluGLY/s1600/image006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="112" src="http://3.bp.blogspot.com/_HyaSneawrU8/TDHWWQ_mKHI/AAAAAAAAAm4/_DzwkyluGLY/s400/image006.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;This is one of the core features of the backend we implemented: A ranking engine that learns what users actually find helpful and adopts the weights/parameters of the scoring function according to the user’s implicit (or explicit) feedback. This approach could also be used to for personalized preferences and many other things and together with a (purely local) personal knowledge tracker new &lt;i&gt;personalized &lt;/i&gt;code search engines become possible. This will be one of our most interesting future work areas :-) &lt;br /&gt;&lt;span style="font-size: x-large;"&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Wrap up&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In this post I presented the first prototype of our code search engine, an engine that learns what the user actually liked or disliked and leverages this knowledge to improve its own ranking capabilities over time. Furthermore, we outlined how structure in code could be leveraged to improve code search and how all these features could be seamlessly integrated into the Eclipse IDE.&lt;br /&gt;&amp;nbsp;&lt;span style="font-size: x-large;"&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Disclaimer :-)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This (re)search engine is ready to use and available for download (&lt;b&gt;http://recommenders1.st.informatik.tu-darmstadt.de/updates/eclipse3.6/&lt;/b&gt;). It currently works with some initially trained weights but will improve itself over time. If you like – give it a try. Its examples database consists of all source code file of the Eclipse 3.6 (RC4) classic edition, and thus might be helpful for Eclipse plug-in developers.&lt;br /&gt;&lt;br /&gt;As always, we would love to get your opinions on this tool and whether you feel such a code search engine could serve you better than Google code (or not - which is also a valid finding. Then your arguments would be very interesting :) ). Whatever comments you have – let us know! This engine is build to stay and to be continuously improved – for free. If you like, submit your ideas or issues to our &lt;a href="http://code.google.com/a/eclipselabs.org/p/code-recommenders/issues/list?can=2&amp;amp;q=Component-Examples"&gt;issue tracker&lt;/a&gt; at &lt;a href="http://eclipselabs.org/p/code-recommenders/"&gt;eclipselabs.org&lt;/a&gt; and point us to the right search engine for software developers.&lt;br /&gt;&lt;br /&gt;It might be that we are wrong with our perception of how good code search engines actually are. Tell us about your opinion by taking this 2 minutes survey: &lt;a href="http://recommenders1.st.informatik.tu-darmstadt.de/survey/index.php?sid=91172"&gt;http://recommenders1.st.informatik.tu-darmstadt.de/survey/index.php?sid=91172&lt;/a&gt; This would help much in learning what features you find important and which features you don't like...&lt;br /&gt;&lt;br /&gt;For more details on the project itself visit our &lt;a href="http://www.stg.tu-darmstadt.de/research/core/"&gt;homepage&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;All the best,&lt;br /&gt;Marcel&lt;span style="font-size: x-large;"&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-large;"&gt;&lt;span style="font-size: large;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-large;"&gt;&lt;span style="font-size: large;"&gt;Credits&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Most of the work in this project is done by volunteers, and same is true for the code search engine. The search engine, its intelligent scoring function and basic UI has been developed by Peter Schroeder as part of his master thesis. The UI is currently improved by Sheip Dargutev and Nikolay Shindov. Thanks for your work!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1479535086136999079-3949684386951696661?l=code-recommenders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/3949684386951696661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-recommenders.blogspot.com/2010/07/why-is-google-codesearch-not-google-for.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/3949684386951696661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/3949684386951696661'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/2010/07/why-is-google-codesearch-not-google-for.html' title='Why is Google Codesearch not &apos;google for code search&apos;?'/><author><name>Marcel Bruch</name><uri>https://profiles.google.com/100908752439953740476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-i2lFK0vZDP8/AAAAAAAAAAI/AAAAAAAAAwA/IZJzvq1KhBk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_HyaSneawrU8/TDHU27v2AJI/AAAAAAAAAmI/6FtuYHX3rY0/s72-c/image001-top.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1479535086136999079.post-3447978083677768081</id><published>2010-05-04T06:24:00.000+02:00</published><updated>2010-05-04T06:24:37.601+02:00</updated><title type='text'>Eclipse Code Recommenders at JAX2010</title><content type='html'>It’s a great pleasure for me to present the Eclipse Code Recommenders tool tomorrow (Wednesday) evening at Eclipse Tools Day @ JAX2010. &lt;br /&gt;&lt;br /&gt;I’m very happy to talk about the ideas and concepts behind code recommenders ranging from &lt;a href="http://code-recommenders.blogspot.com/2010/05/its-all-about-intelligent-code.html"&gt;intelligent code completion&lt;/a&gt; and &lt;a href="http://code-recommenders.blogspot.com/2010/03/problem-of-incomplete-javadocs.html"&gt;mined Javadocs&lt;/a&gt; up to smart bug detectors that can identify “strange” API uses and warn developers in the case of serious programming mistakes… &lt;br /&gt;&lt;br /&gt;I’m looking forward to see you – and I would be happy to take your questions :-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Marcel&lt;br /&gt;&lt;br /&gt;Time and Location: 05.05.2010 | 18:10 - 18:30 | Watfordsaal I&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1479535086136999079-3447978083677768081?l=code-recommenders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/3447978083677768081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-recommenders.blogspot.com/2010/05/eclipse-code-recommenders-at-jax2010.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/3447978083677768081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/3447978083677768081'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/2010/05/eclipse-code-recommenders-at-jax2010.html' title='Eclipse Code Recommenders at JAX2010'/><author><name>Marcel Bruch</name><uri>https://profiles.google.com/100908752439953740476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-i2lFK0vZDP8/AAAAAAAAAAI/AAAAAAAAAwA/IZJzvq1KhBk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1479535086136999079.post-6071546827697681294</id><published>2010-05-03T00:02:00.002+02:00</published><updated>2010-05-03T00:08:52.470+02:00</updated><title type='text'>It’s all about intelligent code completion...</title><content type='html'>&lt;span style="font-size: large;"&gt;On the advantages of code completion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The code completion feature of modern integrated development environments (IDEs) is extensively used by developers, up to several times per minute. The reasons for their popularity are manifold. &lt;br /&gt;&lt;br /&gt;First, usually only a limited number of actions are applicable in a given context. For instance, given a variable of type &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;java.lang.String&lt;/span&gt;, the code completion system would only propose members of this class but none of, say,&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; java.util.List&lt;/span&gt;. This way, the code completion prevents developers from writing incompilable code by proposing only those actions that are syntactically correct. &lt;br /&gt;&lt;br /&gt;Second, developers frequently do not know exactly which method to invoke in their current context. Code completion systems like that of Eclipse use pop-up windows to present a list of all possible completions, allowing a developer to browse the proposals and to select the appropriate one from the list. In this case, code completion serves both as a convenient documentation and as an input method for the developer. &lt;br /&gt;&lt;br /&gt;Another beneficial feature is that code completion encourages developers to use longer, more descriptive method names resulting in more readable and understandable code. Typing long names might be difficult, but code completion speeds up the typing by automating the typing after the developer has typed only a fraction of the name. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;On the limitations of code completion &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;However, current mainstream code completion systems are fairly limited.  Often, unnecessary and rarely used methods (including those inherited from superclasses high up in the inheritance hierarchy) are recommended. Current code completion systems are especially of little use when suggestions are needed for big (incoherent) classes with a lot of functionality that can be used in many different ways.&amp;nbsp; &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/_HyaSneawrU8/S930NthSkSI/AAAAAAAAAlI/5ClwbvdwlRY/s1600/code-snippet.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="166" src="http://4.bp.blogspot.com/_HyaSneawrU8/S930NthSkSI/AAAAAAAAAlI/5ClwbvdwlRY/s640/code-snippet.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;For illustration, consider the code snippet depicted in listing above. Let’s assume that the developer triggered code completion on the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;swtTextWidget &lt;/span&gt;variable in line 3. Take a break and think about what code completion should offer to the developer in this context…   &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Well, let’s see what it actually offers:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_HyaSneawrU8/S93yDHdUccI/AAAAAAAAAk4/upYAHsT2y60/s1600/text.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://4.bp.blogspot.com/_HyaSneawrU8/S93yDHdUccI/AAAAAAAAAk4/upYAHsT2y60/s640/text.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;164 methods seems to be too much, right? We don’t need methods like &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;getMonitor&lt;/span&gt; or &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;removeDisposeListener &lt;/span&gt;here. But before continuing the discussion (and to make clear that I’m not bashing SWT :-)), let’s see how code completion looks like for SWING classes like, say, &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;JButton&lt;/span&gt;, after we invoked the constructor on such an instance:&lt;br /&gt;&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/_HyaSneawrU8/S93ya14LOuI/AAAAAAAAAlA/kMck-599n1U/s1600/jbutton.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://2.bp.blogspot.com/_HyaSneawrU8/S93ya14LOuI/AAAAAAAAAlA/kMck-599n1U/s640/jbutton.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;One can’t see an improvement, right? But let’s get back to the example. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Because of the overwhelming number of proposals, we looked at the source code of several Eclipse plug-ins to see how developers actually use instances of SWT &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Text &lt;/span&gt;in their code. Thereby  we observed that developers rarely used more than five methods of &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Text &lt;/span&gt;(in the context of &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;IDialogPage#createControl()&lt;/span&gt;) and typically only &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;setText&lt;/span&gt;, &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;setLayoutData&lt;/span&gt;, &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;addModifyListener&lt;/span&gt;, and &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;setFont&lt;/span&gt;. Thus, the remaining 160 methods unnecessarily bloated the code completion window making it hard for developers to see what is actually relevant for their task at hand. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Can we reduce the clutter in code completion? &lt;/span&gt;&lt;br /&gt;The example above outlines the basic problem of current code completion systems. Our solution to this problem - a context-sensitive code completion - is shown in below. Instead of presenting all 164 &lt;i&gt;potentially&lt;/i&gt; callable methods on the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;text &lt;/span&gt;variable, code completion only presents the most likely ones in this context to the user, i.e., &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;setText&lt;/span&gt;, &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;setLayoutData&lt;/span&gt;, and &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;addModifyListener&lt;/span&gt;: &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/_HyaSneawrU8/S9304vAGWyI/AAAAAAAAAlQ/dkS8qsCM4qU/s1600/eclipse-01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="354" src="http://4.bp.blogspot.com/_HyaSneawrU8/S9304vAGWyI/AAAAAAAAAlQ/dkS8qsCM4qU/s640/eclipse-01.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In a (very small) nutshell, the tool works as follows: (i) we grabbed a few Eclipse plug-ins, (ii) looked on how developers actually used Text widgets in their code, (iii) created a database from these usages, (iv) built an intelligent code completion engine that (every time code completion is triggered) looks up the appropriate methods a developer may be interested in, and (v) presents them to the user. &lt;br /&gt;&lt;br /&gt;Of course, we &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Text&lt;/span&gt; is not the only class we examined. We created databases for Eclipse SWT, JFace and some parts of Eclipse UI – and if you are interested to check out the tool, visit our &lt;a href="http://www.stg.tu-darmstadt.de/research/core/"&gt;project page&lt;/a&gt; and see a &lt;a href="http://www.stg.tu-darmstadt.de/research/core/documentation/demo/index.en.jsp"&gt;demo screencast&lt;/a&gt; showing the Eclipse Code Recommenders tool in action. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Disclaimer ;-) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The intelligent code completion feature of the Eclipse Code Recommenders tool is a research prototype. And as such, we appreciate your comments about the idea, implementation issues and other cool ideas. &lt;br /&gt;&lt;br /&gt;So, what’s your feeling about having such an intelligent code completion? Do you think having this in Eclipse would be a cool (and helpful) feature? Should we start a large-scale training for more Eclipse Frameworks?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;All the best,&lt;br /&gt;Marcel&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1479535086136999079-6071546827697681294?l=code-recommenders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/6071546827697681294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-recommenders.blogspot.com/2010/05/its-all-about-intelligent-code.html#comment-form' title='18 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/6071546827697681294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/6071546827697681294'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/2010/05/its-all-about-intelligent-code.html' title='It’s all about intelligent code completion...'/><author><name>Marcel Bruch</name><uri>https://profiles.google.com/100908752439953740476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-i2lFK0vZDP8/AAAAAAAAAAI/AAAAAAAAAwA/IZJzvq1KhBk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_HyaSneawrU8/S930NthSkSI/AAAAAAAAAlI/5ClwbvdwlRY/s72-c/code-snippet.png' height='72' width='72'/><thr:total>18</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1479535086136999079.post-5110420510797203970</id><published>2010-03-30T17:33:00.004+02:00</published><updated>2010-03-30T18:50:21.925+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Introducing Myself to Planet Eclipse</title><content type='html'>Unfortunately, my first post is already published. However, I would like to introduce myself, my new blog and the topics I want to present here to planet eclipse. &lt;br /&gt;&lt;br /&gt;I’m a &lt;a href="http://www.stg.tu-darmstadt.de/staff/marcel_bruch/"&gt;PhD student at Darmstadt University of Technology&lt;/a&gt;, Germany. My research work deals with &lt;a href="http://www.stg.tu-darmstadt.de/research/core"&gt;&lt;i&gt;code recommender systems&lt;/i&gt;&lt;/a&gt;, i.e., I’m working on tools that (aim to) support developers on their daily work by improving several features of current IDEs. &lt;br /&gt;&lt;br /&gt;My research focus is on mining large-scale code repositories to find valuable knowledge in example code and bringing back this knowledge to the IDE by the means of (i) intelligent code completion, (ii) extended Javadocs, or (iii) smart bug detection tools that warn developers if they misuse the framework’s API. The &lt;a href="http://marketplace.eclipse.org/content/eclipse-code-recommenders"&gt;Eclipse Code Recommender&lt;/a&gt; is my tool where I’m trying to put all things in I’ve found valuable and want others to give it a try and to report whether these ideas are actually useful to someone.&lt;br /&gt;&lt;br /&gt;(BTW: Thanks to the guys from EclipseSource and Yoxos which provide this incredible huge code repository of Eclipse plug-ins. I "misused" this one already several times on late Sunday evenings to get tons of example code for my studies :-) ) .&lt;br /&gt;&lt;br /&gt;So, what is my objective for this new blog? It’s twofold. First, I would like to share my ideas and new tools with the Eclipse community to learn what might help us on our daily work (and maybe get some feedback on these ideas). But additionally, I want to write about other research tools that do fancy things with Eclipse and encourage others to give them a try. And as you have read recently, there is &lt;a href="http://aniszczyk.org/2010/03/11/eclipse-and-academia/"&gt;much interesting work going on (like Code Bubbles but also many other interesting tools) that are worth be recognized by the community&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;A few words on my own Eclipse experience: I made my first steps with Eclipse with version 2.1 (how long is this...?) and started to write my first plug-ins with version 3.0. Since then I’ve been using Eclipse and (for whatever reasons) never touched another IDE (except a short time where I tried Netbeans but came back rather quickly). As part of my teaching assistant work I’m organizing Eclipse Hands-on trainings where we “create” round about a dozen Eclipse programmers per semester - somehow my personal, little summer of code, I guess :-D &lt;br /&gt;&lt;br /&gt;I think, that’s it. I would love to get in contact with you, hear your thoughts about research projects, ideas and tools I’m going to present, but I'm also interested in whatever you think that could be improved to help Eclipse to stay the best IDE on the planet. See you! &lt;br /&gt;&lt;br /&gt;Cheers, &lt;br /&gt;&lt;div class="cssButtonOuter"&gt;&lt;div class="cssButtonMiddle"&gt;&lt;div class="cssButtonInner"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;Marcel&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1479535086136999079-5110420510797203970?l=code-recommenders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/5110420510797203970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-recommenders.blogspot.com/2010/03/introducing-myself-to-planet-eclipse.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/5110420510797203970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/5110420510797203970'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/2010/03/introducing-myself-to-planet-eclipse.html' title='Introducing Myself to Planet Eclipse'/><author><name>Marcel Bruch</name><uri>https://profiles.google.com/100908752439953740476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-i2lFK0vZDP8/AAAAAAAAAAI/AAAAAAAAAwA/IZJzvq1KhBk/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1479535086136999079.post-203184716319103421</id><published>2010-03-30T12:12:00.002+02:00</published><updated>2010-03-30T21:43:08.337+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mined documentation'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='extended javadoc'/><category scheme='http://www.blogger.com/atom/ns#' term='code recommenders'/><title type='text'>The Problem of Incomplete Javadocs</title><content type='html'>&lt;h1 style="font-weight: normal;"&gt;&lt;span style="font-size: x-large;"&gt;The  Problem of  Incomplete Javadocs&lt;/span&gt;&lt;/h1&gt;Good and comprehensive   documentation is crucial for the success of open source software. But   creating such documentation takes time and energy, is boring and has   almost no immediate rewards. Consequently, documentation of open source   frameworks is (too) often incomplete or outdated. &lt;br /&gt;&lt;br /&gt;However,  whenever there are  users of a framework there is example code that  uses the framework's  API. And if there is example code, the question  arises whether  information about how to use the framework's API can be  extracted  directly from example code.&lt;br /&gt;&lt;br /&gt;We think so, and  thus started  to study how documentation could be completed by  automatically mined  documentation. So far we concentrated on mining  documentation required  fore developers that plan to extend a given  baseclass and created what  we called  "subclassing directives" from  code.&lt;br /&gt;&lt;br /&gt;In a nutshell, subclassing  directives are  generalizations of frequently made observations in code  like  &lt;i&gt;"Subclasses of &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Wizard&lt;/span&gt; always override its method&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; addPages()&lt;/span&gt;"&lt;/i&gt; or   &lt;i&gt;"Reimplementors of &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Dialog.createContents()&lt;/span&gt; may call its super   implementation."&lt;/i&gt; etc. Our findings are summarized in our paper "Mining   Subclassing Directives" published on the 7th Working Conference on   Mining Software Repositories 2010 which takes place in May 2010. The&lt;i&gt;   Extended Javadoc View&lt;/i&gt; presented here is a result of this research work.&lt;br /&gt;&lt;br /&gt;This  post describes the basic concepts behind the &lt;a href="http://code.google.com/p/code-recommenders/wiki/ExtendedJavadoc"&gt;Extended  Javadoc View&lt;/a&gt;, provides  some examples of how mined documentation  could be integrated  non-intrusively into Eclipse, and how others may  extend the view to  provide their own documentation providers. Please  note that this project  is still &lt;i&gt;work in progress&lt;/i&gt;. That means  that there is much more  work ongoing (see&lt;a href="http://code.google.com/p/code-recommenders/wiki/ExtendedAPIDocs"&gt;  Sketchbook Page&lt;/a&gt; about the proposal) and appreciates your feedback. &lt;br /&gt;&lt;h1 style="font-weight: normal;"&gt;&lt;span style="font-size: x-large;"&gt;The   Extended Javadoc View&lt;/span&gt;&lt;/h1&gt;The  extended Javadoc View is  essentially an aggregator of different  information sources for a single  code element like a class, method,  field or parameter. It is designed  as a replacement for the existing  Eclipse Javadoc. It provides  basically the same functionality as the  Eclipse Javadoc View. Let's  walk through the existing documentation  providers. &lt;br /&gt;&lt;h2 style="font-weight: normal;"&gt;&lt;span style="font-size: large;"&gt;Javadoc Tab&lt;/span&gt;&lt;/h2&gt;The  screenshot below shows the view displaying the  standard Javadoc  information of the JFace Dialog class. &lt;br /&gt;&lt;img src="http://code-recommenders.googlecode.com/svn/wiki/images/extdoc/tab-javadoc-Dialog.png" /&gt;   &lt;br /&gt;But replacing on view with another one  is not a big deal.  The interesting part comes with the other tabs in  the view: Subclassing  Directives and Subclassing Patterns. These tabs  contain mined  information about how developers typically extended the  selected code  element. Let’s look on the Subclassing tab in more detail  now. &lt;br /&gt;&lt;h2 style="font-weight: normal;"&gt;&lt;span style="font-size: large;"&gt;Subclassing  Directives Tab&lt;/span&gt;&lt;/h2&gt;As  said  above, subclassing directives are generalizations of frequently  made  observations in example code like &lt;i&gt;"Subclasses of &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Wizard&lt;/span&gt; always  override  its method &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;addPages()&lt;/span&gt;"&lt;/i&gt; or &lt;i&gt;"Reimplementors of  &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Dialog.createContents()&lt;/span&gt; may  call its super implementation"&lt;/i&gt;. The  screenshots below give two examples  for these mined directives are  presented to a user.  &lt;br /&gt;The first screenshot gives a quick  summary  which methods are typically overridden by subclasses of JFace  &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Wizard&lt;/span&gt;.  The second screenshot shows a detailed look on Wizard's  &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;addPages()&lt;/span&gt;  method and informs a developer which methods are frequently  called  within the control-flow of addPages(), namely, &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Wizard.addPage()&lt;/span&gt;  and  &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Wizard.addPages()&lt;/span&gt;. For both methods the percentage is given how   frequently these methods actually have been called to allow developers   to decide whether these methods are relevant for him and his task at   hand or not. &lt;br /&gt;&lt;img src="http://code-recommenders.googlecode.com/svn/wiki/images/extdoc/tab-subclassing-directives-Wizard.png" /&gt;   &lt;img src="http://code-recommenders.googlecode.com/svn/wiki/images/extdoc/tab-subclassing-directives-Wizard-addPages.png" /&gt;   &lt;br /&gt;Such subclassing  directives are currently mined for almost  all Eclipse 3.5 classes were  extensions of these classes could be  found in our example code base. &lt;br /&gt;However, displaying which methods  to  override and to call is just one thing you can do with an extended   documentation provider. Let's look on the Subclassing Patterns tab in   more detail. &lt;br /&gt;&lt;h2 style="font-weight: normal;"&gt;&lt;span style="font-size: large;"&gt;Subclassing   Patterns Tab&lt;/span&gt;&lt;/h2&gt;Subclassing  patterns try to group observed  extensions of a base class into typical  extension patterns, i.e., they  cluster subclasses by similarity to find  patterns in data. For  illustration of the results, look on the  following screenshots below.  The first picture shows the frequent  subclassing patterns found for the  JFace &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ViewerComparator &lt;/span&gt;class. It states that typically  either the method&amp;nbsp;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ViewerComparator&lt;/span&gt;.compare()   is overridden or&amp;nbsp;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ViewerComparator.category()&lt;/span&gt;   but typically not both at the same time (even if possible). It also   states that extenders typically stick with the first pattern (~82%) and   only in 19% follow pattern two. &lt;br /&gt;&lt;img src="http://code-recommenders.googlecode.com/svn/wiki/images/extdoc/tab-subclassing-patterns-ViewerComparator.png" /&gt;   &lt;br /&gt;Also for the JFace &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Dialog  &lt;/span&gt;class some patterns can be  found. Here developers typically overwrote  the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;createDialogArea&lt;/span&gt;() method  and often the methods &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;okPressed &lt;/span&gt;and &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; configureShell&lt;/span&gt;. However, also other  patterns exist that directly respond  to &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;buttonPressed &lt;/span&gt;events. &lt;br /&gt;&lt;img src="http://code-recommenders.googlecode.com/svn/wiki/images/extdoc/tab-subclassing-patterns-Dialog.png" /&gt;   &lt;br /&gt;For JFace &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Wizard &lt;/span&gt;two  patterns can be found: The standard  pattern (overriding &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;performFinish  &lt;/span&gt;and &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;addPages&lt;/span&gt;) and a mixture of  several other ways of extending &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Wizard&lt;/span&gt;. &lt;br /&gt;&lt;img src="http://code-recommenders.googlecode.com/svn/wiki/images/extdoc/tab-subclassing-patterns-Wizard.png" /&gt;   &lt;br /&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=1562401073088270863&amp;amp;postID=6680360601301581924" name="Subclassing_Patterns_Tab"&gt;  &lt;/a&gt;&lt;br /&gt;&lt;h1 style="font-weight: normal;"&gt;&lt;span style="font-size: x-large;"&gt;Venturing a look at the  Future&lt;/span&gt;&lt;/h1&gt;To my opinion, the current Extended Javadoc View   is an interesting approach that shows what can be found in client code.   But much more things can be found in code that might be used to enrich  existing documentation. But to make this come true much more aspects  need to be  considered. We are currently working on a draft for a  task-oriented,  crowd-sourced API documentation which grounds (at least  partially) on  mined documenation. How do you feel about that? Does this  sound  interesting for Eclipse? We appreciate your comments!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1479535086136999079-203184716319103421?l=code-recommenders.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-recommenders.blogspot.com/feeds/203184716319103421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-recommenders.blogspot.com/2010/03/problem-of-incomplete-javadocs.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/203184716319103421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1479535086136999079/posts/default/203184716319103421'/><link rel='alternate' type='text/html' href='http://code-recommenders.blogspot.com/2010/03/problem-of-incomplete-javadocs.html' title='The Problem of Incomplete Javadocs'/><author><name>Marcel Bruch</name><uri>https://profiles.google.com/100908752439953740476</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-i2lFK0vZDP8/AAAAAAAAAAI/AAAAAAAAAwA/IZJzvq1KhBk/s512-c/photo.jpg'/></author><thr:total>10</thr:total></entry></feed>
