A Sad Day

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

A Sad Day

Trygve

Dear All,
Imagine that you bought an iPhone 20 years ago. Over the years, you have filled it with pictures, contacts, and other personal data. You now want to upgrade to iPhone SE and find that all your personal data are lost because there is no way to transfer your data. Very sad.

The same has happened to me with Squeak. The Squeak programs I have written over the past 20 years are effectively lost because I can’t port them to a current version of Squeak. Very sad.

The essence of object orientation is that objects collaborate to achieve a goal. I retired 20 years ago and made it my task to create DCI (Data-Context-Interaction), a programming paradigm that merges the concepts of class and collaboration. BabyIDE is a non-intrusive Squeak program that includes a model of DCI as well as tools for programming within the paradigm. BabyIDE is a kind of Dynabook, a personal computer for experts in all domains. Its target group could be department managers in business and industry; they are experts in running their department in collaboration with other managers. Another target group could be farmers; they are experts in taking care of their animals. A third target group could be homeowners; they build expertise in controlling their smart home.

Squeak is more than a programming language; it is a live universe of collaborating objects. The shared objects on the web is also a universe of collaborating objects that Kevin Kelly called a single, global machine. BabyIDE extends the Squeak image into this global machine, making all the combined objects available for personal programming as illustrated below:



BabyIDE is now running in Squeak 3.10.2, together with a new Squeak Reverse Engineering tool. I want to port my programs to Squeak 3.5 to benefit from its improved internet communication facilities. This port has been pestering me since April, but the overwhelming complexity of 3.5 has forced me to accept defeat. I can’t avoid speculating about the nature of Squeak’s current target group. It used to be “children of all ages.” Today, it neither includes children nor old Smalltalk hands like me (I wrote my first Smalltalk program in 1978). Stephen Pope, another veteran who also bemoans what is happening to Squeak, wrote in a blog:

The most popular systems (Squeak and Pharo) both suffer from unbelievable image bloat, with many thousands of classes, hundreds of root classes, class hierarchies with many instance variables in the high-level (abstract) classes, and too many packages with cute but meaningless (to a new-comer) names.”
https://smalltalk.tech.blog/2020/08/10/smalltalks-successor/
I couldn’t agree more. A few examples:

1.   Class Object defines 485 methods. This means that every Squeak object understands at least 485 messages. Most of them are irrelevant to the problem at hand, but all of them can be part of unexpected behavior. 

2.   The state of every Morph object is held in its regular instance variables PLUS any number of undeclared and undocumented variables in its extension, a Dictionary that may include another dictionary inside it. The Morph class comment: “MorphExtension Allows extra properties to be stored without adding a storage burden to all morphs.” I’m more concerned about the burden put upon the code reader.

3.   For me, the final straw was the new filtering phase added to Squeak’s already complex event handling mechanism. Squeak 3.5 has 208 new methods with ‘filter’ in their name, but there is no indication as to what they are for and when to use them. The abstract concepts of event filtering are documented, but there is no documentation on their reification into concrete code. The complexity of a basically simple mechanism has reached a new high far beyond the capabilities of my brain.

4.   Class MorphicEventDispatcher has 4 methods in 3.10.2 and 16 methods in 5.3.

5.   Class MyMorph>> processEvent: anEvent using: anIgnoredDispatcher
is a regular event handler in 3.10.2. In 5.3, it is a filter, and its execution never stops.

After 60 years in programming, 42 of them in Smalltalk, and the last 20 in Squeak, I have reached the end of my patience and reluctantly have to quit Squeak programming. It is truly a sad day.

Have fun and Goodbye,
--Trygve

--

The essence of object orientation is that objects collaborate  to achieve a goal.
Trygve Reenskaug      
[hidden email]
Morgedalsvn. 5A       
http://folk.uio.no/trygver/
N-0378 Oslo             
http://fullOO.info
Norway                     Tel: (+47) 468 58 625



Reply | Threaded
Open this post in threaded view
|

Re: A Sad Day

marcel.taeumel
Hi Trygve.

Class MorphicEventDispatcher has 4 methods in 3.10.2 and 16 methods in 5.3.

Finally, we managed to improve modularity of Squeak's event handling by assembling -- once scattered -- methods and logic in a place where it can be found and understood. Of course, the number of methods in a class can go up in the process. What you describe as "additional bloat" is clearly a revelation of already existing complexity.

Since the plain number of methods is rather unhelpful to assess code readability, I wonder whether there are better names we can use to guide programmers when exploring MorphicEventDispatcher, its protocols, and methods.

Class MyMorph>> processEvent: anEvent using: anIgnoredDispatcher is a regular event handler in 3.10.2. In 5.3, it is a filter, and its execution never stops.

That's just not true. The dispatcher is still dispatching as it was in Squeak 3.10.2. Event filters were added as a mechanism to tackle the existing mis-use of event listeners. The filter mechanism uses patterns that are already existing in the Squeak system. Yes, there is still room for improvement regarding its modularity.

***

We need better ways to assess the image quality. Phrases such as "unbelievable image bloat", "many thousands of classes", etc. are not helpful at all. Such a perspective ignores incidental vs. accidental complexity. It also ignores the role of tools in such a live and exploratory programming system.

We need better ways to look beyond the source code. Of course, we strive for a clean, compact, understandable system. However, that goal must not only focus on lines of code, number of methods/classes/packages. Programmers do not just read code to gather understanding. They execute code, play around with objects ---> use tools. Those tools show us the names and relationships of all kinds of software artifacts. Those tools enable very concise, task-specific views on rather complex systems. Those tools can help find redundancy, clarify meaning.

Don't get me wrong. I am always in favor of removing a class or concept if that is not necessary. I do think twice before adding a new class or extending the inheritance tree.

However, just counting the number of code artifacts is not a helpful metric to move forward. It can only be a first step in a more throrough exploration process.

Don't give up. Happy Squeaking! :-)

Best,
Marcel

Am 13.08.2020 09:34:39 schrieb Trygve Reenskaug <[hidden email]>:


Dear All,
Imagine that you bought an iPhone 20 years ago. Over the years, you have filled it with pictures, contacts, and other personal data. You now want to upgrade to iPhone SE and find that all your personal data are lost because there is no way to transfer your data. Very sad.

The same has happened to me with Squeak. The Squeak programs I have written over the past 20 years are effectively lost because I can’t port them to a current version of Squeak. Very sad.

The essence of object orientation is that objects collaborate to achieve a goal. I retired 20 years ago and made it my task to create DCI (Data-Context-Interaction), a programming paradigm that merges the concepts of class and collaboration. BabyIDE is a non-intrusive Squeak program that includes a model of DCI as well as tools for programming within the paradigm. BabyIDE is a kind of Dynabook, a personal computer for experts in all domains. Its target group could be department managers in business and industry; they are experts in running their department in collaboration with other managers. Another target group could be farmers; they are experts in taking care of their animals. A third target group could be homeowners; they build expertise in controlling their smart home.

Squeak is more than a programming language; it is a live universe of collaborating objects. The shared objects on the web is also a universe of collaborating objects that Kevin Kelly called a single, global machine. BabyIDE extends the Squeak image into this global machine, making all the combined objects available for personal programming as illustrated below:



BabyIDE is now running in Squeak 3.10.2, together with a new Squeak Reverse Engineering tool. I want to port my programs to Squeak 3.5 to benefit from its improved internet communication facilities. This port has been pestering me since April, but the overwhelming complexity of 3.5 has forced me to accept defeat. I can’t avoid speculating about the nature of Squeak’s current target group. It used to be “children of all ages.” Today, it neither includes children nor old Smalltalk hands like me (I wrote my first Smalltalk program in 1978). Stephen Pope, another veteran who also bemoans what is happening to Squeak, wrote in a blog:

The most popular systems (Squeak and Pharo) both suffer from unbelievable image bloat, with many thousands of classes, hundreds of root classes, class hierarchies with many instance variables in the high-level (abstract) classes, and too many packages with cute but meaningless (to a new-comer) names.”
https://smalltalk.tech.blog/2020/08/10/smalltalks-successor/
I couldn’t agree more. A few examples:

1.   Class Object defines 485 methods. This means that every Squeak object understands at least 485 messages. Most of them are irrelevant to the problem at hand, but all of them can be part of unexpected behavior. 

