<html><head></head><body> <div dir="auto">Ahh! Thanks for the reminder. That’s how I started loading code a month ago or whenever I was loading mczs. I’ll look into it tomorrow.</div><div dir="auto"><br></div><div dir="auto">Is it possible to get Monticello pkg loading working again? That’d be very good.<caret></caret></div><div dir="auto"><br></div><div dir="auto">What’s my go to solution for code packaging in Cuis? I’d like to establish Crypto in Cuis.</div><div><br></div><div class="protonmail_signature_block" id="protonmail_signature_block"><div>❤️🔥🐰</div></div> <div class="signature_br" contenteditable="false"><br></div><div class="signature_br" contenteditable="false"><br></div> <div><br></div><div><br></div>On Fri, Jun 23, 2023 at 19:21, Juan Vuletich via Cuis-dev <<a class="" href="mailto:On Fri, Jun 23, 2023 at 19:21, Juan Vuletich via Cuis-dev <<a href=">cuis-dev@lists.cuis.st</a>> wrote:<blockquote type="cite" class="protonmail_quote">
Hi rabbit,<br>
<br>
I suggest unzipping the Monticello files to extract the code in
plain text (yes, Monticello files are just zip files). When you are
there, you can also fix the line ending convention of the files. And
of course, you'd neet to check the code, because Cuis is not 100%
compatible with Squeak.<br>
<br>
We don't use Monticello in Cuis. At some point in the past it was
possible to open MC files in Cuis, but nobody used that feature in
ages and it got bitrotten.<br>
<br>
Thanks,<br>
<br>
On 6/23/2023 4:00 PM, rabbit via Cuis-dev wrote:
<blockquote type="cite">
<p>I just realized I have been working in squeak. I updated
PromisesLocal-rabbt.66.mcz and am attaching it. I am getting the
error below when I 'browse code' or 'install Mionticello
package'. I do not know. How can I load Monticello packages? Any
way to get the Installer available in cuis? Install Monticello
config maps?<br>
</p>
<p>I appreciate you,<br>
rabbit</p>
<p><img width="862" height="398" alt="" src="cid:part1.06000006.00060206@cuis.st"></p>
<p><br>
</p>
<div class="moz-cite-prefix">On 6/22/23 16:21, rabbit via Cuis-dev
wrote:<br>
</div>
<blockquote type="cite">
<p>Hey! I got inspired by your proposal, Luciano, and here's my
solution in eventual promises. Code can be loaded as:</p>
<blockquote>
<p>Installer ss project: 'Cryptography'; install:
'ProCrypto.release.3'.<br>
</p>
</blockquote>
<p>I added a test method <br>
</p>
<blockquote>
<p>RefsTest>>#testMultiReturns<br>
<br>
| selectCount unionFlag pair |<br>
unionFlag := false.<br>
selectCount := 0.<br>
((pair := self promiseResolverPair) key xgcd: 9) <br>
<<* [:each | selectCount := selectCount + 1.
Transcript cr; show: 'each = ', each];<br>
<<* [:g :s :t | unionFlag := true. Transcript
cr; show: 'g = ', g, '; s = ', s, '; t = ', t. g + s + t].<br>
pair value resolve: 21.<br>
(Delay forMilliseconds: 333) wait.<br>
self assert: (selectCount == 3).<br>
self assert: (unionFlag).</p>
</blockquote>
<p>This calls new multireturn #xgcd: method</p>
<blockquote>
<p>xgcd: anInteger<br>
" 21 xgcd: 9"<br>
| g s t |<br>
g := self gcd: anInteger.<br>
s := self / g.<br>
t := anInteger / g.<br>
^ { g. s. t}<br>
</p>
</blockquote>
<p>And in the test method there are eventual sends (#<<*)
to the promise of the #xgcd: send once the reciever promise is
resolved to 21. This implementation detects cardinality of the
continuation block and sends #whenResolved: appropriately, for
future evaluation.</p>
<blockquote>
<p>Object>>#<<* continuation<br>
<br>
(continuation numArgs == 1)<br>
ifTrue: [^ self whenResolved: [:result | result do:
[:each | continuation value: each]]].<br>
^ self whenResolved: [:result | continuation
valueWithArguments: result].</p>
</blockquote>
<p>One can see a 1 cardinality schedules the continuation to
evaluate with each result, while a continuation with
cardinality 2 or more will be scheduled to receive all
results. #valueWithArguments:</p>
<p>Here are 2 return handlers, <br>
</p>
<blockquote>
<p>promise := ((pair := self promiseResolverPair) key xgcd:
9).</p>
</blockquote>
<p>the first for each argument <br>
</p>
<blockquote>
<p>promise <<* [:each | selectCount := selectCount + 1.
Transcript cr; show: 'each = ', each];</p>
</blockquote>
<p>and the second for all three arguments.</p>
<blockquote>
<p>promise <<* [:g :s :t | unionFlag := true. Transcript
cr; show: 'g = ', g, '; s = ', s, '; t = ', t. g + s + t].</p>
</blockquote>
<pre cols="72" class="moz-signature">--
❤️🔥🐰
</pre>
<div class="moz-cite-prefix">On 6/21/23 09:44, Luciano
Notarfrancesco via Cuis-dev wrote:<br>
</div>
<blockquote type="cite">
<div dir="auto">Interesting, thanks for sharing!</div>
<div dir="auto">Actually I think it’s the same thing I did, my
implementation calls
BlockClosure>>#valueWithPossibleArgs: and takes only
as many arguments as needed by the block but the array can
be bigger than that (it should be named
#valueWithPossibleArguments: tho, abbreviations are ugly).</div>
<div dir="auto"><br>
</div>
<div><br>
<div class="gmail_quote">
<div class="gmail_attr" dir="ltr">On Wed, 21 Jun 2023 at
15:37 Christian Haider via Cuis-dev <<a class="moz-txt-link-freetext" href="mailto:cuis-dev@lists.cuis.st">cuis-dev@lists.cuis.st</a>>
wrote:<br>
</div>
<blockquote style="margin: 0px 0px 0px
0.8ex; border-left: 1px solid rgb(204, 204, 204);
padding-left: 1ex;" class="gmail_quote">
<div lang="DE" style="">
<div class="m_-976565113171439616WordSection1">
<p class="MsoNormal"><span lang="EN-CA">I added
something similar to my Values package (VW and
ports).</span></p>
<p class="MsoNormal"><span lang="EN-CA">The source
is</span></p>
<p style="margin-left: 35.4pt;" class="MsoNormal"><span lang="EN-CA" style="font-family: "Courier New";">SequenceableCollection>>asArgumentsIn:
aBlock</span></p>
<p style="margin-left: 35.4pt;" class="MsoNormal"><span lang="EN-CA" style="font-family: "Courier New";"> "Evaluate aBlock with the
receiver's elements as parameters.</span></p>
<p style="margin-left: 35.4pt;" class="MsoNormal"><span lang="EN-CA" style="font-family: "Courier New";"> aBlock takes its arguments
from the receiver.</span></p>
<p style="margin-left: 35.4pt;" class="MsoNormal"><span lang="EN-CA" style="font-family: "Courier New";"> 'ok'</span></p>
<p style="margin-left: 35.4pt;" class="MsoNormal"><span lang="EN-CA" style="font-family: "Courier New";"> #(1 2 3) asArgumentsIn: [:a :b
:c | a + b + c]</span></p>
<p style="margin-left: 35.4pt;" class="MsoNormal"><span lang="EN-CA" style="font-family: "Courier New";"> #(1 2 3) asArgumentsIn: [:a :b
| a + b]</span></p>
<p style="margin-left: 35.4pt;" class="MsoNormal"><span lang="EN-CA" style="font-family: "Courier New";"> #(1 2 3) asArgumentsIn: [:a |
a]</span></p>
<p style="margin-left: 35.4pt;" class="MsoNormal"><span lang="EN-CA" style="font-family: "Courier New";"> #(1 2 3) asArgumentsIn: [42]</span></p>
<p style="margin-left: 35.4pt;" class="MsoNormal"><span lang="EN-CA" style="font-family: "Courier New";"> 'not ok'</span></p>
<p style="margin-left: 35.4pt;" class="MsoNormal"><span lang="EN-CA" style="font-family: "Courier New";"> #(1 2 3) asArgumentsIn: [:a :b
:c :d | a + b + c + d]</span></p>
<p style="margin-left: 35.4pt;" class="MsoNormal"><span lang="EN-CA" style="font-family: "Courier New";"> "</span></p>
<p style="margin-left: 35.4pt;" class="MsoNormal"><span lang="EN-CA" style="font-family: "Courier New";"> </span></p>
<p style="margin-left: 35.4pt;" class="MsoNormal"><span lang="EN-CA" style="font-family: "Courier New";"> ^aBlock cullWithArguments:
self asArray</span><span lang="EN-CA"></span></p>
<p class="MsoNormal"><span lang="EN-CA"> </span></p>
<p class="MsoNormal"><span lang="EN-CA">The
difference is that it takes a list of any size
and picks out the first items and binds them to
the variables.</span></p>
<p class="MsoNormal"><span lang="EN-CA">I use it
often for CSV processing like</span></p>
<p class="MsoNormal"><span lang="EN-CA">
</span><span lang="EN-CA" style="">(line
tokensBasedOn: $;) asArgumentsIn: [:first
:second :y | … ].</span></p>
<p class="MsoNormal"><span lang="EN-CA"> </span></p>
<p class="MsoNormal"><span lang="EN-CA">I am just a
bit unhappy with the name – it is too long. It
reads ok though.</span></p>
<p class="MsoNormal"><span lang="EN-CA">The pipe
character is an interesting idea. I have to
think about it.</span></p>
<p class="MsoNormal"><span lang="EN-CA"> </span></p>
<p class="MsoNormal"><span lang="EN-CA">I am use it
for a while now and I am very happy with it.</span></p>
<p class="MsoNormal"><span lang="EN-CA"> </span></p>
<p class="MsoNormal"><span lang="EN-CA">Happy
hacking,</span></p>
<p class="MsoNormal"><span>Christian</span></p>
</div>
</div>
<div lang="DE" style="">
<div class="m_-976565113171439616WordSection1">
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span> </span></p>
<div style="border-width: 1pt medium medium;
border-style: solid none none; padding: 3pt 0cm
0cm; border-color: rgb(225, 225, 225) currentcolor
currentcolor;">
<p class="MsoNormal"><b>Von:</b> Cuis-dev <<a class="moz-txt-link-freetext" target="_blank" href="mailto:cuis-dev-bounces@lists.cuis.st">cuis-dev-bounces@lists.cuis.st</a>>
<b>Im Auftrag von </b>Luciano Notarfrancesco
via Cuis-dev<br>
<b>Gesendet:</b> Mittwoch, 21. Juni 2023 15:13<br>
<b>An:</b> Discussion of Cuis Smalltalk <<a class="moz-txt-link-freetext" target="_blank" href="mailto:cuis-dev@lists.cuis.st">cuis-dev@lists.cuis.st</a>><br>
<b>Cc:</b> Luciano Notarfrancesco <<a class="moz-txt-link-freetext" target="_blank" href="mailto:luchiano@gmail.com">luchiano@gmail.com</a>><br>
<b>Betreff:</b> [Cuis-dev] Methods that return
multiple values</p>
</div>
<p class="MsoNormal"> </p>
<p class="MsoNormal">Smalltalk doesn’t have a
convention for methods returning multiple values,
and I’m not aware of any implementation.</p>
<div>
<p class="MsoNormal">An example of such thing is
the extended gcd: ‘a xgcd: b’ returns g, s, t
where g is the gcd, and as + bt = g. Writing
methods that return multiple values is easy with
the curly brackets syntax, Integer>>#xgcd:
ends with something like</p>
</div>
<div>
<p class="MsoNormal"> ^ {g. s. t}</p>
</div>
<div>
<p class="MsoNormal">But using sending messages
that return multiple values is kind of annoying,
I end up doing something like:</p>
</div>
<div>
<p class="MsoNormal"> xgcd := a xgcd: b.</p>
</div>
<div>
<p class="MsoNormal"> g := xgcd at: 1.</p>
</div>
<div>
<p class="MsoNormal"> s := xgcd at: 2.</p>
</div>
<div>
<p class="MsoNormal"> t := xgcd at: 3</p>
</div>
<div>
<p class="MsoNormal">Some years ago I thought
about using blocks for this, but I never tried
it. Today I just did a little experiment
implementing anArray | aBlock as ‘^ aBlock
valueWithPossibleArgs: self’ and I can do:</p>
</div>
<div>
<p class="MsoNormal"> (a xgcd: b) | [:g :s :t|
… ]</p>
</div>
<div>
<p class="MsoNormal"> </p>
</div>
<div>
<p class="MsoNormal">This is seems quite nice
already, I guess I’ll start using it and see how
it feels. But the point of this mail is not to
show a solution, but to ask if anyone have
thought about this or if they know any nicer
solutions. Any ideas?</p>
</div>
</div>
</div>
-- <br>
Cuis-dev mailing list<br>
<a class="moz-txt-link-freetext" target="_blank" href="mailto:Cuis-dev@lists.cuis.st">Cuis-dev@lists.cuis.st</a><br>
<a class="moz-txt-link-freetext" target="_blank" rel="noreferrer" href="https://lists.cuis.st/mailman/listinfo/cuis-dev">https://lists.cuis.st/mailman/listinfo/cuis-dev</a><br>
</blockquote>
</div>
</div>
</blockquote>
</blockquote>
<pre cols="72" class="moz-signature">--
❤️🔥🐰</pre>
</blockquote>
<br>
<br>
<pre cols="72" class="moz-signature">--
Juan Vuletich
cuis.st
github.com/jvuletich
researchgate.net/profile/Juan-Vuletich
independent.academia.edu/JuanVuletich
patents.justia.com/inventor/juan-manuel-vuletich
linkedin.com/in/juan-vuletich-75611b3
twitter.com/JuanVuletich</pre>
</blockquote></body></html>