On Wed, Oct 14, 2015 at 12:09 PM, Robert Withers <robert.w.with...@gmail.com
> wrote:

>
> On 10/14/2015 11:01 AM, Mariano Martinez Peck wrote:
>
>> Robert,
>>
>> As far as I can remember, the problem of substitutions at
>> materialziation time was because... as you may have read, Fuel first
>> serializes "objects" and then the references. At materialization, it
>> first creates the objects and then, on a second step, sets the
>> references betwen objects. So the problem was WHERE to place the hook,
>> at which point in time. If we do it just after objects were created,
>> then the substitution code would NOT have access to any of the instVars
>> of that object. If we do it AFTER objects creation and after objects
>> references, then there is no easy way to "substitute" which doesn't
>> involve #become: (because the graph is already constructed) And you know
>> that #become: is still terrible slow because it scans full memory. That
>> will change in Spur.
>>
>
> The trick I learned from Gemstone is to use forwarding proxies,


Well, Spur will/does something similar called lazy become. Basically it
lets a forwarding pointer object and then takes advantage of next GC pass
or whatever in order to resolve such proxy in  lazy manner.


> looking up into the FLobjectId dictionary (decoder>>objects?) when
> stitching the references. When you copy the proxies on substitution, it
> stitches normally at reference time.


Yes, that could work. The problem is if you need instVars of the object you
want to substitute. Imagine you have a class called Client and instVar
'age'. And you want to substitute Client with instances of OldClient if
'age' is > 10.  At that point in time, the reference to the instVar 10 has
not yet been filled. Yet, you need to replace the object at graph
construction time.



>
>
> As for Marea and Ghost,
>>
>> Ghost proxies paper: https://hal.inria.fr/hal-01081236/document
>> Current Ghost repo: http://smalltalkhub.com/#!/~CAR/Ghost
>>
>> Marea paper: http://www.jot.fm/issues/issue_2013_01/article2.pdf
>> Current repo: http://ss3.gemstone.com/ss/Marea.html
>>
>> And finally, my PhD thesis:
>> https://tel.archives-ouvertes.fr/tel-00764991/document
>>
>
> Nicely done, sir. I'll check them out, thankyou.
>
>
Thanks, feel free to ask questions.



