<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Hi Hernán,</p>
    <p>Points taken. Just pushed your suggestion to GitHub.</p>
    <p>Thanks!</p>
    <div class="moz-cite-prefix">On 2026-04-10 7:35 PM, Hernán Wilkinson
      via Cuis-dev wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAGgF3Gy_gWWfRGvyK7cWwoAMWxeMs449EDtkeCJ4d1PwrmEUcQ@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="ltr">Hi, 
        <div> I think that an important heuristic, or rule if you wish,
          of software design is to avoid surprises, also known as "the
          principle of least astonishment."</div>
        <div> When doing "SystemWindow open: aModel" opens the debugger
          with an MNU, it's surprising because the first thing you think
          is that you made a mistake... As far as I see it, MNU
          indicates an error, so I think it is better not to get an MNU.</div>
        <div> Is it better to signal a subclassResponsibility or to do
          nothing? It will depend: if it makes sense for the instance to
          exist, do nothing, if it does not, signal a
          subclassResponsibility. In this case I think it is better to
          implement #buildMorphicWindow to do nothing and write a
          comment stating that subclasses can re define it if they want
          to add morphs at instance creation time. Why? Because it makes
          sense to have system windows without any morph, you can
          already do this by evaluating "SystemWindow new openInWorld".</div>
        <div> What about #subclassOptionalResponsibility? Following the
          idea of the previous phrase, I don't think adding this new
          message makes sense. As I see it, this adds complexity and
          raises doubts, such as why it is optional? when should I
          redefine it? etc</div>
        <div><br>
        </div>
        <div> I always try to make my classes easy to understand,
          consistent, and helpful in showing how to use them without
          generating doubts. That is why for example I only have one
          instance message that sends #new, the other instance messages
          are defined based on the one that sends #new. I treat MNU as
          an indication of an implementation error because it means I
          made a mistake somewhere. Receiving an MNU during a normal
          execution path, as the message #open: allows, is confusing
          from my point of view.</div>
        <div><br>
        </div>
        <div> Anyway, I think it is better in this case to implement
          #buildMorphicWindow to do nothing, avoid surprises and
          document that you can redefine it if you wish to add morphs
          when instantiating a subclass.</div>
        <div><br>
        </div>
        <div>  In retrospect, it would be great to have these kinds of
          talks using another medium :-) and maybe with a mate/coffe or
          a bear </div>
        <div><br>
        </div>
        <div>Cheers!</div>
        <div>Hernan.</div>
      </div>
      <br>
      <div class="gmail_quote gmail_quote_container">
        <div dir="ltr" class="gmail_attr">On Wed, Apr 8, 2026 at 4:01 PM
          Nicolás Papagna Maldonado via Cuis-dev <<a
            href="mailto:cuis-dev@lists.cuis.st" moz-do-not-send="true"
            class="moz-txt-link-freetext">cuis-dev@lists.cuis.st</a>>
          wrote:<br>
        </div>
        <blockquote class="gmail_quote"
style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
          <div dir="auto">
            <div>Hi folks!</div>
            <div dir="auto"><br>
            </div>
            <div dir="auto">We stumbled on this issue as well. It's an
              interesting problem to think about. The following is what
              I believe could be a fun idea to explore.</div>
            <div dir="auto"><br>
            </div>
            <div dir="auto">We came to the conclusion that the root of
              this issue is that windows might be assuming two roles:
              the window itself and the object responsible to compose
              it.</div>
            <div dir="auto"><br>
            </div>
            <div dir="auto">Separating these roles in two different
              objects (say SystemWindow  + MyWindowBuilder) removes the
              need to have #buildMorphicWindow in SystemWindow.</div>
            <div dir="auto"><br>
            </div>
            <div dir="auto">Currently, builders are "inlined" and
              implemented using the subclass machinery by overriding
              #buildMorphicWindow (not a separate object).</div>
            <div dir="auto"><br>
            </div>
            <div dir="auto">Whether a separate object is a good
              fit/justified or makes sense is another thing to think
              about and probably will depend on many things :)</div>
            <div dir="auto"><br>
            </div>
            <div dir="auto">Cheers!</div>
            <div dir="auto">Nico PM</div>
          </div>
          <br>
          <div class="gmail_quote">
            <div dir="ltr" class="gmail_attr">On Wed, Apr 8, 2026, 15:42
              Juan Vuletich via Cuis-dev <<a
                href="mailto:cuis-dev@lists.cuis.st" target="_blank"
                moz-do-not-send="true" class="moz-txt-link-freetext">cuis-dev@lists.cuis.st</a>>
              wrote:<br>
            </div>
            <blockquote class="gmail_quote"
