I agree to first discuss about the various use cases, synchronization strategies and data-sharing scenarios,
before dealing with the low-level of design like the data syntax or serialization format.
Once these needs will be clarified, I think it will be much easier for us to pickup the right tool and design the data model and protocol specifications,
because maybe, as Elias pointed out, existing libraries can help us in our task, and abstract low level things like serialization or communication issues.
Thus, I will start with a couple of questions :
- What kind of data scenario could we imagine ?
Mathieu talked about synchronization between different Gephi instances. How
- Do it imply real, or nearly real-time synchronization ?
- Should one end act as a client, the other as a server, or maybe both ?
- Could other programs (eg. a data-mining tool) communicate with Gephi too, through the same protocol ?
- Could these programs be written in different programming languages or paradigms ?
I take compatibility with other programs (not other instances of Gephi) for granted, since this is a very common need (ie. Gephi as a client of another data server).
From my point of view, this imply platform and langage independence, and hopefully existing libraries, formats and protocols solve this problem.
I can think about these examples, a bit "long-term plan", but well we need brainstorming :
- a Python script written in a few lines of code, written by a text-mining researcher, that streams data to Gephi (faster than exporting gexf, opening gexf, closing gexf, modifying code, re-exporting gexf..)
- a data-mining application in Java or C++, that delivers real-time graphs to a desktop Gephi, on the same machine or maybe on the network
- a database that answers graph queries through a web API
- a Gephi instance on a laptop of a student, that connect to a Gephi located on a classroom server, open a "shared workspace" and start tagging nodes, removing edges.. then hit from time to time a "sync" button. Or let the teacher do it's course and add realtime filters, with a "slave" mode (yes, maybe I go a bit far here, and would never have the usage for myself, compared to other suggestions
“All things are meaningless accidents, works of chance unless your marveling gaze, as it probes, connects and orders, makes them divine.” — Wilhelm Willms