Hi Martin 2011/10/13 Martin Dias <tinchod...@gmail.com>: > Hi Hernan, > Could your "specific Strings" be instances of a variant of RemoteString that > compresses and decompresses? Then they will occupy less memory in your image > and it would be easier to serializer and deserialize the proxy object.
I'd like to keep my objects cross-dialect, so if that's not an issue it would be ok to use a RemoteString. I don't see why it would be easier to serialize/deserialize? > Thanks for the feedback, I also don't like the visitor interface we have for > customizations. In fact, I think it is not a visitor but a double-dispatch. > And I would prefer to merge the two hooks Mariano proposed to something > like: > String >> > fuelMapOn: aDefaultMapper (ExternalCompressor shouldCompressString: self) > ifTrue: [aDefaultMapper mapSubstitution: self by: (ExternalCompressor > compress: self)] ifFalse: [super fuelMapOn: aDefaultMapper] > > Do you like more this way? Absolutely :) > Martin > > On Tue, Oct 11, 2011 at 4:10 PM, Mariano Martinez Peck > <marianop...@gmail.com> wrote: >> >> >> On Tue, Oct 11, 2011 at 12:56 AM, Hernán Morales Durand >> <hernan.mora...@gmail.com> wrote: >>> >>> Thanks Mariano, >>> >>> That's pretty much what I want, but... why to expose the visitor >>> interface? ;) >> >> Good question. Honesty, it was the only way we have found to do it with >> Fuel. I think (but I am not sure) that one of the drawbacks of the pickle >> format is that it analysis phase (as we call it in Fuel) make some hooks >> more complicated to implement than a classic serializer. >> >>> >>> Just to give a little feedback of what I have in my mind: >>> >>> mySerializer setEngine: ExternalCompressor for: ( MyClass -> >>> #myStringIVar ) >>> >> >> Well, you can also create an specific Fuel cluster for MyClass that does >> exactly that. Basically you have to create FLMyClassCluster, implement >> methods like #serializeWith: and #materializeFrom: and there you >> serialize/materialize the specific #myStringIVar with a special way and the >> rest as normal. Then you subclass the FLDefaultMapper, say YourMapper and >> you implement #visitXXX >> Then you have to implement MyClass >> visitXXX. >> Of course, you should be able to generalize such cluster and be able to >> reuse it for different classes or instVars. >> >> I am not saying this is the best way. I am just telling you one possible >> solution you can do by extending Fuel for your needs. Of course, you may >> need to understand how Fuel works first. But of course, we can help if you >> want. >> >>> >>> or >>> >>> mySerializer setEngine: ExternalCompressor for: incomingStream >>> >>> Now with machines generating daily 6 TBytes of raw data, one of the >>> keys will be data compression. >>> >> >> it looks like ;) >> >> >>> >>> 2011/10/10 Mariano Martinez Peck <marianop...@gmail.com>: >>> > >>> > >>> > On Mon, Oct 10, 2011 at 9:35 PM, Hernán Morales Durand >>> > <hernan.mora...@gmail.com> wrote: >>> >> >>> >> Is there any serializer (Fuel/StOMP/Ma object >>> >> serialization/BOSS/SRP/SIXX??) which let me attach an external >>> >> compressor/decompressor for specific Strings to the >>> >> serialization/deserialization process? >>> > >>> > In Fuel you can do: >>> > >>> > String >> fuelSubstitution >>> > ^ ExternalCompressor compress: self >>> > >>> > String >> fuelAccept: aVisitor >>> > ^ (ExternalCompressor shouldCompressString: self) >>> > ifTrue: [aVisitor visitSubstitution: self] >>> > ifFalse: [super fuelAccept: aVisitor] >>> > >>> > But the problem is that if #compress: answers an instance of String, >>> > you >>> > should be careful that if #shouldCompressString: asnwers true to the >>> > compressed string, then you will end up in an infinitive loop. >>> > >>> > See: http://rmod.lille.inria.fr/web/pier/software/Fuel/Hooks and >>> > FLHookedSubstitutionTest >>> > >>> > I think StOMP should support this as well: >>> > http://stomp.smalltalk-users.jp/home/how-to-use-stomp/hook-methods >>> > >>> > The previous hook you let you replace the original String with its >>> > compression during serialization. Which make sense because if you are >>> > going >>> > to compress it is better to do it during serialization. >>> > >>> >> With external I mean it could >>> >> be in a separate binary (I could arrange the binding though). >>> > >>> > I am not sure if I understood. >>> > >>> > >>> > >>> >> >>> >> Thanks >>> >> >>> >> Hernán >>> >> >>> > >>> > >>> > >>> > -- >>> > Mariano >>> > http://marianopeck.wordpress.com >>> > >>> > >>> >> >> >> >> -- >> Mariano >> http://marianopeck.wordpress.com >> > >