Monday, May 14, 2007

Status: Improving Eclipse Search


Official name: Eclipse search plugin: providing a better, faster, more relevant Eclipse search

May 15th


Training


I'm currently implementing an Eclipse plugin (about AJAX development – currently dealing mostly with manipulating/listening DOM document and nodes in embedded SWT.Mozilla browser – trying to implement a WYSIWYG HTML document designer) as a project at school so I had (and continue having) experience with Eclipse plugin development process with our project team at school. I've read a number of chapters from the book “Eclipse: Building Commercial-Quality Plug-ins and I'm still reading.


After our initial discussions with Francois, this was a list of ideas about usability from Francois to familiarize myself with source code related with search features of Eclipse.


A few ideas for search usability
1) improve Ctrl-J search:
- Ctrl-J : have Ctrl-V paste the current ring in it
- Ctrl-J : if there's a selection, have a second Ctrl-J take this selection as search string
- Ctrl-J followed by Ctl-R would switch to regex search
- Ctrl-J to global search: transform a Ctrl-J to to a global search actually, drive all searches from the keyboard incremental search would be good: there should be a set of keyboard shortcuts on Ctrl-J to set up a complete search, and then execute it globally.
2) Display search results. the view that displays the search results is very poor currently. Probably a tree view is not perfect. It should show the matches, for example. It should have more shortcuts...
3) improve the search dialog. More TBD
4) real search/replace:
- search and replace in multiple files (all files/subset of files)
- selective (based on language elements...)


I had time to checkout and browse source codes in Eclipse CVS, find out which component does what and how it does that. However, I didn't have time to grasp the whole picture.


Problems/ Possible Enhancements to Address


Here is a list of issues from my little research in Eclipse Bugzilla about possible enhancements/problems to address:

1. find/replace search should have a tick-box for "ignore comments" (enhancement request)
https://bugs.eclipse.org/bugs/show_bug.cgi?id=161398

2. Show as package tree
https://bugs.eclipse.org/bugs/show_bug.cgi?id=160481 (enhancement request)

3. Store Previous Searches for Startup (enhancement request)
https://bugs.eclipse.org/bugs/show_bug.cgi?id=169252

4. Search dialog "Java Search" Scope should include Hierarchy (WONTFIX bug)
https://bugs.eclipse.org/bugs/show_bug.cgi?id=110252

5. New text search shown line not a great help (LATER)
https://bugs.eclipse.org/bugs/show_bug.cgi?id=127672
(This bug is waiting for applying styles on a tree item.)

6. Result in Table (LATER)
https://bugs.eclipse.org/bugs/show_bug.cgi?id=129185

These two are related:
7. Search shows duplicate results in nested projects (LATER)
https://bugs.eclipse.org/bugs/show_bug.cgi?id=144959

8. Resource exclusion filters
https://bugs.eclipse.org/bugs/show_bug.cgi?id=84988
(read together with: https://bugs.eclipse.org/bugs/show_bug.cgi?id=144959 - about duplicate results for nested folder structures)

9. Search Enhancements
https://bugs.eclipse.org/bugs/show_bug.cgi?id=108223

10. Search in files: see matched lines
https://bugs.eclipse.org/bugs/show_bug.cgi?id=72575


Francois investigated the list and commented on it and it seems to me that I can make use of / address many issues in this list, either directly or indirectly.


Thoughts about the Main Part ( Lucene, OpenGrok etc. )


I tried to keep myself focused on research at the beginning so I read about both Lucene and OpenGrok. I understood how OpenGrok achieved to be a great tool for source code browsing and cross-referencing. Since it makes use of Lucene, either way (if I use OpenGrok or not) Lucene is a building block of this project. I've read a few articles and browsed a few presentations about Lucene and I'm still trying to learn more about it.


I've been consistently asking questions to myself about index sizes and frequent updates to the index. As a basic solution, I thought of keeping a partitioned index ( e.g. A project having an index that is distributed to multiple Lucene indexes and these index files being accessed/changed when it's necessary. Shortly, we may call this partitioning the index file. ).


This absolutely has a tradeoff because of the cost of not using one index for the whole project. But, when a good number of partitions is selected, I think that the tradeoff will seem small. (I thought of computing the ideal number in the future, like the computation of ideal bucket size in file processing literature.)


