tag:blogger.com,1999:blog-14795350861369990792024-03-13T03:07:50.706+01:00Eclipse Code RecommendersThe code recommenders team blog moved to http://codetrails.com/blog/Anonymoushttp://www.blogger.com/profile/04192783689046741384noreply@blogger.comBlogger40125tag:blogger.com,1999:blog-1479535086136999079.post-65407045727262317032013-05-15T11:22:00.003+02:002013-05-15T13:04:41.442+02:00GSOC Proposal: Create a social snippets infrastructure<div dir="ltr" style="text-align: left;" trbidi="on">
<i>This is proposal #5 submitted to this year's GSOC by Amandeep Singh.</i><br />
<i>Feel invited to leave comments on Amandeep's proposal below. </i><br />
<br />
<hr />
<i><br /></i>
<br />
<h1 id="project-page-title" style="background-color: #f6f6f6; border: 0px; color: #238bd2; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 27px; line-height: 1.5em; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
</h1>
<h2 id="project-page-student-name" style="background-color: #f6f6f6; border: 0px; color: #238bd2; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 21px; font-weight: normal; line-height: 1.3em; margin: 0px 0px 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
Aman</h2>
<div class="project-short" style="background-color: white; border: 1px solid rgb(235, 235, 235); font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 13px; line-height: 19.5px; margin: 0px; outline: 0px; padding: 15px; vertical-align: baseline;">
<div class="project-mentor" style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; outline: 0px; padding: 0px; vertical-align: baseline;">
<strong style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Email:</strong> aman.adsm@gmail.com</div>
<div class="description" style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; outline: 0px; padding: 0px; vertical-align: baseline;">
<strong style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Short description:</strong> Snipmatch is an eclipse plugin which eases the development and code writing work from a programmer's point of view and helps to store/retrieve/re-use most commonly used code snippets and algorithms in the source code. It simply searches for the snippets stored locally/server and displays the most relevant and context specific code snippets as output.</div>
</div>
<div class="project-long" style="background-color: #f6f6f6; border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 13px; line-height: 19.5px; margin: 0px; outline: 0px; padding: 15px 15px 0px; vertical-align: baseline;">
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
PERSONAL DETAILS</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
Name : Amandeep Singh</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
Email address : aman.adsm@gmail.com</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
IM service : aman.adsm(gtalk & skype)</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
Location: Chandigarh, India </div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
PROPOSAL TITLE</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
Eclipse Code Recommenders</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
project – Create a social snippets infrastructure</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
SYNOPSIS</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
Snipmatch is an eclipse plugin which eases the development and code writing work from a programmer's point of view and helps to store/retrieve/re-use most commonly used code snippets and algorithms in the source code. It simply searches for the snippets stored locally/server and displays the most relevant and context specific code snippets as output.</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
PROJECT DELIVERABLES</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
Add plugin spy feature to ease and help developers in further developing the plugin and getting insights about the libraries, dependencies and packages imported.</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
Automatic updation of the snippet list on insertion/deletion/modification of a snipppet in the snipmatch view, consequently leading to the removal of update button from the view and enhancing the UI.</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
An option to sort the snippet list based on date modified/LOC/topic(proposed).</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
I also want to change the icon images in the snipmatch view(personally I don't like them).</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
Complete and detailed documentation of the snipmatch plugin and if time allows I'm also looking forward to make a thesis on the same as my college summer project.</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
A backup/export feature by exporting snippets as files to the custom directory or folder according to the developer's choice.</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
Formats I wish to support : .txt, .html, java, .csv and obviously the .json format.</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
Syndication of snippets in wordpress(my own idea)</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
The Idea is, to simply publish the snippet to wordpress as a new post right from the IDE without logging in to the wordpress dashboard and manually posting to it.</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
Reccommend this snip button: A snippet sharing feature with the help of a recommend button. Developers can recoomend/share the snippet with fellow developers via mail, or simply generate a shortlink to post anywhere or share with a friend.</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
IMPLEMENTATION DETAILS</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
Plugin spy can be easily added to snipmatch by simply adding it to the plugin dependencies.(1 or 2 days)</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
For implementing the export feature I suggest the following code(1 week approx):</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
For taking backups I'll be using Mysql. I wish the same Json template format could be used here as well, so as to easily store the snippets according to the Title in the database(1 week). </div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
Once this is done, wordpress syndication can also be done easily as I'm already aware about wordpress platform/php and know jdbc concepts(1 week at the max).</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
For recommend button I wish to use servelets/JSP/Mysql. In the process the snippet will be simply sent to the server via FTP and stored in a remote Mysql database. A shortlink generating algorithm(will try to make in a week or so) will be attached to the script with which the user can share it with anybody via mail, social networking or post it to pastebin or any other code sharing site. Temporarily I'll be storing this at my own online live server and then can be easily imported to the snipmatch server after approval. (10 days)</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
Algorithm has to be made for the sorting feature and will take help from my mentors in this regard. (1 week)</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
TIMELINE</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
deadline : till june 17</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
I am having exams till May 17th, so won't be able to do much till then. From the very next day onwards I'll indulge in the Eclipse Gsoc project.</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
Firstly I'll gather more knowledge and expertise in eclipse PDE and the whole code recommenders project esp the snipmatch plugin.</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
I'm not much aware about json template format, so will be devoting an ample amount of time on the same.</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
deadline : after june 17</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
> plugin spy</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
> change icons</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
> export feature</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
> backup support</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
> snippet list automatic refresh/update feature</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
> snippet sorting facility</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
> syndication with wordpress</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
> recommend this snip</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
Documentation will be done side by side along with the advancements in the project.</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
During the google SOC i.e the actual coding period, I will continue to commit regularly to the git branch, for proper review and testing of my work by other developers and mentors.</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
Each objective is anticipated to take only a few days to handle , so many can be completed over the summer.</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
WHY I AM WELL SUITED FOR THE PROJECT</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
Focussed, bright, fast learner, quite persistant and do not give up/quit easily </div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
Confident and have the necessary programming skills</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
I want to make projects that succeed</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
I act professionaly and take my work seriously and assure my mentors that I’ll definitely live up to their expections and come out with a well featured Snipmatch Eclipse plugin.</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
PROJECT OUTCOME AND BENEFITS TO COMMUNITY</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
A simple,nice and well integrated snipmatch GUI supporting all the features(new snippet creation, snippet sharing and rating,database, backup feature, multiple backend support, documentation) as required by the gsoc project. </div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
With EclipseIDE/Wordpress syndication feature, a new feature of blogging right from the IDE interface while developing can be implemented, thus helping the programmers to post their ideas, logical views, algorithms and code snippets to the WWW easily.</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
ABOUT ME</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
Pursuing bachelors in computer science from Guru Nanak Dev Engineering College(http://gndec.ac.in) and in pre-final year.</div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: x-small; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"></span></div>
<div style="background-color: transparent; border: 0px; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
for programming related skills and projects done, please refer to my website: www.kodevelop.com<br />
<br /></div>
</div>
</div>
Unknownnoreply@blogger.com4tag:blogger.com,1999:blog-1479535086136999079.post-61387195883326067892013-05-10T18:39:00.001+02:002013-05-10T18:39:45.708+02:00GSOC Proposal: Enhance Extdoc Plugin<div class="separator" style="clear: both; text-align: center;">
<a href="http://i1173.photobucket.com/albums/r600/dammina/upload.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="http://i1173.photobucket.com/albums/r600/dammina/upload.jpg" width="190" /></a></div>
Hi,<br /><span style="background-color: #f6f6f6; border: 0px; line-height: 19px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="font-family: Arial, sans-serif;">I'm Dammina Sahabandu, 3rd year undergraduate of University of Moratuwa(dept. of Computer of Science and Engineering). I hope to contribute for the </span><i><span style="font-family: Arial, Helvetica, sans-serif;">Eclipse </span></i></span><span style="font-family: Arial, Helvetica, sans-serif;"><span style="background-color: #fefdfa; line-height: 19px;"><i>Code Recommenders project </i>through this years GSOC. Specifically by enhancing the Extdoc plugin. This i</span><span style="background-color: #fefdfa; line-height: 19px;">s my project idea. Your feedbacks are mostly welcome!</span></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="background-color: #fefdfa; font-size: 13px; line-height: 19px;"><br /></span></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="background-color: #fefdfa; font-size: 13px; line-height: 19px;"><br /></span></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="background-color: #fefdfa; font-size: 13px; line-height: 19px;"><br /></span></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="background-color: #fefdfa; font-size: 13px; line-height: 19px;"><br /></span></span>
<br />
<br />
<h3>
<span style="font-family: Arial, Helvetica, sans-serif; font-size: large;"><span style="background-color: #fefdfa; line-height: 19px;"><br /></span></span></h3>
<h3 style="text-align: left;">
<span style="font-family: Arial, Helvetica, sans-serif; font-size: large;"><span style="background-color: #fefdfa; line-height: 19px;">Abstract</span></span></h3>
<div>
<span style="background-color: #f6f6f6; border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: x-small; line-height: 19.1875px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; font-size: 13px; line-height: 19px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">The current Extdoc view provides extended documentation on classes and methods which has been data mined from code. But there is no way for users to influence the documentation yet. The major goal of this project is to enhance Extdoc view such that user can involve for the documentation. </span></span><span style="background-color: #f6f6f6; border: 0px; font-family: Arial, sans-serif; font-size: 9pt; line-height: 13px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">That is if there is no existing Javadoc at the moment users can users can create new Javadoc or if there is Javadoc already then users can edit it, annotate it and rate it.</span><span style="background-color: #f6f6f6; border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; line-height: 19px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">(that is users can create, annotate and rate contributions(for this task Mylyn's wikitext will be used) to the documentation of classes and methods.</span></div>
<div>
<span style="background-color: #f6f6f6; border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: x-small; line-height: 19px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><br /></span></div>
<h3>
<span style="background-color: #f6f6f6; border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; line-height: 19px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="font-size: large;">Detailed Information</span></span></h3>
<div>
<span style="background-color: #f6f6f6; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><div style="border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: 13px; line-height: 19px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Writing documentation is one of those tasks that programmers are typically not really interested in. It is time-consuming, wearisome task which has almost no immediate rewards. So as a consequence, most of the times documentation is incomplete or out-dated.</span></div>
<div style="border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: 13px; line-height: 19px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">But at the same time good and comprehensive documentation is critical for the success of a library or framework. There tools which can generate documentation (Javadoc comments) by extracting the obvious information from the source code. But the thing is for an instant it may be seems like helpful and valuable but finally this kind of documentation will only pleases the project manager since it improves the source code to documentation ratio. But in the developers point of view these kind of documentation is less helpful and rather useless.</span></div>
<div style="border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: 13px; line-height: 19px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">However there are many other resources out there such as tutorial sites, Code-search engines and code snippet repositories which offers valuable information about an API (how to use a certain API or deal with errors). The current Extended Documentation platform is exclusively developed to serve the purpose of aggregate this wide range of information sources available on the web into a single view in eclipse.</span></div>
<div style="border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: 13px; line-height: 19px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">The figure below shows the current Extdoc view.</span></div>
<div class="separator" style="clear: both; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; line-height: 19px; text-align: center;">
<a href="http://i1173.photobucket.com/albums/r600/dammina/view01-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="496" src="http://i1173.photobucket.com/albums/r600/dammina/view01-1.png" width="640" /></a></div>
<div style="border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: Arial, sans-serif;">The existing view of Extension documentation is great. But as you can see, there are no user feedback components. Without that functionalities the Extdoc view is rather incomplete. So the proposed idea of the project is to enhance the Extdoc platform which enables the functionality for the users to involve in the documentation. The figure below is a mock-up screenshot of the user interface of Extdoc view after adding the functionalities.</span><span style="font-family: Arial, sans-serif; font-size: x-small;"> </span></div>
<div style="border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: Arial, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; line-height: 19px; text-align: center;">
<a href="http://i1173.photobucket.com/albums/r600/dammina/view02-1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="496" src="http://i1173.photobucket.com/albums/r600/dammina/view02-1.jpg" width="640" /></a></div>
<div style="border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: Arial, sans-serif; font-size: x-small;"><br /></span></div>
<div style="border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: Arial, sans-serif;">There by clicking on the </span><em style="border: 0px; font-family: Arial, sans-serif; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">log in</em><span style="font-family: Arial, sans-serif;"> text user will be navigated to a log in window which will be like this.</span></div>
<div style="border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: Arial, sans-serif; font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; line-height: 19px; text-align: center;">
<a href="http://i1173.photobucket.com/albums/r600/dammina/view03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="498" src="http://i1173.photobucket.com/albums/r600/dammina/view03.jpg" width="640" /></a></div>
<div style="border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-family: Arial, sans-serif; font-size: x-small;"><br /></span></div>
<div style="border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
There user can authenticate himself by providing his/her Google, Yahoo likewise ID. It will be openId based authentication. By successfully log in to the system user will be able navigated to the Extdoc view which the user interface will be like this.</div>
<div style="border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="font-size: x-small;"><br /></span></div>
<div class="separator" style="clear: both; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; line-height: 19px; text-align: center;">
<a href="http://i1173.photobucket.com/albums/r600/dammina/view04.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="496" src="http://i1173.photobucket.com/albums/r600/dammina/view04.jpg" width="640" /></a></div>
<div style="border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div style="border: 0px; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
</div>
<div style="border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; line-height: 1.6em; margin: 7.5pt 0cm; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">There user have the privileges to edit/create, annotate and rate the existing documentation. </span><br /><br /><span style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">The user interface will communicate with the back end database using the Open Data protocol. At the database there will be tables for handling these user feedbacks including including entries for comments, rating info etc. </span></span></div>
<div style="border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; line-height: 1.6em; margin: 7.5pt 0cm; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Server side implementation will process the existing data and return the information(Current rating etc.) to the UI. And UI will display them. </span></span></div>
<h3>
<span style="font-family: Arial, Helvetica Neue, Helvetica, sans-serif; font-size: large;"><span style="line-height: 29.9375px;">Deliverable</span></span></h3>
<div>
<span style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="background-color: transparent; border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><div style="border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: 13px; line-height: 19px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Final product deliverable will be the Extended documentation platform with a very solid restful API for commenting and editing API elements and a very tight editing integration into the IDE.</span></div>
<div style="border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 12px; line-height: 1.6em; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; border: 0px; font-size: 13px; line-height: 19px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">For these tasks, following technologies will be used.</span></div>
<ul style="border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 13px; line-height: 19.5px; list-style-image: initial; list-style-position: initial; margin: 0px 0px 1.5em 1.1em; outline: 0px; padding: 0px; vertical-align: baseline;">
<li style="background-color: transparent; border: 0px; list-style-position: outside; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="border: 0px; font-family: Arial, sans-serif; font-size: 10pt; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Users will be authenticated based on openId authentication.</span></li>
<li style="background-color: transparent; border: 0px; list-style-position: outside; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; font-family: Arial, sans-serif; font-size: 10pt; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">OData protocol will be used for backend communication.</span></li>
<li style="background-color: transparent; border: 0px; list-style-position: outside; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><span style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; font-family: Arial, sans-serif; font-size: 10pt; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">The database back end will be SQL-DB.</span></li>
</ul>
<h3>
<span style="font-family: Arial, sans-serif; font-size: large;"><span style="line-height: 19.5px;">Schedule</span></span></h3>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://i1173.photobucket.com/albums/r600/dammina/extdocnew.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="346" src="http://i1173.photobucket.com/albums/r600/dammina/extdocnew.jpg" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://i1173.photobucket.com/albums/r600/dammina/timeline03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="374" src="http://i1173.photobucket.com/albums/r600/dammina/timeline03.jpg" width="640" /></a></div>
<div>
<span style="font-family: Arial, sans-serif;"><span style="line-height: 19.5px;"><br /></span></span></div>
<h3>
<span style="line-height: 19.5px;"><span style="font-family: Arial, Helvetica, sans-serif; font-size: large;">Contact Information</span></span></h3>
<div>
<div class="MsoNormal" style="border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 12px; line-height: 14.25pt; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; font-family: Arial, sans-serif; font-size: 10pt; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Email: <a href="mailto:dmsahabandu@gmail.com" style="background-color: transparent; border: 0px; color: #00538b; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">dmsahabandu@gmail.com</a></span></div>
<div class="MsoNormal" style="border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 12px; line-height: 14.25pt; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; font-family: Arial, sans-serif; font-size: 10pt; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Phone number: +94716422775</span></div>
<div class="MsoNormal" style="border: 0px; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; font-size: 12px; line-height: 14.25pt; margin-bottom: 10px; outline: 0px; padding: 0px; vertical-align: baseline;">
<span style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; font-family: Arial, sans-serif; font-size: 10pt; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Skype: damminams</span></div>
</div>
</span></span></div>
</span></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1479535086136999079.post-65516334652123245532013-05-10T07:48:00.002+02:002013-05-10T07:48:48.717+02:00GSOC Proposal: Code Recommenders for Javadoc!<table class="tabelle"><tbody>
<tr><td><div dir="ltr" id="docs-internal-guid-74ab33de-896e-6127-d807-b45d261191ce" style="line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt;">
<div dir="ltr" id="docs-internal-guid-74ab33de-8970-5c37-977d-31d9edf89ec2" style="line-height: 1.5; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; vertical-align: baseline;">Hi,</span><br />
<span style="font-family: Verdana; vertical-align: baseline;"><br /></span>
<span style="font-family: Verdana; vertical-align: baseline;">my
name is Patrick Gottschaemmer and I'm a computer science student at the
Darmstadt University of Technology. Besides that, I work for the Code
Recommenders project as a Eclipse contributor since October 2012. I'd
like to participate in the Google Summer of Code 2013 and this is my
GSOC Proposal about an integration of Code Recommenders statistics into
Javadoc. Any feedback would be welcome!</span></div>
</div>
<span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;"></span></td> <td><a href="http://2.bp.blogspot.com/-037AQWmrqY0/UYubClS0QTI/AAAAAAAAADQ/kT4qSFo9Ndw/s1600/profile.png" imageanchor="1"><img border="0" src="http://2.bp.blogspot.com/-037AQWmrqY0/UYubClS0QTI/AAAAAAAAADQ/kT4qSFo9Ndw/s320/profile.png" /></a></td></tr>
</tbody></table>
<h2>
<span style="font-family: Verdana; font-size: 19px; font-weight: bold; vertical-align: baseline;">Abstract</span></h2>
<br />
<span style="font-family: Verdana; font-size: 19px; font-weight: bold; vertical-align: baseline;"></span><br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="vertical-align: baseline;"><span style="font-family: Verdana, sans-serif;">The
Eclipse Code Recommenders project [1] provides a smart Code Completion
for the Eclipse IDE in Java, based on the context where code completion
is triggered and gained knowledge by analyzing source code of open
source projects. These machine learned statistics of API and framework
usages (e.g. JFace or the JDK itself) can be summarized and made
abstract from the current code context. This way, typical usage patterns
of API calls or code snippets (lines of code which are usually appear
together) can be identified.</span></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="vertical-align: baseline;"><span style="font-family: Verdana, sans-serif;">These gained informations can be a great advantage when learning how to use a new API or a framework.</span></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="vertical-align: baseline;"><span style="font-family: Verdana, sans-serif;">Furthermore,
a directly integration into the standard documentation platform of the
programming language would be useful, because that is normally the
starting point for developers which want to learn something about core
classes, package usages and interfaces in frameworks or APIs. In this
GSoC Proposal, I’d like to implement the following additional features
for the Javadoc generation tool [2]:</span></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 8pt; margin-top: 0pt;">
<span style="vertical-align: baseline;"><span style="font-family: Verdana, sans-serif;"> </span></span></div>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="list-style-type: disc; margin-left: -8px; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="vertical-align: baseline;"><span style="font-family: Verdana, sans-serif;">Integration of Code Recommenders statistics for packages, classes and methods on Javadoc</span></span></div>
</li>
</ul>
<span style="font-family: Verdana, sans-serif;"><span style="vertical-align: baseline;"></span></span><br />
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="list-style-type: disc; margin-left: -8px; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="vertical-align: baseline;"><span style="font-family: Verdana, sans-serif;">A
little helper utility which fetches source code from a repository, runs
javadoc on it, integrates the Code Recommenders statstics and uploads
the updated documentation back to the repository</span></span></div>
</li>
</ul>
<span style="font-family: Verdana, sans-serif;"><span style="vertical-align: baseline;"></span></span><br />
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="list-style-type: disc; margin-left: -8px; vertical-align: baseline;"><span style="vertical-align: baseline;"><span style="font-family: Verdana, sans-serif;">Enable
developers to directly edit, comment or rate on API documentation and
new code snippets, which are provided by the Snipmatch subproject of
Code Recommenders or posted by developers themselves</span></span></li>
</ul>
<div>
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div>
<h2>
<span style="font-family: Verdana; font-size: 19px; font-weight: bold; vertical-align: baseline;">Introduction</span></h2>
<br />
<span style="font-family: Verdana; font-size: 19px; font-weight: bold; vertical-align: baseline;"></span><br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="vertical-align: baseline;"><span style="font-family: Verdana, sans-serif;">The
standard Code Completion of the Eclipse IDE (or Code Completion in
general) is a great feature to speed-up your workflow in programming.
Not only saving you a dozens of keystrokes per day by complete your not
yet finished lines of code, it can also be used to show you
syntactically correct proposals for your method calls or your overrides.</span></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="vertical-align: baseline;"><span style="font-family: Verdana, sans-serif;">While
this is a great way to learn how to use new APIs and frameworks, it can
quickly get confusing if you trigger code completion for example on a
bloated ui class and get flooded by hundreds of method call proposals:</span></span></div>
<br />
<span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;"></span><img height="159px;" src="https://lh3.googleusercontent.com/E7e-vYNplAq-NvweU7mtdFVBMfCcgj5ajz-KI2hvvuRb84VteFUO62c93q2o9u6YzaJz8jmQa4iXe85H_-6Lo6hUjYUDbbn5p4O2F8KFaXh8I1VImQ3gvcWjCw" width="523px;" /><span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;"></span><br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 11px; vertical-align: baseline;">(all permissions granted by codetrails.com)</span></div>
<br />
<span style="font-family: Verdana; font-size: 11px; vertical-align: baseline;"></span><br />
<span style="font-family: Verdana; font-size: 11px; vertical-align: baseline;"></span><br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="vertical-align: baseline;"><span style="font-family: Verdana, sans-serif;">But actually, only a few methods are interesting, depending on your current code context:</span></span></div>
<br />
<span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;"></span><br />
<span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;"></span><img height="99px;" src="https://lh6.googleusercontent.com/1Wz64GePMJPmRp6RMu_p6jpWpdBbURnSEe1p6Z84xkItbW_tHzcS9uxICtdEY3sO3vkQr4lnZGWMgC1slyn0zUYUzKNbCWcebNrNBb62_Ksdu9M6p8pRGa93tw" width="405px;" /><span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;"></span><br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 11px; vertical-align: baseline;">(all permissions granted by codetrails.com)</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 13px; vertical-align: baseline;"> </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 13px; vertical-align: baseline;"> </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;"><br /></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="vertical-align: baseline;"><span style="font-family: Verdana, sans-serif;">This
is exactly what Code Recommenders does. The knowledge, which methods
are relevant for a programmer at a certain point in his code context are
gained from machine learning and analyzing of source code from open
source projects at the Eclipse Foundation.</span></span></div>
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"><span style="vertical-align: baseline;"></span></span><br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana, sans-serif;"><span style="vertical-align: baseline;">Unfortunately,
if you’re completely new to an API or a framework, your first step
wouldn’t be to trigger code completion on some unfamiliar classes.
Usually, you start paying attention on some documentation, whether it be
a book, an online web page or a demo talk. For a specific problem,
you’d lookup a forum or something like</span><span style="font-style: italic; vertical-align: baseline;"> stackoverflow.com</span></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="vertical-align: baseline;"><span style="font-family: Verdana, sans-serif;">But
unfortunately, the machine learned source code statstics of Code
Recommenders are only available in your Eclipse IDE. At least until now!</span></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="vertical-align: baseline;"><span style="font-family: Verdana, sans-serif;"><br /></span></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="vertical-align: baseline;"></span></div>
<h2>
<span style="font-size: 19px; font-weight: bold; vertical-align: baseline;"><span style="font-family: Verdana, sans-serif;">Javadoc & Code Recommenders - What will it look like?</span></span></h2>
<br />
<span style="font-family: Verdana; font-size: 19px; font-weight: bold; vertical-align: baseline;"></span><br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="vertical-align: baseline;"><span style="font-family: Verdana, sans-serif;">There
are several questions and statistics from Code Recommenders which you
could insert in a Javadoc HTML generated website, e.g.</span></span></div>
<br />
<span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;"></span><br />
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="font-family: Verdana; list-style-type: disc; margin-left: -8px; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-weight: bold; vertical-align: baseline;">When selecting a package:</span><span style="vertical-align: baseline;"> <br class="kix-line-break" />'What are the most frequently overwritten (used) classes in package org.eclipse.xyz*?'</span></div>
</li>
<li dir="ltr" style="font-family: Verdana; list-style-type: disc; margin-left: -8px; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-weight: bold; vertical-align: baseline;">When selecting a method:</span><span style="vertical-align: baseline;"> <br class="kix-line-break" />'Which methods are frequently called together with m()?'</span></div>
</li>
<li dir="ltr" style="font-family: Verdana; list-style-type: disc; margin-left: -8px; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-weight: bold; vertical-align: baseline;">When selecting a type:</span><span style="vertical-align: baseline;"> <br class="kix-line-break" />'Which methods of type X frequently used by clients?'</span></div>
</li>
<li dir="ltr" style="font-family: Verdana; list-style-type: disc; margin-left: -8px; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="vertical-align: baseline;">and many more...</span></div>
</li>
</ul>
<br />
<span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;"></span><br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; vertical-align: baseline;">While
these are just some basic ideas, I’d like to prioritize them (and
others) for the implementation with a Google Docs poll for the Eclipse
GSoC mentors.</span></div>
<br />
<span style="font-family: Verdana; vertical-align: baseline;"></span>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; vertical-align: baseline;">An integration of the Code Recommenders statistic to the generated HTML output of Javadoc could look like this:</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; vertical-align: baseline;"><br /></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 12px; vertical-align: baseline;"> </span><img height="456px;" src="https://lh3.googleusercontent.com/KK4AWEDoWXdnjeQA0IjesuEpLZI9udpYgD23HyUBkl4iYcsXNIdJL34HiIzp5UEMlpRqFkQ4usdBRnO7JyWkUZTjRmJxVsALLgrzxsRwp1MHBkbgbl4hFrnlDw" width="631px;" /><span style="font-family: Verdana; font-size: 12px; vertical-align: baseline;"></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 8pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 12px; vertical-align: baseline;"> </span></div>
<br />
<span style="font-family: Verdana; font-size: 12px; vertical-align: baseline;"></span><br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="vertical-align: baseline;"><span style="font-family: Verdana, sans-serif;">I’ve created some more Javadoc examples in HTML with the Javadoc framework, check them out at</span></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 8pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 12px; vertical-align: baseline;"> </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<a href="http://jdoc.gottschaemmer.net/" style="text-decoration: none;"><span style="color: #1155cc; font-family: Verdana; text-decoration: underline; vertical-align: baseline;"><span style="font-size: large;">http://jdoc.gottschaemmer.net</span></span></a></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 8pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 12px; vertical-align: baseline;"> </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; vertical-align: baseline;">The following elements are annotated with some statistics from Code Recommenders:</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 8pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 12px; vertical-align: baseline;"> </span></div>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="font-family: Verdana; list-style-type: disc; margin-left: -8px; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="vertical-align: baseline;">The package </span><span style="font-style: italic; font-weight: bold; vertical-align: baseline;">org.eclipse.jface.viewers </span><span style="vertical-align: baseline;">(at the bottom) </span></div>
</li>
<li dir="ltr" style="font-family: Verdana; list-style-type: disc; margin-left: -8px; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="vertical-align: baseline;">The class org.eclipse.jface.viewers.</span><span style="font-weight: bold; vertical-align: baseline;">TableViewer</span><span style="vertical-align: baseline;">(right beneath the class description) </span></div>
</li>
<li dir="ltr" style="font-family: Verdana; list-style-type: disc; margin-left: -8px; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="vertical-align: baseline;">The method </span><span style="font-style: italic; font-weight: bold; vertical-align: baseline;">getTable()</span><span style="vertical-align: baseline;"> in class </span><span style="font-weight: bold; vertical-align: baseline;">TableViewer</span></div>
</li>
</ul>
<span style="font-family: Verdana; font-size: 11px; vertical-align: baseline;"></span><br />
<span style="font-family: Verdana; font-size: 11px; vertical-align: baseline;"></span><br />
<h2>
<span style="font-family: Verdana; font-size: 19px; font-weight: bold; vertical-align: baseline;">Javadoc & Code Recommenders - How are they working together?</span></h2>
<br />
<span style="font-family: Verdana; font-size: 19px; font-weight: bold; vertical-align: baseline;"></span><br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; vertical-align: baseline;">For
this generation part, I plan to extend the Javadoc Tool framework by
one or more 'Doclets' (see [2]) that allow different extdoc providers
(based on the extdoc providers of Code Recommenders) to contribute
directly to the generated HTML output via the Javadoc api.</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 8pt; margin-top: 0pt;">
<span style="font-family: Verdana; vertical-align: baseline;"> </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; vertical-align: baseline;">In
contrast to the normal way how the javadoc command is used, I'd like to
develop a little helper utility that fetches and unzips the sources
directly from a maven repository, runs the normal javadoc tool and adds
the recommenders documentation to the standard javadoc output, and
finally uploads the updated javadocs to the repository or deploys them
on a website.</span></div>
<span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;"></span><br />
<span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;"></span><br />
<h2>
<span style="font-family: Verdana; font-size: 19px; font-weight: bold; vertical-align: baseline;">Going further - Let’s get social!</span></h2>
<br />
<span style="font-family: Verdana; font-size: 19px; font-weight: bold; vertical-align: baseline;"></span><br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; vertical-align: baseline;">In
addition (when there is still some timet), I'd like to enable users to
directly edit, comment or rate on API documentation and new code
snippets, which are provided by the Snipmatch subproject of Code
Recommenders. Alternatively, these code snippets could also be posted
directly by developers through the webinterface or even via a REST API
(so you could implement an additional IDE plugin for this afterwards).
The code snippets shall be grouped by java classes and/or packages,
which then can be tagged, commented and rated by other developers. Top
rated code snippets ('favorites') shall appear at the top of the list,
indeed similar to </span><span style="font-family: Verdana; font-style: italic; vertical-align: baseline;">stackoverflow.com.</span></div>
<br />
<span style="font-family: Verdana; font-size: 15px; font-style: italic; vertical-align: baseline;"></span><br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; vertical-align: baseline;">Here are two mock-ups for a first impression</span><span style="font-family: Verdana; vertical-align: baseline;">:</span></div>
<br />
<span style="font-family: Verdana; font-size: 16px; vertical-align: baseline;"></span><br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 12px; font-style: italic; font-weight: bold; vertical-align: baseline;">API Commentation feature for developers</span><img height="427px;" src="https://lh3.googleusercontent.com/eJKPqHEemub7D8PbgIUOvP8XaJsHqEWt98ih8TG7qQl2TsKOU_lyqmZ7Hliy5d9Mgk6cSEg3CkN1ORsm6Na4g12PCX5y2x61A-iQJcAbI0dvQgU71GOChRVYhg" width="631px;" /><span style="font-family: Verdana; font-size: 12px; font-style: italic; font-weight: bold; vertical-align: baseline;"></span></div>
<br />
<span style="font-family: Verdana; font-size: 12px; font-style: italic; font-weight: bold; vertical-align: baseline;"></span><br />
<span style="font-family: Verdana; font-size: 12px; font-style: italic; font-weight: bold; vertical-align: baseline;"></span><br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 12px; font-style: italic; font-weight: bold; vertical-align: baseline;">Social Code Snippets Integation</span><img height="500px;" src="https://lh5.googleusercontent.com/hbqK6w-SOXTCrcuWd8YDbuTdWqHCZ7U6HuK_aaIFuex1ueaEWv6LbqlWzhWKc4y-c0bLFbpHQSIPHmIylbaco4uGL4c6c6PsJVFQlfT26vQUTkmL4WJyF-v9aQ" width="631px;" /></div>
<span style="font-family: Verdana; font-size: 12px; font-style: italic; font-weight: bold; vertical-align: baseline;"></span><br />
<span style="font-family: Verdana; font-size: 12px; font-style: italic; font-weight: bold; vertical-align: baseline;"></span><br />
<h2>
<span style="font-family: Verdana; font-size: 19px; font-weight: bold; vertical-align: baseline;">Server Backend</span></h2>
<br />
<span style="font-family: Verdana; font-size: 19px; font-weight: bold; vertical-align: baseline;"></span><br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; vertical-align: baseline;">For
these social features, an additional backend (a RESTful api) will be needed, which
stores and organizes the code snippets, including tags and comments by
users.</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; vertical-align: baseline;">The
snippets shall be inserted dynamically in the (so far static generated)
Javadoc website. For the server-side part I'm thinking of using the
OData [3] protocol backed up by a SQL database like MySQL.</span></div>
<span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;"></span><br />
<span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;"></span><br />
<h2>
<span style="font-family: Verdana; font-size: 19px; font-weight: bold; vertical-align: baseline;">Milestones and Timeline</span></h2>
<br />
<span style="font-family: Verdana; font-size: 19px; font-weight: bold; vertical-align: baseline;"></span><br />
<div dir="ltr">
<table style="border-collapse: collapse; border: none;"><colgroup></colgroup><tbody>
<tr style="height: 0px;"><td style="background-color: #c9daf8; border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: middle;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; font-family: Verdana; font-size: 13px; font-weight: bold; vertical-align: baseline;">Milestone #</span></div>
</td><td style="background-color: #c9daf8; border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: middle;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; font-family: Verdana; font-size: 13px; font-weight: bold; vertical-align: baseline;">Description</span></div>
</td><td style="background-color: #c9daf8; border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: middle;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; font-family: Verdana; font-size: 13px; font-weight: bold; vertical-align: baseline;">Duration</span></div>
</td></tr>
<tr style="height: 0px;"><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 13px; vertical-align: baseline;">1 -</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 13px; vertical-align: baseline;">Javadoc Generation Utility</span></div>
</td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 13px; vertical-align: baseline;">Provide a little helper utility which</span></div>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="font-family: Verdana; font-size: 13px; list-style-type: disc; margin-left: -9px; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-size: 13px; vertical-align: baseline;">fetches and unzips sources directly from a maven repository</span></div>
</li>
<li dir="ltr" style="font-family: Verdana; font-size: 13px; list-style-type: disc; margin-left: -9px; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-size: 13px; vertical-align: baseline;">runs the javadoc tool (with recommenders documenation)</span></div>
</li>
<li dir="ltr" style="font-family: Verdana; font-size: 13px; list-style-type: disc; margin-left: -9px; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-size: 13px; vertical-align: baseline;">upload updated javadoc</span></div>
</li>
</ul>
</td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 13px; vertical-align: baseline;">~3 Weeks</span></div>
</td></tr>
<tr style="height: 0px;"><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 13px; vertical-align: baseline;">2 -</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 13px; vertical-align: baseline;">Extend Javadoc with CoRe statistics</span></div>
</td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 13px; vertical-align: baseline;">Extend
the Javadoc Tool framework by one or more 'Doclets' which allow
different extdoc providers (based on the extdoc providers of Code
Recommenders) to contribute directly to the generated HTML output via
the Javadoc API</span></div>
</td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 13px; vertical-align: baseline;">~7 Weeks</span></div>
</td></tr>
<tr style="height: 0px;"><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 13px; vertical-align: baseline;">3 -</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 13px; vertical-align: baseline;">Server Backend für Social Javadoc</span></div>
</td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 13px; vertical-align: baseline;">RESTful API Server backend, which stores and organizes the code snippets, tags and documentation comments by users.</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 13px; vertical-align: baseline;">Implementation with the OData protocol backed up by a SQL database like MySQL.</span></div>
</td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 13px; vertical-align: baseline;">~4-5 Weeks</span></div>
</td></tr>
<tr style="height: 0px;"><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 13px; vertical-align: baseline;">4 -</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 13px; vertical-align: baseline;">Webpage Frontend for API Documenation</span></div>
</td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 13px; vertical-align: baseline;">Enable
users to directly edit, comment or rate on API documentation through a
webpage or the REST API (maybe an Eclipse IDE plugin afterwards)</span></div>
</td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 13px; vertical-align: baseline;">Remaining Time</span></div>
</td></tr>
<tr style="height: 0px;"><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 13px; vertical-align: baseline;">5 -</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 13px; vertical-align: baseline;">Webpage Frontend for Code Snippets</span></div>
</td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 13px; vertical-align: baseline;">Integration
of code snippets, which are provided by the Snipmatch subproject of
Code Recommenders. Alternatively, the code snippets could also be posted
directly by developers through the webinterface or via the REST API
(maybe an Eclipse IDE plugin afterwards)</span></div>
</td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 13px; vertical-align: baseline;">Remaining Time</span></div>
</td></tr>
<tr style="height: 0px;"><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 13px; vertical-align: baseline;"> </span></div>
</td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 13px; vertical-align: baseline;"> </span></div>
</td><td style="border: 1px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 12px; vertical-align: baseline;"> </span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
</div>
<hr />
<span style="font-family: Verdana; font-size: 13px; vertical-align: baseline;"></span><br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 8pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 15px; font-weight: bold; vertical-align: baseline;">18 Weeks GSoC</span></div>
</td></tr>
</tbody></table>
</div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<br /></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
</div>
<h2>
<span style="font-family: Verdana; font-size: 19px; font-weight: bold; vertical-align: baseline;"><br /></span></h2>
<h2>
<span style="font-family: Verdana; font-size: 19px; font-weight: bold; vertical-align: baseline;">About my work and contact information</span></h2>
<br />
<span style="font-family: Verdana; font-size: 19px; font-weight: bold; vertical-align: baseline;"></span><br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;">Until
now, I’ve done some various bugfixes and corrections in the frontend of
the Code Recommenders Eclipse Plug-in, improved the drag’n’drop
provider ranking in the Extdoc View and worked out a documentation for
the different code completion scenarios (method calls, overrides,
annotations etc.) in Java and how we want to treat them in the future at
Code Recommenders.</span></div>
<br />
<span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;"></span><br />
<div dir="ltr" style="line-height: 1.4625; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;">Please feel free to contact me for further informations on my work or my GSoC proposal:</span></div>
<br />
<span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;"></span><br />
<div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Arial; font-size: 12px; vertical-align: baseline;"> </span></div>
<div dir="ltr">
<table style="border-collapse: collapse; border: none;"><colgroup></colgroup><tbody>
<tr style="height: 0px;"><td style="border: 0px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 15px; font-weight: bold; vertical-align: baseline;">email</span></div>
</td><td style="border: 0px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<span style="color: #1155cc; font-family: Verdana; font-size: 15px; text-decoration: underline; vertical-align: baseline;">mail@gottschaemmer.net</span></div>
</td></tr>
<tr style="height: 0px;"><td style="border: 0px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 15px; font-weight: bold; vertical-align: baseline;">mailing lists</span><span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;"> </span></div>
</td><td style="border: 0px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<span style="color: #1155cc; font-family: Verdana; font-size: 15px; text-decoration: underline; vertical-align: baseline;">recommenders-dev@eclipse.org</span><span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;">,</span></div>
<div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<span style="color: #1155cc; font-family: Verdana; font-size: 15px; text-decoration: underline; vertical-align: baseline;">soc-dev@eclipse.org</span></div>
</td></tr>
<tr style="height: 0px;"><td style="border: 0px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 15px; font-weight: bold; vertical-align: baseline;">gtalk/jabber</span></div>
</td><td style="border: 0px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;">patrick@gottschaemmer.net</span></div>
</td></tr>
<tr style="height: 0px;"><td style="border: 0px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 15px; font-weight: bold; vertical-align: baseline;">icq</span></div>
</td><td style="border: 0px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;">216653447</span></div>
</td></tr>
<tr style="height: 0px;"><td style="border: 0px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 15px; font-weight: bold; vertical-align: baseline;">skype</span></div>
</td><td style="border: 0px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;">paddyg89</span></div>
</td></tr>
<tr style="height: 0px;"><td style="border: 0px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 15px; font-weight: bold; vertical-align: baseline;">astra</span></div>
</td><td style="border: 0px solid #000000; padding: 7px 7px 7px 7px; vertical-align: top;"><div dir="ltr" style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;">paddyg89</span></div>
</td></tr>
</tbody></table>
</div>
<div dir="ltr" style="line-height: 1.6; margin-bottom: 8pt; margin-top: 0pt;">
<span style="font-family: Arial; font-size: 12px; vertical-align: baseline;"> </span></div>
<br />
<span style="font-family: Arial; font-size: 12px; vertical-align: baseline;"></span><br />
<div dir="ltr" style="line-height: 1.6; margin-bottom: 8pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 15px; font-weight: bold; vertical-align: baseline;">Links</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;">[1] </span><a href="http://www.eclipse.org/recommenders/" style="text-decoration: none;"><span style="color: #1155cc; font-family: Verdana; font-size: 15px; text-decoration: underline; vertical-align: baseline;">http://www.eclipse.org/recommenders/</span></a></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;">[2] </span><a href="http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/" style="text-decoration: none;"><span style="color: #1155cc; font-family: Verdana; font-size: 15px; text-decoration: underline; vertical-align: baseline;">http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/</span></a></div>
<span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;">[3] </span><a href="http://www.odata.org/" style="text-decoration: none;"><span style="color: #1155cc; font-family: Verdana; font-size: 15px; text-decoration: underline; vertical-align: baseline;">http://www.odata.org/</span></a><br />
<span style="font-family: Verdana; font-size: 15px; vertical-align: baseline;"></span></div>
<div>
<span style="font-family: Verdana, sans-serif;"><span style="vertical-align: baseline;"></span></span></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1479535086136999079.post-33844906990971258942013-05-09T09:09:00.001+02:002013-05-09T10:35:22.357+02:00GSOC Proposal: Re-Writing SnipMatch Code Completion Engine<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-xR5ncUJ4NRA/T9Q-iSPtZUI/AAAAAAAAAKU/hXzensnva54/s1600/photo.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><br /></a><a href="http://3.bp.blogspot.com/-xR5ncUJ4NRA/T9Q-iSPtZUI/AAAAAAAAAKU/hXzensnva54/s1600/photo.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="http://3.bp.blogspot.com/-xR5ncUJ4NRA/T9Q-iSPtZUI/AAAAAAAAAKU/hXzensnva54/s200/photo.jpg" width="200" /></a></div>
<br />
<br />
<br />
<br />
<i>I am Madhuranga Lakjeewa. I hope to participate the Google Summer of Code 2013 with Eclipse Code Recommenders SnipMatch project. This is my project proposal. If you have any idea please comment here and i would be glad to hear your feedback.</i><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<h2 style="text-align: left;">
Abstract</h2>
SnipMatch is a code snippet search tool which falls under Eclipse Code Recommenders. It will be extended as a social snippet sharing tool in which the contributors can create and share snippets with others. Current version of SnipMatch can work only locally with a local snippet repository. But this current SnipMatch version has many problems in architecture level and code level. My proposal is to rewrite SnipMatch code completion engine by eliminating the current drawbacks.<br />
<br />
<h2 style="text-align: left;">
Detailed Information</h2>
Programmers often use code snippets to save their valuable time. But with the intention of time conserving they are wasting considerable amount of time to search good code snippets and customize those snippets to their code context. SnipMatch is the definite solution for this matter.<br />
The core functionality of SnipMatch is providing code snippets quickly and adapting them to the current code context. Following are the major concerns which have been considered at the design of SnipMatch.<br />
<br />
<ul style="text-align: left;">
<li>Snippet repository (Local/Remote)</li>
<li>Snippet Saving format</li>
<li>Snippet Searching Mechanism</li>
<li>Client UI</li>
</ul>
<br />
During last few years SnipMatch has been evolved through several design stages. Those are;<br />
<br />
<ul style="text-align: left;">
<li>SnipMatch with remote repository <a href="http://joelbrandt.org/publications/wightman_uist2012_snipmatch.pdf" target="_blank">[1]</a></li>
<li>SnipMatch with remote+local (Synchronized) repositories <a href="https://code.google.com/p/snipmatch/wiki/Merge_SnipMatch_into_Recommeners_project_proposal" target="_blank">[2]</a></li>
<li>SnipMatch with social snippet contribution <a href="http://wiki.eclipse.org/Google_Summer_of_Code_2013_Ideas#Eclipse_Code_Recommenders:_Social_Snippets" target="_blank">[3]</a></li>
</ul>
<br />
SnipMatch with remote repository was the initial idea. But the advantages of having a local repository were noticed later. A remote repository was not suitable for offline and slow internet connection usage. The next design stage was SnipMatch with a local repository which had been synchronized with the main remote repository. The major designs of this stage were discussed at the last year GSoC (GSoC 2012). The Social Snippet is the recent idea which has been immerged with GSoC 2013 idea list. It is about creating a social snippets infrastructure for SnipMatch, which allows developers to create and rate snippets.<br />
Being interested on this idea, I started testing the current version of SnipMatch. As with the original GSoC 2013 idea, this version of SnipMatch should be extended to facilitate social snippet sharing. But I encountered several issues in the current version during the testing period.<br />
<br />
<div style="text-align: left;">
<b>1. Snippet resolution mechanism does not work as intended. It does not support to the standard JFace language format.</b></div>
<br />
JFace template language is the standard Eclipse template language. In SnipMatch, the same language is used for code snippets. Then the code snippets can be easily handled by the JFace library. But the current version of SnipMatch does not support to Eclipse template language.<br />
<br />
<i> Eg:</i> In the SnipMatch snippet templates, Library imports are declared as;<br />
<div style="text-align: center;">
<span style="font-family: 'Courier New', Courier, monospace;"><b>${import(java.util.Arrays)}</b></span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><b><br /></b></span></div>
But in the standard forms like SWT statements imports are declared as;<br />
<div style="text-align: center;">
<span style="font-family: Courier New, Courier, monospace;"><b>${imp:<span style="color: purple;">import</span>(java.util.Arrays)}</b></span><br />
<span style="font-family: Courier New, Courier, monospace;"><b><br /></b></span></div>
Even though SnipMatch core uses its own way of template variable declaration, it triggers errors. <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=401771#c44" target="_blank">[4]</a><br />
<br />
<b>2. Snippet editor is not user friendly.</b><br />
<br />
Current snippet editor is just like a simple text editor. It does not provide color syntax or syntax suggestion for users. And the window is not re-sizable. Whole code should be edited in this small window.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-MyGjTEmlG04/UYNUzVgnsgI/AAAAAAAAAMA/smIwOC0olO4/s1600/snippet_editor.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="480" src="http://1.bp.blogspot.com/-MyGjTEmlG04/UYNUzVgnsgI/AAAAAAAAAMA/smIwOC0olO4/s640/snippet_editor.jpg" width="640" /></a></div>
<br />
<b>3. Snippet search pop-up dialog does not work properly.</b><br />
<br />
Eg: Some times it does not give any suggestion, though we type a search pattern.<br />
<br />
Above problems are not all the problems SnipMatch current version exhibits. Those are the problems I could found.<br />
<br />
I discussed the above problems in the Bugzilla bug entity <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=401771" target="_blank">[5]</a>. There is no point of extending the current version of SnipMatch without addressing the existing problems. It is not a simple task since reasonable architecture level and code level changes may be required for this. For an example, to solve the above 1st problem SnipMatch core should be re-written.<br />
This is my proposal for GSoC 2013. I will rewrite the SnipMatch code completion engine by eliminating the current problem. I am limiting my project scope to code completion engine. To achieve the ultimate goal of SinpMatch Social Sharing System, I believe that we should have a SnipMatch version which is perfectly functioning in local mode. My goal is to create the SnipMatch completion engine which is working 100% with a local snippet repository.<br />
<br />
<h3 style="text-align: left;">
Technology</h3>
Eclipse Rich Client Platform (RCP) is the main technology which I will be using. In addition to that I will get the help of Java language and its’ related technologies. I will use Eclipse Plug-in Development Environment (PDE) as my development environment.<br />
<br />
<h2 style="text-align: left;">
Preparing Background</h2>
Until GSoC program get started, I am expecting to do several background tasks. I want to test the current version of SnipMatch further and find more problems it has. I will create a detailed list of existing problems and potential solutions, which will assist me to re-design the SnipMatch architecture. In addition to that I will continue my studies on Eclipse RCP development.<br />
<br />
<h2 style="text-align: left;">
Deliverables</h2>
SinipMatch completion engine is my main output. It will produce all the functionalities locally with a local snippet repository which the ultimate SinpMatch snippet sharing system required. Following features will be included in my final output.<br />
<br />
<ul style="text-align: left;">
<li>SnipMatch preference window.</li>
</ul>
This window will provide the functionalities which are required to configure SnipMatch. In addition to that there will be entry in the 'Colors and Fonts' section in 'General->Appearance' for SnipMatch. It will allow users to change the colors and fonts in SnipMatch search view.<br />
<br />
<ul style="text-align: left;">
<li>SnipMatch search view.</li>
</ul>
Drop down search view with suggestions. A preview will be shown with the user ratings.<br />
<br />
<ul style="text-align: left;">
<li>SnipMatch search engine.</li>
</ul>
A good search engine with more intelligent suggestions. Apache Lucene is a potential technology which this search engine will be based on.<br />
<br />
<ul style="text-align: left;">
<li>Snippet insertion mechanism.</li>
</ul>
Snippets in JFace language format will be inserted to the code with code context based changes.<br />
<br />
<h2 style="text-align: left;">
Schedule</h2>
<ul style="text-align: left;">
<li>17 June – 23 June (1 week)</li>
</ul>
Defining snippet serializing template format and finalize high level architecture<br />
<br />
<ul style="text-align: left;">
<li>24 June – 07 July (2 weeks)</li>
</ul>
Creating SnipMatch preference window<br />
<br />
<ul style="text-align: left;">
<li>08 July – 28 July (3 weeks)</li>
</ul>
Implementing snippet search view<br />
<br />
<ul style="text-align: left;">
<li>29 July - 18 August (3 weeks)</li>
</ul>
Implementing snippet search engine<br />
<br />
<ul style="text-align: left;">
<li>19 August - 08 September (3 weeks)</li>
</ul>
Implementing code context adaptation of snippets (Snippet insertion mechanism)<br />
<br />
<ul style="text-align: left;">
<li>09 September – 16 September (1 week)</li>
</ul>
Testing and finalizing<br />
<br />
<h2 style="text-align: left;">
Expectations</h2>
I am expecting a mentor who is accessible and responsive. As I do not have a vast knowledge about the technologies related to Eclipse plug-in development, I like if my mentor can introduce me new technologies when it is applicable. Then I can learn myself and use them properly.<br />
<br />
<br />
<h3 style="text-align: left;">
References</h3>
[1]. Doug Wightman,Zi Ye,Joel Brandt, Roel Vertegaal “SnipMatch: Using Source Code Context to Enhance Snippet Retrieval and Parameterization” [Online] Available:<a href="http://joelbrandt.org/publications/wightman_uist2012_snipmatch.pdf">http://joelbrandt.org/publications/wightman_uist2012_snipmatch.pdf</a><br />
[2]. “Merge and improve SnipMatch into Eclipse Code Recommenders” [Online] Available:<a href="https://code.google.com/p/snipmatch/wiki/Merge_SnipMatch_into_Recommeners_project_proposal">https://code.google.com/p/snipmatch/wiki/Merge_SnipMatch_into_Recommeners_project_proposal</a><br />
[3]. “Google Summer of Code 2013 Ideas Eclipse Code Recommenders: Social Snippets” [Online] Available:<a href="http://wiki.eclipse.org/Google_Summer_of_Code_2013_Ideas#Eclipse_Code_Recommenders:_Social_Snippets">http://wiki.eclipse.org/Google_Summer_of_Code_2013_Ideas#Eclipse_Code_Recommenders:_Social_Snippets</a><br />
[4]. Bugzilla Comment 44 [Online] Available: <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=401771#c44">https://bugs.eclipse.org/bugs/show_bug.cgi?id=401771#c44</a><br />
[5]. Bugzilla Bug 401771 - [gsoc] Social Snippets [Online] Available: <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=401771">https://bugs.eclipse.org/bugs/show_bug.cgi?id=401771</a><br />
<div>
<br /></div>
<br />
<br /></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1479535086136999079.post-48823069552949312812013-05-07T23:12:00.001+02:002013-05-07T23:12:05.994+02:00GSOC Proposal: Workspace Local Code Snippet Suggestions<i>Today I welcome Kavith Thiranga Lokuhewage who submitted an GSOC proposal about finding code snippets for your task at hand. Find out how... </i><i>Best, </i><i>Marcel</i><br />
<div>
<hr />
<br />
<br />
<table border="0" style="width: 100%;">
<tbody>
<tr>
<td style="width: 30%;"><a href="http://4.bp.blogspot.com/-3jTzY7ZyEBA/UYeP37XR5HI/AAAAAAAAAgE/pW8fyheit50/s1600/s.jpg" imageanchor="1"><img border="0" src="http://4.bp.blogspot.com/-3jTzY7ZyEBA/UYeP37XR5HI/AAAAAAAAAgE/pW8fyheit50/s320/s.jpg" /></a></td>
<td style="width: auto;"><br />
<h3>
Google Summer of Code 2013</h3>
<div>
<br /></div>
<div>
<br /></div>
<h1>
Eclipse Code Recommenders - Workspace Local Code Snippet Suggestions </h1>
<h3>
- Kavith Thiranga Lokuhewage </h3>
<h3>
</h3>
<i><b>Short description:</b></i><br />
<div style="text-align: justify;">
A plugin for the Eclipse IDE which can search the entire workspace to
find out code snippets, which are similar to the context that the
developer is currently involved in. The plugin will suggest a list of
code snippets from existing source code to the developer in a short
amount of time, so that he/she will be able to have a quick look around
the list and decide which results are worth a closer look to understand
more about the framework/API usage.</div>
<br /></td>
</tr>
</tbody></table>
<h2>
Problem background</h2>
<div align="justify">
<span style="font-size: medium; line-height: 170%; text-align: justify;">Today almost every software is built using existing frameworks/APIs. Most of framework libraries often provide a large number of classes and methods. Furthermore, libraries provided by different companies and different organizations follow different styles. Hence it’s always been a burden for the developers to learn new APIs for each new project that they work with. It’s a fact that the best documentation for a framework is the existing code itself. When working with new projects, the developers sometimes get stuck with a particular piece of code and even though they are certain that the other developers might have faced (and solved) the same problem previously, it is really hard to traverse through the entire source code to find out relevant pieces of code.</span></div>
<div align="justify">
<span style="font-size: medium; line-height: 170%;"> Full text search over source code isn’t really helping in these kind of situations as the target is to find out code snippets which have a particular set of structural characteristics. For an example a developer may need to search for a code snippet in which an object of particular data type (or several objects) is used and a particular method (or several methods) is called on that object.</span></div>
<h2>
A brief description about the Solution</h2>
<div align="justify">
<span style="font-size: medium; line-height: 170%;">By building an IDE extension which helps developers to easily find out code snippets which are in similar context in which the developer is currently involved in, it is able to increase the framework learning speed of the developer. Since full text search is not enough, the search engine should be able to capture the structural information of source code. </span></div>
<div align="justify">
<span style="font-size: medium; line-height: 170%;">Furthermore it has to be fast enough to provide a comfortable experience to the developer. There should also be a good scoring system for the results so that the most important snippets come up in the list.</span></div>
<h2>
A brief description about available Code Search tools for Eclipse IDE</h2>
<div align="justify">
<span style="font-size: medium; line-height: 170%;">As discussed by (Böhm, 2012) , there are few tools available for Eclipse IDE which provide structural information based search over source code, namely Strathcona, Java Tools Language, Java Development Tools, JQuery ( not the <span class="st">JavaScript Library</span> ) and CodeGenie. With all of them excluding Strathcona, developer has to manually query for data types, method signatures, etc. Some of them have disadvantages such as index is not updated frequently, index is hosted online and someone has to manually update the index, etc. </span></div>
<div align="justify">
<span style="font-size: medium; line-height: 170%;">Considering the information being captured and the options been given for the search, JDT provides excellent tools for java source code searching. Its search index is saved on client side and updating the index happens upon saving a file. Below table represents the information captured by JDT Search Index. Source: (Böhm, 2012)</span></div>
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse; border: 1px solid black; width: 503px;"><tbody>
<tr style="height: 14.35pt;"> <td height="49" style="background-color: #99ccff; border: 1px solid black; height: 14.35pt; padding: 0in 5.4pt 0in 5.4pt; width: 125.75pt;" valign="top" width="168"><br />
<div align="center" style="line-height: normal; text-align: center;">
<b><span style="font-size: 12.0pt;">Type</span></b></div>
</td> <td style="background-color: #99ccff; border: 1px solid black; height: 14.35pt; padding: 0in 5.4pt 0in 5.4pt; width: 157.5pt;" valign="top" width="210"><br />
<div align="center" style="text-align: center;">
<b><span style="font-size: 12.0pt; line-height: 200%;">Method</span></b></div>
</td> <td style="background-color: #99ccff; border: 1px solid black; height: 14.35pt; padding: 0in 5.4pt 0in 5.4pt; width: 94.35pt;" valign="top" width="126"><br />
<div align="center" style="line-height: normal; text-align: center;">
<b><span style="font-size: 12.0pt;">Field</span></b></div>
</td> </tr>
<tr> <td style="border-right: 1px solid black; padding: 0in 5.4pt 0in 5.4pt; width: 125.75pt;" valign="top" width="168"><br />
<div align="left" style="line-height: normal; text-align: left;">
<span style="font-size: 12.0pt;">Name</span></div>
<div align="left" style="line-height: normal; text-align: left;">
<span style="font-size: 12.0pt;">Modifiers</span></div>
<div align="left" style="line-height: normal; text-align: left;">
<span style="font-size: 12.0pt;">Implemented Types</span></div>
<div align="left" style="line-height: normal; text-align: left;">
<span style="font-size: 12.0pt;">Declaring Type</span></div>
<div align="left" style="line-height: normal; text-align: left;">
<span style="font-size: 12.0pt;">Type Arguments</span></div>
<div align="left" style="line-height: normal; text-align: left;">
<span style="font-size: 12.0pt;">Extended Types</span></div>
<div align="left" style="line-height: normal; text-align: left;">
<span style="font-size: 12.0pt;">Annotations</span></div>
<div align="left" style="line-height: normal; text-align: left;">
<span style="font-size: 12.0pt;">Fields written</span></div>
<div align="left" style="line-height: normal; text-align: left;">
<span style="font-size: 12.0pt;">Fields read</span></div>
<div align="left" style="line-height: normal; text-align: left;">
<span style="font-size: 12.0pt;">Used Types</span></div>
<div align="left" style="line-height: normal; text-align: left;">
<span style="font-size: 12.0pt;">Used Methods</span></div>
</td> <td style="border-right: 1px solid black; border-top: none; padding: 0in 5.4pt 0in 5.4pt; width: 157.5pt;" valign="top" width="210"><br />
<div align="left" style="line-height: normal; text-align: left;">
<span style="font-size: 12.0pt;">Name</span></div>
<div align="left" style="line-height: normal; text-align: left;">
<span style="font-size: 12.0pt;">Modifiers</span></div>
<div align="left" style="line-height: normal; text-align: left;">
<span style="font-size: 12.0pt;">Declaring Type</span></div>
<div align="left" style="line-height: normal; text-align: left;">
<span style="font-size: 12.0pt;">Return Type</span></div>
<div align="left" style="line-height: normal; text-align: left;">
<span style="font-size: 12.0pt;">Parameter Types</span></div>
<div align="left" style="line-height: normal; text-align: left;">
<span style="font-size: 12.0pt;">Checked Exception Types</span></div>
<div align="left" style="line-height: normal; text-align: left;">
<span style="font-size: 12.0pt;">Annotations</span></div>
<div align="left" style="line-height: normal; text-align: left;">
<span style="font-size: 12.0pt;">Fields written</span></div>
<div align="left" style="line-height: normal; text-align: left;">
<span style="font-size: 12.0pt;">Fields read</span></div>
<div align="left" style="line-height: normal; text-align: left;">
<span style="font-size: 12.0pt;">Used Types</span></div>
<div align="left" style="line-height: normal; text-align: left;">
<span style="font-size: 12.0pt;">Used Methods</span></div>
</td> <td style="border-left: none; border-top: none; padding: 0in 5.4pt 0in 5.4pt; width: 94.35pt;" valign="top" width="126"><br />
<div align="left" style="line-height: normal; text-align: left;">
<span style="font-size: 12.0pt;">Name</span></div>
<div align="left" style="line-height: normal; text-align: left;">
<span style="font-size: 12.0pt;">Modifiers</span></div>
<div align="left" style="line-height: normal; text-align: left;">
<span style="font-size: 12.0pt;">Declaring Type</span></div>
<span style="font-size: 12.0pt; line-height: 200%;">Type</span></td> </tr>
</tbody> </table>
<h2>
</h2>
<h2>
Advantages of using the proposed solution over available tools</h2>
<div align="justify">
<span style="font-size: medium; line-height: 170%;">The proposed solution will use an indexed storage on client side as same as JDT hence getting results will be fast. Comparing to JDT indexing, the proposed search engine will be able to capture a lot more structural information of source code such as Try/catch blocs, variable usage, etc. (Please refer to the topic “Prototype Implementation” to view a full list of information being captured). </span></div>
<div align="justify">
<span style="font-size: medium; line-height: 170%;">The proposed solution will detect developer’s current context automatically and provide a list of similar code snippets in a condensed snippet form. So the search query will be created automatically rather than requiring the developer to manually execute the queries. This a similar kind of approach as used in Strathcona, but comparing to the information captured by Strathcona, this plugin is far ahead</span>.</div>
<h2>
Project Description</h2>
<div align="justify">
<span style="font-size: medium; line-height: 170%;">The objective of the project is to implement a plugin for the Eclipse IDE, which will suggest existing source code snippets to the developer depending on the context in which the developer is involved in</span>.</div>
<blockquote>
<h3>
Scope</h3>
<div align="justify">
<span style="font-size: medium; line-height: 170%;">Since the way of capturing structural information differs from language to language, this plugin will only target the projects which are built using Java language. Furthermore it will provide example code snippets only from the existing source code which is available in local workspace. Hence it will be more suitable for projects which already have enough amount of existing source code.</span></div>
<h3>
Features</h3>
<div align="justify">
<span style="font-size: medium; line-height: 170%;">The users will be able to enable the plugin for a particular project via the IDE preferences window so that it is able to enable the indexing of source code on demand, preventing unnecessary performance issues. The preference window will also provide additional options for the plugin. </span></div>
<div align="justify">
<span style="font-size: medium; line-height: 170%;">The users will be able to get a list of suggested code snippets in a condensed snippet form so that they can quickly decide which snippets are worth a closer look. By clicking on a result, users will be able to open the source code file which contains the relevant code snippet, in a new editor view.</span></div>
</blockquote>
<h2>
Prototype search engine Implementation</h2>
<div align="justify">
<span style="font-size: medium; line-height: 170%;">Please refer to <a href="http://git.eclipse.org/c/recommenders.incubator/org.eclipse.recommenders.codesearch.git/">this</a> git repository of the prototype implementation. A prototype of a code search engine has already been developed as a Master's thesis by Tobias Böhm. It is implemented using Apache Lucene. His project’s main objective was to allow developers to execute search queries by using a query language called Lucene QL which is built upon Lucene Query Syntax.</span></div>
<div align="justify">
<span style="font-size: medium; line-height: 170%;"> The indexing mechanism implemented in the prototype is outstanding. This prototype is able to capture a large amount of structural information under five main entities data type, method, field, tryCatch block and Variable Usage. Below list is a full set of structural information captured by indexers of prototype implementation. Source: (Böhm, 2012)</span></div>
<table border="0" cellpadding="0" cellspacing="0px" style="border-collapse: separate; border: none;"><tbody>
<tr> <td style="background-color: #99ccff; border: 1px solid black; padding: 0in 5.4pt 0in 5.4pt; width: 132.3pt;" valign="top" width="176"><br />
<div align="center" style="text-align: left;">
<b>Type</b></div>
</td> <td style="background-color: #99ccff; border-left: none; border: 1px solid black; padding: 0in 5.4pt 0in 5.4pt; width: 133.8pt;" valign="top" width="178"><br />
<div align="center" style="text-align: left;">
<b>Method</b></div>
</td> <td style="background-color: #99ccff; border-left: none; border: 1px solid black; width: 145.8pt;" valign="top" width="194"><br />
<div align="center" style="text-align: left;">
<b>Field</b></div>
</td> <td style="background-color: #99ccff; border-left: none; border: 1px solid black; padding: 0in 5.4pt 0in 5.4pt; width: 117.0pt;" valign="top" width="156"><br />
<div align="center" style="text-align: left;">
<b>Try Catch</b></div>
</td> </tr>
<tr style="height: 225.0pt;"> <td rowspan="3" style="background-color: white; border-top: none; border: 1px solid black; height: 225.0pt; margin: 10px; padding: 0in 5.4pt 0in 5.4pt; width: 132.3pt;" valign="top" width="176"><br />
Type<br />
Handle<br />
<span class="SpellE">FriendlyName</span><br />
<span class="SpellE">AllDeclaredMethodNames</span><br />
<span class="SpellE">DeclaredMethodNames</span><br />
<span class="SpellE">DeclaredFieldNames</span><br />
<span class="SpellE">AllDeclaredFieldNames</span><br />
<span class="SpellE">FullText</span><br />
<span class="SpellE">FieldsRead</span><br />
Annotations<br />
<span class="SpellE">FullyQualifiedName</span><br />
<span class="SpellE">ImplementedTypes</span><br />
<span class="SpellE">ExtendedTypes</span><br />
<span class="SpellE">UsedTypes</span><br />
<span class="SpellE">InstanceofTypes</span><br />
<span class="SpellE">AllImplementedTypes</span><br />
<span class="SpellE">AllExtendedTypes</span><br />
<span class="SpellE">DeclaredFieldTypes</span><br />
<span class="SpellE">UsedMethods</span><br />
<span class="SpellE">OverriddenMethods</span><br />
<span class="SpellE">DeclaredMethods</span><br />
<span class="SpellE">ResourcePath</span><br />
Timestamp<br />
Modifiers<br />
<span class="SpellE">ProjectName</span></td> <td rowspan="3" style="background-color: white; border-left: none; border-top: none; border: 1px solid black; height: 225.0pt; margin: 10px; padding: 0in 5.4pt 0in 5.4pt; width: 133.8pt;" valign="top" width="178"><br />
Type<br />
Handle<br />
<span class="SpellE">FriendlyName</span><br />
<span class="SpellE">ReturnVariableExpressions</span><br />
<span class="SpellE">DeclaredFieldNames</span><br />
<span class="SpellE">AllDeclaredFieldNames</span><br />
<span class="SpellE">FullText</span><br />
<span class="SpellE">FieldsRead</span><br />
<span class="SpellE">FieldsWritten</span><br />
<span class="SpellE">ParameterTypesStructural</span><br />
Annotations<br />
<span class="SpellE">FullyQualifiedName</span><br />
<span class="SpellE">UsedTypes</span><br />
<span class="SpellE">ParameterTypes</span><br />
<span class="SpellE">ReturnType</span><br />
<span class="SpellE">InstanceofTypes</span><br />
<span class="SpellE">DeclaredFieldTypes</span><br />
<span class="SpellE">DeclaringType</span><br />
<span class="SpellE">CheckedExceptions</span><br />
<span class="SpellE">UsedMethods</span><br />
<span class="SpellE">ResourcePath</span><br />
<span class="SpellE">ParameterCount</span><br />
Timestamp<br />
Modifiers<br />
<span class="SpellE">ProjectName</span></td> <td style="background-color: white; border-left: none; border-top: none; border: 1px solid black; height: 225.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 145.8pt;" valign="top" width="194"><br />
Type<br />
Handle<br />
<span class="SpellE">FriendlyName</span><br />
<span class="SpellE">FullText</span><br />
<span class="SpellE">FullyQualifiedName</span><br />
<span class="SpellE">UsedTypes</span><br />
<span class="SpellE">FieldType</span><br />
<span class="SpellE">DeclaringType</span><br />
<span class="SpellE">ResourcePath</span><br />
Timestamp<br />
Modifiers<br />
<span class="SpellE">ProjectName</span></td> <td rowspan="3" style="background-color: white; border-left: none; border-top: none; border: 1px solid black; height: 225.0pt; margin: 10px; padding: 0in 5.4pt 0in 5.4pt; width: 117.0pt;" valign="top" width="156"><br />
Type<br />
<span class="SpellE">DeclaredFieldNames</span><br />
<span class="SpellE">AllDeclaredFieldNames</span><br />
<span class="SpellE">FullText</span><br />
<span class="SpellE">FieldsRead</span><br />
<span class="SpellE">FieldsWritten</span><br />
<span class="SpellE">UsedFieldsInFinally</span><br />
<span class="SpellE">UsedFieldsInTry</span><br />
<span class="SpellE">FullyQualifiedName</span><br />
<span class="SpellE">UsedTypes</span><br />
<span class="SpellE">UsedTypesInTry</span><br />
<span class="SpellE">UsedTypesInFinally</span><br />
<span class="SpellE">InstanceofTypes</span><br />
<span class="SpellE">CaughtType</span><br />
<span class="SpellE">DeclaredFieldTypes</span><br />
<span class="SpellE">DeclaringType</span><br />
<span class="SpellE">UsedMethods</span><br />
<span class="SpellE">UsedMethodsInTry</span><br />
<span class="SpellE">UsedMethodsInFinally</span><br />
<span class="SpellE">ResourcePath</span><br />
Timestamp<br />
<span class="SpellE">ProjectName</span></td> </tr>
<tr style="height: 25.0pt;"> <td style="background-color: #99ccff; border-left: none; border-top: none; border: 1px solid black; margin: 10px; width: 145.8pt;" valign="top" width="194"><br />
<b>Variable usage</b></td> </tr>
<tr style="height: 225.0pt;"> <td style="background-color: white; border-left: none; border-top: none; border: 1px solid black; height: 225.0pt; margin: 10px; padding: 0in 5.4pt 0in 5.4pt; width: 145.8pt;" valign="top" width="194"><br />
Type<br />
Handle<br />
<span class="SpellE">VariableName</span><br />
<span class="SpellE">VariableType</span><br />
<span class="SpellE">DeclaringMethod</span><br />
<span class="SpellE">UsedAsParameterInMethods</span><br />
<span class="SpellE">UsedAsTargetForMethods</span><br />
<span class="SpellE">VariableDefinition</span></td> </tr>
</tbody> </table>
<br />
<div align="justify">
<span style="font-size: medium; line-height: 170%;">There’s also an extdoc provider named local code samples implemented using this search engine prototype. The local code samples extdoc provider is currently able to provide code snippets suggestions depending on variable type and called methods.</span></div>
<blockquote>
<div align="justify">
<span style="font-size: medium; line-height: 170%;"> For an example, when a developer selects a variable name or a method call in the editor, list of code snippets in which a similar type of variable/ similar method call is used, will be displayed in the extdoc provider view given that the indexing of code base is completed.</span></div>
</blockquote>
<h2>
Implementation of proposed solution</h2>
<span style="font-size: medium; line-height: 170%;">The prototype is using Apache Lucene to implement the search engine. Since Lucene is using an Inverted Index for the index storage, even though insertion may take some time, querying will be pretty much fast. Since viewing a list of condensed code snippets should be done in a short amount of time, it suits best for the local code search plugin.</span><br />
<span style="font-size: medium; line-height: 170%;">Considering the fact that the above mentioned search engine does a great job with indexing and there is a good amount of code which is worth to keep, it make sense to improve the search engine and use it for the local code search plugin rather than building a search engine from the scratch. </span><br />
<h2>
Targetting Deliverables for GSOC</h2>
<span style="font-size: medium; line-height: 170%;">As mentioned by Marcel (refer to <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=401843#c28">this comment</a>) the searcher and indexer do not work together very well. Sometimes accessing the search index fails. This need to be looked in deeper and fixed since it is the heart of everything. This will be a main task of the project.</span><br />
<div align="justify">
<span style="font-size: medium; line-height: 170%;">The implemented extdoc provider already triggers search and displays results when a filed name or method call is selected. The extdoc provider can be extended to trigger search upon selection of many more structral elements in the editor. Search can be triggered upon selecting,</span></div>
<div align="justify">
<span style="font-size: medium; padding-left: 100px;">1. Data Types (upon selecting Extended, Implemented or Declared Types) </span><br />
<span style="font-size: medium; padding-left: 100px;">2. Return Types (find methods which returns similar types) </span><br />
<span style="font-size: medium; padding-left: 100px;">3. Overidden Methods</span><br />
<span style="font-size: medium; padding-left: 100px;">4. Annotations </span><br />
<span style="font-size: medium; padding-left: 100px;">5. Checked Exceptions</span></div>
<div align="justify">
<span style="font-size: medium; line-height: 170%;">The representation of code snippet results in condensed form need improvements. Currently it only displays a simple code summery of each snippet. A screen shot of a result list is shown below.</span></div>
<div align="justify">
<img alt="result" height="327" longdesc="https://docs.google.com/file/d/0B2BPEvCcF5TIN2ZtdmJNU1AxajQ/edit?usp=sharing" src="http://www.exam.lk/result.jpg" width="686" /></div>
<div align="justify">
<span style="font-size: medium; line-height: 170%;">This can be improved to provide more expressive summary so that the developers will be able to quickly decide which snippets are worth looking at. Below is a list of things which can be added to summary view so that it will be more expressive.</span></div>
<div align="justify">
<span style="font-size: medium; padding-left: 100px;">1. </span><span style="font-size: medium;">Containing Package</span><br />
<span style="font-size: medium; padding-left: 100px;">2. </span><span style="font-size: medium;">The Class name/ Method Name</span><br />
<span style="font-size: medium; padding-left: 100px;">3. </span><span style="font-size: medium;">Whether it is a abstract class/ Interface</span><br />
<span style="font-size: medium; padding-left: 100px;">4. </span> <span style="font-size: medium;">Whether it is a abstract method/ overriden Method, overloads available, etc</span><br />
<span style="font-size: medium; padding-left: 100px;">5. </span> <span style="font-size: medium;">May be diplay two or three surrounding code lines in muted text</span></div>
<h2>
Further possible improvements to prototype</h2>
<span style="font-size: medium; line-height: 170%;">Please refer to the <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=401843">bugzilla</a> issue for more information.</span><br />
<div align="justify">
<span style="font-size: medium; line-height: 170%;"> As discussed by Tobias, there are several improvements which can be done for the indexing. </span></div>
<ul><ul>
<li><span style="font-size: medium; line-height: 170%;">Structural information such as Class Castings and thrown exceptions are not captured by current indexers. </span></li>
<li><span style="font-size: medium; line-height: 170%;">Improvements also can be done to indexing variable usage as currently it only captures information of variables which are declared inside the same block where it is used. </span></li>
</ul>
</ul>
<blockquote>
<span style="font-size: medium; line-height: 170%;">For an example, if a variable is declared as a class variable and used inside a method, usage of variable isn’t considered when the method is being indexed.</span></blockquote>
<ul>
<li><span style="font-size: medium; line-height: 170%;">The current implementation doesn’t provide a custom ranking mechanism for search results.</span><br />
<blockquote>
<span style="font-size: medium; line-height: 170%;">Scoring is all left to default Lucene scoring which uses a Vector Space Model (VSM). </span><span style="font-size: medium; line-height: 170%;">It is possible to affect default scoring of Lucene by implementing our own query classes. This will help to receive a search result in which the most relevant code snippets are on top of the list</span>.</blockquote>
</li>
</ul>
<div align="justify">
<span style="font-size: medium; line-height: 170%;">These improvements needs further discussions, specially implementing a scoring system. Some of these improvements may be achieved during the GSOC if time permits.</span></div>
</div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1479535086136999079.post-78431272664726607782013-05-06T00:20:00.000+02:002013-05-06T08:09:34.147+02:00GSOC Proposal: Usage Data Collection for Code Completion <i>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 series will be a bit different: In this series we will have a set of (wannabe) GSOC students presenting their projet proposals to the Eclipse Community in the large to get your feedback. If you like these ideas please post your ideas and comments here. Students would be glad to hear what you think!</i><br />
<i>Best,<br />Marcel</i><br />
<br />
_______________________________________________________________________________<br />
<br />
Hello,<br />
<br />
<br />
my name is Timur and I want to participate this year on Google summer of code 2013 (GSoC) extend the Eclipse Code Recommenders project by a specific dialog, which shows user specific statistics how they use the Eclipse code completion. This data will be graphical presented in an own dialog. Eclipse developers thus have the possibility to see how effectively they work every day with their IDE. <br />
<br />
<h3>
Project Description</h3>
Do you know how much time code completion saves you per day? No? Well, this proposal should address that by (locally) collecting usage data that can answer this and more sophisticated questions. Moreover, the collected data can then be used to make recommendations on the most effective use of your IDE, e.g., recommending a keyboard shortcut that you don't use (and presumably don't even know about).<br />
<br />
With this project various metrics could be created, which provide the developer interesting facts about his work. For example, we could show how many keystrokes are saved from a developer through the code completion engine that would have to type manually without this engine. With this additional data we could also evaluate the developer activity. On which days/weeks is the developer more productive and show this interesting information in a chart (or block diagram). So we can see which days/weeks are the real working days/weeks and the other one. This stats center could extend through other Eclipse data, like the Eclipse shortcuts and something else. The following data we could show about the using of the code completion engine in a specific dialog: <br />
<ul>
<li>Number of times code completion triggered, concluded and aborted </li>
<li>Number of saved keystrokes by using the code completion </li>
<li>Types on which the code completion was used (fields, local variables etc.) </li>
<li>In which classes code completion was used </li>
<li>How much time code completion saves</li>
</ul>
<br />
<h3>
Mockup</h3>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
The dialog for this additional information could be split in several tabs. The first tab contains all metric data about the use with code completion. The next tab “Charts” could contain a few graphical analyses about the use of the code completion engine based on days or weeks. The “Conclusion” tab contains some summarized data about the developer himself and some suggestions how developer could be more productive with the Eclipse IDE. For this use case we could analyse in the background the used Eclipse shortcuts. With this data we know, which shortcuts are often used and which one are not used. With this information we could suggest which other common shortcuts are used by another proficient developers. This could help some Eclipse newbies, because they can learn very fast, which is the common way to develop productive software. But also real Eclipse experts will hopefully give some good tips. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-uB-wmmy3q3o/UYaZxb-_5cI/AAAAAAAAACc/wnxzhSvfoh8/s1600/stats_new.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="284" src="http://3.bp.blogspot.com/-uB-wmmy3q3o/UYaZxb-_5cI/AAAAAAAAACc/wnxzhSvfoh8/s320/stats_new.png" width="320" /></a></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-tM4P0tqjkYA/UYaaW8wGTyI/AAAAAAAAACk/5KKyqfT8XvQ/s1600/chart_new.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="288" src="http://2.bp.blogspot.com/-tM4P0tqjkYA/UYaaW8wGTyI/AAAAAAAAACk/5KKyqfT8XvQ/s320/chart_new.png" width="320" /></a><a href="http://1.bp.blogspot.com/-5T44_qY-6eY/UYaakWVqoOI/AAAAAAAAACs/xnCseNDbr9U/s1600/conclusion_new.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="288" src="http://1.bp.blogspot.com/-5T44_qY-6eY/UYaakWVqoOI/AAAAAAAAACs/xnCseNDbr9U/s320/conclusion_new.png" width="320" /></a></div>
<br />
<br />
<h3>
Deliverables</h3>
<br />
In the final stage, of course, the implemented plugins should have been tested and checked out for their functionality (through the mentor). For this project I have planed the following milestones: <br />
<br />
<br />
<ul>
<li>Milestone 1 (25. May): </li>
<ul>
<li>Create UI Mockup with the community</li>
<li>Study the documentation and the code base </li>
</ul>
<li>Milestone 2 (20. June):</li>
<ul>
<li>Integrate various metrics and implement the infrastructure for this project</li>
<li>Pimp the dialog, e.g. with ui.forms and some cool icons etc. </li>
</ul>
<li>Milestone 3 (15. July): </li>
<ul>
<li>Integrate the charts and conclusion tabs in the dialog </li>
</ul>
<li>Milestone 4 (10. August):</li>
<ul>
<li>Create tests for this project, if possible I will do this parallel </li>
<li>Maintain the wiki and document the new created code </li>
</ul>
</ul>
<h3>
</h3>
<h3>
Public Checkpoints</h3>
<ul>
<li>Checkpoint 1 (31. May):</li>
<ul>
<li>Announce the UI Mockup in a blog post or Wiki </li>
</ul>
<li>Checkpoint 2 (30. June):</li>
<ul>
<li>Announce the dialog with the first tab (contains metrics) </li>
</ul>
<li>Checkpoint 3 (31. July):</li>
<ul>
<li>Announce the chart and conclusion tab </li>
</ul>
</ul>
<br />
<h3>
Tech-Spec</h3>
Here are some tools or frameworks are listed, which I would to use: <br />
<br />
<ul>
<li>Attractive look & feel in the dialog</li>
<ul>
<li>SWT, JFace und UI.Forms </li>
</ul>
<li>Persist user data </li>
<ul>
<li>JSON: persist the java objects on the file system</li>
<li>Plugin: com.google.gson.Gson </li>
</ul>
<li>Create charts</li>
<ul>
<li>JFreeChart (Open Source under LGPL)</li>
<li>http://www.jfree.org/jfreechart/ </li>
</ul>
<li>Tests</li>
<ul>
<li>JUnit, JUnit Plugin Tests and SWTBot tests </li>
</ul>
</ul>
<br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-size: small;"></span></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<span style="font-size: small;"> </span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1479535086136999079.post-66034913209982318052013-03-27T17:47:00.002+01:002013-03-27T17:47:13.078+01:00Code Recommenders in the latest Oracle Java MagazineThis is fantastic news: There is a short article about Code Recommenders in the latest Oracle Java Magazine in the section "Java Nation". <a href="http://www.oraclejavamagazine-digital.com/javamagazine_open/20130304#pg1">Get your copy soon</a>.Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-1479535086136999079.post-61624214449972352602013-03-27T17:26:00.003+01:002013-04-22T16:10:49.488+02:00[ctrl]+space means [ctrl]flow... - Mine your own APIs<br />
<div class="field field-name-field-blog-image field-type-image field-label-hidden" style="border: 0px; color: #8f8b8a; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 20px; margin: 0px 0px 20px; outline: 0px; padding: 0px; vertical-align: baseline;">
<div class="field-items" style="border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<div class="field-item even" style="border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
After months of hard work, we are happy to announce that <a href="http://codetrails.com/">Codetrails</a> has released it's developer preview of the [ctrl]flow mining server - just in time for EclipseCon 2013 in Boston. With [ctrl]flow you now can easily add the well known Code Recommenders support (intelligent call completion and overrides completion, dynamic templates, and various addons to API documentation) to your own APIs:</div>
<div class="field-item even" style="border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
<div class="field-item even" style="border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<img alt="" height="245" src="http://codetrails.com/sites/default/files/styles/blog_image/public/ctrflow-blog_0.png?itok=cahpB4Bg" style="border: 0px; font-size: 0px; line-height: 0; margin: 0px; outline: 0px; padding: 0px; vertical-align: top;" width="600" /></div>
</div>
</div>
<div class="field field-name-body field-type-text-with-summary field-label-hidden" style="border: 0px; color: #8f8b8a; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 20px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<div class="field-items" style="border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<div class="field-item even" style="border: 0px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">
<div style="border: 0px; margin-bottom: 15px; outline: 0px; padding: 0px; vertical-align: baseline;">
The <a href="http://codetrails.com/blog" style="-webkit-tap-highlight-color: rgb(70, 167, 226); color: #ea7044; outline: none;" target="_self" title="Products">[ctrl]flow Server</a> download also contains a tutorial about how you can generate models for JavaFX in less than 5 minutes. If you like what you see, it would be great if you try the mining engine on your own repository and give us your feedback. If you'd like to work together with us on a special context, contact us. Meantime, thanks for trying [ctrl]flow!<br />
<br />
Best,<br />
Marcel<br />
<br />
P.S.: If you haven't taken the Code Recommenders "<strike>Family</strike> Developer Feud" Challenge, drop by the Recommenders Table and get your chance to win a Amazon Gift Certificate! But only today!</div>
</div>
</div>
</div>
Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-1479535086136999079.post-36480997823695409112013-02-01T23:23:00.001+01:002013-02-01T23:23:20.723+01:00Meet Code Recommenders at JFokus, Stockholm, Sweden!<b id="internal-source-marker_0.9311177232302725" style="font-weight: normal;"><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">I’m taking the Code Recommenders Challenge to Sweden for JFokus February 5-6, 2013. There, you can test your Java knowledge against the patterns of the Eclipse developer community.</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">How does it work? We’ve selected snippets from the Eclipse repository and will ask you to predict what the Code Recommenders code completions will present. It will be fun and it’s going to show some really good coding best practices.</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;">Drop by the Eclipse Foundation booth to see it in action!</span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></b>Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-1479535086136999079.post-45201135742863277562012-09-30T21:16:00.001+02:002012-09-30T22:34:53.783+02:00JavaOne is waiting... for you and Code RecommendersI just arrived at Hilton Hotel in San Francisco and checked that every thing is ready for tomorrow's presentation of Code Recommenders at JavaOne. I must admit, I'm a bit thrilled.<br />
<div>
<br /></div>
<div>
I'm currently giving the slides a last polishing and preparing the latest demos of the Code Recommenders recent additions: Snipmatch and Precise - a community snippet store and an argument completion engine developed by Doug Whightman from Queens University and Cheng Zhang from Shanghai University and their teams.</div>
<div>
<br /></div>
<div>
I'm also very excited to present the latest developments on crowd-sourcing the code completion directly sourced by your IDE, example code search, and mining for frequent code snippets. I'm pretty sure it will be interesting 60 minutes here at Hilton San Francisco, Continental Ballroom 5 tomorrow Monday, Oct 1, 11:30 AM <a href="https://oracleus.activeevents.com/connect/search.ww?event=javaone#loadSearch-event=javaone&searchPhrase=ide+20&searchType=session&tc=0&sortBy=&p=&i(11424)=&i(10050)=&i(10090)=&i(10092)=&i(11842)=&i(10086)=" target="_blank">(IDE 2.0: How Much Can the IDE Predict You Will Write in the Next Few Seconds?)</a></div>
<div>
<br /></div>
<div>
Looking forward to see you there!</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
The (IDE) future is crowd-sourced. I bet!</div>
<div>
<br /></div>
<div>
Best,</div>
<div>
Marcel</div>
Anonymoushttp://www.blogger.com/profile/04192783689046741384noreply@blogger.com3tag:blogger.com,1999:blog-1479535086136999079.post-31695509938652946862012-07-04T10:25:00.001+02:002012-07-04T10:25:59.044+02:00Code Recommenders 1.0 - Code Completion on Steroids for Eclipse Juno<br />
<i>With Eclipse Juno, Code Recommenders stripped off its incubation status and released v1.0.0 to the public! In this post, we give </i><i style="background-color: white;">a quick overview on all the new shiny code completion engines we've built in the past months for Eclipse - and introduce those who haven't heard of Code Recommenders yet to the idea of mining source code and more to build intelligent IDEs. </i><i style="background-color: white;">This article is a copy of the <a href="http://jaxenter.com/java-tech-journal/">Java Tech Journal Article</a> written for the Eclipse Juno Special Edition. Get a copy to read more about other great innovations in Eclipse 4.2!</i><br />
<br />
<span style="font-size: x-large;">Teams and technologies change. Embrace it.</span><br />
<br />
Developers and CTOs know: frequently changing teams and the “liberal” use of the latest and greatest technologies make your burndown charts and project cost estimations burst just within a few weeks. To compensate for the brain-drain and to lower the entrance barrier, team leads plan a fair amount of their team’s time for documenting software, doing reviews, and working together in pairs in front of one screen to evenly spread the knowledge about how to use APIs in the entire team – and to newcomers in particular. If done right, this is the best a team lead can do to make the team effective in the long run. But Code Recommenders thinks there is more a team lead can do...<br />
<br />
<span style="font-size: x-large;">Leveraging the hidden gems in your source code</span><br />
<br />
API designers typically have some expectations as to how developers should use their APIs, i.e. they expect their clients to call certain methods at certain points in time and in a particular order. The challenge to all newcomers is to learn about these implicit expectations and API usage rules fast enough to be of help to the team they joined.<br />
<br />
Sure, the API documentation may contain the necessary information. Somewhere. But between you and me: How often do you read the API documentation of, say, <span style="font-family: 'Courier New', Courier, monospace;">JButton</span> with its 381 methods to figure out how to use it? Don’t you rather use Google to find a code snippet that does what you need? Or, if Google can’t help because you are programming against an in-house library, don’t you prefer looking at your existing code base to see how your colleagues successfully used that API before? And sometimes you just scroll through the code completion proposal pop-up to see which proposals may sound best for what you are trying to achieve, right? <br />
<br />
There is nothing bad about it; it’s just horribly ineffective and costly. And apparently API documentation as it is today is only of limited use for developers.<br />
<br />
This is where Eclipse Code Recommenders comes in. Code Recommenders is an extension to Eclipse’s Java Development Tools that analyzes code of existing applications, extracts common patterns of how other developers have used and extended certain APIs before, and re-integrates this knowledge back into your IDE in form of (i) intelligent code completion, (ii) extended API documentation, (iii) sophisticated example code search, and even (iv) bug detection tools – all powered by the implicit knowledge of the programming masses. If you like, you can think of Code Recommenders as bringing the idea of Web 2.0 into your IDE – or as we call it sometimes: Code Recommenders is about creating the IDE 2.0.<br />
<br />
The remainder of this article will give a short overview over Code Recommender’s completion engines coming up in Eclipse Juno – as part of the Eclipse Java Developer Package, the Eclipse RCP packaging. Alternatively, if you start with any other package, it can be installed from the Juno Release Train update site.<br />
<br />
<span style="font-size: x-large;">Recommenders’ Code Completion Engines</span><br />
Code Recommenders 1.0 adds five new code completion engines to Eclipse: <br />
<br />
<ul>
<li><span style="background-color: white;">Intelligent Call Completion</span></li>
<li><span style="background-color: white;">Intelligent Code Snippet Completion</span></li>
<li><span style="background-color: white;">Intelligent Overrides Completion</span></li>
<li><span style="background-color: white;">Call Chain Completion</span></li>
<li><span style="background-color: white;">Subwords Completion</span></li>
</ul>
<span style="font-size: large;"><br /></span><br />
<span style="font-size: large;">Intelligent Call Completion </span><br />
<br />
The Intelligent Call Completion engine probably illustrates the idea of Code Recommenders best. When dealing with Framework APIs, developers frequently have to deal with complex APIs. For illustration, consider the public API of <span style="font-family: 'Courier New', Courier, monospace;">javax.swing.JButton</span> which consists of 381 (!) public methods. This is a huge API of which a developer typically only has to know a small subset. The remaining, say, 360 methods unnecessarily bloat the API (from a API user’s viewpoint) and thus increase the complexity and burden of learning and using this API.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><img height="464px;" src="https://lh3.googleusercontent.com/ad8gUcBXH5i0MSZWn1j0BrqQiMWD8xohmQWr9lK1Ok5F27k_KthujIqGGGmZ-F8KUqUnrj7nhemWg_9XP8dO_T2vMoJf9ylsah-pt1OtS0nQWxhxex4" style="margin-left: auto; margin-right: auto;" width="572px;" /></td></tr>
<tr><td class="tr-caption" style="text-align: center;">All potential completions on JButton</td></tr>
</tbody></table>
<br />
This is where Code Recommenders’ Intelligent Call Completion comes in. It assists the developer by recommending only those methods that are actually relevant for the task at hand. For instance, given the fact a developer just created a text widget makes it obvious for Code Recommenders which methods that developer should want to use next – even if the developer doesn’t know it himself (yet):<br />
<br />
<b id="internal-source-marker_0.04246606002561748" style="font-weight: normal;"></b><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://lh4.googleusercontent.com/VreO-WKhiF8hyVtyiTeci780xybJBIQn-kvMR6ofyQUqVlbPcBofc_g7YZrLNj4QPY6tKpXyZBpJb5rEkeh-1tGMY4sqgeMAMIn7s_Gr5K3byX9JoF0" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="211px;" src="https://lh4.googleusercontent.com/VreO-WKhiF8hyVtyiTeci780xybJBIQn-kvMR6ofyQUqVlbPcBofc_g7YZrLNj4QPY6tKpXyZBpJb5rEkeh-1tGMY4sqgeMAMIn7s_Gr5K3byX9JoF0" width="571px;" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Recommenders' intelligent Completion on SWT Text after calling 'new Text()'</td></tr>
</tbody></table>
<br />
As of this writing (1.0.0), Code Recommenders partially supports the Java Standard Library, namely the main packages under <span style="font-family: 'Courier New', Courier, monospace;">java.*</span> and some packages under <span style="font-family: 'Courier New', Courier, monospace;">javax.*</span>. As the recommendation models are generated from the Eclipse Juno Release Train code base only, packages like <span style="font-family: 'Courier New', Courier, monospace;">java.awt</span> or <span style="font-family: 'Courier New', Courier, monospace;">javax.swing</span> are not yet supported, as no data was available at generation time.<br />
<br />
<br />
<span style="font-size: large;">Intelligent Code Templates</span><br />
<br />
Code templates are helpful when code is needed to iterate over an array of objects or when creating a getter for a property of a class. But code templates really shine when developers have to use APIs they are not familiar with. Code templates then serve as additional documentation that quickly shows how to use an API, and thus can save developers a lot of time that would otherwise be needed for reading API documentation.<br />
<br />
Eclipse maintains more than 70 of such Java code templates ranging from simple loops up to complex API usage patterns like creating an SWT <span style="font-family: 'Courier New', Courier, monospace;">Button</span> or <span style="font-family: 'Courier New', Courier, monospace;">Composite</span>. Unfortunately, developing templates for API usage patterns is an extremely costly and tedious job and consequently only few templates on how to use complex APIs of, say, JFace, Eclipse UI or even the Java Standard Library exist. <br />
<br />
This is where Code Recommenders comes in again. In the previous section we showed how to recommend single methods to invoke on an object. Code Recommenders’ Templates Completion takes this to the next level by recommending not only single methods but complete sets of methods:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><img height="272" src="https://lh6.googleusercontent.com/zWXYo1ot8bhVrgjDDPsYj4Cmb-3_1zdY9lB3tKI6j0jfrKDh50s8f6n-st2c3_KlLzvBN-zGn0AORHGJzuQrW4THo-WxXJIHdcXyjtXwc9GCJgdCy-s" style="margin-left: auto; margin-right: auto;" width="640" /></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Intelligent template completion on JDT ASTParser</td></tr>
</tbody></table>
<span style="background-color: white;"><br /></span><br />
<span style="background-color: white;">As you probably have noticed in the example above, Recommenders' templates completion can be applied on existing usages but also works on type names as the example below shows:</span><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><img height="237" src="https://lh5.googleusercontent.com/h7sK0VPBtQNSPgpEzjtdgSLvUrUfQMekHDCsGUywgeaLz3-FFu8RtjlAvDz3_vBOguar4ZVV8a95ckmJH6oavQeGvmPIvFrzd-bZHHVMgv81FSxXaNw" style="margin-left: auto; margin-right: auto;" width="640" /></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Intelligent Template Completion on JFace TableViewer type name</td></tr>
</tbody></table>
<br />
The final result after applying the template then looks as displayed below:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><img height="157px;" src="https://lh5.googleusercontent.com/Qh5GxH6oiDFrP8pioF9S0Ur7uyy26BHrpEvVwHNHAqknIx1dOJfoXFlBZjciVTlbzDZMp5cei9sunfutzG928onN6B8h_W9fSQndWtE2CCMhamkWLa0" style="margin-left: auto; margin-right: auto;" width="583px;" /></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Resulting code snippet for JFace TableViewer</td></tr>
</tbody></table>
<i><br /></i><br />
<i>Warning: The generated template proposals do not reflect method execution ordering constraints, i.e. the order of the proposed method may have to be changed manually after insertion.</i><br />
<br />
<br />
<span style="font-size: large;">Intelligent Overrides Completion </span><br />
<br />
Similar to recommending method calls, one can also recommend which methods a developer should typically override. This is what Recommenders’ Intelligent Overrides Completion does. There is much more to say about how classes can be extended, but we’ll save this for another article about Code Recommenders’ Extended Documentation Platform – a platform that extracts valuable (extension) patterns in code and enriches existing API documentation with these patterns.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><img height="205px;" src="https://lh5.googleusercontent.com/MqZiQhF2rY03K28JSAckrwl-fJ0duzjfq1vkZorBMpFrEeSX48as81FI2_l0HQcx7AETf6wCFHdSl5SJvd27nlpRgCIMLddP18UzIEiFHbDK3jJCvSs" style="margin-left: auto; margin-right: auto;" width="502px;" /></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Recommenders' intelligent overrides completion on JFace Dialog</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
<b id="internal-source-marker_0.04246606002561748" style="font-weight: normal; margin-left: 1em; margin-right: 1em;"></b></div>
<br />
<br />
<span style="font-size: large;">Subwords Completion </span><br />
<br />
Another noteworthy extension engine is Code Recommenders Subwords Completion. As an experienced Eclipse user you probably know JDT’s CamelCaseCompletion. This engine is nice but requires you to remember the exact uppercase letters of the completion proposal you want to insert. <br />
<br />
Subwords makes this more convenient. The idea is simple enough: You do not have to type a name from the beginning to find a match in the content assist pop-up. It helps if a developer does not know if one has to “find” – or – “get” an element:<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><img height="261px;" src="https://lh6.googleusercontent.com/iYOAk3-TwvTue9SYMCDXITi3x9yTfqeworCobcPw2Er14uYDgEimJIiswO2whHGDqM9tV5o9R64spdxunGCYe6IADykrkr_tXyZYHVzWJD2k8ThJRkI" style="margin-left: auto; margin-right: auto;" width="561px;" /></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Recommenders' Subwords completion on JDT's CompilationUnit</td></tr>
</tbody></table>
<br />
And it’s even sophisticated enough to understand a rough shorthand e. g. dclr for declaration or combinations of words such as 'ty + dclr' , which finds all proposals containing the words 'type' + 'declarations':<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><img height="221px;" src="https://lh6.googleusercontent.com/Fw0HdRUGGh_F5MsVxb61XGDO_OFvPLZsEhBjznmyv5iBdWpH60EZ-ZbRBweIv02ZTDw4GA0Zr0POuewuKdcmsAU9A1UyY6uBdlNRR8kxIXBwHtQG4T0" style="margin-left: auto; margin-right: auto;" width="516px;" /></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Recommenders' Subwords completion on JDT's AST</td></tr>
</tbody></table>
<i><br /></i><br />
<i>Note: Subwords does not fall into the group of intelligent completion engines, i.e. it does not need any training data and thus works out of the box with any framework or API. </i><br />
<i><br /></i><br />
<i>Also note that Subwords completion is a replacement of the JDT's standard Java content assist and cannot be used together with JDT's proposal computer. Visit Subwords preference page to enable Subwords for your installation.</i><br />
<i><br /></i><br />
<i>See Deepak Azad's <a href="http://blog.deepakazad.com/2012/05/subwords-completion.html" target="_blank">original blog post</a> for more detailed description. Thanks for permission to reuse.</i><br />
<br />
<br />
<span style="font-size: large;">Chain Completion </span><br />
<br />
The last engine I’d like to introduce is Recommenders’ Chain Completion. Sometimes you need to access objects that can be reached by invoking several method calls in a row – so-called call chains. Usually you have to find these call chains yourself by traversing the API call graph manually, and evaluating whether each potential chain may return an instance of the required type. <br />
<br />
Code Recommenders’ call chain completion automates this for you. It quickly traverses the whole API call graph and finds all possible paths through the API that may return an appropriate object:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><img height="189" src="https://lh6.googleusercontent.com/zuGCic_vJdm6Tp5N8R2MHpz1OyiINKbhd2kI3N23BxexoIP42ZUTZYwExY4wTWqNFJCphWXM1Cvh0Ewfo49seBs4fwbsVrX4WbFgnz1KGcmySa5lbjo" style="margin-left: auto; margin-right: auto;" width="640" /></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Recommenders' Chain completion on IStatusLineManager in a ViewPart</td></tr>
</tbody></table>
<i style="background-color: white;"><br /></i><br />
<i style="background-color: white;">Note: <span style="background-color: white;">Templates and Chain completion don't run on the default content assist list and deactivate themselves if they figure out you put them on the default content assist. You can put them on the second or third content assist list and press ctrl+space twice (or more) to get to the subsequent content assist lists.</span></i><br />
<br />
<br />
<span style="font-size: x-large;">What’s coming next? </span><br />
<br />
The Code Recommenders completion engines we introduced in this post are just a teaser. There are many more exciting features coming like extended (mined) documentation platform, personalized code search engines, code snippets miner, stacktrace search engines, and many tools more. Keep an eye on this project which has exciting things in delivery. Promised.<br />
<br />
<br />
<span style="font-size: x-large;">Thoughts and new ideas for Code Recommenders?</span><br />
<br />
We are curious to hear how you like these new completion engines and what features you'd like to see for the next release. The <a href="http://eclipse.org/forums/eclipse.recommenders" target="_blank">Recommenders forum</a> is a good place <span style="background-color: white;">to discuss new ideas - or <a href="http://twitter.com/marcelbruch">Twitter</a> for really short ones.</span><br />
<br />Anonymoushttp://www.blogger.com/profile/04192783689046741384noreply@blogger.com8tag:blogger.com,1999:blog-1479535086136999079.post-55028961944495468512012-03-28T20:36:00.004+02:002012-03-28T20:36:42.476+02:00BOF on Eclipse Code Recommenders at ECONI managed to get the last open space for a BOF about Code Recommenders. It will take place at 8:30-9:30pm in <b>Reston Suites B</b>. I planned to give a little broader introduction to how Code Recommenders work and which other tools we are working on but could not demo in the session.<br />
<br />
I'm planning this for 20 minutes, which will leave a fair amount of time for discussion existing features, future plans, and new ideas.<br />
<br />
Looking forward to meet you in Reston Suites B tonight.<br />
<br />
P.S.: A slightly different but extended version of the slides of the Econ Code Recommenders talk is available <a href="http://www.slideshare.net/Microbiotic/eclipse-code-recommenders-majug-2011">here</a>.Anonymoushttp://www.blogger.com/profile/04192783689046741384noreply@blogger.com0tag:blogger.com,1999:blog-1479535086136999079.post-7958654562980010422012-03-28T05:29:00.000+02:002012-03-28T12:48:19.481+02:00Thanks Eclipse Community!<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both;">
The Code Recommenders team says <i>thank you!</i> to the Eclipse community for this shiny award:</div>
<div>
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-s9IjddYzhaI/T3KCzLVfYPI/AAAAAAAAA80/Aky-nHpTCQM/s1600/6875378192_ee050648ec_c.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="424" src="http://2.bp.blogspot.com/-s9IjddYzhaI/T3KCzLVfYPI/AAAAAAAAA80/Aky-nHpTCQM/s640/6875378192_ee050648ec_c.jpeg" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
Origin: <a href="http://www.flickr.com/photos/33725200@N00/6875378192/sizes/c/in/pool-1918270@N20/">Anne Jacko</a> EclipseCon 2012 Flickr photo series</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
We are very proud on this award and we can promise that we won't stop pushing the limits of applying crowd-sourcing and machine learning inside our most favorite IDE to make developer's life easier. To all attendees of EclipseCon: If you haven't see Code Recommenders in action, it's time. Marcel Bruch demos Code Recommenders <a href="http://www.eclipsecon.org/2012/sessions/eclipse-code-recommenders-code-completion-steroids">tomorrow Wednesday at 13:30 in the Grand Ballroom BC</a> and gives a preview of what will be in Eclipse Juno.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Don't miss that event!</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
The Code Recommenders team, Hugin, and Munin say<i> thank you!</i> again</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<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;"><img border="0" height="119" src="http://1.bp.blogspot.com/-5XNnPhfX77k/TVqEEv4WYrI/AAAAAAAAAo8/16oqQy5ia_8/s320/recommenders.logo.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />Anonymoushttp://www.blogger.com/profile/04192783689046741384noreply@blogger.com2tag:blogger.com,1999:blog-1479535086136999079.post-54685821263041274652012-02-21T15:31:00.000+01:002012-02-22T13:11:23.709+01:00Eclipse Code Recommenders 0.5 released!<a href="http://1.bp.blogspot.com/-5XNnPhfX77k/TVqEEv4WYrI/AAAAAAAAAo8/16oqQy5ia_8/s1600/recommenders.logo.jpg"><img border="0" src="http://1.bp.blogspot.com/-5XNnPhfX77k/TVqEEv4WYrI/AAAAAAAAAo8/16oqQy5ia_8/s640/recommenders.logo.jpg" /></a><br />
We are happy to announce our first <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=370477">official release</a> (don't call it 'drop' anymore) of Eclipse Code Recommenders. After a silent v0.4 <strike>release</strike> drop, we <strike>drop,</strike> pardon, released Recommenders v0.5 today wiht a huge set of changes. Enjoy the release!<br />
<div>
<br /></div>
<div>
<br />
<span style="font-size: large;">Bugzilla Summaries</span><br />
<ul>
<li>List of <a href="http://goo.gl/g96bt">closed bugs</a> for v0.5.</li>
<li>List of <a href="http://goo.gl/7JfIM">open bugs</a> for v0.5.</li>
<li>List of <a href="http://goo.gl/8QG32">all plan items</a> for v1.0.</li>
</ul>
<span style="font-size: large;"></span><br />
<div>
<span style="font-size: large;"><span style="font-size: large;"><br /></span></span></div>
<span style="font-size: large;">
New Feature Namespaces</span><br />
We outgrew our initial naming scheme. For v0.5 we changed the namespace of our features and plug-ins completely. As result, using the update manager wont work as expected. You have to uninstall previous versions and install code recommenders from one of our <a href="http://eclipse.org/recommenders/download/">update sites</a> .<br />
<br />
<span style="font-size: large;">No Project Builders!</span><br />
This is probably the most important change during this release. Earlier version of Code Recommenders required you to activate Recommenders on a <i>per-project</i> basis. On activation, a builder was added to the project that analyzed file changes on save - or whenever Eclipse decided to run the builders (workspace fresh etc.). The results of these analyses were stored the in a <span style="font-family: 'Courier New', Courier, monospace;">${project.home}/.recommenders/data</span> folder. With v0.5 this is past.<br />
Code Recommenders now analyzes the all compilation units on-the-fly whenever code completion is triggered. Developers now can easily use Code Recommenders in any project without changing any project configuration file. You can configure the completion engine's behavior in "Preferences » Java » Editor » Content Assist » Advanced".<br />
<br />
<b>Important:</b><br />
Please note that currently only Eclipse APIs like JFace, SWT, JDT, Workbench etc. are supported. Adding support for other frameworks is planned for v0.6 and v0.7.<br />
<br />
<span style="font-size: large;">Completion Engines solely based on JDT</span><br />
Related to the previous change, we switched from the <a href="http://wala.sf.net/">WALA bytecode analysis toolkit</a> to Eclipse JDT as primary analysis tool for code completion. WALA will, however, still be the analysis toolkit of choice for sophisticated code analysis and data exports. There is yet no better analysis toolkit available that suites our needs.<br />
<br />
<span style="font-size: large;">Call Chain Completion solely based on JDT</span><br />
With v0.5, Code Recommenders ships a new version of its <a href="http://eclipse.org/recommenders/features/completion/">chain completion</a> engine<span id="goog_587524226"></span><span id="goog_587524227"></span><a href="http://www.blogger.com/"></a> completely based on JDT. Thanks to Marko Martin who <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=359694">contributed this</a> to Code Recommenders. Since this code is a major rewrite of the existing engine, please <a href="https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Recommenders">report any issues</a> you experience to bugzilla.<br />
<br />
<span style="font-size: large;">Extended Documentation Platform</span><br />
Based on Stefan Henss' work in last year's <a href="http://stefanhenss.com/summing-up-eclipse-extdoc">Google Summer of Code</a> project, this release ships with an updated version of Stefan's Extdoc View . Internally, we changed the code to be easily extensible by you. Check the <a href="http://eclipse.org/recommenders/documentation/isv.html#isv-extdoc">Extended Documentation Platform ISV Documentation </a>for more details on that.<br />
<br />
<span style="font-size: large;">Improved Subwords Completion</span><br />
We've made a lot of small changes to subwords. The most significant one is that you can use it as replacement for the Java completion engine (go to Preferences»Java»Editor»Content Assist»Advanced to activate and deactivate Subwords and Java proposals engine).<br />
<span style="font-size: large;"><br /></span><br />
<div>
<b>[HEAD]</b> For assignments, subwords completion now takes into account the variable name of the assignment.<br />
<img src="http://eclipse.org/recommenders/documentation/media/figures/changes/v0.5/subwords-assignment.png" /><br />
<br />
The exact implementation of the matching and ranking strategy is subject to change. If you have ideas on how to improve the current strategy, look at the <a href="http://git.eclipse.org/c/recommenders/org.eclipse.recommenders.git/tree/plugins/org.eclipse.recommenders.completion.rcp.subwords2/src/org/eclipse/recommenders/internal/completion/rcp/subwords2/AssignmentVarnameMatchCompletionProposalComputer.java">code</a> and send your ideas to the <a href="http://eclipse.org/forums/eclipse.recommenders">forum</a> .<br />
<br />
<span style="font-size: large;">Temporary Deactivation of Template Completion</span></div>
<div>
In v0.2 we added a new <a href="http://eclipse.org/recommenders/documentation/changes.html#changes-v0.2-templates">template completion engine</a> to Code Recommenders. Due to the large internal refactorings, this engine was left out of this release but will be added again in v0.6.<br />
<br />
<span style="font-size: large;">What else is in the pipe? Code examples search!</span><br />
This time Code Recommenders ships without official code-search support. However, there is some work going on in this area. Previous updates offered first draft of code-search client in the experimental section of the update site. For v0.5 we removed this feature from the update sites as it's currently developed by Tobias Boehm, a Student at Darmstadt University of Technology as part of his Master thesis. For the curious, the sources can be found in <a href="http://code.google.com/a/eclipselabs.org/p/code-recommenders/source/browse/?repo=codesearch-tobias">Code Recommenders' Labs repository</a> and the latest prototyp can be installed from this <a href="http://download.eclipse.org/recommenders/updates/labs/">update site</a>.<br />
<div>
<br /></div>
<div>
Just a collection of screenshots to see what Tobias is working on and what's coming soon...</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-Ij6VK5TSDOA/T0OfWb_6EMI/AAAAAAAAA7g/rhAxeiuSsyE/s1600/PastedGraphic-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="386" src="http://1.bp.blogspot.com/-Ij6VK5TSDOA/T0OfWb_6EMI/AAAAAAAAA7g/rhAxeiuSsyE/s640/PastedGraphic-1.png" width="640" /></a></div>
<div>
<br /></div>
<div>
Code Examples Search: Select a local variable in your code and the "code examples" extdoc provider will show you all code snippets that use a variable of the same type as selected and used/defined in a similar to your code.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-iuDXOrNzcIg/T0OlkYSexZI/AAAAAAAAA7o/He9dHBeSLHQ/s1600/Screen+shot+2012-02-21+at+15.09.52.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="198" src="http://4.bp.blogspot.com/-iuDXOrNzcIg/T0OlkYSexZI/AAAAAAAAA7o/He9dHBeSLHQ/s640/Screen+shot+2012-02-21+at+15.09.52.png" width="640" /></a></div>
<div>
Free-style code search query window: predefined queries are not good enough? Do query for methode, types, try-catch blocks that use an arbitrary number of certain types, methods or literals as you like... there are almost no limits.</div>
<div>
<br /></div>
<div>
Enjoy it but keep in mind it's an early prototype. For instance, it's currently consuming quite a lot disk space due to some verbose indexing settings etc. Please send all you comments and request regarding local code-search to the <a href="http://eclipse.org/forums/eclipse.recommenders">forum</a>. Aaron, not all your queries can be expressed yet. But we have them in mind ;)</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Enjoy this release!</div>
<div>
<br /></div>
</div>
</div>Anonymoushttp://www.blogger.com/profile/04192783689046741384noreply@blogger.com6tag:blogger.com,1999:blog-1479535086136999079.post-85231672246987968112011-12-02T17:16:00.001+01:002011-12-02T18:17:27.104+01:00How should code search work?<i>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 <a href="https://twitter.com/#!/boehmtobias">Tobias Boehm</a>, a master student doing his master thesis in the scope of the Code Recommenders project.</i><br />
<i>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 <a href="http://eclipse.org/Xtext">Xtext</a>) and a client tightly integrate into the <a href="http://eclipse.org/">Eclipse IDE</a>. His work will be based on the previous code search engine and Eclipse client we already blogged about a few months ago here: <a href="http://code-recommenders.blogspot.com/2010/07/why-is-google-codesearch-not-google-for.html">"Why is Google Codesearch not google for code search?"</a></i><br />
<i><br /></i><br />
<i>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 <a href="http://www.youtube.com/watch?v=X1jWe5rOu3g">catch idea bugs early</a>! If you are interested in joining the work on code search engines, get in contact via the <a href="http://eclipse.org/forums/eclipse.recommenders/">Code Recommenders forum</a>. We are looking forward to your feedback. </i><br />
<i><br /></i><br />
<i>Thanks,</i><br />
<i>Marcel
</i><br />
<hr />
<br />
<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;"><img border="0" src="http://2.bp.blogspot.com/-HRiL6FTNy9w/TtkFzYfvSGI/AAAAAAAAA5Q/skyR3oKR79k/s1600/Tobias_Boehm_002_small.png" /></a><br />
<span class="Apple-style-span" style="font-size: large;"><b>How should code search work?</b></span><br />
We all know that learning an API is hard. But we do it day by day by day... When learning a new framework we often ask things like <i>"Which classes should I extend?"</i>, <i>"Which methods should I invoke on this object?"</i>, <i>"How can I create an instance of this particular type?", "How does the code of others look like that is similar to mine?".</i> 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?<br />
<br />
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 <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">IStatusLineManager</span>? 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. <b>The code is there, it just has to be found!</b><br />
<br />
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.<br />
<br />
And then there is "<i>availability"</i>. 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.<br />
<br />
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.<br />
<div>
<br /></div>
<div>
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.</div>
<div>
<br /></div>
<div>
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 <a href="http://eclipse.org/forums/eclipse.recommenders">Code Recommenders forum</a>.<br />
<br />
<br />
<span class="Apple-style-span" style="font-size: large;"><b>Query</b></span><br />
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.<br />
<br />
<div style="text-align: left;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">METHODS WHERE Name IS "set.*"</span></div>
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
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 <i>java.util.Set</i>.<br />
<br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">METHODS WHERE CalledMethods CONTAINS {java.util.Set.add}</span><br />
<span class="Apple-style-span" style="white-space: pre;"> </span><br />
By combining multiple search criteria and using negation the developer is able to refine the query to get exactly what she needs.<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">METHODS WHERE ReturnType IS {org.eclipse.jface.action.IStatusLineManager}</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span> AND +IsPublic AND !IsStatic</span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
A Query that will search for public, non-static methods that should return an instance of <i>IStatusLineManager</i>. 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.<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">METHODS WHERE ReturnType IS {+org.eclipse.jface.action.IStatusLineManager}</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span> AND +IsPublic AND !IsStatic</span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
This way we can be sure that the methods we find will return <i>IStatusLineManager</i>. What if we - for whatever reason - are interested in public methods that use an <i>IStatusLineManager</i>, are annotated with <i>SuppressWarnings </i>and that should be constructors? Here's the query for that.<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">METHODS WHERE IsConstructor</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span> AND UsedTypes CONTAINS {+org.eclipse.jface.action.IStatusLineManager}</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span> AND +IsPublic</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span> AND ANNOTATED WITH {+java.lang.SuppressWarnings}</span><br />
<span class="Apple-style-span" style="white-space: pre;"> </span><br />
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.<br />
<br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">CLASSES WHERE Name IS "set.*"</span><br />
<br />
With a more complex query for example we search for abstract classes that implement the interface <i>ASTVisitor </i>preferably using the type <i>java.util.Set</i>.<br />
<br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">CLASSES WHERE +IsAbstract</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span> AND ImplementedInterfaces CONTAINS {+org.eclipse.jdt.core.dom.ASTVisitor}</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span> AND UsedTypes CONTAINS {java.util.Set}</span><br />
<br />
Or how about classes that contain deprecated methods?<br />
<br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">CLASSES WHERE</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-tab-span" style="white-space: pre;"> </span> CONTAINS METHOD WERE ANNOTATED WITH {java.lang.Deprecated}</span><br />
<br />
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?<br />
<br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">CATCHBLOCKS WHERE CaughtType IS {+java.io.IOException}</span><br />
<br />
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?<br />
<br />
<span class="Apple-style-span" style="font-size: large;"><b>Repositories</b></span><br />
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 (<a href="http://eclipse.org/recommenders/documentation/completion/">http://eclipse.org/recommenders/documentation/completion/</a>) 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.<br />
<br />
<span class="Apple-style-span" style="font-size: large;"><b>IDE integration</b></span><br />
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.<br />
<br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">IStatusLineManager slm = null;</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">|<^Space></span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
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.<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
How does that sound. Like something that could make your life easier? Let us know.<br />
<br /></div>Unknownnoreply@blogger.com18tag:blogger.com,1999:blog-1479535086136999079.post-50844789145206867072011-11-17T14:06:00.001+01:002011-11-17T14:38:03.858+01:00Do you still read source code to learn how to use an API?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.<br /><br />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?<br /><br />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.<br /><br />Since it's inception, the project made an amazing progress. Many tools have been developed since such as:<br /><ul>
<li>Intelligent (context-aware) Code Completion,</li>
<li>Dynamic (mined) Code Templates,</li>
<li>Code snippet search engines,</li>
<li>Extended (mined) Documentation platform,</li>
</ul>
and a lot more. 9 Months later, we published v0.4 of Code Recommenders and presented it at <a href="http://www.eclipsecon.org/europe2011/sessions/eclipse-code-recommenders-code-completion-steroids">EclipseCon Europe</a>. 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:<br /><div style="background-color: white; margin-bottom: 1em; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">
<div style="text-align: center;">
<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"></iframe></div>
<div style="color: #2e2f2d; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px;">
<br /></div>
The video is made available by <a href="http://www.fosslc.org/drupal/content/eclipse-code-recommenders-code-completion-steroids">FOSSLC</a>. Thanks to FOSSLC and FOSSLCde to make this public available.<br /><br /><b>Talk Abstract:</b><br /><br />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.<br /><br />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.<br /><br /><br />If you want to learn more about Eclipse Code Recommenders, visit <a href="http://eclipse.org/recommenders">http://eclipse.org/recommenders</a>.<br />If you have any comments about Code Recommenders and its vision of IDE 2.0, let me know via <a href="https://twitter.com/#!/MarcelBruch">twitter</a>, <a href="https://plus.google.com/100908752439953740476/">google plus</a>, or the project's <a href="http://www.eclipse.org/forums/eclipse.recommenders">forum</a>.<br /><br />Best,<br />Marcel</div>Anonymoushttp://www.blogger.com/profile/04192783689046741384noreply@blogger.com9tag:blogger.com,1999:blog-1479535086136999079.post-60759521988247551432011-10-31T09:02:00.003+01:002011-10-31T09:13:29.462+01:00It's even not your father's IDE...<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;"><img border="0" src="http://4.bp.blogspot.com/-p7ODl0vr1EU/Tq5YmQu3LZI/AAAAAAAAA4U/43WFW-AOo_I/s1600/130x100_speaking.gif" /></a>As Sven outlined in <a href="http://blog.efftinge.de/2011/10/this-is-not-your-fathers-java.html">his last post</a>, much <b>has changed</b> since Java's inception somewhere in the mid 90s and it's worth looking on how things are <b>going to change</b> in the future. I'm looking forward to this session - even more after Sven's announcement (<a href="http://www.infoq.com/presentations/Java-Puzzlers">Java Puzzlers</a>). I'm now pretty curios how this session will look like. I guess, it will be fun!<br />
<br />
Regarding the general topic: programming languages have been subject to change in the past years, each claiming to improve developer productivity. But as advances in programming language improve developer productivity, so do advances in todays IDEs. And there are massive changes coming to your favorite IDE!<br />
<br />
In <a href="http://www.eclipsecon.org/sessions/eclipse-code-recommenders-code-completion-steroids">my session</a> at EclipseCon on Friday morning, I'll demonstrate how leveraging <b>your</b> knowledge about how to use an API helps <b>others</b> 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.<br />
<br />
You should attend this session if:<br />
<br />
<ul>
<li>you have to learn about new/unfamiliar APIs often.</li>
<li>your team frequently gets new team members that have to learn how to use your (internal) APIs.</li>
<li>you have customers that have to use your APIs and you wanna support them in a novel, pioneering way.</li>
<li>you wanna know how leveraging source code works to improve code completion, API documentation, code search, and many more tools.</li>
<li><b>you wanna see <a href="http://eclipse.org/recommenders/">Code Recommenders</a> in Action!</b></li>
</ul>
<br />
In 50 minutes, I'll take you through Code Recommenders tool suite by demoing its <a href="http://code-recommenders.blogspot.com/2010/05/its-all-about-intelligent-code.html">intelligent code completion</a>, <a href="http://code-recommenders.blogspot.com/2010/12/how-do-i-get-instance-of.html">chain completion</a>, <a href="http://code-recommenders.blogspot.com/2011/08/eclipse-subwords-completion-1-here-you.html">subwords completion</a>, <a href="http://snipmatch.com/">crowd-sourced template completion</a>, <a href="http://code-recommenders.blogspot.com/2011/08/extdocs-extended-documentation-platform.html">extended javadoc platform</a>, and <a href="http://code-recommenders.blogspot.com/2010/07/why-is-google-codesearch-not-google-for.html">code search</a>, and explain which information is leveraged to make these tools work. At the end of the session, I'll demonstrate how <b>you</b> can use all these tools for your own development teams or customers to improve their productivity by adding support for <a href="http://code-recommenders.blogspot.com/2011/04/say-hello-android.html">Google Android</a> to Code Recommenders - live.<br />
<br />
This session will be packed with latest features and tools which you haven't seen in any other IDE before - nor your father :) Looking forward to see you on<a href="http://www.eclipsecon.org/sessions/eclipse-code-recommenders-code-completion-steroids"> Friday, 10:30 in the Theater: "Code Recommenders: Code Completion on Steroids</a>!"<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/04192783689046741384noreply@blogger.com0tag:blogger.com,1999:blog-1479535086136999079.post-80069565133929178532011-08-26T16:20:00.001+02:002011-08-26T18:06:41.602+02:00Eclipse Code Recommenders 0.3!<div class="separator" style="clear: both; text-align: center;"><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;"><img border="0" height="238" src="http://1.bp.blogspot.com/-5XNnPhfX77k/TVqEEv4WYrI/AAAAAAAAAo8/16oqQy5ia_8/s640/recommenders.logo.jpg" width="640" /></a></div><div class="separator" style="clear: both; text-align: left;">We've been a bit quiet for a while, right? 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 ;-)</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;"><span class="Apple-style-span" style="font-size: large;">So what has changed?</span></div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;"><b>Model store for recommendation models:</b></div><div class="separator" style="clear: both; text-align: left;">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. 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.</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;"><b>Support for version ranges:</b></div><div class="separator" style="clear: both; text-align: left;">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-->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.</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><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;"><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" /></a></div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;"><b>Automated model updates:</b></div><div class="separator" style="clear: both; text-align: left;">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. </div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;"><b>Community-sourcing and custom model support:</b></div><div class="separator" style="clear: both; text-align: left;">One of the long-term goals of Code Recommenders is to enable every developer to build his own models for his libraries. 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 <a href="http://wiki.eclipse.org/Recommenders/TechTalk">check out this page</a> 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 <a href="http://eclipse.org/forums/eclipse.recommenders">forum</a>. 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!</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;"><span class="Apple-style-span" style="font-size: large;">What else has changed?</span></div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><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;"><img border="0" height="350" src="http://3.bp.blogspot.com/-mUGXmX2exxM/TleJq2f0d_I/AAAAAAAAAHg/grLyxh2qUNo/s640/update-site.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;"><b>Let's step over to the other things that changed:</b> </div><div class="separator" style="clear: both; text-align: left;"><a href="http://code-recommenders.blogspot.com/2010/07/why-is-google-codesearch-not-google-for.html">Codesearch</a> 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 <a href="http://code-recommenders.blogspot.com/2011/08/eclipse-subwords-completion-1-here-you.html">subwords matching</a> and the other is <a href="http://code-recommenders.blogspot.com/2011/08/extdocs-extended-documentation-platform.html">ExtDoc</a>, an integrated documentation platform implemented by a student as <i>google summer of code</i> project. Both are described in a separate blog post: Enjoy reading!</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;"><b>Get the new stuff</b> :</div><div class="separator" style="clear: both; text-align: left;">All plug-ins are available form the <a href="http://marketplace.eclipse.org/content/eclipse-code-recommenders">Eclipse Marketplace</a> and our DEV <a href="http://download.eclipse.org/recommenders/updates/dev/">update-site </a> - and don't hesitate to tell us what you think about it. We'd like to get your feedback!</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1479535086136999079.post-50898295221840573662011-08-26T15:38:00.000+02:002011-08-26T15:38:00.412+02:00Extdocs: Extended Documentation Platform for crowd-sourced, mined, and other documentation!<div>Writing documentation is one of those tasks a programmer is typically not very keen about. Good and comprehensive documentation, 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 <b>plain wrong</b>) as this example shows:</div><div><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-w8KbrIcjZa8/TleLmkXyUhI/AAAAAAAAAz8/NmT5KREgNsI/s1600/documentation01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="452" src="http://4.bp.blogspot.com/-w8KbrIcjZa8/TleLmkXyUhI/AAAAAAAAAz8/NmT5KREgNsI/s640/documentation01.png" width="640" /></a></div><div>I can't say what's more annoying: Having <b>outdated and wrong documentation</b> or having <b>no documentation at all</b>... </div><div><br />
</div><div>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. </div><div><br />
</div><div>Based on this observation (and maybe driven by some project manager) a resourceful programmer came up with a tool that generates <strike>high-quality</strike> API documentation directly from code:</div><div><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-VWJJxvx0i7I/TleMhuizYQI/AAAAAAAAA0A/mbjbPDd53TE/s1600/documentation02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="452" src="http://2.bp.blogspot.com/-VWJJxvx0i7I/TleMhuizYQI/AAAAAAAAA0A/mbjbPDd53TE/s640/documentation02.png" width="640" /></a></div><div>Impressive, right? I especially like its ability to take a statement such as "throws IllegalArgumentException" and create the JavaDoc comment "@throws the illegal argument exception"! Awesome. (OMG...)</div><div><br />
</div><div>No, seriously. Generating documentation using tools like <a href="http://jautodoc.sourceforge.net/">JAutodoc</a> at most pleases our team lead since they improve the documentation ratio - from a programmer point of view this documentation is pretty useless.</div><div><br />
</div><div><span class="Apple-style-span" style="font-size: large;">OK, but what can Code Recommenders do about it? Can we improve it?</span></div><div><br />
</div>Yes. To some extent. In an <a href="http://code-recommenders.blogspot.com/2010/03/problem-of-incomplete-javadocs.html">earlier post</a> we described the idea of how 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.<br />
<div><br />
</div><div><br />
</div><div>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 <a href="http://vogella.de/">tutorial sites,</a> <a href="http://www.google.com/codesearch">codesearch engines</a>, or <a href="https://gist.github.com/">code snippet repositories</a>. So what you rather would like to have is this: A documentation platform, that tightly integrates various information into your IDE:</div><div><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-a315iZSDmu8/TleVP0YR2QI/AAAAAAAAA0E/WLQDWyykUUU/s1600/documentation03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="452" src="http://4.bp.blogspot.com/-a315iZSDmu8/TleVP0YR2QI/AAAAAAAAA0E/WLQDWyykUUU/s640/documentation03.png" width="640" /></a></div><div><br />
</div><div>Something like this:</div><div><br />
</div><div class="separator" style="clear: both; text-align: center;"><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;"><img border="0" height="452" src="http://3.bp.blogspot.com/-_HBGIfpVJow/TleVwPifM0I/AAAAAAAAA0I/c_v4H-__BVQ/s640/documentation04.png" width="640" /></a></div><div>I'm extremely glad to announce that a first draft of this extended documentation platform is ready for download from the <a href="http://marketplace.eclipse.org/content/eclipse-code-recommenders">Eclipse Markeplace</a>. This platform has been developed by <a href="http://stefanhenss.com/">Stefan Henss</a> during this year's <a href="http://code.google.com/soc/">Google Summer of Code</a>. An outstanding work which I would like to present with this post.</div><div><br />
</div><div><br />
</div><div>The text below is copy of Stefan's final Project summary which I cross-post here:</div><div><br />
</div><div><br />
</div><span class="Apple-style-span" style="font-size: x-large;"><b>Stefan Henss: Summing Up Eclipse ExtDoc (GSOC 2011)</b></span><br />
<div><div><div><br />
</div><br />
<br />
This year I’ve participated in <a href="http://code.google.com/soc/">Google Summer of Code</a> by contributing to <a href="http://www.eclipse.org/recommenders/">Eclipse Code Recommenders</a>. 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.<br />
<div><br />
</div><span class="Apple-style-span" style="font-size: large;">The Idea</span><br />
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.</div><div><br />
<span class="Apple-style-span" style="font-size: large;">The ExtDoc View</span><br />
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.<br />
<br />
<a href="http://stefanhenss.com/wp-content/uploads/2011/08/drag.png"><img height="215" src="http://stefanhenss.com/wp-content/uploads/2011/08/drag.png" width="640" /></a><br />
<br />
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.</div><div><br />
<span class="Apple-style-span" style="font-size: large;">Currently available Providers</span><br />
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.<br />
<br />
<a href="http://stefanhenss.com/wp-content/uploads/2011/08/calls.png"><img height="214" src="http://stefanhenss.com/wp-content/uploads/2011/08/calls.png" width="640" /></a><br />
<br />
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.<br />
<br />
<a href="http://stefanhenss.com/wp-content/uploads/2011/08/examples.png"><img height="214" src="http://stefanhenss.com/wp-content/uploads/2011/08/examples.png" width="640" /></a><br />
<br />
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.<br />
<br />
<a href="http://stefanhenss.com/wp-content/uploads/2011/08/subclassing.png"><img height="213" src="http://stefanhenss.com/wp-content/uploads/2011/08/subclassing.png" width="640" /></a><br />
<br />
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.<br />
<br />
<a href="http://stefanhenss.com/wp-content/uploads/2011/08/subclassingpatterns.png"><img height="213" src="http://stefanhenss.com/wp-content/uploads/2011/08/subclassingpatterns.png" width="640" /></a><br />
<br />
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.<br />
<br />
<a href="http://stefanhenss.com/wp-content/uploads/2011/08/bookmarks.png"><img height="213" src="http://stefanhenss.com/wp-content/uploads/2011/08/bookmarks.png" width="640" /></a><br />
<span class="Apple-style-span" style="font-size: large;"><br />
</span></div><div><span class="Apple-style-span" style="font-size: large;">Community Feedback</span><br />
<br />
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.<br />
<br />
<a href="http://stefanhenss.com/wp-content/uploads/2011/08/comments.png"><img height="213" src="http://stefanhenss.com/wp-content/uploads/2011/08/comments.png" width="640" /></a><br />
<br />
The ExtDoc community widgets allow both, communication between the users, e.g. additional information to the displayed data, and feedback to the provider author.<br />
Further ExtDoc Locations<br />
<br />
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 :-)<br />
<br />
<a href="http://stefanhenss.com/wp-content/uploads/2011/08/hover.png"><img height="249" src="http://stefanhenss.com/wp-content/uploads/2011/08/hover.png" width="640" /></a><br />
<br />
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:<br />
<br />
<a href="http://stefanhenss.com/wp-content/uploads/2011/08/completion.png"><img height="232" src="http://stefanhenss.com/wp-content/uploads/2011/08/completion.png" width="640" /></a></div><div><span class="Apple-style-span" style="font-size: large;">Obtaining ExtDoc</span><br />
<br />
<strike>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:<br />
<br />
<a href="http://www.eclipse.org/recommenders/download/">http://www.eclipse.org/recommenders/download/</a></strike><strike><a href="http://vandyk.st.informatik.tu-darmstadt.de/updates/extdoc/">http://vandyk.st.informatik.tu-darmstadt.de/updates/extdoc/</a></strike></div><div><strike><br />
</strike></div><div>[It's here: Install it directly from the <a href="http://marketplace.eclipse.org/content/eclipse-code-recommenders">Eclipse Marketplace</a>!]</div><div><strike><br />
</strike>Feedback on the current state as well as suggestions for further development are much welcome :-)</div></div><div><br />
</div><div><br />
</div><div><span class="Apple-style-span" style="font-size: x-large;"><b>Disclaimer ;-)</b></span></div><div>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.</div><div><br />
</div><div>Whatever comments you have (ranging from like to dislike), let us know about it. Here, in the forum or via <a href="https://twitter.com/#%21/MarcelBruch">twitter</a>.</div><div><br />
</div><div><br />
</div><div>Best,</div><div>Marcel, Stefan and Johannes.</div><div><br />
</div><div><br />
</div>Anonymoushttp://www.blogger.com/profile/04192783689046741384noreply@blogger.com6tag:blogger.com,1999:blog-1479535086136999079.post-82065617962200511392011-08-26T15:35:00.000+02:002011-08-26T15:35:13.791+02:00Eclipse Clean Code Method Sorter: Try #1<br />
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 newspaper-style as proposed by Robert C. Martin:<br />
<blockquote><i>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.<br />
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.</i></blockquote><i></i><br />
<div style="text-align: right;"><i><span class="Apple-style-span" style="font-style: normal;"><i><b><br />
</b></i></span></i></div><div style="text-align: right;"><i><span class="Apple-style-span" style="font-style: normal;"><i><b>Robert C. Martin "Clean Code" pp. 80</b></i></span></i></div><br />
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 <a href="http://code-recommenders.blogspot.com/2011/04/clean-code-method-sorter-for-eclipse.html">post in May</a>.<br />
<br />
To get you started, here is a quick refresh of the problem:<br />
<br />
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?<br />
<br />
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:<br />
<br />
<a href="http://1.bp.blogspot.com/-Pfz2UVb6G3Q/TbrjXd9MIWI/AAAAAAAAAqw/zjmww8mvImw/s1600/Folie34.jpg"></a><a href="http://1.bp.blogspot.com/-Pfz2UVb6G3Q/TbrjXd9MIWI/AAAAAAAAAqw/zjmww8mvImw/s1600/Folie34.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-Pfz2UVb6G3Q/TbrjXd9MIWI/AAAAAAAAAqw/zjmww8mvImw/s1600/Folie34.jpg" /></a><br />
<br />
<b><span style="font-size: large;">How complicated can it be?</span></b><br />
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, Mateusz and Fabian came up with two solutions. One solution is already available for testing.<br />
<br />
If you like the newspaper-style as described by Robert C. Martin, you should give it a try! Please <a href="http://wiki.eclipse.org/Recommenders/CleanCodeMethodSorter">check this wiki page</a> for further information about the plug-in and installation instructions (it's not an official part of Code Recommenders yet).<br />
<br />
<br />
To track the progress of this feature, add yourself to this <a href="http://www.blogger.com/I%20created%20https://bugs.eclipse.org/bugs/show_bug.cgi?id=344394%20for%20tracking%20purpose.">bugzilla</a> report.<br />
<div><br />
</div><br />
Best,<br />
Marcel<br />
<br />
<strike><br />
</strike><br />
Stay in touch with Code Recommenders via <a href="http://twitter.com/MarcelBruch">Twitter</a>.<br />
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><div><br />
</div></div>Anonymoushttp://www.blogger.com/profile/04192783689046741384noreply@blogger.com14tag:blogger.com,1999:blog-1479535086136999079.post-41044310732155534322011-08-26T14:32:00.000+02:002011-08-26T14:32:41.386+02:00Eclipse Subwords Completion #1 - Here You Are:<div class="separator" style="clear: both; text-align: left;">Did you ever type something like <span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;">text.lay<^Space></span> and wished Eclipse would complete it to <span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;">text.setLayoutData()</span>? If you do that with Eclipse as it is today you will get all proposals that start with <span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;">lay*</span><span class="Apple-style-span" style="font-family: inherit;"> as shown below</span>:</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><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;"><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" /></a></div><div class="separator" style="clear: both; text-align: left;">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 <a href="http://www.ralfebert.de/blog/eclipseide/camel_case/">CamelCase</a> matches. For instance if you trigger code completion on <span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;">container.sLD<^Space></span> you get all completions that match the upper-case letter as shown here:</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><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;"><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" /></a></div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both;"><b>CamelCase is excellent.</b> 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 <span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;">setl+↓</span><span class="Apple-style-span" style="font-family: Arial,Helvetica,sans-serif;">) </span>CamelCase is a real relief.</div><div class="separator" style="clear: both;"><br />
</div><div class="separator" style="clear: both;">Yet, quite some people aren't happy enough with the way CamelCase abbreviations work. They would like to have a <i>subword</i> matching rather than a strict prefix or CamelCase matching (see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=350000">[1]</a>, <a href="http://stackoverflow.com/questions/6369400/autocomplete-in-eclipse-skipping-getters-and-setters">[2]</a>, <a href="http://stackoverflow.com/questions/5755869/eclipse-fulltext-autocompletion-for-java">[3]</a> for recent discussions on this).</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both;"><b>Subwords is coming to rescue</b> those. A few weeks ago <a href="http://www.eclipse.org/forums/index.php/t/209269/">we had been asked</a> to provide 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. 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, <a href="http://www.vogella.de/">Lars Vogel</a>, <a href="http://twitter.com/#%21/deepakazad">Deepak Azad</a>, Sascha Vogt, Sebastian Proksch, Gary Fritz, Michael Kutschke and quite a few others for their comments on this prototype.</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;"><b>Today, we are happy to announce the first "official" "drop" of this subwords completion engine!</b></div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;">Below you find a few screenshots showing the subwords completion engine in action.</div><div class="separator" style="clear: both; text-align: left;"><i><br />
</i></div><div class="separator" style="clear: both; text-align: center;"></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><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;"><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" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Completion proposals if triggered at container.lay<^Space></td></tr>
</tbody></table><table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><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;"><img border="0" src="http://3.bp.blogspot.com/-CzAmIdj8xHg/ThVFsZ16e7I/AAAAAAAAAsw/gDhInpMagx4/s1600/Screen+shot+2011-07-07+at+07.27.52.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Proposal when triggering completion at text.<^Space> and then typing lay with open completion window</td></tr>
</tbody></table><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><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;" /></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Subwords completion matching on variable names</td></tr>
</tbody></table><br />
You will experience a few more features as you go.<br />
<br />
<b>I would like to thank <a href="http://developpef.blogspot.com/2011/06/welcome-in-eclipse-community.html">Paul-Emmanuel Faidherbe</a> who implemented large parts of this system and contributed it to Code Recommenders! </b><br />
<br />
<span class="Apple-style-span" style="font-size: large;">What's coming next?</span><br />
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 <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=350000">https://bugs.eclipse.org/bugs/show_bug.cgi?id=350000</a> and by adding comments and new feature requests to this bug report.<br />
<br />
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.<br />
<br />
If you'd like to support subwords: all ideas and issues are tracked by <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=350000">bug 350000</a> <b>and wait for your help.</b> If you would like to add a feature (such as completion on type names for instance), just let us know!<br />
<br />
Best,<br />
Marcel<br />
<br />
<br />
<br />
<br />
<ul></ul>Anonymoushttp://www.blogger.com/profile/04192783689046741384noreply@blogger.com4tag:blogger.com,1999:blog-1479535086136999079.post-17774164059233408022011-06-10T11:16:00.002+02:002011-06-10T11:31:38.302+02:00Eclipse DemoCamp in Darmstadt 21.06. is Approaching!<div class="separator" style="clear: both; text-align: left;"><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;"><img border="0" src="http://4.bp.blogspot.com/-AKdihK4SVRg/TfHUjkT7x9I/AAAAAAAAArw/g0vOcguFYuU/s1600/democamp-tent.png" /></a></div>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 :)<br />
<br />
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 :)<br />
<br />
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 + one extended talk with 30 minutes. This is the program of this year's Eclipse DemoCamp Darmstadt:<br />
<br />
<br />
<ol><li>Andreas Hoegger and Matthias Zimmermann (BSI Business Systems Integration AG) introduce <a href="http://eclipse.org/scout/">Eclipse Scout</a>. Thanks for presenting Scout the first time ever on a DemoCamp!</li>
<li>Christian Schneider (Yatta Solutions) speaks about creating Taks-focused diagrams with <a href="http://eclipse.org/mylyn">Mylyn</a> and <a href="http://www.yatta.de/">UML Lab</a>.</li>
<li>Simon Kaufmann and Jochen Hiller (SAP AG / Deutsche Telekom) speak about <a href="http://eclipse.org/skalli">Eclipse Skalli</a> - the latest approach to project management portal which brings more transparency to your teams.</li>
<li>Sascha Scholz (SAP AG) talks about integrating Git/Gerrit with Jenkins and Mylyn (AKA <a href="http://www.eclipse.org/mylyn/builds/">Mylyn Builds ++</a>)</li>
<li>Stefan Lay and Matthias Sohn (SAP AG) let us know whether or not "Egit is ready for prime time". I bet it is!</li>
<li>Holger Staudacher (EclipseSource) let's you know what's going on in <a href="http://www.eclipse.org/rt/">Eclipse RT</a> Universe.</li>
<li>Falko Menge (Camunda) gives you the spirit of modeling your business with <a href="http://activiti.org/">Activiti</a> and BPMN2. </li>
<li>Marcus Ficner (Itemis) gives an extended talk about cross-platform mobile development with <a href="http://code.google.com/p/applause/">APPLause</a>. Friends of Android and iOS keep your mobiles ready for this talk! </li>
</ol><ul></ul><br />
<div><b>And of course, there will be free food and drinks.</b> This event is sponsored by <a href="http://bsiag.com/">BSI Business Systems Integration AG</a>, <a href="http://msg.de/">msg systems</a>, <a href="http://telekom.de/">Deutsche Telekom</a>, and <a href="http://tu-darmstadt.de/">Darmstadt University of Technology</a>. Thanks to our sponsors for their support and helping us to make this event happen again the third time now!</div><div><br />
</div><br />
<div class="separator" style="clear: both; text-align: center;"></div><br />
<img border="0" src="http://4.bp.blogspot.com/-n7xxqwn5EwM/TfHQfKZ00CI/AAAAAAAAArs/5xh1e8a5hSM/s1600/bsi.png" /><img border="0" src="http://4.bp.blogspot.com/-zETJT_NU_Tw/TfHVBA5ZWdI/AAAAAAAAAr0/hGPQSzuJLx8/s1600/msgsystems-logo.png" /><img border="0" src="http://3.bp.blogspot.com/-1-9eQ1ek9Wk/TfHkOs5dvXI/AAAAAAAAAsA/5sw0YwOiM5k/s1600/TelekomDeveloperGarden.gif" /><img border="0" src="http://1.bp.blogspot.com/-0Q1v1vQIg_A/TfHVL6rd5yI/AAAAAAAAAr4/ZnkBXoA-jR4/s1600/Tu-darmstadt-logo.gif" /><br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: left;"></div>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 <a href="http://wiki.eclipse.org/Eclipse_DemoCamps_Indigo_2011/Darmstadt">http://wiki.eclipse.org/Eclipse_DemoCamps_Indigo_2011/Darmstadt</a>.<br />
<div>Register for the event here: <a href="http://democamp-darmstadt.eventbrite.com/">http://democamp-darmstadt.eventbrite.com/</a><br />
<br />
<br />
Looking forward to a great event!</div>Anonymoushttp://www.blogger.com/profile/04192783689046741384noreply@blogger.com1tag:blogger.com,1999:blog-1479535086136999079.post-14487812828035632902011-05-24T21:51:00.005+02:002011-06-04T00:01:08.392+02:00Oh Stacktrace, My Stacktrace...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:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><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;"><img border="0" src="http://1.bp.blogspot.com/-SOMb5h4y4t0/Tdvnjbhcz1I/AAAAAAAAArM/5ACaoaHVJZU/s1600/Screen+shot+2011-05-24+at+19.14.39.png" /> </a></div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;">It's not necessarily a fancy UI nor complete but it doesn't look obviously wrong, right?</div><div class="separator" style="clear: both; text-align: left;"></div><div class="separator" style="clear: both; text-align: left;">However, when you run the wizard it just fails without any error message.</div><div class="separator" style="clear: both; text-align: left;">A look into the error log reveals that there is a problem with JFace - but not your code:</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><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;"><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" /></a></div><div class="separator" style="clear: both; text-align: left;"></div><div class="separator" style="clear: both; text-align: left;">Now, you <i>might</i> guess that this exception is caused by you, but frankly: When I wrote my first wizard page I was <i>quite sure</i> I didn't make any mistakes... God, yes. How wrong I've been...</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;">After googleing for an explanation for a while, I found out that I was missing just one simple method call. Namely, calling <span style="font-family: 'Courier New', Courier, monospace;">setControl(..)</span> on my wizard page. I figured this out thirty minutes later - what a great waste of time...</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;">But as I've learned from my talk at Eclipse Summit, I'm actually not the only jerk doing this wrong. 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?</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;">Let's see what Google returned me when I pasted the first line of my exception into its search box: ("<i>null argument: has no page control" </i>is part of the query but was cut off in the screenshot):</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div style="text-align: center;"><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;"><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" /> </a></div><div style="text-align: left;"><br />
Google obviously does not a good job here. It still doesn't know the answer - even after years this error (better: wrong usage) exists. </div><div style="text-align: left;"></div><div style="text-align: left;">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 <i>similar</i> stacktraces.</div><div style="text-align: left;"></div><div style="text-align: left;">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...</div><div style="text-align: left;"><br />
</div><div style="text-align: left;">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! </div><div style="text-align: left;"></div><div style="text-align: left;">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 stackoverflow.com - but just for stacktraces. Something like<i><b> stacktraces.org </b></i>- or <i><b>stacktraces.eclipse.org</b></i> - a repository which contains stacktraces of the users, error descriptions and solutions including pointers to resources in the web that deal with these problems.</div><div style="text-align: left;"><br />
</div><div style="text-align: left;">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:<br />
<br />
</div><div class="separator" style="clear: both; text-align: center;"><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;"><img border="0" height="502" src="http://1.bp.blogspot.com/-6kk4jMsZDWM/TdwAg3JZJCI/AAAAAAAAArc/jwC6SYDO_XE/s640/Unbenannt-1.png" width="640" /> </a></div><div class="separator" style="clear: both; text-align: left;">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: </div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><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;"><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" /></a></div><div style="text-align: left;">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:</div><div style="text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><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;"><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" /></a></div><div style="text-align: left;"><br />
Additional tabs may provide additional information like similar stacktraces, related web-resources etc.:<br />
<br />
</div><div class="separator" style="clear: both; text-align: center;"><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;"><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" /></a></div><div style="text-align: left;">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.</div><div style="text-align: left;"></div><div style="text-align: left;">What do you think? </div><div style="text-align: left;">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 <span style="font-family: 'Courier New', Courier, monospace;">setControl</span>.</div><div style="text-align: left;"><br />
</div><div style="text-align: left;">Just click on the like/dislike button below - and if you have a few minutes, feel invited to drop a comment below.</div><div style="text-align: left;"><br />
</div><div style="text-align: left;">Thanks, </div><div style="text-align: left;">Marcel<br />
<br />
<b><span class="Apple-style-span" style="font-size: large;">Update #1:</span></b><br />
<br />
If you like the idea you may also consider commenting on it at/for <a href="http://meta.stackoverflow.com/questions/93653/stack-trace-wiki-on-so">stackoverflow.com</a>.<br />
<br />
<br />
Stay in touch: Follow me on <a href="https://twitter.com/MarcelBruch">Twitter</a>.</div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div>Anonymoushttp://www.blogger.com/profile/04192783689046741384noreply@blogger.com7tag:blogger.com,1999:blog-1479535086136999079.post-69834297420846810732011-05-15T15:59:00.019+02:002011-05-17T09:49:54.882+02:00A Subword Matching Completion Engine for Eclipse?A few hours ago stumbled across a post at stackoverflow.com titled "<a href="http://stackoverflow.com/questions/5755869/eclipse-fulltext-autocompletion-for-java">Eclipse: Fulltext autocompletion for Java?</a>" where a programmer is essentially asking whether Eclipse' code completion supports partial proposal matching.<br />
<div><br />
</div><div><br />
</div><div>I copied the question here to make this post a bit more self-contained:<br />
<br />
================================================<br />
<br />
</div><div><span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"></span><br />
<span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"></span><br />
<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;"><span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;">Hi, can I have fulltext autocompletion for Java @ Eclipse? Let's demonstrate:</span></div><div><span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"><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;">Final piece of code:</b></span></div></div><div><span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"></span><br />
<span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"></span><br />
<span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"></span><br />
<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;"><span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"><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;"><span class="pln" style="background-color: transparent; border-width: 0px; color: black; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;">getVariants</span><span class="pun" style="background-color: transparent; border-width: 0px; color: black; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;">().</span><span class="pln" style="background-color: transparent; border-width: 0px; color: black; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;">add</span><span class="pun" style="background-color: transparent; border-width: 0px; color: black; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;">(</span><span class="kwd" style="background-color: transparent; border-width: 0px; color: darkblue; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;">new</span><span class="pln" style="background-color: transparent; border-width: 0px; color: black; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;"> </span><span class="typ" style="background-color: transparent; border-width: 0px; color: #2b91af; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;">Variant</span><span class="pun" style="background-color: transparent; border-width: 0px; color: black; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;">(</span><span class="typ" style="background-color: transparent; border-width: 0px; color: #2b91af; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;">MediaType</span><span class="pun" style="background-color: transparent; border-width: 0px; color: black; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;">.</span><span class="pln" style="background-color: transparent; border-width: 0px; color: black; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;">TEXT_XML</span><span class="pun" style="background-color: transparent; border-width: 0px; color: black; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;">));</span><span class="pln" style="background-color: transparent; border-width: 0px; color: black; font-size: 14px; margin: 0px; padding: 0px; vertical-align: baseline;">
</span></code></span></pre><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;"><span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"><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;">How do I code now:</b></span></div><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;"><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;"><span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;">getv[ctrl+space].a[Enter]new V[ctrl+space, down arrow, Enter]M[Ctrl+Space, Enter].<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;">text_x</b></span></div></blockquote><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;"><span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;">Basically, Eclipse completes word "TEXT_XML" when I provide letters "TEXT_X".</span></div><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;"><span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"><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;">How would I like to code:</b></span></div><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;"><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;"><span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;">getv[ctrl+space].a[Enter]new V[ctrl+space, down arrow, Enter]M[Ctrl+Space, Enter].<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;">xml</b></span></div></blockquote><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;"><span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;">and Eclipse should realise I meant "TEXT_XML" (fulltext autocompletion).</span></div><br />
================================================<br />
<br />
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).<br />
<br />
This is how it looks like in action now:</div><div><span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"><span class="Apple-style-span" style="font-family: Times;"><span class="Apple-style-span" style="border-collapse: separate; font-size: small; line-height: normal;"><br />
</span></span></span><br />
<span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"></span><br />
<div class="separator" style="clear: both; text-align: center;"><span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"><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;"><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" /></a></span></div><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;"><span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"><br />
</span></div><span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"><span class="Apple-style-span" style="font-family: Times;"><span class="Apple-style-span" style="border-collapse: separate; font-size: small; line-height: normal;"><br />
</span></span></span>But now I wonder:<br />
<br />
<ol><li>How often do you just remember a few letters but don't know the complete name of a method or member?</li>
<li>Would you like to see such a completion engine in Eclipse?</li>
<li>What else would be missing?</li>
</ol><br />
I would be glad if you could send your thoughts to the <a href="http://www.eclipse.org/forums/index.php/t/209269/">code recommenders forum</a>.<span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial,'Liberation Sans','DejaVu Sans',sans-serif; font-size: 14px; line-height: 18px;"><span class="Apple-style-span" style="font-family: Times;"><span class="Apple-style-span" style="border-collapse: separate; font-size: small; line-height: normal;"><br />
</span></span></span><br />
<br />
Best,<br />
Marcel<br />
<br />
Stay in touch. Follow me on <a href="http://twitter.com/marcelbruch">Twitter</a>. <br />
<br />
<b><span class="Apple-style-span" style="font-size: x-large;"><span class="Apple-style-span" style="font-size: small; font-weight: normal;"> <br />
<b><span class="Apple-style-span" style="font-size: x-large;">Update #1: Neat research on this topic.</span></b></span></span></b><br />
<b><span class="Apple-style-span" style="font-size: x-large;"><span class="Apple-style-span" style="font-size: small; font-weight: normal;"> </span></span></b><br />
<br />
<br />
I just found a paper (almost) exactly on this topic. Could you check out these screencasts? <br />
<ul><li> <a href="http://vimeo.com/11664433">http://vimeo.com/11664433</a> </li>
<li><a href="http://vimeo.com/19369928">http://vimeo.com/19369928</a></li>
</ul>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 stx --> '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 :)<br />
<b><span class="Apple-style-span" style="font-size: x-large;"><span class="Apple-style-span" style="font-size: small; font-weight: normal;"><br />
</span>Update #2: Prototype available.</span></b><br />
<br />
<br />
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 <span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;">button.stx|<^Space></span> the engine only presents those proposals that match this regular expression .<span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;">*s.*t.*x.*</span><span class="Apple-style-span" style="font-family: inherit;"> which finally may match "</span><span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;">setText(text)</span><span class="Apple-style-span" style="font-family: inherit;">". This is roughly what Maxime proposed in his comment below. </span><br />
<br />
<span class="Apple-style-span" style="font-family: inherit;">In addition it now respects upper case letters as suggested by Deepak. For example <span style="font-family: "Courier New",Courier,monospace;">button.sT<^Space></span> now evaluates to </span>'.<span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;">*s.*T.*' </span>whereas<span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;"><span style="font-family: Arial,Helvetica,sans-serif;"> </span>button.st</span> would evaluate to .<span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;">*s.*[tT].*</span>.<br />
<br />
<span class="Apple-style-span" style="font-family: inherit;">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.</span><br />
<br />
<br />
Please find the installation instructions here:<br />
<a href="http://www.eclipse.org/forums/index.php/mv/msg/209269/671088/#msg_671088">http://www.eclipse.org/forums/index.php/mv/msg/209269/671088/#msg_671088</a><br />
<br />
Please send your comments to the forum here:<br />
<a href="http://www.eclipse.org/forums/index.php/f/211/">http://www.eclipse.org/forums/index.php/f/211/</a><br />
<br />
<br />
<br />
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">Stay in touch. Follow me on <a href="http://twitter.com/marcelbruch">Twitter</a>.</div><div><br />
</div><br />
</div>Anonymoushttp://www.blogger.com/profile/04192783689046741384noreply@blogger.com12tag:blogger.com,1999:blog-1479535086136999079.post-43204193331592535112011-05-13T21:12:00.000+02:002011-05-13T21:12:07.900+02:00Google Summer of Code 2011 - Extended Documentation Platform Get's Going<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;"><b><reposted. ate="" blogger="" its="" last="" maintenance="" on="" post="" this=""></reposted.></b></div><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;"><b><reposted because="" blogger.com="" during="" last="" maintenance="" of="" some="" trouble=""></reposted></b><br />
<br />
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.<br />
<br />
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.<br />
<br />
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).</div><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;"><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;" /></div><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;"><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;"><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" /></a></div><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;"><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;" /></div><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;"><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;" /></div><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;">Stefan already started to outline his thoughts on <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;">his blog</a>. 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 (<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;">Stefan</a>, <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;">me</a>) or by subscribing to Stefan's <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;">news feed</a> (a request to <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;">add Stefan's blog to planet-eclipse</a> is currently on the way).</div><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;"><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;" /></div><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;">Good Luck Stefan! I'm looking forward to your first prototype screenshots!</div>Anonymoushttp://www.blogger.com/profile/04192783689046741384noreply@blogger.com0