Hi Alex,
In Eyesee, we have the concept of composite diagrams i.e. you can have
multiple charts in the same diagram with individual y axes (see attached
screenshot). This is a handy concept because not only you could have two
charts on the same diagram but each chart has its own axis. For comparing
disparate values, this is convenient because one does not need to think
about normalizing Y values of charts to the same scale. One example could
be showing trends of software metrics over time.
I saw that you ported more code from Charter to Grapher so I am having a
look at the examples. Is it possible to have composite chart diagrams with
Grapher? Do you plan to add this feature?
Here is a exemplary script that illustrates the need for composite diagrams:
| grapher minDate ds random dates grapherBlock|
dates := (Array with: Date today with: Date yesterday with: Date tomorrow)
collect: #asDateAndTime.
minDate := dates min.
random := Random seed: 10.
grapher := RTGrapherBuilder new
extent: 300 @ 200;
yourself.
grapherBlock := [:index |
ds := RTDataSet new.
ds interaction popup.
ds dotShape ellipse color: (Color red alpha: 0.5); size: 10.
ds points: dates sorted;
x: [ :aDate | aDate asUnixTime - minDate asUnixTime ];
connectColor: (Color random alpha: 0.5);
y: [ :d | (random nextInt: 100) * index].
grapher add: ds].
100 to: 103 do: grapherBlock.
1 to: 3 do: grapherBlock.
grapher axisConfiguration noDecimals.
grapher axisY.
grapher axisConfiguration
labelRotation: -30;
title: '';
numberOfLabels: dates size - 1;
labelConvertion: [ :v | (DateAndTime fromUnixTime: v + minDate asUnixTime)
asDate ] .
grapher axisX; build.
grapher view open
regards,
Usman
[image: Inline image 2]
[image: Inline image 3]
[image: Inline image 1]
Hi!
We had a wonderful week here in Cochabamba, Bolivia. Juan-Pablo, Juraj and I have taught Pharo and Moose during 5 days. Was pretty cool!
Here is a script that shows that one of the group was able to produce in just 3 days.
The figures analyze the content of my package-cache directory. It shows the number of commit per day, per hour, per author.
-=-=-=-=-=-=-=—=
myRepository := MCCacheRepository default.
myRepository allVersionNames.
packageNames := myRepository allVersionNames select: [ :e | 'Roassal*' match: e ].
"packageNames := myRepository allVersionNames. "
lista := packageNames collect: [ :packageName |
myRepository versionInfoFromVersionNamed: packageName. ].
autores := lista groupedBy: [ :e | e author ].
fechas := lista groupedBy: [ :e | e date ].
horas := lista groupedBy: [ :e | e time hour ].
c := RTComposer new.
v := c view.
c gap: 50.
popup := RTPopup text: [:assoc | assoc key asString, ', commits:', assoc value size asString].
elements := (RTEllipse elementsOn: fechas associations).
v addAll: elements @ popup.
builder := RTGlobalBuilder new.
builder
view: v;
normalizeX: [ :e | e key asTimeStamp asUnixTime ]
min: 0
max: 50000;
normalizeSize: [:e | e value size ] min: 10 max: 20;
normalizeColor: [:e | e value size ];
alphaColor: 0.3;
elementsToConsider: elements;
execute.
"We add a line from the left most element to the right most element"
v add: ((RTLine new color: Color lightGray) edgeFrom: v elements leftMostElement to: v elements rightMostElement).
"It make sense to only drag horizontally"
v @ RTHorizontalDraggableView.
c propagateHighlight.
c group: 'date'.
listTags := Array new: autores size.
autores doWithIndex: [ :each :i|
test := each groupedBy: [ :e | e date ].
elements := (RTEllipse elementsOn: test associations).
v addAll: elements @ popup.
builder
elementsToConsider: elements;
execute.
v add: ((RTLine new color: Color lightGray) edgeFrom: elements leftMostElement to: elements rightMostElement).
newTag := 'Author' asString, i asString.
listTags at: i put: newTag.
c propagateHighlight.
c group: newTag.
].
popup := RTPopup text: [:assoc | 'Hour: ' asString, assoc key asString, ', commits:', assoc value size asString].
elements := (RTEllipse elementsOn: horas associations).
v addAll: elements @ popup.
builder := RTGlobalBuilder new.
builder
view: v;
normalizeX: [ :e | e key ]
min: 0
max: 380;
normalizeSize: [:e | e value size ] min: 10 max: 20;
normalizeColor: [:e | e value size ];
alphaColor: 0.3;
elementsToConsider: elements;
execute.
v add: ((RTLine new color: Color lightGray) edgeFrom: elements leftMostElement to: elements rightMostElement).
c propagateHighlight.
c group: 'Hour'.
popup := RTPopup text: [:assoc | assoc author asString, ', ' , ' message size: ', assoc message size asString].
elements := (RTEllipse elementsOn: lista).
v addAll: elements @ popup.
builder := RTGlobalBuilder new.
builder
view: v;
normalizeX: [ :e | e timeStamp asUnixTime ]
min: 0
max: 50000;
normalizeSize: [ :e | e message size ] min: 10 max: 20;
normalizeColor: [ :e | e message size ];
alphaColor: 0.3;
elementsToConsider: elements;
execute.
v add: ((RTLine new color: Color lightGray) edgeFrom: elements leftMostElement to: elements rightMostElement).
c propagateHighlight.
c group: 'Comment'.
listTags doWithIndex: [ :e :i|
(i == 1)
ifTrue: [
c move: e below: 'date'.
last := e.
c nameGroup: 'date' as: 'History by Date'.
aAuthor := autores keys at: i.
c nameGroup: e as: 'History by: ' asString, aAuthor asString.
]
ifFalse: [
c move: e below: last.
last := e.
aAuthor := autores keys at: i.
c nameGroup: e as: 'History by: ' asString, aAuthor asString.
]
].
c move: 'Hour' below: last.
c nameGroup: 'Hour' as: 'History by Hour'.
c move: 'Comment' below: 'Hour'.
c nameGroup: 'Comment' as: 'History by Comment'.
"We add a small legend"
v canvas addFixedShape: (TRLabelShape new text: 'History of Changes').
TRConstraint stickAtTheBottomOfTheWindow: v canvas fixedShapes last.
^v
-=-=-=-=-=-=-=—=
Cheers,
Alexandre
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Hi, sorry for bothering, but I’m trying to understand what I can use to build cool UIs. And with GToolkit I’ve started to think about Glamour. I’ve read a chapter in Deep Into Pharo book, and all there is in Moose Book. And everywhere there is this idea of “flow”, that one parts of visualization, are representing something transmitted from other parts. There are a lot of cases when I want to do something that does not have this notion of a flow. For example I want to have a main view and then use some widgets to modify it, or I have two representations of the same model and want to keep them in sync. Should I use a “dynamic presentation” for that? Are there any real projects like that, to see how they are implemented?
Uko
I' trying to customize label in RTPieBuilder this is my sample.
b := RTPieBuilder new.
b interaction popup.
b view: v.
b objects: listByRegion associations.
b slice: [ :e | e value size ].
b globalRule distinctColor.
"b labelled."
b label: (RTLabel new text: 'label test').
b build.
I commented "b labelled", but when I try to set label with RTLabel I get
it error in trachelShape, there is a way to set a custom label?
Thanks to the advances of GT, I have my doubt about the usefulness of the easel.
Cheers,
Alexandre
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Hi,
first of all let me know where I can write questions about Woden (because I have not seen a lot of activity around it in any chat).
Woden and Roassal3D have a problem that when the 3D window is shown, text highlighting is not working. Usually it’s not a big deal, but Rubric writes white text on white background :). I think a problem like that was already in Roassal2 and maybe someone remembers how to solve that?
Uko
Hi everyone,
I think that during ESUG Woden was integrated into Toolkit in a way, what you can see a 3D visualization as one of the representations of the view. Is there any additional package that provides this functionality?
Uko
Thierry,
I am having difficulties re-generating the Ada parser
I take the Ada grammar, un-modified (so it should work) and when I try
to compile it (LALR(1)) with the SmaCCParserGenerator, I get at the
start of the gramar pane:
---
SmaCCParserError: Token not expected->#Definition extracted from old
style definition comments
<char_lit>: \'.\' ;
<char_string>: \"(\"\"|[^\n\"])*\" ;
[...]
---
Do you have an idea what is the problem and more importantly what is the
solution?
nicolas
Hi Alex,
I started to look into Charter and I would like to know which builder to
use in Roassal2 for drawing graphs because currently we
have RTGrapherBuilder and RTCharterBuilder. It looks to me as if they are
providing similar services but RTCharterBuilder is more up to date.
regards,
usman
In case you don't know yet:
http://d3js.org/
"*D3.js** is a JavaScript library for manipulating documents based on
data. D3 helps you bring data to life using HTML, SVG and CSS. D3’s
emphasis on web standards gives you the full capabilities of modern
browsers without tying yourself to a proprietary framework, combining
powerful visualization components and a data-driven approach to DOM
manipulation."*
Here nice examples:
https://github.com/mbostock/d3/wiki/Gallery
If not already known: There is a small problem with the Popup: The popup
window (background) is not
growing with the text length. You can check it with the
"RTMondrianExample exampleNeestingAndTitle".
BW,
Volkert
--
www.nivoba.de
"The more complex an object, the larger the investment in learning to use it, and the greater the resistance to abandon it.", NW
Hi!
It is frequent to see have guard in the style “self error: ‘Have you forget to add something?’”, to indicate the end user that an API is not properly used.
However, at the execution, it opens a debugger. I have the impression this is not what we want. We probably something more friendly than a full-fledged debugger.
No?
Cheers,
Alexandre
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Hello,
The truth is that I am not familiar with this code. I can hardly provide any justification about the result. I advice you to subscribe to the Moose mailing list (http://moosetechnology.org)
Alexandre
> Begin forwarded message:
>
> From: Bledar Aga <bledar.aga(a)students.unibe.ch>
> Subject: MalCyclesCoverage
> Date: November 27, 2014 at 1:09:45 PM GMT-4
> To: abergel(a)dcc.uchile.cl, alexandre.bergel(a)me.com
>
> Dear Prof. Bergel,
>
> I’m a master student at Bern University and I am working for my master thesis about dependency cycles.
>
> I am using your implementation of Tarjan algorithm MalCyclesCoverage (Moose) for detecting the cycles. I tried to understand your implementation but it is a bit hard to follow the execution and I can’t find the documentation.
>
> I want kindly to ask: Is there any reason that given a certain input it does not provide all the circuits of a strongly connected components?
>
> Removing the dependencies (edges) from a cyclic graph at the end I obtain the acyclic graph and this is what I want, but I need to understand how the single circuits are obtained.
>
> Example:
>
> Considering the following input:
>
> |tarjan|
> tarjan := MalCyclesCoverage new.
> tarjan nodes: #(1 2 3 4 5).
> tarjan edges: #((1 3) (3 1) (1 5) (5 1) (4 1) (2 1) (2 5) (5 2) (2 3) (3 2) (3 4) (5 4)) from:#first to:#second.
> tarjan run.
> self halt.
>
> It returns the following output: ((1 3 4)(1 5) (1 5)(2 3) (1 3) (1 5 4) (2 5)). In practice there are more circuits, example (1 3 2) (1 5 2 3)...?
>
> To have a clear idea of the input I attached the graph.
>
> Thank you very much in advance for your time.
>
> Best regards,
> Bledar Aga.
>
>
>
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Hi,
We are using PetitParser. We get an error that we don’t understand. So we try to use PetitParser debugger. We execute the parsing using the debugger mode. We switch to PetitParser debugger. When we click on the ‘proceed’ button, the error is raised but we are no more in the PetitParser debugger but in the classic one. So we have no way to know the incriminated rule. And when we execute step by step the parsing, it is the same problem, when the error arises, the debugger switch back to the normal one. However, the idea is to use the debugger when we get an error in order to understand from where it comes from. So it would be great that it remains in the PetitParser debugger despite the error.
Any idea how to remain in the PetitParser debugger? Anyone gets the same issue?
Thanks in advance for your help.
Jean-Christophe et Anne
Status: New
Owner: ----
Labels: Type-Defect Priority-Medium Component-Glamour
New issue 1099 by usman.bh...(a)gmail.com: update visible list items on
selection
https://code.google.com/p/moose-technology/issues/detail?id=1099
Tree/list presentation should display non-visible items when one of these
items is selected. To reproduce, execute the following script. Normally,
the of items should be expanded and 14 should be shown in the list on the
left because it is the current selection item. However, the list does not
change and 14 is not shown.
browser := GLMTabulator new.
browser column: #one; column: #two.
browser transmit to: #one; andShow: [:a |
a list showOnly: 10; display: [:number | (1 to: number)] ].
browser transmit to: #two; from: #one; andShow: [:a |
a roassal2
initializeView: [ RTMondrianViewBuilder new ];
painting: [:view :number |
view interaction when: TRMouseDoubleClick do: [:ann | ((browser
paneNamed: #one) port:#selection) value: ann element model ].
view shape label.
view nodes: (1 to: number + 5).
view edgesFrom: [:each | each // 2 ].
view treeLayout ]].
browser openOn: 100.
((browser paneNamed: #one) port: #selection) value: 14.
--
You received this message because this project is configured to send all
issue notifications to this address.
You may adjust your notification preferences at:
https://code.google.com/hosting/settings
Hello,
I just did my first specific visualization with the GT inspector and it is very cool / powerful.
As I don't know Glamour, I read the Glamour chapter in the book 'Deep into Pharo' and I tried to use #act:entitled: to display a menu for a table visualization like:
composite table
title: 'foo';
display: [ self associations ];
column: 'Key' evaluated: #key;
column: 'Value' evaluated: #value;
act: [ self halt ] entitled: 'new menu entry'
I cannot display the menu. Do I miss something?
Another question:
Is it possible to add a menu bar with buttons to such a visualization?
Thanks,
Christophe.
Hi everyone,
I am realising some reusable components for synectique and i faced a
strange behavior.
I created a little example to show it:
|tab|
tab := GLMTabulator new.
tab row: #test.
tab transmit to: #test; andShow: [ :p | p list onChangeOfPort: #aPort act:
[ :pre :input | input inspect ] ].
tab transmit from: #test; to: #test port: #aPort; transformation: [
:anything | 5 ].
tab openOn: (100 to: 150)
here i expect that when i click on an element of the list, i will inspect 5
but if you try, you will see that you inspect the interval 100 to: 150
--
*Guillaume Larcheveque*
Hi!
Pierre did an excellent work on having gradient lines.
-=-=-=-=-=-=-=-=-=-=
| v elem1 elem2 edge |
v := RTView new.
elem1 := (RTEllipse new color: (Color blue alpha:0.3); size:20) elementOn: 1.
elem2 := (RTEllipse new color: (Color red alpha:0.9); size:20) elementOn: 2.
elem2 translateBy: 300@0.
v add: elem1.
v add: elem2.
edge := RTEdge from:elem1 to:elem2.
v add: (edge + (RTGradientColoredLine new colors: (Array with: (elem1 color) with: (elem2 color)); precision: 100; gradientColorShape)).
v open
-=-=-=-=-=-=-=-=-=-=
-=-=-=-=-=-=-=-=-=-=
| v elem1 elem2 edge |
v := RTView new.
elem1 := (RTEllipse new color: (Color red alpha:0.3); size:20) elementOn: 1.
elem2 := (RTEllipse new color: (Color red alpha:0.9); size:20) elementOn: 2.
elem2 translateBy: 300@0.
v add: elem1.
v add: elem2.
edge := RTEdge from:elem1 to:elem2.
v add: (edge + (RTGradientColoredLine new colors: (Array with: (elem1 color) with: (elem2 color)); precision: 100; gradientColorShape)).
v open
-=-=-=-=-=-=-=-=-=-=
Feedback are welcomed!
Pierre & Alexandre
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Hi!
The last few days I have worked a lot on the composite shapes and nesting.
I would like you to report anomalies or bugs related to these issues.
Amazing to see the complexity of these things. Coping with all the subtleties is quite hard.
Cheers,
Alexandre
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
In the last version of MOOSE (#3266), there is a problem with Charter graphs.
When you try the Charter examples in the Roassal GT examples menu, the
image completely freeze ...
--
Serge Stinckwich
UCBN & UMI UMMISCO 209 (IRD/UPMC)
Every DSL ends up being Smalltalk
http://www.doesnotunderstand.org/
Status: New
Owner: ----
CC: alexandr...(a)gmail.com
Labels: Type-Defect Priority-High Component-Roassal
New issue 1084 by guillaum...(a)gmail.com: Impossible to load an image with
opened TRMorph
http://code.google.com/p/moose-technology/issues/detail?id=1084
When you save an image with a TRMorph opened; it is not possible to load
this image anymore.
You have to do on the command line: TRMorph allInstances do: #delete to be
able to open your image.
--
You received this message because this project is configured to send all
issue notifications to this address.
You may adjust your notification preferences at:
https://code.google.com/hosting/settings
Status: New
Owner: tu...(a)tudorgirba.com
Labels: Type-Defect Priority-Medium Component-Glamour Milestone-5.0
New issue 1046 by tu...(a)tudorgirba.com: TextPresentation should update
rendering when text port is populated
http://code.google.com/p/moose-technology/issues/detail?id=1046
This should update the rendering to '42':
composite := GLMCompositePresentation new with: [:a | a text ].
composite openOn: 'fourtytwo'.
composite first text: '42'.
--
You received this message because this project is configured to send all
issue notifications to this address.
You may adjust your notification preferences at:
https://code.google.com/hosting/settings
Status: New
Owner: ----
Labels: Type-Enhancement Priority-Medium Component-Glamour Milestone-5.0
New issue 981 by tu...(a)tudorgirba.com: Glamour should provide a means to
not transmit all Roassal clicks
http://code.google.com/p/moose-technology/issues/detail?id=981
Originally reported on stackoverflow:
http://stackoverflow.com/questions/18829093/make-edges-not-clickable-in-roa…
In the below example, you need to uncomment the two lines to work around
this issue. We need a better solution.
browser := GLMTabulator new.
browser column: #myRoassal ; column: #mySelection.
browser transmit
to: #myRoassal ;
andShow:
[ : aGLMPresentation |
aGLMPresentation roassal
painting:
[ : view : numbers | |edges|
view shape rectangle ; withText ; size: 30.
view nodes: numbers.
view interaction noPopup.
view edges: numbers from: [ :x | x / 2] to: [ :x | x ].
" view edges do: [ :edge | edge model:#doNotSelectMe ]."
view treeLayout.
].
].
browser transmit
to: #mySelection ;
from: #myRoassal ;
" when: [ :selection | selection ~= #doNotSelectMe ] ;"
andShow:
[ : aGLMPresentation |
aGLMPresentation text
display: [ : selectedItem | selectedItem asString ]
].
browser openOn: (1 to: 10).
--
You received this message because this project is configured to send all
issue notifications to this address.
You may adjust your notification preferences at:
https://code.google.com/hosting/settings
Updates:
Summary: All meta-entities should have a class comment
Comment #1 on issue 890 by tu...(a)tudorgirba.com: All meta-entities should
have a class comment
http://code.google.com/p/moose-technology/issues/detail?id=890
(No comment was entered for this change.)
Dear All,
i am using heavily Mondrian (ROMondrianViewBuilder) from Roassal1 in my
Tool/Project. Today i tried
to migrate my work to Roassal2 and found out, that the Interface of
RTMondrianViewBuilder has
changed a lot.
Is there a list what has changed/what was removed/what are the
alternatives/...?
Some examples
view := ROMondrianViewBuilder *titled*: 'asdasd'.
view shape rectangle *withText*: #shortName;
*textVerticalPadding*: -10; *fontSize*: 6.
view *addMenu*: 'Zoom in' callBack: [ :stack | … ].
Anther question:
How can i change the line thickness of a Mondrian Node? I find the
default size is to thick.
BW,
Volkert