<!-- 
	This document is provided as a template along with some guidance for creating
	your project proposal. This is just a template. Feel free to change it as
	you see fit (add sections, remove section). We feel, however, that the
	suggestions represented in this document represent the reasonable minimum
	amount of information to move forward.
	
	Please keep the formatting in this document simple. Please do not edit 
	this document in Microsoft Word as it adds huge piles of markup that make
	it difficult to restyle.
	
	More information is available here:
	
	http://wiki.eclipse.org/Development_Resources/HOWTO/Pre-Proposal_Phase
	
	Direct any questions about this template to emo@eclipse.org
 -->

<html>
<head>

<!-- 
	Include the title here. We will parse it out of here and include it on the
	rendered webpage. Do not duplicate the title within the text of your page.
 -->

<title>Remus Information Management</title>
</head>

<body>
<p>The Remus project is a proposed open source project under the <a
	href="http://www.eclipse.org/projects/project_summary.php?projectid=technology">Technology</a>
parent project.</p>

<p>This proposal is in the Project Proposal Phase (as defined in the
Eclipse Development Process) and is written to declare its intent and
scope. We solicit additional participation and input from the Eclipse
community. Please send all feedback to the <a
	href="http://www.eclipse.org/forums/eclipse.remus">Remus Eclipse
forum</a> or <a
	href="http://www.eclipse.org/newsportal/thread.php?group=eclipse.remus">Remus</a>
newsgroup.</p>

<h2>Background</h2>
<p>With today's information technologies, the amount of information
we consume daily is enormous. Efficient management and fast access to
frequently used information has become more important than ever. The
fact that we use a wide range of applications and digital mediums makes
the aggregation of information, search and retrieval even more
difficult. Managing a huge amount of information successfully requires
an intelligent tool that enables users to file, categorize and visualize
such diverse types of data as information units in a single application.
</p>
<!-- 
	Optionally provide the background that has lead you to creating this project.
 -->

<h2>Scope</h2>
The objectives of the Remus project are:
<h3>Management and visualization of typed information</h3>
<p>The application provides a rich interface to create, edit and
view single information units with a type-specific information
representation. The local data is browsable through a hierarchical or
semantical structure.</p>
<p>
<div style="text-align: center"><img src="figure_1.png" border="0"></div>
</p>
<p>Every information can be opened in a separate editor that
generally will have at least one tab for a viewing-optimized
representation of the information unit and other tabs for editing. All
information units can be linked with each other and can have events
attached. Events are visualized in a separate view, which is similar to
the calendar view known from other applications like Microsoft Outlook
or Thunderbird Lightning.</p>
<p>
<div style="text-align: center"><img src="figure_2.png" border="0"></div>
</p>
<h3>Searchability of all data based on different criteria.</h3>
<p>The application uses Apache's Lucene Technology to create a
searchable index of all information units. Thus, the application
provides a search view to initiate a search, a view for the search
results and an extra information type for saving search queries. Users
can save search queries, called 'Favorite Searches', and subsequently
use these Favorites to execute regular search requests against a growing
and dynamically changing information pool.</p>
<p>
<div style="text-align: center"><img src="figure_3.png" border="0"></div>
</p>
<p>Search ranking mechanisms are injected by a declarative
OSGi-Service and can be changed easily.</p>
<h3>Desktop Integration</h3>
<p>Remus provides a customizable desktop-panel which enables rapic
access to often-used operations without having the entire application on
the screen. For a screencast on how to use the panel, see <a
	href="http://www.remus-software.org/user-documentation/7-dektop-integration/14-the-desktop-panel">http://www.remus-software.org/user-documentation/7-dektop-integration/14-the-desktop-panel</a>.
