Refactoring graphmind: a plan to mindmap life the universe and everything

The following is an outline of the new concepts and the architectural changes we want to introduce in the next version of Graphmind. If you are interested in the project please give us your feedback in the comments!
Concepts
Multi-user modes:
- Transactional updates: all updates are packaged in an object that gets communicated through a P2P connection with the other Grapmind clients that are viewing the same session. We've got a demo of an initial proof of concept on Peter's post.
- Master-slave model: a user can join a mindmapping session of another user, and see the changes that the first user is making. It is possible to request control of the session.
- Aggegration model: even though recommendations for possible children are made, every user makes their own mindmap. A master mindmap aggregates the results from all the users (this could work with an RDF triple store, using for example the storage model of MindRaider).
Editing modes:
- Mindmap mode: the root of the mindmap object is fixed, additional generations (levels of children) can be added.
- Dynamic graph mode: when focussing on a node, this becomes the new root of the mindmap. Focussing happens after any interaction with a node (e.g. click)
- Semi-Dynamic graph mode: when focussing on a node, this becomes the new root of the mindmap. Focussing happens after 1 specific event (e.g. double click on a node, context menu item)
Pheromone recruitment model:
In semi/dynamic mode, instead of fixing your thoughts into a single mindmap, we'll tune the UI so that it acts as a pheromone recruitment model (as seen from ants - thanks Mixel) to lay out the strongest graph trails (this could be done both on a site wide and an individual user level). A trail that is often followed gains in strength, effects of old trails fade using a radioactive decay function.
graphmind 2.0 consists of 5 pluggable components:
-
GUI layer
This is what users interact with to:
- browse mindmaps
- CRUD the objects represented by the mindmap nodes
-
Data-object manipulation layer
At the heart of the dataobject layer sits a .mm format XML object that is manipulated by this layer to reflect the user interaction in the GUI. This .mm file is only a means to an end: it is not necessarily the primary goal of graphmind to be a mindmap builder (in mindmap mode it could be however). Instead this object is used as a sort of cache, a temporary "in memory" data object that stores the current state of the system.
An object update request can be triggered by the GUI or the communication layer. When triggered a hook is called that makes it possible for plugins in both GUI and communication layer to manipulate the transaction (e.g. update the corresponding node in Drupal, change the node that will be inserted, etc.).
It is possible to make a copy of the .mm object and save it as a node so that it can later be used to return to the previous state of the graph.
-
Communication layer
This layer communicates with the different external data storage engines to implement the CRUD requests from Graphmind. In semi/dynamic mode all mindmap CRUD events are also reflected in a mindmap triple store on the Drupal site.
-
Server side communication helper module
Acts as a proxy for the communication layer, this makes it possible for developers to write communication layer add-ons in php, that will run on the server (easier to program, smaller Flex plugin for download).
-
Settings module (on Drupal)
Here it is possible to switch on and off specific graphmind plugins and to change the global settings. Certain settings can still be overwritten in a graphmind session from the graphmind user interface. This module also checks for Graphmind dependencies in Drupal (e.g. if set to semi/dynamic mode we need an RDF store).
Possible plugins:
- Auto-complete function (when creating a new node, when adding an attribute - scans known nodes and makes it easy to cross reference, use allowed values from selectlists)
- Visualization (replace freemind like UI with other displays Futures wheel, Graph browser)
- Settings
Next steps:
The development of Graphmind is funded from our service business. That means that development often has to happen on the weekend... If you are as excited about this project as us, then please consider sponsering one of the 4 development sprints. It will get you a mention on the Graphmind project page and it will speed up the development pace.
Time estimates:
- Backend and data structure (4 weeks FTE)
- Transaction scheme (2 weeks FTE)
- Concurrent editing (3 weeks FTE)
- Displays (2 weeks FTE)









The most attractive feature is that A trail that is often followed gains in strength, effects of old trails fade using a radioactive decay function.
Some interesting and powerful stuff you are describing here. I thought ver 1 looked good, but these additional functions planned for Ver 2 should really help with client collaboration.
You may already know about these items, but i just wanted to mention them to make sure in case they can be of use for code or ideas.
http://vue.tufts.edu/ - The Visual Understanding Environment (VUE) is an Open Source project based at Tufts University. The VUE project is focused on creating flexible tools for managing and integrating digital resources in support of teaching, learning and research. VUE provides a flexible visual environment for structuring, presenting, and sharing digital information.
ZendAMF & AMF-PHP
http://wadearnold.com/blog/flash/amfphp/the-future-of-amfphp
http://corlan.org/2008/09/24/flex-amf-php-and-zend-framework/
http://www.zend.com/en/company/news/press/zend-to-collaborate-with-adobe
Zend_Amf Component Proposal
http://framework.zend.com/wiki/display/ZFPROP/Zend_Amf+-+Wade+Arnold
Thank you for the comment, I hadn't heard of VUE yet and it's a great find! Especially seeing that it can work with ontologies, csv datasets, and even Zotero makes it a very interesting tool. They also have a lot of great UI ideas (e.g. the layers to be able to hide data and show data) that we could mirror in Graphmind. I installed VUE and I think I'll use it in the future for presentations...
The difference between VUE and Graphmind 2.0 however is that VUE is an interpretation tool that individuals can use to interpret data, built to allow users to manipulate a local copy of a dataset so that important concepts and relations can be accentuated.
With Graphmind 2.0 we would like to build a browsing tool that (where possible) allows for interaction with the data that is being browsed (so you could for example implement a plugin that allows you to do CRUD on a Drupal node) and that is able to for example use the users' browsing behavior to re-enforce organically the interpretation trails that different users make.
One of my dreams is to use this to build cross site graphmind maps in which I can add data (e.g. imagine a distributed ERP system that has a Graphmind interface in which you can add notes from a meeting to your CRM system...). So I could have one big graph with everything I'm working on and then just browse this graph and add nodes to it that then get stored in the right places in the system, so that I can still have the specific content type specific logic (e.g. notifications, re-contact alarms, etc.).
Remarkable effort!
What kind of messaging is this?
Adobe Stratus (RTMFP)?
or some flavor of FMS (RTMP, AMF)?
Hi Carlos,
It uses AMF-PHP because we need a centralized action-store. We've made some experiment with the Stratus server and liked that:) FMS would be also great to try, but we hadn't done it yet.
Regards,
Peter