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