style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
              <div>
                <p>Hi Facu,</p>
                <p>(inline)</p>
                <div>On 2026-04-07 4:34 PM, Facundo Javier Gelatti via
                  Cuis-dev wrote:<br>
                </div>
                <blockquote type="cite">
                  <div dir="ltr">
                    <div dir="ltr">
                      <div>This is very interesting! I think what you
                        say makes sense.</div>
                      <div><br>
                      </div>
                      <div>You leave me thinking about that distinction
                        (i.e. a method that we strongly expect to be
                        there, vs. a method that <i>could</i> be there
                        for completeness, but which is not really
                        necessary). I guess this is something I don't
                        think too much about when I consider the "type"
                        of an object (i.e. which messages it should be
                        able to correctly understand). I think I tend to
                        view each message as either part or not part of
                        the expected protocol, not something in between
                        (like "maybe/probably part of the protocol").</div>
                    </div>
                  </div>
                </blockquote>
                <p>I think that there are several protocols that a class
                  may provide. Some maybe subsets of others.
                  #buildMorphicWindow is part of an expanded protocol
                  that only some windows provide.</p>
                <blockquote type="cite">
                  <div dir="ltr">
                    <div dir="ltr">
                      <div><br>
                      </div>
                      <div>Other things that I have in my mind:<br>
                        <ul>
                          <li>I'm not sure if we should have another
                            marker for these "nice to have" messages. My
                            first reaction is "no", just because we'd be
                            adding more elements to think about in the
                            system; but then I come back to the original
                            distinction, which is something we should
                            think about anyway (even if implicitly)!</li>
                          <li>One concrete "middle ground" in this case
                            could be to implement
                            SystemWindow>>#buildMorphicWindow as
                            an empty method, maybe with a comment
                            mentioning that it's just a non-essential
                            extension point which <i>could</i> be
                            overridden by subclasses (but it's not
                            necessary to do so to have e.g. #open:label:
                            work, etc.).</li>
                        </ul>
                      </div>
                    </div>
                  </div>
                </blockquote>
                <p>Having #buildMorphicWindow as an empty method is not
                  good IMO because it can hide the problem. We want
                  _some_ exception. A DNU is better than just continue
                  silently. But I like the idea of a middle ground. In
                  this case, I implemented and called
                  #subclassOptionalResponsibility. A reasonable error
                  message plus some comments may be a good solution.
                  Please take a look, it is now at GitHub.</p>
                <blockquote type="cite">
                  <div dir="ltr">
                    <div dir="ltr">
                      <div><br>
                      </div>
                      <div>I hope my comments make sense (mostly things
                        to ponder, we don't necessarily need to act on
                        them right now).</div>
                    </div>
                  </div>
                </blockquote>
                <p>Of course they do. This kind of discussion is great,
                  it enables polishing the system!</p>
                <blockquote type="cite">
                  <div dir="ltr">
                    <div dir="ltr">
                      <div><br>
                      </div>
                      <div>Cheers!</div>
                      <div>Facu</div>
                      <div><br>
                      </div>
                    </div>
                  </div>
                </blockquote>
                <p>Cheers!</p>
                <blockquote type="cite">
                  <div dir="ltr"><br>
                    <div class="gmail_quote">
                      <div dir="ltr" class="gmail_attr">El mar, 7 abr
                        2026 a las 15:39, Juan Vuletich (<<a
                          href="mailto:juan@jvuletich.org"
                          rel="noreferrer" target="_blank"
                          moz-do-not-send="true"
                          class="moz-txt-link-freetext">juan@jvuletich.org</a>>)
                        escribió:<br>
                      </div>
                      <blockquote class="gmail_quote"
