<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <div class="moz-cite-prefix">Hello Dale,</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">what an information :-( ... but perhaps
      after using Gemstone/S for 8 years now its time for a summary
      about that time.</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">Starting with Gemstone/S eight years
      ago was based on three points:</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">* easy persistency, object-oriented (or
      better: heard lot of good things about it)<br>
    </div>
    <div class="moz-cite-prefix">* active database, database "kernel"
      development on a very high level programming model<br>
    </div>
    <div class="moz-cite-prefix">* Smalltalk</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">After 8 years the first two points are
      still strongly valid. My work colleagues do not understand this or
      do not see this as main points. Its not mainstream - that seems to
      be the major point. As I mentioned in my Londoner Talk about
      Gemstone/S experiences, there is an opinion, that working in a NON
      mainstream area is not worth per se (you may like that or not, but
      I do now understand these people).<br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">Smalltalk itself is not that important
      now for me, though I really love the language and the possibility
      on the server side are great - so I see it more as a database
      language in my case - but if I had to code in C#, Python or other
      languages - it would not matter for me.</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">I tried to open it by going a clear API
      only oriented way with C#, Java, Python, Javascript bindings - but
      it was not worth the time (to convince the colleagues) , because
      my work was again NON mainstream. But it was worth the time to get
      a better structure and better applications. <br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">I've published now 8 customer
      applications over the last 8 years - all based on Gemstone/S and
      the UI written completely in Javascript and all stuff is API
      driven. <br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">So, I've to go seven further years ...
      and its totally ok to say, that after that the Gemstone/S
      experiences in my companies will be closed. None of the
      applications I've written are cash cows ... so they could be
      closed over the years.<br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">So, what would I do differently now ?</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">* Stay with the core Gemstone/S kernel
      code as much as you can. This source base is maintained and comes
      from one location</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">* Do not use other
      Pharo/Squeak/VAST,VisualWorks code in your application unless you
      have ported it to Gemstone by yourself (this is an aggressive
      statement)</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">* Do not use Github as the base for
      your source code loading sequence. Do not reference projects on
      Github in your code.</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">* Use prebuilt images for your
      development (as the seaside and core kernel delivered by
      GemtalkSystems in their product). For each new release of
      Gemstone/S do this work ONCE and then that's it.</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">* Look for a good infrastructure to
      communication with other programming languages</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">* Exercise the upgrade process. This
      has been proven to be the most critical part in all Gemstone/S
      projects (perhaps due to the mistakes mentioned above) so far.</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">* Look carefully about the license
      restrictions you get with Gemstone/S licenses. The introduction
      licenses (with limitations especially CPU usages) of Gemstone/S
      encourages a different programming model than a full-blown
      license.</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">* Do not use Smalltalk in areas where
      it is not well suited, one point is the UI. Look for other
      languages</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">* Now with care: Consider PostgreSQL
      and RabbitMQ as base parts of your infrastructure. There are base
      interfaces from Gemstone available at Github for that. They have
      not the quality of Gemstone/S product, but they are doing their
      work and are isolated projects at Github.</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">* <br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">And what would I not change ?</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">* The API way is  pretty cool</div>
    <div class="moz-cite-prefix">* Think in other Programming Languages,
      use them in your projects - but the mistakes mentioned above are
      also valid for projects in other languages.</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">So, throwing away Pharo32/64 bit out of
      GsDevKit* is the CORRECT solution. I can understand you here. The
      base infrastructure for a product should only depend on stuff,
      delivered by the product itself.</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">Due to the fact, that Gemstone/S is
      missing VERY MUCH in that area (product area - backup scripts,
      update scripts, starting, stopping scripts and so on), it was the
      best situation those days to join GsDevKit_home to fill that gap.
      I do not use Seaside, I do not use tODE - I mainly use DevKit for
      having a better infrastructure in maintaining my applications.</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">The other point I use GsDevKit_home for
      is GLASS and its loading of all the network stuff in ZInc*
      projects (despite the mistakes I mentioned above), so one gets
      HTTPS and HTTPS support.<br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">So, my option seems to be to stay with
      Gemstone/S 3.6.x branch over the next years.</div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">Marten<br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">On 05.04.24 01:13, Dale Henrichs wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAFuPq9Vx+8_1eQ2HhXfSde=ZDgThVvRtsM9DV9043SE5GxdeDg@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="ltr">
        <div dir="ltr">***I inadvertantly left glass off my original
          reply ... resending to entire list***
          <div>Marten,</div>
          <div><br>
          </div>
          <div>TL;DR:<br>
          </div>
          <div style="margin-left:40px">GsDevKit_home is not being
            maintained anymore. <br>
          </div>
          <div style="margin-left:40px"><br>
          </div>
          <div style="margin-left:40px">The heir apparent
            GsDevKit_stones is available but is not quite a complete
            replacement for the GsDevKit_home functionality... and is
            still under development.</div>
          <div style="margin-left:40px"><br>
          </div>
          <div style="margin-left:40px">You can create/delete/start/stop
            stones and netldi with the current GsDevKit_stones.</div>
          <div style="margin-left:40px"><br>
          </div>
          <div style="margin-left:40px">If you are brave/desperate and
            willing to give me constructive criticism (see the missing
            pieces section below), send me an email and I'll provide you
            with "getting started instructions".<br>
          </div>
          <div><br>
          </div>
          <div>I wish I could say that I have a replacement solution for
            you, but if you look back through your emails, I sent mail 5
            years ago that I was not going to be able keep GsDevKit_home
            working without help ... GsDevKit_home relies on a 32 bit
            Pharo image and support for 32 bit executables has been
            slowly going away   ... a few developers have stepped up to
            help, but the effort did not reach a satisfactory conclusion
            ... <br>
          </div>
          <div><br>
          </div>
          <div>3 years ago, I started work on superDoit[1] a scripting
            environment based on 64bit GemStone. <br>
            <div>I started superDoit with the intent that it would be a
              replacement for the 32 bit Pharo image in GsDevKit_home. <br>
            </div>
            <div><br>
            </div>
            <div>2 years ago, it became apparent that just replacing the
              32 bit Pharo image with a superDoit script wasn't going to
              be feasible, so I started work on GsDevKit_stones[2].</div>
            <div><br>
            </div>
            <div>GsDevKit_stones is much simpler and more flexible than
              GsDevKit_stones and is "entirely" written in Smalltalk. It
              is based on a shared Rowan code library. GsDevKit_stones
              also leverages the new FileSystem support that has shown
              up in the recent releases of GemStone ...<br>
            </div>
          </div>
          <div><br>
          </div>
          <div>Of course the bad news in this story is that very little
            of the "code base" (mostly bash scripts) survives the
            transition from bash to smalltalk, so there has been a lot
            of work to do to rewrite the GsDevKIt_home scripts in
            superDoit.<br>
          </div>
          <div><br>
          </div>
          <div>Most of the functionality present in GsDevKit_homes has
            been implemented in GsDevKit_stones scripts[3], but there
            are a few critical pieces still missing:</div>
          <ol>
            <li>upgradeSeasideImage functionality<br>
            </li>
            <li>a way to "attach" GsDevKit_stones to an existing
              GsDevKit_home environment</li>
            <li>a replacement for the tODE GUI</li>
            <li>reviewing/improving help messages for the scripts,
              including an eye toward consistency of terminology across
              the various scripts</li>
          </ol>
          The replacement for upgradeSeasideImage requires a fairly
          significant refactoring of the code used in the existing
          scripts.<br>
          <br>
          Attaching GsDevKit_stones should be a relatively easy project
          to put together using existing scripts, but until
          GsDevKit_stones is close ready for release it isn't necessary.<br>
          <br>
          The ultimate replacement for the tODE GUI will be a
          combination of Jadeite[4][5] and Rowan 3[6] ... Jadeite and
          Rowan are being developed internally but are not quite ready
          for release.<br>
          <br>
          With the release of 3.7.1, we shipped an experimental Rowan 3
          extent that is suitable for use with GsDevKit_stones scripts
          ... not production.<br>
          <br>
          I personally have been using GsDevKit_stones in my work for
          the last year and as I mentioned before, GsDevKit_stones is
          being used by smalltalkCI[7] to drive the gemstone jobs for
          the last year as well ...<br>
          <br>
          If you are hurt by the lack of the32 bit tODE GUI ... yes
          there are some tODE GUI fans out there:). There is a rough
          workaround that might help ... send me email for details.<br>
          <br>
          Overall, I think that there are still some rough spots, and I
          can't promise that GsDevKit_stones won't undergo some major
          changes before it's ready for release...but it is the only
          alternative for you if you are experiencing 32 bit pharo image
          issues.  <br>
          <br>
          I wish I had a better answer, but I cannot afford to spend
          time trying to fix 32 bit pharo related issues  ... I think my
          time is better spent doing what I can to make progress on
          GsDevKit_stones ...<br>
          <br>
          Dale<br>
          <div>
            <div>[1] <a href="https://github.com/dalehenrich/superDoit"
                target="_blank" moz-do-not-send="true"
                class="moz-txt-link-freetext">https://github.com/dalehenrich/superDoit</a></div>
          </div>
          <div>[2] <a
              href="https://github.com/GsDevKit/GsDevKit_stones"
              target="_blank" moz-do-not-send="true"
              class="moz-txt-link-freetext">https://github.com/GsDevKit/GsDevKit_stones</a></div>
          <div>[3] <a
