<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <br>
    Hi Juan,<br>
    <br>
    At the best of my current undestanding I can provide this:<br>
    <br>
    1. Fileout for tests in BaseImageTests<br>
    <br>
    2. A few fileout for new methods and method names<br>
    <br>
    3. I could not replicate the bug you say, I did not understand well
    maybe. if you could send me <br>
    a fail example it would be helpful.<br>
    <br>
    <br>
    bye<br>
    Nicola<br>
    <br>
    <br>
    <br>
    <div class="moz-cite-prefix">On 10/23/21 02:26, Nicola Mingotti
      wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:5f2ef2d5-71ed-ddd8-962d-5ad63a8301ed@gmail.com">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <br>
      Hi Juan, let me a bit of time to read your references, I thought
      what I sent were test methods,<br>
      clearly i miss part of the story.<br>
      <br>
      There shouldn't be any concatenation of nil and for God sake NO
      partial records. <br>
      This is what I wanted to avoid, apologies. <br>
      <br>
      Tomorrow i will probably be out for the Linux day, i will update
      when possible.<br>
      <br>
      <br>
      bye<br>
      Nicola<br>
      <br>
      <br>
      <br>
      <br>
      <div class="moz-cite-prefix">On 10/23/21 01:20, Juan Vuletich
        wrote:<br>
      </div>
      <blockquote type="cite" cite="mid:61734724.5010009@jvuletich.org">
        <meta content="text/html; charset=UTF-8"
          http-equiv="Content-Type">
        Hi Folks,<br>
        <br>
        The main point here is not "strict vs. legacy", "logically
        correct vs incorrect" or anything like that at all.<br>
        <br>
        The point is "separator vs. terminator", and how using a
        terminator instead of a separator allows processing files while
        they are still being written to. (And this has really no
        relation with running on a server or any other kind of machine.)<br>
        <br>
        Besides, Nicola, your code has a bug when recurring on
        terminator: it will answer the previous partial last record
        concatenated with nil.<br>
        <br>
        Finally, please take a look at TestCase,SUnit and
        BaseImageTests.pck.st to see what we mean by a "test".<br>
        <br>
        Thanks,<br>
        <br>
        On 10/22/2021 12:18 PM, Nicola Mingotti via Cuis-dev wrote:
        <blockquote
          cite="mid:79ec566d-c417-6eea-ec5c-01965d0cf93e@gmail.com"
          type="cite">
          <meta http-equiv="Content-Type" content="text/html;
            charset=UTF-8">
          <br>
          Hi Hernan, <br>
          <br>
          We will have opportunity to work together on larger problems,
          this is too small.<br>
          It would take more time to talk than to do things ;)<br>
          <br>
          I have a proposed version. I rewrote the methods. wrote the
          test. I kept a good part<br>
          of the original code which may have evolved for efficiency
          over time.<br>
          <br>
          upToLegacy method can of course be eliminated. it is there
          only for reference. <br>
          <br>
          upTo: XXX --- now calls --->  upTo: XXX strict: false <br>
          <br>
          upTo: XXX strict: XXX ------ is recursive, it needs an extra
          helper method to remember a parameter (Scheme recursion
          style)  ----> upTo: XXX strict: XXX posMemo: xxxx<br>
          <br>
          See attached fileout<br>
          <br>
          <br>
          bye<br>
          Nicola<br>
          <br>
          <br>
          <br>
          <br>
          <br>
          <div class="moz-cite-prefix">On 10/21/21 19:49, Hernan
            Wilkinson wrote:<br>
          </div>
          <blockquote type="cite"
