Brainstorm screenshot

Screenshot of Brainstorm 0.1 running on Linux

This page is a discussion of ideas for a hopefully useful bit of software for building concept maps (bubble diagrams), which is currently at an early stage but available to download as a GPL'd, free, open-source software like the other programs released here. If you have comments, suggestions or offers of help with the development, please send them in by email.

The basic idea is of a brainstorming tool, kind of like a mind mapping tool, but more general than some current implementations and more specific than others. The intended purpose is for throwing ideas down onto the screen, much as one would doodle with a piece of paper drawing bubbles or clouds and relationships between them. Ideally the software would then be able to lay out the ideas in an easy-to-understand way and let you play with and mould the relationships.

Most important for this tool would be a fluid, plastic feel to the program, the ideas aren't fixed, they're floating on the screen and can respond immediately to being changed. It's possible that there's already a super fantastic tool to do this already, but I haven't seen one.

In the meantime, a screenshot of the very first release of Brainstorm, version 0.1, is shown on the right.

And you can find two youtube videos to demonstrate the basic functions as released:

Drawbacks of existing software

Mind-mapping software

One of the more popular free mind-mapping tools is called Freemind - it's really free (GPL), written in java and so runs on a variety of platforms including Windows, Mac and Linux. It's fairly easy to use and seems stable and solid, but it has some significant disadvantages in my opinion:

It's pleasantly interactive, and even offers collapsible branches, but it can feel a little restrictive on what you can represent.

Graph-drawing software

An extremely powerful and flexibile tool for graph-drawing is called Graphviz, again free and available for multiple platforms. It's already available in many linux distributions as standard, and it can make very nice pictures of complicated graphs. (By "graphs" of course I mean the mathematical idea of nodes (or labelled points) connected by lines, I don't mean the kind of line charts produced by spreadsheet programs).

So, as shown in the many nice screenshots, there are a huge variety of presentation types available, and the software can cope well with arranging both directed and undirected graphs, non-rooted graphs and multiple connections. It can even handle multiple node types and detailed colour specifications, and output to a number of formats. However, this powerful software also has disadvantages for the proposed brainstorming application:

The ideal solution

So this is how the ideal brainstorming application would work. Firstly, it would be point-and-click, so no syntax to remember. Secondly, you shouldn't have to enter any presentation information, which means no font sizes, and no positions. Node placement should be determined by the "springy pull" of the links between nodes, and the "repulsive push" between nodes which keeps them a sensible distance from each other. And all this pushing and pulling should be visible and fluid, in a kind of "world of goo" or "tumbling George W Bush" way. The whole thing should feel like it's made of rubber, flexible and spongey.

So you create your first node, give it a text, and it floats to the centre of the screen. You attach a second node to it, and the pair then settle down with one to the left of centre and the other to the right. The link pulls them together and the repulsion pushes them apart until they reach equilibrium (this is how graphviz already does it, but here they would be seen to wobble to a stop). When a third node is attached, you now have a line, so the node in the middle can be seen to be more important (having two connections instead of one). So its font size can be increased by a certain percentage as it's a more dominant concept than the other two. However, if another link is added between the non-connected nodes, you now have a triangle of three related concepts (something which freemind can't do), and because they now have equal importance again, the font sizes are adjusted to be equal again.

This font size parameter can be calculated using a kind of "page rank" algorithm, to not only account for the numbers of connections of a given node, but also the importance of the nodes it connects to. So you don't need to specify any sizes and hopefully the resulting sizes will reflect what you want anyway. Of course the overall zoom factor will depend on how many nodes you have on the graph, and then you can zoom in to see parts of the graph if you want.

The layout would work similar to that of graphviz but it should be (often) possible to avoid line intersections (lines crossing other lines) and ugly occlusions (lines crossing parts of other nodes). Obviously some graphs just can't be drawn without line crossings, but it should be possible to do a better job than graphviz can.

So, if you had a tool like that, you could just throw your ideas in, and draw the connections between them, and the graph would wobble to a beautiful appearance like the output of graphviz. But then you can keep adding, modifying, merging or splitting, moulding the graph as it takes shape (hopefully also becoming clear in your mind as it becomes clear on screen). It should be real fun to use. And then when it's ready you can save it (perhaps to some simple text or xml format), or export the picture to a nice vector rendering (like svg format).

Current Status

Brainstorm has now reached the point where you can load and save your storms (as xml), edit node labels, add and delete nodes, and add and delete connections. It's therefore at the point where you can actually use it to make and edit diagrams and export them as svg files. See the development page for more details on the prototypes and progress.

In order to gain feedback it has now been made available as a very tentative version 0.1 as a free (GPL'd) download. See the download page for more details.

Hopefully development will continue to improve and enhance the application, as I'm aware this is beginner python code. All feedback, whether criticism, suggestions or offers of help would be gratefully received by email.

Brainstorm // Development // Download // Dependencies