Difference between revisions of "SoC 2009 Ideas"

(Add a plugin manager)
(Add a plugin manager)
Line 86: Line 86:
 
The lack of a plugin manager system is an enormous drag on the ability of good plugins to be widely distributed, and the ability of needy users to find them. The ability to be registered will also ensure proper compatibility with specific ImageJ versions, and the ability to track plugin versions.
 
The lack of a plugin manager system is an enormous drag on the ability of good plugins to be widely distributed, and the ability of needy users to find them. The ability to be registered will also ensure proper compatibility with specific ImageJ versions, and the ability to track plugin versions.
  
'''Goal:''' Build a plugin manager. The GUI should have two main components: a tree with the plugins and a text pane for reading documentation.
+
'''Goal:''' Build a plugin manager.<br />
* The tree must mirror the user's plugins menu and provide the means to enable/disable plugins, i.e. to add/remove them from the menus.
+
The GUI should have two main components: a tree with the plugins and a text pane for reading documentation.
 +
* The tree must mirror the user's plugins menu and provide the means to enable/disable plugins, i.e. to add/remove them from the menus. As well as indicate whether any updates are available for a plugin, or newly available plugins.
 
* The text pane will offer the documentation on a plugin, and thus double as built-in plugin documentation GUI. The documentation must be fetched directly from this wiki site (displayed in a javax.swing.JEditorPane with an HTMLEditorKit).<br />
 
* The text pane will offer the documentation on a plugin, and thus double as built-in plugin documentation GUI. The documentation must be fetched directly from this wiki site (displayed in a javax.swing.JEditorPane with an HTMLEditorKit).<br />
 