href="https://github.com/GsDevKit/GsDevKit_stones/tree/v2/bin"
              target="_blank" moz-do-not-send="true"
              class="moz-txt-link-freetext">https://github.com/GsDevKit/GsDevKit_stones/tree/v2/bin</a></div>
          <div>[4] <a href="https://github.com/GemTalk/JadeiteForPharo"
              target="_blank" moz-do-not-send="true"
              class="moz-txt-link-freetext">https://github.com/GemTalk/JadeiteForPharo</a></div>
          <div>[5] <a href="https://github.com/GemTalk/Jadeite"
              target="_blank" moz-do-not-send="true"
              class="moz-txt-link-freetext">https://github.com/GemTalk/Jadeite</a></div>
          <div>[6] <a
              href="https://github.com/GemTalk/Rowan/tree/masterV3.2"
              target="_blank" moz-do-not-send="true"
              class="moz-txt-link-freetext">https://github.com/GemTalk/Rowan/tree/masterV3.2</a></div>
          <div>[7] <a href="https://github.com/hpi-swa/smalltalkCI"
              target="_blank" moz-do-not-send="true"
              class="moz-txt-link-freetext">https://github.com/hpi-swa/smalltalkCI</a></div>
          <div class="gmail-yj6qo gmail-ajU">
            <div id="gmail-:8zx" class="gmail-ajR" role="button"
              tabindex="0" aria-label="Show trimmed content"
              aria-expanded="false"><img class="gmail-ajT"
