> On 19 May 2017, at 10:39, Offray Vladimir Luna Cárdenas 
> <offray.l...@mutabit.com> wrote:
> 
> Hi,
> 
> Thanks for this interesting conversation. I had some similar problem with 
> Grafoscopio notebooks being to big when I run the default serializer because 
> it puts data about the Text object and some other info about runs. What I did 
> was to flat the tree to contain only the info I need. I solved this with two 
> methods (listed below). Maybe this can be helpful:
> 
> GrafoscopioNotebook>>exportAsSton: aNotebook on: aFileStream
>    | stonPrettyString |
>    aNotebook flatten.
>    stonPrettyString := String streamContents: [ :stream |
>        (STON writer on: stream)
>            newLine: String crlf;
>              prettyPrint: true;
>            keepNewLines: true;
>              nextPut: aNotebook children].
>    aFileStream nextPutAll: stonPrettyString

Any reason why you first write to a string and then directly put that string on 
aFileStream ?

You can directly write STON on aFileStream, which is more memory efficient, as 
in

  (STON writer on: aFileStream)

If speed is important, it is best to wrap a ZnBufferedWriteStream around it.

> GrafoscopioNode>>flatten
>    "I traverse the tree looking for node bodies containing 'Text' objects and 
> transform them to
>    their string content, so space is saved and storage format is DVCS 
> friendly while serializing
>    them to STON"
> 
>    (self preorderTraversal) do: [ :eachNode |
>            (eachNode body class = Text)
>                ifTrue: [eachNode body: (eachNode body asString)]]
> 
> 
> Cheers,
> 
> Offray
> 
> On 17/05/17 09:15, Cyril Ferlicot D. wrote:
>> On 17/05/2017 16:02, Sven Van Caekenberghe wrote:
>>> OK, that is an understandable example.
>>> 
>>> But why exactly do you want Currency to be serialised differently ? You 
>>> don't want too many instances ? You want all instances to be #== ? Is 
>>> Currency too big ? You want to allow humans to edit the STON file ? What ? 
>>> Why ?
>>> 
>>> You can easily make it Currency['Euro'] or even Currency[#Euro] like it is 
>>> already done for a number of built-in classes.
>>> 
>>> The last example that I gave solved the 'too many instances', make them #== 
>>> issue.
>>> 
>>> If it is size, that got covered too, but you must solve the problem of how 
>>> the receiving end will resolve the reference then.
>>> 
>>> But since that is all no good, there must still be another requirement.
>> Here it is a simple example to show what I want.
>> 
>> The real use case is that in Moose, entities are really connected to
>> their model, and if one of our classes contains an entity it would
>> produce a really really really big ston file since it would export
>> millions of entities.
>> 
>> But there is a way to retrieve an entity of this model from its moose name.
>> 
>> Thus, I would like to export only the moose name of the entities, then
>> get the corresponding entity from a Model the user would have load
>> before during the ston reading.
>> 
>>> 
>> 
> 
> 


Reply via email to