cite="mid:CAJAbP8jpOucdF34SNqQFVavbKdozS294rbpLsT4pXO9165hdcg@mail.gmail.com">
            <meta http-equiv="content-type" content="text/html;
              charset=UTF-8">
            <div dir="ltr">ok, let me know. I wish we could do it
              together but my agenda (and I guess yours) is almost
              always full...</div>
            <br>
            <div class="gmail_quote">
              <div dir="ltr" class="gmail_attr">On Thu, Oct 21, 2021 at
                2:32 PM Nicola Mingotti <<a
                  href="mailto:nmingotti@gmail.com"
                  moz-do-not-send="true" class="moz-txt-link-freetext">nmingotti@gmail.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> <br>
                  Hi Hernan,<br>
                  <br>
                  ok, let me try, it is too many days i am talking about
                  it.<br>
                  <br>
                  I will let you know soon<br>
                  <br>
                  bye<br>
                  Nicola<br>
                  <br>
                  <br>
                  <br>
                  <br>
                  <div>On 10/21/21 19:02, Hernan Wilkinson wrote:<br>
                  </div>
                  <blockquote type="cite">
                    <div dir="ltr">Hi Nicolas, 
                      <div> if you could refactor upTo: to use the same
                        code as strictUpTo: and write the tests to check
                        that everything works as expected, that would be
                        great!</div>
                      <div> I would not use the names of the Linux
                        stdlib for those messages nor the C functions,
                        it is not necessary...</div>
                      <div> If you do not have the time to do it, I can
                        give it a try if you wish.</div>
                      <div><br>
                      </div>
                      <div>Cheers!</div>
                      <div>Hernan.<br>
                        <div> </div>
                      </div>
                    </div>
                    <br>
                    <div class="gmail_quote">
                      <div dir="ltr" class="gmail_attr">On Thu, Oct 21,
                        2021 at 12:47 PM Nicola Mingotti <<a
                          href="mailto:nmingotti@gmail.com"
                          target="_blank" moz-do-not-send="true"
                          class="moz-txt-link-freetext">nmingotti@gmail.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> <br>
                          Hi Hernan,<br>
                          <br>
                          . forget the code and test. I can rewrite it
                          from scratch with test. I actually changed<br>
                          existing code for "politeness" ;) <br>
                          <br>
                          . for me it is very important to have this
                          matter fixed, well and for the future.<br>
                          It is not good to have standard lib
                          functionality disseminated in my application
                          packages.<br>
                          <br>
                          . since I found Linux stdlib has a function to
                          do well what i want i will use that name(s)<br>
                          to avoid confusion and recycle already
                          existing function names. "getline" and
                          "getdelim".<br>
                          <br>
                          . if you really dislike this functions I can
                          put them in OSProcess and maybe <br>
                          just link the C version only for Linux/BSD. So
                          much I think they are valuable in the server
                          environment.<br>
                          <br>
                          . to fix this i need maybe 1-2 days. If i need
                          to link the C functions I don't know, since I
                          never tried.<br>
                          <br>
                          So, let me know, if you are not against these
                          functions I am open to implement them well.<br>
                          <br>
                          <br>
                          ===== Extra considerations whose reading is
                          secondary ==================<br>
                          <br>
                          . your fix was one step in the right direction
                          but not enough, you also need to<br>
                          bring back the stream pointer to the last
                          existant $A. This is to say: too complex.<br>
                          A good method must do all its chore, not leave
                          us back the dirty business and special
                          conditions.<br>
                          <br>
                          . I understand the concision, small core etc.
                          On the other side, i <br>
                          run Cuis on the servers.  the most important
                          thing there is on servers are files and<br>
                          sockets. You must read from there all of the
                          time. It must be easy and idiot proof,<br>
                          rock solid and resistant to concurrent
                          processing as far as possible.<br>
                          <br>
                          . I see that Python and Ruby standard library
                          do it wrong, at bit better than Cuis 'upTo'
                          does.<br>
                          but still bad. They leave you the '\n' at the
                          end, but, if any process goes on writing<br>
                          'f1.txt' Ruby and Python lost the half backed
                          record ! <br>
                          -------- Linux<br>
                          <span style="font-family: monospace;"><span
                              style="color: rgb(0, 0, 0);
                              background-color: rgb(255, 255, 255);">$>
                              printf 'line-1\nline-2\nline-TRAP' >
                              f1.txt<br>
                              # python<br>
                              $> </span></span><span
                            style="font-family: monospace;"><span
                              style="color: rgb(0, 0, 0);
                              background-color: rgb(255, 255, 255);"><span
                                style="font-family: monospace;"><span
                                  style="color: rgb(0, 0, 0);
                                  background-color: rgb(255, 255, 255);">python3.9
                                  -c "f=open('f1.txt','r');
                                  print(f.readlines())" </span><br>
                              </span>=> </span></span><span
                            style="font-family: monospace;"><span
                              style="color: rgb(0, 0, 0);
                              background-color: rgb(255, 255, 255);"><span
                                style="font-family: monospace;"><span
                                  style="color: rgb(0, 0, 0);
                                  background-color: rgb(255, 255, 255);">['line-1\n',
                                  'line-2\n', 'line-TRAP']</span><br>
                                # ruby <br>
                                $> </span></span></span><span
                            style="font-family: monospace;"><span
                              style="color: rgb(0, 0, 0);
                              background-color: rgb(255, 255, 255);"><span
                                style="font-family: monospace;"><span
                                  style="font-family: monospace;"><span
                                    style="color: rgb(0, 0, 0);
                                    background-color: rgb(255, 255,
                                    255);">ruby -e
                                    "f=open('f1.txt','r'); puts
                                    f.readlines().to_s;  " </span><br>
                                  => ["line-1\n", "line-2\n",
                                  "line-TRAP"]<br>
                                  # both Python and Ruby ate the half
                                  backed record ! bad !<br>
                                </span></span>---------------------------------------------------------<br>
                            </span></span><br>
                          . C and CommonLisp standard libraries have a
                          way to do it right:<br>
                          -) CL read-line. <a
