Re: [Pharo-users] Understanding edge connections and tree layout (it was Re: Visualizing a repository tree)

2015-06-20 Thread Alexandre Bergel
Hi Offray,

The problem is rather easy to solve. Consider this script:

-=-=-=-=-=-=-=-=-=-=-=-=
timeline := FossilTimeline new.
timeline importFromUrl:  
'http://mutabit.com/deltas/repos.fossil/piamed/libro/doc/tip/Libro/timeline-buscador.json'.


Visualization
view := RTMondrian new.
view nodes: timeline commits.
view edges
connectFrom: #parents.
view layout tree.
view.
-=-=-=-=-=-=-=-=-=-=-=-=

Apparently, each fossil commit has a parent. The parent could be nil (which is 
okay).
Why do you call the variable “parents” and not “parent” ?

Cheers,
Alexandre

 On Jun 19, 2015, at 9:41 AM, Offray Vladimir Luna Cárdenas 
 off...@riseup.net wrote:
 
 Alexandre,
 
 Could you please run this:
 
 ~
 Adapted from: https://vimeo.com/116886609;
 | view timeline |
 
 Loading package for working with fossil
 Integration with external tools
 Gofer new 
 smalltalkhubUser: 'Offray' project: 'Grafoscopio';
 package: 'Grafoscopio-ExternalTools';
 load.
 
 Extracting data
 timeline := FossilTimeline new.
 timeline importFromUrl:  
 'http://mutabit.com/deltas/repos.fossil/piamed/libro/doc/tip/Libro/timeline-buscador.json'.
 
 Visualization
 view := RTMondrian new.
 view nodes: timeline commits.
 view edges
 connectFrom: [#parents first].
 view layout tree.
 view.
 (timeline commits at: 1) parents first
 ~
 
 At the end you will get a set of squares visualized like this ones:
 
 jcjdcjje..png
 ^Up Graphic 1: Trying to understand edges.
 
 These squares are representations of FossilCommits objects imported from a 
 Json file, and the connectFrom: [#parents first] is the line I'm having 
 problems with. #parents first is the message I send to each node to know 
 its parents in that very collection of commits, so I imagined that if I put 
 that as the block argument for connectFrom I would get a nice tree, similar 
 to the graphic 2 below. I don't get what's happening here or what I'm missing.
 
 cfbfiagc..png
 ^ Up Graphic 2: A nicely drawn mondrian tree layout for RTLayout.
 
 Any help on how to get tree like visualizations for this Fossil objects would 
 be greatly appreciated.
 
 Thanks,
 
 Offray
 
 Ps: Something was happening with ws.stfx.eu this morning at 7:00 (GMT -5) and 
 trying to publish a workspace gives a 500 error.
 
 
 On 16/06/15 16:08, Alexandre Bergel wrote:
 I am not really following. Hard to guess here.
 
 Can you make the image accessible for me? I can then have a closer look at 
 it.
 
 Alexandre
 
 
 
 On Jun 15, 2015, at 3:18 PM, Offray Vladimir Luna Cárdenas 
 off...@riseup.net
  wrote:
 
 Hi all. Is me again :),
 
 I have being fighting all this morning trying to bet a better understanding 
 of edge connections and tree layouts. I'm making some progress, but still I 
 don't grasp it. At [1] you can find my starting example. So far, so good, 
 so I created my own variation for my own data at [2]. My main issue is the 
 #connectFrom message argument. If you uncomment the last line of [1] you 
 will see that sending the #superclass message gives me an object that is of 
 the same kind that the ones have been added to the view previously and I 
 imagine that the reason they can be connected in a tree. With the example 
 at [2] the message [#parents first] gives me a fossil commit object, but if 
 I ran the code, the nodes are unconnected. What I'm missing?
 
 [1] 
 http://ws.stfx.eu/DK3VNXBVAHXF
 
 [2] 
 http://ws.stfx.eu/DHF4VIR8TSPC
 
 
 Thanks,
 
 Offray
 
 On 15/06/15 06:47, Offray Vladimir Luna Cárdenas wrote:
 
 Hi Peter,
 
 Thanks for your quick answer. I was pretty curious about trying to 
 implement some of this ideas, but only until today I had the proper time 
 to do it. I ran your code and now I'm trying to translate the ideas on it 
 to my problem: Drawing a tree for the story of a fossil repository. 
 
 First, using the procedure at [1] I was able to export a fossil commit 
 repo history as Json and by running the script at [2] I was able to get a 
 small set of dots, which represent dictionaries with all commit data, 
 including ancestors for each node, like the attached screenshot shows. In 
 the video at [3] at 1:06 min, seems that lays the key for my 
 visualization, but for that I need to create a fossil commit object that 
 can understand the #ancestor message. Because I already have them as 
 dictionaries thanks to NeoJson, seems that I'm really close to get the 
 visualization I'm looking for. I hope to work on it this morning and 
 return to the list with data visualizations or more questions.
 
 
 [1] 
 http://stackoverflow.com/questions/30577090/how-to-export-fossil-scm-timeline-to-another-format/30584926#30584926
 
 [2] 
 http://ws.stfx.eu/A5C8JJMA2HUK
 
 [3] 
 https://vimeo.com/116886609
 
 
 Cheers,
 
 Offray
 
 
 
 On 02/06/15 05:09, Peter Uhnák wrote:
 
 HI Offray,
 
 I gave it a quick bash and come up with the following code. It's just a 
 prototype and could be greatly simplified.
 
 - MCVersionInfo ancestors for whatever reason 

Re: [Pharo-users] Understanding edge connections and tree layout (it was Re: Visualizing a repository tree)

2015-06-20 Thread Alexandre Bergel
Let me know if this works for you

Cheers,
Alexandre


 On Jun 20, 2015, at 2:46 PM, Alexandre Bergel alexandre.ber...@me.com wrote:
 
 Hi Offray,
 
 The problem is rather easy to solve. Consider this script:
 
 -=-=-=-=-=-=-=-=-=-=-=-=
 timeline := FossilTimeline new.
 timeline importFromUrl:  
 'http://mutabit.com/deltas/repos.fossil/piamed/libro/doc/tip/Libro/timeline-buscador.json'.
 
 
 Visualization
 view := RTMondrian new.
 view nodes: timeline commits.
 view edges
connectFrom: #parents.
 view layout tree.
 view.
 -=-=-=-=-=-=-=-=-=-=-=-=
 
 Apparently, each fossil commit has a parent. The parent could be nil (which 
 is okay).
 Why do you call the variable “parents” and not “parent” ?
 
 Cheers,
 Alexandre
 
 On Jun 19, 2015, at 9:41 AM, Offray Vladimir Luna Cárdenas 
 off...@riseup.net wrote:
 
 Alexandre,
 
 Could you please run this:
 
 ~
 Adapted from: https://vimeo.com/116886609;
 | view timeline |
 
 Loading package for working with fossil
 Integration with external tools
 Gofer new 
smalltalkhubUser: 'Offray' project: 'Grafoscopio';
package: 'Grafoscopio-ExternalTools';
load.
 
 Extracting data
 timeline := FossilTimeline new.
 timeline importFromUrl:  
 'http://mutabit.com/deltas/repos.fossil/piamed/libro/doc/tip/Libro/timeline-buscador.json'.
 
 Visualization
 view := RTMondrian new.
 view nodes: timeline commits.
 view edges
connectFrom: [#parents first].
 view layout tree.
 view.
 (timeline commits at: 1) parents first
 ~
 
 At the end you will get a set of squares visualized like this ones:
 
 jcjdcjje..png
 ^Up Graphic 1: Trying to understand edges.
 
 These squares are representations of FossilCommits objects imported from a 
 Json file, and the connectFrom: [#parents first] is the line I'm having 
 problems with. #parents first is the message I send to each node to know 
 its parents in that very collection of commits, so I imagined that if I put 
 that as the block argument for connectFrom I would get a nice tree, 
 similar to the graphic 2 below. I don't get what's happening here or what 
 I'm missing.
 
 cfbfiagc..png
 ^ Up Graphic 2: A nicely drawn mondrian tree layout for RTLayout.
 
 Any help on how to get tree like visualizations for this Fossil objects 
 would be greatly appreciated.
 
 Thanks,
 
 Offray
 
 Ps: Something was happening with ws.stfx.eu this morning at 7:00 (GMT -5) 
 and trying to publish a workspace gives a 500 error.
 
 
 On 16/06/15 16:08, Alexandre Bergel wrote:
 I am not really following. Hard to guess here.
 
 Can you make the image accessible for me? I can then have a closer look at 
 it.
 
 Alexandre
 
 
 
 On Jun 15, 2015, at 3:18 PM, Offray Vladimir Luna Cárdenas 
 off...@riseup.net
 wrote:
 
 Hi all. Is me again :),
 
 I have being fighting all this morning trying to bet a better 
 understanding of edge connections and tree layouts. I'm making some 
 progress, but still I don't grasp it. At [1] you can find my starting 
 example. So far, so good, so I created my own variation for my own data at 
 [2]. My main issue is the #connectFrom message argument. If you uncomment 
 the last line of [1] you will see that sending the #superclass message 
 gives me an object that is of the same kind that the ones have been added 
 to the view previously and I imagine that the reason they can be connected 
 in a tree. With the example at [2] the message [#parents first] gives me a 
 fossil commit object, but if I ran the code, the nodes are unconnected. 
 What I'm missing?
 
 [1] 
 http://ws.stfx.eu/DK3VNXBVAHXF
 
 [2] 
 http://ws.stfx.eu/DHF4VIR8TSPC
 
 
 Thanks,
 
 Offray
 
 On 15/06/15 06:47, Offray Vladimir Luna Cárdenas wrote:
 
 Hi Peter,
 
 Thanks for your quick answer. I was pretty curious about trying to 
 implement some of this ideas, but only until today I had the proper time 
 to do it. I ran your code and now I'm trying to translate the ideas on it 
 to my problem: Drawing a tree for the story of a fossil repository. 
 
 First, using the procedure at [1] I was able to export a fossil commit 
 repo history as Json and by running the script at [2] I was able to get a 
 small set of dots, which represent dictionaries with all commit data, 
 including ancestors for each node, like the attached screenshot shows. In 
 the video at [3] at 1:06 min, seems that lays the key for my 
 visualization, but for that I need to create a fossil commit object that 
 can understand the #ancestor message. Because I already have them as 
 dictionaries thanks to NeoJson, seems that I'm really close to get the 
 visualization I'm looking for. I hope to work on it this morning and 
 return to the list with data visualizations or more questions.
 
 
 [1] 
 http://stackoverflow.com/questions/30577090/how-to-export-fossil-scm-timeline-to-another-format/30584926#30584926
 
 [2] 
 http://ws.stfx.eu/A5C8JJMA2HUK
 
 [3] 
 https://vimeo.com/116886609
 
 
 Cheers,
 
 Offray
 
 
 
 On 02/06/15 05:09, Peter Uhnák wrote:
 
 HI Offray,
 
 I gave it a 

Re: [Pharo-users] Understanding edge connections and tree layout (it was Re: Visualizing a repository tree)

2015-06-20 Thread Alexandre Bergel
Hi 

I do not recommend to use Mondrian for doing what you need. Actually, I suggest 
to make your own layout. 
You may want to check the following code example:

-=-=-=-=-=-=-=-=-=
classes := RTShape withAllSubclasses.

oldestAge := (classes collect: #ageInDays) max.

v := RTView new.
v @ RTDraggableView.
classes doWithIndex: [ :c :index |
elements := RTEllipse new elementsOn: c methods.
v addAll: elements.
RTMetricNormalizer new
elements: elements;
normalizeX: #ageInDaysAsInteger min: 0 max: 200 minValue: 0 
maxValue: oldestAge.
elements translateBy: 0 @ (index * 10).
RTEdgeBuilder new
view: v;
linkElements: elements.
].
v
-=-=-=-=-=-=-=-=-=



I guess it is kind of close of what you need.

Cheers,
Alexandre


 On Jun 20, 2015, at 3:44 PM, Offray Vladimir Luna Cárdenas 
 off...@riseup.net wrote:
 
 Thanks Alexandre and Nicolai,
 
 Now with a modified version of the script at http://ws.stfx.eu/AOPPDKEGTVFG I 
 get the result below at the left, which has practically the same topology of 
 the original fossil timeline tree below at right. Now I would like to change 
 the edge length so it can convey commit date information (when commit 
 happens) and look even more similar. I will make some test with RTMultiLine 
 and orthoVertical shapes for edges, but any pointer to edge length variation 
 and node distance examples will be greatly appreciated. 
 
 Finally about why parents instead of parent I try to use the same terms 
 in the Json file export for the properties imported in the object. I imagine 
 that if a commit is a merge of several branches, it could have several 
 parents. I will test with more complicated trees to test if this case prompts.
 
 abjfehfd..pngjfbdfbaj..png 
 
 
 Cheers,
 
 Offray
 
 
 
 On 20/06/15 12:46, Alexandre Bergel wrote:
 Hi Offray,
 
 The problem is rather easy to solve. Consider this script:
 
 -=-=-=-=-=-=-=-=-=-=-=-=
 timeline := FossilTimeline new.
 timeline importFromUrl:  '
 http://mutabit.com/deltas/repos.fossil/piamed/libro/doc/tip/Libro/timeline-buscador.json
 '.
 
 
 Visualization
 view := RTMondrian new.
 view nodes: timeline commits.
 view edges
 connectFrom: #parents.
 view layout tree.
 view.
 -=-=-=-=-=-=-=-=-=-=-=-=
 
 Apparently, each fossil commit has a parent. The parent could be nil (which 
 is okay).
 Why do you call the variable “parents” and not “parent” ?
 
 Cheers,
 Alexandre
 
 
 On Jun 19, 2015, at 9:41 AM, Offray Vladimir Luna Cárdenas 
 off...@riseup.net
  wrote:
 
 Alexandre,
 
 Could you please run this:
 
 ~
 Adapted from: 
 https://vimeo.com/116886609
 
 | view timeline |
 
 Loading package for working with fossil
 Integration with external tools
 Gofer new 
 smalltalkhubUser: 'Offray' project: 'Grafoscopio';
 package: 'Grafoscopio-ExternalTools';
 load.
 
 Extracting data
 timeline := FossilTimeline new.
 timeline importFromUrl:  '
 http://mutabit.com/deltas/repos.fossil/piamed/libro/doc/tip/Libro/timeline-buscador.json
 '.
 
 Visualization
 view := RTMondrian new.
 view nodes: timeline commits.
 view edges
 connectFrom: [#parents first].
 view layout tree.
 view.
 (timeline commits at: 1) parents first
 ~
 
 At the end you will get a set of squares visualized like this ones:
 
 jcjdcjje..png
 ^Up Graphic 1: Trying to understand edges.
 
 These squares are representations of FossilCommits objects imported from a 
 Json file, and the connectFrom: [#parents first] is the line I'm having 
 problems with. #parents first is the message I send to each node to know 
 its parents in that very collection of commits, so I imagined that if I put 
 that as the block argument for connectFrom I would get a nice tree, 
 similar to the graphic 2 below. I don't get what's happening here or what 
 I'm missing.
 
 cfbfiagc..png
 ^ Up Graphic 2: A nicely drawn mondrian tree layout for RTLayout.
 
 Any help on how to get tree like visualizations for this Fossil objects 
 would be greatly appreciated.
 
 Thanks,
 
 Offray
 
 Ps: Something was happening with ws.stfx.eu this morning at 7:00 (GMT -5) 
 and trying to publish a workspace gives a 500 error.
 
 
 On 16/06/15 16:08, Alexandre Bergel wrote:
 
 I am not really following. Hard to guess here.
 
 Can you make the image accessible for me? I can then have a closer look at 
 it.
 
 Alexandre
 
 
 
 
 On Jun 15, 2015, at 3:18 PM, Offray Vladimir Luna Cárdenas 
 off...@riseup.net
 
  wrote:
 
 Hi all. Is me again :),
 
 I have being fighting all this morning trying to bet a better 
 understanding of edge connections and tree layouts. I'm making some 
 progress, but still I don't grasp it. At [1] you can find my starting 
 example. So far, so good, so I created my own variation for my own data 
 at [2]. My main issue is the #connectFrom message argument. If you 
 uncomment the last line of [1] you will see that sending the #superclass 
 message gives me an object that is of the 

Re: [Pharo-users] Understanding edge connections and tree layout (it was Re: Visualizing a repository tree)

2015-06-19 Thread Sven Van Caekenberghe

 On 19 Jun 2015, at 14:41, Offray Vladimir Luna Cárdenas off...@riseup.net 
 wrote:
 
 Ps: Something was happening with ws.stfx.eu this morning at 7:00 (GMT -5) and 
 trying to publish a workspace gives a 500 error.

Yes, there was a problem due to a recent upgrade to Pharo 4.

It should be fixed now.

Sven


Re: [Pharo-users] Understanding edge connections and tree layout (it was Re: Visualizing a repository tree)

2015-06-16 Thread Alexandre Bergel
I am not really following. Hard to guess here.

Can you make the image accessible for me? I can then have a closer look at it.

Alexandre


 On Jun 15, 2015, at 3:18 PM, Offray Vladimir Luna Cárdenas 
 off...@riseup.net wrote:
 
 Hi all. Is me again :),
 
 I have being fighting all this morning trying to bet a better understanding 
 of edge connections and tree layouts. I'm making some progress, but still I 
 don't grasp it. At [1] you can find my starting example. So far, so good, so 
 I created my own variation for my own data at [2]. My main issue is the 
 #connectFrom message argument. If you uncomment the last line of [1] you will 
 see that sending the #superclass message gives me an object that is of the 
 same kind that the ones have been added to the view previously and I imagine 
 that the reason they can be connected in a tree. With the example at [2] the 
 message [#parents first] gives me a fossil commit object, but if I ran the 
 code, the nodes are unconnected. What I'm missing?
 
 [1] http://ws.stfx.eu/DK3VNXBVAHXF
 [2] http://ws.stfx.eu/DHF4VIR8TSPC
 
 Thanks,
 
 Offray
 
 On 15/06/15 06:47, Offray Vladimir Luna Cárdenas wrote:
 Hi Peter,
 
 Thanks for your quick answer. I was pretty curious about trying to implement 
 some of this ideas, but only until today I had the proper time to do it. I 
 ran your code and now I'm trying to translate the ideas on it to my problem: 
 Drawing a tree for the story of a fossil repository. 
 
 First, using the procedure at [1] I was able to export a fossil commit repo 
 history as Json and by running the script at [2] I was able to get a small 
 set of dots, which represent dictionaries with all commit data, including 
 ancestors for each node, like the attached screenshot shows. In the video at 
 [3] at 1:06 min, seems that lays the key for my visualization, but for that 
 I need to create a fossil commit object that can understand the #ancestor 
 message. Because I already have them as dictionaries thanks to NeoJson, 
 seems that I'm really close to get the visualization I'm looking for. I hope 
 to work on it this morning and return to the list with data visualizations 
 or more questions.
 
 
 [1] 
 http://stackoverflow.com/questions/30577090/how-to-export-fossil-scm-timeline-to-another-format/30584926#30584926
 [2] http://ws.stfx.eu/A5C8JJMA2HUK
 [3] https://vimeo.com/116886609
 
 Cheers,
 
 Offray
 
 
 
 On 02/06/15 05:09, Peter Uhnák wrote:
 HI Offray,
 
 I gave it a quick bash and come up with the following code. It's just a 
 prototype and could be greatly simplified.
 
 - MCVersionInfo ancestors for whatever reason returned empty array down the 
 line (so its cut off at the end), but I didn't investigate the problem
 - edge building and possibly ancestor retrieval could be simplified with 
 builders; I think RTMondrian has methods for it but can't remember exactly 
 (agilevisualization mentioned RTGraphBuilder but that has been removed to 
 my knowledge)
 
 ~~~
 mc := MCSmalltalkhubRepository allInstances detect: [ :m | m project = 
 'Roassal2' ].
 
 root := mc versionInfoFromFileNamed: mc readableFileNames first.
 
 family := Set new.
 retriever := nil.
 retriever := [ :child |
  family add: child.
  child ancestors do: [ :a | retriever value: a ]
 ].
 retriever value: root.
 obs := family asGroup.
 
 v := RTView new.
 es := RTEllipse new size: 15; color: Color blue; elementsOn: obs.
 v addAll: es.
 
 edges := RTEdge
  buildEdgesFromObjects: obs
  from: #yourself
  toAll: #ancestors
  using: (RTArrowedLine new withShorterDistanceAttachPoint; color: Color red)
  scope: es.
 v addAll: edges.
 
 es @ RTDraggable.
 es @ (RTLabelled new text: [ :m | m nameWithout: 'Roassal2' ]).
 
 v @ RTDraggableView.
 v @ RTZoomableView.
 
 RTDominanceTreeLayout new
  verticalGap: 30;
  horizontalGap: 15;
  on: es.
 
 v open
 
 
 
 Mail Attachment.png
 
 Cheers,
 Peter
 ​
 
 On Tue, Jun 2, 2015 at 5:39 AM, Offray Vladimir Luna Cárdenas 
 off...@riseup.net wrote:
 Hi,
 
 On a closer detail, seems that [1] contains the starting point I'm looking 
 for. I'll keep you posted and of course any other approach will be listened.
 
 [1] 
 https://dl.dropboxusercontent.com/u/31543901/AgileVisualization/Roassal/0104-Roassal.html
 
 Cheers,
 
 Offray
 
 
 On 01/06/15 22:04, Offray Vladimir Luna Cárdenas wrote:
 Hi all,
 
 I had asked a similar question before with no much advances, but today I 
 made a discovery that can improve the things a lot: how to export timeline 
 data as structured JSON [1] (and of course this open the possibility to 
 work with it on Pharo). Now I would like to graph the data as a tree with 
 forks, merges and dates and authors of commits. I have seen chronia, but 
 seems overkill for this feature (and is integrated with CVS only).
 
 [1] 
 http://stackoverflow.com/questions/30577090/how-to-export-fossil-scm-timeline-to-another-format/30580043#30580043
 
 As usual, any pointer on how to get this going will be greatly