[Cuis-dev] [IMPROV] Add convenience method to read JSON strings

Nicola Mingotti nmingotti at gmail.com
Thu Aug 12 07:12:22 PDT 2021


Hi Gerald,

I think now i am able to parse the command "PositionableStream class >> 
on: arg1".

please check if I understand correctly. The logic why it is so for me it 
is too early to appreciate,
but for now i am happy enough if i got correctly the mechanic.

-------
PositionableStream class >> on: arg1
    self basicNew on: arg1
-------

. The first thing that get executed is "self basicNew"
. self here is the class PositionalbleStream
. basicNew is not in its methods so it will be looked into its 
superclasses methods
. who are the superclasses ? these:
------------
PositionableStream class. " PositionableStream class "
PositionableStream class superclass. " Stream class "
PositionableStream class superclass superclass. " Object class "
PositionableStream class superclass superclass superclass. " ProtoObject 
class "
PositionableStream class superclass superclass superclass superclass. " 
Class "
PositionableStream class superclass superclass superclass superclass 
superclass. " ClassDescription "
PositionableStream class superclass superclass superclass superclass 
superclass superclass. " Behavior "
PositionableStream class superclass superclass superclass superclass 
superclass superclass superclass. " Object "
PositionableStream class superclass superclass superclass superclass 
superclass superclass superclass superclass. " ProtoObject "
PositionableStream class superclass superclass superclass superclass 
superclass superclass superclass superclass superclass. " nil "
----------------
. Interesting enough at some point we have Behaviour as superclass, not 
"Behaviour class"
. Indeed Behaviour >> basicNew exists, and it is a primitive
. so "self basicNew" creates a new instance from the PositionableStream 
class
. this is an Object PositionableStream and is has the "on:" method.


bye
Nicola










On 8/12/21 11:31 AM, Gerald Klix wrote:
> Maybe "doing" this little piece of code gives you some insight into 
> classes (and Metaclasses):
>
> `HoverHelpMorph class withAllSuperclasses asArray inspect`
>
> HoverHelpMorph is just an arbitrary class with some super-classes.
>
>
> HTH,
>
> Gerald
>
>
> On 8/12/21 11:20 AM, Gerald Klix via Cuis-dev wrote:
>> Hi Nicola,
>>
>> Please see below.
>>
>> On 8/12/21 10:17 AM, Nicola Mingotti via Cuis-dev wrote:
>>>
>>> Hi Gerald,
>>>
>>> On 8/12/21 9:11 AM, Gerald Klix wrote:
>>>> May I suggest to to implement it this way:
>>>> --- snip ---
>>>> Json readFrom: aString readStream
>>>> --- snap ---
>>>> (See SequenceableCollection>>#readStream, inherited by String))
>>>>
>>> your version is nicer to the eye ;)
>> But probably slower without an inlining JIT. ;)
>>>
>>> There is something i don't understand though. I can arrive up to
>>> PositionableStream class>> on:
>>> ---------------
>>> on: arg1
>>>      ^ self basicNew on: arg1.
>>> ---------------
>>> After that, I can't find where "basicNew on:" is implemented.
>> I feared for some time,
>> that you might come up with this sort of question :»]
>>
>> For most #basicNew-sends the method Behavior>>#basicNew
>> will respond. Please note it's on the instance side of
>> Behavior.
>>
>> In anticipating the obvious next question:
>>
>> How does this all work?
>>
>> This is a nice article about classes and meta-classes,
>> explaining their history and providing a side-look
>> into other programming languages
>> https://courses.cs.washington.edu/courses/cse341/04wi/lectures/17-smalltalk-classes.html 
>>
>>
>> This article contains some words by Alan Kay and
>> quotes by Peter Deutsch about the Metaclass
>> design decision:
>> http://worrydream.com/EarlyHistoryOfSmalltalk/
>>>
>>>
>>>> If your JSON documents are bigger, it might be more efficient
>>>> to convert the HTTPSocket to a SocketStream and read directly from
>>>> it, but I do not know whether this is possible without much effort.
>>>
>>> Actually the JSON strings I send/receive can be a bit large. Because 
>>> they represent objets with inside
>>> packed quite a bit of information e.g. pictures. I would say never 
>>> larger then 1 MByte, if possible.
>>>
>>> Still at the moment I will not worry about efficiency. I am trying 
>>> to convert a Ruby+Mongo
>>> server side of an app into Cuis. I have time till end of the month 
>>> to make it work.
>> IC, I hope you are allowed to publish the results of your work.
>>>
>>> For the moment I am going to replicate the database as a list of 
>>> objects in memory,
>>> I will consider persistency better in a second step ;)
>> My own attempts at this topic are not to successful for the time being:
>> http://the_haver.klix.ch/#my-journey-into-databases
>>
>>
>>>
>>> Bye
>>> Nicola
>>>
>>>
>>>
>>>>
>>
>> --- snip/snap ---
>>
>>
>> Best Regards,
>>
>> Gerald



More information about the Cuis-dev mailing list