2.   The state of every Morph object is held in its regular instance variables PLUS any number of undeclared and undocumented variables in its extension, a Dictionary that may include another dictionary inside it. The Morph class comment: “MorphExtension Allows extra properties to be stored without adding a storage burden to all morphs.” I’m more concerned about the burden put upon the code reader.

3.   For me, the final straw was the new filtering phase added to Squeak’s already complex event handling mechanism. Squeak 3.5 has 208 new methods with ‘filter’ in their name, but there is no indication as to what they are for and when to use them. The abstract concepts of event filtering are documented, but there is no documentation on their reification into concrete code. The complexity of a basically simple mechanism has reached a new high far beyond the capabilities of my brain.

4.   Class MorphicEventDispatcher has 4 methods in 3.10.2 and 16 methods in 5.3.

5.   Class MyMorph>> processEvent: anEvent using: anIgnoredDispatcher
is a regular event handler in 3.10.2. In 5.3, it is a filter, and its execution never stops.

After 60 years in programming, 42 of them in Smalltalk, and the last 20 in Squeak, I have reached the end of my patience and reluctantly have to quit Squeak programming. It is truly a sad day.

Have fun and Goodbye,
--Trygve

--

The essence of object orientation is that objects collaborate  to achieve a goal.
Trygve Reenskaug      
[hidden email]
Morgedalsvn. 5A       
http://folk.uio.no/trygver/
N-0378 Oslo             
http://fullOO.info
Norway                     Tel: (+47) 468 58 625



Reply | Threaded
Open this post in threaded view
|

Re: A Sad Day

Edgar De Cleene
In reply to this post by Trygve
>>>
>
>
> On 8/13/20, 4:34 AM, "Trygve Reenskaug" <[hidden email]> wrote:
>
>>    
>>  Dear All,
>>  Imagine that you bought an iPhone 20 years ago. Over the years, you have
>> filled it with pictures, contacts, and other personal data. You now want to
>> upgrade to iPhone SE and find that all your personal data are lost because
>> there is no way to transfer your data. Very sad.
>>  
>>  The same has happened to me with Squeak. The Squeak programs I have written
>> over the past 20 years are effectively lost because I can¹t port them to a
>> current version of Squeak. Very sad.
>>  
>>  The essence of object orientation is that objects collaborate to achieve a
>> goal. I retired 20 years ago and made it my task to create DCI
>> (Data-Context-Interaction), a programming paradigm that merges the concepts
>> of class and collaboration. BabyIDE is a non-intrusive Squeak program that
>> includes a model of DCI as well as tools for programming within the paradigm.
>> BabyIDE is a kind of Dynabook, a personal computer for experts in all
>> domains. Its target group could be department managers in business and
>> industry; they are experts in running their department in collaboration with
>> other managers. Another target group could be farmers; they are experts in
>> taking care of their animals. A third target group could be homeowners; they
>> build expertise in controlling their smart home.
>>  
>>  Squeak is more than a programming language; it is a live universe of
>> collaborating objects. The shared objects on the web is also a universe of
>> collaborating objects that Kevin Kelly called a single, global machine.
>> BabyIDE extends the Squeak image into this global machine, making all the
>> combined objects available for personal programming as illustrated below:
>>  
>>  
>>
>>  
>>  
>>  BabyIDE is now running in Squeak 3.10.2, together with a new Squeak Reverse
>> Engineering tool. I want to port my programs to Squeak 3.5 to benefit from
>> its improved internet communication facilities. This port has been pestering
>> me since April, but the overwhelming complexity of 3.5 has forced me to
>> accept defeat. I can¹t avoid speculating about the nature of Squeak¹s current
>> target group. It used to be ³children of all ages.² Today, it neither
>> includes children nor old Smalltalk hands like me (I wrote my first Smalltalk
>> program in 1978). Stephen Pope, another veteran who also bemoans what is
>> happening to Squeak, wrote in a blog:
>>  
>>  
>>> ³The most popular systems (Squeak and Pharo) both suffer from unbelievable
>>> image bloat, with many thousands of classes, hundreds of root classes, class
>>> hierarchies with many instance variables in the high-level (abstract)
>>> classes, and too many packages with cute but meaningless (to a new-comer)
>>> names.²
>>>   https://smalltalk.tech.blog/2020/08/10/smalltalks-successor/
>>> <https://smalltalk.tech.blog/2020/08/10/smalltalks-successor/>
>>>  
>>>  I couldn¹t agree more. A few examples:
>>>  
>>>  
>>>> 1.   Class Object defines 485 methods. This means that every Squeak object
>>>> understands at least 485 messages. Most of them are irrelevant to the
>>>> problem at hand, but all of them can be part of unexpected behavior. 
>>>>  
>>>>  2.   The state of every Morph object is held in its regular instance
>>>> variables PLUS any number of undeclared and undocumented variables in its
>>>> extension, a Dictionary that may include another dictionary inside it. The
>>>> Morph class comment: ³MorphExtension Allows extra properties to be stored
>>>> without adding a storage burden to all morphs.² I¹m more concerned about
>>>> the burden put upon the code reader.
>>>>  
>>>>  3.   For me, the final straw was the new filtering phase added to Squeak¹s
>>>> already complex event handling mechanism. Squeak 3.5 has 208 new methods
>>>> with Œfilter¹ in their name, but there is no indication as to what they are
>>>> for and when to use them. The abstract concepts of event filtering are
>>>> documented, but there is no documentation on their reification into
>>>> concrete code. The complexity of a basically simple mechanism has reached a
>>>> new high far beyond the capabilities of my brain.
>>>>  
>>>>  4.   Class MorphicEventDispatcher has 4 methods in 3.10.2 and 16 methods
>>>> in 5.3.
>>>>  
>>>>  5.   Class MyMorph>> processEvent: anEvent using: anIgnoredDispatcher
>>>>  is a regular event handler in 3.10.2. In 5.3, it is a filter, and its
>>>> execution never stops.
>>>>  
>>>  
>>>  After 60 years in programming, 42 of them in Smalltalk, and the last 20 in
>>> Squeak, I have reached the end of my patience and reluctantly have to quit
>>> Squeak programming. It is truly a sad day.
>>>  
>>>  Have fun and Goodbye,
>>>  --Trygve
>>>
>>>
Trygve

Don't say Goodbye
As one of 3.10 makers , I'm proud still you use it.
And as one of the admirers of you work also I'm sad.
Squeak these days is a cat bag.
That don't means is unusable.
I try to port Baby to modern Squeak and fail.
Maybe if join forces ?
To all Squeakers my pray to help in this.
A BabyIDE return task force.


Edgar
@morplenauta








Reply | Threaded
Open this post in threaded view
|

Re: A Sad Day

Trygve
In reply to this post by marcel.taeumel
Hi Marcel,
I am 90, and decided I did not want to spend the rest of my days with a Squeak I had no hope of understanding. That was the reason behind my goodbye-message where I was endeavoring to be as concrete and non-emotional as I possibly could. I then put everything Squeak in cold storage and picked up my life with other activities. Unfortunately, you wrote:
 Class MyConnector>> processEvent: anEvent using: anIgnoredDispatcher is a regular event handler in 3.10.2. In 5.3, it is a filter, and its execution never stops.
That's just not true.
I am deeply offended because you accuse me of lying. I reluctantly had to retrieve Squeak from its storage yesterday and spend most of the night awake trying to formulate a non-emotional answer. This is the result:

START FACTS
My Squeak Reverse Engineering program (SRE)  lets me build a diagram with nodes and connectors. I add new nodes interactively and the connectors are added automatically. The connectors behave as expected with the redbutton letting me add breakpoints to a connector line and the yellowbutton opens a menu as usual. SRE has been working for many years under Squeak 3.10.2 and has proven very useful.

I have copied and compiled the SRE classes into Squeak 5.3. I can still build a diagram with its nodes and connectors BUT the image freezes immediately if the cursor touches a connector. This anomaly is consistently reproducible and is a clear bug. I WAS NOT LYING!
END FACTS

I tried to debug the program. It was not easy because the normal debugging tools do not work in this case. My tentative findings were:
1)
The first error is a MNU: Your system believes my connector object is an event, which is isn't.