> In Marea I needed custom clusters for my proxies because the serializer
>> itself sends messages to the objects being serialized. My proxies would
>> bring back graphs from a secondary memory. So if I was serializing a
>> graph that had proxies already, I didn't want that. So I hooked my
>> custom cluster for proxies that send only a few special messages to the
>> proxy that these understand and answer rather than intercept those
>> messages.
>>
>> As for how to extend Fuel for this, I recommend to check the code of
>> Marea. See categories  'Marea-Serializers'  and 'Marea-Proxies'.
>> I have a Marea one click here:
>> https://www.dropbox.com/sh/xp8jzyypmz0898j/AACRdHno6V7UfhaJ1ofTPPXva?dl=0
>>
>> Cheers,
>>
>
> thanks so much ^^
> Robert
>
>
>>
>> On Wed, Oct 14, 2015 at 11:40 AM, Robert Withers
>> <robert.w.with...@gmail.com <mailto:robert.w.with...@gmail.com>> wrote:
>>
>>     Good morning, Max. Thank you for the example. I got a little
>>     confused, between migrations and substitutions. My issue with no-arg
>>     blocks, I believe, is the inability to access my scope object to
>>     maintain the object tables.
>>
>>     I'm attempting to write my own Materializer, Decoder and
>>     Materialization. At the moment, I'm just going to walk the graph,
>>     testing and do #becomes:. See how well that works when I get a test.
>>
>>     It's really good to know about that other list.
>>
>>     thanks so much ^^
>>     Robert
>>
>>     On 10/14/2015 04:15 AM, Max Leske wrote:
>>
>>         BTW, there is a dedicated Fuel mailing list:
>>         pharo-f...@lists.gforge.inria.fr
>>         <mailto:pharo-f...@lists.gforge.inria.fr>
>>         <mailto:pharo-f...@lists.gforge.inria.fr
>>         <mailto:pharo-f...@lists.gforge.inria.fr>>
>>
>>         Max
>>
>>
>>             On 14 Oct 2015, at 09:45, Max Leske <maxle...@gmail.com
>>             <mailto:maxle...@gmail.com>
>>             <mailto:maxle...@gmail.com <mailto:maxle...@gmail.com>>>
>> wrote:
>>
>>
>>                 On 14 Oct 2015, at 04:39, Robert Withers
>>                 <robert.w.with...@gmail.com
>>                 <mailto:robert.w.with...@gmail.com>
>>                 <mailto:robert.w.with...@gmail.com
>>                 <mailto:robert.w.with...@gmail.com>>> wrote:
>>
>>
>>                 On 10/13/2015 09:43 PM, Mariano Martinez Peck wrote:
>>
>>
>>
>>                     On Tue, Oct 13, 2015 at 10:33 PM, Robert Withers
>>                     <robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>
>>                     <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>>
>>                     <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>>> wrote:
>>
>>                        Hi Mariano,
>>
>>                        This presents me with a big challenge, then. I
>>                     read the docs and
>>                        explored the code and the only other aspect not
>>                     mentioned, beyond
>>                        instance creation (#fuelNew #fuelNew:) and
>>                     postMaterialization
>>                        (#fuelAfterMaterialization), is migrations.
>>                     However, migration only
>>                        allows for instanceVar mappings, no code blocks.
>>
>>
>>                     What do you mean that migrations only allows instVar
>>                     mappings , and no
>>                     code blocks? I mean, what do you mean by code blocks?
>>
>>
>>             Sounds to me like this (see FuelOutStackDebuAction):
>>
>>             serializeTestFailureContext: aContext toFileNamed: aFilename
>>             | serializer |
>>
>>             serializer := FLSerializer newDefault.
>>             self encodeDebugInformationOn: serializer.
>>             serializer addPostMaterializationAction: [ :materialization |
>>             Smalltalk tools debugger
>>             openOn: Processor activeProcess
>>             context: materialization root
>>             label: 'External stack'
>>             contents: nil
>>             fullView: false ].
>>
>>             serializer
>>             " use the sender context, generally the current context is not
>>             interesting"
>>             serialize: aContext
>>             toFileNamed: aFilename
>>
>>             This stores a block in the serialization which is evaluated
>>             after
>>             materialization. The only requirement is that it’s a clean
>>             block (no
>>             closure!).
>>
>>                     We also support class renames. This is here:
>>
>> http://rmod.inria.fr/web/software/Fuel/Version1.9/Documentation/Migration?_s=Pvs4DYqPRjfEy8sg&_k=X6ltJu7FDSxumm4X&_n&22
>>
>>                     Which kind of migration example you have in mind
>>                     that would not be
>>                     supported? An example would help.
>>
>>
>>                 Well, my pics will demonstrate. I am interested in doing
>>                 more than
>>                 mappping ivars or a class rename. I want to do a total
>>                 substitution,
>>                 then a further substitution on the receiving, import side:
>>
>>                 Vat1: anObject (Class A) ---> On wire: desc (Descriptor)
>>                 ---> Vat2:
>>                 aProxy (Class FarERef)
>>
>>                 A desc is substituted for a PassByProxy object, then a
>>                 FarERef is
>>                 substituted for the desc.
>>
>>
>>                        #fuelAccept: is a serialization side method.
>>
>>                        If Fuel supports substitution on serialization, I
>>                     don't understand
>>                        why no substitution support on materialization.
>>
>>
>>                     There was a reason, which I cannot remember
>>                     completely. Maybe Martin or
>>                     Max can remember.
>>
>>
>>                 It seems your focus was pickling to disk then back. My
>>                 focus is
>>                 distributed proxy graphs, which has different use cases.
>>
>>
>>
>>                        I am definitely going to use the world-class Fuel
>>                     binary
>>                        serialization system. However, I find myself
>>                     needing to extend Fuel
>>                        to support substitution on materialization.
>>                     Perhaps the solution is
>>                        a custom decoder.
>>
>>
>>                     I have made custom clusters for example for my Ghost
>>                     proxies of Marea
>>                     system. It was a perfect example of how I could
>>                     extent Fuel besides the
>>                     common hooks. Fuel provides many places for
>>                     extending , like clusters,
>>                     analyzer,  etc
>>
>>
>>                 Right on, exactly! Could you tell me more about your
>>                 Ghost proxies
>>                 and Marea, please? As well, could you mention how you
>>                 select a custom
>>                 cluster on the serialization side?
>>
>>
>>                 thanks so much ^^
>>                 Robert
>>
>>
>>
>>                        No, a bit more. It looks like I need a new
>>                        FLSubstitutePointerObjectCluster, write them on
>>                     serialization with
>>                        the substitute, then do unsubstitution on
>>                     materialization, since the
>>                        cluster controls materialization and not the
>> decoder.
>>
>>                        Does this approach seem sound to you, from a you
>>                     know architecture
>>                        and design approach?
>>
>>
>>                     There was an issue. Hope other can remember. If not,
>>                     I will try to
>>                     explan what I remember tomorrow.
>>
>>
>>                        thanks so much ^^
>>                        Robert
>>
>>                        On 10/13/2015 04:49 PM, Mariano Martinez Peck
>> wrote:
>>
>>                            No, unfortunately, as far as I can remember,
>>                     we do not have
>>                            that. There
>>                            are another hooks you may use but only in
>>                     certain scenarios
>>                            (#fuelNew,
>>                            #fuelAfterMaterialization, global sends,
>>                     etc). But everything is
>>                            listed
>>                            in
>>
>> http://rmod.inria.fr/web/software/Fuel/Version1.9/Documentation/CustomizingGraph
>>                               so if you didn't find anything of help in
>>                     there there are
>>                     chances
>>                            there isn't anything.
>>
>>                            Cheers,
>>
>>                            On Tue, Oct 13, 2015 at 5:30 PM, Robert Withers
>>                            <robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>
>>                     <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>>
>>                     <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>>
>>                            <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>
>>                            <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>>>> wrote:
>>
>>                                 Yes, I meant dynamic substitution on
>>                     materialization, to
>>                            use the
>>                                 correct terminology.
>>
>>                                 thanks,
>>                                 Robert
>>
>>
>>                                 On 10/13/2015 11:40 AM, Max Leske wrote:
>>
>>
>>                                         On 13 Oct 2015, at 17:16, Robert
>>                     Withers
>>                                         <robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>
>>                     <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>>
>>                            <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>>
>>
>>                       <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>
>>                            <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>>>> wrote:
>>
>>                                         Every extra source helps, thank
>>                     you. I see how to do
>>                                         non-stream substitutions on
>>                     materializations, but the
>>                                         documentation did not indicate a
>>                     way to do non-stream
>>                                         substitutions on serialization.
>>                     Is it possible?
>>
>>
>>                                     I don’t understand what you mean by
>>                     “non-stream”. Could
>>                            you give
>>                                     an example?
>>
>>
>>                                         thanks,
>>                                         Robert
>>
>>                                         On 10/13/2015 09:00 AM, Mariano
>>                     Martinez Peck wrote:
>>
>>                                             Hi Robert,
>>
>>                                             As for the documentation,
>>                     you have LOTS of
>>                            tests, you
>>                                             have the chapter
>>                                             Torsten pasted, you have
>>                     this documentation:
>>                     http://rmod.inria.fr/web/software/Fuel
>>
>>                                             But also, as for internals,
>>                     there is a journal
>>                            paper we
>>                                             wrote:
>>
>> http://rmod.lille.inria.fr/archives/papers/Dias12a-SPE-Fuel.pdf
>>
>>                                             Let us know how it goes,
>>
>>
>>                                             On Tue, Oct 13, 2015 at 6:00
>>                     AM, Torsten Bergmann
>>                                             <asta...@gmx.de
>>                     <mailto:asta...@gmx.de> <mailto:asta...@gmx.de
>>                     <mailto:asta...@gmx.de>>
>>                     <mailto:asta...@gmx.de <mailto:asta...@gmx.de>>
>>                            <mailto:asta...@gmx.de
>>                     <mailto:asta...@gmx.de> <mailto:asta...@gmx.de
>>                     <mailto:asta...@gmx.de>>>
>>                                             <mailto:asta...@gmx.de
>>                     <mailto:asta...@gmx.de> <mailto:asta...@gmx.de
>>                     <mailto:asta...@gmx.de>>
>>                            <mailto:asta...@gmx.de
>>                     <mailto:asta...@gmx.de> <mailto:asta...@gmx.de
>>                     <mailto:asta...@gmx.de>>>>> wrote:
>>
>>                                                  Hi Robert,
>>
>>                                                  Also checkout the
>>                     chapter on Fuel in Pharo
>>                                             Enterprise book:
>>
>>
>> https://ci.inria.fr/pharo-contribution/view/Books/job/EnterprisePharoBook/lastSuccessfulBuild/artifact/book-result/EnterprisePharo-A4.pdf
>>
>>                                                  Bye
>>                                                  Torsten
>>
>>                         Gesendet: Dienstag, 13. Oktober 2015 um
>>
>>                            09:44 Uhr
>>
>>                         Von: "Robert Withers"
>>
>>                                             <robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>
>>                     <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>>
>>                            <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>>
>>
>>                       <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>
>>                            <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>>>
>>
>>                     <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>
>>                            <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>>
>>
>>                       <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>
>>                            <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>>>>>
>>
>>                         An: pharo-dev@lists.pharo.org
>>                         <mailto:pharo-dev@lists.pharo.org>
>>                         <mailto:pharo-dev@lists.pharo.org
>>                         <mailto:pharo-dev@lists.pharo.org>>
>>
>>                            <mailto:pharo-dev@lists.pharo.org
>>                     <mailto:pharo-dev@lists.pharo.org>>
>>
>>                       <mailto:pharo-dev@lists.pharo.org
>>                     <mailto:pharo-dev@lists.pharo.org>
>>                            <mailto:pharo-dev@lists.pharo.org
>>                     <mailto:pharo-dev@lists.pharo.org>>>
>>
>>                       <mailto:pharo-dev@lists.pharo.org
>>                     <mailto:pharo-dev@lists.pharo.org>
>>                            <mailto:pharo-dev@lists.pharo.org
>>                     <mailto:pharo-dev@lists.pharo.org>>
>>
>>                       <mailto:pharo-dev@lists.pharo.org
>>                     <mailto:pharo-dev@lists.pharo.org>
>>                            <mailto:pharo-dev@lists.pharo.org
>>                     <mailto:pharo-dev@lists.pharo.org>>>>
>>
>>                         Betreff: Re: [Pharo-dev] binary
>>
>>                            serialization
>>
>>
>>                         Yes, I have to do object substitutions.
>>
>>                            Thanks
>>                                             for the link!
>>
>>
>>                         thanks,
>>                         Robert
>>
>>                         On 10/13/2015 03:43 AM, Max Leske wrote:
>>
>>
>>                                 On 13 Oct 2015, at 09:40, Robert Withers
>>
>>
>>                     <robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>
>>                     <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>>
>>                            <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>>
>>
>>                       <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>
>>                            <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>>>
>>
>>                       <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>
>>                            <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>>
>>
>>                       <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>
>>                            <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>>>>> wrote:
>>
>>
>>                                 Sven and Torsten, that's a binary
>>
>>                                             serialization library! It
>>                                                  will take time to learn
>>                     it and how to use
>>                            mappers.
>>
>>
>>                                 What is the format; is it language
>>
>>                            neutral?
>>
>>
>>                             For quick serialization you don’t
>>
>>                            need to do
>>                                             anything. It works
>>                                                  for (almost) all
>>                     objects. Only if you
>>                     want to
>>                                             exclude things or
>>                                                  treat some objects in a
>>                     special way, you
>>                            will need
>>                                             to do some stuff.
>>
>>
>>                             Documentation:
>>
>>                     http://rmod.inria.fr/web/software/Fuel.
>>
>>
>>
>>
>>                                 thanks,
>>                                 Robert
>>
>>                                 On 10/13/2015 01:21 AM, Sven Van
>>
>>                            Caekenberghe
>>                                             wrote:
>>
>>                                     Yes, it is called FUEL and it is a
>>
>>                            standard
>>                                             part of the
>>                                                  image. See FLSerializer
>>                     and FLMaterializer.
>>
>>
>>                                         On 13 Oct 2015, at 06:59, Robert
>>
>>                            Withers
>>
>>                     <robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>
>>                     <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>>
>>                            <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>>
>>
>>                       <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>
>>                            <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>>>
>>
>>                       <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>
>>                            <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>>
>>
>>                       <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>
>>                            <mailto:robert.w.with...@gmail.com
>>                     <mailto:robert.w.with...@gmail.com>>>>> wrote:
>>
>>
>>                                         Does Pharo have stream classes to
>>
>>                            binary
>>                                             de/serialize an
>>                                                  object, such that the
>>                     protocol accepts an
>>                            object as
>>                                             an argument and
>>                                                  converts it to a
>> byteArray?
>>
>>
>>                                         --
>>                                         thanks,
>>                                         Robert
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>                                             --
>>                                             Mariano
>>                     http://marianopeck.wordpress.com
>>
>>
>>
>>
>>
>>
>>
>>
>>                            --
>>                            Mariano
>>                     http://marianopeck.wordpress.com
>>
>>
>>
>>
>>
>>                     --
>>                     Mariano
>>                     http://marianopeck.wordpress.com
>>
>>                 <Exporting Vat.jpg><Importing Vat.jpg>
>>
>>
>>
>>
>>
>>
>> --
>> Mariano
>> http://marianopeck.wordpress.com
>>
>
>


-- 
Mariano
http://marianopeck.wordpress.com

Reply via email to