Folks,
Background
I am building a TiddlyWiki journal wiki, and placing it on the network, via bob.exe so that I can access it on the LAN, Basically for Device independence.
I realised if its on the network it is available to more than one user as well, with Bob dealing with contention, I realised that at present there is only one tiddler that can be named by today's date, so I had the following Idea that I hope Jeremy and some of our genus developers could consider.
A Design pattern.
What if we had a mechanism available not unlike the shadow tiddler system, that on setting a namespace, (Eg; username or ID) the editing or creation of any tiddler by anyname was instead created in that name space, yet appears to be in the standard namespace?
For Example lets say we were in the "Tony" namespace, if I used standard wikitext and buttons I could create a tiddler for today "2019-12-03" however behind the scenes it was actually named as $:/Tony/2019-12-03 however as long as the Tony Name space is set it will appear as 2019-12-03 to all other tiddlers, wiki text and macros. These could be virtual tiddlers stored in a form of cache, a tiddler referenced, with no matching tiddler in the name space, would simply use the original tiddler. If a filter could be applied to include or exclude tiddler titles from the possibility of entering the names space it would help some smart designs. For example excluding a tiddler from a namespace would make the tiddler a shared tiddler (Effective on Bob)
Basically only when a user is in a given namespace, if they change a tiddler will it be saved into the current namespace, but delivered as if it were in the standard namespace.
If I then change the name space to "designer" then I am dealing with the standard names space until I edit something and it saves into the designer name space. However I can explore the $:/Tony namespace to see tiddlers edited and saved by the user of that name space. Here I may create the 2019-12-03 tiddler but its saved in $:/designer/2019-12-03
Of course another "filter" to define tiddlers in a given names space to be encrypted so unless designer has the encryption key "designer" can't read the $:/Tony tiddlers would be helpful, if for no other reason to provide a password mechanism.
Perhaps in this model the default namespace is "primary" - each namespace could optionally have a password. Unless one changes the namespace from the default you would no nothing is different. Could this be added as a plugin?
Advanced Speculation
- This solution could also be implemented on top of a single file wiki with local storage acting as the cache of tiddlers edited in a given namespace
- The ability to save to a seperate file by name space just tiddlers belonging to the current names space to disk would permit multiple users of one Wiki. We know that file will be in the current folder by the name of namespace, and reloaded when the namespace is set.
- Names spaces could be used for other separation of tiddler like projects or domain. When you change names space, you are now on a different layer. Basically you design a method for one project only then change the namespace to allow multiple projects. Changing namespace would save and purge the namespace, before loading the next or no namespace.
- Such namespace methods may allow only tiddlers belonging to the current names space or underlying wiki in memory, thus reducing memory demands.
- It would be possible to load all namespace files into original wiki and provide a way to review and commit the tiddlers to the main namespace.
- If this extended across all tiddlers including System Tiddlers we could have a collaborative design environment.
Does this break the The single File model?
Not at all, infact it allows more than one tiddlywiki to be stored in the one wiki. Even if the namespace overlay is stored separately for single file wikis to avoid contention, they can be imported into a single file without contention due to their namespace prefix.
Regards
Tony