src="https://ssl.gstatic.com/ui/v1/icons/mail/images/cleardot.gif"
                moz-do-not-send="true"></div>
          </div>
        </div>
        <br>
        <div>
          <div class="gmail_quote">
            <div dir="ltr" class="gmail_attr">On Wed, Apr 3, 2024 at
              2:16 PM Marten Felddtmann via Glass <<a
                href="mailto:glass@lists.gemtalksystems.com"
                moz-do-not-send="true" class="moz-txt-link-freetext">glass@lists.gemtalksystems.com</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>Hello,</p>
                <p>I would like to know, if 3.7.1 is supported by
                  GsDevKit_home ... <br>
                </p>
                <p>createStone gc371 3.7.1 - does not work and throws
                  errors:</p>
                <p><span style="font-family:monospace"><span
style="font-weight:bold;color:rgb(84,255,255);background-color:rgb(255,255,255)">=================</span><span
style="color:rgb(0,0,0);background-color:rgb(255,255,255)"> </span><br>
                    <span
style="font-weight:bold;color:rgb(84,255,255);background-color:rgb(255,255,255)">
                        GsDevKit script: startStone -b test371</span><span
style="color:rgb(0,0,0);background-color:rgb(255,255,255)"> </span><br>
                    <span
style="font-weight:bold;color:rgb(84,255,255);background-color:rgb(255,255,255)">
                                   path:
                      /datadisk/GsDevKit_home/bin/startStone</span><span
style="color:rgb(0,0,0);background-color:rgb(255,255,255)"> </span><br>
                    <span
style="font-weight:bold;color:rgb(84,255,255);background-color:rgb(255,255,255)">=================</span><span
style="color:rgb(0,0,0);background-color:rgb(255,255,255)"> </span><br>
/datadisk/GsDevKit_home/server/stones/test371/product/bin/waitstone[Info]:
                    GemStone version '3.7.1' <br>
                    Network service
!#dir:/datadisk/GsDevKit_home/server/stones/test371/logs#log:%N%P.log#server!test371
                    is ready. <br>
                    <span
style="font-weight:bold;color:rgb(84,255,84);background-color:rgb(255,255,255)">stone
                      test371 already running, to restart use -r option
                      :: startStone -b test371</span><span
style="color:rgb(0,0,0);background-color:rgb(255,255,255)"> </span><br>
                    Install tODE on stone: test371 <br>
                    [02.04.2024 19:33:10.432 CEST] <br>
                     gci login: currSession 1  rpc gem processId 133239
                    socket 8  <br>
                    [02.04.2024 19:33:10.506 CEST] <br>
                     gci login: currSession 1  rpc gem processId 133245
                    socket 8  <br>
                    <span