I thought of this “partitioning” method because an Eclipse user can get very aggressive when we tell him that we can “linearize” the time to search his files but in order to do this, he has to keep like ~ 50 MB for the index in RAM. ( I've tried indexing different things and I think that this value is a good estimate for large projects. And by the way, a possible question is why do I have to keep things in RAM and do not write things to disc. One answer: dynamic nature of source codes and frequent updates. )


Partitioning approach gives us one advantage: we only have to index a part of the project when you are working on a set of files. Since the number of active editors is considerably less than the actual project size, it is an idea that can work. And since we can keep a relatively small index in RAM, indexes containing your active file set can be updated fast.


However, I still see other tradeoffs in this approach and it is just a start. By the way, I'm trying not to focus on algorithm-wise enhancements for now and I don't plan to implement this idea in my prototypes during the early days of coding. I plan to start coding by addressing usability enhancements first.


I think early search plugin prototypes will makes use of RAM – HDD data transition features of Lucene and just write the index to a file on the disc after a certain threshold.


Todo List for Rest of the Interim Period


Well, I didn't have time to update the Wiki page of my project but I'll do it in 1-2 days.

Second thing that I feel I have to do before interim period ends is implementing little usability ideas from the list of Francois.


That's all for now.

If you have related ideas please feel free to send an e-mail. I'll be really glad to hear ideas about usability issues or Lucene / OpenGrok etc.

Status,Integate and Connect your Clients

Hi, all:
My project "Integate and Connect your Clients" is focused on building a platform to support mail client, Calendar and TaskList ,mentored by Wayne Beaton.

And I have done the following things:

1. Read related docs my mentors gave.

2. Looked into "Mail content","Mail attachment" and such problems.

3. Study sample codes,discuss with my mentor with the model design and function design.

Next i will try to add some new trial code to sample code.

Feel free to comment :)

Sunday, May 13, 2007

Status, NetBeans in Eclipse

Hi all,

My Project goals are to provide a minimal NetBeans environment within Eclipse as Eclipse plugins and support running NetBeans plugins like Matisse. My mentor is Philippe Ombredanne. During the last 3-4 weeks I didn’t have much time for GSOC07 but I have done some work:

  • I have contacted my mentor and we discussed the project goals. As first step I will implement a simple Netbeans’ plugin(an simple Editor) and try to find what is needed to run this plugin within Eclipse.
  • I updated the wiki page of my Project.
  • I started to read the documentation of NetBeans.
  • I started to code the simple NetBeans’ plugin.

I will have much time for GSoC07 after 26st of May.

Criticism, suggestions and questions are welcome ;).

Saturday, May 12, 2007

What's about this multi-monitor stuff?

Maybe you heard about this project yet - maybe not. The official name of my (Benjamin Muskalla) this years Google Summer of Code project: Improve the multi-monitor support in Eclipse. I have to say that the name maybe a bit delusive because all of the features are also available for single-user desktops. For example what I've implemented so far: Fullscreen mode for RCP applications. This is all about the native support of SWT to provide an option to set a shell into fullscreen mode (native or emulated) and use this to rearrange the layout of the product itself. As you can see if you try out the patches in the CVS repository, you can switch your Eclipse IDE to a fullscreen mode where Eclipse has the whole available space on your monitor, hides it's own toolbar/menubar and statusbar to give you as much space as possible to write code.
As I've only limited platform possibilities, there are only patches for Windows, Windows Vista and Linux GTK available yet - hopefully I can provide some more in the future. Additionally I put together a workbench handler to easily switch to the fullscreen mode (see screenshot). It would be really great to get some feedback from the community to improve the current work. One item I had a hot discussion with my mentor (Kim Horne) if we should provide an option to let the user configure their own fullscreen settings in the Workbench preferences. This way, the user could choose what to show in fullscreen mode: Toolbar on/off, Menubar on/off, etc...

Hope to post some exiting news in the next weeks about other interesting parts of the project like "Detached Views 2.0"!

So long I wish you a nice weekend :)

status, Semantic-aware software component provisioning

As of April, 11th, I've been mainly assessing code reuse scenarios, both for the ontology modeling and the repository design tasks; I've been working on the domain model, analyzing Maven repository's tag cloud, and getting a grasp on the OSGi specification as well.

A good axiomatization of the software component domain is given here @ cos.ontoware.com, and I think augmenting such ontologies would be nice for the project. They provide a quite granular description of a software component and library, which will support future development of the project, pushing formal description of software components down to interface- and method-level. I believe some sort of integration with TagSEA (or other efforts in the code annotation area) is possible and promising for the future.

I also discussed with my mentor some issues about OSGi, Maven and other provisioning systems seamless integration in the framework-to-be, since they share most of metadata and semantics about components: it would be nice to have a core set of shared essential metadata.

I am currenty thinking - and discussing with my mentor - about the chance of extending an existing OSGi Bundle Repository implementation, to add the needed semantic services, avoiding to design the repository from scratch (thanks lemmy). The repository could be deployed as a bundle itself. However, this requires me some time to be assessed more thoroughly.

