Re: [Pharo-dev] [pharo-project/pharo-core] 7f3731: 40510

2015-02-26 Thread Ben Coman
Nice to know.  Makes a lot of sense.

On Thu, Feb 26, 2015 at 12:35 AM, Sven Van Caekenberghe s...@stfx.eu
wrote:

 Great!

  On 25 Feb 2015, at 16:19, Marcus Denker marcus.den...@inria.fr wrote:
 
 
 
  Log Message:
  ---
  40510
  - Scriptloader test
 
  http://files.pharo.org/image/40/40510.zip
 
 
 
  We changed Scriptloader to rely on the fact that we have it’s history in
 the
  reporsitory. This makes a lot of data not needed. (and another problem is
  that the scripts are not valid in the current system, e.g. when we
 rename a Class).
 
  This removes around 160.000 lines of code, make the image smaller by 20%
 and
  removes some load from SmalltalkHub as the Scriptloader40 package
 started to be
  near 1MB in size.
 
  In addition, this brings us a tiny step closer to the ideal that “the
 build server artefact should
  be the release, unchanged”.
 
  All this with loosing *nothing*, as the data is save and secure in the
 history of the package.
 
 
Marcus





Re: [Pharo-dev] Slots: weak slot

2015-02-26 Thread Marcus Denker

 On 26 Feb 2015, at 14:02, Guillermo Polito guillermopol...@gmail.com wrote:
 
 With Camille we spent some minutes introducing a weak slot. A weak slot with 
 a weak reference i.e., it is not taken into account by the garbage collector. 
 If an object is only referenced by weak references it will be garbage 
 collected.
 
 The nice thing about this is that now we can mix transparently weak and 
 non-weak slots inside the same object. For example:
 Object subclass: #MyWeakThingy
 slots: { #weakLala = WeakSlot.
 #normalInstVar }
 classVariables: {  }
 category: ‘SlotTestGuille'

Nice!

WeakSlot linesOfCode 

== “24

 
 We also implemented with Camille the #emit* methods to make it a bit faster. 
 A simple benchmark in my machine shows that

We should be able to use the byte code for reading/writing the tempVector here… 
and access the inner array with no message send.
(but it needs some API change in IRBuilder where we have them for now just in a 
version for the tempVector).

Marcus



Re: [Pharo-dev] Issue tracker: 13 issues to review

2015-02-26 Thread Sean P. DeNigris
Marcus Denker-4 wrote
 Of those, 13 issues are tagged for review:

Down to 10:
14616 could use a unit test ;) but the fix looks good - waiting for the
monkey to finish to resolve to-include...
14743 closed won't fix per issue comments



-
Cheers,
Sean
--
View this message in context: 
http://forum.world.st/Issue-tracker-13-issues-to-review-tp4807759p4807850.html
Sent from the Pharo Smalltalk Developers mailing list archive at Nabble.com.



Re: [Pharo-dev] [pharo-project/pharo-core]

2015-02-26 Thread Marcus Denker

 On 26 Feb 2015, at 15:32, Alexandre Bergel alexandre.ber...@me.com wrote:
 
 Just wondering: is there any meaning to these emails from github?
 

No.

Maybe https://zapier.com https://zapier.com/ is a solution… they have a very 
good email parser.

- send this mail to zapper
- swallow it
- the other mail, parse out the interesting stuff and send a new mail to the 
list.

It is on my TODO, like 1000 other things.

Marcus



Re: [Pharo-dev] instance variable rename is deeply broken....

2015-02-26 Thread stepharo

Ok
Let me know if you need me.
I'm teaching from 6 to 9.



Le 26/2/15 16:39, Marcus Denker a écrit :

On 26 Feb 2015, at 16:36, stepharo steph...@free.fr wrote:

Marcus I browse the changes of the previous version of the refactoring package 
core containing the refactoring definition
and I could not find anythiong. this is strange because it was before mark left.


Yes, but two things happened at once: one issue was proposing to add a flag, 
one issue to remove the whole mechanism.
As I did not realise that it was broken, I integrated the flag, not the removal.

Marcus


Le 26/2/15 16:15, Marcus Denker a écrit :

On 26 Feb 2015, at 16:12, stepharo steph...@free.fr wrote:

This was a BAD IDEA to rename naively accessors when we rename an instance 
variable.
Now I cannot use instance renaming because of the ripple effects I do not 
control.
And I just got an emergency evaluator when I simply wanted to rename an 
instance variable in ButtonModel :(

Mark do you know if your changes go integrated?

His changes where integrated, the undo of this not. Yes, we should remove 
this...


Because now I will work without refactoring and I have all the spec classes to 
change. Not fun.

Stef













Re: [Pharo-dev] a lesson about pragma

2015-02-26 Thread Johan Fabry

I think that fundamentally you should not use pragmas for documentation. I 
guess that people use it to be able to provide minimal structure for their 
documentation. A better solution would be to have a simple convention for this 
kind of structure that is easy to parse, e.g using newlines to separate the 
‘keywords’ and their ‘values’ and just have a comment. For example:

Now:
api: #block getter: #acceptBlock registration: #whenAcceptBlockChanged:

Comment convention:
“
api: #block
getter: #acceptBlock
registration: #whenAcceptBlockChanged:


Easy to parse, and easy to write conversion logic for batch transformation of 
these comments.

 On Feb 26, 2015, at 13:12, Ben Coman b...@openinworld.com wrote:
 
 Could you provide a sample, so this anti-pattern is more clear.
 cheers -ben
 
 On Fri, Feb 27, 2015 at 12:08 AM, stepharo steph...@free.fr 
 mailto:steph...@free.fr wrote:
 We are cleaning spec and the fact that method selectors are used everywhere 
 in pragmas as meta description makes the navigation terrible.
 I'm removing them to be able to understand who is really calling the methods.
 So there is probably a lesson there.
 
 Stef
 
 
 



--- Save our in-boxes! http://emailcharter.org ---

Johan Fabry   -   http://pleiad.cl/~jfabry
PLEIAD lab  -  Computer Science Department (DCC)  -  University of Chile



[Pharo-dev] [pharo-project/pharo-core] 2c9715: 40515

2015-02-26 Thread GitHub
  Branch: refs/heads/4.0
  Home:   https://github.com/pharo-project/pharo-core
  Commit: 2c97150c89a5d721e1ee3ba58da121471cace6bd
  
https://github.com/pharo-project/pharo-core/commit/2c97150c89a5d721e1ee3ba58da121471cace6bd
  Author: Jenkins Build Server bo...@pharo-project.org
  Date:   2015-02-26 (Thu, 26 Feb 2015)

  Changed paths:
A NewValueHolder.package/ValueChanged.class/README.md
A NewValueHolder.package/ValueChanged.class/class/instance 
creation/newValue_.st
A NewValueHolder.package/ValueChanged.class/class/instance 
creation/oldValue_newValue_.st
A NewValueHolder.package/ValueChanged.class/definition.st
A NewValueHolder.package/ValueChanged.class/instance/accessing/newValue.st
A NewValueHolder.package/ValueChanged.class/instance/accessing/newValue_.st
A NewValueHolder.package/ValueChanged.class/instance/accessing/oldValue.st
A NewValueHolder.package/ValueChanged.class/instance/accessing/oldValue_.st
R ScriptLoader40.package/ScriptLoader.class/instance/pharo - 
scripts/script514.st
A ScriptLoader40.package/ScriptLoader.class/instance/pharo - 
scripts/script515.st
R ScriptLoader40.package/ScriptLoader.class/instance/pharo - 
updates/update40514.st
A ScriptLoader40.package/ScriptLoader.class/instance/pharo - 
updates/update40515.st
M 
ScriptLoader40.package/ScriptLoader.class/instance/public/commentForCurrentUpdate.st
M Spec-Core.package/AbstractAdapter.class/instance/factory/buildWidget.st
M 
Spec-Core.package/AbstractWidgetModel.class/instance/api-events/whenBorderColorChanged_.st
M 
Spec-Core.package/AbstractWidgetModel.class/instance/api-events/whenBorderWidthChanged_.st
M 
Spec-Core.package/AbstractWidgetModel.class/instance/api-events/whenEnabledChanged_.st
M 
Spec-Core.package/AbstractWidgetModel.class/instance/api-events/whenHelpChanged_.st
M Spec-Core.package/AbstractWidgetModel.class/instance/api/borderColor.st
M Spec-Core.package/AbstractWidgetModel.class/instance/api/borderColor_.st
M Spec-Core.package/AbstractWidgetModel.class/instance/api/borderWidth.st
M Spec-Core.package/AbstractWidgetModel.class/instance/api/borderWidth_.st
M Spec-Core.package/AbstractWidgetModel.class/instance/api/disable.st
M Spec-Core.package/AbstractWidgetModel.class/instance/api/enable.st
M Spec-Core.package/AbstractWidgetModel.class/instance/api/enabled.st
M Spec-Core.package/AbstractWidgetModel.class/instance/api/enabled_.st
M Spec-Core.package/AbstractWidgetModel.class/instance/api/help.st
M Spec-Core.package/AbstractWidgetModel.class/instance/api/help_.st
M Spec-Core.package/ButtonModel.class/definition.st
M 
Spec-Core.package/ButtonModel.class/instance/api-events/whenActionPerformedDo_.st
M 
Spec-Core.package/ButtonModel.class/instance/api-events/whenLabelChangedDo_.st
M 
Spec-Core.package/ButtonModel.class/instance/api-events/whenStateChangedDo_.st
M Spec-Core.package/ButtonModel.class/instance/api/action.st
M Spec-Core.package/ButtonModel.class/instance/api/action_.st
M Spec-Core.package/ButtonModel.class/instance/api/getAction.st
M Spec-Core.package/ButtonModel.class/instance/api/label_.st
M Spec-Core.package/ButtonModel.class/instance/api/shortcut.st
M Spec-Core.package/ButtonModel.class/instance/api/shortcut_.st
M Spec-Core.package/ButtonModel.class/instance/api/state_.st
M Spec-Core.package/ButtonModel.class/instance/initialization/initialize.st
M Spec-Core.package/ButtonModel.class/instance/morphic/label.st
M Spec-Core.package/ButtonModel.class/instance/morphic/state.st
M 
Spec-Core.package/CheckBoxModel.class/instance/api-events/whenActivatedDo_.st
M 
Spec-Core.package/CheckBoxModel.class/instance/api-events/whenActivationActionChanged_.st
M 
Spec-Core.package/CheckBoxModel.class/instance/api-events/whenChangedDo_.st
M 
Spec-Core.package/CheckBoxModel.class/instance/api-events/whenDesactivatedDo_.st
M 
Spec-Core.package/CheckBoxModel.class/instance/api-events/whenDesactivationActionChanged_.st
M 
Spec-Core.package/CheckBoxModel.class/instance/api-events/whenLabelChanged_.st
M 
Spec-Core.package/CheckBoxModel.class/instance/api-events/whenLabelClickableChanged_.st
M Spec-Core.package/CheckBoxModel.class/instance/api/activationAction_.st
M Spec-Core.package/CheckBoxModel.class/instance/api/click.st
M Spec-Core.package/CheckBoxModel.class/instance/api/desactivationAction_.st
M Spec-Core.package/CheckBoxModel.class/instance/api/label.st
M Spec-Core.package/CheckBoxModel.class/instance/api/labelClickable.st
M Spec-Core.package/CheckBoxModel.class/instance/api/labelClickable_.st
M Spec-Core.package/CheckBoxModel.class/instance/api/label_.st
M Spec-Core.package/CheckBoxModel.class/instance/api/state.st
M Spec-Core.package/CheckBoxModel.class/instance/api/state_.st
M Spec-Core.package/CheckBoxModel.class/instance/api/toggleState.st
M 

[Pharo-dev] [pharo-project/pharo-core]

2015-02-26 Thread GitHub
  Branch: refs/tags/40515
  Home:   https://github.com/pharo-project/pharo-core


Re: [Pharo-dev] a lesson about pragma

2015-02-26 Thread Ben Coman
Could you provide a sample, so this anti-pattern is more clear.
cheers -ben

On Fri, Feb 27, 2015 at 12:08 AM, stepharo steph...@free.fr wrote:

 We are cleaning spec and the fact that method selectors are used
 everywhere in pragmas as meta description makes the navigation terrible.
 I'm removing them to be able to understand who is really calling the
 methods.
 So there is probably a lesson there.

 Stef





Re: [Pharo-dev] a lesson about pragma

2015-02-26 Thread Henrik Johansen

 On 26 Feb 2015, at 5:12 , Ben Coman b...@openinworld.com wrote:
 
 Could you provide a sample, so this anti-pattern is more clear.
 cheers -ben

acceptBlock: aBlockWithOneArgument
api: #block getter: #acceptBlock registration: 
#whenAcceptBlockChanged:
Set the block to perform when the text is accepted.
The block must have one argument, which will be the accepted text.
The block can return false if the candidate text is to be rejected

Senders of acceptBlock / whenAcceptBlockChanged now includes acceptBlock:
I guess the pragma is used to autogenerate documentation in sync with the 
source, but then it's a bit strange that the description is in a comment rather 
than the pragma itself.
Haven't seen a setter/getter pair that deviates from the standard yet, but one 
must exist for there to be a keyword reserved for it in the pragma... right?

Cheers,
Henry




[Pharo-dev] were the fixes of Mark integrated? Because rename instance variable looks broken

2015-02-26 Thread stepharo
When I select an instance variable shortcut and I want to rename it 
using Smart Suggestions

I get

shortcutHolderHolder in my method.

Stef



[Pharo-dev] [pharo-project/pharo-core] a5b1bb: 40514

2015-02-26 Thread GitHub
  Branch: refs/heads/4.0
  Home:   https://github.com/pharo-project/pharo-core
  Commit: a5b1bb2acb02b3580a0ad2bb2792a3468bf619da
  
https://github.com/pharo-project/pharo-core/commit/a5b1bb2acb02b3580a0ad2bb2792a3468bf619da
  Author: Jenkins Build Server bo...@pharo-project.org
  Date:   2015-02-26 (Thu, 26 Feb 2015)

  Changed paths:
M 
AsmJit-Tests.package/AJx64AssemblerTests.class/instance/tests/testStringOps64Mnemonics.st
M 
AsmJit-Tests.package/AJx86AssemblerTests.class/instance/tests/testStringOpMnemonics.st
M 
AsmJit-x86.package/AJx86InstructionDescription.class/instance/emitting/emitsmnemonic_operand1_operand2_operand3_.st
A Reflectivity-Tests.package/ReflectiveMethodTest.class/README.md
A Reflectivity-Tests.package/ReflectiveMethodTest.class/definition.st
A Reflectivity-Tests.package/ReflectiveMethodTest.class/instance/tests - 
creation/testCreateReflectiveMethod.st
A Reflectivity-Tests.package/ReflectiveMethodTest.class/instance/tests - 
creation/testCreateReflectiveMethodAndInvalidate.st
A Reflectivity-Tests.package/ReflectiveMethodTest.class/instance/tests - 
creation/testInvalidate.st
A Reflectivity-Tests.package/ReflectiveMethodTest.class/instance/tests - 
creation/testInvalidateWithLinCount.st
A Reflectivity-Tests.package/ReflectivityExamples.class/README.md
A Reflectivity-Tests.package/ReflectivityExamples.class/definition.st
A Reflectivity-Tests.package/ReflectivityExamples.class/instance/as yet 
unclassified/exampleMethod.st
A Reflectivity.package/ReflectiveMethod.class/README.md
A Reflectivity.package/ReflectiveMethod.class/class/as yet 
unclassified/on_.st
A Reflectivity.package/ReflectiveMethod.class/definition.st
A Reflectivity.package/ReflectiveMethod.class/instance/accessing/ast.st
A 
Reflectivity.package/ReflectiveMethod.class/instance/accessing/compiledMethod_.st
A 
Reflectivity.package/ReflectiveMethod.class/instance/accessing/linkCount.st
A 
Reflectivity.package/ReflectiveMethod.class/instance/accessing/linkCount_.st
A 
Reflectivity.package/ReflectiveMethod.class/instance/evaluation/recompileAST.st
A 
Reflectivity.package/ReflectiveMethod.class/instance/evaluation/run_with_in_.st
A 
Reflectivity.package/ReflectiveMethod.class/instance/invalidate/createTwin.st
A 
Reflectivity.package/ReflectiveMethod.class/instance/invalidate/destroyTwin.st
A 
Reflectivity.package/ReflectiveMethod.class/instance/invalidate/invalidate.st
A Reflectivity.package/ReflectiveMethod.class/instance/reflective 
operations/doesNotUnderstand_.st
A Reflectivity.package/ReflectiveMethod.class/instance/testing/hasLinks.st
A Reflectivity.package/extension/CompiledMethod/instance/createTwin.st
A Reflectivity.package/extension/CompiledMethod/instance/destroyTwin.st
A Reflectivity.package/extension/CompiledMethod/instance/invalidate.st
A Reflectivity.package/extension/CompiledMethod/instance/reflectiveMethod.st
A 
Reflectivity.package/extension/CompiledMethod/instance/reflectiveMethod_.st
R ScriptLoader40.package/ScriptLoader.class/instance/pharo - 
scripts/script513.st
A ScriptLoader40.package/ScriptLoader.class/instance/pharo - 
scripts/script514.st
R ScriptLoader40.package/ScriptLoader.class/instance/pharo - 
updates/update40513.st
A ScriptLoader40.package/ScriptLoader.class/instance/pharo - 
updates/update40514.st
M 
ScriptLoader40.package/ScriptLoader.class/instance/public/commentForCurrentUpdate.st
A Slot.package/WeakSlot.class/README.md
A Slot.package/WeakSlot.class/definition.st
A Slot.package/WeakSlot.class/instance/as yet unclassified/emitStore_.st
A Slot.package/WeakSlot.class/instance/as yet unclassified/emitValue_.st
A Slot.package/WeakSlot.class/instance/as yet unclassified/initialize_.st
A Slot.package/WeakSlot.class/instance/as yet unclassified/read_.st
A Slot.package/WeakSlot.class/instance/as yet 
unclassified/wantsInitalization.st
A Slot.package/WeakSlot.class/instance/as yet unclassified/write_to_.st

  Log Message:
  ---
  40514
14999 Twin: add base for Reflectivity 
https://pharo.fogbugz.com/f/cases/14999

14033 Failing test: AJx64AssemblerTests#testStringOps64Mnemonics
https://pharo.fogbugz.com/f/cases/14033

14998 Add WeakSlot
https://pharo.fogbugz.com/f/cases/14998

http://files.pharo.org/image/40/40514.zip




Re: [Pharo-dev] OSProcess bug ?

2015-02-26 Thread Ben Coman
On Thu, Feb 26, 2015 at 12:05 AM, David T. Lewis le...@mail.msen.com
wrote:

 Hi Jannik,

 One other thing I just thought of: Check and see if your rostopic program
 is actually writing to standard output, as opposed to writing directly to
 /dev/tty. From a terminal window, I think you could do this:

 $ rostopic  out.txt



Would using a pipe better represent the interaction with OSProcess? e.g...
$ rostopic | tail

cheers -ben


Re: [Pharo-dev] were the fixes of Mark integrated? Because rename instance variable looks broken

2015-02-26 Thread Marcus Denker

 On 26 Feb 2015, at 16:09, stepharo steph...@free.fr wrote:
 
 When I select an instance variable shortcut and I want to rename it using 
 Smart Suggestions
 I get
 
shortcutHolderHolder in my method.
 

everything is integrated.

Marcus




Re: [Pharo-dev] instance variable rename is deeply broken....

2015-02-26 Thread stepharo

rename: aVarName to: aName in: aClass
self rename: aVarName to: aName in: aClass renameAccessors: false
 ^   (false makes sure that there 
is no renaming).



On 26 Feb 2015, at 16:12, stepharo steph...@free.fr wrote:

This was a BAD IDEA to rename naively accessors when we rename an instance 
variable.
Now I cannot use instance renaming because of the ripple effects I do not 
control.
And I just got an emergency evaluator when I simply wanted to rename an 
instance variable in ButtonModel :(

Mark do you know if your changes go integrated?

His changes where integrated, the undo of this not. Yes, we should remove 
this...


I did not get the undo.
But in my image renaming a variables renames the accessors and more.

To work I modified to put false instead of true.

rename: aVarName to: aName in: aClass
self rename: aVarName to: aName in: aClass renameAccessors: false

I can prepare a slice to either remove the behavior or at least turn it off.


Because now I will work without refactoring and I have all the spec classes to 
change. Not fun.

Stef









Re: [Pharo-dev] [regression reporter]regression occurred

2015-02-26 Thread Sven Van Caekenberghe

 On 26 Feb 2015, at 15:35, Ben Coman b...@openinworld.com wrote:
 
 On Feb 25, 2015 3:58 PM, Sven Van Caekenberghe s...@stfx.eu wrote:
 Number#brickValue: must die !
 
  On 25 Feb 2015, at 15:53, no-re...@ci.inria.fr wrote:
 
  https://ci.inria.fr/pharo/job/Pharo-4.0-Update-Step-2.1-Validation-A-L/label=linux-stable-worker/585/
 
  1 regressions found.
   
  KernelTests.Numbers.NumberTest.testMethodsOfTheClassShouldNotBeRepeatedInItsSuperclasses
 
 
 
 On Wed, Feb 25, 2015 at 4:07 PM, Marcus Denker marcus.den...@inria.fr wrote:
 
 On 25 Feb 2015, at 16:04, Aliaksei Syrel alex.sy...@gmail.com wrote:
 It is already fixed and will be integrated with GT
 
 When will this happen? this test fails since *WEEKS*, yet I could have fixed 
 it in 5 minutes. But I can’t.
 We make ourselves completely powerless. This does not make me feel good. 
  
 On Wed, Feb 25, 2015 at 11:11 PM, Aliaksei Syrel alex.sy...@gmail.com wrote:
 
 Normally GT should be released more often. This time while Jenkins was down 
 we did a lot of changes and now it takes some time to prepare everything for 
 integration. Also at the moment of previous release moose didn't run tests 
 like BehaviourTest and others. :)
 
 
 
 Thats a fair reason, but philosophically we still have a feature branch 
 holding up a bug fix, because we have a a single-branch workflow.   Consider 
 a future where Pharo has more external packages, where a hypothetical package 
 (with less diligent developers than GT) has a longer feature development 
 cycle.  Should bug fixes be held up?  Or should external packages have a 
 bug-fix-branch and a feature-development-branch - with a workflow where 
 before the feature-development-branch is integrated, it merges in any 
 bug-fix-branch commits.

I think that in certain cases (something urgent, something really annoying) it 
would be OK to patch it directly. It is then up to the external package 
maintainers to pick up the change up stream.

Working with components/modules should not limit what we do.

Of course, for new features this would not be OK.

 p.s. It would be interesting if we could get a github-style commit network 
 graph derived from mcz files.
 
 cheers -ben 
 




[Pharo-dev] instance variable rename is deeply broken....

2015-02-26 Thread stepharo
This was a BAD IDEA to rename naively accessors when we rename an 
instance variable.
Now I cannot use instance renaming because of the ripple effects I do 
not control.
And I just got an emergency evaluator when I simply wanted to rename an 
instance variable in ButtonModel :(


Mark do you know if your changes go integrated?
Because now I will work without refactoring and I have all the spec 
classes to change. Not fun.


Stef



Re: [Pharo-dev] instance variable rename is deeply broken....

2015-02-26 Thread Marcus Denker

 On 26 Feb 2015, at 16:36, stepharo steph...@free.fr wrote:
 
 Marcus I browse the changes of the previous version of the refactoring 
 package core containing the refactoring definition
 and I could not find anythiong. this is strange because it was before mark 
 left.
 

Yes, but two things happened at once: one issue was proposing to add a flag, 
one issue to remove the whole mechanism.
As I did not realise that it was broken, I integrated the flag, not the removal.

Marcus

 
 Le 26/2/15 16:15, Marcus Denker a écrit :
 On 26 Feb 2015, at 16:12, stepharo steph...@free.fr wrote:
 
 This was a BAD IDEA to rename naively accessors when we rename an instance 
 variable.
 Now I cannot use instance renaming because of the ripple effects I do not 
 control.
 And I just got an emergency evaluator when I simply wanted to rename an 
 instance variable in ButtonModel :(
 
 Mark do you know if your changes go integrated?
 His changes where integrated, the undo of this not. Yes, we should remove 
 this...
 
 Because now I will work without refactoring and I have all the spec classes 
 to change. Not fun.
 
 Stef
 
 
 
 
 




[Pharo-dev] [pharo-project/pharo-core]

2015-02-26 Thread GitHub
  Branch: refs/tags/40514
  Home:   https://github.com/pharo-project/pharo-core


[Pharo-dev] Recording user actions in GTools

2015-02-26 Thread Andrei Chis
Hi,

In order to better understand how people use the GT tools we would like to
integrate, before the Pharo code freeze, a small extension to GT tools (300
lines of code) that records and sends usage data.

The recording of data will be opt-out: *you have to explicitly agree with
sending usage data*.
The first time you open a GT tool, that tool will embed a small UI asking
you if you want to enable data submission.
We will save the setting in the your preference directory so it will be
shared between all your local images.
You can change this setting at any time from the Settings Browser.

For now we will only like to collect data about Spotter.
*By default we will only collect anonymous data *about various actions you
do in spotter (open, close, search, dive-in, dive-out, select element, etc)
without collecting any data what about what query you enter or what search
results you get.
We would also add an optional setting for sending the query text and
selected elements.

We will send then the data periodically to our server and when you close
the image.

The data that will be send is rather small: 1000 actions require 7kb of
data.
Thus sending an entire day worth of recordings, if all you did that day was
searching, should be around 1MB of data.

The recording does not influence the performance of Spotter. Spotter
already generates all events of interest as announcements.
To enable recording we just register a subscriber with the Spotter
announcer and store the events of interest.

We would like to get your opinion on this.


Cheers,
GT team


Re: [Pharo-dev] [pharo-project/pharo-core] 7f3731: 40510

2015-02-26 Thread Tudor Girba
Really great!

Doru

On Wed, Feb 25, 2015 at 5:35 PM, Sven Van Caekenberghe s...@stfx.eu wrote:

 Great!

  On 25 Feb 2015, at 16:19, Marcus Denker marcus.den...@inria.fr wrote:
 
 
 
  Log Message:
  ---
  40510
  - Scriptloader test
 
  http://files.pharo.org/image/40/40510.zip
 
 
 
  We changed Scriptloader to rely on the fact that we have it’s history in
 the
  reporsitory. This makes a lot of data not needed. (and another problem is
  that the scripts are not valid in the current system, e.g. when we
 rename a Class).
 
  This removes around 160.000 lines of code, make the image smaller by 20%
 and
  removes some load from SmalltalkHub as the Scriptloader40 package
 started to be
  near 1MB in size.
 
  In addition, this brings us a tiny step closer to the ideal that “the
 build server artefact should
  be the release, unchanged”.
 
  All this with loosing *nothing*, as the data is save and secure in the
 history of the package.
 
 
Marcus





-- 
www.tudorgirba.com

Every thing has its own flow


[Pharo-dev] Slots: weak slot

2015-02-26 Thread Guillermo Polito
With Camille we spent some minutes introducing a weak slot. A weak slot
with a weak reference i.e., it is not taken into account by the garbage
collector. If an object is only referenced by weak references it will be
garbage collected.

The nice thing about this is that now we can mix transparently weak and
non-weak slots inside the same object. For example:
Object subclass: #MyWeakThingy
slots: { #weakLala = WeakSlot.
#normalInstVar }
classVariables: {  }
category: 'SlotTestGuille'

weakLala: someLala
weakLala:= someLala

weakLala
^ weakLala

weak := MyWeakThingy new.
o:= Object new.
weak weakLala. =Object new
o :=nil.
weak weakLala. =nil

We also implemented with Camille the #emit* methods to make it a bit
faster. A simple benchmark in my machine shows that

With no optimizations
[weak weakLala:o] bench  14,338,031 per second

With optimizations
[weak weakLala:o] bench 27,955,761 per second

A normal array access
someArray := Array new: 1.
[someArray at: 1 put: o] bench  '39,609,322 per second'

We commited it into the inbox, the issue is the following:

https://pharo.fogbugz.com/f/cases/14998/Add-WeakSlot

Camille  Guille


Re: [Pharo-dev] MCVersionInfo: 10% of the image

2015-02-26 Thread stepharo

Excellent!


Le 26/2/15 11:11, Thierry Goubier a écrit :



2015-02-26 10:51 GMT+01:00 Thierry Goubier thierry.goub...@gmail.com 
mailto:thierry.goub...@gmail.com:




2015-02-26 10:44 GMT+01:00 Marcus Denker marcus.den...@inria.fr
mailto:marcus.den...@inria.fr:


 On 26 Feb 2015, at 10:15, Thierry Goubier
thierry.goub...@gmail.com mailto:thierry.goub...@gmail.com
wrote:

 Ok,

 a first slice is in, it's the first solution for now (second
is just extending the scheme).

 Loading the slice should install the lazy version and flush
the caches (does merging would initialize the class?)


Works fine with merge, too.

The 511 image is 23.2MB after. This means with the
Scriptloader fix from 510 together we would over 10MB… or
nearly 1/3. Nice!


Ok. Second scheme (get it to work everywhere, everytime) seems to
just need to change MCWorkingAncestryaddAncestor: and
MCWorkingCopy addStepChild:


Done. Slice uploaded.Tried with loading Roassal2, then flushing the 
Monticello package cache:


MCVersionInfo allInstances size 2

Thierry


Thierry


Marcus








[Pharo-dev] [pharo-project/pharo-core]

2015-02-26 Thread GitHub
  Branch: refs/tags/40512
  Home:   https://github.com/pharo-project/pharo-core


[Pharo-dev] [pharo-project/pharo-core] 0a76bd: 40512

2015-02-26 Thread GitHub
  Branch: refs/heads/4.0
  Home:   https://github.com/pharo-project/pharo-core
  Commit: 0a76bdbdedb4c2aa20a2a798b8c91a51d0bc9498
  
https://github.com/pharo-project/pharo-core/commit/0a76bdbdedb4c2aa20a2a798b8c91a51d0bc9498
  Author: Jenkins Build Server bo...@pharo-project.org
  Date:   2015-02-26 (Thu, 26 Feb 2015)

  Changed paths:
A 
Collections-Sequenceable.package/LinkedList.class/instance/enumerating/select_thenCollect_.st
M Kernel.package/Delay.class/class/instance 
creation/timeoutSemaphore_afterMSecs_.st
M Kernel.package/MonitorDelay.class/class/instance 
creation/signalLock_afterMSecs_inMonitor_queue_.st
A 
KernelTests.package/DelayTest.class/instance/testing/testTimeoutSemaphoreAfterMSecs.st
A 
KernelTests.package/MonitorTest.class/instance/tests/testWaitMaxMilliseconds.st
A 
Keymapping-Tools-Spec.package/KMDescription.class/instance/api/categories_.st
R 
Keymapping-Tools-Spec.package/KMDescription.class/instance/protocol/categories_.st
A Komitter.package/CredentialEditor.class/instance/api/getPassword.st
A Komitter.package/CredentialEditor.class/instance/api/getUsername.st
A Komitter.package/CredentialEditor.class/instance/api/initialExtent.st
A Komitter.package/CredentialEditor.class/instance/api/setPassword_.st
A Komitter.package/CredentialEditor.class/instance/api/setUsername_.st
A Komitter.package/CredentialEditor.class/instance/api/title.st
R Komitter.package/CredentialEditor.class/instance/protocol/getPassword.st
R Komitter.package/CredentialEditor.class/instance/protocol/getUsername.st
R Komitter.package/CredentialEditor.class/instance/protocol/initialExtent.st
R Komitter.package/CredentialEditor.class/instance/protocol/setPassword_.st
R Komitter.package/CredentialEditor.class/instance/protocol/setUsername_.st
R Komitter.package/CredentialEditor.class/instance/protocol/title.st
A Komitter.package/KomitClassNode.class/instance/api/label.st
A 
Komitter.package/KomitClassNode.class/instance/initialization/initialize.st
R Komitter.package/KomitClassNode.class/instance/initialize/initialize.st
R Komitter.package/KomitClassNode.class/instance/protocol/label.st
A Komitter.package/KomitDefinitionNode.class/instance/api/label.st
R Komitter.package/KomitDefinitionNode.class/instance/protocol/label.st
A Komitter.package/KomitLeaf.class/instance/initialization/initialize.st
R Komitter.package/KomitLeaf.class/instance/initialize/initialize.st
A Komitter.package/KomitMethodNode.class/instance/api/label.st
R Komitter.package/KomitMethodNode.class/instance/protocol/label.st
A Komitter.package/KomitNode.class/instance/api/icon.st
A Komitter.package/KomitNode.class/instance/api/ifNotSilentDo_.st
A Komitter.package/KomitNode.class/instance/api/label.st
A Komitter.package/KomitNode.class/instance/api/silentWhile_.st
A Komitter.package/KomitNode.class/instance/initialization/initialize.st
R Komitter.package/KomitNode.class/instance/initialize/initialize.st
R Komitter.package/KomitNode.class/instance/protocol/icon.st
R Komitter.package/KomitNode.class/instance/protocol/ifNotSilentDo_.st
R Komitter.package/KomitNode.class/instance/protocol/label.st
R Komitter.package/KomitNode.class/instance/protocol/silentWhile_.st
A Komitter.package/KomitPackageNode.class/instance/api/icon.st
A Komitter.package/KomitPackageNode.class/instance/api/label.st
A 
Komitter.package/KomitPackageNode.class/instance/initialization/initialize.st
R Komitter.package/KomitPackageNode.class/instance/initialize/initialize.st
R Komitter.package/KomitPackageNode.class/instance/protocol/icon.st
R Komitter.package/KomitPackageNode.class/instance/protocol/label.st
A Komitter.package/KomitSliceUI.class/instance/api/initialExtent.st
A Komitter.package/KomitSliceUI.class/instance/api/issueNumberText.st
A Komitter.package/KomitSliceUI.class/instance/api/title.st
A Komitter.package/KomitSliceUI.class/instance/api/titleText.st
A Komitter.package/KomitSliceUI.class/instance/api/valid.st
A Komitter.package/KomitSliceUI.class/instance/api/valid_.st
R Komitter.package/KomitSliceUI.class/instance/protocol/initialExtent.st
R Komitter.package/KomitSliceUI.class/instance/protocol/issueNumberText.st
R Komitter.package/KomitSliceUI.class/instance/protocol/title.st
R Komitter.package/KomitSliceUI.class/instance/protocol/titleText.st
R Komitter.package/KomitSliceUI.class/instance/protocol/valid.st
R Komitter.package/KomitSliceUI.class/instance/protocol/valid_.st
A Komitter.package/KomitterUI.class/instance/api/addRoot_.st
A Komitter.package/KomitterUI.class/instance/api/cancel.st
A Komitter.package/KomitterUI.class/instance/api/initialExtent.st
A Komitter.package/KomitterUI.class/instance/api/komit.st
A Komitter.package/KomitterUI.class/instance/api/model.st
A 

Re: [Pharo-dev] Bug? JPEG reading ignores EXIF Orientation

2015-02-26 Thread stepharo

We should improve the Image support because it is dated.


Le 25/2/15 04:03, J.F. Rick a écrit :
A lot of mobile phone cameras use the EXIF metadata of JPEG to 
indicate the orientation of the image (i.e., vertical vs horizontal, 
upside down, etc.). In Pharo 3 (I doubt it has changed in Pharo 4), 
that data is ignored. So, when you convert a photo taken from a mobile 
device to a form, it will probably be in the wrong orientation. This 
is true for both JPEGReadWriter and PluginBasedJPEGReadWriter.


Anybody got any knowledge about this? If not, I'll add it as a bug to 
FogBugz.


Cheers,

Jeff
--
Jochen Jeff Rick, Ph.D.
http://www.je77.com/
Skype ID: jochenrick





Re: [Pharo-dev] [regression reporter]regression occurred

2015-02-26 Thread Ben Coman
On Feb 25, 2015 3:58 PM, Sven Van Caekenberghe s...@stfx.eu wrote:

 Number#brickValue: must die !

  On 25 Feb 2015, at 15:53, no-re...@ci.inria.fr wrote:
 
 
 https://ci.inria.fr/pharo/job/Pharo-4.0-Update-Step-2.1-Validation-A-L/label=linux-stable-worker/585/
 
  1 regressions found.
 
 KernelTests.Numbers.NumberTest.testMethodsOfTheClassShouldNotBeRepeatedInItsSuperclasses



On Wed, Feb 25, 2015 at 4:07 PM, Marcus Denker marcus.den...@inria.fr
 wrote:


 On 25 Feb 2015, at 16:04, Aliaksei Syrel alex.sy...@gmail.com wrote:

 It is already fixed and will be integrated with GT

 When will this happen? this test fails since *WEEKS*, yet I could have
 fixed it in 5 minutes. But I can’t.
 We make ourselves completely powerless. This does not make me feel good.


On Wed, Feb 25, 2015 at 11:11 PM, Aliaksei Syrel alex.sy...@gmail.com
wrote:


 Normally GT should be released more often. This time while Jenkins was
 down we did a lot of changes and now it takes some time to prepare
 everything for integration. Also at the moment of previous release moose
 didn't run tests like BehaviourTest and others. :)



Thats a fair reason, but philosophically we still have a feature branch
holding up a bug fix, because we have a a single-branch workflow.
Consider a future where Pharo has more external packages, where a
hypothetical package (with less diligent developers than GT) has a longer
feature development cycle.  Should bug fixes be held up?  Or should
external packages have a bug-fix-branch and a feature-development-branch -
with a workflow where before the feature-development-branch is integrated,
it merges in any bug-fix-branch commits.

p.s. It would be interesting if we could get a github-style commit network
graph derived from mcz files.

cheers -ben


Re: [Pharo-dev] [pharo-project/pharo-core]

2015-02-26 Thread Alexandre Bergel
Just wondering: is there any meaning to these emails from github?

Cheers,
Alexandre


 On Feb 26, 2015, at 11:29 AM, GitHub nore...@github.com wrote:
 
  Branch: refs/tags/40513
  Home:   https://github.com/pharo-project/pharo-core

-- 
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel  http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.






Re: [Pharo-dev] [pharo-project/pharo-core]

2015-02-26 Thread Serge Stinckwich
There is a git tag for each Pharo releases:
https://github.com/pharo-project/pharo-core/releases

On Thu, Feb 26, 2015 at 3:32 PM, Alexandre Bergel
alexandre.ber...@me.com wrote:
 Just wondering: is there any meaning to these emails from github?

 Cheers,
 Alexandre


 On Feb 26, 2015, at 11:29 AM, GitHub nore...@github.com wrote:

  Branch: refs/tags/40513
  Home:   https://github.com/pharo-project/pharo-core

 --
 _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
 Alexandre Bergel  http://www.bergel.eu
 ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.







-- 
Serge Stinckwich
UCBN  UMI UMMISCO 209 (IRD/UPMC)
Every DSL ends up being Smalltalk
http://www.doesnotunderstand.org/



Re: [Pharo-dev] MCVersionInfo: 10% of the image

2015-02-26 Thread stepharo

Thierry

this is really interesting. Could you add the logic in some class 
comments for the future?


Stef

Le 26/2/15 10:15, Thierry Goubier a écrit :

Ok,

a first slice is in, it's the first solution for now (second is just 
extending the scheme).


Loading the slice should install the lazy version and flush the caches 
(does merging would initialize the class?)


Thierry

2015-02-26 9:33 GMT+01:00 Marcus Denker marcus.den...@inria.fr 
mailto:marcus.den...@inria.fr:






And it behaves as the non-lazy one.

There are a few things to change GUI-side to avoid an unnecessary
loading of the complete ancestry of all the packages in the
image, but this is workable.

I see two ways of using it:

as an install, flush package cache before release and gain 5MB
of RAM. If you start regularly developping (loading packages,
etc...) then new packages will revert to non-lazy version info
(without: 'please wait, I'm loading ancestry' moments).

as a permanent change in MC. The change is a bit more intrusive
(need to change how working copies are created) but, well, as
long as the worked on packages are inside the in-memory MC
package cache, behavior is exactly the same as a non-lazy version
info.

As you prefer.



My focus is that we ship an image that is not growing
indefinitely… so this means it needs to be part of the release.

I don’t care too much that the image is large when I work, but it
should not come with all this data in memory when it can be
calculated (or lazyly loaded) when needed.


I added an issue:

https://pharo.fogbugz.com/default.asp?14997



Thanks!

Marcus






[Pharo-dev] [pharo-project/pharo-core]

2015-02-26 Thread GitHub
  Branch: refs/tags/40513
  Home:   https://github.com/pharo-project/pharo-core


[Pharo-dev] [pharo-project/pharo-core] 446c22: 40513

2015-02-26 Thread GitHub
  Branch: refs/heads/4.0
  Home:   https://github.com/pharo-project/pharo-core
  Commit: 446c22b4124aefd20398ecb846326defe09313f1
  
https://github.com/pharo-project/pharo-core/commit/446c22b4124aefd20398ecb846326defe09313f1
  Author: Jenkins Build Server bo...@pharo-project.org
  Date:   2015-02-26 (Thu, 26 Feb 2015)

  Changed paths:
M 
ConfigurationOfZincHTTPComponents.package/ConfigurationOfZincHTTPComponents.class/instance/accessing/stable_.st
A 
ConfigurationOfZincHTTPComponents.package/ConfigurationOfZincHTTPComponents.class/instance/baselines/baseline25_.st
A 
ConfigurationOfZincHTTPComponents.package/ConfigurationOfZincHTTPComponents.class/instance/baselines/baseline26_.st
A 
ConfigurationOfZincHTTPComponents.package/ConfigurationOfZincHTTPComponents.class/instance/versions/version256_.st
A 
ConfigurationOfZincHTTPComponents.package/ConfigurationOfZincHTTPComponents.class/instance/versions/version261_.st
A 
ConfigurationOfZincHTTPComponents.package/ConfigurationOfZincHTTPComponents.class/instance/versions/version262_.st
R ScriptLoader40.package/ScriptLoader.class/instance/pharo - 
scripts/script512.st
A ScriptLoader40.package/ScriptLoader.class/instance/pharo - 
scripts/script513.st
R ScriptLoader40.package/ScriptLoader.class/instance/pharo - 
updates/update40512.st
A ScriptLoader40.package/ScriptLoader.class/instance/pharo - 
updates/update40513.st
M 
ScriptLoader40.package/ScriptLoader.class/instance/public/commentForCurrentUpdate.st
A Zinc-Character-Encoding-Core.package/ZnFastLineReader.class/README.md
A 
Zinc-Character-Encoding-Core.package/ZnFastLineReader.class/class/instance 
creation/on_.st
A Zinc-Character-Encoding-Core.package/ZnFastLineReader.class/definition.st
A 
Zinc-Character-Encoding-Core.package/ZnFastLineReader.class/instance/accessing/linesDo_.st
A 
Zinc-Character-Encoding-Core.package/ZnFastLineReader.class/instance/accessing/nextLine.st
A 
Zinc-Character-Encoding-Core.package/ZnFastLineReader.class/instance/initialize/beWide.st
A 
Zinc-Character-Encoding-Core.package/ZnFastLineReader.class/instance/initialize/bufferStream_.st
A 
Zinc-Character-Encoding-Core.package/ZnFastLineReader.class/instance/initialize/close.st
A 
Zinc-Character-Encoding-Core.package/ZnFastLineReader.class/instance/initialize/initialize.st
A 
Zinc-Character-Encoding-Core.package/ZnFastLineReader.class/instance/initialize/on_.st
A 
Zinc-Character-Encoding-Core.package/ZnFastLineReader.class/instance/private/streamContents_.st
A 
Zinc-Character-Encoding-Core.package/ZnFastLineReader.class/instance/testing/atEnd.st
A 
Zinc-Character-Encoding-Tests.package/ZnFastLineReaderTests.class/README.md
A 
Zinc-Character-Encoding-Tests.package/ZnFastLineReaderTests.class/definition.st
A 
Zinc-Character-Encoding-Tests.package/ZnFastLineReaderTests.class/instance/testing/testLinesDo.st
A 
Zinc-Character-Encoding-Tests.package/ZnFastLineReaderTests.class/instance/testing/testNextLine.st
M Zinc-HTTP.package/ZnClient.class/instance/cleanup/close.st
A Zinc-HTTP.package/ZnClient.class/instance/options/certificate.st
A Zinc-HTTP.package/ZnClient.class/instance/options/certificate_.st
M Zinc-HTTP.package/ZnClient.class/instance/private 
logging/logConnectionEstablishedTo_started_.st
M Zinc-HTTP.package/ZnClient.class/instance/private/newConnectionTo_.st
A Zinc-HTTP.package/ZnClient.class/instance/testing/isBadRequest.st
M 
Zinc-HTTP.package/ZnClientLogEvent.class/instance/printing/printContentsOn_.st
M 
Zinc-HTTP.package/ZnDefaultServerDelegate.class/instance/initialization/initialize.st
M 
Zinc-HTTP.package/ZnDefaultServerDelegate.class/instance/responses/formTest1_.st
A 
Zinc-HTTP.package/ZnDefaultServerDelegate.class/instance/responses/formTest2_.st
A 
Zinc-HTTP.package/ZnDefaultServerDelegate.class/instance/responses/formTest3_.st
M Zinc-HTTP.package/ZnDigestAuthenticator.class/class/accessing/md5Hash_.st
M Zinc-HTTP.package/ZnEntity.class/class/instance 
creation/readBinaryFrom_usingType_andLength_.st
A 
Zinc-HTTP.package/ZnEntity.class/instance/initialize-release/readBinaryFrom_.st
A 
Zinc-HTTP.package/ZnEntityReader.class/instance/private/withDefaultUtf8Decoding_.st
M Zinc-HTTP.package/ZnEntityReader.class/instance/public/readEntity.st
A 
Zinc-HTTP.package/ZnEntityWriter.class/instance/private/withDefaultUtf8Encoding_.st
M Zinc-HTTP.package/ZnEntityWriter.class/instance/public/writeEntity_.st
M Zinc-HTTP.package/ZnLogEvent.class/class/convenience/logToTranscript.st
M Zinc-HTTP.package/ZnMimePart.class/class/instance 
creation/fieldName_fileName_entity_.st
A Zinc-HTTP.package/ZnMimePart.class/class/instance 
creation/readBinaryFrom_.st
M Zinc-HTTP.package/ZnMimePart.class/instance/accessing/fileName.st
A 
Zinc-HTTP.package/ZnMimePart.class/instance/initialize-release/readBinaryFrom_.st
R 

[Pharo-dev] Diffing while Merging Class Rename

2015-02-26 Thread Sean P. DeNigris
It is difficult to see the actual changes when a merge includes a class
rename, which just shows up as all methods removed from old class, and all
methods created in new class. Is there a way to diff these methods?



-
Cheers,
Sean
--
View this message in context: 
http://forum.world.st/Diffing-while-Merging-Class-Rename-tp4807854.html
Sent from the Pharo Smalltalk Developers mailing list archive at Nabble.com.



Re: [Pharo-dev] OSProcess bug ?

2015-02-26 Thread Ben Coman
On Thu, Feb 26, 2015 at 1:10 AM, jannik laval jannik.la...@gmail.com
wrote:

 Hi Dave,



 2015-02-25 17:05 GMT+01:00 David T. Lewis le...@mail.msen.com:

 Hi Jannik,

 One other thing I just thought of: Check and see if your rostopic program
 is actually writing to standard output, as opposed to writing directly to
 /dev/tty. From a terminal window, I think you could do this:

 $ rostopic  out.txt


 Yes, it writes on the file after a ctrl-c.


Is that a hint?  So if in one terminal you run $ rostopic  out.txt
then without hitting ctrl-c, in another terminal view the contents of
out.txt, is it empty?

Do you get different behaviour with this between each of these mode [1]?...


   -

   *Latching mode*
   -

  rostopic will publish a message to /topic_name and keep it *latched* --
  any new subscribers that come online after you start rostopic will
  hear this message. You can stop this at any time by pressing ctrl-C.

   *Once mode*
   -

  If you don't want to have to stop rostopic with ctrl-C, you can
  publish in *once mode*. rostopic will keep the message latched for 3
  seconds, then quit.

   *Rate mode*.
   -

  In rate mode, rostopic will publish your message at a specific rate.
  For example, -r 10 will publish at 10hz. For file and piped input,
  this defaults to 10hz.

Options:

   -

   -l, --latch New in Diamondback
   -

  Enable latch mode. Latching mode is the *default* when using
  command-line arguments.

   -r RATE
   -

  Enable *rate mode*. Rate mode is the *default* (10hz) when using
  piped or file input.

   -1, --once
   -

  Enable *once mode*.

cheers -ben

[1] http://wiki.ros.org/rostopic#rostopic_pub
[2]
http://answers.ros.org/question/59070/disable-latching-for-rostopic-in-piping-mode/


[Pharo-dev] Slots: and ProcessLocalSlot

2015-02-26 Thread Guillermo Polito
So I added an example of ProcessLocalSlot (like a thread local from other
languages) using the existing ProcessLocalVariable. A variable has
different values depending on the process the code is executing.

Example of usage:

Object subclass: #TestLocal
slots: { #local = ProcessLocalSlot }
classVariables: {  }
category: 'SlotTestGuille'.

object := TestLocal new.
object local: 55.
object local.

[ valueInOtherProcess := object local ] fork.

valueInOtherProcess. = nil

[ object local: 'String'.
valueInOtherProcess := object local ] fork.

valueInOtherProcess. = 'String'
object local = 55

Code in issue: https://pharo.fogbugz.com/f/cases/15004/Add-ProcessLocalSlot

Guille


Re: [Pharo-dev] Slots: and ProcessLocalSlot

2015-02-26 Thread Sven Van Caekenberghe
*Very* nice !

 On 26 Feb 2015, at 18:55, Guillermo Polito guillermopol...@gmail.com wrote:
 
 So I added an example of ProcessLocalSlot (like a thread local from other 
 languages) using the existing ProcessLocalVariable. A variable has different 
 values depending on the process the code is executing.
 
 Example of usage:
 
 Object subclass: #TestLocal
   slots: { #local = ProcessLocalSlot }
   classVariables: {  }
   category: 'SlotTestGuille'.
 
 object := TestLocal new.
 object local: 55.
 object local.
 
 [ valueInOtherProcess := object local ] fork.
 
 valueInOtherProcess. = nil
 
 [ object local: 'String'.
 valueInOtherProcess := object local ] fork.
 
 valueInOtherProcess. = 'String'
 object local = 55
 
 Code in issue: https://pharo.fogbugz.com/f/cases/15004/Add-ProcessLocalSlot
 
 Guille




[Pharo-dev] GTSpotter - searching anywhere within identifiers

2015-02-26 Thread Ben Coman
I want to use GTSpotter to discover the different types of slots, so I type
slot but it only finds identifiers starting with slot, excluding items
like IndexedSlot.

I'd really like to not be constrained to only search at start of
identifiers. Did Spotter use to search differently? (I can't remember).
This is build 40513.

cheers -ben


Re: [Pharo-dev] a lesson about pragma

2015-02-26 Thread Ben Coman
On Fri, Feb 27, 2015 at 12:53 AM, Johan Fabry jfa...@dcc.uchile.cl wrote:


 I think that fundamentally you should not use pragmas for documentation. I
 guess that people use it to be able to provide minimal structure for their
 documentation. A better solution would be to have a simple convention for
 this kind of structure that is easy to parse, e.g using newlines to
 separate the ‘keywords’ and their ‘values’ and just have a comment. For
 example:

 Now:
 api: #block getter: #acceptBlock registration: #whenAcceptBlockChanged:

 Comment convention:
 “
 api: #block
 getter: #acceptBlock
 registration: #whenAcceptBlockChanged:
 

 Easy to parse, and easy to write conversion logic for batch transformation
 of these comments.


And MOST importantly, easy to identify that it doesn't affect program
execution!
cheers -ben



 On Feb 26, 2015, at 13:12, Ben Coman b...@openinworld.com wrote:

 Could you provide a sample, so this anti-pattern is more clear.
 cheers -ben

 On Fri, Feb 27, 2015 at 12:08 AM, stepharo steph...@free.fr wrote:

 We are cleaning spec and the fact that method selectors are used
 everywhere in pragmas as meta description makes the navigation terrible.
 I'm removing them to be able to understand who is really calling the
 methods.
 So there is probably a lesson there.

 Stef








Re: [Pharo-dev] GTSpotter - searching anywhere within identifiers

2015-02-26 Thread Andrei Chis
In the latest version from moose it also finds IndexedSlot if you type in
'slot'. However it displays at the beginning identifiers that start with
the keyword.
To find IndexedSlot you can type in 'slot' dive in the classes category and
then search for 'index'


Cheers,
Andrei


On Thu, Feb 26, 2015 at 6:09 PM, Ben Coman b...@openinworld.com wrote:

 I want to use GTSpotter to discover the different types of slots, so I
 type slot but it only finds identifiers starting with slot, excluding
 items like IndexedSlot.

 I'd really like to not be constrained to only search at start of
 identifiers. Did Spotter use to search differently? (I can't remember).
 This is build 40513.

 cheers -ben



[Pharo-dev] a lesson about pragma

2015-02-26 Thread stepharo
We are cleaning spec and the fact that method selectors are used 
everywhere in pragmas as meta description makes the navigation terrible.
I'm removing them to be able to understand who is really calling the 
methods.

So there is probably a lesson there.

Stef




Re: [Pharo-dev] instance variable rename is deeply broken....

2015-02-26 Thread Marcus Denker

 On 26 Feb 2015, at 16:12, stepharo steph...@free.fr wrote:
 
 This was a BAD IDEA to rename naively accessors when we rename an instance 
 variable.
 Now I cannot use instance renaming because of the ripple effects I do not 
 control.
 And I just got an emergency evaluator when I simply wanted to rename an 
 instance variable in ButtonModel :(
 
 Mark do you know if your changes go integrated?

His changes where integrated, the undo of this not. Yes, we should remove 
this...

 Because now I will work without refactoring and I have all the spec classes 
 to change. Not fun.
 
 Stef
 




Re: [Pharo-dev] Issue tracker: 13 issues to review

2015-02-26 Thread Sean P. DeNigris
Sean P. DeNigris wrote
 Down to 10:

Add one more:
Issue 10741: Monticello - Can't upload slice dependency already in repo 
Fix in inbox:
SLICE-Issue-10741-Cant-upload-slice-dependency-already-in-repo-SeanDeNigris.1
- MCCacheRepository#storeVersion: had a guard which skips file if it
already exists; push it up to MCFileBasedRepository




-
Cheers,
Sean
--
View this message in context: 
http://forum.world.st/Issue-tracker-13-issues-to-review-tp4807759p4808024.html
Sent from the Pharo Smalltalk Developers mailing list archive at Nabble.com.



Re: [Pharo-dev] Recording user actions in GTools

2015-02-26 Thread Alexandre Bergel
Absolutely no problem for me. By the way, I even have no problem to divulge my 
identity if this help.

Cheers,
Alexandre


 On Feb 26, 2015, at 12:10 PM, Andrei Chis chisvasileand...@gmail.com wrote:
 
 Hi,
 
 In order to better understand how people use the GT tools we would like to 
 integrate, before the Pharo code freeze, a small extension to GT tools (300 
 lines of code) that records and sends usage data. 
 
 The recording of data will be opt-out: you have to explicitly agree with 
 sending usage data. 
 The first time you open a GT tool, that tool will embed a small UI asking you 
 if you want to enable data submission.
 We will save the setting in the your preference directory so it will be 
 shared between all your local images. 
 You can change this setting at any time from the Settings Browser.
 
 For now we will only like to collect data about Spotter.
 By default we will only collect anonymous data about various actions you do 
 in spotter (open, close, search, dive-in, dive-out, select element, etc) 
 without collecting any data what about what query you enter or what search 
 results you get.
 We would also add an optional setting for sending the query text and selected 
 elements.
 
 We will send then the data periodically to our server and when you close the 
 image.
 
 The data that will be send is rather small: 1000 actions require 7kb of data.
 Thus sending an entire day worth of recordings, if all you did that day was 
 searching, should be around 1MB of data.
 
 The recording does not influence the performance of Spotter. Spotter already 
 generates all events of interest as announcements.
 To enable recording we just register a subscriber with the Spotter announcer 
 and store the events of interest.
 
 We would like to get your opinion on this.
 
 
 Cheers,
 GT team
 

-- 
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel  http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.






Re: [Pharo-dev] Recording user actions in GTools

2015-02-26 Thread Stephan Eggermont

On 26/02/15 16:10, Andrei Chis wrote:

The recording of data will be opt-out: *you have to explicitly agree
with sending usage data*.


Uhhm. That's called opt-in.

A practical issue: I have projects/images where it is
absolutely no problem, and projects where I definitely
don't want it. All local images is not a good setting.
For certain directories would work.


Stephan




Re: [Pharo-dev] Slots: and ProcessLocalSlot

2015-02-26 Thread Tudor Girba
Very very nice!

This is really cool.

Doru

On Thu, Feb 26, 2015 at 7:01 PM, Sven Van Caekenberghe s...@stfx.eu wrote:

 *Very* nice !

  On 26 Feb 2015, at 18:55, Guillermo Polito guillermopol...@gmail.com
 wrote:
 
  So I added an example of ProcessLocalSlot (like a thread local from
 other languages) using the existing ProcessLocalVariable. A variable has
 different values depending on the process the code is executing.
 
  Example of usage:
 
  Object subclass: #TestLocal
slots: { #local = ProcessLocalSlot }
classVariables: {  }
category: 'SlotTestGuille'.
 
  object := TestLocal new.
  object local: 55.
  object local.
 
  [ valueInOtherProcess := object local ] fork.
 
  valueInOtherProcess. = nil
 
  [ object local: 'String'.
  valueInOtherProcess := object local ] fork.
 
  valueInOtherProcess. = 'String'
  object local = 55
 
  Code in issue:
 https://pharo.fogbugz.com/f/cases/15004/Add-ProcessLocalSlot
 
  Guille





-- 
www.tudorgirba.com

Every thing has its own flow


Re: [Pharo-dev] zipped and unzipped methods for ByteArray

2015-02-26 Thread stepharo

Why do we have to put everything in string?

why
Zip string: 'hello'
Zip bzip string: 'hello'
Zip gzip string: 'hello'

would not be more modular?
Zip could be a factory and have subclasses.

This is not because can extend classes that we should think about nicer way.

I like for example the DateFormatter strategy related to Date from other 
languages because I can specify the way I want it.


Stef


Le 25/2/15 16:52, Juraj Kubelka a écrit :

25. 2. 2015 v 12:28, Sven Van Caekenberghe s...@stfx.eu:

This seems related to adding 'easy of use' methods to String.

There are many different compression schemes (zip, bzip, bzip2, gzip, ...), are 
we going to add them all ?

How much do we want to couple different parts of the system ?

I prefer to couple the compression schemes with String and ByteArray. Methods 
like #zipped, #unzipped are not that simple and it is not well apparent how to 
use that compression scheme.

Cheers,
Juraj


On 25 Feb 2015, at 16:23, Juraj Kubelka juraj.kube...@gmail.com wrote:

Can I add ByteArray#zipped and #unzipped methods the way it is for String? I 
want to compress bytes before sending through internet, for example.

Do you agree?
Thanks,
Juraj










[Pharo-dev] Rubric versus Athens

2015-02-26 Thread Alain Plantec via Pharo-dev
---BeginMessage---
Hello Nicolai,

I’ve made a first pass.
I’ve not used your Athens* add ons. Instead, raw Athens drawing.
Less clean but done.
Hope it will help to continue Athens integration.

Cheers
Alain
---End Message---


Re: [Pharo-dev] MCVersionInfo: 10% of the image

2015-02-26 Thread Thierry Goubier
2015-02-26 7:58 GMT+01:00 Marcus Denker marcus.den...@inria.fr:


  On 25 Feb 2015, at 23:28, Thierry Goubier thierry.goub...@gmail.com
 wrote:
 
  Hi,
 
  I made a very simple experiment, with a MCLazyVersionInfo, which holds
 its ancestors and stepChildren in WeakArray(s), and loads it from
 repositories on demand.
 
  Installing it on Pharo 40511, and then flushing the Monticello package
 cache, reduces the image by around 5 MB:
 

 Nice!

 Marcus


And it behaves as the non-lazy one.

There are a few things to change GUI-side to avoid an unnecessary loading
of the complete ancestry of all the packages in the image, but this is
workable.

I see two ways of using it:

as an install, flush package cache before release and gain 5MB of RAM. If
you start regularly developping (loading packages, etc...) then new
packages will revert to non-lazy version info (without: 'please wait, I'm
loading ancestry' moments).

as a permanent change in MC. The change is a bit more intrusive (need to
change how working copies are created) but, well, as long as the worked on
packages are inside the in-memory MC package cache, behavior is exactly the
same as a non-lazy version info.

As you prefer.

I added an issue:

https://pharo.fogbugz.com/default.asp?14997

Thierry


Re: [Pharo-dev] MCVersionInfo: 10% of the image

2015-02-26 Thread Marcus Denker

 
 
 And it behaves as the non-lazy one. 
 
 There are a few things to change GUI-side to avoid an unnecessary loading of 
 the complete ancestry of all the packages in the image, but this is workable.
 
 I see two ways of using it:
 
 as an install, flush package cache before release and gain 5MB of RAM. If 
 you start regularly developping (loading packages, etc...) then new packages 
 will revert to non-lazy version info (without: 'please wait, I'm loading 
 ancestry' moments).
 
 as a permanent change in MC. The change is a bit more intrusive (need to 
 change how working copies are created) but, well, as long as the worked on 
 packages are inside the in-memory MC package cache, behavior is exactly the 
 same as a non-lazy version info.
 
 As you prefer.
 

My focus is that we ship an image that is not growing indefinitely… so this 
means it needs to be part of the release.

I don’t care too much that the image is large when I work, but it should not 
come with all this data in memory when it can be calculated (or lazyly loaded) 
when needed.

 I added an issue:
 
 https://pharo.fogbugz.com/default.asp?14997 
 https://pharo.fogbugz.com/default.asp?14997
 

Thanks!

Marcus



Re: [Pharo-dev] MCVersionInfo: 10% of the image

2015-02-26 Thread Thierry Goubier
Ok,

a first slice is in, it's the first solution for now (second is just
extending the scheme).

Loading the slice should install the lazy version and flush the caches
(does merging would initialize the class?)

Thierry

2015-02-26 9:33 GMT+01:00 Marcus Denker marcus.den...@inria.fr:




 And it behaves as the non-lazy one.

 There are a few things to change GUI-side to avoid an unnecessary loading
 of the complete ancestry of all the packages in the image, but this is
 workable.

 I see two ways of using it:

 as an install, flush package cache before release and gain 5MB of RAM.
 If you start regularly developping (loading packages, etc...) then new
 packages will revert to non-lazy version info (without: 'please wait, I'm
 loading ancestry' moments).

 as a permanent change in MC. The change is a bit more intrusive (need to
 change how working copies are created) but, well, as long as the worked on
 packages are inside the in-memory MC package cache, behavior is exactly the
 same as a non-lazy version info.

 As you prefer.


 My focus is that we ship an image that is not growing indefinitely... so
 this means it needs to be part of the release.

 I don't care too much that the image is large when I work, but it should
 not come with all this data in memory when it can be calculated (or lazyly
 loaded) when needed.

 I added an issue:

 https://pharo.fogbugz.com/default.asp?14997


 Thanks!

 Marcus




Re: [Pharo-dev] Using Pharo to Save Human Life

2015-02-26 Thread Onil Goubier
Hi Alexandre,

Thank you very much, we have just started and there is still much work to
be done.
Of course, we will ask pharo community if we need help ...

Regards,
Onil

On Thu, Feb 26, 2015 at 2:50 AM, Alexandre Bergel alexandre.ber...@me.com
wrote:

 Yeah, I have changed the subject for a more accurate one.

 Onil, you are doing a fantastic work: monitoring flood in Jakarta in real
 time is impressive.
 I have enjoyed very much your presentation. Pity the network did not work,
 but the effect is still very strong. I feel humble and respectful when I
 see your goal and vision.

 I am happy that we, as a community, are able to help you. And really, feel
 free to complain about the system you are using. Just ask for help if you
 need.

 Big big clap

 I would love to see your presentation at ESUG.

 Alexandre


  On Feb 25, 2015, at 5:07 PM, stephan step...@stack.nl wrote:
 
  The first FOSDEM video has arrived:
 
  http://mirrors.dotsrc.org/fosdem/2015/devroom-smalltalk/cirela.mp4
 

 --
 _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
 Alexandre Bergel  http://www.bergel.eu
 ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.






-- 
Onil Goubier
Engineer
CIRELA Association
Communication and Information technology for REsiLience to disAsters and
climate change
25, rue Paulhan
78140 Vélizy-Villacoublay, France
Ph. +33 6 67 77 49 93


Re: [Pharo-dev] MCVersionInfo: 10% of the image

2015-02-26 Thread Thierry Goubier
2015-02-26 10:44 GMT+01:00 Marcus Denker marcus.den...@inria.fr:


  On 26 Feb 2015, at 10:15, Thierry Goubier thierry.goub...@gmail.com
 wrote:
 
  Ok,
 
  a first slice is in, it's the first solution for now (second is just
 extending the scheme).
 
  Loading the slice should install the lazy version and flush the caches
 (does merging would initialize the class?)
 

 Works fine with merge, too.

 The 511 image is 23.2MB after. This means with the Scriptloader fix from
 510 together we would over 10MB... or nearly 1/3. Nice!


Ok. Second scheme (get it to work everywhere, everytime) seems to just need
to change MCWorkingAncestryaddAncestor: and MCWorkingCopy addStepChild:

Thierry



 Marcus





Re: [Pharo-dev] MCVersionInfo: 10% of the image

2015-02-26 Thread Thierry Goubier
2015-02-26 10:51 GMT+01:00 Thierry Goubier thierry.goub...@gmail.com:



 2015-02-26 10:44 GMT+01:00 Marcus Denker marcus.den...@inria.fr:


  On 26 Feb 2015, at 10:15, Thierry Goubier thierry.goub...@gmail.com
 wrote:
 
  Ok,
 
  a first slice is in, it's the first solution for now (second is just
 extending the scheme).
 
  Loading the slice should install the lazy version and flush the caches
 (does merging would initialize the class?)
 

 Works fine with merge, too.

 The 511 image is 23.2MB after. This means with the Scriptloader fix from
 510 together we would over 10MB... or nearly 1/3. Nice!


 Ok. Second scheme (get it to work everywhere, everytime) seems to just
 need to change MCWorkingAncestryaddAncestor: and MCWorkingCopy
 addStepChild:


Done. Slice uploaded.Tried with loading Roassal2, then flushing the
Monticello package cache:

MCVersionInfo allInstances size 2

Thierry



 Thierry



 Marcus






Re: [Pharo-dev] How Far We've Come!

2015-02-26 Thread stepharo

Thanks Sean
And I would love to have a nice catalog and easier dependency expression.

BTW: You should really have a look at Block :)
I can tell you :) because now it is stable and starts to be really sexy.


Stef

Le 24/2/15 22:28, Sean P. DeNigris a écrit :

It was so much fun watching the Pharo Days videos! Thanks for recording them
and I hope to be there next time :)

Somewhere halfway through the playlist, it hit me how easily I was
downloading all the projects and images being talked about. I was
copy/pasting one-line Metacello scripts out of github READMEs, clicking in
the Configuration Browser, or downloading the latest code from CI - and it
all just worked!!!

Remember not too long ago when we were passing around custom scripts to load
multiple dependent packages, and explaining to outsiders that we don't need
github because Smalltalk invented SCM (or whatever) while we created the
future invisibly, hidden away from the rest of the world?

After laying down so many building blocks (like FileSystem) that take the
system out of the way of creative expression, it is exciting to finally be
tackling some of the high-impact things... you know the ones we've been
avoiding... like Morphic, development tools, and the text editors.

And the steady streams of new talent and funding seem likely to keep the
successes coming.

So CONGRATULATIONS, Pharo Community We deserve it.

Now get back to work - we've got a future to create ;)



-
Cheers,
Sean
--
View this message in context: 
http://forum.world.st/How-Far-We-ve-Come-tp4807408.html
Sent from the Pharo Smalltalk Developers mailing list archive at Nabble.com.







Re: [Pharo-dev] MCVersionInfo: 10% of the image

2015-02-26 Thread Marcus Denker

 On 26 Feb 2015, at 10:15, Thierry Goubier thierry.goub...@gmail.com wrote:
 
 Ok,
 
 a first slice is in, it's the first solution for now (second is just 
 extending the scheme).
 
 Loading the slice should install the lazy version and flush the caches (does 
 merging would initialize the class?)
 

Works fine with merge, too.

The 511 image is 23.2MB after. This means with the Scriptloader fix from 510 
together we would over 10MB… or nearly 1/3. Nice!

Marcus




Re: [Pharo-dev] MCVersionInfo: 10% of the image

2015-02-26 Thread Marcus Denker

 On 26 Feb 2015, at 11:11, Thierry Goubier thierry.goub...@gmail.com wrote:
 
 
 
 2015-02-26 10:51 GMT+01:00 Thierry Goubier thierry.goub...@gmail.com 
 mailto:thierry.goub...@gmail.com:
 
 
 2015-02-26 10:44 GMT+01:00 Marcus Denker marcus.den...@inria.fr 
 mailto:marcus.den...@inria.fr:
 
  On 26 Feb 2015, at 10:15, Thierry Goubier thierry.goub...@gmail.com 
  mailto:thierry.goub...@gmail.com wrote:
 
  Ok,
 
  a first slice is in, it's the first solution for now (second is just 
  extending the scheme).
 
  Loading the slice should install the lazy version and flush the caches 
  (does merging would initialize the class?)
 
 
 Works fine with merge, too.
 
 The 511 image is 23.2MB after. This means with the Scriptloader fix from 510 
 together we would over 10MB… or nearly 1/3. Nice!
 
 Ok. Second scheme (get it to work everywhere, everytime) seems to just need 
 to change MCWorkingAncestryaddAncestor: and MCWorkingCopy addStepChild:
 
 Done. Slice uploaded.Tried with loading Roassal2, then flushing the 
 Monticello package cache:
 
 MCVersionInfo allInstances size 2
 

Thanks!!

Marcus



Re: [Pharo-dev] Recording user actions in GTools

2015-02-26 Thread Juraj Kubelka

 26. 2. 2015 v 19:04, Peter Uhnák i.uh...@gmail.com:
 
 before the Pharo code freeze, a small extension to GT tools (300 lines of 
 code) that records and sends usage data. 
 
 various actions you do in spotter (open, close, search, dive-in, dive-out, 
 select element, etc)
 If there are no tooltips what shortcuts to use people cannot dive-in and 
 there is nothing to record :)... so please please :)

There are already tooltips, but likely in a version which is about to be 
released for Pharo 4:



You can try Moose 5.1 for now.

Cheers,
Juraj

Re: [Pharo-dev] The evil twin in 40516

2015-02-26 Thread Johan Fabry

This is excellent! 

 On Feb 26, 2015, at 20:07, Marcus Denker marcus.den...@inria.fr wrote:
 
 Hi,
 
 In 40516 there is now a strange, but rather powerful mechanism for 
 CompiledMethod: the Twin.
 
 What does that do?
 
 you can call on a method #createTwin
 
   (ReflectivityExamples#exampleMethod) createTwin. 
 
 after this, the CompiledMethod has a high-level representation (the AST) 
 attached that itself references the CompiledMethod
 (they form a twin).
 
   (ReflectivityExamples#exampleMethod) reflectiveMethod 
 
 The fun thing is now that one can install either in the class. Call 
 #invalidate to make sure the reflective method is installed.
 
 ReflectiveMethod implements #run:with:in: which calls a compilation hook (too 
 re-create from the AST) and then installs that in the 
 method dict and then executes the method:
 
   (ReflectivityExamples#exampleMethod) createTwin. 
   (ReflectivityExamples#exampleMethod) invalidate. 
   self assert: (ReflectivityExamples#exampleMethod) class = 
 ReflectiveMethod.
   self assert: ReflectivityExamples new exampleMethod = 5.
   self assert: (ReflectivityExamples#exampleMethod) class = 
 CompiledMethod. 
 
 Which means that this gives us an in-image, on-demand JIT compiler 
 AST-Bytecode. In 50 lines of code.
 
 e.g. try on Morph:
 
 Morph methods do: #createTwin.
 Morph methods do: #invalidate.
 
 Counting which twin is installed shows us the working set of Morph:
 
 (Morph methods select: [ :each | each class = CompiledMethod ]) size
 
 some 330 method out of nearly 900….
 
 So what can one do with this? In essence this turns the AST into a reflective 
 representation for Methods
 (if you care to set up twin creation + invalidation correctly).
 
 What will this allow us to do? stay tuned...
 
   Marcus
 
 
 
 



--- Save our in-boxes! http://emailcharter.org ---

Johan Fabry   -   http://pleiad.cl/~jfabry
PLEIAD lab  -  Computer Science Department (DCC)  -  University of Chile




[Pharo-dev] The evil twin in 40516

2015-02-26 Thread Marcus Denker
Hi,

In 40516 there is now a strange, but rather powerful mechanism for 
CompiledMethod: the Twin.

What does that do?

you can call on a method #createTwin

(ReflectivityExamples#exampleMethod) createTwin. 

after this, the CompiledMethod has a high-level representation (the AST) 
attached that itself references the CompiledMethod
(they form a twin).

(ReflectivityExamples#exampleMethod) reflectiveMethod 

The fun thing is now that one can install either in the class. Call #invalidate 
to make sure the reflective method is installed.

ReflectiveMethod implements #run:with:in: which calls a compilation hook (too 
re-create from the AST) and then installs that in the 
method dict and then executes the method:

(ReflectivityExamples#exampleMethod) createTwin. 
(ReflectivityExamples#exampleMethod) invalidate. 
self assert: (ReflectivityExamples#exampleMethod) class = 
ReflectiveMethod.
self assert: ReflectivityExamples new exampleMethod = 5.
self assert: (ReflectivityExamples#exampleMethod) class = 
CompiledMethod. 

Which means that this gives us an in-image, on-demand JIT compiler 
AST-Bytecode. In 50 lines of code.

e.g. try on Morph:

Morph methods do: #createTwin.
Morph methods do: #invalidate.

Counting which twin is installed shows us the working set of Morph:

(Morph methods select: [ :each | each class = CompiledMethod ]) size

some 330 method out of nearly 900….

So what can one do with this? In essence this turns the AST into a reflective 
representation for Methods
(if you care to set up twin creation + invalidation correctly).

What will this allow us to do? stay tuned...

Marcus





Re: [Pharo-dev] The evil twin in 40516

2015-02-26 Thread Alexandre Bergel
Wow!!!
This means that one can call #createTwin, modify the AST, and simply call it!
Impressive!!!
Is it per default in Pharo 40516?

Alexandre


 On Feb 26, 2015, at 8:07 PM, Marcus Denker marcus.den...@inria.fr wrote:
 
 Hi,
 
 In 40516 there is now a strange, but rather powerful mechanism for 
 CompiledMethod: the Twin.
 
 What does that do?
 
 you can call on a method #createTwin
 
   (ReflectivityExamples#exampleMethod) createTwin. 
 
 after this, the CompiledMethod has a high-level representation (the AST) 
 attached that itself references the CompiledMethod
 (they form a twin).
 
   (ReflectivityExamples#exampleMethod) reflectiveMethod 
 
 The fun thing is now that one can install either in the class. Call 
 #invalidate to make sure the reflective method is installed.
 
 ReflectiveMethod implements #run:with:in: which calls a compilation hook (too 
 re-create from the AST) and then installs that in the 
 method dict and then executes the method:
 
   (ReflectivityExamples#exampleMethod) createTwin. 
   (ReflectivityExamples#exampleMethod) invalidate. 
   self assert: (ReflectivityExamples#exampleMethod) class = 
 ReflectiveMethod.
   self assert: ReflectivityExamples new exampleMethod = 5.
   self assert: (ReflectivityExamples#exampleMethod) class = 
 CompiledMethod. 
 
 Which means that this gives us an in-image, on-demand JIT compiler 
 AST-Bytecode. In 50 lines of code.
 
 e.g. try on Morph:
 
 Morph methods do: #createTwin.
 Morph methods do: #invalidate.
 
 Counting which twin is installed shows us the working set of Morph:
 
 (Morph methods select: [ :each | each class = CompiledMethod ]) size
 
 some 330 method out of nearly 900….
 
 So what can one do with this? In essence this turns the AST into a reflective 
 representation for Methods
 (if you care to set up twin creation + invalidation correctly).
 
 What will this allow us to do? stay tuned...
 
   Marcus
 
 
 

-- 
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel  http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.






[Pharo-dev] [pharo-project/pharo-core]

2015-02-26 Thread GitHub
  Branch: refs/tags/40516
  Home:   https://github.com/pharo-project/pharo-core


[Pharo-dev] [pharo-project/pharo-core] 657ef3: 40516

2015-02-26 Thread GitHub
  Branch: refs/heads/4.0
  Home:   https://github.com/pharo-project/pharo-core
  Commit: 657ef34022736524166273d950d8b0adcb6f691a
  
https://github.com/pharo-project/pharo-core/commit/657ef34022736524166273d950d8b0adcb6f691a
  Author: Jenkins Build Server bo...@pharo-project.org
  Date:   2015-02-26 (Thu, 26 Feb 2015)

  Changed paths:
R KernelTests.package/DelayTest.class/instance/testing/testSemaphore.st
A 
KernelTests.package/DelayTest.class/instance/testing/testSemaphoreNoTimeout.st
A 
KernelTests.package/DelayTest.class/instance/testing/testSemaphoreTimeout.st
R 
KernelTests.package/DelayTest.class/instance/testing/testTimeoutSemaphoreAfterMSecs.st
A Reflectivity.package/MetaLink.class/README.md
A Reflectivity.package/MetaLink.class/definition.st
A Reflectivity.package/MetaLink.class/instance/accessing/metaObject.st
A Reflectivity.package/MetaLink.class/instance/accessing/metaObject_.st
A Reflectivity.package/MetaLink.class/instance/accessing/selector.st
A Reflectivity.package/MetaLink.class/instance/accessing/selector_.st
M 
Reflectivity.package/ReflectiveMethod.class/instance/invalidate/destroyTwin.st
R ScriptLoader40.package/ScriptLoader.class/instance/pharo - 
scripts/script515.st
A ScriptLoader40.package/ScriptLoader.class/instance/pharo - 
scripts/script516.st
R ScriptLoader40.package/ScriptLoader.class/instance/pharo - 
updates/update40515.st
A ScriptLoader40.package/ScriptLoader.class/instance/pharo - 
updates/update40516.st
M 
ScriptLoader40.package/ScriptLoader.class/instance/public/commentForCurrentUpdate.st
R Slot.package/MetaLink.class/README.md
R Slot.package/MetaLink.class/definition.st
R Slot.package/MetaLink.class/instance/accessing/metaObject.st
R Slot.package/MetaLink.class/instance/accessing/metaObject_.st
R Slot.package/MetaLink.class/instance/accessing/selector.st
R Slot.package/MetaLink.class/instance/accessing/selector_.st
A Slot.package/ProcessLocalSlot.class/README.md
A Slot.package/ProcessLocalSlot.class/definition.st
A Slot.package/ProcessLocalSlot.class/instance/code generation/emitStore_.st
A Slot.package/ProcessLocalSlot.class/instance/code generation/emitValue_.st
A Slot.package/ProcessLocalSlot.class/instance/initialization/initialize_.st
A Slot.package/ProcessLocalSlot.class/instance/meta-object-protocol/read_.st
A 
Slot.package/ProcessLocalSlot.class/instance/meta-object-protocol/wantsInitalization.st
A 
Slot.package/ProcessLocalSlot.class/instance/meta-object-protocol/write_to_.st
A Slot.package/PropertySlot.class/instance/code generation/emitStore_.st
A Slot.package/PropertySlot.class/instance/code generation/emitValue_.st
M Slot.package/Slot.class/instance/meta-object-protocol/link_.st
R Slot.package/WeakSlot.class/instance/as yet unclassified/emitStore_.st
R Slot.package/WeakSlot.class/instance/as yet unclassified/emitValue_.st
R Slot.package/WeakSlot.class/instance/as yet unclassified/initialize_.st
R Slot.package/WeakSlot.class/instance/as yet unclassified/read_.st
R Slot.package/WeakSlot.class/instance/as yet 
unclassified/wantsInitalization.st
R Slot.package/WeakSlot.class/instance/as yet unclassified/write_to_.st
A Slot.package/WeakSlot.class/instance/code generation/emitStore_.st
A Slot.package/WeakSlot.class/instance/code generation/emitValue_.st
A Slot.package/WeakSlot.class/instance/initialization/initialize_.st
A Slot.package/WeakSlot.class/instance/meta-object-protocol/read_.st
A 
Slot.package/WeakSlot.class/instance/meta-object-protocol/wantsInitalization.st
A Slot.package/WeakSlot.class/instance/meta-object-protocol/write_to_.st

  Log Message:
  ---
  40516
14990 MonitorDelay#signalLock:afterMSecs:inMonitor:queue: should return 
MonitorDelay object
https://pharo.fogbugz.com/f/cases/14990

15003 Bytecode Gen for Property Slot + small fixes reflectivity
https://pharo.fogbugz.com/f/cases/15003

15004 Add ProcessLocalSlot
https://pharo.fogbugz.com/f/cases/15004

http://files.pharo.org/image/40/40516.zip




Re: [Pharo-dev] Recording user actions in GTools

2015-02-26 Thread Peter Uhnák

 before the Pharo code freeze, a small extension to GT tools (300 lines of
 code) that records and sends usage data.

 various actions you do in spotter (open, close, search, dive-in, dive-out,
 select element, etc)

If there are no tooltips what shortcuts to use people cannot dive-in and
there is nothing to record :)... so please please :)
But I certainly don't mind.

Peter


Re: [Pharo-dev] The evil twin in 40516

2015-02-26 Thread Nicolai Hess
Cool!

(spotter does not work on this methods, do we have to change this
in the class ReactiveMethod or spotter?)


Re: [Pharo-dev] The evil twin in 40516

2015-02-26 Thread Nicolai Hess
Oh and inspecting the ReflectiveMethod ast with GTInspector has
some strange effect

2015-02-27 0:24 GMT+01:00 Nicolai Hess nicolaih...@web.de:

 Cool!

 (spotter does not work on this methods, do we have to change this
 in the class ReactiveMethod or spotter?)



Re: [Pharo-dev] zipped and unzipped methods for ByteArray

2015-02-26 Thread Nicolas Cellier
2015-02-26 22:37 GMT+01:00 stepharo steph...@free.fr:

 Why do we have to put everything in string?

 why
 Zip string: 'hello'
 Zip bzip string: 'hello'
 Zip gzip string: 'hello'

 would not be more modular?
 Zip could be a factory and have subclasses.

 This is not because can extend classes that we should think about nicer
 way.

 I like for example the DateFormatter strategy related to Date from other
 languages because I can specify the way I want it.

 Stef


Because somehow you can easily pipe unary messages.

 ^'hello' zipped base64Encoded

versus:

(Encoder base64 byteArray: (Zip gzip string: 'hello')).

I much much prefer to read/maintain 1st version
The 2nd one looks like overkill verbiage to me.



 Le 25/2/15 16:52, Juraj Kubelka a écrit :

  25. 2. 2015 v 12:28, Sven Van Caekenberghe s...@stfx.eu:

 This seems related to adding 'easy of use' methods to String.

 There are many different compression schemes (zip, bzip, bzip2, gzip,
 ...), are we going to add them all ?

 How much do we want to couple different parts of the system ?

 I prefer to couple the compression schemes with String and ByteArray.
 Methods like #zipped, #unzipped are not that simple and it is not well
 apparent how to use that compression scheme.

 Cheers,
 Juraj

  On 25 Feb 2015, at 16:23, Juraj Kubelka juraj.kube...@gmail.com wrote:

 Can I add ByteArray#zipped and #unzipped methods the way it is for
 String? I want to compress bytes before sending through internet, for
 example.

 Do you agree?
 Thanks,
 Juraj









Re: [Pharo-dev] The evil twin in 40516

2015-02-26 Thread Marcus Denker

 On 27 Feb 2015, at 00:24, Nicolai Hess nicolaih...@web.de wrote:
 
 Cool!
 
 (spotter does not work on this methods, do we have to change this
 in the class ReactiveMethod or spotter?)

we need to copy the methods over…

Marcus


Re: [Pharo-dev] Bug? JPEG reading ignores EXIF Orientation

2015-02-26 Thread Sean P. DeNigris
stepharo wrote
 We should improve the Image support because it is dated.

I've always found the replace me with aTransformMorph on resize thing
baffling, so I started re-implementing a bare-bones SimpleImageMorph. Right
now it holds onto the original form unaltered, but warps it to its inner
bounds, and you can also specify to fix the aspect ratio. For the simple
cases that cover 99% of my usage, it works perfectly. See
https://github.com/seandenigris/SimpleImageMorph for more info.



-
Cheers,
Sean
--
View this message in context: 
http://forum.world.st/Bug-JPEG-reading-ignores-EXIF-Orientation-tp4807446p4808124.html
Sent from the Pharo Smalltalk Developers mailing list archive at Nabble.com.



Re: [Pharo-dev] Recording user actions in GTools

2015-02-26 Thread Peter Uhnák

 There are already tooltips, but likely in a version which is about to be
 released for Pharo 4:
 You can try Moose 5.1 for now.

Ah! I was looking at Pharo image; yes, this is what I was looking for. :)

Peter


Re: [Pharo-dev] The evil twin in 40516

2015-02-26 Thread Marcus Denker

 On 27 Feb 2015, at 00:15, Alexandre Bergel alexandre.ber...@me.com wrote:
 
 Wow!!!
 This means that one can call #createTwin, modify the AST, and simply call it!
 Impressive!!!

You need to handle invalidation yourself, too. (for now). 
I want to first concentrate on purely “annotation” based MOP: instead of 
changing
the AST it is annotated with MetaLinks. When a link is set, the twin creation + 
invalidation
happens. When the last Link is removed, the twin disappears automatically. 

 Is it per default in Pharo 40516?

Yes.

Marcus


Re: [Pharo-dev] The evil twin in 40516

2015-02-26 Thread Marcus Denker

 On 27 Feb 2015, at 00:26, Marcus Denker marcus.den...@inria.fr wrote:
 
 
 On 27 Feb 2015, at 00:15, Alexandre Bergel alexandre.ber...@me.com wrote:
 
 Wow!!!
 This means that one can call #createTwin, modify the AST, and simply call it!
 Impressive!!!
 
 You need to handle invalidation yourself, too. (for now). 
 I want to first concentrate on purely “annotation” based MOP: instead of 
 changing
 the AST it is annotated with MetaLinks. When a link is set, the twin creation 
 + invalidation
 happens. When the last Link is removed, the twin disappears automatically. 
 
 Is it per default in Pharo 40516?
 
 Yes.
 

and it does not yet recompile… 

recompileAST
self flag: #TBD. compile the AST”

:-)




[Pharo-dev] Easy way to write a proxy?

2015-02-26 Thread Alexandre Bergel
Hi!

I have a near-to-be naive question. Maybe there is something obvious, but I 
cannot see it. Consider the following implementation of a proxy:

-=-=-=-=-=-=-=-=-=-=-=-=
Object subclass: #MyProxy
instanceVariableNames: 'object'.

MyProxy  object: anObject
object := anObject

MyProxy  doesNotUnderstand: aMessage
^ object perform: aMessage selector withArguments: aMessage arguments

Object  wrap
self becomeForward: (MyProxy new object: self; yourself)
-=-=-=-=-=-=-=-=-=-=-=-=

The problem is with wrap. After the becomeForward:, MyProxy has itself in the 
object variable. Even self is apparently subject to the #become.

It means that the following code loop indefinitely

-=-=-=-=-=-=-=-=-=-=-=-=
d := Dictionary new.
d wrap.
d add: #foo - 10
-=-=-=-=-=-=-=-=-=-=-=-=

I know there is Mariano’s library to write proxy. But I still wondering whether 
this could be done simply.
Any idea how to simply create a proxy?

Cheers,
Alexandre

-- 
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel  http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.