style="color:rgb(178,24,24);background-color:rgb(255,255,255)">Error:
                      while installing tODE on server: 'a
                      ImproperOperation occurred (error 2085), Expected
                      nil to be a Boolean.'</span><span
style="color:rgb(0,0,0);background-color:rgb(255,255,255)"> </span><br>
                    TDTopezGemStoneClient(Object)>>error: <br>
                    TDTopezGemStoneClient>>installTodeBlock: in
                    Block: [ :ex | ... <br>
                    BlockClosure>>cull: <br>
                    MethodContext(ContextPart)>>handleSignal: in
                    Block: [ self exceptionHandlerBlock cull: exception
                    ] <br>
                    BlockClosure>>ensure: <br>
                    MethodContext(ContextPart)>>handleSignal: <br>
                    GsErrorNotification(Exception)>>signal <br>
TodeInstallSession(TodeSession)>>signalServerError: <br>
                    TodeInstallSession(GciSession)>>getNbResult <br>
                    TodeInstallSession(GciSession)>>getNbResult <br>
TodeInstallSession(GciSession)>>getNbResultAsOop <br>
TodeInstallSession(GciSession)>>rawExecuteStringNB:envId: in
                    Block: [ ... <br>
                    BlockClosure>>ensure: <br>
                    Cursor>>showWhile: <br>
TodeInstallSession(GciSession)>>rawExecuteStringNB:envId: <br>
TodeInstallSession(GciSession)>>executeStringNB:envId: <br>
                    TDTopezGemStoneClient>>installTode: in Block:
                    [ :installSession | ... <br>
                    TDTopezGemStoneClient>>installTodeBlock: in
                    Block: [ installBlock value: installSession ] <br>
                    BlockClosure>>ensure: <br>
                    TDTopezGemStoneClient>>installTodeBlock: in
                    Block: installTodeBlock: installBlock... <br>
                    BlockClosure>>on:do: <br>
                    TDTopezGemStoneClient>>installTodeBlock: <br>
                    TDTopezGemStoneClient>>installTode: <br>
                    TDShell>>executeLoadServer: in Block: [ ^ self
                    topezClient installTode: options ] <br>
                    Dictionary>>at:ifPresent:ifAbsent: <br>
                    Dictionary>>at:ifAbsent:ifPresent: <br>
                    TDShell>>executeLoadServer: <br>
                    TDShell>>executeBuiltIn: <br>
                    TDShell>>evaluateCommand:batchMode: <br>
                    TDShell>>evaluate:batchMode: in Block: [
                    :command | result := self evaluateCommand:
                    comma...etc... <br>
                    <span
style="font-weight:bold;color:rgb(255,84,84);background-color:rgb(255,255,255)">Error
                      on or near line 99 :: devKitCommandLine loadTode
                      test371 :: devKitCommandLine loadTode test371</span><span
style="color:rgb(0,0,0);background-color:rgb(255,255,255)"> </span><br>
                    <span
style="font-weight:bold;color:rgb(255,84,84);background-color:rgb(255,255,255)">Error
                      on or near line 55 :: todeLoad test371 :: todeLoad
                      test371</span><span
style="color:rgb(0,0,0);background-color:rgb(255,255,255)"> </span><br>
                    <span
style="font-weight:bold;color:rgb(255,84,84);background-color:rgb(255,255,255)">Error
                      on or near line 220 :: createStone test371 3.7.1
                      :: createStone test371 3.7.1</span><br>
                    <span
style="color:rgb(0,0,0);background-color:rgb(255,255,255)"> </span><br>
                    <br>
                  </span></p>
                <p><br>
                </p>
                <p><br>
                </p>
                <p><br>
                </p>
              </div>
              _______________________________________________<br>
              Glass mailing list<br>
              <a href="mailto:Glass@lists.gemtalksystems.com"
                target="_blank" moz-do-not-send="true"
                class="moz-txt-link-freetext">Glass@lists.gemtalksystems.com</a><br>
              <a
href="https://lists.gemtalksystems.com/mailman/listinfo/glass"
                rel="noreferrer" target="_blank" moz-do-not-send="true"
                class="moz-txt-link-freetext">https://lists.gemtalksystems.com/mailman/listinfo/glass</a><br>
            </blockquote>
          </div>
        </div>
      </div>
    </blockquote>
    <p><br>
    </p>
  </body>
</html>