<div dir="ltr">great!! thanks :-) </div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Sat, Apr 11, 2026 at 9:56 PM Juan Vuletich <<a href="mailto:juan@jvuletich.org">juan@jvuletich.org</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"><u></u>

  
    
  
  <div>
    <p>BTW, saved it with your author initials.</p>
    <p>Cheers!</p>
    <div>On 2026-04-11 9:54 PM, Juan Vuletich
      wrote:<br>
    </div>
    <blockquote type="cite">
      
      <p>Hi Hernán,</p>
      <p>Points taken. Just pushed your suggestion to GitHub.</p>
      <p>Thanks!</p>
      <div>On 2026-04-10 7:35 PM, Hernán
        Wilkinson via Cuis-dev wrote:<br>
      </div>
      <blockquote type="cite">
        
        <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">
          <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" target="_blank">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">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">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">www.cuis.st</a><br>
                          <a href="http://github.com/jvuletich" rel="noreferrer noreferrer" target="_blank">github.com/jvuletich</a><br>
                          <a href="http://researchgate.net/profile/Juan-Vuletich" rel="noreferrer noreferrer" target="_blank">researchgate.net/profile/Juan-Vuletich</a><br>
                          <a href="http://independent.academia.edu/JuanVuletich" rel="noreferrer noreferrer" target="_blank">independent.academia.edu/JuanVuletich</a><br>
                          <a href="http://patents.justia.com/inventor/juan-manuel-vuletich" rel="noreferrer noreferrer" target="_blank">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">www.cuis.st</a>
<a href="http://github.com/jvuletich" rel="noreferrer" target="_blank">github.com/jvuletich</a>
<a href="http://researchgate.net/profile/Juan-Vuletich" rel="noreferrer" target="_blank">researchgate.net/profile/Juan-Vuletich</a>
<a href="http://independent.academia.edu/JuanVuletich" rel="noreferrer" target="_blank">independent.academia.edu/JuanVuletich</a>
<a href="http://patents.justia.com/inventor/juan-manuel-vuletich" rel="noreferrer" target="_blank">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">Cuis-dev@lists.cuis.st</a><br>
                <a href="https://lists.cuis.st/mailman/listinfo/cuis-dev" rel="noreferrer noreferrer" target="_blank">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">Cuis-dev@lists.cuis.st</a><br>
            <a href="https://lists.cuis.st/mailman/listinfo/cuis-dev" rel="noreferrer" target="_blank">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">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></fieldset>
      </blockquote>
      <pre cols="72">-- 
Juan Vuletich
<a href="http://www.cuis.st" target="_blank">www.cuis.st</a>
<a href="http://github.com/jvuletich" target="_blank">github.com/jvuletich</a>
<a href="http://researchgate.net/profile/Juan-Vuletich" target="_blank">researchgate.net/profile/Juan-Vuletich</a>
<a href="http://independent.academia.edu/JuanVuletich" target="_blank">independent.academia.edu/JuanVuletich</a>
<a href="http://patents.justia.com/inventor/juan-manuel-vuletich" target="_blank">patents.justia.com/inventor/juan-manuel-vuletich</a></pre>
    </blockquote>
    <pre cols="72">-- 
Juan Vuletich
<a href="http://www.cuis.st" target="_blank">www.cuis.st</a>
<a href="http://github.com/jvuletich" target="_blank">github.com/jvuletich</a>
<a href="http://researchgate.net/profile/Juan-Vuletich" target="_blank">researchgate.net/profile/Juan-Vuletich</a>
<a href="http://independent.academia.edu/JuanVuletich" target="_blank">independent.academia.edu/JuanVuletich</a>
<a href="http://patents.justia.com/inventor/juan-manuel-vuletich" target="_blank">patents.justia.com/inventor/juan-manuel-vuletich</a></pre>
  </div>

</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">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>