2)
MyConnector>> processEvent:using: is called from MorphicEventDispatcher, differently in the two releases:
3.10.2     MorphicEventDispatcher>>dispatchDefault: anEvent with: aMorph
5.3          MorphicEventDispatcher>>dispatchEvent: anEvent toSubmorphsOf: aMorph
I have copied the 2 methods below. The suspicious message is in 5.3: filteredEvent := child processEvent: localEvent using: self.  This assignment to a filter seems to be the root of the problem.
3.10.2>>MorphicEventDispatcher>>dispatchDefault: anEvent with: aMorph
    "Dispatch the given event. The event will be passed to the front-most visible submorph that contains the position wrt. to the event."
    | localEvt index child morphs inside |
    "See if we're fully outside aMorphs bounds"
    (aMorph fullBounds containsPoint: anEvent position) ifFalse:[^#rejected]. "outside"
    "Traverse children"
    index _ 1.
    morphs _ aMorph submorphs.
    inside _ false.
    [index <= morphs size] whileTrue:[
        child _ morphs at: index.
        localEvt _ anEvent transformedBy: (child transformedFrom: aMorph).
        (child processEvent: localEvt using: self) == #rejected ifFalse:[
            "Not rejected. The event was in some submorph of the receiver"
            inside _ true.
            localEvt wasHandled ifTrue:[anEvent copyHandlerState: localEvt].
            index _ morphs size. "break"
        ].
        index _ index + 1.
    ].
    "Check for being inside the receiver"
    inside ifFalse:[inside _ aMorph containsPoint: anEvent position event: anEvent].
    inside ifTrue:[^aMorph handleEvent: anEvent].
    ^#rejected
and
5,3>>MorphicEventDispatcher>>dispatchEvent: anEvent toSubmorphsOf: aMorph
    "Dispatch the given event to the submorphs of the given morph. For coordinate transformations, work only with copies. Either return the given event or a copy of any filtered event to employ immutability to some extent. --- PRIVATE!"
    | localEvent filteredEvent |   
    aMorph submorphsDo: [:child |
        localEvent := anEvent transformedBy: (child transformedFrom: aMorph).
        filteredEvent := child processEvent: localEvent using: self. "use same dispatcher"
        filteredEvent == #rejected ifFalse: [ "some event or #rejected symbol"
            self flag: #overlappingChildren. "mt: We cannot give two overlapping siblings the chance to handle the event!"   
            ^ self nextFromOriginal: anEvent local: localEvent filtered: filteredEvent]].
    ^ #rejected

The 5.3 version assigns the result of MyConnector>> processEvent:using: to a variable called filteredEvent. Nothing like that happens in 3.10.2, yet you claim that "The dispatcher is still dispatching as it was in Squeak 3.10.2". Since MyConnector>> processEvent:using: has never returned an event, the program is doomed to fail.

To avoid any further problems, I repeat that I am reporting to the best of my ability what I have experienced with a real program running in 2 real Squeak releases on real hardware. I also trust that the 2 methods i have quoted exist in the release images even though I have copied them from one of my debugging images.

I hope I can return everything Squeak back to its cold storage and that it will stay there.
Have fun and goodbye
--Trygve


On 2020-08-13 09:59, Marcel Taeumel wrote:
Hi Trygve.

Class MorphicEventDispatcher has 4 methods in 3.10.2 and 16 methods in 5.3.

Finally, we managed to improve modularity of Squeak's event handling by assembling -- once scattered -- methods and logic in a place where it can be found and understood. Of course, the number of methods in a class can go up in the process. What you describe as "additional bloat" is clearly a revelation of already existing complexity.

Since the plain number of methods is rather unhelpful to assess code readability, I wonder whether there are better names we can use to guide programmers when exploring MorphicEventDispatcher, its protocols, and methods.

Class MyMorph>> processEvent: anEvent using: anIgnoredDispatcher is a regular event handler in 3.10.2. In 5.3, it is a filter, and its execution never stops.

That's just not true. The dispatcher is still dispatching as it was in Squeak 3.10.2. Event filters were added as a mechanism to tackle the existing mis-use of event listeners. The filter mechanism uses patterns that are already existing in the Squeak system. Yes, there is still room for improvement regarding its modularity.

***

We need better ways to assess the image quality. Phrases such as "unbelievable image bloat", "many thousands of classes", etc. are not helpful at all. Such a perspective ignores incidental vs. accidental complexity. It also ignores the role of tools in such a live and exploratory programming system.

We need better ways to look beyond the source code. Of course, we strive for a clean, compact, understandable system. However, that goal must not only focus on lines of code, number of methods/classes/packages. Programmers do not just read code to gather understanding. They execute code, play around with objects ---> use tools. Those tools show us the names and relationships of all kinds of software artifacts. Those tools enable very concise, task-specific views on rather complex systems. Those tools can help find redundancy, clarify meaning.

Don't get me wrong. I am always in favor of removing a class or concept if that is not necessary. I do think twice before adding a new class or extending the inheritance tree.

However, just counting the number of code artifacts is not a helpful metric to move forward. It can only be a first step in a more throrough exploration process.

Don't give up. Happy Squeaking! :-)

Best,
Marcel

Am 13.08.2020 09:34:39 schrieb Trygve Reenskaug [hidden email]:


Dear All,
Imagine that you bought an iPhone 20 years ago. Over the years, you have filled it with pictures, contacts, and other personal data. You now want to upgrade to iPhone SE and find that all your personal data are lost because there is no way to transfer your data. Very sad.

The same has happened to me with Squeak. The Squeak programs I have written over the past 20 years are effectively lost because I can’t port them to a current version of Squeak. Very sad.

The essence of object orientation is that objects collaborate to achieve a goal. I retired 20 years ago and made it my task to create DCI (Data-Context-Interaction), a programming paradigm that merges the concepts of class and collaboration. BabyIDE is a non-intrusive Squeak program that includes a model of DCI as well as tools for programming within the paradigm. BabyIDE is a kind of Dynabook, a personal computer for experts in all domains. Its target group could be department managers in business and industry; they are experts in running their department in collaboration with other managers. Another target group could be farmers; they are experts in taking care of their animals. A third target group could be homeowners; they build expertise in controlling their smart home.

Squeak is more than a programming language; it is a live universe of collaborating objects. The shared objects on the web is also a universe of collaborating objects that Kevin Kelly called a single, global machine. BabyIDE extends the Squeak image into this global machine, making all the combined objects available for personal programming as illustrated below:



BabyIDE is now running in Squeak 3.10.2, together with a new Squeak Reverse Engineering tool. I want to port my programs to Squeak 3.5 to benefit from its improved internet communication facilities. This port has been pestering me since April, but the overwhelming complexity of 3.5 has forced me to accept defeat. I can’t avoid speculating about the nature of Squeak’s current target group. It used to be “children of all ages.” Today, it neither includes children nor old Smalltalk hands like me (I wrote my first Smalltalk program in 1978). Stephen Pope, another veteran who also bemoans what is happening to Squeak, wrote in a blog:

The most popular systems (Squeak and Pharo) both suffer from unbelievable image bloat, with many thousands of classes, hundreds of root classes, class hierarchies with many instance variables in the high-level (abstract) classes, and too many packages with cute but meaningless (to a new-comer) names.”
https://smalltalk.tech.blog/2020/08/10/smalltalks-successor/
I couldn’t agree more. A few examples:

1.   Class Object defines 485 methods. This means that every Squeak object understands at least 485 messages. Most of them are irrelevant to the problem at hand, but all of them can be part of unexpected behavior. 

2.   The state of every Morph object is held in its regular instance variables PLUS any number of undeclared and undocumented variables in its extension, a Dictionary that may include another dictionary inside it. The Morph class comment: “MorphExtension Allows extra properties to be stored without adding a storage burden to all morphs.” I’m more concerned about the burden put upon the code reader.

3.   For me, the final straw was the new filtering phase added to Squeak’s already complex event handling mechanism. Squeak 3.5 has 208 new methods with ‘filter’ in their name, but there is no indication as to what they are for and when to use them. The abstract concepts of event filtering are documented, but there is no documentation on their reification into concrete code. The complexity of a basically simple mechanism has reached a new high far beyond the capabilities of my brain.

4.   Class MorphicEventDispatcher has 4 methods in 3.10.2 and 16 methods in 5.3.

5.   Class MyMorph>> processEvent: anEvent using: anIgnoredDispatcher
is a regular event handler in 3.10.2. In 5.3, it is a filter, and its execution never stops.

After 60 years in programming, 42 of them in Smalltalk, and the last 20 in Squeak, I have reached the end of my patience and reluctantly have to quit Squeak programming. It is truly a sad day.

