From: Kenneth Tilton on
George Neuner wrote:
> On Fri, 18 Dec 2009 18:05:43 -0500, Kenneth Tilton
> <kentilton(a)gmail.com> wrote:
>
>> George Neuner wrote:
>>> On Thu, 17 Dec 2009 21:49:31 -0500, Kenneth Tilton
>>> <kentilton(a)gmail.com> wrote:
>>>
>>>> W. James wrote:
>>>>> Kenneth Tilton wrote:
>>>>>
>>>>>> I was clever enough to stipulate "an intelligent question", meaning
>>>>>> one demonstrating one has given some thought to what one read and
>>>>>> worked through to a synthetic consequence evidencing their thought.
>>>>> I was clever enough to stipulate "an intelligent question", meaning
>>>>> one demonstrating he has given some thought to what he read and
>>>>> worked through to a synthetic consequence evidencing his thought.
>>>> Word counts equal, consideration for others not. And your version is
>>>> ungrammatical: the anaphor is unbound.
>>> Your own attempt has at least three problems: a pronoun number
>>> disagreement, "one" being singular while "their" is plural; you used
>>> past imperfect tense in "have given" when it should have been past
>>> perfect; and your use of the word "stipulate" is incorrect according
>>> to its definition.
>>>
>>> A better choice might have been:
>>>
>>> "I was clever enough to ask "an intelligent question", meaning one
>>> demonstrating that I had given some thought to what I had read and had
>>> worked through to a synthetic consequence evidencing my thought."
>>>
>>> which, I am pretty sure, both uses correct word definitions and is
>>> grammatically correct (though still slightly informal) English.
>>>
>>> Tag! You're it.
>>> George
>> I would rather you followed up on the clarifications I offered on Cells,
>> which I took some trouble to explicate.
>
> I'm still thinking about it.
>
>> Meanwhile, who said "have given"?
>
> My mistake. Somehow I looked at it and saw "have given" instead of
> "has given". However, "has" may be either "simple past" or "past
> imperfect", and therefore your use of it leaves open when your thought
> took place with respect to the formulation of your question.
>
>
>> And you better supply "its definition"
>> when making claims like that because you are wrong about the word. The
>> "their" is the PC (and British) solution to unknown gender, and I like
>> it and especially like the jolt one gets from the count mismatch.
>
> None of "PC", "British" or "I like it" makes it correct. "Their" is
> plural and does not agree in number with "one has ... thought". The
> grammatically correct alternative is "its", but, in this context,
> "its" would read strangely to most people because the referent is
> intended to be a person.
>
>
> stipulate:
>
> �verb (used without object)
> 1. to make an express demand or arrangement as a condition of
> agreement (often fol. by for).
>
> �verb (used with object)
> 2. to arrange expressly or specify in terms of agreement: to
> stipulate a price.
> 3. to require as an essential condition in making an agreement:
> Total disarmament was stipulated in the peace treaty.
> 4. to promise, in making an agreement.
> 5. Law. to accept (a proposition) without requiring that it be
> established by proof: to stipulate the existence of certain facts or
> that an expert witness is qualified.
>
> Origin:
> 1615�25; < L stipula-tus (ptp. of stipula-ri- to demand a formal
> agreement), appar. equiv. to stipul- (see stipule ) + -a-tus -ate 1
>
>
> Essential to the definition of stipulate is agreement. A question is
> not agreement. The question itself - its existence or its content -
> is a fact that can be agreed upon, but that is not what you wrote.
> (And you can't agree with yourself 8)
>
>
>> Your "better choice" is interesting in that it means something completely
>> different and maybe that is why you are so off in everything else you
>> offered. The only edit I would make would be "to what he /has/ read" but
>> I thought that would be two many hases so took some poetic license.
>
> Mine differs in that it more correctly qualifies the timeline - it
> makes explicit that thought proceeded posing the question (which is
> clearly what you were trying to convey). It also differs in the use
> of personal pronouns to precisely indicate who/what is performing the
> actions. Your conflation of a third-person neutral subordinate clause
> referring to a first-person action - while not incorrect (if
> grammatical) - makes for difficult reading at best.
>
>> kt
>
> George

Trust me, you simply do not understand what I was saying, I guess
because you missed the context when I made the stipulation.


kt

--

http://thelaughingstockatpngs.com/
http://www.facebook.com/pages/The-Laughingstock/115923141782?ref=nf
From: George Neuner on
On Mon, 14 Dec 2009 22:22:19 -0500, Kenneth Tilton
<kentilton(a)gmail.com> wrote:

>George Neuner wrote:
>> On Mon, 14 Dec 2009 14:06:07 -0500, Kenneth Tilton
>> <kentilton(a)gmail.com> wrote:
>>
>>> George Neuner wrote:


>>>> I concede that it is reasonable to view dataflow as a network of
>>>> active observers rather than a network of active providers, but if you
>>>> take the position that all the players are active agents, I believe
>>>> that the observation model is somewhat less efficient when there are
>>>> many linkages and that it makes more sense to have agents be
>>>> activated/scheduled upon receipt of data. The applicable hardware
>>>> analogy is "asynchronous rendezvous logic" which is what the original
>>>> model was based on.
>>>>
>>>> As for my issue with spreadsheets - their working have traditionally
>>>> been explained in terms of the observer model (though obviously they
>>>> could be implemented either way - spreadsheet is not a model itself
>>>> but an example). In any event, most people understand them in terms
>>>> of observation and, because of that, I believe the analogy is, at
>>>> best, misleading because it does not (I think adequately) illustrate
>>>> the feed forward nature of the computation.
>
>>> Actually, a spreadsheet certainly does feed forward: I change one cell
>>> holding the prime rate and the rest of the model is updated. It does not
>>> feel like dataflow because the only manifestation is screen updates, but
>>> I think I heard about spreadsheets getting triggers which would let them
>>> kick off more interesting effects. Imagine lights flashing and bells
>>> ringing as you play what-if with a financial model.
>>
>> I would say that depends. The formula cell pulls the value.
>
>No, that is the way it is coded. The engine then propagates a change to,
>say, prime rate throughout the model.

I think that can be a disingenuous interpretation of the semantics:
IMO a value that is reactively read by a consumer has not been
"propagated".

In a propagation network, producer nodes actively send values to
consumer nodes (a single node can be both producer and consumer).
Again I refer to asynchronous rendezvous logic which was the origin of
dataflow:
____________ _
| | | |
| producer A | -> | | __________
|____________| |_| -> | |
____________ _ | consumer |
| | | | -> |__________|
| producer B | -> | |
|____________| |_|

Producer circuits A and B may run independently and store results into
registers which are simultaneously inputs to the consumer circuit (in
practice the registers might really be queues). When both inputs are
ready (registers latched), the consumer circuit is triggered to run.


>> Actual spreadsheet code I have seen over the years has uniformly used
>> backward chained evaluation: there's a list of formula cells that
>> refer to values. I have seen implementations keep forward links from
>> values to referencing formulas, but AFAIHS, those forward links were
>> only used as starting points for recomputing dependencies for a new
>> round of evaluation.
>
>There is no way around a certain amount of "polling" because a rule can
>be forced to run but then it cannot assume everyone else besides the
>triggering value is current.

Well, I don't necessarily equate demand evaluation with polling. I
consider polling an active process of looking for change whereas
demand evaluation simply reads the latest version of its inputs.


>Cells uses a generational counter to decide currency and the so
>the cost is negligible: we still recalculate only rules that are both
>out of date and dependent on something that changed, otherwise simply
>sweep the dependency graph looking for out-of-date dependents on changed
>other Cells. The tree gets visited exactly once because a Cell
>determined not to be need recalculation gets its generation set to the
>current.

But see now you have me confused again. You say Cells forward chains,
but then you have value versioning which should not be needed.
Versioning is only needed to effective memoize and avoid recomputing
known values in a backward chained system.

A forward chaining system says "X changed, X is used by Y, so queue Y
to be recomputed". This applies transitively to all downstream
dependencies of X ... no value versioning needed. And again, I don't
consider simply reading input necessarily to be polling.


>Other tools apparently run a rule hoping everyone is current and then
>rerun if it turns out domeone they used got reran. Could take some fancy
>analysis to decide which is more efficient and when (I suspect the
>answer varies depending on the dependency graph).

A simple input checker can order non-circular rules so that they are
evaluated only once. Alternating or divergent circular rule sets are
a problem for any evaluation model ... you have to have meta-rules to
effectively deal with them.


>The correct algorithm walks only the dependency graph that /might/ be
>affected, and it is simply comparing two integers. And again there is no
>way to avoid this -- well, the alternative is the other model I
>mentioned: don't check, just run. Re-run if it turns out you used an old
>value.
>
>That could be fast in that in my experience re-runs would be
>needed rarely, I just have not stopped to figure out what the
>housekeeping would cost (the h/k to identify rules that ran against
>obsolete values).

The question is how the dependency graph is created: by following
values to rules that use them or by following rules to the values they
use. These graphs are equivalent (sans cycles, anyway), but are not
the same and their computational needs may be vastly different in the
absence of memoization.


You are arguing your particular method in Cells as if I am questioning
that it is dataflow. I'm not questioning that at all. I have already
conceded that dataflow legitimately can be viewed as either a producer
network, a consumer network or a fusion of the two (which is a
necessity for a physically distributed implementation anyway). I
simply put forth my opinion that, for a shared memory system the
producer network is the more efficient model.

George
From: Kenneth Tilton on
George Neuner wrote:
> But see now you have me confused again.

I'd feel worse about that but for your recent refusal to accept the
meaning of the words I chose even after having been reassured I had
chosen them carefully. I really enjoyed that exchange and am having it
framed for mounting as we speak.

btw, when preparing my response I checked the dictionary to make sure I
had the word "obtuse" right -- you need to update your photo.

> You say Cells forward chains,
> but then you have value versioning which should not be needed.
> Versioning is only needed to effective memoize and avoid recomputing
> known values in a backward chained system.

You wish, as did me and Philip Eby who copied my algorithm when he did
Trellis, a Python version of Cells. It took about a dozen exchanges
before Philip realized I was right.

>
> A forward chaining system says "X changed, X is used by Y, so queue Y
> to be recomputed".

That is how Cells works.

> This applies transitively to all downstream
> dependencies of X ... no value versioning needed.

Wrong conclusion. Try it, you'll see. When Y gets recomputed it may
decide for the first time (remember my emphasis on branching code?) ever
to use Z, and Z may have been computed off W and W off X. The indirect
dependency is necessary because if Z were computed directly off X the
algorithm could begin by marking all dependencies as dirty and then when
Y consulted Z the engine would know to recompute it. But W will not be
dirty, only Y and Z. We cannot flag everything dirty recursively because
when W gets recomputed it may not change in value and a vital
optimization is to react only to change.

Stipulate that.

If you have checked that MIT paper you saw a different approach that
also uses generational ID. That approach just recalculates Y but keeps
track of the values used and their generation IDs. After all have been
recalculated it sees Y used W but W subsequently got recalculated when Z
changed. [Note that there is no way to order these ahead of time because
I stipulated that Y took a branch for the first time to use W so no
sorting algorithm would see the future dependency.] In this alternate
approach, this use of an invalid generation of W is cured by simply
re-running the rule for Y.

I have no idea which approach is more efficient. The XYWZ thing comes up
very rarely (and I keep thinking I am missing a V because I am just
recreating it form memory and I am pretty sure Philip christened the
actual use case The Pentagram of Death) so rule re-runs would be scarce.
My question is over the cost of the housekeeping needed to detect the
need to re-run.

kt

--

http://thelaughingstockatpngs.com/
http://www.facebook.com/pages/The-Laughingstock/115923141782?ref=nf
From: Kenneth Tilton on
Kenneth Tilton wrote:
> George Neuner wrote:
>> But see now you have me confused again.
>
> I'd feel worse about that but for your recent refusal to accept the
> meaning of the words I chose even after having been reassured I had
> chosen them carefully. I really enjoyed that exchange and am having it
> framed for mounting as we speak.
>
> btw, when preparing my response I checked the dictionary to make sure I
> had the word "obtuse" right -- you need to update your photo.
>
>> You say Cells forward chains,
>> but then you have value versioning which should not be needed.
>> Versioning is only needed to effective memoize and avoid recomputing
>> known values in a backward chained system.
>
> You wish, as did me and Philip Eby who copied my algorithm when he did
> Trellis, a Python version of Cells. It took about a dozen exchanges
> before Philip realized I was right.
>
>>
>> A forward chaining system says "X changed, X is used by Y, so queue Y
>> to be recomputed".
>
> That is how Cells works.
>
>> This applies transitively to all downstream
>> dependencies of X ... no value versioning needed.
>
> Wrong conclusion. Try it, you'll see. When Y gets recomputed it may
> decide for the first time (remember my emphasis on branching code?) ever
> to use Z, and Z may have been computed off W and W off X. The indirect
> dependency is necessary because if Z were computed directly off X the
> algorithm could begin by marking all dependencies as dirty and then when
> Y consulted Z the engine would know to recompute it. But W will not be
> dirty, only Y and Z. We cannot flag everything dirty recursively because
> when W gets recomputed it may not change in value and a vital
> optimization is to react only to change.

Oops. I reversed W and Z halfway thru:

"When Y gets recomputed it may decide for the first time (remember my
emphasis on branching code?) ever to use Z, and Z may have been computed
off W and W off X. The indirect dependency is necessary because if Z
were computed directly off X the algorithm could begin by marking all
dependencies as dirty and then when Y consulted Z the engine would know
to recompute it. But /Z/ will not be dirty, only Y and /W/. We cannot
flag everything dirty recursively because when W [ooh, I switched back.
ed] gets recomputed it may not change in value and a vital optimization
is to react only to change."

