Re: Monitoring status of dynamic calculation
- To: mathgroup at smc.vnet.net
- Subject: [mg103513] Re: [mg103506] Monitoring status of dynamic calculation
- From: John Fultz <jfultz at wolfram.com>
- Date: Sat, 26 Sep 2009 06:12:09 -0400 (EDT)
- Reply-to: jfultz at wolfram.com
Without knowing more about the context of your problem, it's difficult to give
the very best answer which can work for you. I'll throw a few things out there
without any guarantee that they'll stick for your particular problem.
* I'm not sure why changing all of your Dynamics is such a bad idea. I think
you should be willing to consider it. You can abstract it by defining something
like...
myDynamic[x_]:=Dynamic[x, (#2=#1; Status="Out-of-date")&]
SetAttributes[myDynamic, HoldAll];
or, you could have a standard wrapper for anything inside of Dynamic...
Dynamic[FlagStatus[x]];
FlagStatus[x_]:=Status="Out-of-date";x
* Perhaps you wouldn't need to worry about keeping status information if you
cached computational results using memoization. Look up memoization (note the
lack of the r is intentional) in the online help.
Sincerely,
John Fultz
jfultz at wolfram.com
User Interface Group
Wolfram Research, Inc.
On Fri, 25 Sep 2009 07:51:34 -0400 (EDT), Hugh Goyder wrote:
> I have a notebook with many (possibly 100) dynamic variables. I do a
> calculation using these variables and get a result. If I change one of
> my dynamic variables then the results of the calculation are no longer
> correct and I need to do the calculation again. What I need is a
> method for identifying the status of the calculation. Is it current
> and correct or has one of the variables changed and it is now out-of-
> date?
>
> I give a toy example below where pressing a button corresponds to
> doing the calculation and setting a status flag to current. If I
> change one of the dynamic variables then I want the status to change
> to out-of-date. I give an input field with a dynamic with a second
> argument which enables me to change the status. This works but my
> problem is that I have many ways of changing the dynamic variables and
> I cannot associate each with a two argument dynamic. I thus need a
> general way of checking to see if a variable has changed and if so
> updating the status. Is this possible?
>
> Thanks
> Hugh Goyder
>
> (divide the cell where line spaces occur)
>
> ClearAll[x];
> n=10;
> a=Table[{i,x[i]},{i,n}];
> Status="Out-of-date";
>
>
> TableForm[{#[[1]],Dynamic[#[[2]]]}&/@a]
>
>
> Do[x[i]=RandomReal[],{i,n}];
>
>
> Row[{Button["Mean",b=Mean[a[[All,2]]];Status="Current"],"Mean
> ",Dynamic[b]," Status = ",Dynamic[Status]}]
>
>
> InputField[Dynamic[x[1],(x[1]=#;Status="Out-of-date")&]]
>
>
> x[2]=2