Have fun and Goodbye,
--Trygve

--

The essence of object orientation is that objects collaborate  to achieve a goal.
Trygve Reenskaug      
[hidden email]
Morgedalsvn. 5A       
http://folk.uio.no/trygver/
N-0378 Oslo             
http://fullOO.info
Norway                     Tel: (+47) 468 58 625



    

--

The essence of object orientation is that objects collaborate  to achieve a goal.
Trygve Reenskaug      
[hidden email]
Morgedalsvn. 5A       
http://folk.uio.no/trygver/
N-0378 Oslo             
http://fullOO.info
Norway                     Tel: (+47) 468 58 625



Reply | Threaded
Open this post in threaded view
|

Re: A Sad Day

marcel.taeumel
Hi Trygve,

I apologize for any misunderstandings here. I am not an English native speaker. It was not my intent do accuse you of lying.

However, there is a difference between a bug report and an unsubstantiated rant. I did read your entire post "A Sad Day" as the latter. Whose mistake that was, I cannot tell now. Neutral, objective bug reports would read different, I suppose.

I have copied the 2 methods below. The suspicious message is in 5.3: filteredEvent := child processEvent: localEvent using: self.  This assignment to a filter seems to be the root of the problem.

That's a bug then. I will investigate that. Morphs should be able to inject their own event dispatcher at any point during the dispatching. You'r observation is correct. We should fix that.

Class MyConnector>> processEvent: anEvent using: anIgnoredDispatcher is a regular event handler in 3.10.2. In 5.3, it is a filter, and its execution never stops.

Reading "anIgnoredDispatcher" is misleading because that very method #processEvent:using: is actually talking to that "ignored" dispatcher. That's why I said, it's not true. It still is not true at that point in the code.

However, you made a valid point as written above. I will investigate that.

***

I am sorry that you had to use uppercase letters in your previous answer. You were screaming at me, I suppose. Well, it can sometimes be hard to form a substantiated, detailed answer to an abstract, high-level claim. I hope you can understand that. Sorry again.

We need better ways to assess the image quality.

We need better ways to post bug reports.

Best,
Marcel

Am 14.08.2020 11:01:38 schrieb Trygve Reenskaug <[hidden email]>:

Hi Marcel,
I am 90, and decided I did not want to spend the rest of my days with a Squeak I had no hope of understanding. That was the reason behind my goodbye-message where I was endeavoring to be as concrete and non-emotional as I possibly could. I then put everything Squeak in cold storage and picked up my life with other activities. Unfortunately, you wrote:
 Class MyConnector>> processEvent: anEvent using: anIgnoredDispatcher is a regular event handler in 3.10.2. In 5.3, it is a filter, and its execution never stops.
That's just not true.
I am deeply offended because you accuse me of lying. I reluctantly had to retrieve Squeak from its storage yesterday and spend most of the night awake trying to formulate a non-emotional answer. This is the result:

START FACTS
My Squeak Reverse Engineering program (SRE)  lets me build a diagram with nodes and connectors. I add new nodes interactively and the connectors are added automatically. The connectors behave as expected with the redbutton letting me add breakpoints to a connector line and the yellowbutton opens a menu as usual. SRE has been working for many years under Squeak 3.10.2 and has proven very useful.

I have copied and compiled the SRE classes into Squeak 5.3. I can still build a diagram with its nodes and connectors BUT the image freezes immediately if the cursor touches a connector. This anomaly is consistently reproducible and is a clear bug. I WAS NOT LYING!
END FACTS

I tried to debug the program. It was not easy because the normal debugging tools do not work in this case. My tentative findings were:
1)
The first error is a MNU: Your system believes my connector object is an event, which is isn't.

2)
MyConnector>> processEvent:using: is called from MorphicEventDispatcher, differently in the two releases:
3.10.2     MorphicEventDispatcher>>dispatchDefault: anEvent with: aMorph
5.3          MorphicEventDispatcher>>dispatchEvent: anEvent toSubmorphsOf: aMorph
I have copied the 2 methods below. The suspicious message is in 5.3: filteredEvent := child processEvent: localEvent using: self.  This assignment to a filter seems to be the root of the problem.
3.10.2>>MorphicEventDispatcher>>dispatchDefault: anEvent with: aMorph
    "Dispatch the given event. The event will be passed to the front-most visible submorph that contains the position wrt. to the event."
    | localEvt index child morphs inside |
    "See if we're fully outside aMorphs bounds"
    (aMorph fullBounds containsPoint: anEvent position) ifFalse:[^#rejected]. "outside"
    "Traverse children"
    index _ 1.
    morphs _ aMorph submorphs.
    inside _ false.
    [index <= morphs size] whileTrue:[
        child _ morphs at: index.
        localEvt _ anEvent transformedBy: (child transformedFrom: aMorph).
        (child processEvent: localEvt using: self) == #rejected ifFalse:[
            "Not rejected. The event was in some submorph of the receiver"
            inside _ true.
            localEvt wasHandled ifTrue:[anEvent copyHandlerState: localEvt].
            index _ morphs size. "break"
        ].
        index _ index + 1.
    ].
    "Check for being inside the receiver"
    inside ifFalse:[inside _ aMorph containsPoint: anEvent position event: anEvent].
    inside ifTrue:[^aMorph handleEvent: anEvent].
    ^#rejected
and
5,3>>MorphicEventDispatcher>>dispatchEvent: anEvent toSubmorphsOf: aMorph
    "Dispatch the given event to the submorphs of the given morph. For coordinate transformations, work only with copies. Either return the given event or a copy of any filtered event to employ immutability to some extent. --- PRIVATE!"
    | localEvent filteredEvent |   
    aMorph submorphsDo: [:child |
        localEvent := anEvent transformedBy: (child transformedFrom: aMorph).
        filteredEvent := child processEvent: localEvent using: self. "use same dispatcher"
        filteredEvent == #rejected ifFalse: [ "some event or #rejected symbol"
            self flag: #overlappingChildren. "mt: We cannot give two overlapping siblings the chance to handle the event!"   
            ^ self nextFromOriginal: anEvent local: localEvent filtered: filteredEvent]].
    ^ #rejected

The 5.3 version assigns the result of MyConnector>> processEvent:using: to a variable called filteredEvent. Nothing like that happens in 3.10.2, yet you claim that "The dispatcher is still dispatching as it was in Squeak 3.10.2". Since MyConnector>> processEvent:using: has never returned an event, the program is doomed to fail.

To avoid any further problems, I repeat that I am reporting to the best of my ability what I have experienced with a real program running in 2 real Squeak releases on real hardware. I also trust that the 2 methods i have quoted exist in the release images even though I have copied them from one of my debugging images.

I hope I can return everything Squeak back to its cold storage and that it will stay there.
Have fun and goodbye
--Trygve


On 2020-08-13 09:59, Marcel Taeumel wrote:
Hi Trygve.

Class MorphicEventDispatcher has 4 methods in 3.10.2 and 16 methods in 5.3.

Finally, we managed to improve modularity of Squeak's event handling by assembling -- once scattered -- methods and logic in a place where it can be found and understood. Of course, the number of methods in a class can go up in the process. What you describe as "additional bloat" is clearly a revelation of already existing complexity.

Since the plain number of methods is rather unhelpful to assess code readability, I wonder whether there are better names we can use to guide programmers when exploring MorphicEventDispatcher, its protocols, and methods.

Class MyMorph>> processEvent: anEvent using: anIgnoredDispatcher is a regular event handler in 3.10.2. In 5.3, it is a filter, and its execution never stops.

That's just not true. The dispatcher is still dispatching as it was in Squeak 3.10.2. Event filters were added as a mechanism to tackle the existing mis-use of event listeners. The filter mechanism uses patterns that are already existing in the Squeak system. Yes, there is still room for improvement regarding its modularity.

***

We need better ways to assess the image quality. Phrases such as "unbelievable image bloat", "many thousands of classes", etc. are not helpful at all. Such a perspective ignores incidental vs. accidental complexity. It also ignores the role of tools in such a live and exploratory programming system.

We need better ways to look beyond the source code. Of course, we strive for a clean, compact, understandable system. However, that goal must not only focus on lines of code, number of methods/classes/packages. Programmers do not just read code to gather understanding. They execute code, play around with objects ---> use tools. Those tools show us the names and relationships of all kinds of software artifacts. Those tools enable very concise, task-specific views on rather complex systems. Those tools can help find redundancy, clarify meaning.