href="http://www.lispworks.com/documentation/HyperSpec/Body/f_rd_lin.htm#read-line"
                            target="_blank" moz-do-not-send="true"
                            class="moz-txt-link-freetext">http://www.lispworks.com/documentation/HyperSpec/Body/f_rd_lin.htm#read-line</a>
                          <br>
                          -) C getline. <a
                            href="https://man7.org/linux/man-pages/man3/getline.3.html"
                            target="_blank" moz-do-not-send="true"
                            class="moz-txt-link-freetext">https://man7.org/linux/man-pages/man3/getline.3.html</a><br>
                          <br>
                          . I understand I am probably the only one
                          running Cuis in the server so I am the first<br>
                          to step into a few particular problems.<br>
                          <br>
                          . In my opinion Cuis in the Server can be a
                          good match, up to now i have 2 small<br>
                          company services working and a big one project
                          in continuous development. <br>
                          Time will tell. Sturdiness, undertandability
                          and ease of modification were my top priority.<br>
                          Up to now things are at least working.<br>
                          <br>
======================================================<br>
                          <br>
                          bye<br>
                          Nicola<br>
                          <br>
                          <br>
                          <br>
                          <br>
                          <br>
                          <br>
                          <br>
                          <div>On 10/21/21 14:53, Hernan Wilkinson
                            wrote:<br>
                          </div>
                          <blockquote type="cite">
                            <div dir="ltr">Hi Nicola,
                              <div> I see your point regarding the
                                functionality of upTo:, but you can
                                easily overcome that using #peekBack.
                                Using you example: </div>
                              <div>-----</div>
                              <div>s _ 'hello-1Ahello-2Ahel'.<br>
                                '/tmp/test.txt' asFileEntry
                                fileContents: s.<br>
                                <br>
                                st1 _ '/tmp/test.txt' asFileEntry
                                readStream .<br>
                                <br>
                                st1 upTo: $A. " 'hello-1' "</div>
                              <div>st1 upTo: $A. " 'hello-2' "<br>
                                st1 upTo: $A. " 'hel' "      </div>
                              <div>(st1 atEnd and: [ st1 peekBack ~= $A
                                ]) ifTrue: [ self error: 'End of file
                                without delimiter ].   <br>
                              </div>
                              <div>------</div>
                              <div> </div>
                              <div> Regarding my concern of adding this
                                functionality to Cuis, we are trying to
                                have a compact set of classes and
                                methods to reduce complexity (or at
                                least not increase it) and help
                                newcomers to understand it and oldies to
                                remember it :-) . We are also trying to
                                add more and more tests because it is
                                the only way to keep a system from
                                becoming a legacy one and to reduce the
                                fear it produces to change something.</div>
                              <div> The strictUpTo:startPos: you are
                                sending is almost a copy of the upTo:
                                method, with a few lines changed.
                                Even though the functionality makes
                                sense (although right now you are the
                                only one needing it and as I said, you
                                can use peekBack to overcome it),
                                adding that method adds repeated code
                                which in the long term makes it more
                                difficult to understand and maintain,
                                even more because it does not have
                                tests.</div>
                              <div> So I hope you understand that as
                                maintainers of Cuis, we want to be loyal
                                to the goals I mentioned before and keep
                                Cuis as clean and simple as possible. If
                                you can refactor what you sent to avoid
                                having repeated code with #upTo: and add
                                tests that verify the functionality of
                                both methods (strictUpTo: and upTo:),
                                that will make our task easier and meet
                                the goals we have. If you think this
                                does not make sense to you, or you do
                                not have the time to do it, it is
                                completely understandable and in that
                                case I suggest for you to have it as an
                                extension of the StandardFileStream
                                class or just use the peekBack message
                                as I showed.</div>
                              <div> I hope you understand my concern and
                                agree with me. If not, please let me
                                know.</div>
                              <div><br>
                              </div>
                              <div>Cheers!</div>
                              <div>Hernan.</div>
                              <div><br>
                              </div>
                            </div>
                            <br>
                            <div class="gmail_quote">
                              <div dir="ltr" class="gmail_attr">On Tue,
                                Oct 19, 2021 at 10:32 AM Nicola Mingotti
                                <<a href="mailto:nmingotti@gmail.com"
                                  target="_blank" moz-do-not-send="true"
                                  class="moz-txt-link-freetext">nmingotti@gmail.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> <br>
                                  Hi Hernan,<br>
                                  <br>
                                  In all frankness, in I would wipe out
                                  the old 'upTo' because its behavior is
                                  a bit "wild".<br>
                                  <br>
                                  On the other side, I understand it may
                                  create problems in
                                  retro-compatibility, that is why for<br>
                                  the moment i propose to add a new
                                  method which behaves a bit better.<br>
                                  <br>
                                  I hope this example explains the
                                  problem:<br>