</p>
<p>
<div style="text-align: center"><img src="figure_4.png" border="0"></div>
</p>
<p>The most critical point in information management is the easy and
fast creation and transfer of data into another application. Remus uses
a rule engine that makes it very easy to drag'n' drop (or copy/paste)
relevant information into the system. Specific rules allow you to create
complex information structures from, for example, unstructured text with
a single drag'n'drop operation.</p>
<h3>Synchronization with external information pools</h3>
<p>Today's information management landscape already offers a great
number of excellent platforms for handling specific information types.
Typical examples of such platforms, especially for user-generated
content, are Youtube, Delicious or Flickr. They all share the same goal:
providing an application structure for the management of one specific
type of information (Youtube -> videos, Flickr -> images, ...). The goal
of Remus is not to compete against these applications, but to facilitate
and enhance your local information management by providing
functionalities to browse through these remote information repositories
and to synchronize your data in Remus with the information in other
repositories. The advantages in a nutshell:
<ol>
	<li>Synchronized data is available offline.</li>
	<li>No need for using the platforms website, all synchronization,
	adding, removing and viewing items can be done with your local Remus
	client. One application and one user interface for all platforms.</li>
	<li>Moving data between repositories: Just one drag'n'drop to move
	data from one remote repository to another (e.g. moving a photo from a
	flickr account to a picasa account</li>
	<li>High-performing, fast offline search through synchronized data</li>
	<li>Editing of synchronized data without a connection to the
	repository</li>
	<li>Creation of links between information units in different
	remote repositories. For example, Remus allows users to create an
	ontological connection between a YouTube video and a Flickr photo.</li>
	<li>Automatic notifications for new or updated data.</li>
</ol>
</p>
<p>
<div style="text-align: center"><img src="figure_5.png" border="0"></div>
</p>
<!-- 
	All projects must have a well-defined scope. Describe, concisely, what
	is in-scope and (optionally) what is out-of-scope. An Eclipse project
	cannot have an open-ended scope.
 -->

<h2>Description</h2>
Remus Information Management is an Eclipse RCP based application for the
daily management of information the user needs for his or her daily
work. Development started in summer 2008 and the application has reached
Alpha status: The current project state including available
documentation and source code can be found on the current project
website http://remus-software.org. The decisive factor for developing
Remus was the growing demand for a tool which makes often needed
information rapidly accessible online and also available offline.
Another key requirement was the easy transfer of information and data
from other applications or remote information pools. This will be
resolved with a rule engine for dropping or cutting/pasting data into
the application and a framework for synchronizing with remote
information pools. The application should be as open as possible:
Third-party vendors can develop their own information structures and
plug them into the application. Remus is available as a stand-alone RCP
application or as a set of bundles which can be installed into another
Eclipse instance.

<!-- 
	Describe the project here. Be concise, but provide enough information that
	somebody who doesn't already know very much about your project idea or domain
	has at least a fighting chance of understanding its purpose.
 -->

<h2>Framework</h2>
<p>These are the most important capabilities of the Remus Framework:
<ol>
	<li>Information structure injection: With a structure definition
	in place, any third parties can contribute their own UI for creating
	and editing information structures. After defining an EMF based
	structure description and an UI for editing the structure, you are able
	to build an application for viewing and editing this specific
	information structure (including navigation, copy/paste, undo/redo,
	...)</li>
	<li>Remote repository: Remus provides a synchronization mechanism
	for updating, uploading and downloading information units from a remote
	repository. So third parties can add their own repository
	implementation via extension points. This implementation has to
	transform the repository-specific object structure into a
	Remus-specific structure. Change dectection and automatic
	synchronization is done by the framework. Updating an information unit
	fragment is also possible (this is important if the local information
	unit has more properties that can be changed than are provided by the
	remote object.)</li>
	<li>Contributing to existing information structures: Remus is an
	flexible open platform that will offer many possibilities to extend
	functionalities, such as adding your own desktop panel sections,
	contributing your own rule set execution routines, defining new actions
	for existing information units, adding your own search providers, ...</li>
</ol>
</p>

<h2>Integration of other Eclipse projects</h2>
<p>The current development stage already integrates other Eclipse
projects. There is full integration of BIRT Runtime and BIRT Designer,
see
<a href="http://www.richclient2.eu/2009_11_23/building-reports-of-your-local-information-pool-with-birt-and-remus/">http://www.richclient2.eu/2009_11_23/building-reports-of-your-local-information-pool-with-birt-and-remus/</a>.
The framework provides various possibilities for a seamless integration
of other UI Elements like editors, viewers or even perspectives. Another
example of third-party integration is Xtext
(<a href="http://www.richclient2.eu/2009_09_01/extending-rim-with-xtext/">http://www.richclient2.eu/2009_09_01/extending-rim-with-xtext/</a>) or
XMind (for a screenshot see
<a href="http://remus-software.org/images/stories/screenshots/general/6/mindmap.png">http://remus-software.org/images/stories/screenshots/general/6/mindmap.png</a>).
</p>

<!-- 
	Describe any existing code that will be contributed to the project.
 -->

<h2>Legal Issues</h2>
<p>Remus and all its contributions are currently licensed under the
terms of the Eclipse Public License. Third-Party Libraries must be
compatible to the EPL. There are currently just a few drawbacks:</p>
<ol>
	<li>The icons (except the application logo and splash screen) are
	part of Incors' Iconexperience icon set, a commercial set of icons,
	which will have to be replaced.</li>
	<li>The connector to Microsoft Outlook uses a commercial
	third-party library and is not included in the initial download but can
	be installed via the Eclipse update mechanism.</li>
</ol>

<h2>Developer Community</h2>
<p>The developer community is expected to grow as the need arises to
integrate further specific information types or remote repositories.</p>

<h2>User Community</h2>
<p>The user community will primarily consist of people working in an
IT based or academic environment. In view of the connectors to social
platforms, it cannot be ruled out that the application will also be used
for private purposes. Remus already has a small user community who is
using the current nightly build.</p>

<!-- 
	Please describe any potential legal issues in this section. Does somebody else
	own the trademark to the project name? Is there some issue that prevents you
	from licensing the project under the Eclipse Public License? Are parts of the 
	code available under some other license? Are there any LGPL/GPL bits that you
	absolutely require?
 -->

<h2>Committers</h2>
<p>The initial committer will focus primarily on the core
functionalities of the underlying framework. An important requirement
for the committers is to provide the necessary documentation and tools
which will make easy it for interested parties to use the application as
a framework for information management and to extend the application by
integrating their own business-specific information structures or by
connecting to their own proprietary remote information pools.</p>
<!-- 
	List any initial committers that should be provisioned along with the
	new project. Include affiliation, but do not include email addresses at
	this point.
 -->

<p>The following individuals are proposed as initial committers to
the project:</p>

<ul>
	<li>Tom Seidel (proposed project lead)</li>
	<li>Andreas Deinlein</li>
</ul>


<h2>Mentors</h2>

<!-- 
	New Eclipse projects require a minimum of two mentors from the Architecture
	Council. You need to identify two mentors before the project is created. The
	proposal can be posted before this section is filled in (it's a little easier
	to find a mentor when the proposal itself is public).
 -->

<p>The following Architecture Council members will mentor this
project:</p>

<ul>
	<li>Ed Merks</li>
	<li>Tom Schindl</li>
</ul>

<h2>Interested Parties</h2>

<!-- 
	Provide a list of individuals, organisations, companies, and other Eclipse
	projects that are interested in this project. This list will provide some
	insight into who your project's community will ultimately include. Where
	possible, include affiliations. Do not include email addresses.
 -->

<p>The following individuals, organisations, companies and projects
have expressed interest in this project:</p>

<ul>
	<li>Benjamin Muskalla, EclipseSource</li>
	<li>Wayne Beaton, Eclipse Foundation</li>
</ul>

<h2>Project Scheduling</h2>
<p>The first official release is scheduled for Q1 2010. The goal of
this release is to meet the key requirements and to provide a basic set
of information types and remote repository connectors.</p>

<!-- 
	Describe, in rough terms, what the basic scheduling of the project will
	be. You might, for example, include an indication of when an initial contribution
	should be expected, when your first build will be ready, etc. Exact
	dates are not required.
 -->

<h2>Changes to this Document</h2>

<!-- 
	List any changes that have occurred in the document here.
	You only need to document changes that have occurred after the document
	has been posted live for the community to view and comment.
 -->

<table>
	<tr>
		<th>Date</th>
		<th>Change</th>
	</tr>
	<tr>
		<td>22-Jan-2010</td>
		<td>Document created</td>
	</tr>
</table>
</body>
</html>