Don't get me wrong. I am always in favor of removing a class or concept if that is not necessary. I do think twice before adding a new class or extending the inheritance tree.

However, just counting the number of code artifacts is not a helpful metric to move forward. It can only be a first step in a more throrough exploration process.

Don't give up. Happy Squeaking! :-)

Best,
Marcel

Am 13.08.2020 09:34:39 schrieb Trygve Reenskaug [hidden email]:


Dear All,
Imagine that you bought an iPhone 20 years ago. Over the years, you have filled it with pictures, contacts, and other personal data. You now want to upgrade to iPhone SE and find that all your personal data are lost because there is no way to transfer your data. Very sad.

The same has happened to me with Squeak. The Squeak programs I have written over the past 20 years are effectively lost because I can’t port them to a current version of Squeak. Very sad.

The essence of object orientation is that objects collaborate to achieve a goal. I retired 20 years ago and made it my task to create DCI (Data-Context-Interaction), a programming paradigm that merges the concepts of class and collaboration. BabyIDE is a non-intrusive Squeak program that includes a model of DCI as well as tools for programming within the paradigm. BabyIDE is a kind of Dynabook, a personal computer for experts in all domains. Its target group could be department managers in business and industry; they are experts in running their department in collaboration with other managers. Another target group could be farmers; they are experts in taking care of their animals. A third target group could be homeowners; they build expertise in controlling their smart home.

Squeak is more than a programming language; it is a live universe of collaborating objects. The shared objects on the web is also a universe of collaborating objects that Kevin Kelly called a single, global machine. BabyIDE extends the Squeak image into this global machine, making all the combined objects available for personal programming as illustrated below:



BabyIDE is now running in Squeak 3.10.2, together with a new Squeak Reverse Engineering tool. I want to port my programs to Squeak 3.5 to benefit from its improved internet communication facilities. This port has been pestering me since April, but the overwhelming complexity of 3.5 has forced me to accept defeat. I can’t avoid speculating about the nature of Squeak’s current target group. It used to be “children of all ages.” Today, it neither includes children nor old Smalltalk hands like me (I wrote my first Smalltalk program in 1978). Stephen Pope, another veteran who also bemoans what is happening to Squeak, wrote in a blog:

The most popular systems (Squeak and Pharo) both suffer from unbelievable image bloat, with many thousands of classes, hundreds of root classes, class hierarchies with many instance variables in the high-level (abstract) classes, and too many packages with cute but meaningless (to a new-comer) names.”
https://smalltalk.tech.blog/2020/08/10/smalltalks-successor/
I couldn’t agree more. A few examples:

1.   Class Object defines 485 methods. This means that every Squeak object understands at least 485 messages. Most of them are irrelevant to the problem at hand, but all of them can be part of unexpected behavior. 

2.   The state of every Morph object is held in its regular instance variables PLUS any number of undeclared and undocumented variables in its extension, a Dictionary that may include another dictionary inside it. The Morph class comment: “MorphExtension Allows extra properties to be stored without adding a storage burden to all morphs.” I’m more concerned about the burden put upon the code reader.

3.   For me, the final straw was the new filtering phase added to Squeak’s already complex event handling mechanism. Squeak 3.5 has 208 new methods with ‘filter’ in their name, but there is no indication as to what they are for and when to use them. The abstract concepts of event filtering are documented, but there is no documentation on their reification into concrete code. The complexity of a basically simple mechanism has reached a new high far beyond the capabilities of my brain.

4.   Class MorphicEventDispatcher has 4 methods in 3.10.2 and 16 methods in 5.3.

5.   Class MyMorph>> processEvent: anEvent using: anIgnoredDispatcher
is a regular event handler in 3.10.2. In 5.3, it is a filter, and its execution never stops.

After 60 years in programming, 42 of them in Smalltalk, and the last 20 in Squeak, I have reached the end of my patience and reluctantly have to quit Squeak programming. It is truly a sad day.

Have fun and Goodbye,
--Trygve

--

The essence of object orientation is that objects collaborate  to achieve a goal.
Trygve Reenskaug      
[hidden email]
Morgedalsvn. 5A       
http://folk.uio.no/trygver/
N-0378 Oslo             
http://fullOO.info
Norway                     Tel: (+47) 468 58 625



    

--

The essence of object orientation is that objects collaborate  to achieve a goal.
Trygve Reenskaug      
[hidden email]
Morgedalsvn. 5A       
http://folk.uio.no/trygver/
N-0378 Oslo             
http://fullOO.info
Norway                     Tel: (+47) 468 58 625



Reply | Threaded
Open this post in threaded view
|

Trying to help to bring BabySRE to modern Squeak

Edgar De Cleene
In reply to this post by Trygve
Trying to help to bring BabySRE to modern Squeak
I have it working in FunSqueak4.6-14870.image wich is 32bit and opens with old Cog 32 bit VM
With Hannes we have an unfinished port in BabySRESqueak5.2alpha-18062-32bit.image

DemoEllipseSRE new openInWorld raise the changing color Morph

SRE object browser works
SRE collaboration freezes .image , so the problem is not new.

No idea if changes in VM have some effect.


Edgar
@morplenauta







Reply | Threaded
Open this post in threaded view
|

Re: Trying to help to bring BabySRE to modern Squeak

marcel.taeumel
Hi Edgar.

>  SRE collaboration freezes .image , so the problem is not new.

Try Morphic-mt.1674 in Trunk or the backports in 5.3, 5.2, or 5.1. Is it working now?

Best,
Marcel

Am 14.08.2020 13:39:12 schrieb Edgar J. De Cleene <[hidden email]>:


I have it working in FunSqueak4.6-14870.image wich is 32bit and opens with old Cog 32 bit VM
With Hannes we have an unfinished port in BabySRESqueak5.2alpha-18062-32bit.image

DemoEllipseSRE new openInWorld raise the changing color Morph

SRE object browser works
SRE collaboration freezes .image , so the problem is not new.

No idea if changes in VM have some effect.


Edgar
@morplenauta







Reply | Threaded
Open this post in threaded view
|

Re: A Sad Day

codefrau
In reply to this post by marcel.taeumel
On Fri, Aug 14, 2020 at 2:31 AM Marcel Taeumel <[hidden email]> wrote:
Hi Trygve,

I apologize for any misunderstandings here. I am not an English native speaker. It was not my intent do accuse you of lying.

However, there is a difference between a bug report and an unsubstantiated rant. I did read your entire post "A Sad Day" as the latter. Whose mistake that was, I cannot tell now. Neutral, objective bug reports would read different, I suppose.

It was neither a bug report nor an unsubstantiated rant. It was a criticism of the complexity of all current Smalltalks. The few examples of unexpected complexity in Squeak that Trygve chose to mention are not the actual issue. No need to feel personally attacked.

Having worked with a beautifully tiny system like Smalltalk-78, or even early versions of Squeak, the complexity in modern Squeak is staggering. 

Smalltalk used to be a system that can be fully understood by a single person - truly a personal computing system. That is no longer the case.

All the functionality we added over the years comes at the price of complexity (not to mention speed). It makes the system hard to understand. It makes it hard to see the design principles. We have not found a way to eliminate, or at least hide, any of the complexity we introduced.

I don't think there is a "solution" for this within the current system. We have accepted the complexity, and now we have to live with it. And we have to accept that that alienates people who are looking for simplicity and elegance.

I am sad to see Trygve leave, but I do understand. He didn't even owe us an explanation. Thank you, Trygve!

All the best,
Vanessa


Reply | Threaded
Open this post in threaded view
|

Re: A Sad Day

Nicolas Cellier
Hi all,
But a good part of bloat and complexity came early in the 3.x serie, so it's not a new thing.
For example, Object selectors size is a bit above 100 in squeak 1.x, and above 400 yet in 3.9. Also Morphic was not introduced in 5.3, and most of its complexity was here in 3.x.
By construction, with the goal to be conservative (let old package work) while still introducing new tools and features, we hardly can come back to a lean image. Pharo could be relieved from this compatibility burden, but the desire to catch up outside world complexity (provide many features leveraging tech of the day), and a tendancy to over engineering (like opal) so as to have clean and powerful design will never eliminate bloat, just replace it.
It remains Cuis, which is closer to this simplicity goal. Despite recent burst of features, it may be the closest to early smalltalk spirit, i wish Juan does not forget this goal.
Porting BabyIDE to Cuis might not necessarily be simpler than porting to 5.3 though... it might still be worth a try if complexity matters.

