|
|
Donnal Walter, M.D., Ph.D. |
Mindwrapper is an open-source, object-oriented framework for wrapping your mind around a complex domain, one concept at a time. It is a toolkit for custom application development. Although Mindwrapper may be suitable for many kinds of custom applications, the initial motivation grew out of the clinical arena. It is the 'kernal' of the Prism application and library.
|
|
Foundation. Mindwrapper is written in Python and is based on the Python syntax. Essentially a superset of Python, Mindwrapper is strongly class-oriented, taking advantage of metaclasses and using inheritance extensively. Mindwrapper also provides thick wrappers around many classes from the wxPython GUI toolkit to facilitate component layout (using sizers), event binding and connection to data sources.
Architecture. The Mindwrapper architecture is currently single-tiered (subject to change) and two-layered. The abstraction and presentation layers provide separation of concerns with a clear interface between the two layers. The abstraction-presentation arrangement is a kind of Model-View-Presenter (MVP) architecture, with presenters being wrappers around wxPython views and having connections to models from the abstraction layer.
Information model. Mindwrapper encourages hierarchical composition. The information model is based on the premise that richly structured conceptual objects are best represented as directed, acyclic, labeled graphs. Each node in the graph along with its components is self-contained (encapsulated). This reduces complexity but limits the richness of relationships that can be represented. Mindwrapper graphs, however, are not strictly acyclic, as the framework provides special mechanisms for managing dependencies between given nodes. Labeled connections (using dot-notation keys) give the user-developer handles with which to define such dependencies. Elaborate typing of nodes encourages the incorporation of extensive domain knowledge.
Notation. The Mindwrapper API is easily readable and writeable by humans and computers. The user-developer writes a custom application by subclassing Mindwrapper classes. Hierarchies are composed through the assemble/add syntax: implementing an assemble() method that repeatedly calls self.add(). This leads to a declarative style of programming.
Database. Mindwrapper has a built-in OODBMS based on Python serialization (pickling). Unit locking provides a degree of support for concurrent users with no extra software on the server side. (This mechanism is unsuitable, however, for a large enterprise.) The database also allows transaction logging.
The name Mindwrapper is, of course, a pun, playing two metaphors against each other: the image of wrapping your mind around a difficult topic and the notion of creating software wrappers for conceptual objects.
The following documents are preliminary.
|
Mindwrapper is licensed under the GNU General Public License (GPL). For rationale and further discussion see the separate Prism licensing page.
Current development:
(2004-10-25) Prism: version 0.1.1.0.
(2004-11-06) Mindwrapper: version 0.3.4.2.
(2005-07-25) Mindwrapper: version 0.3.4.3. The primary work right now is testing the MwODB.
(2005-09-01) Mindwrapper: version 0.5.0.5. Much simpler inheritance structure and better API.
The Mindwrapper graphic at the top of the page is courtesy of Carmen Kay Anslow (carmylita). The original graphic, from her "Prism Fractals" collection, is entitled "Mind Warp" (modified and used with permission).
|
|