[Squeak-dev] World Menu Registry

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
44 messages Options
123
Reply | Threaded
Open this post in threaded view
|

Re: Magic (was Re: Re: Menu Registries)

Nicolas Cellier
2010/4/28 Andreas Raab <[hidden email]>:

> On 4/28/2010 11:40 AM, Nicolas Cellier wrote:
>>
>> It's a question of tools for sure, with a textual representation we
>> can manage versions and exchange objects more easily.
>> But it's also a question of quality process. Selling the object
>> without the building process is like we lost the recipe.
>
> I like this, it's a great quote. Did you come up with it? I'd like to
> attribute it properly.
>

Thanks, I just tried to put my words on others' ideas ;)
I don't intend to patent. Try google for anteriority search if you want,

Nicolas

> Cheers,
>  - Andreas
>
>> Textual representation is limitating (a good example is a programmed
>> icon versus an artistic one), but easier to manage and reproduce.
>>
>> When I worked with VW, I used objects a lot at the beginning, but when
>> bored porting from an image to the other (the problem being how to be
>> sure I did not forget an object), I cut my wings and fell back to
>> text.
>>
>> Nicolas
>>
>>
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: [Pharo-project] [squeak-dev] Re: Menu Registries

Alain Plantec-4
In reply to this post by Hannes Hirzel
Andreas Raab a écrit :
> On 4/28/2010 11:32 PM, Stéphane Ducasse wrote:
>> Good but what is your point?
>
> Compatibility and simplicity.
Come on Andreas, "simple" is not so much more precise than "cool"

and I don't think that having:

------------------
Editor class>>blinkingCursor
  ^ BlinkingCursor ifNil: [ true ]

EditorSetting class>>editorSettingsOn: aBuilder
  <systemsettings>
  (aBuilder setting: #blinkingCursor)
    label:'Blinking Text Cursor')
    parent: #Morphic;
    target: Editor;
    description: 'When true, the text cursor will blink.'
-------------------

is so much more "complicated" than

-------------------
Editor class>>blinkingCursor
  <preference: 'Blinking Text Cursor'
    category: 'Morphic'
    description: 'When true, the text cursor will blink.'
    type: #Boolean>
  ^ BlinkingCursor ifNil: [ true ]
-------------------

You prefer UI+domain mixing, we prefer UI separated from domain.
And yes, the SettingBrowser implementation could be improved.
I know, but I'm happy because it can be removed or remade
without any other consequence.
And compare it to the PreferenceBrowser ...

Cheers
Alain






Reply | Threaded
Open this post in threaded view
|

Re: Menu Registries

Andreas.Raab
On 4/29/2010 3:21 AM, Alain Plantec wrote:
> Andreas Raab a écrit :
>> On 4/28/2010 11:32 PM, Stéphane Ducasse wrote:
>>> Good but what is your point?
>>
>> Compatibility and simplicity.
> Come on Andreas, "simple" is not so much more precise than "cool"

That comment deserves a more detailed exploration than I want to put
into this message. You can find my response here:

http://squeakingalong.wordpress.com/2010/04/30/measuring-simplicity/

> and I don't think that having:
>
> ------------------
> Editor class>>blinkingCursor
> ^ BlinkingCursor ifNil: [ true ]
>
> EditorSetting class>>editorSettingsOn: aBuilder
> <systemsettings>
> (aBuilder setting: #blinkingCursor)
> label:'Blinking Text Cursor')
> parent: #Morphic;
> target: Editor; description: 'When true, the text cursor will blink.'
> -------------------
>
> is so much more "complicated" than
>
> -------------------
> Editor class>>blinkingCursor
> <preference: 'Blinking Text Cursor'
> category: 'Morphic'
> description: 'When true, the text cursor will blink.'
> type: #Boolean>
> ^ BlinkingCursor ifNil: [ true ]
> -------------------

You're right, by itself it may not be "so much more complicated". But
isn't this forgetting a few things? Like for example, that not only are
you adding the extra method, but also an extra class and an extra
package? This gets you from a single entity (the domain code) to four
entities (the domain code, the builder method, class and package). In
terms of both conceptual and interface simplicity that seems significant
(and a dozen of messages in the builder all add to interface complexity).

BTW, I want to point out something important here. I'm not saying your
approach is "bad". Good and bad, black and white, are not categories
that I use for evaluating software design. I leave that to the people
with overly simplified views on software development ;-) There are only
different trade-offs for different goals. Your approach is perfectly
reasonable for a given set of goals and trade-offs. If there is a need
to have specific fine-grained control over the UI to particular
preferences, I would choose precisely the same approach - make a package
with views for the values that I want to modify. It's a perfectly fine
approach for such a set of goals.

Moreover, "simplicity" isn't an absolute attribute of software.
Simplicity is a tradeoff. It is often worthwhile to trade off
simplicity, for example when adding valuable new features.

So my claim here is not about "good" and "bad". My claim is this:

1. The approach in Squeak is measurably simpler than yours. It may not
fit your goals, you may need a different approach, that's quite
possible. But there are numbers we can put on things to compare them and
if we put the numbers on then Squeak's approach is simpler.

2. Because of the difference in interface complexity, I expect Squeak's
approach will be easier to support in the long term. There's no proof
for that, but I think the claim is valid, and I will watch the future
developments in both Pharo and Squeak with interest.

3. Your initial design choice of using a builder framework for
preferences implied the later complexity. Because the approach requires
adding non-domain code to core classes it creates pressure to put this
code elsewhere and to package that code separately. It's a valuable
lesson about the impact of early design choices.