Nicolas

Le ven. 14 août 2020 à 21:42, Vanessa Freudenberg <[hidden email]> a écrit :
On Fri, Aug 14, 2020 at 2:31 AM Marcel Taeumel <[hidden email]> wrote:
Hi Trygve,

I apologize for any misunderstandings here. I am not an English native speaker. It was not my intent do accuse you of lying.

However, there is a difference between a bug report and an unsubstantiated rant. I did read your entire post "A Sad Day" as the latter. Whose mistake that was, I cannot tell now. Neutral, objective bug reports would read different, I suppose.

It was neither a bug report nor an unsubstantiated rant. It was a criticism of the complexity of all current Smalltalks. The few examples of unexpected complexity in Squeak that Trygve chose to mention are not the actual issue. No need to feel personally attacked.

Having worked with a beautifully tiny system like Smalltalk-78, or even early versions of Squeak, the complexity in modern Squeak is staggering. 

Smalltalk used to be a system that can be fully understood by a single person - truly a personal computing system. That is no longer the case.

All the functionality we added over the years comes at the price of complexity (not to mention speed). It makes the system hard to understand. It makes it hard to see the design principles. We have not found a way to eliminate, or at least hide, any of the complexity we introduced.

I don't think there is a "solution" for this within the current system. We have accepted the complexity, and now we have to live with it. And we have to accept that that alienates people who are looking for simplicity and elegance.

I am sad to see Trygve leave, but I do understand. He didn't even owe us an explanation. Thank you, Trygve!

All the best,
Vanessa



Reply | Threaded
Open this post in threaded view
|

Re: A Sad Day

Karl Ramberg
In reply to this post by codefrau
Well said, Vanessa :-)

The complexity comes from people using Squeak and wanting to improve it in many directions.
And managing code , graphics , user interface , faster virtual machine, networking, security etc. are hard problems which add complexity.
And also the added accidental complexity on top of that.

It seems systems only are simple and elegant until people start using them.
One can see that as a good or bad thing.

Solution to the complexity problem will probably take a few generations to solve...

Best,
Karl



On Fri, Aug 14, 2020 at 9:42 PM Vanessa Freudenberg <[hidden email]> wrote:
On Fri, Aug 14, 2020 at 2:31 AM Marcel Taeumel <[hidden email]> wrote:
Hi Trygve,

I apologize for any misunderstandings here. I am not an English native speaker. It was not my intent do accuse you of lying.

However, there is a difference between a bug report and an unsubstantiated rant. I did read your entire post "A Sad Day" as the latter. Whose mistake that was, I cannot tell now. Neutral, objective bug reports would read different, I suppose.

It was neither a bug report nor an unsubstantiated rant. It was a criticism of the complexity of all current Smalltalks. The few examples of unexpected complexity in Squeak that Trygve chose to mention are not the actual issue. No need to feel personally attacked.

Having worked with a beautifully tiny system like Smalltalk-78, or even early versions of Squeak, the complexity in modern Squeak is staggering. 

Smalltalk used to be a system that can be fully understood by a single person - truly a personal computing system. That is no longer the case.

All the functionality we added over the years comes at the price of complexity (not to mention speed). It makes the system hard to understand. It makes it hard to see the design principles. We have not found a way to eliminate, or at least hide, any of the complexity we introduced.

I don't think there is a "solution" for this within the current system. We have accepted the complexity, and now we have to live with it. And we have to accept that that alienates people who are looking for simplicity and elegance.

I am sad to see Trygve leave, but I do understand. He didn't even owe us an explanation. Thank you, Trygve!

All the best,
Vanessa



Reply | Threaded
Open this post in threaded view
|

Re: A Sad Day

timrowledge
In reply to this post by codefrau


> On 2020-08-14, at 12:42 PM, Vanessa Freudenberg <[hidden email]> wrote:
>

>
> Smalltalk used to be a system that can be fully understood by a single person - truly a personal computing system. That is no longer the case.

Yes; a long time ago when the system was smaller (ST80v2 I guess) I could basically recite the source of any method in the system from memory. But back then the image ran in 1Mb. And did very little.

>
> All the functionality we added over the years comes at the price of complexity (not to mention speed). It makes the system hard to understand. It makes it hard to see the design principles. We have not found a way to eliminate, or at least hide, any of the complexity we introduced.

It's an ever present tension.

Stuff in the default image tends to get cared for, because it's right there blowing up when you make a bad change. Too much stuff in the default image makes for irritating bloat (cough, EToys, cough). Have stuff outside the image default image (seaside, magma, metacello, etc) and it gets broken too easily unless enough people are regularly using it to notice issues.

Change things to improve stuff or fix problems and you will inevitably break something else. And always, things get added that are incomplete and not totally thought out and/or not fully integrated with the existing code.

Unless you can afford the time to keep track of all that is going on, every time there is a new release it will be a major effort to port forward. Skip one or two releases and you are in real trouble - which is what I suggest the root issue is here for Trygve. Trying to jump form 3.1 to 5.3 ... eek. It's almost certainly as much trouble as porting from VW8.3 to Sq5.3. However, it *can* be done, with help.

I wish, oh how I wish, that we had the resources to do proper reviews before including new things and bug fixes.

tim
--
tim Rowledge; [hidden email]; http://www.rowledge.org/tim
Oxymorons: Exact estimate



Reply | Threaded
Open this post in threaded view
|

Re: A Sad Day

Nicolas Cellier


Le ven. 14 août 2020 à 22:57, tim Rowledge <[hidden email]> a écrit :


> On 2020-08-14, at 12:42 PM, Vanessa Freudenberg <[hidden email]> wrote:
>

>
> Smalltalk used to be a system that can be fully understood by a single person - truly a personal computing system. That is no longer the case.

Yes; a long time ago when the system was smaller (ST80v2 I guess) I could basically recite the source of any method in the system from memory. But back then the image ran in 1Mb. And did very little.

Ah same reference, I swear that I went thru each and every method in v2.3 and could master and understand what each did.
In STV too, but that's cheating, the compiler was hidden ;)

I can say that such thing never happened in Squeak, despite 15 years of (superficial) usage.

>
> All the functionality we added over the years comes at the price of complexity (not to mention speed). It makes the system hard to understand. It makes it hard to see the design principles. We have not found a way to eliminate, or at least hide, any of the complexity we introduced.

It's an ever present tension.

Stuff in the default image tends to get cared for, because it's right there blowing up when you make a bad change. Too much stuff in the default image makes for irritating bloat (cough, EToys, cough). Have stuff outside the image default image (seaside, magma, metacello, etc) and it gets broken too easily unless enough people are regularly using it to notice issues.

Change things to improve stuff or fix problems and you will inevitably break something else. And always, things get added that are incomplete and not totally thought out and/or not fully integrated with the existing code.

Unless you can afford the time to keep track of all that is going on, every time there is a new release it will be a major effort to port forward. Skip one or two releases and you are in real trouble - which is what I suggest the root issue is here for Trygve. Trying to jump form 3.1 to 5.3 ... eek. It's almost certainly as much trouble as porting from VW8.3 to Sq5.3. However, it *can* be done, with help.

I wish, oh how I wish, that we had the resources to do proper reviews before including new things and bug fixes.

tim
--
tim Rowledge; [hidden email]; http://www.rowledge.org/tim
Oxymorons: Exact estimate





Reply | Threaded
Open this post in threaded view
|

Distributed Squeak

Trygve
In reply to this post by Karl Ramberg
Just an idea while a car is waiting to take me on a vacation.

Imagine:
  1. You have a computer with many independently running images.
  2. A super fast facility pass messages between the images,
  3. Selected services in the release image are move out and deployed as server objects in another image.
  4. Every image appears as a server offering RESTful interfaces to other images.
  5. Selected packages in any repository can be downloaded, compiled, instantiated, and deployed in an image as server objects.
  6. The different images can even run in different computers and use different VMs.
  7. There are now two dimensions to the reuse of functionality: a) download and compile a package. b In some image, install a package and deploy it as a server object.
  8. And presto: The original image is now small and manageable while the whole system can grow without increasing the complexity of the release image.
