Hi Tobias,
yes, I know. Then let's correct my formulation into: "this functionality check is something bad and unexpected". :-)
Best, Christoph Von: Squeak-dev <[hidden email]> im Auftrag von Tobias Pape <[hidden email]>
Gesendet: Montag, 19. April 2021 19:40:43 An: The general-purpose Squeak developers list Betreff: Re: [squeak-dev] The Inbox: Morphic-ct.1586.mcz Hi Christoph
> On 19. Apr 2021, at 19:29, Thiede, Christoph <[hidden email]> wrote: > > Hi Marcel, hi all, > > I keeping considering this type check as something bad and unexpected. :-) Note that in this instance, 'isInspectable' is actually a plain behavior check, not a type check at all. It's not "isMorph" or something. While "is*" is often used/misused/abused as type check, this kind here is actually not one of these : Best regards -Tobias > > First, as I have mentioned earlier, subclasses of ByteString can be indeed non-trivial. This applies to MCVersionName, for example. Second, even a string can be non-trivial, for instance, "String value: 1234", where I only will see a question mark unless I inspect the result. Yes, in the second example, I could also trouble the Compiler again for a new inspect-it, but I just don't see why we should restrict these useful links for certain types of results. Also, in all situations where you do some experiments concerning identity, an inspector would be very helpful to track individual instances. Re-evaluating the expression would not be a solution here. > > To summarize, I just would not say that any object in Squeak can have a boring structure. It's just the other way around, these clickable results are a great way to make the inspector more visible in the system. > > PS: We should also consider making the new links available for print-its in the search bar. > > Best, > Christoph > Von: Squeak-dev <[hidden email]> im Auftrag von K K Subbu <[hidden email]> > Gesendet: Montag, 19. April 2021 18:23:22 > An: [hidden email] > Betreff: Re: [squeak-dev] The Inbox: Morphic-ct.1586.mcz > > All, > > How about: > > Object>>isInspectable ^true > ByteString>>isInspectable ^false > Number>>isInspectable ^false > ... > > so inspectors can skip unitary objects? > > Just a thought .. Subbu > > On 19/04/21 8:36 pm, Marcel Taeumel wrote: > > Hi Christoph, hi all. > > > > I think that we should not highlight the following kinds of Objects to > > reserve this feature for really interesting structures that are worth > > inspecting without an extra evaluate. The kinds to ignore are: > > > > ByteString > > ByteSymbol > > Number > > Boolean > > UndefinedObject > > > > So, we can use both (1) visuals and (2) interactivity to let the more > > complex objects say: "Hey, I have interesting structure! Did you mix up > > print-it with inspect-it? No worries, just click on me." > > > > This effect will not be if any stoopid literal gets this treatment. :-) > > > > Best, > > Marcel > >> > >> Am 19.04.2021 13:21:53 schrieb Thiede, Christoph > >> <[hidden email]>: > >> > >> Hi Marcel, > >> > >> > >> I still stumble upon this edge case for some print-it results that do > >> not support click-to-inspect. Why do we need this exception? :-) > >> > >> > >> > > Also consider this snippet where the print-link does not exist for > >> an MCVersionName > >> > > >> > Looks fine. > >> > >> I don't think it looks fine, why do you think so? :-) > >> > >> Best, > >> Christoph > >> ------------------------------------------------------------------------ > >> *Von:* Squeak-dev <[hidden email]> im > >> Auftrag von Taeumel, Marcel > >> *Gesendet:* Freitag, 16. April 2021 19:52:16 > >> *An:* squeak-dev > >> *Betreff:* Re: [squeak-dev] The Inbox: Morphic-ct.1586.mcz > >> Hi Christoph, > >> > >> I think that this clickable link is a compromise between printString > >> and storeString. For mouse navigation, you can always choose "inspect > >> it" from the context menu on that text selection. ;-) I also found the > >> link color annyoing for simple literals. > >> > >> > Also consider this snippet where the print-link does not exist for > >> an MCVersionName > >> > >> Looks fine. ^__^ I am certain that we will collect more feedback on > >> this feature during the next weeks and months. Let's refine it then. > >> > >> Best, > >> Marcel > >>> > >>> Am 16.04.2021 18:39:10 schrieb Thiede, Christoph > >>> <[hidden email]>: > >>> > >>> Hi Marcel, it's great that you have found a solution to this idea! :-) > >>> > >>> > >>> > + ^ (self class interactivePrintIt and: [(anObject isString > >>> or: [anObject isNumber]) not]) > >>> > >>> > >>> Is this necessary? I know that an inspector for a literal object like > >>> these does not make great sense, but this just feels like an > >>> unnecessary heuristic and limitation for me and adds complexity. I > >>> would like to be able to open an inspector always. Also consider this > >>> snippet where the print-link does not exist for an MCVersionName: :-) > >>> > >>> MCRepository inbox allFileNames first > >>> > >>> > >>> > CI scripts will default to "true". > >>> > >>> > >>> Unfortunately, no, mine just timed out while preparing the image. > >>> Also, my server images for @SqueakSmalltalkBot were interrupted. I'd > >>> opt for keeping preamble/postscript content in the update stream > >>> strictly non-interactive. :-) > >>> > >>> > >>> Best, > >>> > >>> Christoph > >>> > >>> > >>> ------------------------------------------------------------------------ > >>> *Von:* Squeak-dev <[hidden email]> im > >>> Auftrag von Taeumel, Marcel > >>> *Gesendet:* Freitag, 16. April 2021 17:27:54 > >>> *An:* squeak-dev > >>> *Betreff:* Re: [squeak-dev] The Inbox: Morphic-ct.1586.mcz > >>> Hi all! > >>> > >>> It is now in Trunk. You can opt-out via the preference browser. > >>> Still, you will be asked the first time when you update your image. > >>> CI scripts will default to "true". > >>> > >>> Best, > >>> Marcel > >>>> > >>>> Am 17.11.2019 17:36:11 schrieb Jakob Reschke <[hidden email]>: > >>>> > >>>> Thiede, Christoph <[hidden email] > >>>> <[hidden email]>> schrieb am > >>>> Fr., 15. Nov. 2019, 09:38: > >>>> > >>>> > >>>> Just another idea (I seem to have too many of them :D): Some > >>>> kind of UnderlyingObjectAttribute (with a better name, of > >>>> course) an editor can check the selection before compiling it > >>>> when inspectIt/exploreIt is pressed? > >>>> > >>>> > >>>> Example 1: ('2 + 3' asText) -> User presses inspectIt -> Editor > >>>> checks for UnderylingObjectAttribute -> none found, so the > >>>> string is compilaed as usual. > >>>> > >>>> Example 2: (Text string: '2 + 3' attributes: > >>>> (UnderylingObjectAttribute for: 5)) -> User presses inspectIt -> > >>>> Editor finds an UnderylingObjectAttribute -> instead of > >>>> compiling the selection, the cached result is reused for > >>>> the inspector. > >>>> > >>>> We would not even need to display this Attribute visually if it > >>>> works reliably. > >>>> > >>>> > >>>> Make sure it is transient in some way because it would be quite > >>>> annoying if the hidden object were out of date with regards to the text. > > > >
Carpe Squeak!
|
> On 19. Apr 2021, at 19:44, Thiede, Christoph <[hidden email]> wrote: > > Hi Tobias, > > yes, I know. Then let's correct my formulation into: "this functionality check is something bad and unexpected". :-) Ok, I don't really understand your reasoning… -t > > Best, > Christoph > Von: Squeak-dev <[hidden email]> im Auftrag von Tobias Pape <[hidden email]> > Gesendet: Montag, 19. April 2021 19:40:43 > An: The general-purpose Squeak developers list > Betreff: Re: [squeak-dev] The Inbox: Morphic-ct.1586.mcz > > Hi Christoph > > > > On 19. Apr 2021, at 19:29, Thiede, Christoph <[hidden email]> wrote: > > > > Hi Marcel, hi all, > > > > I keeping considering this type check as something bad and unexpected. :-) > > Note that in this instance, 'isInspectable' is actually a plain behavior check, not a type check at all. > It's not "isMorph" or something. While "is*" is often used/misused/abused as type check, this kind here is actually not one of these : > > Best regards > -Tobias > > > > > First, as I have mentioned earlier, subclasses of ByteString can be indeed non-trivial. This applies to MCVersionName, for example. Second, even a string can be non-trivial, for instance, "String value: 1234", where I only will see a question mark unless I inspect the result. Yes, in the second example, I could also trouble the Compiler again for a new inspect-it, but I just don't see why we should restrict these useful links for certain types of results. Also, in all situations where you do some experiments concerning identity, an inspector would be very helpful to track individual instances. Re-evaluating the expression would not be a solution here. > > > > To summarize, I just would not say that any object in Squeak can have a boring structure. It's just the other way around, these clickable results are a great way to make the inspector more visible in the system. > > > > PS: We should also consider making the new links available for print-its in the search bar. > > > > Best, > > Christoph > > Von: Squeak-dev <[hidden email]> im Auftrag von K K Subbu <[hidden email]> > > Gesendet: Montag, 19. April 2021 18:23:22 > > An: [hidden email] > > Betreff: Re: [squeak-dev] The Inbox: Morphic-ct.1586.mcz > > > > All, > > > > How about: > > > > Object>>isInspectable ^true > > ByteString>>isInspectable ^false > > Number>>isInspectable ^false > > ... > > > > so inspectors can skip unitary objects? > > > > Just a thought .. Subbu > > > > On 19/04/21 8:36 pm, Marcel Taeumel wrote: > > > Hi Christoph, hi all. > > > > > > I think that we should not highlight the following kinds of Objects to > > > reserve this feature for really interesting structures that are worth > > > inspecting without an extra evaluate. The kinds to ignore are: > > > > > > ByteString > > > ByteSymbol > > > Number > > > Boolean > > > UndefinedObject > > > > > > So, we can use both (1) visuals and (2) interactivity to let the more > > > complex objects say: "Hey, I have interesting structure! Did you mix up > > > print-it with inspect-it? No worries, just click on me." > > > > > > This effect will not be if any stoopid literal gets this treatment. :-) > > > > > > Best, > > > Marcel > > >> > > >> Am 19.04.2021 13:21:53 schrieb Thiede, Christoph > > >> <[hidden email]>: > > >> > > >> Hi Marcel, > > >> > > >> > > >> I still stumble upon this edge case for some print-it results that do > > >> not support click-to-inspect. Why do we need this exception? :-) > > >> > > >> > > >> > > Also consider this snippet where the print-link does not exist for > > >> an MCVersionName > > >> > > > >> > Looks fine. > > >> > > >> I don't think it looks fine, why do you think so? :-) > > >> > > >> Best, > > >> Christoph > > >> ------------------------------------------------------------------------ > > >> *Von:* Squeak-dev <[hidden email]> im > > >> Auftrag von Taeumel, Marcel > > >> *Gesendet:* Freitag, 16. April 2021 19:52:16 > > >> *An:* squeak-dev > > >> *Betreff:* Re: [squeak-dev] The Inbox: Morphic-ct.1586.mcz > > >> Hi Christoph, > > >> > > >> I think that this clickable link is a compromise between printString > > >> and storeString. For mouse navigation, you can always choose "inspect > > >> it" from the context menu on that text selection. ;-) I also found the > > >> link color annyoing for simple literals. > > >> > > >> > Also consider this snippet where the print-link does not exist for > > >> an MCVersionName > > >> > > >> Looks fine. ^__^ I am certain that we will collect more feedback on > > >> this feature during the next weeks and months. Let's refine it then. > > >> > > >> Best, > > >> Marcel > > >>> > > >>> Am 16.04.2021 18:39:10 schrieb Thiede, Christoph > > >>> <[hidden email]>: > > >>> > > >>> Hi Marcel, it's great that you have found a solution to this idea! :-) > > >>> > > >>> > > >>> > + ^ (self class interactivePrintIt and: [(anObject isString > > >>> or: [anObject isNumber]) not]) > > >>> > > >>> > > >>> Is this necessary? I know that an inspector for a literal object like > > >>> these does not make great sense, but this just feels like an > > >>> unnecessary heuristic and limitation for me and adds complexity. I > > >>> would like to be able to open an inspector always. Also consider this > > >>> snippet where the print-link does not exist for an MCVersionName: :-) > > >>> > > >>> MCRepository inbox allFileNames first > > >>> > > >>> > > >>> > CI scripts will default to "true". > > >>> > > >>> > > >>> Unfortunately, no, mine just timed out while preparing the image. > > >>> Also, my server images for @SqueakSmalltalkBot were interrupted. I'd > > >>> opt for keeping preamble/postscript content in the update stream > > >>> strictly non-interactive. :-) > > >>> > > >>> > > >>> Best, > > >>> > > >>> Christoph > > >>> > > >>> > > >>> ------------------------------------------------------------------------ > > >>> *Von:* Squeak-dev <[hidden email]> im > > >>> Auftrag von Taeumel, Marcel > > >>> *Gesendet:* Freitag, 16. April 2021 17:27:54 > > >>> *An:* squeak-dev > > >>> *Betreff:* Re: [squeak-dev] The Inbox: Morphic-ct.1586.mcz > > >>> Hi all! > > >>> > > >>> It is now in Trunk. You can opt-out via the preference browser. > > >>> Still, you will be asked the first time when you update your image. > > >>> CI scripts will default to "true". > > >>> > > >>> Best, > > >>> Marcel > > >>>> > > >>>> Am 17.11.2019 17:36:11 schrieb Jakob Reschke <[hidden email]>: > > >>>> > > >>>> Thiede, Christoph <[hidden email] > > >>>> <mailto:[hidden email]>> schrieb am > > >>>> Fr., 15. Nov. 2019, 09:38: > > >>>> > > >>>> > > >>>> Just another idea (I seem to have too many of them :D): Some > > >>>> kind of UnderlyingObjectAttribute (with a better name, of > > >>>> course) an editor can check the selection before compiling it > > >>>> when inspectIt/exploreIt is pressed? > > >>>> > > >>>> > > >>>> Example 1: ('2 + 3' asText) -> User presses inspectIt -> Editor > > >>>> checks for UnderylingObjectAttribute -> none found, so the > > >>>> string is compilaed as usual. > > >>>> > > >>>> Example 2: (Text string: '2 + 3' attributes: > > >>>> (UnderylingObjectAttribute for: 5)) -> User presses inspectIt -> > > >>>> Editor finds an UnderylingObjectAttribute -> instead of > > >>>> compiling the selection, the cached result is reused for > > >>>> the inspector. > > >>>> > > >>>> We would not even need to display this Attribute visually if it > > >>>> works reliably. > > >>>> > > >>>> > > >>>> Make sure it is transient in some way because it would be quite > > >>>> annoying if the hidden object were out of date with regards to the text. > > > > > > |
In reply to this post by Christoph Thiede
Hi Christoph, > [...] subclasses of ByteString can be indeed non-trivial. This applies to MCVersionName, for example You are mixing up object structure with structured information. The latter needs interpretation by some other means. Squeak's inspector cannot provide such means of interpretation such as for URLs in strings. > even a string can be non-trivial, for instance, "String value: 1234", where I only will see a question mark unless I inspect the result. That's why I would only skip ByteString, not WideString. > Also, in all situations where you do some experiments concerning identity, an inspector would be very helpful to track individual instances. For most of the literals (or primitive kinds) I listed, object identity does not matter. Small integers and characters are immediate. Symbols are internalized. There is only one "nil", "true", "false." From the top of my head, I cannot think of an example, where you would be interested in two ByteStrings having the same identity. :-) Best, Marcel
|
In reply to this post by K K Subbu
Hi Subbu. > Object>>isInspectable ^true > ByteString>>isInspectable ^false> Number>>isInspectable ^false > ... All objects are "inspectable." I am talking about a language-specific configuration (or tweak?) for that interactive inspection feature. I argue for this small list of exceptions also because I think that this list is unlikely to change in the near future. Best, Marcel
|
In reply to this post by marcel.taeumel
Hi Christoph, hi Marcel,
Am Di., 20. Apr. 2021 um 08:58 Uhr schrieb Marcel Taeumel <[hidden email]>: > > Hi Christoph, > > > [...] subclasses of ByteString can be indeed non-trivial. This applies to MCVersionName, for example > > You are mixing up object structure with structured information. The latter needs interpretation by some other means. Squeak's inspector cannot provide such means of interpretation such as for URLs in strings. > I am struggling to understand how your arguments address each other person's concerns. Did I understand your points correctly: - Christoph wants to get rid of the type check. He argues that sometimes even for the objects with "primitive" structure you may want to get the link. For example, MCVersionName loses its type information when printed, so when you would inspect the result, you would get a String instead of an MCVersionName. The other example is when you want to track identity. Indeed, sometimes it is useful to check whether one String is the same as another one retrieved (inspected) from somewhere else. I do this regularly in Squot when debugging the capturing and materialization (although seldom for Strings at this time because for these it already works as expected). - Marcel says that the links are unnecessary for what are essentially value objects that are not complex enough to need inspection beyond just looking at the print string. Supposedly, one can just reevaluate the result or the expression. Adding the links there produces visual clutter and is distracting. Inspecting an MCVersionName would reveal no further information about the object than the print string does (that is, except for the type!). Christoph, when you inspect your MCVersionNames, do you already know that these are version names or do you inspect them to find out what they are? ("What is this, a String or an MCVersionName?") I fully agree with Marcel on the immediates and singletons (true, false, nil, Symbols). While the type check might not be really necessary, avoiding visual clutter can be a good thing. Tradeoff is with having the special case in the code. Unfortunately(?), Strings in Squeak/Smalltalk are not quite value objects, since they are mutable, can be used as buffers, etc. Depends on the application. On the other hand, Points are mostly used as value objects, but did not get the special case treatment. Though strictly, technically speaking, they are not different from Strings in this regard. Inspecting the result string or the revaluating the original expression to do so is only safe if it does not provoke side effects. For Marcel's selection of classes, there are no side effects of reevaluating the result string. But reevaluating the original expression might not be free of side effects. I guess you would not reevaluate the expression to inspect an immediate or singleton, but for those objects that do have object identity, such as Strings, or where the type of the result is not obvious, MCVersionName, you might want to do that. How about allowing to turn off the highlighting of the result? I mean, make it still clickable, but do not paint it blue. Then there would be no visual clutter, and if you know that the feature is there (and you have subsequently turned off the preference, for example), you would also not easily forget that you can use it. Kind regards, Jakob |
Hi Jakob, Hi Marcel,
thank you for reviving this discussion! :-)
> Christoph, when you inspect your MCVersionNames, do you already know that these are version names or do you inspect them to find out what they are? ("What is this, a String or an MCVersionName?") Definitively also the latter.
> While the type check might not be really necessary, avoiding visual clutter can be a good thing.
-1 from my side here. :-) I see little value in adding complexity - and possibly confusion - in order to "simplify" the appearance - in my opinion, the clutter would become even larger if in some cases, the result is blue,
and in other cases, it isn't. I would rank (visual) consistency the highest here. We are introducing an additional classification here ("is primitive/is literal/is non-sense?") that is non-trivial as we can see from this discussion, and such heuristics feels
a little bit like "too much AI" for a general-purpose system like Squeak/Smalltalk, at least to me.
> How about allowing to turn off the highlighting of the result? I mean, make it still clickable, but do not paint it blue.
This might be a trade-off for me, but on the other hand, the logic is still cluttered. And the explorability is impeded ...
Best,
Christoph
Von: Squeak-dev <[hidden email]> im Auftrag von Jakob Reschke <jakres+[hidden email]>
Gesendet: Samstag, 24. April 2021 11:43:06 An: The general-purpose Squeak developers list Betreff: Re: [squeak-dev] The Inbox: Morphic-ct.1586.mcz Hi Christoph, hi Marcel,
Am Di., 20. Apr. 2021 um 08:58 Uhr schrieb Marcel Taeumel <[hidden email]>: > > Hi Christoph, > > > [...] subclasses of ByteString can be indeed non-trivial. This applies to MCVersionName, for example > > You are mixing up object structure with structured information. The latter needs interpretation by some other means. Squeak's inspector cannot provide such means of interpretation such as for URLs in strings. > I am struggling to understand how your arguments address each other person's concerns. Did I understand your points correctly: - Christoph wants to get rid of the type check. He argues that sometimes even for the objects with "primitive" structure you may want to get the link. For example, MCVersionName loses its type information when printed, so when you would inspect the result, you would get a String instead of an MCVersionName. The other example is when you want to track identity. Indeed, sometimes it is useful to check whether one String is the same as another one retrieved (inspected) from somewhere else. I do this regularly in Squot when debugging the capturing and materialization (although seldom for Strings at this time because for these it already works as expected). - Marcel says that the links are unnecessary for what are essentially value objects that are not complex enough to need inspection beyond just looking at the print string. Supposedly, one can just reevaluate the result or the expression. Adding the links there produces visual clutter and is distracting. Inspecting an MCVersionName would reveal no further information about the object than the print string does (that is, except for the type!). Christoph, when you inspect your MCVersionNames, do you already know that these are version names or do you inspect them to find out what they are? ("What is this, a String or an MCVersionName?") I fully agree with Marcel on the immediates and singletons (true, false, nil, Symbols). While the type check might not be really necessary, avoiding visual clutter can be a good thing. Tradeoff is with having the special case in the code. Unfortunately(?), Strings in Squeak/Smalltalk are not quite value objects, since they are mutable, can be used as buffers, etc. Depends on the application. On the other hand, Points are mostly used as value objects, but did not get the special case treatment. Though strictly, technically speaking, they are not different from Strings in this regard. Inspecting the result string or the revaluating the original expression to do so is only safe if it does not provoke side effects. For Marcel's selection of classes, there are no side effects of reevaluating the result string. But reevaluating the original expression might not be free of side effects. I guess you would not reevaluate the expression to inspect an immediate or singleton, but for those objects that do have object identity, such as Strings, or where the type of the result is not obvious, MCVersionName, you might want to do that. How about allowing to turn off the highlighting of the result? I mean, make it still clickable, but do not paint it blue. Then there would be no visual clutter, and if you know that the feature is there (and you have subsequently turned off the preference, for example), you would also not easily forget that you can use it. Kind regards, Jakob
Carpe Squeak!
|
Hi Jakob, thanks for summarizing our arguments. :-) I would rather try to avoid another preference just to configure this preference. ;-) Maybe we can keep the uniform appearance for clickable text actions. I am surprised that DoItActions look different. Hey Christoph, a simple list of exclusions is not complex. Especially since it reflects stable language (and system) properties. I do appreciate your onward pursue of "perfect consistency." However, the system is full of trade-offs because it serves a rather broad audience. I am also in favor of visual consistency for this feature. By only showing it for actually interesting object structures, we actually achieve consistency for those structures. Having it also for primitives would spoil the usefulness of this feature. People might think they found something interesting -- to then be disappointed that it is just a flat string. Optimizing this feature for MCVersionName?! A domain-specific subclass of String? Well, I consider this design rather unfortunate. In such a case, on might be better of to favor composition over inheritance. That's an anti-pattern. Please do not do that in your projects. :-) ... I suspect an optimization for a database ... not sure. Chris? Hi all, here is again the list of objects I think we should exclude from having a text action on their print-it result: ByteString ByteSymbol Number Boolean UndefinedObject If you find concrete arguments (and examples) against elements on this list, please step forward and name them. :-) Reducing visual clutter is worth a few lines of extra source code. Best, Marcel
|
Hi Marcel,
What is your stance towards using inspectors to quickly check identity, regarding ByteString? Note: to make this practical, one needs to turn on the "Reuse windows" preference. Example workflow: 1. Expression print-it. 2. "Oh I have seen this string before, is it the same instance or another one?" 3. (Click on the result to open the inspector on the result object.) 4. Open an inspector on the other, previously encountered occurrence of the string (might be in another tool). If a second inspector appears, these are two distinct String instances. To further motivate the question in 2., imagine that this ByteString is big, say, a several hundred MB CLOB. :-) Kind regards, Jakob Am Sa., 24. Apr. 2021 um 17:43 Uhr schrieb Marcel Taeumel <[hidden email]>: > > Hi Jakob, > > thanks for summarizing our arguments. :-) I would rather try to avoid another preference just to configure this preference. ;-) Maybe we can keep the uniform appearance for clickable text actions. I am surprised that DoItActions look different. > > Hey Christoph, > > a simple list of exclusions is not complex. Especially since it reflects stable language (and system) properties. I do appreciate your onward pursue of "perfect consistency." However, the system is full of trade-offs because it serves a rather broad audience. > > I am also in favor of visual consistency for this feature. By only showing it for actually interesting object structures, we actually achieve consistency for those structures. Having it also for primitives would spoil the usefulness of this feature. People might think they found something interesting -- to then be disappointed that it is just a flat string. > > Optimizing this feature for MCVersionName?! A domain-specific subclass of String? Well, I consider this design rather unfortunate. In such a case, on might be better of to favor composition over inheritance. That's an anti-pattern. Please do not do that in your projects. :-) ... I suspect an optimization for a database ... not sure. Chris? > > Hi all, > > here is again the list of objects I think we should exclude from having a text action on their print-it result: > > ByteString > ByteSymbol > Number > Boolean > UndefinedObject > > If you find concrete arguments (and examples) against elements on this list, please step forward and name them. :-) > > Reducing visual clutter is worth a few lines of extra source code. > > Best, > Marcel > > Am 24.04.2021 15:42:08 schrieb Thiede, Christoph <[hidden email]>: > > Hi Jakob, Hi Marcel, > > > thank you for reviving this discussion! :-) > > > > Christoph, when you inspect your MCVersionNames, do you already know that these are version names or do you inspect them to find out what they are? ("What is this, a String or an MCVersionName?") > > > Definitively also the latter. > > > While the type check might not be really necessary, avoiding visual clutter can be a good thing. > > -1 from my side here. :-) I see little value in adding complexity - and possibly confusion - in order to "simplify" the appearance - in my opinion, the clutter would become even larger if in some cases, the result is blue, and in other cases, it isn't. I would rank (visual) consistency the highest here. We are introducing an additional classification here ("is primitive/is literal/is non-sense?") that is non-trivial as we can see from this discussion, and such heuristics feels a little bit like "too much AI" for a general-purpose system like Squeak/Smalltalk, at least to me. > > > How about allowing to turn off the highlighting of the result? I mean, make it still clickable, but do not paint it blue. > > This might be a trade-off for me, but on the other hand, the logic is still cluttered. And the explorability is impeded ... > > Best, > Christoph > > ________________________________ > Von: Squeak-dev <[hidden email]> im Auftrag von Jakob Reschke <[hidden email]> > Gesendet: Samstag, 24. April 2021 11:43:06 > An: The general-purpose Squeak developers list > Betreff: Re: [squeak-dev] The Inbox: Morphic-ct.1586.mcz > > Hi Christoph, hi Marcel, > > Am Di., 20. Apr. 2021 um 08:58 Uhr schrieb Marcel Taeumel > <[hidden email]>: > > > > Hi Christoph, > > > > > [...] subclasses of ByteString can be indeed non-trivial. This applies to MCVersionName, for example > > > > You are mixing up object structure with structured information. The latter needs interpretation by some other means. Squeak's inspector cannot provide such means of interpretation such as for URLs in strings. > > > > I am struggling to understand how your arguments address each other > person's concerns. Did I understand your points correctly: > > - Christoph wants to get rid of the type check. He argues that > sometimes even for the objects with "primitive" structure you may want > to get the link. For example, MCVersionName loses its type information > when printed, so when you would inspect the result, you would get a > String instead of an MCVersionName. The other example is when you want > to track identity. Indeed, sometimes it is useful to check whether one > String is the same as another one retrieved (inspected) from somewhere > else. I do this regularly in Squot when debugging the capturing and > materialization (although seldom for Strings at this time because for > these it already works as expected). > > - Marcel says that the links are unnecessary for what are essentially > value objects that are not complex enough to need inspection beyond > just looking at the print string. Supposedly, one can just reevaluate > the result or the expression. Adding the links there produces visual > clutter and is distracting. Inspecting an MCVersionName would reveal > no further information about the object than the print string does > (that is, except for the type!). > > Christoph, when you inspect your MCVersionNames, do you already know > that these are version names or do you inspect them to find out what > they are? ("What is this, a String or an MCVersionName?") > > I fully agree with Marcel on the immediates and singletons (true, > false, nil, Symbols). While the type check might not be really > necessary, avoiding visual clutter can be a good thing. Tradeoff is > with having the special case in the code. > > Unfortunately(?), Strings in Squeak/Smalltalk are not quite value > objects, since they are mutable, can be used as buffers, etc. Depends > on the application. > > On the other hand, Points are mostly used as value objects, but did > not get the special case treatment. Though strictly, technically > speaking, they are not different from Strings in this regard. > > Inspecting the result string or the revaluating the original > expression to do so is only safe if it does not provoke side effects. > For Marcel's selection of classes, there are no side effects of > reevaluating the result string. But reevaluating the original > expression might not be free of side effects. I guess you would not > reevaluate the expression to inspect an immediate or singleton, but > for those objects that do have object identity, such as Strings, or > where the type of the result is not obvious, MCVersionName, you might > want to do that. > > How about allowing to turn off the highlighting of the result? I mean, > make it still clickable, but do not paint it blue. Then there would be > no visual clutter, and if you know that the feature is there (and you > have subsequently turned off the preference, for example), you would > also not easily forget that you can use it. > > Kind regards, > Jakob > > |
In reply to this post by marcel.taeumel
Hi all,
So visual consistency for Christoph means: all results are highlighted(/click-inspectable). Whereas for Marcel it means: all complex/interesting results are highlighted/click-inspectable. What does everyone else think about this? I sometimes wish that the print-it results in the workspace would be treated differently than the text that I typed myself. Highlighting them (link or otherwise) could help to spot the frontier between expression and result after some more actions, but would otherwise not help me much. When I intended to use the printed result in my next expression, highlighting it as a result would be inappropriate, but I rarely ever want to do this. For most complex objects, this is not even possible because their print strings are not Smalltalk expressions. But I cannot use a non-Smalltalk expression with a link on it in my next expression either, so the feature does not help me in that case anyway. (What I would rather need is a "put this into a variable" command, kind of a refactoring operation for the Workspace.) If I wanted to send further messages to a returned 'String' I would most likely move it onto its own line for convenient Cmd-p/i first anyway, I would not keep it to the right of the expression that evaluated to the 'String'. With this reasoning, I would rather lean towards Christoph's interpretation now. (Also I believe it does not hurt so much if one can also inspect the primitive results.) But I have not used the feature in practice so far, so I will let some time pass for now. Kind regards, Jakob Am Sa., 24. Apr. 2021 um 17:43 Uhr schrieb Marcel Taeumel <[hidden email]>: > > Hi Jakob, > > thanks for summarizing our arguments. :-) I would rather try to avoid another preference just to configure this preference. ;-) Maybe we can keep the uniform appearance for clickable text actions. I am surprised that DoItActions look different. > > Hey Christoph, > > a simple list of exclusions is not complex. Especially since it reflects stable language (and system) properties. I do appreciate your onward pursue of "perfect consistency." However, the system is full of trade-offs because it serves a rather broad audience. > > I am also in favor of visual consistency for this feature. By only showing it for actually interesting object structures, we actually achieve consistency for those structures. Having it also for primitives would spoil the usefulness of this feature. People might think they found something interesting -- to then be disappointed that it is just a flat string. > > Optimizing this feature for MCVersionName?! A domain-specific subclass of String? Well, I consider this design rather unfortunate. In such a case, on might be better of to favor composition over inheritance. That's an anti-pattern. Please do not do that in your projects. :-) ... I suspect an optimization for a database ... not sure. Chris? > > Hi all, > > here is again the list of objects I think we should exclude from having a text action on their print-it result: > > ByteString > ByteSymbol > Number > Boolean > UndefinedObject > > If you find concrete arguments (and examples) against elements on this list, please step forward and name them. :-) > > Reducing visual clutter is worth a few lines of extra source code. > > Best, > Marcel > > Am 24.04.2021 15:42:08 schrieb Thiede, Christoph <[hidden email]>: > > Hi Jakob, Hi Marcel, > > > thank you for reviving this discussion! :-) > > > > Christoph, when you inspect your MCVersionNames, do you already know that these are version names or do you inspect them to find out what they are? ("What is this, a String or an MCVersionName?") > > > Definitively also the latter. > > > While the type check might not be really necessary, avoiding visual clutter can be a good thing. > > -1 from my side here. :-) I see little value in adding complexity - and possibly confusion - in order to "simplify" the appearance - in my opinion, the clutter would become even larger if in some cases, the result is blue, and in other cases, it isn't. I would rank (visual) consistency the highest here. We are introducing an additional classification here ("is primitive/is literal/is non-sense?") that is non-trivial as we can see from this discussion, and such heuristics feels a little bit like "too much AI" for a general-purpose system like Squeak/Smalltalk, at least to me. > > > How about allowing to turn off the highlighting of the result? I mean, make it still clickable, but do not paint it blue. > > This might be a trade-off for me, but on the other hand, the logic is still cluttered. And the explorability is impeded ... > > Best, > Christoph > > ________________________________ > Von: Squeak-dev <[hidden email]> im Auftrag von Jakob Reschke <[hidden email]> > Gesendet: Samstag, 24. April 2021 11:43:06 > An: The general-purpose Squeak developers list > Betreff: Re: [squeak-dev] The Inbox: Morphic-ct.1586.mcz > > Hi Christoph, hi Marcel, > > Am Di., 20. Apr. 2021 um 08:58 Uhr schrieb Marcel Taeumel > <[hidden email]>: > > > > Hi Christoph, > > > > > [...] subclasses of ByteString can be indeed non-trivial. This applies to MCVersionName, for example > > > > You are mixing up object structure with structured information. The latter needs interpretation by some other means. Squeak's inspector cannot provide such means of interpretation such as for URLs in strings. > > > > I am struggling to understand how your arguments address each other > person's concerns. Did I understand your points correctly: > > - Christoph wants to get rid of the type check. He argues that > sometimes even for the objects with "primitive" structure you may want > to get the link. For example, MCVersionName loses its type information > when printed, so when you would inspect the result, you would get a > String instead of an MCVersionName. The other example is when you want > to track identity. Indeed, sometimes it is useful to check whether one > String is the same as another one retrieved (inspected) from somewhere > else. I do this regularly in Squot when debugging the capturing and > materialization (although seldom for Strings at this time because for > these it already works as expected). > > - Marcel says that the links are unnecessary for what are essentially > value objects that are not complex enough to need inspection beyond > just looking at the print string. Supposedly, one can just reevaluate > the result or the expression. Adding the links there produces visual > clutter and is distracting. Inspecting an MCVersionName would reveal > no further information about the object than the print string does > (that is, except for the type!). > > Christoph, when you inspect your MCVersionNames, do you already know > that these are version names or do you inspect them to find out what > they are? ("What is this, a String or an MCVersionName?") > > I fully agree with Marcel on the immediates and singletons (true, > false, nil, Symbols). While the type check might not be really > necessary, avoiding visual clutter can be a good thing. Tradeoff is > with having the special case in the code. > > Unfortunately(?), Strings in Squeak/Smalltalk are not quite value > objects, since they are mutable, can be used as buffers, etc. Depends > on the application. > > On the other hand, Points are mostly used as value objects, but did > not get the special case treatment. Though strictly, technically > speaking, they are not different from Strings in this regard. > > Inspecting the result string or the revaluating the original > expression to do so is only safe if it does not provoke side effects. > For Marcel's selection of classes, there are no side effects of > reevaluating the result string. But reevaluating the original > expression might not be free of side effects. I guess you would not > reevaluate the expression to inspect an immediate or singleton, but > for those objects that do have object identity, such as Strings, or > where the type of the result is not obvious, MCVersionName, you might > want to do that. > > How about allowing to turn off the highlighting of the result? I mean, > make it still clickable, but do not paint it blue. Then there would be > no visual clutter, and if you know that the feature is there (and you > have subsequently turned off the preference, for example), you would > also not easily forget that you can use it. > > Kind regards, > Jakob > > |
You could also conduct/enforce an informal user study by just changing
the decision in Trunk after a few months, and count the number of complaints before and after. ;-) Am So., 25. Apr. 2021 um 19:43 Uhr schrieb Jakob Reschke <[hidden email]>: > > Hi all, > > So visual consistency for Christoph means: all results are > highlighted(/click-inspectable). > Whereas for Marcel it means: all complex/interesting results are > highlighted/click-inspectable. > > What does everyone else think about this? > > I sometimes wish that the print-it results in the workspace would be > treated differently than the text that I typed myself. Highlighting > them (link or otherwise) could help to spot the frontier between > expression and result after some more actions, but would otherwise not > help me much. When I intended to use the printed result in my next > expression, highlighting it as a result would be inappropriate, but I > rarely ever want to do this. For most complex objects, this is not > even possible because their print strings are not Smalltalk > expressions. But I cannot use a non-Smalltalk expression with a link > on it in my next expression either, so the feature does not help me in > that case anyway. (What I would rather need is a "put this into a > variable" command, kind of a refactoring operation for the Workspace.) > If I wanted to send further messages to a returned 'String' I would > most likely move it onto its own line for convenient Cmd-p/i first > anyway, I would not keep it to the right of the expression that > evaluated to the 'String'. > > With this reasoning, I would rather lean towards Christoph's > interpretation now. (Also I believe it does not hurt so much if one > can also inspect the primitive results.) But I have not used the > feature in practice so far, so I will let some time pass for now. > > Kind regards, > Jakob > > Am Sa., 24. Apr. 2021 um 17:43 Uhr schrieb Marcel Taeumel > <[hidden email]>: > > > > Hi Jakob, > > > > thanks for summarizing our arguments. :-) I would rather try to avoid another preference just to configure this preference. ;-) Maybe we can keep the uniform appearance for clickable text actions. I am surprised that DoItActions look different. > > > > Hey Christoph, > > > > a simple list of exclusions is not complex. Especially since it reflects stable language (and system) properties. I do appreciate your onward pursue of "perfect consistency." However, the system is full of trade-offs because it serves a rather broad audience. > > > > I am also in favor of visual consistency for this feature. By only showing it for actually interesting object structures, we actually achieve consistency for those structures. Having it also for primitives would spoil the usefulness of this feature. People might think they found something interesting -- to then be disappointed that it is just a flat string. > > > > Optimizing this feature for MCVersionName?! A domain-specific subclass of String? Well, I consider this design rather unfortunate. In such a case, on might be better of to favor composition over inheritance. That's an anti-pattern. Please do not do that in your projects. :-) ... I suspect an optimization for a database ... not sure. Chris? > > > > Hi all, > > > > here is again the list of objects I think we should exclude from having a text action on their print-it result: > > > > ByteString > > ByteSymbol > > Number > > Boolean > > UndefinedObject > > > > If you find concrete arguments (and examples) against elements on this list, please step forward and name them. :-) > > > > Reducing visual clutter is worth a few lines of extra source code. > > > > Best, > > Marcel > > > > Am 24.04.2021 15:42:08 schrieb Thiede, Christoph <[hidden email]>: > > > > Hi Jakob, Hi Marcel, > > > > > > thank you for reviving this discussion! :-) > > > > > > > Christoph, when you inspect your MCVersionNames, do you already know that these are version names or do you inspect them to find out what they are? ("What is this, a String or an MCVersionName?") > > > > > > Definitively also the latter. > > > > > While the type check might not be really necessary, avoiding visual clutter can be a good thing. > > > > -1 from my side here. :-) I see little value in adding complexity - and possibly confusion - in order to "simplify" the appearance - in my opinion, the clutter would become even larger if in some cases, the result is blue, and in other cases, it isn't. I would rank (visual) consistency the highest here. We are introducing an additional classification here ("is primitive/is literal/is non-sense?") that is non-trivial as we can see from this discussion, and such heuristics feels a little bit like "too much AI" for a general-purpose system like Squeak/Smalltalk, at least to me. > > > > > How about allowing to turn off the highlighting of the result? I mean, make it still clickable, but do not paint it blue. > > > > This might be a trade-off for me, but on the other hand, the logic is still cluttered. And the explorability is impeded ... > > > > Best, > > Christoph > > > > ________________________________ > > Von: Squeak-dev <[hidden email]> im Auftrag von Jakob Reschke <[hidden email]> > > Gesendet: Samstag, 24. April 2021 11:43:06 > > An: The general-purpose Squeak developers list > > Betreff: Re: [squeak-dev] The Inbox: Morphic-ct.1586.mcz > > > > Hi Christoph, hi Marcel, > > > > Am Di., 20. Apr. 2021 um 08:58 Uhr schrieb Marcel Taeumel > > <[hidden email]>: > > > > > > Hi Christoph, > > > > > > > [...] subclasses of ByteString can be indeed non-trivial. This applies to MCVersionName, for example > > > > > > You are mixing up object structure with structured information. The latter needs interpretation by some other means. Squeak's inspector cannot provide such means of interpretation such as for URLs in strings. > > > > > > > I am struggling to understand how your arguments address each other > > person's concerns. Did I understand your points correctly: > > > > - Christoph wants to get rid of the type check. He argues that > > sometimes even for the objects with "primitive" structure you may want > > to get the link. For example, MCVersionName loses its type information > > when printed, so when you would inspect the result, you would get a > > String instead of an MCVersionName. The other example is when you want > > to track identity. Indeed, sometimes it is useful to check whether one > > String is the same as another one retrieved (inspected) from somewhere > > else. I do this regularly in Squot when debugging the capturing and > > materialization (although seldom for Strings at this time because for > > these it already works as expected). > > > > - Marcel says that the links are unnecessary for what are essentially > > value objects that are not complex enough to need inspection beyond > > just looking at the print string. Supposedly, one can just reevaluate > > the result or the expression. Adding the links there produces visual > > clutter and is distracting. Inspecting an MCVersionName would reveal > > no further information about the object than the print string does > > (that is, except for the type!). > > > > Christoph, when you inspect your MCVersionNames, do you already know > > that these are version names or do you inspect them to find out what > > they are? ("What is this, a String or an MCVersionName?") > > > > I fully agree with Marcel on the immediates and singletons (true, > > false, nil, Symbols). While the type check might not be really > > necessary, avoiding visual clutter can be a good thing. Tradeoff is > > with having the special case in the code. > > > > Unfortunately(?), Strings in Squeak/Smalltalk are not quite value > > objects, since they are mutable, can be used as buffers, etc. Depends > > on the application. > > > > On the other hand, Points are mostly used as value objects, but did > > not get the special case treatment. Though strictly, technically > > speaking, they are not different from Strings in this regard. > > > > Inspecting the result string or the revaluating the original > > expression to do so is only safe if it does not provoke side effects. > > For Marcel's selection of classes, there are no side effects of > > reevaluating the result string. But reevaluating the original > > expression might not be free of side effects. I guess you would not > > reevaluate the expression to inspect an immediate or singleton, but > > for those objects that do have object identity, such as Strings, or > > where the type of the result is not obvious, MCVersionName, you might > > want to do that. > > > > How about allowing to turn off the highlighting of the result? I mean, > > make it still clickable, but do not paint it blue. Then there would be > > no visual clutter, and if you know that the feature is there (and you > > have subsequently turned off the preference, for example), you would > > also not easily forget that you can use it. > > > > Kind regards, > > Jakob > > > > |
In reply to this post by Jakob Reschke
Hi Jakob. > What is your stance towards using inspectors to quickly check > identity, regarding ByteString?I guess that I usually don't do it. I normally do not work in domains where efficient string construction matters or individual bytes/characters might fail ... waiting to be inspected. If I would expect a larger payload from a web request, for example, I would normally do explore-it or inspect-it directly -- or have the WebResponse open in an explorer already. I only rely on symbols being identical. (I slightly recall a discussion where something in Squot relies on PackageInfo to never change its identity. ... which I still regard as a design smell bc. we have symbols for that and package names are symbols.) > To further motivate the question in 2., imagine that this ByteString > is big, say, a several hundred MB CLOB. :-)I would expect that, in such a scenario, print-it would rarely be used. Especially since that click would open a new tool and returning to that old one might destroy the text selection of "mouse over keyboard focus" is not enabled. Then you would have to remember how text undo works. Hmmm... we might want to remove that interactive print-it text after the user has clicked on it :-) Best, Marcel
|
In reply to this post by Jakob Reschke
Hi all, please note that "CMD+0" will immediately remove that text action after the print-it (CMD+P) if you want to use it for something else. :-) Best, Marcel
|
Hi Marcel,
> I would expect that, in such a scenario, print-it would rarely be used. You are arguing from the status quo where printed-it (print-itted?) results are effectively lost for further observation. With the new attribute, a workflow no longer needs to make this assumption. I would rather
think of these attributes as notebook-like cell outputs. Unless a user wants to reuse the result in another expression from within the same text field, he or she is not required to use any variables at all. In contexts without workspace bindings (such as inspectors),
this is even the only way now to persist object results. Thus, speaking generally, users could indeed rely on print-its for costly operations as of now. :-)
> Hmmm... we might want to remove that interactive print-it text after the user has clicked on it :-)
Please don't introduce self-destroying objects in Squeak! :-)
Best,
Christoph
Von: Squeak-dev <[hidden email]> im Auftrag von Taeumel, Marcel
Gesendet: Montag, 26. April 2021 18:53:40 An: squeak-dev Betreff: Re: [squeak-dev] The Inbox: Morphic-ct.1586.mcz
Hi all,
please note that "CMD+0" will immediately remove that text action after the print-it (CMD+P) if you want to use it for something else. :-)
Best,
Marcel
Carpe Squeak!
|
Hi Christoph. > With the new attribute, a workflow no longer needs to make this assumption. I am not talking about changing people. I hypothesized existing workflows. :-) What are people doing now and how can we avoid disrupting existing knowledge and expectations. Well, I am trying to treat this as a new feature, knowing that you have been using it for quite some time now. Any statistics on clicking on ByteStrings? > Please don't introduce self-destroying objects in Squeak! :-) Who would ever want to keep the browser open after saving that source code? What's done is done. :-D Best, Marcel
|
> Any statistics on clicking on ByteStrings? Not yet. A Trunk-wide telemetry program might help. :-) Apart from that, I think that I would use the feature more often if it was accessible via keyboard.
> Who would ever want to keep the browser open after saving that source code? What's done is done. :-D
Not if you work in short feedback cycles, I guess ...
("Inspect - not what I wanted - close again. Think two seconds - no, I need this indeed - inspect again". Also known as "fiddling around". I do this very often ...)
Best,
Christoph
Von: Squeak-dev <[hidden email]> im Auftrag von Taeumel, Marcel
Gesendet: Dienstag, 27. April 2021 16:59:12 An: squeak-dev Betreff: Re: [squeak-dev] The Inbox: Morphic-ct.1586.mcz
Hi Christoph.
> With the new attribute, a workflow no longer needs to make this assumption.
I am not talking about changing people. I hypothesized existing workflows. :-) What are people doing now and how can we avoid disrupting existing knowledge and expectations.
Well, I am trying to treat this as a new feature, knowing that you have been using it for quite some time now. Any statistics on clicking on ByteStrings?
> Please don't introduce self-destroying objects in Squeak! :-)
Who would ever want to keep the browser open after saving that source code? What's done is done. :-D
Best,
Marcel
Carpe Squeak!
|
Free forum by Nabble | Edit this page |