imag/doc/src/01000-intro.md

59 lines
2.8 KiB
Markdown

# Introduction {#sec:introduction}
In the following work, we define the architecture, internal interfaces and the
implementation of `imag` (called "the program" in the following chapters).
The program is intended to be an _Personal Information Management Suite_
(PIM-Suite), featuring all components such a suite should have, including
contact management, calendar, todo-list functionality, etc.
The program is intended to be used by so-called "power-users", therefor it is a
commandline application which offers a polished interface to the user and is not
bound to an editor, e-mail reader, RSS reader, etc. The program uses standards
as icalendar, vcard, RSS/Atom, Markdown, etc.
The development of this program may adapt other programs. For example, the
todo-module may be implemented with the "taskwarrior" application, if possible,
so we try to re-use functionality which is implemented elsewhere and where other
people put a lot of effort into. We clearly do not want to duplicate
functionality, work and effort or implementations.
"imag" is a single-user, one-shot program. It is not intended to be used by
multiple users with the same storage at the same time.
This may change in the future.
## The Problem {#sec:intro:problem}
The problem "imag" wants to solve is rather simple. When the project was
initiated, there was no PIM-Suite available which
* was for this domain of users ("power-users", "commandline users")
* contained functionality to link content
The latter point is the bigger one: "imag" wants to offer the ability for users
to link content. This means not only that a contact may be linked to a
date, but that _all things_ can be linked together. For example that a wiki
article can be linked to a date which is linked to a todo which is linked to a
note which is linked to a contact.
## The Approach {#sec:intro:approach}
The approach "imag" takes on solving this problem is to store content in a
(per-user) global "store" and persisting content in a unified way.
Meta-Information is attached to the content which can be used to, for
example, query the store.
While content is stored in _one_ place, "imag" does not duplicate content.
"imag" does not copy or move icalendar files, emails, vcard files, music or
movies to the store, but indexes them and stores the meta-information in the
store, making these things linkable this way.
Detailed explanation on this approach follows in the chapters of this work.
## Implementation {#sec:intro:implementation}
The program is written in the Rust programming language.
The program consists of libraries which can be re-used by other projects
to implement and adapt "imag" functionality. An external program may use a
library of the "imag" distribution to store content in the store of "imag" and
make it visible to "imag" this way.