In haste. This is just an idea. It's full of holes and need a lot of work done to it before it can be usable.. It's a disruptive idea, so please give it some consideration This is before you shoot it down
--Trygve





On 2020-08-14 22:54, karl ramberg wrote:
Well said, Vanessa :-)

The complexity comes from people using Squeak and wanting to improve it in many directions.
And managing code , graphics , user interface , faster virtual machine, networking, security etc. are hard problems which add complexity.
And also the added accidental complexity on top of that.

It seems systems only are simple and elegant until people start using them.
One can see that as a good or bad thing.

Solution to the complexity problem will probably take a few generations to solve...

Best,
Karl



On Fri, Aug 14, 2020 at 9:42 PM Vanessa Freudenberg <[hidden email]> wrote:
On Fri, Aug 14, 2020 at 2:31 AM Marcel Taeumel <[hidden email]> wrote:
Hi Trygve,

I apologize for any misunderstandings here. I am not an English native speaker. It was not my intent do accuse you of lying.

However, there is a difference between a bug report and an unsubstantiated rant. I did read your entire post "A Sad Day" as the latter. Whose mistake that was, I cannot tell now. Neutral, objective bug reports would read different, I suppose.

It was neither a bug report nor an unsubstantiated rant. It was a criticism of the complexity of all current Smalltalks. The few examples of unexpected complexity in Squeak that Trygve chose to mention are not the actual issue. No need to feel personally attacked.

Having worked with a beautifully tiny system like Smalltalk-78, or even early versions of Squeak, the complexity in modern Squeak is staggering. 

Smalltalk used to be a system that can be fully understood by a single person - truly a personal computing system. That is no longer the case.

All the functionality we added over the years comes at the price of complexity (not to mention speed). It makes the system hard to understand. It makes it hard to see the design principles. We have not found a way to eliminate, or at least hide, any of the complexity we introduced.

I don't think there is a "solution" for this within the current system. We have accepted the complexity, and now we have to live with it. And we have to accept that that alienates people who are looking for simplicity and elegance.

I am sad to see Trygve leave, but I do understand. He didn't even owe us an explanation. Thank you, Trygve!

All the best,
Vanessa



    

--

The essence of object orientation is that objects collaborate  to achieve a goal.
Trygve Reenskaug      
[hidden email]
Morgedalsvn. 5A       
http://folk.uio.no/trygver/
N-0378 Oslo             
http://fullOO.info
Norway                     Tel: (+47) 468 58 625



Reply | Threaded
Open this post in threaded view
|

Re: Distributed Squeak

Tobias Pape

> On 15.08.2020, at 09:56, Trygve Reenskaug <[hidden email]> wrote:
>
> Just an idea while a car is waiting to take me on a vacation.

Happy vacation!
-t

>
> Imagine:
> • You have a computer with many independently running images.
> • A super fast facility pass messages between the images,
> • Selected services in the release image are move out and deployed as server objects in another image.
> • Every image appears as a server offering RESTful interfaces to other images.
> • Selected packages in any repository can be downloaded, compiled, instantiated, and deployed in an image as server objects.
> • The different images can even run in different computers and use different VMs.
> • There are now two dimensions to the reuse of functionality: a) download and compile a package. b In some image, install a package and deploy it as a server object.
> • And presto: The original image is now small and manageable while the whole system can grow without increasing the complexity of the release image.
> In haste. This is just an idea. It's full of holes and need a lot of work done to it before it can be usable.. It's a disruptive idea, so please give it some consideration This is before you shoot it down
> --Trygve
>
>
>
>
>
> On 2020-08-14 22:54, karl ramberg wrote:
>> Well said, Vanessa :-)
>>
>> The complexity comes from people using Squeak and wanting to improve it in many directions.
>> And managing code , graphics , user interface , faster virtual machine, networking, security etc. are hard problems which add complexity.
>> And also the added accidental complexity on top of that.
>>
>> It seems systems only are simple and elegant until people start using them.
>> One can see that as a good or bad thing.
>>
>> Solution to the complexity problem will probably take a few generations to solve...
>>
>> Best,
>> Karl
>>
>>
>>
>> On Fri, Aug 14, 2020 at 9:42 PM Vanessa Freudenberg <[hidden email]> wrote:
>> On Fri, Aug 14, 2020 at 2:31 AM Marcel Taeumel <[hidden email]> wrote:
>> Hi Trygve,
>>
>> I apologize for any misunderstandings here. I am not an English native speaker. It was not my intent do accuse you of lying.
>>
>> However, there is a difference between a bug report and an unsubstantiated rant. I did read your entire post "A Sad Day" as the latter. Whose mistake that was, I cannot tell now. Neutral, objective bug reports would read different, I suppose.
>>
>> It was neither a bug report nor an unsubstantiated rant. It was a criticism of the complexity of all current Smalltalks. The few examples of unexpected complexity in Squeak that Trygve chose to mention are not the actual issue. No need to feel personally attacked.
>>
>> Having worked with a beautifully tiny system like Smalltalk-78, or even early versions of Squeak, the complexity in modern Squeak is staggering.
>>
>> Smalltalk used to be a system that can be fully understood by a single person - truly a personal computing system. That is no longer the case.
>>
>> All the functionality we added over the years comes at the price of complexity (not to mention speed). It makes the system hard to understand. It makes it hard to see the design principles. We have not found a way to eliminate, or at least hide, any of the complexity we introduced.
>>
>> I don't think there is a "solution" for this within the current system. We have accepted the complexity, and now we have to live with it. And we have to accept that that alienates people who are looking for simplicity and elegance.
>>
>> I am sad to see Trygve leave, but I do understand. He didn't even owe us an explanation. Thank you, Trygve!
>>
>> All the best,
>> Vanessa




Reply | Threaded
Open this post in threaded view
|

Re: Trying to help to bring BabySRE to modern Squeak

Edgar De Cleene
In reply to this post by marcel.taeumel



On 8/14/20, 9:28 AM, "Marcel Taeumel" <[hidden email]> wrote:

>  Hi Edgar.
>
>>  SRE collaboration freezes .image , so the problem is not new.
>
> Try Morphic-mt.1674 in Trunk or the backports in 5.3, 5.2, or 5.1. Is it
> working now?
> http://forum.world.st/The-Trunk-Morphic-mt-1674-mcz-tp5120542.html
> <http://forum.world.st/The-Trunk-Morphic-mt-1674-mcz-tp5120542.html>
>
> Best,
> Marcel
Do not work in the .image, but maybe the image is corrupt.
I try in fresh 6.0 as this should be the target.

Thanks for you work and be patient.
We can't loose valuable people.


Edgar
@morplenauta



Reply | Threaded
Open this post in threaded view
|

Re: Distributed Squeak

Edgar De Cleene
In reply to this post by Trygve



On 8/15/20, 4:56 AM, "Trygve Reenskaug" <[hidden email]> wrote:

>    Just an idea while a car is waiting to take me on a vacation.
>  
>  Imagine:
>  
> 1. You have a computer with many independently running images.
> 2. A super fast facility pass messages between the images,
> 3. Selected services in the release image are move out and deployed as server
> objects in another image.
> 4. Every image appears as a server offering RESTful interfaces to other
> images.
> 5. Selected packages in any repository can be downloaded, compiled,
> instantiated, and deployed in an image as server objects.
> 6. The different images can even run in different computers and use different
> VMs.
> 7.  
> 8. There are now two dimensions to the reuse of functionality: a) download and
> compile a package. b In some image, install a package and deploy it as a
> server object.
> 9. And presto: The original image is now small and manageable while the whole
> system can grow without increasing the complexity of the release image.
>  In haste. This is just an idea. It's full of holes and need a lot of work
> done to it before it can be usable.. It's a disruptive idea, so please give it
> some consideration This is before you shoot it down
>  --Trygve
>  

I point all to https://github.com/ErikOnBike/CodeParadise
Erik have here some really small and IMHO is a killer.
Is Pharo 8 and still can't port to Squeak.
Maybe some here is interested in such thing ?


Edgar
@morplenauta



Reply | Threaded
Open this post in threaded view
|

Re: Distributed Squeak

Karl Ramberg
In reply to this post by Trygve
Craig Latta has been developing similar stuff for a while with Spoon and other projects:

 "... I’m working on my Context project, a distributed, modular, minimalist computer programming system. It’s a distributed object system with a module system (“Naiad“) and a minimal kernel (“Spoon”). "


