4 people following this project (follow)

CiviKey

This project aims to offer a free virtual keyboard of professional quality ('free' must be understood in the sense of the freedom of the Open Source).
It is based on the .Net framework, developed in c# under the L-GPLv3 license.

CiviKey ease the development of specific keyboards that handle very specific functional problems (including ones related to disorders). Developers (and therapists in the medical case) can focus on specific issues while relying on an adequate infrastructure and a set of extensions (plugins) for pre-existing and common features.
Main project page is here http://civikey.invenietis.com/

Architecture overview

Technically speaking, the main challenge is to provide developers and designers of keyboards a work environment that facilitates their work. Key points are:
  • A single model of keyboard that handles fundamental aspects of a keyboard:
    • Keys: keys hold basic properties such as being pressed or released.
    • Zones: keys are grouped into functional areas called zones. Example: the numeric keypad, function keys, etc. which can be freely defined.
    • Modes: actual keys are associated to modes that generalize the effect of keys such as “Ctrl”, “Shift”, of physical keyboards but can be freely defined ( "Fridge", "Excel", etc.).
    • Layouts: a keyboard can define any number of graphical layouts.
    • Following picture informally describes the whole structure: Overview-Structure.gif
    • These objects (Context, Key, Zone, Layout, etc.) provide a set of events that enables a complete decoupling of the architecture (Model/View).
    • These objects define minimal properties: most of the actual properties (like the color of a key for instance) are under the control of Plugins (see below).
  • Complete externalization of the functionalities thanks to a Plugin system:
    • Plugins can be enabled, disabled, started or stopped as needed (this mimics Windows Services behavior).
    • A Plugin is configured globally and manages its own parameters for potentially any object of a Context (this is close to the Attached Properties mechanism of Windows Presentation Framework).
    • Plugins can consume and expose Services (Services are simple interfaces that are dynamically “proxyfied”) to other Plugins. Bindings between consumers and implementations are automatically handled by the kernel.
The kernel manages the Plugins and basic functionalities like saving and loading a Context, copying and pasting objects, etc. Plugins actually interact with the user: a skin (GUI) is a Plugin like any others.

Project's current state

The 2.0 beta version is out and we will only fix bugs in it as much as possible. We currently concentrate our effort on the version 2.5.
The 2.5 version relies on .Net framework 3.5 (the 2.0 is based on 2.0). It is an heavy refactoring process and the trunk is not functional except for the existing unit tests.
Project trunk is https://svn.invenietis.com/svn/CK/Core/trunk
login: anonymous
password: anonymous

How to help

The 5D rule (Discover, Design, Develop, Deploy and... Debug) may be great but we prefer to avoid it...
Current 2.5 work is based on Unit Testing, Unit Testing and Unit Testing.
We are looking for designers, coders, testers... and money of course.
Do not hesitate to contact us.
You can discuss with the development team at http://groups.google.com/group/civikey-dev

Thank you


for your generous contributions and support to CiviKey

Last edited May 19 2010 at 9:04 AM by thomasgros, version 23