-------------------------------------------------------<br>
                                  s _ 'hello-1Ahello-2Ahel'.<br>
                                  '/tmp/test.txt' asFileEntry
                                  fileContents: s. <br>
                                  <br>
                                  st1 _ '/tmp/test.txt' asFileEntry
                                  readStream . <br>
                                  <br>
                                  st1 upTo: $A. " 'hello-1' "<br>
                                  st1 upTo: $A. " 'hello-2' "<br>
                                  st1 upTo: $A. " 'hel' "         "(*)"<br>
------------------------------------------------------<br>
                                  (*) You can't establish in any way if
                                  you actually found an "A" terminated
                                  block or just hit the end of file<br>
                                  (*) If you hit the end of file you eat
                                  an incomplete record, this is another
                                  problem, maybe another process<br>
                                  was going to end writing that record
                                  but you will never know. <br>
                                  <br>
                                  Maybe there is another method around
                                  that performs similarly to
                                  'strictUpTp', if there is I did not
                                  find it, sorry.<br>
                                  <br>
                                  IMHO, In a scale of importance from 0
                                  to 10, this method, for a programmer,
                                  >= 8.<br>
                                  I would definitely not put it into an
                                  external package, too much
                                  fundamental.<br>
                                  <br>
                                  bye<br>
                                  Nicola<br>
                                  <br>
                                  <br>
                                  <br>
                                  <br>
                                  <br>
                                  <br>
                                  <br>
                                  <br>
                                  <br>
                                  <br>
                                  <br>
                                  <br>
                                  <br>
                                  <br>
                                  <div>On 10/19/21 14:44, Hernan
                                    Wilkinson wrote:<br>
                                  </div>
                                  <blockquote type="cite">
                                    <div dir="ltr">Hi Nicola!<br>
                                      <div> I was wondering, why are you
                                        suggesting adding them to the
                                        base? Is it not enough to
                                        implement them as an extension
                                        in your package? </div>
                                      <div> Also, I think that any new
                                        functionality should come with
                                        its corresponding tests to help
                                        the maintenance and
                                        understanding of the
                                        functionality.</div>
                                      <div><br>
                                      </div>
                                      <div>Cheers!</div>
                                      <div>Hernan.</div>
                                      <div><br>
                                      </div>
                                    </div>
                                    <br>
                                    <div class="gmail_quote">
                                      <div dir="ltr" class="gmail_attr">On
                                        Tue, Oct 19, 2021 at 7:04 AM
                                        Nicola Mingotti 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> <font size="4"><font
                                              face="monospace">Hi Juan,
                                              guys,<br>
                                              <br>
                                              I would like to add to
                                              Cuis the 2 methods i
                                              attach here. One is a
                                              helper method.<br>
                                              <br>
                                              -----------<br>
                                              StandardFileStream
                                              strictUpTo: delim.<br>
                                              -----------<br>
                                              <br>
                                              Differently from 'upTo:
                                              delim' this method:<br>
                                              1. Does not return stuff
                                              if it does not find
                                              'delim'.<br>
                                              2. Does not upgrade the
                                              position on the stream if
                                              does not find 'delim'.<br>
                                              3. If it finds 'delim'
                                              returns a chunk that
                                              includes it.<br>
                                              <br>
                                              I am parsing log files at
                                              the moment, this is very
                                              much useful.<br>
                                              <br>
                                              NOTE. Up to now I tested
                                              only on small files.<br>
                                              <br>
                                              bye<br>
                                              Nicola<br>
                                              <br>
                                              <br>
                                              <br>
                                              <br>
                                            </font></font> </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>
                                    <br>
                                  </blockquote>
                                </div>
                              </blockquote>
                            </div>
                          </blockquote>
                        </div>
                      </blockquote>
                    </div>
                  </blockquote>
                </div>
              </blockquote>
            </div>
          </blockquote>
        </blockquote>
        <br>
        <pre class="moz-signature" cols="72">-- 
Juan Vuletich
<a class="moz-txt-link-abbreviated" href="http://www.cuis-smalltalk.org" moz-do-not-send="true">www.cuis-smalltalk.org</a>
<a class="moz-txt-link-freetext" href="https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev" moz-do-not-send="true">https://github.com/Cuis-Smalltalk/Cuis-Smalltalk-Dev</a>
<a class="moz-txt-link-freetext" href="https://github.com/jvuletich" moz-do-not-send="true">https://github.com/jvuletich</a>
<a class="moz-txt-link-freetext" href="https://www.linkedin.com/in/juan-vuletich-75611b3" moz-do-not-send="true">https://www.linkedin.com/in/juan-vuletich-75611b3</a>
@JuanVuletich</pre>
      </blockquote>
      <br>
    </blockquote>
    <br>
  </body>
</html>