And:

>
> Stipulate that.
>
> If you have checked that MIT paper you saw a different approach that
> also uses generational ID. That approach just recalculates Y but keeps
> track of the values used and their generation IDs. After all have been
> recalculated it sees Y used W but W subsequently got recalculated when Z
> changed. [Note that there is no way to order these ahead of time because
> I stipulated that Y took a branch for the first time to use W so no
> sorting algorithm would see the future dependency.]

"Note that there is no way to order these ahead of time because I
stipulated that Y took a branch for the first time to use /Z/ so no
sorting algorithm would see the future dependency."

kt

In this alternate
> approach, this use of an invalid generation of W is cured by simply
> re-running the rule for Y.
>
> I have no idea which approach is more efficient. The XYWZ thing comes up
> very rarely (and I keep thinking I am missing a V because I am just
> recreating it form memory and I am pretty sure Philip christened the
> actual use case The Pentagram of Death) so rule re-runs would be scarce.
> My question is over the cost of the housekeeping needed to detect the
> need to re-run.
>
> kt
>


--

http://thelaughingstockatpngs.com/
http://www.facebook.com/pages/The-Laughingstock/115923141782?ref=nf
From: Ron Garret on
In article <4b2ea702$0$22534$607ed4bc(a)cv.net>,
Kenneth Tilton <kentilton(a)gmail.com> wrote:

> RoboCup was the app that broke Cells 3.

Imagine that.

rg
First  |  Prev  | 
Pages: 1 2 3 4 5 6 7 8 9
Prev: NY Times
Next: complex symmetric matrices