<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Hi Juan,<br>
      <br>
      sorry for the long delay, I caught a rather nasty cold.<br>
      <br>
      First and most important:<br>
      <b>Thank your for your work!</b><br>
      <br>
      Second and less important:<br>
      Haver's image saving problems are gone with Cuis Version 6.2 and
      6.3.<br>
      There are some minor issues like<br>
      <ul>
        <li>a different order of menu items in the preference menu
          (trivial to fix)</li>
        <li>font loading, the <tt>TrueTypeFonts</tt> directory is not
          found in my setup (easy to fix)<br>
        </li>
      </ul>
      <br>
      For the remainder, please see my inline comments.<br>
      <br>
      <br>
      Best Regards,<br>
      <br>
      Gerald<br>
      <br>
      <br>
      <br>
      On 12/22/23 1:30 PM, Juan Vuletich wrote:<br>
    </div>
    <blockquote type="cite" cite="mid:65858148.9040904@cuis.st">Hi
      Gerald,
      <br>
      <br>
      On 12/22/2023 6:44 AM, Gerald Klix via Cuis-dev wrote:
      <br>
      <blockquote type="cite">Hi Juan,
        <br>
        <br>
        still one hour left to answer your mail.
        <br>
        <br>
        I discovered that Cuis now automatically creates a UserPrefs.txt
        <br>
        file. I am not sure whether this is really clever.
        <br>
        I faintly remember some support cases, where you directed
        <br>
        users to delete that file, because their changes where not
        persisted
        <br>
        in their images. Now it is persistent, but all images use the
        same settings.
        <br>
        Users accustomed to the old behavior will be baffled.
        <br>
      </blockquote>
      <br>
      When there was no prefs file, people would be annoyed by the need
      to save the image to keep their preferences, and their preferences
      being lost when a new image was published.
      <br>
      <br>
      When I added the file, people would get annoyed that whatever they
      chose with the Preferences menu was not persisted, even if they
      saved the image. Needing to edit an external file when there was a
      Preferences menu made no sense.
      <br>
      <br>
      What I did is to create the file automatically when you change a
      preference (but only for GUI size, ANSI/ST-80 assignment, and
      ClickToFocus). Your preferences persist regardless of saving the
      image or not, and you don't need to edit the file by hand.
      <br>
      <br>
      If someone prefers to have #userBaseDirectory tied to the main
      Cuis folder, they can use the -udIsBase command line argument, as
      I said in another email yesterday.
      <br>
      <br>
      Changing behavior is not a problem, especially if the new behavior
      is more comfortable and more flexible than the old one.
      <br>
    </blockquote>
    IC, to describe the situation in German: „Einen Tod muß man
    sterben.“, meaning you have to choose one evil.<br>
    <br>
    I can only think of one – rather nifty – improvement:<br>
    Add two preference menu options like:<br>
    <br>
    'Save preferences globally'<br>
    This one selects the currently implemented behavior.<br>
    <br>
    'Save preferences only in image'<br>
    This one implements the old behavior.<br>
    <br>
    Both will be persisted in <tt>UsersPrefs.txt</tt>. The later<br>
    serves as a flag, that means: Ignore every other setting in <tt>UserPrefs.txt</tt>
    and<br>
    stick to the settings that are already persistent in the image.<br>
    <blockquote type="cite" cite="mid:65858148.9040904@cuis.st">
      <br>
      <blockquote type="cite">Please don't get me wrong, personally I
        can live with that change,
        <br>
        but it's just another feature that needs to be documented,
        explained
        <br>
        and supported (by answering questions).
        <br>
        <br>
        Please see below for my answers.
        <br>
        ...
        <br>
        Fair enough. The script needs bash and sudo; it should be
        replaced by something simpler.
        <br>
        <blockquote type="cite">
          <blockquote type="cite">Maybe a simple image, like your hello
            world demo, that starts the actual image is better.
            <br>
            This approach would be a clear case of eat your own dog-food
            ;-}
            <br>