Best,
Karl


On Sat, Aug 15, 2020 at 9:56 AM Trygve Reenskaug <[hidden email]> wrote:
Just an idea while a car is waiting to take me on a vacation.

Imagine:
  1. You have a computer with many independently running images.
  2. A super fast facility pass messages between the images,
  3. Selected services in the release image are move out and deployed as server objects in another image.
  4. Every image appears as a server offering RESTful interfaces to other images.
  5. Selected packages in any repository can be downloaded, compiled, instantiated, and deployed in an image as server objects.
  6. The different images can even run in different computers and use different VMs.
  7. There are now two dimensions to the reuse of functionality: a) download and compile a package. b In some image, install a package and deploy it as a server object.
  8. And presto: The original image is now small and manageable while the whole system can grow without increasing the complexity of the release image.
In haste. This is just an idea. It's full of holes and need a lot of work done to it before it can be usable.. It's a disruptive idea, so please give it some consideration This is before you shoot it down
--Trygve





On 2020-08-14 22:54, karl ramberg wrote:
Well said, Vanessa :-)

The complexity comes from people using Squeak and wanting to improve it in many directions.
And managing code , graphics , user interface , faster virtual machine, networking, security etc. are hard problems which add complexity.
And also the added accidental complexity on top of that.

It seems systems only are simple and elegant until people start using them.
One can see that as a good or bad thing.

Solution to the complexity problem will probably take a few generations to solve...

Best,
Karl



On Fri, Aug 14, 2020 at 9:42 PM Vanessa Freudenberg <[hidden email]> wrote:
On Fri, Aug 14, 2020 at 2:31 AM Marcel Taeumel <[hidden email]> wrote:
Hi Trygve,

I apologize for any misunderstandings here. I am not an English native speaker. It was not my intent do accuse you of lying.

However, there is a difference between a bug report and an unsubstantiated rant. I did read your entire post "A Sad Day" as the latter. Whose mistake that was, I cannot tell now. Neutral, objective bug reports would read different, I suppose.

It was neither a bug report nor an unsubstantiated rant. It was a criticism of the complexity of all current Smalltalks. The few examples of unexpected complexity in Squeak that Trygve chose to mention are not the actual issue. No need to feel personally attacked.

Having worked with a beautifully tiny system like Smalltalk-78, or even early versions of Squeak, the complexity in modern Squeak is staggering. 

Smalltalk used to be a system that can be fully understood by a single person - truly a personal computing system. That is no longer the case.

All the functionality we added over the years comes at the price of complexity (not to mention speed). It makes the system hard to understand. It makes it hard to see the design principles. We have not found a way to eliminate, or at least hide, any of the complexity we introduced.

I don't think there is a "solution" for this within the current system. We have accepted the complexity, and now we have to live with it. And we have to accept that that alienates people who are looking for simplicity and elegance.

I am sad to see Trygve leave, but I do understand. He didn't even owe us an explanation. Thank you, Trygve!

All the best,
Vanessa



    

--

The essence of object orientation is that objects collaborate  to achieve a goal.
Trygve Reenskaug      
[hidden email]
Morgedalsvn. 5A       
http://folk.uio.no/trygver/
N-0378 Oslo             
http://fullOO.info
Norway                     Tel: (+47) 468 58 625




Reply | Threaded
Open this post in threaded view
|

Re: A Sad Day

Giorgio Ferraris
In reply to this post by codefrau
if you go out of the commercial (and so more stable), Smalltalks, I think Cuis Smalltalk could be a nice answer to simplicity, try to give a look. They are maniacs about code reduction (less is more to the limit...)
Squeak and Pharo are interesting for the new features added, but you pay the cost in term of complexity

ciao

giorgio

On Fri, Aug 14, 2020 at 9:42 PM Vanessa Freudenberg <[hidden email]> wrote:
On Fri, Aug 14, 2020 at 2:31 AM Marcel Taeumel <[hidden email]> wrote:
Hi Trygve,

I apologize for any misunderstandings here. I am not an English native speaker. It was not my intent do accuse you of lying.

However, there is a difference between a bug report and an unsubstantiated rant. I did read your entire post "A Sad Day" as the latter. Whose mistake that was, I cannot tell now. Neutral, objective bug reports would read different, I suppose.

It was neither a bug report nor an unsubstantiated rant. It was a criticism of the complexity of all current Smalltalks. The few examples of unexpected complexity in Squeak that Trygve chose to mention are not the actual issue. No need to feel personally attacked.

Having worked with a beautifully tiny system like Smalltalk-78, or even early versions of Squeak, the complexity in modern Squeak is staggering. 

Smalltalk used to be a system that can be fully understood by a single person - truly a personal computing system. That is no longer the case.

All the functionality we added over the years comes at the price of complexity (not to mention speed). It makes the system hard to understand. It makes it hard to see the design principles. We have not found a way to eliminate, or at least hide, any of the complexity we introduced.

I don't think there is a "solution" for this within the current system. We have accepted the complexity, and now we have to live with it. And we have to accept that that alienates people who are looking for simplicity and elegance.

I am sad to see Trygve leave, but I do understand. He didn't even owe us an explanation. Thank you, Trygve!

All the best,
Vanessa



Reply | Threaded
Open this post in threaded view
|

Re: A Sad Day

Stephen Davies-3
Hi,

I have I think a good understanding of the principles of Smalltalk 80.

But I admit I find Squeak and Pharo overwhelming - I will blame my increasing age - but Cuis I can get hold of.

Of course I have no doubt that if Squeak is an "old friend" you would not willingly switch to a Smalltalk with so much less in the class library. 

Regards, 
Steve

On Sat, 15 Aug 2020, 11:56 giorgio ferraris, <[hidden email]> wrote:
if you go out of the commercial (and so more stable), Smalltalks, I think Cuis Smalltalk could be a nice answer to simplicity, try to give a look. They are maniacs about code reduction (less is more to the limit...)
Squeak and Pharo are interesting for the new features added, but you pay the cost in term of complexity

ciao

giorgio

On Fri, Aug 14, 2020 at 9:42 PM Vanessa Freudenberg <[hidden email]> wrote:
On Fri, Aug 14, 2020 at 2:31 AM Marcel Taeumel <[hidden email]> wrote:
Hi Trygve,

I apologize for any misunderstandings here. I am not an English native speaker. It was not my intent do accuse you of lying.

However, there is a difference between a bug report and an unsubstantiated rant. I did read your entire post "A Sad Day" as the latter. Whose mistake that was, I cannot tell now. Neutral, objective bug reports would read different, I suppose.

It was neither a bug report nor an unsubstantiated rant. It was a criticism of the complexity of all current Smalltalks. The few examples of unexpected complexity in Squeak that Trygve chose to mention are not the actual issue. No need to feel personally attacked.

Having worked with a beautifully tiny system like Smalltalk-78, or even early versions of Squeak, the complexity in modern Squeak is staggering. 

Smalltalk used to be a system that can be fully understood by a single person - truly a personal computing system. That is no longer the case.

All the functionality we added over the years comes at the price of complexity (not to mention speed). It makes the system hard to understand. It makes it hard to see the design principles. We have not found a way to eliminate, or at least hide, any of the complexity we introduced.

I don't think there is a "solution" for this within the current system. We have accepted the complexity, and now we have to live with it. And we have to accept that that alienates people who are looking for simplicity and elegance.

I am sad to see Trygve leave, but I do understand. He didn't even owe us an explanation. Thank you, Trygve!

All the best,
Vanessa




Reply | Threaded
Open this post in threaded view
|

Re: A Sad Day

K K Subbu
In reply to this post by Nicolas Cellier
On 15/08/20 1:41 am, Nicolas Cellier wrote:
> But a good part of bloat and complexity came early in the 3.x serie, so
> it's not a new thing.
> For example, Object selectors size is a bit above 100 in squeak 1.x, and
> above 400 yet in 3.9. Also Morphic was not introduced in 5.3, and most
> of its complexity was here in 3.x.

Good point! There was a sharp jump during 3.0-3.2 days when Morphic
became the default UI and Nebraska (remote Morphic) was added. Around
1000 classes seems to be tolerance limit for personal image.

Ironically, it is the very remote facility for distributed image that
Trygve proposes that tipped the boat :-(.

Regards .. Subbu

12