The plugin manager will query a specific server based on pacific.mpi-cbg.de for updated a newly available plugins. The back-end will be implemented in [http://www.jgit.org jgit].
 
The plugin manager will query a specific server based on pacific.mpi-cbg.de for updated a newly available plugins. The back-end will be implemented in [http://www.jgit.org jgit].

Revision as of 11:16, 11 March 2009

Welcome!

Fiji is planning on applying to the Google Summer of Code 2009 program. As mentoring organizations have not yet been accepted, there is no guarantee that Fiji will be asked to participate. This page is to help plan proposed student projects.

This page contains project ideas culled from the Fiji user and developer community. You can get started by reading some project descriptions, and the mailing list thread(s) that spawned them. Also consider joining the developer mailing list, or finding us on IRC. Details can be found in Help:Contents.

Don't like a project you see here? Just throw your ideas at us, on the developer mailing list!

General Requirements

All projects have the following basic requirements:

  • Unless otherwise stated, projects will require programming in Java.
  • All materials must be released under the GNU General Public License (GPL), version 2.
  • Individual students shall retain copyright on their works.
  • Projects must be tracked and managed in Git, and published on [1] (we will provide you with an account).
  • Weekly project status reports should be sent to the project's mentors. Each status report should outline what was accomplished that week, any issues that prevented that week's goals from being completed, and your goals for the next week. This will help you to break your project down into manageable chunks, and will also help the project's mentors to better support your efforts.

Interested students are encouraged to read the Advice for GSoC Students Page, as it has excellent suggestions that might help you to pick a project and shape your proposal.

If your proposal is accepted by the Fiji Development Community you will be expected to work on it full time during the summer. It is cool if you want to take a week off for vacation, but remember that Google is hiring you for the summer to help us improve Fiji. That should be your focus. Don't expect that you will be able to work on your project for just 10 hours a week and then collect at the end.

If your original proposal doesn't pan out or becomes too much of a challenge, you should work with your mentor to help redefine it. We really want to see every project succeed this summer, as there is a great deal of interest in these projects from within the user community.

Students can apply for the program at the Google Summer of Code website. Please consider reviewing our SoC2009Template and answering its questions as part of your application.


Project ideas

Integrate Micro-Manager into Fiji

This project requires a bit of knowledge in compiling C++ code on Linux, MacOSX and Windows. The idea is to make a recipe that other people can use to compile new releases of Micro-Manager, as well as integrate it into the Fiji project for a smooth user experience. To ensure that support for Micro-Manager is not broken inadvertently, you shall add regression tests, too.

Goal: Provide an easy way to compile and ship Micro-Manager with Fiji.
Language: Java
Mentor: Johannes Schindelin (johannes.schindelin@gmx.de)

Add more regression tests

Whenever releasing Fiji, or after major changes, we would like to be reasonably safe that we did not break things that used to work before. We already have a few tests, but hardly enough.

Goal: Provide tests that can be run in headless mode, ensuring certain functionality does not get broken.
Language: Java, Clojure, Javascript, Jython, JRuby or ImageJ's macro language
Mentor: Johannes Schindelin (johannes.schindelin@gmx.de)


Add word expansion to the scripting interpreters

Fiji offers scripting in 5 different languages, all running on the JVM: Javascript, Jython, JRuby, Clojure, Beanshell and the ImageJ Macro Language. Through the reflection API and the numerous language hooks that each scripting engine provides, it is possible to parse half-written scripting code and provide a list of words to expand the current word in the prompt of each interpreter.

Goal: Provide word-expansion capabilities to the scripting interpreters (see Scripting Help).
Language: A combination of Java plus the scripting language, in this order of preference: Javascript, Jython, JRuby, Clojure and Beanshell. If you can do them all, we'll erect you a monument.
Mentor: Albert Cardona (acardona@ini.phys.ethz.ch)


Add a simple yet minimally powerful plugin and script editor

ImageJ offers currently a very limited, java.awt.TextArea -based built-in text editor, for writing, compiling and running java plugins, ImageJ macros, and as of recently javascript scripts. The text editor lacks syntax highlighting, does not use a proper font for coding, and lacks minimal debugging capabilities (such as parsing stack traces to highlight lines that failed to compile).

Goal: Build a minimal text editor with a good font for coding, syntax highlighting for java and javascript (and optionally jruby, clojure and beanshell), and the ability to compile java code and parse stack traces to highlight lines that failed to compile. Building in jvi a big bonus, but must enable non-modal editing capabilities with implicit minimal emacs keybindings (like in any default MacOSX text area: ctrl+a, ctrl+e, ctrl+w, etc.)
Language: Java or a JVM scripting language of your choice (preferrably Javascript, Jython, JRuby or Clojure).
Mentor: Albert Cardona (acardona@ini.phys.ethz.ch)


Add a plugin manager

Beyond the built-in commands, ImageJ provides the means to add user-developed plugins by implementing the PlugIn, PlugInFilter and PlugInFrame interfaces. Fiji uses ImageJ at the core and packages around it a very large number of plugins (see the Plugins Menu). The ideal application menus cannot contain hundreds of plugins: any specific user has no use for more than half of them, and their mere presence get on the way to adding other, user-desired plugins.

The core idea of this project is to generate a plugins manager, inspired in the excellent plugin manager of JEdit, to enable/disable plugins.

The lack of a plugin manager system is an enormous drag on the ability of good plugins to be widely distributed, and the ability of needy users to find them. The ability to be registered will also ensure proper compatibility with specific ImageJ versions, and the ability to track plugin versions.

Goal: Build a plugin manager.
The GUI should have two main components: a tree with the plugins and a text pane for reading documentation.

  • The tree must mirror the user's plugins menu and provide the means to enable/disable plugins, i.e. to add/remove them from the menus. As well as indicate whether any updates are available for a plugin, or newly available plugins.
  • The text pane will offer the documentation on a plugin, and thus double as built-in plugin documentation GUI. The documentation must be fetched directly from this wiki site (displayed in a javax.swing.JEditorPane with an HTMLEditorKit).

The plugin manager will query a specific server based on pacific.mpi-cbg.de for updated a newly available plugins. The back-end will be implemented in jgit.

Language: Java or a JVM scripting language of your choice (preferrably Javascript, Jython, JRuby or Clojure).
Mentor: Albert Cardona (acardona@ini.phys.ethz.ch)

Other Resources

* SoC2009Application

Other links

* ImageJ's homepage
* Fiji's developer mailing list
* #fiji-devel channel on irc.freenode.net