style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi
                        Facu,<br>
                        <br>
                        I don't like adding a send to
                        #subclassResponsibility in the abstract <br>
                        class in this case. #subclassResponsibility is a
                        strong assertion from <br>
                        the system that all subclasses should
                        reimplement that method. It is a <br>
                        message directed to any developer adding a new
                        subclass. And in this <br>
                        case, that's not true. There are subclasses that
                        don't need that method <br>
                        at all. It is true, #open:label: will fail. That
                        only means that <br>
                        #open:label: is not appropriate for them. Adding
                        the call to <br>
                        #subclassResponsibility would not change this
                        fact.<br>
                        <br>
                        Hope this makes sense to you.<br>
                        <br>
                        Thanks,<br>
                        <br>
                        On 2026-04-02 4:14 PM, Facundo Javier Gelatti
                        via Cuis-dev wrote:<br>
                        > The #buildMorphicWindow message is sent
                        from SystemWindow class >> <br>
                        > #open:label:, and the method is on many
                        window classes on the system, <br>
                        > so I thought it'd be nice to have the
                        abstract method in SystemWindow. <br>
                        > I attach a (very small) change that adds
                        that method.<br>
                        ><br>
                        > I also noticed this method is missing
                        in TranscriptWindow, <br>
                        > WorkspaceWindow and PreDebugWindow, so the
                        #open:label: message is <br>
                        > failing on those classes. I'm not sure what
                        we should do about them.<br>
                        ><br>
                        > Cheers!<br>
                        > Facu<br>
                        ><br>
                        -- <br>
                        Juan Vuletich<br>
                        <a href="http://www.cuis.st"
                          rel="noreferrer noreferrer" target="_blank"
                          moz-do-not-send="true">www.cuis.st</a><br>
                        <a href="http://github.com/jvuletich"
                          rel="noreferrer noreferrer" target="_blank"
                          moz-do-not-send="true">github.com/jvuletich</a><br>
                        <a
href="http://researchgate.net/profile/Juan-Vuletich"
                          rel="noreferrer noreferrer" target="_blank"
                          moz-do-not-send="true">researchgate.net/profile/Juan-Vuletich</a><br>
                        <a
href="http://independent.academia.edu/JuanVuletich"
                          rel="noreferrer noreferrer" target="_blank"
                          moz-do-not-send="true">independent.academia.edu/JuanVuletich</a><br>
                        <a
href="http://patents.justia.com/inventor/juan-manuel-vuletich"
                          rel="noreferrer noreferrer" target="_blank"
                          moz-do-not-send="true">patents.justia.com/inventor/juan-manuel-vuletich</a><br>
                        <br>
                      </blockquote>
                    </div>
                  </div>
                  <br>
                  <fieldset></fieldset>
                </blockquote>
                <pre cols="72">-- 
Juan Vuletich
<a href="http://www.cuis.st" rel="noreferrer" target="_blank"
                moz-do-not-send="true">www.cuis.st</a>
<a href="http://github.com/jvuletich" rel="noreferrer" target="_blank"
                moz-do-not-send="true">github.com/jvuletich</a>
<a href="http://researchgate.net/profile/Juan-Vuletich" rel="noreferrer"
                target="_blank" moz-do-not-send="true">researchgate.net/profile/Juan-Vuletich</a>
<a href="http://independent.academia.edu/JuanVuletich" rel="noreferrer"
                target="_blank" moz-do-not-send="true">independent.academia.edu/JuanVuletich</a>
