Hi,
In a C file, when a global variable is first declared at the begining of the
file and then redeclared to affect it a value, CAnalyzer create two
differeent FAMIXGlobalVariables.
For example, in this program:
'
int a;
.....
int a = 2;
'
Two FAMIXGlobalVariable will be generated. I guess it should not be the case
?
I wrote a test for that. Should I open an issue ?
Dear List,
You will find below the health report of today. I removed two
important bottlenecks: node translations and computing absolute
bounds. Layouting nodes is more then 100 times faster!
You can now do a "view nodes: (1 to: 20000)" in an easel without
having the time to take a coffee!
Here is the comment of Mondrian-Alexandre_Bergel.352
-=-=-=-=-=-=-=-=-=-=-=-=
Major speed improvement:
- MOGraphElement>>absoluteBounds uses now a cache. This helped
speeding up Mondrian by 35%
- Make MORectangleShape>>display:on: use absoluteBounds instead of
absoluteBoundsFor:, which speeded the UI up of 14%
- optimization when translating nodes (MOGraphElement>>translatedBy:),
we gained a significant speedup when layouting nodes
-=-=-=-=-=-=-=-=-=-=-=-=
Report produced on 2010-01-23T18:17:13+00:00
Benchmark ManyNode (simple rendering of nodes) :
100 nodes => 3 ms
200 nodes => 5 ms
300 nodes => 6 ms
400 nodes => 7 ms
500 nodes => 9 ms
600 nodes => 10 ms
700 nodes => 12 ms
800 nodes => 14 ms
900 nodes => 15 ms
1000 nodes => 17 ms
1600 nodes => 28 ms
Benchmark ManyEdges (simple rendering of edges) :
10 edges => 2 ms
20 edges => 6 ms
30 edges => 12 ms
40 edges => 28 ms
50 edges => 48 ms
60 edges => 74 ms
70 edges => 115 ms
80 edges => 169 ms
90 edges => 254 ms
100 edges => 335 ms
200 edges => 4356 ms
300 edges => 35919 ms
55.54 % of methods are covered
Progress from last time: -0.1 %
Cheers,
Alexandre
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Hi all,
a quick poll: which selection of metrics do you find the most useful
when using a system complexity type visualisation, and what are your
goals when using the visualisation?
AspectMaps has this view as a part, but I am reluctant to include all
the options that are in the customisable system complexity view,
because this is a loooooooooot. A subset would be less intimidating to
the user ...
--
Johan Fabry
jfabry(a)dcc.uchile.cl - http://dcc.uchile.cl/~jfabry
PLEIAD Lab - Computer Science Department (DCC) - University of Chile
Hello,
A thing it would be cool to retrieve from C code for a function, is the
thing called 'Memory class'. It is the word prefixing a function
declaration:
- global
- local
- static
- extern
- register
I have looked at a xml file generated with srcml and a function is declared
like that:
<function><type><name>static</name> <name>void</name></type> ...
So it seems to be quite simple to retrieve, what do you think ?
I was thinking about how to make the table widget more customizable, for example being able to dynamically add a column to a table.
It just occurred to me that maybe it was even possible to do it without getting into the Morphic code, just using Glamour.
So be it. It works.... sort of.... It does not refresh the table layout but the finder shows it is there.
| finder |
finder := GLMFinder new.
finder table
title: 'Number';
display: [ :x | 1 to: x ];
act: [:p| p column: 'Double' evaluated: [ :each | (each * 2) asString ]. p update ]
entitled: 'add column';
actions: [ :list | self actionsFor: list ];
column: 'Even' evaluated: [ :each | each even asString ];
column: 'Odd' evaluated: [ :each | each odd asString ].
^ finder
In the end, I guess it's better to handle this in the Morphic layer, including having a button rather than a menu item to perform such a task.
--
Simon
When sending 'declaredType' (defined in FAMIXBehaviouralEntity) to a
CAFunction, it always return nil.
I have wrote a test for that but I have not the permission to commit in the
squeaksource repository. If someone could add me, that would be great.
Hi,
I try to do a simple visualization for a demo.
In a MOEasel, the scroll bar is really slow...
I use a pharodev-10505 and the last default version of Moose.
The code I execute is :
=====
"System complexity"
| classes |
classes := Collection withAllSubclasses.
view shape rectangle
width: [:cls | cls instVarNames size * 5];
height: [:cls | cls methods size ];
linearFillColor: [ :cls | cls methods inject: 0 into: [:sum :el | sum + el getSourceFromFile lineCount ]] within: classes.
view nodes: classes.
view edgesFrom: #superclass.
view treeLayout
====
Has someone an idea of the problem ?
Cheers,
---
Jannik Laval
---
Hello,
A thing I want to do when importing C code in moose , is to see if a
function is Private or Public.
After reading some documentations about C, a private function ( A function
that can't be used outside the module in which it's defined) is a function
declared with 'Static'. Am I wrong ?
If this is ok, the first thing is:
=> FAMIXFunction > isPublic just check if the function is called outside the
module. This does not really correspond to the description above.
the secong thing is:
=> How can I see if a function is declared with 'static' ?
For the moment I can have this information in the signatiure of the
function. But to retrieve that, I have to parse the string.
Perhaps this might be of interest to some of you.
Cheers,
Doru
> Call for Papers and Tool Demo Proposals - SCAM 2010
>
> Tenth IEEE International Working Conference
> on Source Code Analysis and Manipulation
>
> 12th-13th September 2010,
> Timisoara, Romania,
> Co-located with ICSM 2010
>
> http://www2010.ieee-scam.org/
>
> Sponsored by IEEE CS (pending)
> In cooperation with:
> - Semantic Designs Inc., Austin, TX, USA
> - Univ. "Politehnica" Timisoara, Romania
> - Centre for Research in Evolution, Search and Testing (CREST),
> King's College London, UK
>
> ----------------
> Conference aims:
> ----------------
> The aim of this working conference is to bring together researchers
> and
> practitioners working on theory, techniques and applications which
> concern analysis and/or manipulation of the source code of computer
> systems. While much attention in the wider software engineering
>
> community is properly directed towards other aspects of systems
> development and evolution, such as specification, design and
> requirements engineering, it is the source code that contains the only
> precise description of the behaviour of the system. The analysis and
>
> manipulation of source code thus remains a pressing concern.
>
> ---------
> Keynotes:
> ---------
> This year SCAM will feature two outstanding keynotes:
> - Mark Harman, King's College London, UK
> - Andreas Zeller, Saarland University, Germany
>
> ---------------------------------
> Covered topics and paper formats:
> ---------------------------------
> We welcome submission of papers that describe original and significant
> work in the field of source code analysis and manipulation. Topics of
> interest include, but are not limited to:
>
> * program transformation
> * abstract interpretation
> * program slicing
> * source level software metrics
> * decompilation
> * source level testing and verification
> * source level optimization
> * program comprehension
>
> Note that SCAM explicitly solicits results from any theoretical or
> technological domain that can be applied to these and similar topics.
>
> Submitted papers should not be longer than 10 pages. We also welcome
> submission of 2 page proposals for tool demonstrations expected to be
> performed live at the conference. All papers submitted should follow
> IEEE Computer Society Press Proceedings Author Guidelines. The
>
> papers should be submitted electronically via the conference web site.
> Submitted papers should not have been previously published, and should
> not have been concurrently submitted elsewhere.
>
> ------------
> Proceedings:
> ------------
> All accepted papers will appear in the proceedings which will be
> published by the IEEE Computer Society Press.
>
> --------------
> Special Issue:
> --------------
> Best papers from SCAM 2010 will be considered for revision, extension,
> and publication in a special issue of the Science of Computer
> Programming journal edited by Elsevier.
>
> ----------------
> Important Dates:
> ----------------
> Deadline for submission:
> Abstract due: 23rd April, 2010
> Full paper due: 30 April, 2010
> Notification: 7th June, 2010
> Working Conference: 12th-13th September 2010
>
> ------------------------
> Conference Organization:
> ------------------------
>
> General Chair
> Massimiliano Di Penta, Research Centre on Software Technology,
> Universita degli Studi del Sannio, Italy
>
>
> Program Co-Chairs
> Jurgen Vinju, Centrum Wiskunde & Informatica, The Netherlands
> Cristina Marinescu, Politehnica University of Timisoara, Romania
>
>
> Publicity Chair
> Zheng Li, CREST Centre, Department of Computer Science, King’s College
> London, UK
>
> Finance Chair
> Dave Binkley, Computer Science Department, Loyola College in
> Maryland, USA
>
> Tool Demonstration Chair
> Pascal Cuoq, CEA-Recherche Technologique, France
>
> Local Arrangements Chair
> Marius Minea, Politehnica University of Timisoara, Romania
>
>
>
> -----------------------------------------
> Steering Committee and Program Committee:
> -----------------------------------------
> See the conference Website
>
>
> --
> Jurgen Vinju
> - Centrum Wiskunde & Informatica - SEN1
> - INRIA Lille - ATEAMS
> - Universiteit van Amsterdam
>
> www: http://jurgen.vinju.org,http://www.cwi.nl, http://www.meta-environment.nl
> ,http://twitter.com/jurgenvinju
> skype: jurgen.vinju
>
--
www.tudorgirba.com
"Being happy is a matter of choice."
Hi,
I am very happy to announce that Alain Plantec produced an excellent
feature to the already rich MorphTreeWidget: you can limit the amount
of items visible in the list and you can expand it either
incrementally or altogether once you get to the bottom of the existing
items.
The idea is that when you have very long lists, you most of the time
do not want to see all details but just want some visual support for
what is in the list. This is at least what we have in Moose.
So, if you expect very long lists, you can always say in Glamour
something like:
a list
...
showOnly: 50
An example, can be seen in GLMBasicExamples>>treeWithAmountFiltering,
and of course in MoosePanel.
Cheers,
Doru
GlamorousHealth shows a significant improvement (aprox 2-3 times
faster):
Report produced on 2010-01-22T21:31:14+00:00
------------------
Opening Browser Benchmark:
15 openings => 2260 ms
------------------
------------------
Selecting Item in Browser Benchmark
100 size and selections => 3615 ms
200 size and selections => 3147 ms
300 size and selections => 3281 ms
400 size and selections => 3249 ms
500 size and selections => 4033 ms
600 size and selections => 3341 ms
700 size and selections => 3364 ms
800 size and selections => 3576 ms
900 size and selections => 3456 ms
1000 size and selections => 3548 ms
1500 size and selections => 3823 ms
2000 size and selections => 4018 ms
------------------
------------------
Selecting in finder item Benchmark
1 size and selections => 142 ms
5 size and selections => 787 ms
10 size and selections => 1631 ms
15 size and selections => 2458 ms
20 size and selections => 3344 ms
25 size and selections => 4206 ms
30 size and selections => 5169 ms
35 size and selections => 6329 ms
40 size and selections => 7226 ms
45 size and selections => 8078 ms
50 size and selections => 9629 ms
------------------
--
www.tudorgirba.com
"Don't give to get. Just give."
Hi all,
another case of DIY from me, so probably to be handled with care
(although it should be cleaner than the last bit of code I sent to the
list).
All my insistance on updating in the other thread is because,
fundamentally I wanted to allow a menu item/button/whatever in pane
#source to trigger the update in pane #dest. Note that 'browser
transmit to: #dest; from: #source' does not achieve this when in
#source you do an update. The one-liner below does. Place it in the
menu item/button/whatever of #source whenever you want to do the
update. (Assuming browser is the instance of GLMTabulator/
GLMFinder/... that you are using).
(browser paneNamed: #mpanel) presentations do: [:pres | pres update].
Doru, any chance of adding this to the API for browsers?
--
Johan Fabry
jfabry(a)dcc.uchile.cl - http://dcc.uchile.cl/~jfabry
PLEIAD Lab - Computer Science Department (DCC) - University of Chile
Hi,
I changed the rendering of System Complexity to be computed like in
the VW version with each hierarchy in a box and all the lonely classes
separately. I still have to add the label on top of each hierarchy.
You can also see a group of classes as selection within system
complexity. This is useful when you want to relate the result of a
query with the hierarchies.
In the process, I also changed a bit the toolbar of the MOBrowser. The
buttons still do not look nice because they need proper icons (and
because buttons just do not look nice in the watery theme), but I
added a menu with export to files.
Cheers,
Doru
--
www.tudorgirba.com
"Relationships are of two kinds: those we choose and those that
happen. They both matter."
Hi guys,
Is it a good idea to use pragmas to make generic menus in Mondrian ?
Another idea is to have a generic pragma which is shared between MooseFinder/Mondrian/Orion...
What are your opinion ?
Cheers
---
Jannik Laval
---
I got in contact with a person doing a lisp (that is generated to C) that is used to script
GCC.
I imagine that we could use it to get information out of GCC for C++, C, Ada
So I will try to get in contact and C.
Stef
Hi all,
I am using a from: transformed: at some point, and I just got the
transformation block being called with a nil value when the from pane
gets a selection of nothing. my showOn: block does not state allowNil,
so I did not expect this to happen. Is it expected that transformation
blocks always check for nil-ness of their arguments?
--
Johan Fabry
jfabry(a)dcc.uchile.cl - http://dcc.uchile.cl/~jfabry
PLEIAD Lab - Computer Science Department (DCC) - University of Chile
Hi Doru
How hard would it to implement this enhancement?
I see two paths, the dirty one and the clean one:
Dirty: make two panes stacked, one for the evaluator, the other a table widget with the history. The history is stored in the moose entity.
Clean: make a custom widget. Problem: where to store the history (if I browse to a parent entity and lose the finder pane of the entity, then I want my query history when coming back in the browser)
What do you think.
--
Simon
Hi all,
first of all: Thanks Doru for implementing the new features! They are
very useful to me.
Below is a screenshot of the AspectMaps UI that is using these
features. I have a bunch of questions related to this and I would be
very grateful if you could help me out. The code of the UI is also
below. Very big method, I know, but I did it this way to avoid
ambiguities in this mail.
Questions:
- How do I update the top mondrian panel using the new update
mechanism? I want it to redraw itself completely when some of the
buttons are pressed and on some of the menu actions of the aspects menu.
- The last 2 columns specify the metrics used in the polymetric view.
With a transmission I always get the last selections made, but I need
to know all selections made in that column so I can print it in the
selectionstatus text box. How is this possible? Also, if no selection
at all is made I would like to show that in the box (now the box is
removed).
- The last 3 columns actually do not use any input, but I specify them
with "transmit to: ; andShow:" Is there a cleaner way to do this?
The code is below:
----snip---
open
|browser colors colorizer|
"for aspect colors, both automatic assignment and manual selection in
menu"
colorizer := MOCircularColors new.
colors := OrderedCollection new.
1 to: 10 do: [:num| colors add: colorizer nextColor].
browser := GLMTabulator new.
browser title: 'AspectMaps Window'.
browser row: #mpanel span: 3.
browser row:[:r|
r column: #models span:2 ;
column: #aspectsel span: 2;
column: [:c| c row: #buttons span: 4. c row: #selectionstatus.]span:
2;
column: #hprop;
column: #wprop] span: 2.
browser transmit to: #mpanel; from: #models; andShow: [:a |
a mondrian painting: [:view :model|
model allNamespaces do: [:ns| ns currentShapeFor: view
withProperties: self].
view gridLayout.]].
browser transmit to: #models; andShow: [:a |
a stackedVerticallyArrangement.
a tree title: 'Available projects';
children: [:model | (SortedCollection sortBlock: [:x :y | x name <=
y name]) addAll: model allNamespaces asOrderedCollection; yourself ];
act: [:tree | tree selection inspect ] on: $i entitled: 'Inspect';
format: [:model | (model name) copyReplaceAll: '::' with:'.' ]].
browser transmit to: #aspectsel; from: #models transformed: [:model |
|topmodel|
topmodel := model mooseModel = MooseModel root ifTrue: [model]
ifFalse:[model mooseModel].
topmodel allAspects do:[:asp | asp color ifNil: [asp color:
colorizer nextColor]].
topmodel allAspects ];
andShow: [:a|
a stackedVerticallyArrangement.
a tree title: 'Aspects in Project';
format: [:asp | Text string: ((asp show ifTrue: ['(ON) '] ifFalse:
['(OFF) ']),
asp name) attribute: (TextColor color: asp color).];
act: [:tree | tree inspect ] on: $i entitled: 'Inspect (i)';
act: [:tree | |asp ann|
asp := tree selection. asp show: (asp show not).
tree update.] on: $t entitled: 'Toggle On/Off (t)';
actions: [:tree | colors collect: [:col | GLMAction new title: col
asString; action: [tree selection color: col. tree update]; category:
'Color']]].
browser transmit to: #buttons; andShow: [:a |
a actionList
act: [:entity | entity inspect] entitled: 'Vizualize';
act: [:entity | entity inspect] entitled: 'Max Zoom Out';
act: [:entity | entity inspect] entitled: 'Max Zoom In';
act: [:entity | entity inspect] entitled: 'Multiple Aspects Zoom';
act: [:entity | entity inspect] entitled: 'Zoom by Query'.
].
browser transmit to: #hprop; andShow: [:a |
a accordionArrangement.
a list title: 'Classes Height'; display: self cprops;
allowDeselection.
a list title: 'Aspects Height'; display: self aprops;
allowDeselection.
a list title: 'Methods Height'; display: self mprops;
allowDeselection.
].
browser transmit to: #wprop; andShow: [:a |
a accordionArrangement.
a list title: 'Classes Width'; display: self cprops; allowDeselection.
a list title: 'Aspects Width'; display: self aprops; allowDeselection.
a list title: 'Methods Width'; display: self mprops; allowDeselection.
].
browser transmit to: #selectionstatus; from: #hprop; from: #wprop;
andShow: [:a |
a text display: [:x :y| x asString , ' ', y asString]; allowNil].
browser openOn: MooseModel root allModels asOrderedCollection
----snip---
--
Johan Fabry
jfabry(a)dcc.uchile.cl - http://dcc.uchile.cl/~jfabry
PLEIAD Lab - Computer Science Department (DCC) - University of Chile
Hi,
I am happy to announce a new feature in Glamour in the form of the
Accumulator browser. This browser is an implicit one that just takes
the input entity and creates a new pane for it. It is called an
Accumulator, because it accumulates panes as you provide a new input.
These panes are then displayed as tabs.
A complementary feature is in a new way bundle transmissions are
passed around. You can pass it like before with andShow:, or you can
do it with andShowWithoutOverride:. It's not a very nice name, but the
idea is that it only transmits the presentation if the same
presentations were not already found in the target pane.
Using Accumulator you can now emulate browsers that behave like the
Eclipse central pane. An example can be found here:
GLMBasicExamples new accumulator openOn: 42.
This feature is now also used in the MooseFinder and MoosePanel. If
you open the Panel and select a model, you open it in a new tab. From
the Finder, if you double click on an item in a list you get it in a
new tab.
I hope you like it.
Cheers,
Doru
--
www.tudorgirba.com
"The coherence of a trip is given by the clearness of the goal."
A significant slowdown may be noticed when compared with the previous
glamourous report (sent on October 23). Details at the end of the amil.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Report produced on 2010-01-16T15:19:06+00:00
------------------
Opening Browser Benchmark:
15 openings => 2620 ms
------------------
------------------
Selecting Item in Browser Benchmark
100 size and selections => 2569 ms
200 size and selections => 4359 ms
300 size and selections => 6912 ms
400 size and selections => 8298 ms
500 size and selections => 10414 ms
600 size and selections => 12462 ms
700 size and selections => 14019 ms
800 size and selections => 16123 ms
900 size and selections => 19234 ms
1000 size and selections => 19984 ms
1500 size and selections => 30812 ms
2000 size and selections => 45497 ms
------------------
------------------
Selecting in finder item Benchmark
1 size and selections => 166 ms
5 size and selections => 897 ms
10 size and selections => 1949 ms
15 size and selections => 2968 ms
20 size and selections => 4008 ms
25 size and selections => 5112 ms
30 size and selections => 11714 ms
35 size and selections => 7686 ms
40 size and selections => 8963 ms
45 size and selections => 10428 ms
50 size and selections => 12471 ms
------------------
50.66 % of methods are covered from unit tests
Progress from last time: +17.19 %
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
From the report generated on Oct 23, we had:
Selecting Item Benchmark:
2000 size and selections => 2729 ms
Selecting in finder item Benchmark:
50 size and selections => 1881 ms
The new version is one magnitude slower.
However, opening a browser is slightly faster. The first health report
indicated:
15 openings => 3622 ms
Cheers,
Alexandre
As the regular sanity check, here is the mondrian health report for
this month.
I created a squeaksource HealthReportProducer. I have in mind plenty
of improvements for it (e.g., check of architectural rules, speed
progress measurement). I will slowly work on this...
Edges got slower to render. I need to dive a bit into the recent
changes to understand why.
Report produced on 2010-01-16T14:49:26+00:00
Benchmark ManyNode (simple rendering of nodes) :
100 nodes => 15 ms
200 nodes => 53 ms
300 nodes => 113 ms
400 nodes => 201 ms
500 nodes => 345 ms
600 nodes => 457 ms
700 nodes => 760 ms
800 nodes => 812 ms
900 nodes => 1137 ms
1000 nodes => 1243 ms
1600 nodes => 3855 ms
Benchmark ManyEdges (simple rendering of edges) :
10 edges => 2 ms
20 edges => 7 ms
30 edges => 43 ms
40 edges => 33 ms
50 edges => 54 ms
60 edges => 139 ms
70 edges => 146 ms
80 edges => 196 ms
90 edges => 314 ms
100 edges => 385 ms
200 edges => 5565 ms
300 edges => 40862 ms
55.65 % of methods are covered by unit tests
Progress from last time: +0.57 %
Cheers,
Alexandre
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Hi,
The implementation of the Moose Finder from the Object>>inMoose
started to be way too large to, so I moved it into an own class
MooseFinder.
Cheers,
Doru
--
www.tudorgirba.com
"Not knowing how to do something is not an argument for how it cannot
be done."
What do you think of deleting old packages which are completely useless, even for historical purposes. Some are actually from early attempt to port Moose but we have moved on since.
A few examples:
Moose-Installer
Smart-Collections
Monticello
SLICE-*
Merlin (has its own project now)
TestWizard (now part of Merlin?)
MooseGlamourBrowser (early attempt)
Moose-UI (early attempt)
Moose-Test-PackageBlueprint (old, duplication)
PackageBlueprintOld
Moose-PackageBlueprint (deprecated)
Moose-NewBlueprint (deprecated)
Moose-PB* (deprecated)
Moose-NP* (deprecated)
Moose-LANTests (old stuff)
Moose-Importer-Tests (old stuff)
I dont want to delete some deprecated packages which still have a lot of versions, might be interesting for historical purposes.
Browsing the Moose repository from MC often feels sluggish : I suspect this is because of the high number of files. Maybe one day we should split between a Moose project and a Famix project.
--
Simon
Hi,
Glamour is in a usable state again.
The one thing is not working correctly is the update of the overall
browser from inside the browser. For example, the mechanism in the
MooseModel browseMeta to select a property and then trigger "Focus"
from the contextual menu does not update the properties pane again.
Things will continue to move in the next period, but it already looks
pretty much Ok. Here are a couple of major changes:
1. A pane now can control the rendering of multiple presentations
through a CompositePresentation. You can now have different
arrangements: tabbed, accordion or stacked. You can find an example at:
GLMBasicExamples new differentComposites openOn: (1 to: 100)
2. You can specify titles for a composite and this gets rendered as a
groupbox
3. New syntax. To control the composite I introduced a new syntax.
- "browser showOn: ; from: ; using: [ browser list]" -> "browser
transmit from: ; to: ; andShow: [ :a | a list ]"
- "browser sendTo: from:" -> "browser transmit from: ; to:"
4. Simple transmissions and bundle transmissions can have multiple
origins and can define transformations per origin port. For example
you can have:
browser transmit from: #one ; from: #two transformed: [:x | ...] ; to:
#three.
5. Presentations can now update using a basic mechanism (first
implemented by Jorge and Philipp). For example:
a list updateYourselfOn: SomeAnnouncement from: [:entity | some
announcer];
The only catch here is that the entity object should point to the
objects that gets changed. You can also force an update explicitly
from an action:
a list act: [:presentation | presentation update] entitled: 'some
action'.
6. When updating a presentation, it might be that the selection from
the old presentation does not make sense in the new context. To enable
a checking you can now specify that you want validation for each
change in the ports (in particular for selection). For example:
a list shouldValidate: true
7. Finder can now properly embed a browser. This is actually pretty
neat :)
8. Finder now remembers the title of the last active presentation and
it will favor this one in the new tab
Please have a look and let me know if you encounter problems.
Cheers,
Doru
--
www.tudorgirba.com
"The coherence of a trip is given by the clearness of the goal."
Hi Alex,
I am trying to debug the problem of embedding Mondrian in Glamour and
I have a question.
Why exactly does Mondrian need to know the window to update? Why is it
not enough to just know the Canvas morph?
Cheers,
Doru
--
www.tudorgirba.com
"Problem solving efficiency grows with the abstractness level of
problem understanding."
Hi,
I noticed that isPackage, isPrivate, isProtected were removed from
FAMIXNamedEntity in Famix-Core. It's true that perhaps these methods
should be in Famix-Extensions, but they should not be removed.
Also, isFinal was moved in Famix-Java. This is a Java specific,
because it has a meaning also for C++ programs where isFinal is
everything that is not explicitly defined as virtual.
Did I miss something?
In general, we have to be more careful with changes at such core
levels :)
Cheers,
Doru
--
www.tudorgirba.com
"One cannot do more than one can do."