Menus and cmd keys considered quite, quite, mad

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

Menus and cmd keys considered quite, quite, mad

timrowledge
I wanted to add a little cmd key hack to the debugger to print numbers in hex - useful when debugging the VM in sim etc. Eventually I found a way to solve my immediate needs but along the path I found a dazzlingly complex intertwingled mess of code for menus and cmd key handling.

Part of it is likely  because of the confusion inherent to having two separate UI systems that aren’t quite separate. For example StringHolder class>>#yellowButtonMenuItems includes
                        {'make project link (P)' translated. #makeProjectLink}.
which
a) annoyed me because I want to use cmd-shift-p for my printItHex
b) seems to be a bit odd to have in a text editor menu, and very much so in a code editor menu
c) doesn’t even work in Morphic so far as I can tell (PluggableTextMorph does not understand #makeProjectLink)

Also when building menus - which is done for every menu button press! - we end up doing a scan of all the methods (for menu related pragmas) of every class that could possibly be involved. This is even more insane than using #isKindOf: within UI code. Perhaps one could argue that it isn’t quite completely insane on multi-core/multi-GHz/megaRam machines but on anything slower ( like the Pi, a rather important platform for public awareness and outreach) it can ruin the UI experience.

The current system reminds me unpleasantly of the PenPoint/Go UI dating back to ’89 or so; their hardware was nominally several times faster than our Active Book, and they proudly proclaimed how it was all carefully optimised code and yet it was grindingly slow to do anything in the UI. The Active Book was a mere 8MHz ARM2 (no caches, not even an instruction prefect queue, 1Mb RAM for everything including the screen and filing system) and running that terrible slow nonsense called Smalltalk that everyone knew was slow as slow. Many years later I met one of the developers and it turned out that their framework carefully built menus by checking here, looking there, seeing if a string needed translating, having a tea-break and finally asking a complex graphics subsystem to render something. The Active Book code bitblt’d a menu form to the screen.

Ideally menus should be pre-built and cached, with some cache-flushing algorithm connected to anything that changes what should be in them. Such as adding a new menu related pragma.

I also spotted some code where menu getting selectors are examined to see how many arguments they take and then assorted #perform incantations are used. In general abetter option is to make use of the execution machinery and just send the most flexible message. Implement it at some sensible root to re-try with a simpler version if needed.

I wish I had time to clean this up but I have to make VM changes to support a largish number of Scratch users and my brain is about ready to explode.

tim
--
tim Rowledge; [hidden email]; http://www.rowledge.org/tim
29A, the hexadecimal of the Beast.



Reply | Threaded
Open this post in threaded view
|

Re: Menus and cmd keys considered quite, quite, mad

Tobias Pape
Hi Tim,

On 21.10.2015, at 23:35, tim Rowledge <[hidden email]> wrote:

> I wanted to add a little cmd key hack to the debugger to print numbers in hex - useful when debugging the VM in sim etc. Eventually I found a way to solve my immediate needs but along the path I found a dazzlingly complex intertwingled mess of code for menus and cmd key handling.
>
> Part of it is likely  because of the confusion inherent to having two separate UI systems that aren’t quite separate. For example StringHolder class>>#yellowButtonMenuItems includes
> {'make project link (P)' translated. #makeProjectLink}.
> which
> a) annoyed me because I want to use cmd-shift-p for my printItHex
> b) seems to be a bit odd to have in a text editor menu, and very much so in a code editor menu
> c) doesn’t even work in Morphic so far as I can tell (PluggableTextMorph does not understand #makeProjectLink)
>
> Also when building menus - which is done for every menu button press! - we end up doing a scan of all the methods (for menu related pragmas) of every class that could possibly be involved. This is even more insane than using #isKindOf: within UI code. Perhaps one could argue that it isn’t quite completely insane on multi-core/multi-GHz/megaRam machines but on anything slower ( like the Pi, a rather important platform for public awareness and outreach) it can ruin the UI experience.
>
> The current system reminds me unpleasantly of the PenPoint/Go UI dating back to ’89 or so; their hardware was nominally several times faster than our Active Book, and they proudly proclaimed how it was all carefully optimised code and yet it was grindingly slow to do anything in the UI. The Active Book was a mere 8MHz ARM2 (no caches, not even an instruction prefect queue, 1Mb RAM for everything including the screen and filing system) and running that terrible slow nonsense called Smalltalk that everyone knew was slow as slow. Many years later I met one of the developers and it turned out that their framework carefully built menus by checking here, looking there, seeing if a string needed translating, having a tea-break and finally asking a complex graphics subsystem to render something. The Active Book code bitblt’d a menu form to the screen.
>
> Ideally menus should be pre-built and cached, with some cache-flushing algorithm connected to anything that changes what should be in them. Such as adding a new menu related pragma.
>
> I also spotted some code where menu getting selectors are examined to see how many arguments they take and then assorted #perform incantations are used. In general abetter option is to make use of the execution machinery and just send the most flexible message. Implement it at some sensible root to re-try with a simpler version if needed.
>
> I wish I had time to clean this up but I have to make VM changes to support a largish number of Scratch users and my brain is about ready to explode.

Speaking for the pragma-based menu system, yes, there's room for
improvement, and once Start-of-Semester stress settles down,
I'll take on it.

Best regards
        -Tobias


Reply | Threaded
Open this post in threaded view
|

Re: Menus and cmd keys considered quite, quite, mad

Tobias Pape

On 21.10.2015, at 23:47, Tobias Pape <[hidden email]> wrote:

> Hi Tim,
>
> On 21.10.2015, at 23:35, tim Rowledge <[hidden email]> wrote:
>
>> I wanted to add a little cmd key hack to the debugger to print numbers in hex - useful when debugging the VM in sim etc. Eventually I found a way to solve my immediate needs but along the path I found a dazzlingly complex intertwingled mess of code for menus and cmd key handling.
>>
>> Part of it is likely  because of the confusion inherent to having two separate UI systems that aren’t quite separate. For example StringHolder class>>#yellowButtonMenuItems includes
>> {'make project link (P)' translated. #makeProjectLink}.
>> which
>> a) annoyed me because I want to use cmd-shift-p for my printItHex
>> b) seems to be a bit odd to have in a text editor menu, and very much so in a code editor menu
>> c) doesn’t even work in Morphic so far as I can tell (PluggableTextMorph does not understand #makeProjectLink)
>>
>> Also when building menus - which is done for every menu button press! - we end up doing a scan of all the methods (for menu related pragmas) of every class that could possibly be involved. This is even more insane than using #isKindOf: within UI code. Perhaps one could argue that it isn’t quite completely insane on multi-core/multi-GHz/megaRam machines but on anything slower ( like the Pi, a rather important platform for public awareness and outreach) it can ruin the UI experience.
>>
>> The current system reminds me unpleasantly of the PenPoint/Go UI dating back to ’89 or so; their hardware was nominally several times faster than our Active Book, and they proudly proclaimed how it was all carefully optimised code and yet it was grindingly slow to do anything in the UI. The Active Book was a mere 8MHz ARM2 (no caches, not even an instruction prefect queue, 1Mb RAM for everything including the screen and filing system) and running that terrible slow nonsense called Smalltalk that everyone knew was slow as slow. Many years later I met one of the developers and it turned out that their framework carefully built menus by checking here, looking there, seeing if a string needed translating, having a tea-break and finally asking a complex graphics subsystem to render something. The Active Book code bitblt’d a menu form to the screen.
>>
>> Ideally menus should be pre-built and cached, with some cache-flushing algorithm connected to anything that changes what should be in them. Such as adding a new menu related pragma.
>>
>> I also spotted some code where menu getting selectors are examined to see how many arguments they take and then assorted #perform incantations are used. In general abetter option is to make use of the execution machinery and just send the most flexible message. Implement it at some sensible root to re-try with a simpler version if needed.
>>
>> I wish I had time to clean this up but I have to make VM changes to support a largish number of Scratch users and my brain is about ready to explode.
>
> Speaking for the pragma-based menu system, yes, there's room for
> improvement, and once Start-of-Semester stress settles down,
> I'll take on it.

Also, keybindings in general…
-t


Reply | Threaded
Open this post in threaded view
|

Re: Menus and cmd keys considered quite, quite, mad

David T. Lewis
In reply to this post by Tobias Pape
On Wed, Oct 21, 2015 at 11:47:12PM +0200, Tobias Pape wrote:

> Hi Tim,
>
> On 21.10.2015, at 23:35, tim Rowledge <[hidden email]> wrote:
> >
> > I wish I had time to clean this up but I have to make VM changes to support a largish number of Scratch users and my brain is about ready to explode.
>
> Speaking for the pragma-based menu system, yes, there's room for
> improvement, and once Start-of-Semester stress settles down,
> I'll take on it.
>

Yay!

Dave

Reply | Threaded
Open this post in threaded view
|

Re: Menus and cmd keys considered quite, quite, mad

timrowledge

> On 21-10-2015, at 2:49 PM, David T. Lewis <[hidden email]> wrote:
>
> On Wed, Oct 21, 2015 at 11:47:12PM +0200, Tobias Pape wrote:
>> Hi Tim,
>>
>> On 21.10.2015, at 23:35, tim Rowledge <[hidden email]> wrote:
>>>
>>> I wish I had time to clean this up but I have to make VM changes to support a largish number of Scratch users and my brain is about ready to explode.
>>
>> Speaking for the pragma-based menu system, yes, there's room for
>> improvement, and once Start-of-Semester stress settles down,
>> I'll take on it.
>>
>
> Yay!
>
> Dave

I’ll +1 and thumbs-up that idea. I understand you were talking about this stuff with eliot just yesterday, so nice synchronicity there.

I’m moderately sure there is something of a faintly similar nature that could help Morphic performance in general. There’s far too much by way of “ooh, let’s do some complicated work to get a value and compare it with the current value to see if anything has changed before altering the UI” when an approach more like “let’s see if this flag has been set to tell me that some complicated work actually needs to be done to find a new value and update the UI” would be of some benefit.

People working on anything relating to the UI really ought to be required to run on a Pi or similar so that they are constantly reminded of the cost of apparently clever ideas. If it runs fast on a PI imagine how quick it can seem on a fast PC.

tim
--
tim Rowledge; [hidden email]; http://www.rowledge.org/tim
Strange OpCodes: SHP: Solve Halting Problem



Reply | Threaded
Open this post in threaded view
|

Re: Menus and cmd keys considered quite, quite, mad

Chris Muller-3
In reply to this post by Tobias Pape
Tim, Squeak is a complex system, with a lot of functions and a complex
interaction between human and machine.  No system like that is going
to be the toddler-coddler you want it to be.

>>> Part of it is likely  because of the confusion inherent to having two separate UI systems that aren’t quite separate. For example StringHolder class>>#yellowButtonMenuItems includes
>>>                      {'make project link (P)' translated.    #makeProjectLink}.
>>> which
>>> a) annoyed me because I want to use cmd-shift-p for my printItHex

So override it, you have a "live" system.  The code IS the
user-interface, just as much as the menus are...

>>> Ideally menus should be pre-built and cached, with some cache-flushing algorithm connected to anything that changes what should be in them. Such as adding a new menu related pragma.

That'll waste all the memory in your Pi...

Reply | Threaded
Open this post in threaded view
|

Re: Menus and cmd keys considered quite, quite, mad

Hannes Hirzel
In reply to this post by timrowledge
On 10/21/15, tim Rowledge <[hidden email]> wrote:

> I wanted to add a little cmd key hack to the debugger to print numbers in
> hex - useful when debugging the VM in sim etc. Eventually I found a way to
> solve my immediate needs but along the path I found a dazzlingly complex
> intertwingled mess of code for menus and cmd key handling.
>
> Part of it is likely  because of the confusion inherent to having two
> separate UI systems that aren’t quite separate. For example StringHolder
> class>>#yellowButtonMenuItems includes
> {'make project link (P)' translated. #makeProjectLink}.
> which
> a) annoyed me because I want to use cmd-shift-p for my printItHex
> b) seems to be a bit odd to have in a text editor menu, and very much so in
> a code editor menu
> c) doesn’t even work in Morphic so far as I can tell (PluggableTextMorph
> does not understand #makeProjectLink)
>
> Also when building menus - which is done for every menu button press! - we
> end up doing a scan of all the methods (for menu related pragmas) of every
> class that could possibly be involved.


Just curious -- where is this scanning of all methods done in version 5.0?
It does not seem to involve the TheWorldMenu
http://wiki.squeak.org/squeak/6213
?

--Hannes



This is even more insane than using

> #isKindOf: within UI code. Perhaps one could argue that it isn’t quite
> completely insane on multi-core/multi-GHz/megaRam machines but on anything
> slower ( like the Pi, a rather important platform for public awareness and
> outreach) it can ruin the UI experience.
>
> The current system reminds me unpleasantly of the PenPoint/Go UI dating back
> to ’89 or so; their hardware was nominally several times faster than our
> Active Book, and they proudly proclaimed how it was all carefully optimised
> code and yet it was grindingly slow to do anything in the UI. The Active
> Book was a mere 8MHz ARM2 (no caches, not even an instruction prefect queue,
> 1Mb RAM for everything including the screen and filing system) and running
> that terrible slow nonsense called Smalltalk that everyone knew was slow as
> slow. Many years later I met one of the developers and it turned out that
> their framework carefully built menus by checking here, looking there,
> seeing if a string needed translating, having a tea-break and finally asking
> a complex graphics subsystem to render something. The Active Book code
> bitblt’d a menu form to the screen.
>
> Ideally menus should be pre-built and cached, with some cache-flushing
> algorithm connected to anything that changes what should be in them. Such as
> adding a new menu related pragma.
>
> I also spotted some code where menu getting selectors are examined to see
> how many arguments they take and then assorted #perform incantations are
> used. In general abetter option is to make use of the execution machinery
> and just send the most flexible message. Implement it at some sensible root
> to re-try with a simpler version if needed.
>
> I wish I had time to clean this up but I have to make VM changes to support
> a largish number of Scratch users and my brain is about ready to explode.
>
> tim
> --
> tim Rowledge; [hidden email]; http://www.rowledge.org/tim
> 29A, the hexadecimal of the Beast.
>
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: Menus and cmd keys considered quite, quite, mad

Tobias Pape

On 23.10.2015, at 16:44, H. Hirzel <[hidden email]> wrote:

> On 10/21/15, tim Rowledge <[hidden email]> wrote:
>> I wanted to add a little cmd key hack to the debugger to print numbers in
>> hex - useful when debugging the VM in sim etc. Eventually I found a way to
>> solve my immediate needs but along the path I found a dazzlingly complex
>> intertwingled mess of code for menus and cmd key handling.
>>
>> Part of it is likely  because of the confusion inherent to having two
>> separate UI systems that aren’t quite separate. For example StringHolder
>> class>>#yellowButtonMenuItems includes
>> {'make project link (P)' translated. #makeProjectLink}.
>> which
>> a) annoyed me because I want to use cmd-shift-p for my printItHex
>> b) seems to be a bit odd to have in a text editor menu, and very much so in
>> a code editor menu
>> c) doesn’t even work in Morphic so far as I can tell (PluggableTextMorph
>> does not understand #makeProjectLink)
>>
>> Also when building menus - which is done for every menu button press! - we
>> end up doing a scan of all the methods (for menu related pragmas) of every
>> class that could possibly be involved.
>
>
> Just curious -- where is this scanning of all methods done in version 5.0?
> It does not seem to involve the TheWorldMenu
> http://wiki.squeak.org/squeak/6213
> ?

Its in Model, for use with tools.
The world menu is a different beast, still/yet.

Best
        -Tobias

>
> --Hannes
>
>
>
> This is even more insane than using
>> #isKindOf: within UI code. Perhaps one could argue that it isn’t quite
>> completely insane on multi-core/multi-GHz/megaRam machines but on anything
>> slower ( like the Pi, a rather important platform for public awareness and
>> outreach) it can ruin the UI experience.
>>
>> The current system reminds me unpleasantly of the PenPoint/Go UI dating back
>> to ’89 or so; their hardware was nominally several times faster than our
>> Active Book, and they proudly proclaimed how it was all carefully optimised
>> code and yet it was grindingly slow to do anything in the UI. The Active
>> Book was a mere 8MHz ARM2 (no caches, not even an instruction prefect queue,
>> 1Mb RAM for everything including the screen and filing system) and running
>> that terrible slow nonsense called Smalltalk that everyone knew was slow as
>> slow. Many years later I met one of the developers and it turned out that
>> their framework carefully built menus by checking here, looking there,
>> seeing if a string needed translating, having a tea-break and finally asking
>> a complex graphics subsystem to render something. The Active Book code
>> bitblt’d a menu form to the screen.
>>
>> Ideally menus should be pre-built and cached, with some cache-flushing
>> algorithm connected to anything that changes what should be in them. Such as
>> adding a new menu related pragma.
>>
>> I also spotted some code where menu getting selectors are examined to see
>> how many arguments they take and then assorted #perform incantations are
>> used. In general abetter option is to make use of the execution machinery
>> and just send the most flexible message. Implement it at some sensible root
>> to re-try with a simpler version if needed.
>>
>> I wish I had time to clean this up but I have to make VM changes to support
>> a largish number of Scratch users and my brain is about ready to explode.
>>
>> tim
>> --
>> tim Rowledge; [hidden email]; http://www.rowledge.org/tim
>> 29A, the hexadecimal of the Beast.



Reply | Threaded
Open this post in threaded view
|

Re: Menus and cmd keys considered quite, quite, mad

Hannes Hirzel
You mean the class 'Model' and method #addItem: ?


addItem: classAndMethod
        "Make a linked message list and put this method in it"
       

        self flag: #mref. "classAndMethod is a String"

        MessageSet
                parse: classAndMethod
                toClassAndSelector: [ :class :sel | | list |
                        class ifNil: [^self].
                        list := OrderedCollection with: (
                                MethodReference new
                                        setClass: class
                                        methodSymbol: sel
                                        stringVersion: classAndMethod
                        ).
                        ToolSet
                                browseMessageSet: list
                                name: 'Linked by HyperText'
                                autoSelect: nil
                ]



--Hannes

On 10/24/15, Tobias Pape <[hidden email]> wrote:

>
> On 23.10.2015, at 16:44, H. Hirzel <[hidden email]> wrote:
>
>> On 10/21/15, tim Rowledge <[hidden email]> wrote:
>>> I wanted to add a little cmd key hack to the debugger to print numbers
>>> in
>>> hex - useful when debugging the VM in sim etc. Eventually I found a way
>>> to
>>> solve my immediate needs but along the path I found a dazzlingly complex
>>> intertwingled mess of code for menus and cmd key handling.
>>>
>>> Part of it is likely  because of the confusion inherent to having two
>>> separate UI systems that aren’t quite separate. For example StringHolder
>>> class>>#yellowButtonMenuItems includes
>>> {'make project link (P)' translated. #makeProjectLink}.
>>> which
>>> a) annoyed me because I want to use cmd-shift-p for my printItHex
>>> b) seems to be a bit odd to have in a text editor menu, and very much so
>>> in
>>> a code editor menu
>>> c) doesn’t even work in Morphic so far as I can tell (PluggableTextMorph
>>> does not understand #makeProjectLink)
>>>
>>> Also when building menus - which is done for every menu button press! -
>>> we
>>> end up doing a scan of all the methods (for menu related pragmas) of
>>> every
>>> class that could possibly be involved.
>>
>>
>> Just curious -- where is this scanning of all methods done in version
>> 5.0?
>> It does not seem to involve the TheWorldMenu
>> http://wiki.squeak.org/squeak/6213
>> ?
>
> Its in Model, for use with tools.
> The world menu is a different beast, still/yet.
>
> Best
> -Tobias
>
>>
>> --Hannes
>>
>>
>>
>> This is even more insane than using
>>> #isKindOf: within UI code. Perhaps one could argue that it isn’t quite
>>> completely insane on multi-core/multi-GHz/megaRam machines but on
>>> anything
>>> slower ( like the Pi, a rather important platform for public awareness
>>> and
>>> outreach) it can ruin the UI experience.
>>>
>>> The current system reminds me unpleasantly of the PenPoint/Go UI dating
>>> back
>>> to ’89 or so; their hardware was nominally several times faster than our
>>> Active Book, and they proudly proclaimed how it was all carefully
>>> optimised
>>> code and yet it was grindingly slow to do anything in the UI. The Active
>>> Book was a mere 8MHz ARM2 (no caches, not even an instruction prefect
>>> queue,
>>> 1Mb RAM for everything including the screen and filing system) and
>>> running
>>> that terrible slow nonsense called Smalltalk that everyone knew was slow
>>> as
>>> slow. Many years later I met one of the developers and it turned out
>>> that
>>> their framework carefully built menus by checking here, looking there,
>>> seeing if a string needed translating, having a tea-break and finally
>>> asking
>>> a complex graphics subsystem to render something. The Active Book code
>>> bitblt’d a menu form to the screen.
>>>
>>> Ideally menus should be pre-built and cached, with some cache-flushing
>>> algorithm connected to anything that changes what should be in them. Such
>>> as
>>> adding a new menu related pragma.
>>>
>>> I also spotted some code where menu getting selectors are examined to
>>> see
>>> how many arguments they take and then assorted #perform incantations are
>>> used. In general abetter option is to make use of the execution
>>> machinery
>>> and just send the most flexible message. Implement it at some sensible
>>> root
>>> to re-try with a simpler version if needed.
>>>
>>> I wish I had time to clean this up but I have to make VM changes to
>>> support
>>> a largish number of Scratch users and my brain is about ready to
>>> explode.
>>>
>>> tim
>>> --
>>> tim Rowledge; [hidden email]; http://www.rowledge.org/tim
>>> 29A, the hexadecimal of the Beast.
>
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: Menus and cmd keys considered quite, quite, mad

Tobias Pape

On 27.10.2015, at 10:56, H. Hirzel <[hidden email]> wrote:

> You mean the class 'Model' and method #addItem: ?
>
>

No. I meant Model>>menuPragmasFor: aMenuSymbolOrCollection in: aClass.

Do we actually talk about the same thing?
I'm unsure :)

Best regards
        -Tobias

> addItem: classAndMethod
> "Make a linked message list and put this method in it"
>
>
> self flag: #mref. "classAndMethod is a String"
>
> MessageSet
> parse: classAndMethod
> toClassAndSelector: [ :class :sel | | list |
> class ifNil: [^self].
> list := OrderedCollection with: (
> MethodReference new
> setClass: class
> methodSymbol: sel
> stringVersion: classAndMethod
> ).
> ToolSet
> browseMessageSet: list
> name: 'Linked by HyperText'
> autoSelect: nil
> ]
>
>
>
> --Hannes
>
> On 10/24/15, Tobias Pape <[hidden email]> wrote:
>>
>> On 23.10.2015, at 16:44, H. Hirzel <[hidden email]> wrote:
>>
>>> On 10/21/15, tim Rowledge <[hidden email]> wrote:
>>>> I wanted to add a little cmd key hack to the debugger to print numbers
>>>> in
>>>> hex - useful when debugging the VM in sim etc. Eventually I found a way
>>>> to
>>>> solve my immediate needs but along the path I found a dazzlingly complex
>>>> intertwingled mess of code for menus and cmd key handling.
>>>>
>>>> Part of it is likely  because of the confusion inherent to having two
>>>> separate UI systems that aren’t quite separate. For example StringHolder
>>>> class>>#yellowButtonMenuItems includes
>>>> {'make project link (P)' translated. #makeProjectLink}.
>>>> which
>>>> a) annoyed me because I want to use cmd-shift-p for my printItHex
>>>> b) seems to be a bit odd to have in a text editor menu, and very much so
>>>> in
>>>> a code editor menu
>>>> c) doesn’t even work in Morphic so far as I can tell (PluggableTextMorph
>>>> does not understand #makeProjectLink)
>>>>
>>>> Also when building menus - which is done for every menu button press! -
>>>> we
>>>> end up doing a scan of all the methods (for menu related pragmas) of
>>>> every
>>>> class that could possibly be involved.
>>>
>>>
>>> Just curious -- where is this scanning of all methods done in version
>>> 5.0?
>>> It does not seem to involve the TheWorldMenu
>>> http://wiki.squeak.org/squeak/6213
>>> ?
>>
>> Its in Model, for use with tools.
>> The world menu is a different beast, still/yet.
>>
>> Best
>> -Tobias
>>
>>>
>>> --Hannes
>>>
>>>
>>>
>>> This is even more insane than using
>>>> #isKindOf: within UI code. Perhaps one could argue that it isn’t quite
>>>> completely insane on multi-core/multi-GHz/megaRam machines but on
>>>> anything
>>>> slower ( like the Pi, a rather important platform for public awareness
>>>> and
>>>> outreach) it can ruin the UI experience.
>>>>
>>>> The current system reminds me unpleasantly of the PenPoint/Go UI dating
>>>> back
>>>> to ’89 or so; their hardware was nominally several times faster than our
>>>> Active Book, and they proudly proclaimed how it was all carefully
>>>> optimised
>>>> code and yet it was grindingly slow to do anything in the UI. The Active
>>>> Book was a mere 8MHz ARM2 (no caches, not even an instruction prefect
>>>> queue,
>>>> 1Mb RAM for everything including the screen and filing system) and
>>>> running
>>>> that terrible slow nonsense called Smalltalk that everyone knew was slow
>>>> as
>>>> slow. Many years later I met one of the developers and it turned out
>>>> that
>>>> their framework carefully built menus by checking here, looking there,
>>>> seeing if a string needed translating, having a tea-break and finally
>>>> asking
>>>> a complex graphics subsystem to render something. The Active Book code
>>>> bitblt’d a menu form to the screen.
>>>>
>>>> Ideally menus should be pre-built and cached, with some cache-flushing
>>>> algorithm connected to anything that changes what should be in them. Such
>>>> as
>>>> adding a new menu related pragma.
>>>>
>>>> I also spotted some code where menu getting selectors are examined to
>>>> see
>>>> how many arguments they take and then assorted #perform incantations are
>>>> used. In general abetter option is to make use of the execution
>>>> machinery
>>>> and just send the most flexible message. Implement it at some sensible
>>>> root
>>>> to re-try with a simpler version if needed.
>>>>
>>>> I wish I had time to clean this up but I have to make VM changes to
>>>> support
>>>> a largish number of Scratch users and my brain is about ready to
>>>> explode.
>>>>
>>>> tim
>>>> --
>>>> tim Rowledge; [hidden email]; http://www.rowledge.org/tim
>>>> 29A, the hexadecimal of the Beast.



Reply | Threaded
Open this post in threaded view
|

Re: Menus and cmd keys considered quite, quite, mad

Eliot Miranda-2
In reply to this post by Chris Muller-3
Hi Chris,

_,,,^..^,,,_ (phone)

> On Oct 21, 2015, at 6:29 PM, Chris Muller <[hidden email]> wrote:
>
> Tim, Squeak is a complex system, with a lot of functions and a complex
> interaction between human and machine.  No system like that is going
> to be the toddler-coddler you want it to be.
>
>>>> Part of it is likely  because of the confusion inherent to having two separate UI systems that aren’t quite separate. For example StringHolder class>>#yellowButtonMenuItems includes
>>>>                     {'make project link (P)' translated.    #makeProjectLink}.
>>>> which
>>>> a) annoyed me because I want to use cmd-shift-p for my printItHex
>
> So override it, you have a "live" system.  The code IS the
> user-interface, just as much as the menus are...
>
>>>> Ideally menus should be pre-built and cached, with some cache-flushing algorithm connected to anything that changes what should be in them. Such as adding a new menu related pragma.
>
> That'll waste all the memory in your Pi...

No it won't :). First there's a gigabyte of ran on a Pi.  Second, if the menu system saves the symbolic firm of the menu rather than the rendered but so it should be quite compact.


Reply | Threaded
Open this post in threaded view
|

Re: Menus and cmd keys considered quite, quite, mad

Bert Freudenberg
On 28.10.2015, at 00:25, Eliot Miranda <[hidden email]> wrote:
> On Oct 21, 2015, at 6:29 PM, Chris Muller <[hidden email]> wrote:
>>
>>
>> That'll waste all the memory in your Pi...
>
> No it won't :). First there's a gigabyte of ran on a Pi.

You’re thinking of the Pi 2. The original Pi had 256 MB or 512 MB, and it sold by the millions:

https://www.raspberrypi.org/documentation/hardware/raspberrypi/models/specs.md

Once all of Linux and X11 is loaded there is not much RAM left.

The Pi 2 was only introduced this year.

- Bert -




smime.p7s (5K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Menus and cmd keys considered quite, quite, mad

Hannes Hirzel
How much memory would these cached menus use ? (estimate)

On 10/28/15, Bert Freudenberg <[hidden email]> wrote:

> On 28.10.2015, at 00:25, Eliot Miranda <[hidden email]> wrote:
>> On Oct 21, 2015, at 6:29 PM, Chris Muller <[hidden email]> wrote:
>>>
>>>
>>> That'll waste all the memory in your Pi...
>>
>> No it won't :). First there's a gigabyte of ran on a Pi.
>
> You’re thinking of the Pi 2. The original Pi had 256 MB or 512 MB, and it
> sold by the millions:
>
> https://www.raspberrypi.org/documentation/hardware/raspberrypi/models/specs.md
>
> Once all of Linux and X11 is loaded there is not much RAM left.
>
> The Pi 2 was only introduced this year.
>
> - Bert -
>
>

Reply | Threaded
Open this post in threaded view
|

Re: Menus and cmd keys considered quite, quite, mad

Tobias Pape

On 28.10.2015, at 13:00, H. Hirzel <[hidden email]> wrote:

> How much memory would these cached menus use ? (estimate)

Nobody knows 'cause I haven't implemented them, yet;)

Best regards
        -Tobias

>
> On 10/28/15, Bert Freudenberg <[hidden email]> wrote:
>> On 28.10.2015, at 00:25, Eliot Miranda <[hidden email]> wrote:
>>> On Oct 21, 2015, at 6:29 PM, Chris Muller <[hidden email]> wrote:
>>>>
>>>>
>>>> That'll waste all the memory in your Pi...
>>>
>>> No it won't :). First there's a gigabyte of ran on a Pi.
>>
>> You’re thinking of the Pi 2. The original Pi had 256 MB or 512 MB, and it
>> sold by the millions:
>>
>> https://www.raspberrypi.org/documentation/hardware/raspberrypi/models/specs.md
>>
>> Once all of Linux and X11 is loaded there is not much RAM left.
>>
>> The Pi 2 was only introduced this year.
>>
>> - Bert -



Reply | Threaded
Open this post in threaded view
|

Re: Menus and cmd keys considered quite, quite, mad

Chris Muller-3
In reply to this post by Eliot Miranda-2
If we have to cache menus and introduce some "cache-flushing
algorithm" merely for performance, then I think its a sign that we
should do a critical re-evaluation of the pragma-based preferences.
I'm starting to think the negative aspects they've brought to
Preference management within the system outweigh their positives, when
compared to simple object structures accessed by a unified API..

On Tue, Oct 27, 2015 at 6:25 PM, Eliot Miranda <[hidden email]> wrote:

> Hi Chris,
>
> _,,,^..^,,,_ (phone)
>
>> On Oct 21, 2015, at 6:29 PM, Chris Muller <[hidden email]> wrote:
>>
>> Tim, Squeak is a complex system, with a lot of functions and a complex
>> interaction between human and machine.  No system like that is going
>> to be the toddler-coddler you want it to be.
>>
>>>>> Part of it is likely  because of the confusion inherent to having two separate UI systems that aren’t quite separate. For example StringHolder class>>#yellowButtonMenuItems includes
>>>>>                     {'make project link (P)' translated.    #makeProjectLink}.
>>>>> which
>>>>> a) annoyed me because I want to use cmd-shift-p for my printItHex
>>
>> So override it, you have a "live" system.  The code IS the
>> user-interface, just as much as the menus are...
>>
>>>>> Ideally menus should be pre-built and cached, with some cache-flushing algorithm connected to anything that changes what should be in them. Such as adding a new menu related pragma.
>>
>> That'll waste all the memory in your Pi...
>
> No it won't :). First there's a gigabyte of ran on a Pi.  Second, if the menu system saves the symbolic firm of the menu rather than the rendered but so it should be quite compact.
>
>

Reply | Threaded
Open this post in threaded view
|

Re: Menus and cmd keys considered quite, quite, mad

Tobias Pape
Hi,

On 28.10.2015, at 16:05, Chris Muller <[hidden email]> wrote:

> If we have to cache menus and introduce some "cache-flushing
> algorithm" merely for performance, then I think its a sign that we
> should do a critical re-evaluation of the pragma-based preferences.
> I'm starting to think the negative aspects they've brought to
> Preference management within the system outweigh their positives, when
> compared to simple object structures accessed by a unified API..

I don't agree. There'll always be a cache you have to remember to flush.
In fact, the Preferences are a cache even without the pragma prefs.


Best regards
        -Tobias

>
> On Tue, Oct 27, 2015 at 6:25 PM, Eliot Miranda <[hidden email]> wrote:
>> Hi Chris,
>>
>> _,,,^..^,,,_ (phone)
>>
>>> On Oct 21, 2015, at 6:29 PM, Chris Muller <[hidden email]> wrote:
>>>
>>> Tim, Squeak is a complex system, with a lot of functions and a complex
>>> interaction between human and machine.  No system like that is going
>>> to be the toddler-coddler you want it to be.
>>>
>>>
>>> So override it, you have a "live" system.  The code IS the
>>> user-interface, just as much as the menus are...
>>>
>>>
>>> That'll waste all the memory in your Pi...
>>
>> No it won't :). First there's a gigabyte of ran on a Pi.  Second, if the menu system saves the symbolic firm of the menu rather than the rendered but so it should be quite compact.



Reply | Threaded
Open this post in threaded view
|

Re: Menus and cmd keys considered quite, quite, mad

Chris Muller-4
> If we have to cache menus and introduce some "cache-flushing
> algorithm" merely for performance, then I think its a sign that we
> should do a critical re-evaluation of the pragma-based preferences.
> I'm starting to think the negative aspects they've brought to
> Preference management within the system outweigh their positives, when
> compared to simple object structures accessed by a unified API..

I don't agree. There'll always be a cache you have to remember to flush.
In fact, the Preferences are a cache even without the pragma prefs.

Preferences never needs to be "flushed".  Why?  Because its an original model, not a cache.  A "cache" is extranneous -- on TOP of original models, for purposes of performance..