> You prefer UI+domain mixing, we prefer UI separated from domain.

I'm missing something. What UI+domain mixing? There is no UI code in
Squeak's preference tags. There is only domain code and a method tag for
discovery of the preference. Only Pharo has UI (builder) code; there is
no equivalent in Squeak's preference tags.

> And yes, the SettingBrowser implementation could be improved.
> I know, but I'm happy because it can be removed or remade
> without any other consequence.
> And compare it to the PreferenceBrowser ...

I'm not certain what your point here is. I'm only talking about
preference declaration, not about how the preference browser functions.
PreferenceBrowser itself is reloadable in Squeak 4.1 and one of the
packages that I customarily unload for creating smaller images, because
I'm quite happy to set my preferences by sending message to objects
directly :-)

Cheers,
   - Andreas

Reply | Threaded
Open this post in threaded view
|

Re: Menu Registries

Hannes Hirzel
Steve Wessels wrote above

<citation>
Unifying the docking bar and world menu registry is a good idea and I
would like to see a uniform approach.  I'm frankly unattached to how
we do it just that we get over this and do it.  It's an old problem
with multiple solutions proposed in the past.  We should pick a
strategy and go forward.  And to further minimize churn I recommend
that if someone is going to write this code it should be stated here
and we can all evaluate it.
</citation>

I am not attached to a particular solution either.

Are there any news regarding a menu registry solution?
Is somebody of the commiters working on a solution?

--Hannes



On 4/30/10, Andreas Raab <[hidden email]> wrote:

> On 4/29/2010 3:21 AM, Alain Plantec wrote:
>> Andreas Raab a écrit :
>>> On 4/28/2010 11:32 PM, Stéphane Ducasse wrote:
>>>> Good but what is your point?
>>>
>>> Compatibility and simplicity.
>> Come on Andreas, "simple" is not so much more precise than "cool"
>
> That comment deserves a more detailed exploration than I want to put
> into this message. You can find my response here:
>
> http://squeakingalong.wordpress.com/2010/04/30/measuring-simplicity/
>
>> and I don't think that having:
>>
>> ------------------
>> Editor class>>blinkingCursor
>> ^ BlinkingCursor ifNil: [ true ]
>>
>> EditorSetting class>>editorSettingsOn: aBuilder
>> <systemsettings>
>> (aBuilder setting: #blinkingCursor)
>> label:'Blinking Text Cursor')
>> parent: #Morphic;
>> target: Editor; description: 'When true, the text cursor will blink.'
>> -------------------
>>
>> is so much more "complicated" than
>>
>> -------------------
>> Editor class>>blinkingCursor
>> <preference: 'Blinking Text Cursor'
>> category: 'Morphic'
>> description: 'When true, the text cursor will blink.'
>> type: #Boolean>
>> ^ BlinkingCursor ifNil: [ true ]
>> -------------------
>
> You're right, by itself it may not be "so much more complicated". But
> isn't this forgetting a few things? Like for example, that not only are
> you adding the extra method, but also an extra class and an extra
> package? This gets you from a single entity (the domain code) to four
> entities (the domain code, the builder method, class and package). In
> terms of both conceptual and interface simplicity that seems significant
> (and a dozen of messages in the builder all add to interface complexity).
>
> BTW, I want to point out something important here. I'm not saying your
> approach is "bad". Good and bad, black and white, are not categories
> that I use for evaluating software design. I leave that to the people
> with overly simplified views on software development ;-) There are only
> different trade-offs for different goals. Your approach is perfectly
> reasonable for a given set of goals and trade-offs. If there is a need
> to have specific fine-grained control over the UI to particular
> preferences, I would choose precisely the same approach - make a package
> with views for the values that I want to modify. It's a perfectly fine
> approach for such a set of goals.
>
> Moreover, "simplicity" isn't an absolute attribute of software.
> Simplicity is a tradeoff. It is often worthwhile to trade off
> simplicity, for example when adding valuable new features.
>
> So my claim here is not about "good" and "bad". My claim is this:
>
> 1. The approach in Squeak is measurably simpler than yours. It may not
> fit your goals, you may need a different approach, that's quite
> possible. But there are numbers we can put on things to compare them and
> if we put the numbers on then Squeak's approach is simpler.
>
> 2. Because of the difference in interface complexity, I expect Squeak's
> approach will be easier to support in the long term. There's no proof
> for that, but I think the claim is valid, and I will watch the future
> developments in both Pharo and Squeak with interest.
>
> 3. Your initial design choice of using a builder framework for
> preferences implied the later complexity. Because the approach requires
> adding non-domain code to core classes it creates pressure to put this
> code elsewhere and to package that code separately. It's a valuable
> lesson about the impact of early design choices.
>
>> You prefer UI+domain mixing, we prefer UI separated from domain.
>
> I'm missing something. What UI+domain mixing? There is no UI code in
> Squeak's preference tags. There is only domain code and a method tag for
> discovery of the preference. Only Pharo has UI (builder) code; there is
> no equivalent in Squeak's preference tags.
>
>> And yes, the SettingBrowser implementation could be improved.
>> I know, but I'm happy because it can be removed or remade
>> without any other consequence.
>> And compare it to the PreferenceBrowser ...
>
> I'm not certain what your point here is. I'm only talking about
> preference declaration, not about how the preference browser functions.
> PreferenceBrowser itself is reloadable in Squeak 4.1 and one of the
> packages that I customarily unload for creating smaller images, because
> I'm quite happy to set my preferences by sending message to objects
> directly :-)
>
> Cheers,
>    - Andreas
>
>

123