2014-06-01 23:19 GMT-04:00 Rik Cabanier <caban...@gmail.com>:

>
>
>
> On Sun, Jun 1, 2014 at 3:11 PM, Benoit Jacob <jacob.benoi...@gmail.com>
> wrote:
>
>>
>>
>>
>> 2014-05-31 0:40 GMT-04:00 Rik Cabanier <caban...@gmail.com>:
>>
>>  Objection #3:
>>>>
>>>> I dislike the way that this API exposes multiplication order. It's not
>>>> obvious enough which of A.multiply(B) and A.multiplyBy(B) is doing A=A*B
>>>> and which is doing A=B*A.
>>>>
>>>
>>> The "by" methods do the transformation in-place. In this case, both are
>>> A = A * B
>>> Maybe you're thinking of preMultiply?
>>>
>>
>> Ah, I was totally confused by the method names. "Multiply" is already a
>> verb, and the method name "multiply" already implicitly means "multiply
>> *by*". So it's very confusing that there is another method named multiplyBy.
>>
>
> Yeah, we had discussion on that. 'by' is not ideal, but it is much shorter
> than 'InPlace'. Do you have a suggestion to improve the name?
>

My suggestion was the one below that part (multiply->product,
multiplyBy->multiply) but it seems that that's moot because:


>
>
>> Methods on DOMMatrixReadOnly are inconsistently named: some, like
>> "multiply", are named after the /verb/ describing what they /do/, while
>> others, like "inverse", are named after the /noun/ describing what they
>> /return/.
>>
>> Choose one and stick to it; my preference goes to the latter, i.e. rename
>> "multiply" to "product" in line with the existing "inverse" and then the
>> DOMMatrix.multiplyBy method can drop the "By" and become "multiply".
>>
>> If you do rename "multiply" to "product" that leads to the question of
>> what "preMultiply" should become.
>>
>> In an ideal world (not commenting on whether that's a thing we can get on
>> the Web), "product" would be a global function, not a class method, so you
>> could let people write product(X, Y) or product(Y, X) and not have to worry
>> about naming differently the two product orders.
>>
>
> Unfortunately, we're stuck with the API names that SVG gave to its matrix.
> The only way to fix this is to duplicate the API and support both old and
> new names which is very confusing,
>

Sounds like the naming is not even up for discussion, then? In that case,
what is up for discussion?

That's basically the core disagreement here: I'm not convinced that just
because something is in SVG implies that it should be propagated as a
"blessed" abstraction for the rest of the Web. Naming and branding matter:
something named "SVGMatrix" clearly suggests "should be used for dealing
with SVG" while something named "DOMMatrix" sounds like it's recommended
for use everywhere on the Web.

I would rather have SVG keep its own matrix class while the rest of the Web
gets something nicer.



>
>
>>  Objection #4:
>>>>
>>>> By exposing a inverse() method but no solve() method, this API will
>>>> encourage people who have to solve linear systems to do so by doing
>>>> matrix.inverse().transformPoint(...), which is inefficient and can be
>>>> numerically unstable.
>>>>
>>>> But then of course once we open the pandora box of exposing solvers,
>>>> the API grows a lot more. My point is not to suggest to grow the API more.
>>>> My point is to discourage you and the W3C from getting into the matrix API
>>>> design business. Matrix APIs are bound to either grow big or be useless. I
>>>> believe that the only appropriate Matrix interface at the Web API level is
>>>> a plain storage class, with minimal getters (basically a thin wrapper
>>>> around a typed array without any nontrivial arithmetic built in).
>>>>
>>>
>>> We already went over this at length about a year ago.
>>> Dirk's been asking for feedback on this interface on www-style and
>>> public-fx so can you raise your concerns there? Just keep in mind that we
>>> have to support the SVGMatrix and CSSMatrix interfaces.
>>>
>>
>> My ROI for arguing on standards mailing on matrix math topics lists has
>> been very low, presumably because these are specialist topics outside of
>> the area of expertise of these groups.
>>
>
> It is a constant struggle. We need to strike a balance between
> mathematicians and average authors. Stay with it and prepare to repeat
> yourself; it's frustrating for everyone involved.
> If you really don't want to participate anymore, we can get to an
> agreement here and I can try to convince the others.
>

I'm happy to continue to provide input on matrix API design or other math
topics. I can't go spontaneously participate in conversations on all the
mailing lists though; dev-platform is the only one that I monitor closely,
and where I'm very motivated to get involved, because what really makes my
life harder is if the wrong API gets implemented in Gecko.


>
>> Here are a couple more objections by the way:
>>
>> Objection #5:
>>
>> The isIdentity() method has the same issue as was described about is2D()
>> above: as matrices get computed, they are going to jump unpredicably
>> between being exactly identity and not. People using isIdentity() to jump
>> between code paths are going to get unexpected jumps between code paths
>> i.e. typically performance cliffs, or worse if they start asserting that a
>> matrix should or should not be exactly identity. For that reason, I would
>> remove the isIdentity method.
>>
>
> isIdentity() indeed suffers from rounding errors but since it's useful,
> I'm hesitant to remove it.
> In our rendering libraries at Adobe, we check if a matrix is *almost*
> identity. Maybe we can do the same here?
>

Since you say that isIdentity() is useful, can you provide an example of a
valid use case for it, to make this conversation concrete?
Switching isIdentity() to use a fuzzy comparison, as IIUC you say Adobe
uses internally, doesn't change fundamentally the problem here, which is
that there is a sudden jump. The discontinuity is merely moved elsewhere.
Any discontinuous matrix function, in particular any function taking a
matrix and returning a boolean, is easy to misuse. I'm willing to believe
that Adobe uses that for a precise, valid purpose though --- but here in a
DOMMatrix interface we can't assume any specific purpose.

Benoit
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to