Status: New
Owner: anquetil...(a)gmail.com
Labels: Type-Defect Priority-Medium Component-VerveineJ
New issue 813 by anquetil...(a)gmail.com: Java primitive type "int" created
as FamixType
http://code.google.com/p/moose-technology/issues/detail?id=813
Parsing some files in Eclipse creates a FamixType for the primitive type int
Hi all,
Could anyone point me in the right direction on how to create a progress
indicator for long running tasks? Are there any examples, implementation I
could look at?
I found *MooseCustomTask* and *SystemProgressBarMorph*. I'm not sure about
using the MooseCustomTask, because what I want to do is not directly
related to moose. Its just a generic task. Are there any other classes that
handle the display of progress bars?
Thanks,
Dennis
Hi all,
Whats the best way to get LOC for nested FAMIXNamespaces?
Lets say I'm looking at a FAMIX model of argouml. I used the "Infer
Namespace Parents Based on Names" command in the Moose Panel.
I have a namespace argouml (org.argouml), and a namespace profile
(org.argouml.profile).
Calling numberOfLinesOfCode on the second namespace gives me a correct
number of around 1000 (I assume because the "children" of profile are
actually FAMIXClasses). Calling it on the first one returns 0.
So what would be the best way to get LOC on parent namespaces like "org",
or "org.argouml"?
Also is this by design that LOC does not get propagated up in the hierarchy
or is it even a bug?
Cheers,
Dennis
Status: New
Owner: ----
Labels: Type-Defect Priority-Medium
New issue 812 by anquetil...(a)gmail.com: All FamixType are at classScope in
MooseChef
http://code.google.com/p/moose-technology/issues/detail?id=812
All FamixType are at classScope in MooseChef
This means for example that the Java primitive type "void" can be returned
by a mooseChef query:
xyz queryOutgoingDependencies atClassScope
there is an outgoing dependency to void, but void should not be at class
scope
need to change FAMIXType>>atClassScope and FAMIXClass>>atClassScope
Status: New
Owner: anquetil...(a)gmail.com
Labels: Type-Enhancement Priority-Medium Milestone-4.7
New issue 810 by anquetil...(a)gmail.com: Create virtual association
TypeDeclaration in MooseChef
http://code.google.com/p/moose-technology/issues/detail?id=810
Famix recognizes 4 types of associations (reference, access, inheritance,
invocation) and Moosechef was built upon these dependencies
(queryAllOutgoingReferences, ...)
but this misses some actual dependencies that are not expressed by
FamixAssociations like: return type of a method or type of a variable
Since we now have a nice general API to query dependencies, it would be
nicer if it were complete, ...
A possible solution would be to invent some new "virtual associations"
(TypeDeclaration) and create queries for this, ...
With The aid of Andre, we finished creating the TypeDeclaration virtual
association in MooseChef (see also
http://moose-dev.97923.n3.nabble.com/Several-modifications-to-MooseChef-tp3…).
We also created a queryIncoming/OutgoingDependencies that will gather
all dependencies from a model:
allAssociations (real association from Famix) + TypeDeclarations
(virtual association that is "hidden" like the type of a variable).
The MooseChef documentation should be updated accordingly (see "<added>"
markers for additional stuff):
---
** Primitive queries return associations
Primitive queries return a set of dependencies related to the receiver.
Such dependencies are represented by instances of FAMIXAssociation:
invocations, accesses, inheritances, and references.
<added>
MooseChef also recognizes an association that does not exists as such in
Famix: TypeDeclaration.
It exists only for statically typed languages and relates a variable
(FAMIXStructuralEntity) to its type, or a method to its return type.
<added/>
receiver queryAllIncomingInvocations
querySureIncomingInvocations
queryIncomingAccesses
queryIncomingReferences
queryIncomingInheritances
<added>
queryIncomingTypeDeclarations
<added/>
receiver queryAllOutgoingInvocations
querySureOutgoingInvocations
queryOutgoingAccesses
queryOutgoingReferences
queryOutgoingInheritances
<added>
queryOutgoingTypeDeclarations
<added/>
[...]
Some composite queries are also defined on top
static associations = accesses + references + inheritances
sure associations = static + sure invocations
all associations = static + invocations
<added>
dependencies = all associations + typeDeclaration
<added/>
---
There are still some additional hidden dependencies in Famix as
discussed in
http://moose-dev.97923.n3.nabble.com/MooseChef-hidden-dependencies-tp354895…
tests are green (in my image)
nicolas
Hi,
Just to clarify the situation. We have two parsers that are mature enough for large cases studies. They are both closed source:
- VerveineJ: is closed source and it is likely to gain a license that will allow "friends" to use it for free, or something in this direction. At the moment, the sources and the build are available for anyone (although the license is not yet specified). It is mainly built by Nicolas Anquetil (and I helped a bit).
- inFamix: is free to use in any context, but you have to agree with their license usage (so, no real automated download). It is a subset from the inFusion commercial platform. It also supports C/C++. It is built by www.intooitus.com and I helped them a bit, too.
For what they cover, neither is quite complete in the little details, but they are almost there. VerveineJ is slightly better in the coverage of Annotations and a couple of more details (like References). They both export about the same metrics.
I would be interested in working with someone to build a little comparison infrastructure: we take some source code, and we generate a simple diff report on the build server.
It would be important for this community to get a robust solution for Java. I worked quite long on getting both of these mature enough and in evolving FAMIX to support the new language constructs in Java (e.g., Generics and Annotations), and I would still be interested in continuing this enhancement. inFamix also offers C/C++ support, and there one of the major headaches was given by the type alias possibilities, but that is solved now both in FAMIX and in the parser.
>From my experience, the most tedious work in this area is to go through each case study and deal with all the little details not just at the parser level, but also at the meta-model level. We are getting close to a solid solution for Java, but we need to push for the extra mile.
Talking about the meta-model we need to rethink completely the navigation API and be based solely on MooseChef (and possibly Lift). I would be interested in getting people to work with me on this, as well.
Cheers,
Doru
--
www.tudorgirba.com
"Reasonable is what we are accustomed with."
Status: New
Owner: alexandr...(a)gmail.com
Labels: Type-Defect Priority-Medium Component-Roassal
New issue 808 by guillaum...(a)gmail.com: refresh a GLMRoassalPresentation
http://code.google.com/p/moose-technology/issues/detail?id=808
the update function on GLMRoassalPresentation don't call the painting
block. Consequently the visualization is not refreshed.
Hello,
I have implemented some Arki rules based on Smalllint. For now, there are
20 rules implemented. I also plan to implement more ones.
I am committing such rules into the project LintRules in the
packages OnSmalltalkModel-Report (Smalltalk-only rules),
OnMooseModel-Report (generic rules, ie, Smalltalk and Java)
and OnJavaModel-Report (Java-only rules, empty for now, but we can collect
some rule's idea from FindBugs for example).
Maybe I move them to the package OnMoose-Report, like that it can be
integrated to the moose-on-moose report, what do you think?
best regards,
--
Andre Hora
Hi,
Humane assessment is a method for making software engineering decisions. Assessing software systems to make decisions is a critical activity that needs to be approached explicitly during development. Humane assessment is made possible by the Moose analysis platform.
I am organizing a couple of courses in Bern that might be of interest to people on this list:
Humane Assessment Primer (August 17)
- This course is relevant for both managers and engineers. It covers assessment economics and the means to integrate humane assessment in the development process and in the organization
- http://www.humane-assessment.com/courses/humane-assessment-primer
Moose Apprentice (September 6-7)
- This course is relevant for engineers. This is an introductory hands-on course on using the Moose analysis platform for putting humane assessment into practice
- http://www.humane-assessment.com/courses/moose-apprentice
If you are interested in participating, please contact me directly.
Cheers,
Doru
--
www.tudorgirba.com
"In a world where everything is moving ever faster,
one might have better chances to win by moving slower."
Hi,
I see that there is a bit of an interest in the GTInspector, so here are some extra info about it. Beyond the things you can do out-of-the-box with it, the true power of the inspector comes from its extensibility. The idea is to offer each object an easy way to exhibit its own characteristics. This changes the way you can think of interacting with objects. Some more details here:
http://www.humane-assessment.com/blog/equal-browsing-opportunity-for-every-…
A new feature is the ability to edit code directly in the methods presentation. Combined with the possibility of executing a method in place and previewing the result, this opens the door for a prototype-like programming style.
The GTInspector is part of the Glamorous Toolkit. It is still in its infancy, but I think it shows that there is a great deal of possibilities to improve the IDE and to depart from the what we might think is a given. I am still looking for people interested in joining this effort (remember the idea of the ide taskforce). It would be great to get more people interested in improving this part of Pharo.
Cheers,
Doru
p.s. You can get the Glamorous Inspector in the following ways:
- download the Moose image:
http://www.moosetechnology.org/download/4.7
- download Pharo 1.4 (summer) with the Glamorous Inspector:
http://ci.moosetechnology.org/job/glamorous-toolkit-latest-dev/lastSuccessf…
- load it in Pharo 1.4:
Gofer new
squeaksource: 'glamoroust';
package: 'ConfigurationOfGlamoroust';
load.
((Smalltalk at: #ConfigurationOfGlamoroust) project version: #development) load: 'GT-Inspector'
--
www.tudorgirba.com
"Live like you mean it."
Hi!
Just to keep you informed.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
The field of software product lines is about managing variations in software configuration. The control software systems installed in a car typically reflect the different options one may want on a car. The space of configuration is often ridiculously large. The system of a BMW line has more different configurations than the amount of atoms the Universe is made of.
Software product lines are classically represented as a tree using a simple visual language. Whereas efficient at specification time, this language has several shortcomings, including poor ability to scale and ineffectiveness at understanding a large description.
An ECOSud project has been granted by both the Chilean and the French national research agencies. The project involves the University of Chile and the Polytech Engineering school in Sophia Antipolis.
The topic of the project is to explore new ways to understand and verify large software product lines specified using the Familiar language [*]. First, a parser has been written using PetitParser. Second, a metamodelisation of the product lines has been made with Moose. The parser creates from a Familiar program an instance of the meta-model we designed. Glamour then gives us a navigation browser for free. Roassal is then used to visually represent a model structure and the result of their associated metrics.
A software product line specification involves many dimensions, e.g., the definition of a feature, interaction between features, constraints between group of features. All those dimensions cannot be effectively simultaneously explored. Roassal supports a large range of interactive visualization mechanisms to make a product line exploration effective.
The ECOSud project has been initiated in June 2012. It enables the mobility of researchers and will span until the end of next year.
Stay tuned!
[*] Familiar: https://nyx.unice.fr/projects/familiar/
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Cheers,
Alexandre
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Hi,
I'm trying to define this transmission:
browser transmit to: #one port: #selection; from: #two; transformed: [:x |
x-2 ].
The problem is that #one and #two are not defined in the same browser.
Specifically, #two is defined into a browser that is added to the browser
in which #one is defined usign something like:
a custom: MyBrowser browser.
How can I define the transmission? Thanks in advance,
Cheers,
Santiago
--
Santiago Vidal
Last week Willem and I presented a workshop Visualizing Legacy,
using MOOSE, at SPA2012 in London. In a 150 minutes workshop
we showed how to use glamour and mondrian to visualize the
github repository data from 4 ruby projects and the code used
for these analysis and the workshop itself.
The exercises work toward the creation of a glamour browser with a mondrian
pane showing custom visualizations not achievable by more static tools like Sonar.
The answering of specific questions that arise during the analysis of the data
show the strengths of the MOOSE toolchain.
We started by showing some of the work Diego and I have done for
the conversion of the data of a cobol ERP system to a modern ERP system.
By creating (at least) one browser/visualization a day, we were able to make
the subject matter expert, a very busy senior executive of the company,
steer the conversion process to her satisfaction. By treating her as the
bottleneck, and making it as easy as possible for her to see where we were,
and what we still had to do/understand, she could effectively prioritize and
decide.
Then we asked the participants what they expected/wanted from visualizing
their legacy code. The answers were a mix of things that tools like Sonar
can easily provide, with very specific questions that need a programmable tool
like MOOSE.
As we expected, it took most of the about 14 participants quite a lot of effort and
time to get to grips with the smalltalk environment to work in. So much so,
that some asked for a separate smalltalk workshop to do before this one,
or a larger timeslot for this workshop. The few participants experienced with
Smalltalk had been using VW/VA and also had some problems finding their
way around. In the end, the participants who managed to just follow the
exercises achieved the goals without too much interventions needed.
Inspired by ProfStef, we build a custom glamour browser for the workshop.
The code can be found in the SpaTutorial project on ss3. (The ConfigurationOf…
is no Metacello)
http://ss3.gemstone.com/ss/SpaTutorial
It is split in a generic part, allowing you to create tutorials, and a specific
part for this workshop. We might want to extend it so the exercises can be
done entirely in the custom browser. That might help the smalltalk newbies.
Now the participants needed two class browsers in addition to the tutorial,
one to edit the exercise code, and one to look at the domain model.
We believe the learning curve can be flattened by extending the SpaTutorial
browser so it can save code, and extracting some methods so the tutorial browser
only shows the bits participants have to work on right now,
gradually expanding the scope as it progresses.
It uses the data collected for the SPA2011 great egg-race.
http://chatley.com/posts/06-20-2011/spa-great-egg-race/
Git commit data was collected by Michael Feathers from four ruby projects,
a.o. active_merchant and diaspora. After my holidays I'll put the data in a zip in
https://github.com/StephanEggermont/repodepot-ruby
For the 150 minute timeslot we focused on glamour and mondrian,
although we also prepared an eyesee exercise. Next time we might switch
the exercises around - mondrian looks more glamourous than glamour ;).
A longer version may also be in the works if we can run it somewhere.
It was only after the mondrian exercise that participants could start playing
with the data on their own. Participants indicated they associatied mondrian
more with visualization than glamour.
Stephan Eggermont & Willem van den Ende
Hi!
Just to let you know with the people of Nice we are currently modeling some software product line using Moose.
https://nyx.unice.fr/projects/familiar
It is fun :-)
Cheers,
Alexandre
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Hello,
I have this script. The problem is that when there are duplicate entities
on my canvas, edges are constructed for only one of them.
|myView entity otherEntities |
myView := ROMondrianViewBuilder new.
entity := 1.
otherEntities := #(2 2 3 3 4 4).
myView shape rectangle withoutBorder.
myView node: #entity forIt: [
myView nodes: otherEntities forEach: [:each |
myView shape label.
myView node: each name].
].
myView shape rectangle withoutBorder.
myView node: #otherEntities forIt: [
myView shape rectangle.
myView node: entity
].
myView shape line color: Color red; width: 1.
myView edges: otherEntities from: #yourself to: entity.
myView verticalLineLayout center.
myView open.
[image: Inline image 2]
The edges to all the entities can be drawn using this script which is a bit
inelegant.
((myView raw elementsSuchThat: [:each | each model name includesSubString:
'other']) first elements)
do: [:each | myView raw add: (myView buildEdgeFrom: each to: (myView
lookup: entity))].
[image: Inline image 3]
Question: how to deal with duplicate entities in Roassal? May be this
occurs seldom in reality?
regards,
Usman
A small script to display some elements.
|mainNode view title childNodes|
view := ROView new.
mainNode := (ROElement spriteOn: 'A Test Node') + ROBorder.
childNodes := (ROElement spritesOn: (1 to: 10)).
childNodes do: [:each | each + ROBorder].
*mainNode addAll: (ROGridLayout on: childNodes).*
view add: (ROVerticalLineLayout on: (mainNode)).
view open
Now, I would like to construct my ROGrid layout such that items per line
are 3. However, there is no method in ROGridLayout that allows setting the
line item count AND returns a collection of ROElements. So, I may propose
the following code to be added on ROGridLayout (class-side):
on: aCollection withLineItemsCount: aBlock
| myLayout |
myLayout := self new gapSize: 5; lineItemsCount: aBlock.
myLayout applyOn: aCollection.
^ aCollection
let me know if it makes sense.
regards,
Usman
Dear Pharoers and Smalltalkers
This mail is really important so read it carefully. Especially the last part of the mail is important for the
immediate future: we need your support and input. Read section ***Support*** at the end of this mail.
Context
=======
After taking into account feedback from companies and pharo users in different occasions and
discussing with the INRIA lawyers and the team in charge of the administrative aspect of the consoritum
here is the setup we finally want for the consortium. We will have two separated entities:
- one french law 1901 association for individuals and
- one consortium for institutions (companies, research groups, laboratories, universities...) managed by INRIA
We hope that in the long run the consortium will be fully managed by the association
but in the current bootstrap phase INRIA is a good solution.
==============
The Pharo Association
==============
The goal of the association is to promote Pharo. It will have its own web site.
Individual Memberships (managed by the Pharo Association)
----------------------
There are two individual memberships
- Individual Pharo Association Member: Yearly fee 40 Euros
- Golden Individual Pharo Association Member: Yearly fee 99 Euros
You will get
a nice goody,
reduction access to conferences,
reduction for training and access to teaching material,
be part of the pharo groups on social networks,
be part of the pharoAssociation-individual-members mailing-list,
get access and registered to the pharo association web site.
Others (managed by the Pharo Association)
----------------------
The association will be able to issues bills so you will be able to buy a Pharo distribution
when your organization cannot be a member, a sponsor or doing a donation to the Pharo consortium.
End of Pharo Association Description
===========================
The Pharo Consortium (managed by INRIA)
===========================
The goal of the consortium is to structure and build an umbrella to foster business around Pharo and to promote Pharo.
A company, user group, research group, team or institution can be a consortium member, not individual member.
There are three levels of fees and corresponding benefits. You decide your degree of support.
The annual fees are
- Bronze 1000 Euros
- Silver 2000 Euros
- Gold 4000 Euros
Consortium members main advantages are
----------------------------------------
Non individual members of the consortium get the following advantages:
- privileged access to the core development team via a specific mailing-list
pharo-core-team-for-members(a)lists.gforge.inria.fr
- influence priorities of the next development. The member will be able to propose
agenda points and items for the executive team. They will be requested one month in
advance before the committee meeting.
- get access to privileged core engineer time (to address pharo core problems)
- Bronze member gets
one day of engineering time
+ is automatically a diamond sponsor.
- Silver
+ two days of engineering time
+ one job description for job dashboard
+ is automatically a diamond sponsor..
- Gold four
+ 4 days of engineering time
+ multiple job description for job dashboard
+ is automatically a diamond sponsor.
- Training special prices and possibility to become pharo trainer
- Pharo consortium member can also ask and pay for extra support days at INRIA engineer prices (around 600 Euros) per day.
- Member can offer to their client access to the possibility to pay for extra support days at INRIA engineer prices (around 600 Euros) per day.
- The core team can provide contact with experts for certain areas of development.
Pharo Consortium Gouvernance: steering committee
----------------------------------------
The consortium will be managed as follows: There will be a steering committee and an Executive Team.
* A steering committee is composed of one representative of each member (except individuals).
* The chairman of this committee will be Inria
* Steering Committee Role :
- The Steering Committee follows the execution of the PHARO R&D Team
- It validates and gives input about the task list of the Executive Team.
- It can propose members of the executive team.
- It prepares, organizes conferences, seminars or other animations to promote PHARO and have new members
- It revises the annual fee
* Decisions taking: after consultation and collect of representative member points of views, Inria takes the final decision.
* The steering committee will communicate via a private mailing-list. It may meet physical once a year.
* An agenda to reach conclusion will be established by Inria on proposals of the members (the members will be queried a month in advance).
Technical Executive Committee (akaR&D task)
----------------------------------------
* The Executive Team is composed of members proposed by the steering board and RMOD Team
* Its roles is to
* Study, analyze and validate external contributions for PHARO
* Report to the steering committee
* Present a task list to the steering committee.
* Propose, schedule and implement tasks in conformance with the tasks list.
* Coordinate the release Pharo and its VMs
Pharo consortium Sponsoring
---------------------------
Orthogonally to memberships, an entity can be a sponsor of the consortium without being a pharo consortium member.
Pharo consortium are de factor platinium sponsor. Sponsors will get their logos name exposed to the consortium web site.
There are two kinds of sponsors:
- normal 500 Euros
- diamond 1000 Euros
Job board
---------
Non consortium member companies will be able to pay a fee (1000 Euros) to post job offers to the job board.
End of Pharo Consortium Description
=====================
*** Support and Answer needed***
=====================
To be able to pay an engineer by the consortium, INRIA needs to make projection, build budget, pay attention to visa
and other important administrative tasks. To deal with the risk that the consortium may not collect enough to pay a full salary
we are considering to ask INRIA to help us financially. To do so we have to give some concrete figures to
INRIA and motivate our request. In addition, our team (RMOD) on its own budget will try to compensate by allocating extra resources
However, this will be only a one shot. In addition, some of our team members have been approached by google to work on chrome and dart
Virtual Machines. So if we really get a future we should build it now.
Many of you told us that they want to support the consortium, now we need to know what would be amount of membership, sponsoring
you could give. So please read carefully this mail and send us a mail at stephane.ducasse(a)inria.fr with the same subject than this one.
We will collect the information and build a case to present to INRIA.
Thanks in advance for Pharo and for the future that we are building together.
The RMOD team and the Pharo board
Hi guys
I would like to show in the magritte chapter I'm revisiting a bit more meat.
I'm playing with magritte 30 and I would like to know if there is a way to save objects based on their magritte description.
Stef
I have to rebuild a visualization create with Roassal.
I try this function: ((browser paneNamed: #visu) presentations at:3)
update.
It send update on the right GLMRoassalPresentation but it never call the
painting block used to build my visualization.
changeProgramRoot
moduleDependencyGraphRoot := self chooseProgramRoot.
((browser paneNamed: #visu) presentations at:3) update.
moduleDependencyGraph: composite
composite roassal
title: 'Program Dependency Graph';
titleIcon: MooseIcons mooseSystemComplexity;
painting: [ :view | self renderModuleDependencyGraph: view];
act: [self changeProgramRoot. composite roassal view raw
signalUpdate] entitled: 'Program Name'.
The act block is called but not the painting block after the update.
I look at the Roassal examples but don't find a solution for my problem.
What is the way to rebuild a visualization?
--
*Guillaume Larcheveque*
I have implemented a simple preprocessor that can be combined in any
possible way with petitparser.
You can get it on executing the following script (requires a recent version
of Petitparser):
Gofer new
squeaksource3: 'PetitPreprocessor';
package: 'PetitPreprocessor';
load
It transforms any matching regex into a provided string.
example (preprocessor removes T):
'Foo' asParser preProcess: ('T' asRegex) into: ''
I successfully parsed a procedural language with this preprocessor. Because
of the column width limitation in the parsed language, the parser could
encounter a carriage return at any position, followed by the line number
(it's a really old language), then a quote followed by the rest of the
statement. So I used a regular expression to detect these bizarre
constructs to remove them from my input stream.
I wrote this tool because I needed to know the starting and ending position
for parsed expressions in the original stream (not preprocessed). It can
transform the stream and match my grammar and therefore provide me the real
position relative to the original stream simply by sending *info* to a
parser.
Example:
(parser1, ('Foo' asParser) info , parser2) preprocess: myRegex into:
myReplacement
It works in the same way as token, providing an object containing the
relative start and stop position for the parsed data (even into one or
multiple preprocessors of course) so if in the example parser1 consumes
altered data, you will get the right position in the original stream for
your parser.
This solution has been applied on real case and has proved to be really
useful to link parsed preprocessed data (function source code) to the
filesystem.
Feel free to correct any bug you detect or to propose new functionality.
--
*Guillaume Larcheveque*
Hello all,
I construct a small browser in Glamour:
| finder |
finder := GLMFinder new.
finder show: [:a |
a tree
title: 'Tree';
filterOn: [:text :each | text first = each]].
finder openOn: ($a to: $z).
Now, I can enter a text and it allows me to filter the elements of the
input list according to the input text.
My question: Once I enter the query and my list get filtered, is there any
way that I can return to my complete, unfiltered list? Hitting the return
on empty search field does not execute the filter block. Is there a proper
way to achieve the task of "un-filtering" or should I create some hack to
allow the user to see the list of unfiltered elements?
tx,
Usman