<a href="http://patents.justia.com/inventor/juan-manuel-vuletich"
                rel="noreferrer" target="_blank" moz-do-not-send="true">patents.justia.com/inventor/juan-manuel-vuletich</a></pre>
              </div>
              -- <br>
              Cuis-dev mailing list<br>
              <a href="mailto:Cuis-dev@lists.cuis.st" rel="noreferrer"
                target="_blank" moz-do-not-send="true"
                class="moz-txt-link-freetext">Cuis-dev@lists.cuis.st</a><br>
              <a href="https://lists.cuis.st/mailman/listinfo/cuis-dev"
                rel="noreferrer noreferrer" target="_blank"
                moz-do-not-send="true" class="moz-txt-link-freetext">https://lists.cuis.st/mailman/listinfo/cuis-dev</a><br>
            </blockquote>
          </div>
          -- <br>
          Cuis-dev mailing list<br>
          <a href="mailto:Cuis-dev@lists.cuis.st" target="_blank"
            moz-do-not-send="true" class="moz-txt-link-freetext">Cuis-dev@lists.cuis.st</a><br>
          <a href="https://lists.cuis.st/mailman/listinfo/cuis-dev"
            rel="noreferrer" target="_blank" moz-do-not-send="true"
            class="moz-txt-link-freetext">https://lists.cuis.st/mailman/listinfo/cuis-dev</a><br>
        </blockquote>
      </div>
      <div><br clear="all">
      </div>
      <div><br>
      </div>
      <span class="gmail_signature_prefix">-- </span><br>
      <div dir="ltr" class="gmail_signature">
        <div dir="ltr">
          <div>
            <div dir="ltr">
              <div style="font-size:small">
                <div dir="ltr">
                  <div dir="ltr">
                    <div style="font-size:12.8px"><span
style="font-family:tahoma,sans-serif;font-size:xx-small;border-collapse:collapse"><strong><span
                            style="font-size:8pt"><span
                              style="font-size:small"><font size="2"><span
                                  style="font-weight:normal"><span
                                    style="font-weight:bold">Hernán
                                    Wilkinson</span><br>
                                  Agile Software Development, Teaching
                                  & Coaching</span></font></span></span></strong></span></div>
                    <div style="font-size:12.8px"><span
style="font-family:tahoma,sans-serif;font-size:xx-small;border-collapse:collapse"><strong><span
                            style="font-size:8pt"><span
                              style="font-size:small"><font size="2"><span
                                  style="font-weight:normal">Phone:
                                  +54-011</span></font></span></span></strong></span><font
                        face="tahoma, sans-serif" size="2">-4893-2057</font></div>
                    <div style="font-size:12.8px"><strong
style="font-family:tahoma,sans-serif;font-size:xx-small"><span
                          style="font-size:8pt"><span
                            style="font-size:small"><font size="2"><span
                                style="font-weight:normal">Twitter:
                                @HernanWilkinson</span></font></span></span></strong></div>
                    <div style="font-size:12.8px"><span
style="font-family:tahoma,sans-serif;font-size:xx-small;border-collapse:collapse"><strong><span
                            style="font-size:8pt"><span
                              style="font-size:small"><font size="2"><span
                                  style="font-weight:normal">site: <a
                                    href="http://www.10pines.com/"
                                    style="color:rgb(17,65,112)"
                                    target="_blank"
                                    moz-do-not-send="true">http://www.10Pines.com</a></span></font></span></span></strong></span></div>
                    <div style="font-size:12.8px"><font
                        face="tahoma, sans-serif"><span
                          style="border-collapse:collapse">Address: Alem
                          896</span></font>, Floor 6, Buenos Aires,
                      Argentina</div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
      <br>
      <fieldset class="moz-mime-attachment-header"></fieldset>
    </blockquote>
    <pre class="moz-signature" cols="72">-- 
Juan Vuletich
<a class="moz-txt-link-abbreviated" href="http://www.cuis.st">www.cuis.st</a>
github.com/jvuletich
researchgate.net/profile/Juan-Vuletich
independent.academia.edu/JuanVuletich
patents.justia.com/inventor/juan-manuel-vuletich</pre>
  </body>
</html>