Could this "multi-graph" structure be a mechanism to implement version 
control in Leo? As you know, the fundamental data structure for Git and 
other version control systems is also a DAG. If, in addition to the 
existing tree representing the document structure, there is another tree 
defining the evolution in time of the document/each node, then Leo would be 
able to track the whole history of a project.

This could be a good foundation for collaborative document edition (merging 
modifications on the same Leo document by multiple users), which would make 
Leo even more powerful as a distributed tool for knowledge base management. 

If the functionality can be implemented in such a way that the new "history 
tree" can be fully mapped on top of an existing version control system such 
as git (i.e. mapping each edge -representing the transition from a 
particular version of a node to a newer one- to individual blobs in git 
commits), then Leo could probably reuse many of the existing tools/concepts 
from version control systems: diff visualization, synchronization between 
users (i.e. pull requests, remotes), tree management, etc

Just my 2 cents
Jose

On Thursday, February 11, 2016 at 6:12:20 PM UTC-5, Edward K. Ream wrote:
>
> John Lunzer's recent remarks has triggered one of the biggest Aha's in 
> Leo's history, one that was totally unexpected until this afternoon.
>
> Leo's fundamental data structure is a tree of nodes.  More accurately, it 
> is a Directed Acyclic Graph or dag.  Links in such a graph can point "down" 
> the tree, but never up, so there are no cycles.  Leo's clones are well 
> defined just exactly because there are no cycles.  Given a node, we know 
> precisely *and* intuitively which nodes are descendants. Because of 
> clones, a node may have more than one parent.
>
> Here's the Aha.  Imagine this data structure as being linked with *black* 
> thread.  Now imagine another *completely independent* set of *red* 
> threads.  The only requirement is that the links defined by the red threads 
> must *also* be a tree/dag. That is, there is *absolutely no* necessary 
> relationship between the red and black threads.
>
> Now imagine that every Leo attribute creates its *own* sets of 
> links/threads.  *We have a new view for every attribute.* Let's call such 
> a data structure a *multi-threaded tree/dag*. Trees might actually be 
> enough, but I'm not sure so I'll refer to tree/dag (tree or dag). 
> *Important*: some nodes may not have any thread running them for some 
> colored threads (attributes).  That's just fine.
>
> Alas, the term "multi-threaded data structure" is commonly used for data 
> structures that can be accessed by independently running threads. That's 
> not at all what I am talking about.
>
> I am not aware of anything like this in graph theory. Could this be a 
> truly new idea?  I really have no idea.
>
> Of course, you could call the resulting structure a general graph, and 
> technically it is, but how the data structure will be used inside Leo is 
> *very 
> *different. Instead of a single, unintuitive mess, we have a collection 
> of easily traversed trees/dags. *We instantly have an arbitrary 
> dimensioned graph*! Each color creates a new dimension.  Of course, we 
> only *see* one dimension at a time, but attributes may be the 
> *composition* of other attributes (unions, intersections or other 
> relations), so this is no real restriction.
>
> And listen to this.  *It is astoundingly easy to create this multi-dag in 
> Leo*.  At present, each vnode has a parents list and a children list.  
> All we have to do is replace these two lists by dictionaries whose keys are 
> attributes and whose values are the parents or children lists for those 
> attributes.  Finally, we add Python properties shield the dictionary lookup 
> from the rest of Leo.  We are talking about maybe 50 lines of code! As far 
> as the rest of Leo is concerned, vnodes *still* have parents and children 
> lists.  The switcheroo happens totally invisibly, when the user wants to 
> see another view.  The attribute changes and that changes what the vnode 
> dictionary/properties "deliver" to the rest of Leo. 
>
> To recap: What we see depends only on the attribute that defines the 
> view.  This attribute determines what parents and children lists become 
> active.  So easy.  So very powerful.
>
> Each *current view* will show only the nodes with the given attribute. To 
> repeat, attributes can be composed of other attributes, so in effect each 
> view can be associated with an *arbitrary set* of attributes.  This is an 
> *astoundingly* general data structure.
>
> The real challenge lies in assigning different colored links to nodes. I'm 
> still trying to wrap my thoughts around all of this.
>
> As always with truly huge Ahas, it's already impossible to know exactly 
> what thoughts lead to it.  As soon as the Aha happened, the world changed 
> so much that the past becomes hard to reconstruct.  But for sure the 
> following factors were "in the air":
>
> 1. Most importantly, the consensus has been building among the usual 
> suspects that attributes are a more intuitive, and perhaps more powerful, 
> alternative to clones.
>
> 2. For the last year I have been trying to ignore the fact that sometimes 
> clones get in the way.  This was the meaning of today's remark that "I love 
> clones, I hate clones".
>
> 3. John's remark about attributes and hoists certainly triggered the 
> avalanche.
>
> *Notice*: multi-threaded tree/dags collapse a lot of behind-the scenes 
> complexity.  In particular, both hoists and chapters are a (mildly 
> successful) attempt to make clones do the work of attribute-based views. In 
> the new scheme, we simply re-thread nodes that we want to be part of the 
> new view.
>
> *And notice*: when we require that views be made of clones we can *not* 
> change any parent/child relationships.  But that constraint completely 
> disappears when we use attributes to define views.
>
> *Summary*
>
> This is one of the most momentous Aha's in Leo's history. It was 
> completely unexpected this morning. It is almost too easy to make it 
> happen.  I may do it this evening.
>
> There remain important user interface questions concerning how nodes get 
> assigned various colored threads, but I have faith that the result will be 
> truly amazing.
>
> This Aha will have a huge number of happy consequences.  Just for starters:
>
> 1. Searches can be limited to a single view (thread color).  If we don't 
> use clones in a view, each search will find a node at most once. This will 
> erase my biggest pet peeve about Leo!
>
> 2. Every view (attribute) can define/create its own set of parent/child 
> relationships, independently of all other views. Afaik, no other data 
> structure is this flexible while still remaining intuitive.
>
> 3. It will be *very easy* for attribute editors to show nodes having 
> those attributes in the most natural way *for that attribute* without 
> being constrained in any way by other organizations of the data.  Yes, this 
> is really just a restatement of 2, but it's different in practice.
>
> No way would this Aha have happened without the interesting conversations 
> that have taken place in the last few months.  Well done, all of us!
>
> Edward
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"leo-editor" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to leo-editor+unsubscr...@googlegroups.com.
To post to this group, send email to leo-editor@googlegroups.com.
Visit this group at https://groups.google.com/group/leo-editor.
For more options, visit https://groups.google.com/d/optout.

Reply via email to