Am 26.02.2014 um 22:00 schrieb Mariano Martinez Peck <marianop...@gmail.com>:

> 
> 
> 
> On Wed, Feb 26, 2014 at 5:50 PM, Norbert Hartl <norb...@hartl.name> wrote:
> 
> Am 26.02.2014 um 21:37 schrieb Mariano Martinez Peck <marianop...@gmail.com>:
> 
>> 
>> 
>> 
>> On Wed, Feb 26, 2014 at 5:30 PM, Norbert Hartl <norb...@hartl.name> wrote:
>> 
>> Am 26.02.2014 um 21:21 schrieb Mariano Martinez Peck <marianop...@gmail.com>:
>> 
>>> 
>>> 
>>> 
>>> On Wed, Feb 26, 2014 at 3:53 PM, Norbert Hartl <norb...@hartl.name> wrote:
>>> 
>>> Am 26.02.2014 um 14:38 schrieb Mariano Martinez Peck 
>>> <marianop...@gmail.com>:
>>> 
>>>> Just be careful 2:  "I switched one of my servers to dump to stack with 
>>>> fuel to disk if an exception occurs. "
>>>> Once it happened to me the stack I was taking for serializing an error was 
>>>> too big. Too big because it even reached the UI. The UI has lots of 
>>>> sensible objects that change quite frequently. So my graph to serialize 
>>>> was big and the graph changed quite frequently. Result: Fuel throwing 
>>>> error because the graph to serialize changed while being serialized. 
>>>> Oh...exception?  Fuel out exception!  exception. Oh exception? ...
>>>> 
>>> Good point, thanks!
>>> 
>>>> So yeah..the fact that Fuel was throwing an error causes a loop so be 
>>>> careful of that as well. 
>>>> 
>>> If the serialization fails I just consider it an unrecoverable error and 
>>> proceed. I will add a logging message for that case so I can at least so 
>>> when something does not working while fueling out the stack.
>>> 
>>> 
>>> Forgot... "just be careful 3": it may happen that you cannot correctly 
>>> materialize (not serialization) the graph: a method has changed, a class is 
>>> missing..whatever... So what I did in the fuel out of failure tests is to 
>>> add to the serializer header all the info (as plain strings) that we 
>>> normally have in the PharoDebug.log. This "header" will always be able to 
>>> be materialized.... this way, I don't have the risk of not being able to 
>>> materialize and hence loose info, and yet I don't need PharoDebug.log as 
>>> well. If you don't do what I did, then you likely need also pharoDebug.log 
>>> just in case...
>>> 
>> That is unlikely to happen. My workflow is that every deployed image goes 
>> through the CI server. If a problem arises I download that same image from 
>> the CI server and load the stacks back into this. Everything is else is IMHO 
>> asking for trouble because contexts won’t map properly.
>> 
>> 
>> 
>> +9999. That's the safest thing to do: use an image with the same "code" as 
>> the one that failed. 
>>  
>>> I recommend everyone interested in this topic to take a look to: 
>>> #serializeTestFailureContext:toFileNamed:
>>>     
>> That is what I am using because it does what I want to happen. It is only 
>> the selector that doesn’t fit that well :)
>> 
>> thanks a lot for this information Mariano. This is highly appreciated to get 
>> infos from someone that knows the stuff.
>> 
>> 
>> No problem.
>> 
>> Just be careful 4: do not trust 100% of the ability to debug a post morten. 
>> It should be considered "just as another extra tool to the PharoDebug.log". 
>> But debugging a stack with Fuel could even be different than the scenario 
>> that caused the error. Imagine class variables that changed value, 
>> files/socktets or something that depended on external resources, etc etc 
>> etc. What I mean is...the debug of a materialized fuel stack may not be the 
>> same as debugging the error at the exact time it was produced in the very 
>> same image it happened. But it is a great addition to PharoDebug.log for 
>> several use cases where it helps anyway.
>> 
> Mariano, I admire your ability to offer all the precautions someone can think 
> of.
> 
> Because I've been there in this case ;)
>  
> Maybe it is because it involves a tool you did on your own. Thanks for that. 
> But for me the choice is easy. Having a fueled out stack is soooo much better 
> than textual log files so that I need to come up with a lot of drawbacks 
> until it wouldn’t be worth using that.
> 
> +9999. That's why I recommend everybody to use this approach taking the 
> necessary precautions. It does not harm at all and likely help a lot.
>  
> The side effects of having shared state is nothing that fuel introduces. If 
> you get a debugger in your image and go back a few frames/contexts/time you 
> cannot see the content of the objects at that time because they could have 
> changed.
> 
> indeed...that's why I said "in the exact time it was produced.."
>  
> I would wish, too, we would have a debugger that snapshots all state and is 
> able to „really“ go back. But at the moment we don’t have it. So it is 
> nothing fuel can solve. Fuel is just a wonderful tool that is capable of 
> making stupid tasks less stupid to handle.
> 
> 
> Completrly agree!!! nice quote btw!
>  
> thanks again :)
> 
> 
> No problem. You know that serializing/materializing a debugger was one of the 
> coolest things I ever did. I was on my table, at Douai, thinking about 
> examples to present Fuel in the ESUG Awards 2011. I remember my wife was sit 
> in the couch and I said "Flor...what if I serialize the debugger!!!" . It 
> took me 5 minutes to try it. I was sure it was going to fail...couldn't be so 
> good for the first time. And surprisly....it worked out of the box. I 
> couldn't believe it. I said...."ok...I have everything I need for ESUG" :)  
> So yes, I very much like this feature!
> 
> Also...it was the topic people outside the Smalltalk community commented the 
> most about Fuel... of course...this is not just Fuel...it is Smalltalk that 
> has contexts reified as objects and all it meta capabilities!
> 
Just take the credit! Seaside was commented mostly about having continuations 
and not about building on top of smalltalk. Sure there is a powerful platform 
beneath. But building cool tools using that power is _really_ important, too.