(<a class="moz-txt-link-freetext" href="https://lists.cuis.st/mailman/archives/cuis-dev/2023-October/008099.html">https://lists.cuis.st/mailman/archives/cuis-dev/2023-October/008099.html</a>)
            <br>
          </blockquote>
          <br>
          I don't see the need for an "official" way to do that. Expert
          users can set up their environment as they prefer. In other
          words, that's a nice idea, but doesn't need to be part of the
          Cuis core. More like a community developed optional feature /
          workflow. We'd need to be sure that Base Cuis supports those
          developments, by making them possible.
          <br>
        </blockquote>
        IHMO it will make sense for non version controlled Cuis
        distributions, like CuisUniversity or Haver.
        <br>
      </blockquote>
      <br>
      Sure. Their maintainers are welcome to do so.<br>
    </blockquote>
    Please see below, keyword 'Image management application'<br>
    <blockquote type="cite" cite="mid:65858148.9040904@cuis.st">
      <br>
      <blockquote type="cite">
        <blockquote type="cite">
          <br>
          <blockquote type="cite">
            <br>
            <blockquote type="cite">...
              <br>
            </blockquote>
            I would love to have the Cuis checkout separated from my
            project. Additionally It should
            <br>
            be possible to reuse the checkout for more than one project.
            <br>
          </blockquote>
          <br>
          Some people already asked for handling more than one Cuis
          folders (including image, etc) for one project. Others, like
          you want the opposite: use a single Cuis folder for several
          projects. So we need a way to support these different
          scenarios. (see below)
          <br>
        </blockquote>
        For Unix, it should be easy to distribute a shell script that
        creates symlinks to all of the repos
        <br>
        in an the current directory. I don't see a portable solution for
        windows.
        <br>
      </blockquote>
      <br>
      Again, the main distribution should be especially friendly for
      novice and casual users. To me, this also means to try to avoid
      stuff that is too complex for them, and that experts can do by
      themselves easily.
      <br>
      <br>
      It also means to try to give a platform agnostic experience. For
      instance, right now, I'm doing a kind of introductory curse to CS
      for my daughters and a few friends (teenagers and young adults). I
      prepared a bunch of thumbdrives with this very Cuis setup. They
      bring a mix of Windows, Intel and ARM Mac, and Linux laptops. This
      works on all of them without needing to waste their attention on
      irrelevant technicalities. I like that, and I think it reflects
      the kind of experience most novices will have.
      <br>
    </blockquote>
    Nice, I tried such a thing for two of my daughters individually and
    two of my sons.<br>
    I failed miserably.<br>
    I hope you are better at teaching, than I am!<br>
    <blockquote type="cite" cite="mid:65858148.9040904@cuis.st">
      <br>
      <blockquote type="cite">
        <blockquote type="cite">
          <br>
          <blockquote type="cite">...
            <br>
          </blockquote>
          <br>
          One point to have in mind is that inside the Cuis repo
          directory, no files from other repos should be stored. The
          reason is that most users would no longer know what is part of
          the Cuis distribution and what is not.
          <br>
        </blockquote>
        I forgot about that point, because I created a bunch of symlinks
        to the git repos in the parent directory
        <br>
        of Haver's development directory.
        <br>
        <br>
        I also became aware, that I am looking at this layout from a
        different perspective:
        <br>
        I am thinking of distribution contained in a ZIP-file, without
        any version controlled files.
        <br>
        So yes, If you want to distribute this using git, not polluting
        the repo with user files
        <br>
        makes perfect sense.
        <br>
      </blockquote>
      <br>
      And still I also want a good experience for people downloading the
      Zip file that GitHub generates automatically, for people who don't
      need or want git. A lot of use cases and details to keep in mind!
      <br>
    </blockquote>
    IC.<br>
    <blockquote type="cite" cite="mid:65858148.9040904@cuis.st">
      <br>
      <blockquote type="cite">
        <blockquote type="cite">
          <br>
          <blockquote type="cite">...
            <br>
          </blockquote>
          <br>
          What follows is very new, and not yet documented:
          <br>
          <br>
          #userBaseDirectory: Directory for user generated files.
          <br>
          #cuisBaseDirectory: Usually repo. Common parent of
          #smalltalkImageDirectory, CoreUpdates/ and Packages/.
          <br>
          #projectBaseDirectory: #cuisBaseDirectory parent.
          <br>
          <br>
          #userBaseDirectory is configurable via commandline:
          <br>
          <br>
          No additional argument
          <br>
          DirectoryEntry userBaseDirectory.
          /Users/juanvuletich/Cuis-Smalltalk/Cuis-Smalltalk-Dev-UserFiles
          .
          <br>
          <br>
          -udIsBase
          <br>
          DirectoryEntry userBaseDirectory.
          /Users/juanvuletich/Cuis-Smalltalk/Cuis-Smalltalk-Dev .
          <br>
          <br>
          -ud ZZZZ
          <br>
          DirectoryEntry userBaseDirectory.
          /Users/juanvuletich/Cuis-Smalltalk/Cuis-Smalltalk-Dev/ZZZZ .
          <br>
          <br>
          -ud ../ZZZZ
          <br>
          DirectoryEntry userBaseDirectory.
          /Users/juanvuletich/Cuis-Smalltalk/ZZZZ .
          <br>
          <br>
          -ud /Users/juanvuletich/ZZZZ
          <br>
          DirectoryEntry userBaseDirectory. /Users/juanvuletich/ZZZZ .
          <br>
          <br>
          Packages are looked for in the #projectBaseDirectory. Perhaps
          we could make this configurable via cmdline argument too.
          <br>
        </blockquote>
        I have seen some of these changes in Cuis 6.0, AFAIR I had to
        adapt Haver's image saving code to it.
        <br>
        I will look into this after my holiday.
        <br>
        I should adapt Haver's persistent stuff, like persistent
        workspaces, to
        <br>
        use DirectoryEntry>>#userBaseDirectory for it's OODB
        files.
        <br>
      </blockquote>
      <br>
      That makes sense.
      <br>
    </blockquote>
    I will look at these options, when I fix Haver's font loading
    issues.<br>
    <blockquote type="cite" cite="mid:65858148.9040904@cuis.st">
      <br>
      <blockquote type="cite">
        <br>
        One side issue: Is there any way to move UnicodeData.txt away
        from the image directory?
        <br>
        Users may be tempted to clean up their image directory and
        delete non image/changes stuff,
        <br>
        with rather disastrous results. (After some hair-tearing I
        created a symlink to this file in Cuis' repo,
        <br>
        to make Cuis work again in Haver's project directory)
        <br>
      </blockquote>
      <br>
      I haven't found a better place... Perhaps TrueTypeFonts/ ? Mhhh...
      <br>
    </blockquote>
    Suppose you want to write a maintenance application<br>
    for images – something I am contemplating for years – a straight<br>
    forward solution is to use directories in the filesystem to
    structure<br>
    a given set of tuples of image and change files. The current
    solution<br>
    forces the maintenance application to copy (or symlink)<br>
    <tt>UnicodeData.txt</tt>  and the file with the compressed sources.<br>
    <br>
    How about an 'image (related) data directory', that<br>
    contains all that stuff? There should be command line options
    similar<br>
    to those implemented for the <tt>userBaseDirectory</tt>.<br>
    <br>
    The TrueTypeFonts directory seems to be already relative to the <tt>userBaseDirectory</tt>,<br>
    which is, IHMO, is the best solution.<br>
    <blockquote type="cite" cite="mid:65858148.9040904@cuis.st">
      <br>
      <blockquote type="cite">
        <br>
        <blockquote type="cite">...
          <br>
        </blockquote>
        Now that I have slept over this, I think it comes in handy
        <br>
        for Haver. As mentioned in various mails, I modified OSVM's
        Linux version
        <br>
        to handle additional mouse-buttons and some other things.
        <br>
        <br>
        I will distribute my VM version as HaverVM.app, using
        <br>
        the MacOS APP directory layout.
        <br>
      </blockquote>
      <br>
      Makes sense. Check the Info.plist file, where there is a line that
      references to 'CuisImage/Cuis6.1.image'. This is used to find the
      image file if you just click on the .app "file" on a Mac. You'd
      need to change this to point to the Haver image. So, calling it
      Haver.app or HaverVM.app is reasonable.
      <br>
      <br>
      BTW, in an older experiment I also included the image / changes /
      sources as part of the .app structure, like Squeak's All-In-One.
      Played with that and didn't like the image and chages to be so
      "hidden". But a single structure for the included VMs is something
      I do like.
      <br>
    </blockquote>
  </body>
</html>