<html><head>
<style id="css_styles" type="text/css"><!--blockquote.cite { margin-left: 5px; margin-right: 0px; padding-left: 10px; padding-right:0px; border-left: 1px solid #cccccc }
blockquote.cite2 {margin-left: 5px; margin-right: 0px; padding-left: 10px; padding-right:0px; border-left: 1px solid #cccccc; margin-top: 3px; padding-top: 0px; }
a img { border: 0px; }
table { border-collapse: collapse; }
li[style='text-align: center;'], li[style='text-align: center; '], li[style='text-align: right;'], li[style='text-align: right; '] { list-style-position: inside;}
body { font-family: 'Segoe UI'; font-size: 12pt; }
.quote { margin-left: 1em; margin-right: 1em; border-left: 5px #ebebeb solid; padding-left: 0.3em; }
a.em-mention[href] { text-decoration: none; color: inherit; border-radius: 3px; padding-left: 2px; padding-right: 2px; background-color: #e2e2e2; }
--></style></head>
<body><div>Hi Juan,
</div><div><br /></div><div>> I had always learned by myself, reading books and experimenting with the computer. This approach failed completely with C++. I read 3 or four books, cover to cover. I did a lot of experiments, and could not see the value.
</div><div><br /></div><div>Thanks very much for sharing this experience, Juan! I loved everything about computers and programming in the '80s but then I learned Pascal at school (no objects, just plain imperative) and was disappointed. Fast forward 30 years, I decided to learn OOP on my own and failed miserably (unfortunately tried Python... bad choice indeed). But then googled "best OOP language" and discovered Smalltalk at last :)
</div><div><br /></div><div>> I don't know how it is to discover Smalltalk without a great teacher!
</div><div><br /></div><div>Painful :D
</div><div><br /></div><div>> I think it would be best to take a Smalltalk course with great teachers.
</div><div><br /></div><div>Absolutely, if you're lucky to be near some. None here in Prague but I hear Smalltalk is taught in Potsdam (Berlin) where Squeak has a great support in case you're in Germany.
</div><div><br /></div><div>> What is next best to that? I think that Dan Ingalls' "Design Principles Behind Smalltalk" is the best presentation of the ideas.
</div><div><br /></div><div>Looking back, I should have taken a good OOP course at the university and then tackle Smalltalk, not the other way round :)
</div><div><br /></div><div>Speaking of "ideas" in the code - I meant not only the "big" ones but also the small ones present in every non-trivial method. Understanding those is paramount when attempting to modify (fix or enhance, or just simplify) someone else's code without degrading it. These should get commented more thoroughly.
</div><div><br /></div><div>> In Smalltalk, all the libraries are "white box". You are encouraged to see what they do. Time spent learning how to inspect and query the system is the best investment you can do in Smalltalk.
</div><div><br /></div><div>> [...] if you succeed in finding the answer before asking, your benefit is much bigger.
</div><div><br /></div><div>I agree absolutely; besides, studying the system is a joy BUT the time investment for a **beginner** (without a teacher) is just overwhelming (unfamiliar syntax and IDE, lack of "usual" mainstream knowledge sources - SO, documentation, etc.). This may be a deciding factor before one commits to Smalltalk rather than Python ;)
</div><div><br /></div><div>> Hey Jaromir, you are in a better position than almost anyone (me included!) to write about the areas where you digged really deep and made great contributions. I know your code is clear, and with great comments. Still, if you ever feel like writing some .md documents on the stuff you know better than most, it would be a very welcome contribution!
</div><div><br /></div><div>Thanks Juan, writing some sort of partial documentation is still on my mind. I'd like to figure out how to incorporate such an information directly into the image though. It's not a method comment, not even a class comment, let alone a "book" but my idea is such info should be as close to the code as possible and ideally accessible from the code (whether a hyperlink or a button or something else I don't know yet). Recently I've kind of stepped aside and took courses in Python, Haskell, Javascript and Rust to get the bigger picture but very much look forward to getting back to Smalltalk soon.
</div><div><br /></div><div>Best regards and many thanks,
</div><div><br /></div><div>Jaromir
</div><div><br /></div>
<div><br /></div>
<div x-em-replyforwardheader=""><br /></div>
<div>
<div>On 21-Oct-24 8:47:54 PM, "Juan Vuletich" <<a href="mailto:juan@cuis.st">juan@cuis.st</a>> wrote:</div></div><div x-em-quote=""><br /></div>
<div id="x76f1522d4a964f7" style="color: rgb(0, 0, 0);"><blockquote cite="6716A1DA.1050407@cuis.st" type="cite" class="cite2">
Hi Jaromir, Mark, all,<br />
<br />
Comments inline. Please read in detail. I think this is important.<br />
<br />
On 10/21/2024 12:25 PM, Jaromir Matas via Cuis-dev wrote:<br />
<br />
<blockquote cite="mid:emdf674052-de16-488c-9f39-64399d037a85@94dd308b.com" type="cite" class="cite">
<style type="text/css"><!--#x76f1522d4a964f7 blockquote.cite
{margin-left: 5px; margin-right: 0px; padding-left: 10px; padding-right: 0px; border-left: 1px solid rgb(204, 204, 204);}
#x76f1522d4a964f7 blockquote.cite2
{margin-left: 5px; margin-right: 0px; padding-left: 10px; padding-right: 0px; border-left: 1px solid rgb(204, 204, 204); margin-top: 3px; padding-top: 0px;}
#x76f1522d4a964f7 a img
{border: 0px;}
#x76f1522d4a964f7 table
{border-collapse: collapse;}
#x76f1522d4a964f7 li#x76f1522d4a964f7 [style="'text-align: center;'"], #x76f1522d4a964f7 li#x76f1522d4a964f7 [style="'text-align: center; '"], #x76f1522d4a964f7 li#x76f1522d4a964f7 [style="'text-align: right;'"], #x76f1522d4a964f7 li#x76f1522d4a964f7 [style="'text-align: right; '"]
{list-style-position: inside;}
#x76f1522d4a964f7
{font-family: "Segoe UI"; font-size: 12pt;}
#x76f1522d4a964f7 .quote
{margin-left: 1em; margin-right: 1em; border-left: 5px solid rgb(235, 235, 235); padding-left: 0.3em;}
#x76f1522d4a964f7 a.em-mention#x76f1522d4a964f7 [href]
{text-decoration: none; color: inherit; border-radius: 3px; padding-left: 2px; padding-right: 2px; background-color: rgb(226, 226, 226);}
--></style>
<div>Hi Mark, all,
</div>
<div><br />
</div>
<div>I myself discovered Smalltalk as late as 2020 and found that,
at least in my case, learning Smalltalk was pretty difficult
despite the simplicity, consistency and overall beauty of the
language. And I too love it :) (in my case it's both Squeak and
Cuis)
</div>
<div><br />
</div>
</blockquote>
<br />
I discovered Smalltalk in 1995. By that time, I had been programming
for 10 years. After the obvious (at that time) start with Basic, I
quickly moved to 6809 Assembly and did pretty advanced real time
music stuff. Then, I moved to C, as a kind of "portable Assembly".
When C++ seemed to take over the world, I assumed it was the obvious
next step. Up to this moment, I had always learned by myself,
reading books and experimenting with the computer.
<br />
<br />
This approach failed completely with C++. I read 3 or four books,
cover to cover. I did a lot of experiments, and could not see the
value. Never understood the "TurboVision" library. I did value what
is called C+, that is statically determined "polymorphism" based on
parameter types.
<br />
<br />
Then, I was lucky. I was around 3rd year in my CS studies at
UniBuenosAires. An elective course called "Object Oriented
Programming" was offered. I knew that was what I'd failed to grasp
with C++, so I signed up for it. The teacher, Máximo Prieto changed
my life forever, as he changed the life of may of us then. He
introduced us to Smalltalk, and the whole idea of dealing with
complexity. He also started the thriving Smalltalk community in
Buenos Aires. Today Smalltalk is taught at several universities
here, there are several companies using it for real product
development. Buenos Aires is the main source of Smalltalk talent for
almost all the Smalltalk systems currently in active development,
not just Cuis.
<br />
<br />
So, I don't know how it is to discover Smalltalk without a great
teacher!
<br />
<br />
<blockquote cite="mid:emdf674052-de16-488c-9f39-64399d037a85@94dd308b.com" type="cite" class="cite">
<div>> Early in my learning I had a lot of beginner questions
for which I failed to easily find answers. [...] and there is a
high expectation that beginners will read through the source
code and try hard to find answers on their own.
</div>
<div><br />
</div>
<div>I so much share your frustration! In my experience no amount
of reading the code can replace guidelines from experienced
users enlightening the **intentions** behind the code as some
parts of the code are just implementation details and trade-offs
while some other parts are the "good stuff", bear the ideas. But
which is which?! This is where I struggle the most, to be able
to extract the ideas and filter out the "noise", and where I
consider expert advice irreplaceable. And this is one of the
things I'd love to find in comments.
</div>
</blockquote>
<br />
I think it would be best to take a Smalltalk course with great
teachers. I know, I know, that is even harder to find than good
developers for your Smalltalk project (unless you look at Buenos
Aires!).
<br />
<br />
What is next best to that? I think that Dan Ingalls' "Design
Principles Behind Smalltalk" is the best presentation of the ideas.
I can't stress how important it is to read it and really try to
understand it. There are many other good introductory books on
Smalltalk, all freely available on the web. Adele Goldberg's
"Smalltalk-80, the language and its implementation" is great. There
are several others, including our own "The Cuis Book" by our friend
Hilaire Fernandes. In the Documentation folder of our mail repo you
can also find some good material, including lots of references for
further reading. There are also many videos online that will help.
<br />
<br />
Books, magazine articles and videos include descriptions of the
ideas and intentions behind the code that are generally better than
answers in the mail list, because they were written with great care.
Questions on the mail list are better for filling in details,
especially if they are specific to some dialect (like Cuis) not
directly addressed in the book. For instance, this email is taking
an hour to write, and the mail thread leading to this has had me
thinking at least 5 times more. Maybe I'd turn this email into an
.md document for the Cuis repo. Then, will people read it?
<br />
<br />
<blockquote cite="mid:emdf674052-de16-488c-9f39-64399d037a85@94dd308b.com" type="cite" class="cite">
<div>> So I frequently asked questions on this mailing list.
Over time I learned that doing that is frowned on [...] While
some in the community may have been annoyed by the number of
questions I have asked [...]
</div>
<div><br />
</div>
<div>I honestly don't believe it's the case! Otherwise I'd be
afraid to ask next time :)
</div>
</blockquote>
<br />
Questions are most welcome. In this space we value free speech, and
at the same time we want an open and warm place where everybody can
feel comfortable.
<br />
<br />
For any Open Source project, questions are especially valuable if
they point to some aspect not covered in enough clarity and detail
in the documentation. Good questions help us refine documentation,
or fix annoyances in the system. You know, we old timers don't read
the documentation we wrote very often, and we tend to get used to
annoyances in the system to the point where we don't see them any
more. Good questions, complaints and bug reports are extremely
helpful!
<br />
<br />
Still, questions that can be addressed by reading the documentation,
or a quick query to the system can sometimes feel annoying, at least
to me. I can carefully write some explanation, investing several
hours, and making that part of the documentation. Or I can write 10
times about the same issue, when someone asks, each time improvising
a low quality ten minutes email. The first option results in higher
quality material, that can benefit many people over the course of
years. The second option gives a low quality answer to just one
person, that will most likely not be read again.
<br />
<br />
So, if you read the documentation first, and then point to flaws or
missing parts, you are really helping us make a better system. I
can't stress this enough. I really, really, really, very much,
prefer this!
<br />
<br />
<blockquote cite="mid:emdf674052-de16-488c-9f39-64399d037a85@94dd308b.com" type="cite" class="cite">
<div>> I really want to contribute via the documentation I'm
creating and hope that at some point all of that content can be
the basis for a book focused on Cuis Smalltalk.
</div>
<div><br />
</div>
<div>I wish you succeeded in this endeavor :) Again, my beginnings
with Smalltalk were painful due to the lack of documentation and
an availability of a vast knowledge base of the Stack Overflow
type where you can sooner or later find a question similar to
the one you're struggling with. I'm learning Rust at the moment
and at least most of my beginner questions and confusion have
been covered by the documentation so far. But I very much
realize how much work it is to provide such a documentation and
that it's only possible thanks to the size of the community; the
amount of work to create (and maintain!) such a documentation
is, I believe, about the same regardless of the language hence
it's so much more difficult for small communities like
Squeak/Cuis's where just a few individuals must carry the
burden.
</div>
</blockquote>
<br />
While this is true, most languages and frameworks are what is called
"black box". You only get the APIs or language constructs to use. If
documentation is unclear or missing, your only resource is to ask
someone for help. As Dan Ingalls says in his "Design Principles
Behind Smalltalk", Smalltalk tries to offer a completely different
experience. In Smalltalk, all the libraries are "white box". You are
encouraged to see what they do. Time spent learning how to inspect
and query the system is the best investment you can do in Smalltalk.
<br />
<br />
<blockquote cite="mid:emdf674052-de16-488c-9f39-64399d037a85@94dd308b.com" type="cite" class="cite">
<div>Quite recently I've discovered that the github Copilot can be
a tremendous help in learning a language (accelerates learning
the syntax, explains features and bugs, auto-fills simple
examples and even more complicated code snippets - not always
correct but even that helps!). I wish such a tool was available
for Smalltalk as a lot of beginner questions could be solved
right away.
</div>
<div><br />
</div>
<div>I wish there were more up-to-date sources like the Cuis book,
Squeak by example but also introductory books on more advanced
stuff like Stephane Ducasse's books on concurrent programming in
Smalltalk or Eliot Miranda's blog on contexts & friends.
</div>
</blockquote>
<br />
Hey Jaromir, you are in a better position than almost anyone (me
included!) to write about the areas where you digged really deep and
made great contributions. I know your code is clear, and with great
comments. Still, if you ever feel like writing some .md documents on
the stuff you know better than most, it would be a very welcome
contribution!
<br />
<br />
<blockquote cite="mid:emdf674052-de16-488c-9f39-64399d037a85@94dd308b.com" type="cite" class="cite">
<div>Best of luck,
</div>
<div><br />
</div>
<div>Jaromir</div>
</blockquote>
<br />
Cheers,<br />
<br />
<blockquote cite="mid:emdf674052-de16-488c-9f39-64399d037a85@94dd308b.com" type="cite" class="cite">
<div x-em-replyforwardheader=""><br />
</div>
<div>
<div>On 21-Oct-24 2:34:10 AM, "Mark Volkmann via Cuis-dev" <<a moz-do-not-send="true" href="mailto:cuis-dev@lists.cuis.st">cuis-dev@lists.cuis.st</a>>
wrote:
</div>
</div>
<div x-em-quote=""><br />
</div>
<div id="xc12625a08c154e0">
<blockquote cite="CAFfRWnU5xSpzwAoy0-LeoS0qra3zcBev_m8LNH-0+AKCR=fGKA@mail.gmail.com" type="cite" class="cite2">
<div dir="ltr">
<div dir="ltr">I apologize if the way I worded my question
came across as rude. That was certainly not my intent. I
think I should explain why I've tried to be a part of the
Cuis Smalltalk community for the past eight months or so.
<div><br />
</div>
<div>I'm pretty new to Smalltalk and it turns out I love
it. And so far Cuis Smalltalk is my favorite
distribution.
</div>
<div><br />
</div>
<div>Early in my learning I had a lot of beginner
questions for which I failed to easily find answers. So
I frequently asked questions on this mailing list. Over
time I learned that doing that is frowned on and there
is a high expectation that beginners will read through
the source code and try hard to find answers on their
own. I've tried hard to do that, but haven't always been
successful.
</div>
<div><br />
</div>
<div>I decided that I wanted to help future beginners find
the answers to all the questions I had more easily. So I
started documenting everything I learned about Smalltalk
at
<a moz-do-not-send="true" href="https://mvolkmann.github.io/blog/">https://mvolkmann.github.io/blog/</a>
(select Smalltalk in the left nav to see a long list of
subtopics). As you can see, I have spent a large amount
of time on this. It's nothing compared to those of you
that have been contributing to Cuis Smalltalk for years,
but I think it provides a good resource for anyone new
to Smalltalk in general and Cuis Smalltalk in
particular.
</div>
<div><br />
</div>
<div>I do not have a particular app in mind that I want to
build with Smalltalk. Instead I'm constantly thinking
about how I would convince non-Smalltalk developers to
give Cuis Smalltalk a try. A perfect example of that is
my investigation into database access. Many of the
developers I know are web developers. Accessing
relational databases is a fundamental part of
implementing most web applications. So I need to be able
to demonstrate how that is done from Cuis Smalltalk to
have any hope of convincing my web developer friends to
try it. As far as I know, based on many searches, there
is not currently a web page that shows step-by-step how
to access a relational database using Cuis Smalltalk. I
want to provide that if I can learn how to do it.
</div>
<div><br />
</div>
<div>While some in the community may have been annoyed by
the number of questions I have asked, I do hope there is
a feeling that my presence in the Cuis community has had
a net positive impact. In addition to the documentation
I've created in my blog I have identified a number of
minor issues that have been fixed, contributed a small
change set that added the ability to set a background
image in cover and tile modes, and most recently
contributed a library for implementing web servers that
has many advantages over the WebClient library (
<a moz-do-not-send="true" href="https://github.com/mvolkmann/Cuis-Smalltalk-WebClientPlus">https://github.com/mvolkmann/Cuis-Smalltalk-WebClientPlus</a>).</div>
<div><br />
</div>
<div>I really want to contribute via the documentation I'm
creating and hope that at some point all of that content
can be the basis for a book focused on Cuis Smalltalk.
</div>
<div><br />
</div>
<div>P.S. I honestly didn't know that the
Cuis-Smalltalk-Dev/Documentation/Technical directory
existed. Thanks for pointing that out. I'll read that
now.
</div>
</div>
<br />
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Sun, Oct 20, 2024 at
5:48 PM Juan Vuletich <
<a moz-do-not-send="true" href="mailto:juan@cuis.st">juan@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 bgcolor="#ffffff"> Hi Mark,<br />
<br />
What follows may be an intricate reading involving
language, manners, and how the Open Source world
works. Please read carefully.
<br />
<br />
On 10/20/2024 7:31 AM, Mark Volkmann via Cuis-dev
wrote:
<blockquote type="cite" class="cite"> I should have
asked “Is it possible that nobody that uses Cuis
Smalltalk in macOS accesses relational databases?”
</blockquote>
<br />
Who knows? Cuis Smalltalk is MIT license you get the
whole system, free for any use, without any
obligations. That means that you are not required to
disclose what you do with it. As a consequence of
that, the answer to "it is possible that nobody that
uses Cuis Smalltalk does XXX?" is true, for any XXX.
Does this matter? I don't think so.
<br />
<br />
A much better way to react would be something like "Hi
Folks. I'm trying to do XXX. I know the system is
fully open and explicitly designed to make it easy for
me to solve my technical problems, but I'm still
unable to do so. Has anybody faced these kinds of
problems I'm seeing before, and is willing to help
me?".
<br />
<br />
That will indeed work much better.<br />
<br />
Additionally, some comment from you revealing that you
have already read the contents of the
/Documentation/Technical folder would be appreciated.
Your first message made me believe you hadn't realized
you had trouble calling an API via FFI. But Jon's
answer doesn't tell you that, and assumes you already
know that. Your following message makes me now believe
that you know that the problem may be "how to
reference a lib path in the Open Smalltalk VM", indeed
being aware that this is a problem with FFI.
<br />
<br />
Once you realize that, you may also realize that this
problem has almost nothing to do with Cuis Smalltalk.
A bit of googling shows people asking similar (but
better formed) questions in nginx and lua.
<br />
<br />
I'm starting to have doubts about your intellectual
honesty while asking these questions. I think the Cuis
community deserves better than this.
</div>
</blockquote>
<blockquote class="gmail_quote" style="margin: 0px 0px 0px
 0.8ex; border-left: 1px solid rgb(204, 204, 204);
 padding-left: 1ex;
">
<div bgcolor="#ffffff"> <br />
Thanks,<br />
<br />
<blockquote type="cite" class="cite">
<div><br />
<div dir="ltr">---
<div>R. Mark Volkmann
<div>Object Computing, Inc.</div>
</div>
</div>
<div dir="ltr"><br />
<blockquote type="cite" class="cite">On Oct 20,
2024, at 6:26 AM, Mark Volkmann
<a moz-do-not-send="true" href="mailto:r.mark.volkmann@gmail.com"><r.mark.volkmann@gmail.com></a>
wrote:<br />
<br />
</blockquote>
</div>
<blockquote type="cite" class="cite">
<div dir="ltr"> Yikes! Sounds complicated. Can
you point me to any documentation that
describes how I could reference a lib path in
the Open Smalltalk VM?
<div><br />
</div>
<div>Is it possible that nobody that uses Cuis
Smalltalk accesses relational databases?
</div>
</div>
</blockquote>
</div>
</blockquote>
</div>
</blockquote>
</div>
<span class="gmail_signature_prefix">-- </span><br />
<div dir="ltr" class="gmail_signature">
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div dir="ltr">
<div dir="ltr">
<div><font face="arial, helvetica, sans-serif">R.
Mark Volkmann
</font></div>
<div><span style="font-size: 12.8px;"><font face="arial, helvetica, sans-serif">Object
Computing, Inc.
</font></span></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</blockquote>
<br />
<br />
<pre class="moz-signature" cols="72">--
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></div>
</body></html>