Norbert


> Norbert
> 
>  
>> Best, 
>>  
>> Norbert
>> 
>>> Cheers,  
>>> 
>>>  
>>> thanks,
>>> 
>>> Norbert
>>> 
>>>> 
>>>> 
>>>> On Wed, Feb 26, 2014 at 10:28 AM, Norbert Hartl <norb...@hartl.name> wrote:
>>>> 
>>>> Am 26.02.2014 um 14:19 schrieb Max Leske <maxle...@gmail.com>:
>>>> 
>>>> > Cool! :)
>>>> >
>>>> > Just be careful: if you’re using a large model the stack can blow up 
>>>> > your image with a low space warning / make it inresponsive (because the 
>>>> > stack referenes your model and boom, pretty much all of your instances 
>>>> > will becom serialized).
>>>> >
>>>> Yes, I know. But that would be a problem anyway. I think I have time. In 
>>>> the fuel files are 8 (!) contexts. :)
>>>> 
>>>> Norbert
>>>> 
>>>> > FYI we’re actively working on pruning of the serialization graph to 
>>>> > solve this.
>>>> >
>>>> > Max
>>>> >
>>>> >
>>>> > On 26.02.2014, at 14:01, Norbert Hartl <norb...@hartl.name> wrote:
>>>> >
>>>> >> The best smalltalk/pharo moments you get if you try things you want to 
>>>> >> have just in order to see they are already there.
>>>> >>
>>>> >> Today FileBrowser.
>>>> >> I switched one of my servers to dump to stack with fuel to disk if an 
>>>> >> exception occurs. Today I copied the files from the server to my local 
>>>> >> machine and opened a workspace starting to write an expression to open 
>>>> >> them. Then I thought it would be cool if I could use the file browser 
>>>> >> for it. So I opened it and navigated to the directory with the fuel 
>>>> >> files…et voilà…as soon as I clicked on a fuel file a button 
>>>> >> „materialize“ appeared which showed the stack from the server right 
>>>> >> away.
>>>> >>
>>>> >> Just brilliant! Well done!
>>>> >>
>>>> >> Norbert
>>>> >
>>>> >
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> -- 
>>>> Mariano
>>>> http://marianopeck.wordpress.com
>>> 
>>> 
>>> 
>>> 
>>> -- 
>>> Mariano
>>> http://marianopeck.wordpress.com
>> 
>> 
>> 
>> 
>> -- 
>> Mariano
>> http://marianopeck.wordpress.com
> 
> 
> 
> 
> -- 
> Mariano
> http://marianopeck.wordpress.com

Reply via email to