image width, height, algorithmic specifications


I wanted to try to wrap up the question about
width and height depending on "available" --
probably impossible, but I thought I would
at least summarize where I thought things stood,
will probably not be able to respond for
a couple of weeks.

I was trying to chase down examples of the comment
the document frequently states requirement specifications
in terms of implementation techniques for "browsers",
and to do so by looking at a random sample of pages. 

The first page I looked at  contained the
algorithm for "image.width" and "image.height".

(The second page contained the "outline" algorithm;
the next page has the "select" element, won't 
have time for that, although the charset sniffing
algorithms also fit into this category.)

In the discussion of image.width and image.height,
some additional requirements that aren't clearly
stated in the document became apparent (the document
was updated.)

The document requires a state "available", and a 
transition diagram between states, that 
images can go from "not available" to "available"
once they have started loading, but (I am told,
but don't see from the document) an image
can go from "available" to "not available" if the
fetch of the image fails. To model this properly,
an implementation would need at least 3 states
for an image (not-yet-available, available,
once-available-but-failed) and a real implementation
would probably have more, but the requirements
would have to have at least three.

I described a hypothetical implementation -- which
didn't cache anything about images, but rather
attempted to fetch them each time, -- which
might have a state where an image width was
known but the image height not yet known.
Such an implementation would be "non compliant".
JavaScript programmers assume that if image.width
is known, then image.height is known, and so
it should be a browser constraint.

I'm not sure where this data comes from -- what
JavaScript programmers assume -- and why this
requirement is necessary. Are there well-known
JavaScript DOM texts which include this assumption?
Common JavaScript libraries that would fail?
Isn't this just one of many things that might 
break in a typical script? Is this an
argument by authority, on what Javascript programmers
do or don't do? Was this requirement in any
previous specification?

I argued that this might be an unnecessary
constraint, but if there's some evidence
that it's actually necessary, perhaps
it SHOULD be that both .width and .height
are simultaneously available or not, but
I’m not convinced the requirement needs to
be a MUST.

It's more of a concern that the requirement
that an image not be able to go from
"available" to "not available" and then
back to "available". I think the implication
is that once an image has been loaded, and
is "available" for the second time, that it
can't be "unloaded", because if fetching it
a second time were to fail, have an network
error, then it should be "unavailable", no?

So, if I'm running Chrome on Flikr, and I
open up my "set" of 70,000 photos, and there
are only some thumbnails visible, and I scroll
the window, which causes some new thumbnails
to be loaded, and then go back -- does the
browser have to have cached all of the 
thumbnails that have ever been viewed,
in order to meet this MUST requirement?
This seems like an unreasonable requirement
that might not be met by *any* practical
implementation.

Of course there are buffer limits.

Why is something that can't actually be
promised -- that all images on a page
MUST be cached once they have been loaded --
a requirement at all?

If the requirement had been written in terms
of constraints instead, then some of the
conformance constraints could be "SHOULD"
and others left as "MUST", at a minimum.

The image width MUST be 0 or else equal to
the CSS width (if the image is displayed)
or the natural width (if the image is non-zero);
similarly for image height.

Image.width and image height SHOULD be
both simultaneously available. Once
they are available (even if the image
is only sufficiently loaded as to determine
that the image format is supported and the
width and height are known), an image
MAY later become unavailable due to network
errors, for example, or if the cache
holding their information is flushed.

Authors of software and JavaScript libraries
would be able to read and interpret the 
compliance statements and understand 
which constraints  they can depend on,
without having to decipher a (incompletely
specified) algorithm.

But there is actually no way to check
conformance to a 'normative algorithm'
which requires a state ("available")
which isn't actually visible from the 
API. The implications of the algorithm,
the only things you can actually check
if you're writing test cases, are the
invariants. And invariants that might
depend on cached, stored state... well,
maybe they should be SHOULD instead of
MUST invariants, if there are plausible
implementations that can't guarantee 
those invariants in all situations.

Received on Thursday, 3 September 2009 17:57:43 UTC