08:49 | <jgraham> | Conclusion from the last two days of HTML related email: there is nothing interesting happening. |
10:35 | gsnedders | finally gets around to looking at what heycam changed in WebIDL because of him :P |
10:36 | <gsnedders> | Though trying to load the spec on train wifi isn't working brilliantly |
10:37 | <gsnedders> | (I guess dev.w3.org being on a sewing machine doesn't help) |
10:42 | smaug____ | imagines a server getting electricity from an old singer http://upload.wikimedia.org/wikipedia/commons/0/00/Singer_sewing_machine.jpg |
10:43 | <tomasf> | maybe they let the sewing machine "render" the page on actual fabric and automatically take a photo of it and deliver that as the web page |
10:46 | <jgraham> | Lack of a CSS media type for fabric suggests that isn't the case |
11:24 | <smaug____> | Does anyone have tests for canvas objects in "data" documents |
11:25 | <smaug____> | something like |
11:25 | <smaug____> | document.implementation.createHTMLDocument("").createElement("canvas").getContext("2d"); |
11:25 | <smaug____> | and then using that context somehow |
11:36 | <woef> | If they say html5 should be "backwards compatible" ... how far back in time are they talking about? |
11:37 | <jgraham> | If who says what? |
11:38 | <jgraham> | For developing HTML5 the tenets were more like "support existing content" and "no mode switching" |
11:38 | <woef> | I remember a discussion about why a <dl> only has "assumed" list items (no unique container) |
11:39 | <woef> | It was said that adding one was not backwardds compatible with what existed today. |
11:39 | <jgraham> | So you can't make changes that break (large enoguh numbers of) existing sites (that browser makers would be reluctant to make the changes). Since some sites are as old as the web, that gives a timescale |
11:40 | <woef> | Wouldn't it be interesting to make a "intermediate" tracks. Support two modes, until the old way of working gets fazed out? |
11:40 | <jgraham> | No |
11:40 | <jgraham> | It's a lot of effort |
11:40 | <jgraham> | and there is no good idea of what the timescale for the old way fading out is |
11:40 | <woef> | Yeah ... |
11:40 | <gsnedders> | woef: How many things have ever been fazed out? |
11:41 | <woef> | image maps? |
11:41 | <woef> | flash slowly is going away. |
11:41 | <jgraham> | (pretty sure phased is spelt wityh a ph and an s) |
11:41 | <woef> | fazed is the "i'm a cool geek" way of spelling ;) |
11:42 | <jgraham> | Ah. I never get those memos for some reaswon |
11:42 | <woef> | I'm afraid we don't really do the whole ph-thing in Belgium :) |
11:42 | <woef> | I get that wrong a lot. |
11:42 | <gsnedders> | woef: image maps are still supported by all browsers. |
11:42 | <jgraham> | woef: Yeah, but gsnedders is scottish. That's almost english, so he doesn't have an excuse |
11:43 | <woef> | Hah! |
11:43 | <gsnedders> | woef: An extreme example is the plaintext element, noted as being deprecated in the first ever HTML spec, still special-cased in the parser in HTML 5. |
11:44 | <woef> | I once tried to read some Irvine Welsh books, my English lessons didn't really help. |
11:44 | <gsnedders> | jgraham: I just copied what woef said! |
11:44 | <gsnedders> | jgraham: You know I can't spell. :P |
11:44 | <gsnedders> | Copying others is normally better than guessing myself :P |
11:44 | Philip` | is unphased by homonyms |
11:44 | <gsnedders> | (It also provides a convenient way to mitigate blame for my inability to spell.) |
11:45 | <jgraham> | Is someone who is phased by homonyms a homophobe? |
11:46 | <gsnedders> | woef: Speaking of Welsh, the only book I found hard to read was one with phonetic transcription of dialect from where I grew up. :) |
11:46 | <gsnedders> | (I can cope with it fine when spoken.) |
11:51 | <woef> | I think I tried Trainspotting once. |
11:51 | <woef> | But if I get it right, we'll never have a <dl> list with proper list items? |
11:51 | <woef> | Or nested <a>-tags? |
11:53 | <gsnedders> | woef: nested a-elements will break existing sites, so there's no way you'll get browsers to change behaviour. Equally, what does a link within a link *do*? |
11:53 | <gsnedders> | woef: What's the use-case for changing dl though? What's unclear about dt/dd? |
11:53 | <woef> | link to it's href? |
11:53 | <gsnedders> | woef: which href? |
11:53 | <jgraham> | gsnedders: (pretty obvious what it does, really) |
11:53 | <woef> | The one with the deepest nesting. |
11:53 | <jgraham> | Still won't happen ofc |
11:54 | <Philip`> | (Presumably it does the same as it does if you nest <a> in XHTML) |
11:54 | <woef> | Like "i block-level-link my blog intro but the contained link to the comment section goes there immediately" |
11:54 | <gsnedders> | jgraham: (that would require half a second of thought which I'm not doing while on vacation, even if I am responding to spec changes I requested) |
11:54 | <jgraham> | Or in HTML with script |
11:54 | <gsnedders> | woef: Still, changing the parser would break existing sites. |
11:54 | <woef> | gsnedders: how so? |
11:55 | <woef> | I hope nobody is nesting links now, if you see the dom-crap that ensues :) |
11:56 | <jgraham> | hahaha |
11:56 | <jgraham> | :) |
11:56 | <gsnedders> | woef: Plenty of people are. The vast majority of the web doesn't follow the spec. |
11:56 | <gsnedders> | Like, approximately 100% of the webhas invalid HTML. |
11:56 | <woef> | But these sites break by default :p |
11:57 | <jgraham> | I wonder what the half life of this conversation is |
11:57 | <gsnedders> | Breaking the web would cause people to not use a browser, so good luck getting any browser to change :P |
11:57 | <jgraham> | We've had the same discussion with different people since 2004 |
11:57 | <jgraham> | Hopefully it will eventually stop |
11:57 | <woef> | As for the <dl>, I just don't like that there is no <li> equivalent. |
11:58 | <jgraham> | That one at least might be changable |
11:58 | <jgraham> | There was a long thread on WHATWG a while back |
11:58 | <jgraham> | I don't remembert the conclusions |
11:59 | <woef> | You just say that to increase the suspense. |
12:00 | <jgraham> | Yep, it's practically Resident Evil in here |
12:01 | <gsnedders> | At least it's not the merky darkness of Doom 3. |
12:08 | <Philip`> | Does it count as suspense when you're 100% certain a monster is going to spring into existence behind you when you enter a room? |
12:09 | <gsnedders> | Okay, true, once you get beyond the first few levels it is like that. |
12:09 | <woef> | It killed AvsP2 |
12:10 | <woef> | The first one was creepy as hell though. |
12:10 | <woef> | Damn motion detector. |
13:20 | <hsivonen> | looks like ISSUEs are as important as ever http://www.w3.org/html/wg/tracker/issues/170 |
13:30 | <hsivonen> | looking at the number of duplicates on https://bugzilla.mozilla.org/show_bug.cgi?id=162653 I wonder if mattur will be able to find an XML design thread from 1997 or 1998 containing an assertion that HTML authors won't be confused by XML doing <foo/> |
13:41 | <gsnedders> | Is (char)(int)1 a plausible way to check endianness of integers |
13:41 | <gsnedders> | ? |
13:44 | <jgraham> | gsnedders: Won't the compiler get upset by that? |
13:44 | <jgraham> | See also http://stackoverflow.com/questions/1001307/detecting-endianness-programmatically-in-a-c-program |
13:44 | <gsnedders> | (Yay for writing code that depends on endianness) |
13:48 | <Philip`> | int i = 1; char c[sizeof(int)]; memcpy(c, &i, sizeof(int)); bool is_littleendian = c[0]; |
13:49 | <Philip`> | I'm not sure the union trick is actually legal C (though I'm not sure it's illegal either) |
13:49 | <Philip`> | but memcpy is always safe |
13:50 | <gsnedders> | Philip`: It's illegal, I'm pretty certain. At least people have managed to cite quite obvious bits of the spec about it. |
13:50 | <gsnedders> | (Well, it's not illgal, it's just undefined.) |
13:50 | <Philip`> | (char)(int)1 will always just give you 1, and *(char*)&i will give you bogus results depending on what compiler version and optimisation settings you use |
13:52 | <Philip`> | (The union thing works in all compilers in practice, though) |
13:52 | <gsnedders> | Philip`: Casting to char always take the low-bits? |
13:53 | <gsnedders> | Philip`: bool is C99? |
13:54 | jgraham | would imageine without knowing that casting to char does an actual type conversion rather than just reading some subset of the bits |
13:54 | <gsnedders> | jgraham: What else can it do? |
13:55 | <gsnedders> | jgraham: a char is just a numberic type |
13:55 | <gsnedders> | *numeric |
13:55 | <jgraham> | Well yes, I know that |
13:55 | <jgraham> | It could overflow differently, for example. And be endianness independent. |
13:56 | <Philip`> | If char is unsigned, then (char)i adds or subtracts 256 to/from i until it's in the range [0, 255] and then returns that |
13:56 | <Philip`> | If char is signed, and i is in [0, 255] then it returns that, else it's implementation-defined behaviour |
13:56 | <gsnedders> | Philip`: I could remember there was some magic about char, but I couldn't remember what. |
13:57 | <Philip`> | The magic thing is that you don't know whether it's signed or unsigned |
13:57 | <gsnedders> | And about casting as well? Which I guess is the adding/subtracting… |
13:58 | <Philip`> | (bool isn't in C99; use a BOOL or int or whatever, or use C++) |
13:59 | <Philip`> | In C99, casting is the same process for any integer types (except _Bool) |
13:59 | <Philip`> | ...except replace "256" by appropriate values etc |
14:00 | <tomasf> | according to http://en.wikipedia.org/wiki/Stdbool.h , bool expands to _Bool in C99 |
14:00 | <gsnedders> | Philip`: (Yeah, I know what to do) |
14:01 | <Philip`> | Basically it always does the mathematically obvious thing, except it's unwilling to assume two's-complement representation so any cases of signed overflow are implementation-defined behaviour |
14:02 | <Philip`> | and it's all endian-independent until you try to read the char representation of a larger value |
14:03 | <Philip`> | But in any case, it's usually more useful to know endianness at compile-time and not run-time |
14:04 | <gsnedders> | so reading an int into a short is endian dependent, assuming they're different sizes? |
14:04 | <Philip`> | since then you can have byte-swap macros that get replaced with noops |
14:04 | <Philip`> | so you should have a configure script or something to detect it and set a macro |
14:04 | <Philip`> | What do you mean by "reading into"? |
14:05 | <gsnedders> | *read the short representation of an int |
14:08 | <Philip`> | What do you mean by that? |
14:08 | <gsnedders> | Philip`: (But yes, it makes sense to do this in a saner way once I have all the setup to do that, which is pretty much going to be when I stop playing around with this code as a standalone application |
14:08 | <Philip`> | (Values have byte repesentations, not short representations) |
14:09 | gsnedders | wants to give up on IRC as this internet connection isn't working well |
14:09 | gsnedders | is on the WCML being all fancy and stuff in first-class, because Bank Holiday Monday => cheap upgrades. |
14:16 | <Philip`> | In practice, the solution that works 99.99% of the time is "#define IS_LITTLE_ENDIAN 1" |
14:18 | <gsnedders> | That's effectively what this code already is. :) |
14:32 | <karlcow> | http://glandium.org/blog/?p=2180 |
14:33 | <woef> | About the article tag ... why is it the author's responsability to decide what content is syndicable? |
14:37 | <woef> | Or is the "syndication" part just a way of helping you decide whether to use an article tag? |
16:08 | <zcorpan> | hey, a spambug reported from http://html5.clearboth.org/spec ! |
16:11 | <timeless> | anyone here have some time to consider some Web IDL? |
16:12 | <timeless> | X implements Y; |
16:12 | <timeless> | interface Y: Z; |
16:12 | <timeless> | Z implements P; |
16:12 | <timeless> | the contents of the interfaces are omited for brevity and the names have been changed to protect the guilty |
16:13 | <zcorpan> | the question is? |
16:14 | <timeless> | err lemme make sure i got that last line right |
16:14 | <timeless> | yeah, i did |
16:14 | <timeless> | well, first of all, is one really supposed to be using `implements` on interfaces which are inherited by other interfaces? |
16:14 | timeless | thought that `implements` was generally for objects and not interfaces |
16:16 | <timeless> | note to self: send feedback to list requesting a line "Generally you should use `dictionary Foo` instead of `[NoInterfaceObject] interface Foo`." |
16:17 | <zcorpan> | yeah implements might be a bad word |
16:18 | <zcorpan> | though i don't see what's wrong with using it on interfaces that are inherited |
16:21 | <timeless> | well |
16:21 | <timeless> | the problem is this: |
16:21 | <timeless> | ConcreteObject A; |
16:21 | <timeless> | A implements IFoo; |
16:21 | <timeless> | A implements IBar; |
16:21 | <timeless> | A implements IBaz; |
16:21 | <timeless> | ConcreteObject B; |
16:21 | <timeless> | B implements IFoo; |
16:22 | <timeless> | if someone decides that they have a `B` and want to make B's IFoo interface do more |
16:22 | <timeless> | they might say: |
16:22 | <timeless> | IFoo implements IMyFooMore; |
16:22 | <timeless> | expecting it to make B more powerful |
16:22 | <timeless> | but at the same time, it causes random effects on A |
16:22 | <timeless> | note that we had this experience in mozilla land |
16:22 | <timeless> | the rule which we try to enforce is this: |
16:23 | <timeless> | Only the owner of IFoo is allowed to extend IFoo until IFoo is frozen, at which point, IFoo /may/ but probably /should not/ be extended by others |
16:24 | <timeless> | roughly that translates into `You, owner of ConcreteObject X are free to use 'X implements IWhatever;' |
16:24 | <timeless> | but you are not free to use 'IStandardsBodyThing implements IWhatever;'.` |
16:57 | <dglazkov> | good morning, Whatwg! |
18:07 | Philip` | sees HTML5 supports ∡, which he will make good use of next time he wants to do some dangle measuring |
18:07 | <timeless> | heh |
18:07 | <timeless> | i need to send some feedback to some app vendors |
18:07 | <timeless> | they aren't unescaping entities :( |
18:07 | <timeless> | (it makes names of people and places really hard to read) |
18:11 | <ojan> | TabAtkins: ping |
18:25 | <zewt> | death to entities |
19:58 | <AryehGregor> | jgraham, this seems to not produce any output anymore. http://dvcs.w3.org/hg/html/raw-file/tip/tests/submission/AryehGregor/reflection/reflection-onepage.html |
20:04 | AryehGregor | can't see why |
20:05 | <AryehGregor> | It's not just the number of tests, I don't think. |
20:05 | timeless | sighs |
20:05 | <timeless> | maybe i was reading the wrong spec? |
21:39 | <jgraham> | AryehGregor: So it doesn't. I will look tomorrow |
21:39 | <AryehGregor> | jgraham, thanks. |
21:47 | <dglazkov> | Accio Hixie! |
21:47 | <dglazkov> | Hixie: are you working on the dialog plumbing? |
21:52 | <ojan> | TabAtkins: in your flex rewriting this week...are you touching flex-flow? |
21:52 | <ojan> | TabAtkins: what's there now seems...complicated |
21:57 | <dglazkov> | hey fsamuel! |
21:58 | <dglazkov> | fsamuel: this is Hixie's natural habitat. You can see a glimpse of him eating a banana here. Be very, very still. |
21:59 | <fsamuel> | dglazkov, Hixie: Hi dglazkov, hi hixie! :) |
22:00 | <dglazkov> | Hixie: meet fsamuel. He's been very interested in building user-stylable select menu drop-downs. I wondered if there's an overlap with your thinking on <dialog> |
22:23 | <smaug____> | AryehGregor: ping |
22:23 | <AryehGregor> | smaug____, pong. |
22:23 | <smaug____> | AryehGregor: about http://html5.org/specs/dom-range.html#range-behavior-under-document-mutation and splitText |
22:24 | <smaug____> | what if textnode's parent is null |
22:24 | <AryehGregor> | Don't I handle that explicitly? |
22:24 | <AryehGregor> | "If old node's parent is not null, . . ." |
22:24 | <smaug____> | AryehGregor: you handle not-null case |
22:24 | <smaug____> | but where is the is null |
22:25 | <AryehGregor> | That's a corner case, so nothing special happens. Regular range mutation rules apply. |
22:25 | <AryehGregor> | IIRC I used to handle it, but decided it was pointless to worry about it. |
22:25 | <smaug____> | hmm |
22:25 | <AryehGregor> | Often you can't do better than the default behavior anyway. |
22:25 | <AryehGregor> | Since the range can't span the two text nodes. |
22:25 | <smaug____> | AryehGregor: so what if you split text between the boundary points |
22:26 | <AryehGregor> | If the parent is null? Exactly what Gecko does now: any boundary point after the offset you're splitting at is clamped to the end of the node. |
22:26 | <AryehGregor> | There's no special case then. |
22:27 | <smaug____> | ah |
22:27 | <smaug____> | ok |
22:27 | <smaug____> | a bit hard to read but ok |
22:27 | <smaug____> | I mean the draft |
22:28 | <AryehGregor> | What wording would you suggest? |
22:29 | <smaug____> | well, I was assuming that since there is the "If old node's parent is not null" case, there would be also the "is null" case |
22:30 | <AryehGregor> | Would you assume that when reading code? If it doesn't give the case, it's not there. |
22:30 | <AryehGregor> | This is really just pseudocode. |
22:30 | <smaug____> | well, there is the other case defined |
22:30 | <smaug____> | "User agents must run the following steps whenever they execute splitText()" |
22:31 | <AryehGregor> | Right, just sometimes they do nothing. Of course, the horrible way this is written is a hack to work around the fact that we haven't merged it into DOM Core yet. |
22:31 | <smaug____> | well, they need to update the boundary points when parent is null |
22:31 | <smaug____> | that is not "do nothing" |
22:32 | <AryehGregor> | It's "do nothing extra". |
22:32 | <smaug____> | the draft doesn't say that do something, but when splitText() is called, do something extra |
22:33 | <AryehGregor> | It says UAs have to run the steps as though they were written at the end of splitText(). |
22:33 | <AryehGregor> | Earlier than that, splitText() replaced data and probably inserted a node. |
22:33 | <AryehGregor> | That already triggered different mutation rules. |
22:33 | <AryehGregor> | I have a note there that points this out explicitly: "Thus they must be executed after following the range mutation rules for any changes to data or insertions that the method caused." |
22:34 | <AryehGregor> | Also, one of the steps is "Let original offset equal what the boundary point's offset was before this splitText invocation replaced the data of node." That doesn't make any sense if you didn't already have range mutation rules running beforehand. |
22:34 | <AryehGregor> | I'd ask for suggestions to make this clearer, but it will be moot once it's merged into DOM Core. |
22:35 | <smaug____> | a lot clearer would be to add just the case for null parent |
22:35 | <smaug____> | or at least a link |
22:36 | <AryehGregor> | A link to what? |
22:36 | <smaug____> | to the part of the spec which says what to do when parent is null |
22:36 | <AryehGregor> | You do nothing extra when the parent is null. |
22:37 | <smaug____> | this is about readability of the spec |
22:37 | <smaug____> | not correctness |
22:37 | <AryehGregor> | Readability is a mess because it's trying to hack extra steps onto DOM Core when DOM Core doesn't provide hooks for it. |
22:37 | <AryehGregor> | This will be solved when DOM Range is merged into DOM Core, so this will just be an extra step or two in the splitText() algorithm itself. |