On 27 août 2010, at 14:37, Mariano Martinez Peck wrote:



On Mon, Aug 23, 2010 at 3:13 PM, Simon Denier <Simon.Denier@inria.fr> wrote:

On 23 août 2010, at 14:55, Mariano Martinez Peck wrote:

> Hi. I am using Distribution Maps where I analyze an snapshot, a particular moment of my image state. I would like to be able to compare it with another moment.
>
> For example, I analyze packages and see which classes have instances for evaluating something. Something like this:
>
> ^ (self onContainers: (self listOfCorePackagesNames
>         collect: [ :each | (PackageInfo named: each) ]) elements: #classes properties: [:element | element hasUsedInstances ] )
>             render
>             open.
>
> Then, I do something different (suppose I start a seaside app) and I would like to see the difference between both distribution maps. To easily compare and know which "new" classes where used by running seaside that were not used in the first scenario.
>
> Maybe just a simple solution is to take both DM and to make a 3th with them:  check each element...if in both it is the same...them I paint with a particular color. If they are different, each one keeps its original color.
>
> What do you think? is it doable?


Certainly yes


> is there someting done about this?

No :)

Notice that there are other visualizations to display history (check Doru)? Depending on the context, it might better suit or not.

Ok....where can I find such things? Doru ?


For a starter, take a look at:
http://www.moosetechnology.org/docs/hismo

(I think we still need to re-implement some Hismo viz in Pharo Moose)



 
You have to try to see by yourself. But, DM with a diff sounds easy and good enough.


I did a first implemenation (no more than 3 hours). Basically it extends DistributionMap and implements the message onDM1: aDistributionMao DM2: anotherDistributionMap

So you can do something like this:

    | dm1 dm2 |
   
    UnusedObjectDiscoverer current startDiscovery.
    UnusedObjectDiscoverer current stopDiscoveryAndGetStadistics.
   
    dm1 := (self onContainers: (self listOfCorePackagesNamesWithoutTests
        collect: [ :each | (PackageInfo named: each) ]) elements: #classes properties: [:element | element propertyHasUsedInstances] ).
       
    UnusedObjectDiscoverer current startDiscovery.
    Object browse.
    SystemNavigation default browseAllImplementorsOf: #printOn:.
    SystemNavigation default allSendersOf: #printOn:.
    UnusedObjectDiscoverer current stopDiscoveryAndGetStadistics.
   
    dm2 := (self onContainers: (self listOfCorePackagesNamesWithoutTests
        collect: [ :each | (PackageInfo named: each) ]) elements: #classes properties: [:element | element propertyHasUsedInstances] ).
   
    (DistributionMapComparator onDM1: dm1 DM2: dm2) render open



For those elements where the property is different, I then set the "Different" property. Look the attached screenshots.

However, I don't like very much this solution because I loose the original and the modified properties, and just put another one (Different).

any idea how to improve this?


So in your comparator you don't have 2 properties anymore, but 4:
- unused
- used in the first session but not in the second
- unused in the first but used in the second
- used in both sessions

So you get 4 colors.

But in the long term, I guess you want to add more sessions, you will need more properties and this will get exponential.

So we will need to find a more scalable solution: either using color scale ( I can think of something where period = color, and age = intensity, could be fun, could also be a mess).

Or probably the easiest scalable solution will be to use a timeline layout, which would give a better impression of the history. I think that Mircea recently added such a layout in Mondrian. Mircea, can you give a small sample script? How to use MOHorizontalDominanceTreeWithTimelineLayout?

We can discuss that when you come.


But first, try to take a quick look at Doru's work on history models, metrics, and viz, to figure out what *you* want to do with such visualizations.


--
 Simon