Repository coding will start thru next weeks, as soon as I decide existing components' and technologies' integration, analyze use cases and define a strategic architecture to rely upon.

I keep updating my project's wiki quite frequently; I just added identified use cases, outlines and specifications will follow asap.

Feedback, criticism and suggestions are welcome ;) .

Friday, May 11, 2007

status, Support seamless debugging between JDT and CDT

Hi all,

My project goal is to support seamless debugging between JDT and CDT. My project is mentored by Philippe Ombredanne. During these first weeks I have done the following things:

1 - announced the project : I created my wiki page[1] and a blog[2]. I sent emails (for instance to the cdt-dev mailing-list) to get suggestions, comments, and feedback.

2 - got the existing work : I got a link[3] from cdt-dev guys to a presentation on the several approaches to provide seamless debugging. My mentor gave me too some links[4, 5, 6] on how to debug Java JNI application.

3 - read documentation : I read documentation on the Eclipse architecture, and did tutorials to learn to write plug-ins.

4 - started to code : I started to write a prototype plugin to validate an approach

Feel free to comment :)

[1] wiki page
[2] personal blog
[3] Mixed mode debugger prototype presentation
[4] Debugging integrated Java and C/C++ code
[5] Debugging integrated in Eclipse
[6] Java and C/C++ JNI Application Debugging with GUI

status, Eclipse Web Interface

Hi all,

Here is a quick update on the status for the "Eclipse Web Interface" project.

So I have begun discussing ideas with my mentor, Nick Boldt, for the project and from this we have successfully been able to start narrowing down what the project's primary goal should be. During these discussions I have been keeping note of what I need to familiarize myself with -- right now the Eclipse Plug-in architecture is at the top of my list. Consequently, I've been getting my feet wet by starting to read the pertinent documentation on eclipse.org as well as playing around with some EMF tutorials and the Eclipse Plug-in Project wizard.

I have yet to officially start coding on the project itself, but this will be the next step! :-)

status, IDE Generator (Miguel Garcia)

Hi,

I see my SoC project comprising several areas, and thus I’ll report status in each:

  1. the promotion area: I’ve started a blog
    DSL Tooling, with a touch of Language Engineering
    where I’m keeping a trail of design decisions, related know-how, and (soon) reflections upon particular code snippets. All this aiming to make life easier for those wanting to join the project, or simply start a related project.

  2. the IDE generator itself (i.e., my pumped-up version of Gymnast)

    2.a) A small step next week: Ecore-ifying the APIs being generated as of now for Concrete Syntax Trees.

    2.b) In parallel, I guess I should start with IP issues around placing in the Incubation CVS the Gymnast code, I’ll contact my mentor on this but I understand completing the paperwork is on me

  3. generating an IDE as a proof-of-concept. Alas, again two lines of activity here:

    3.a) there’s a favorite DSL IDE among those which I’m targeting, which is Emfatic, with several extensions already coded manually. The strategy is to harvest from them best-practices to embed in the generator. But in all honesty, the functionality that Emfatic sports is not (and will not) remain limited to what the pumped-up Gymnast generates. It’s a special status that Emfatic has among the “generated IDEs”. Before making this Emfatic into CVS, I need two weeks to solve some architectural issues (mostly, truly supporting editing several docs at the same time)

    3.b) No progress so far on a DSL other than Emfatic (I'm not thinking at this stage about coding, but about language design to pave the way for generation time), but I’ll hint at ideas all along in the blog. I hope someone picks up on that, for further impact.

Questions / comments / feedback are welcome!


Miguel

Tuesday, May 8, 2007

Calling all artists

The Google Summer of Code (SoC) program [1] is underway and Eclipse has over 20 projects [2]. SoC, which is sponsored by Google, provides funding for students to work on open source projects over the summer. We (the students) submitted proposals which were reviewed by several Eclipse committers (and many of your favorite evangelists). While the program is sponsored by Google, the management and mentoring is done by the Eclipse community. For the past month many of the students have been getting involved with their projects, meeting people on mailing lists / newsgroups, getting access to the code, etc...

[1]http://wiki.eclipse.org/index.php/Google_Summer_of_Code
[2]http://wiki.eclipse.org/index.php/Google_Summer_of_Code_2007

We have also been working on a logo. Gen Nishimura has submitted some nice artwork, but I'm sure others have creative ideas too. If you have any ideas please take a look at bug# 184913 [3].

[3] https://bugs.eclipse.org/bugs/show_bug.cgi?id=184913

Finally we (the students) will be using this blog [4] to update the community on our progress, solicit ideas, etc... Over the next few days some of us will outline what we have been up-to and how we are proceeding with our work.

[4] http://eclipse-soc.blogspot.com/