Hixie's Natural Log

2005-09-17 11:53 UTC Window of Opportunity

Back in August I tried an experiment: two weeks offline with family and friends in Switzerland. It was awesome. Extremely relaxing and full of that personal growth stuff. Thus, I have decided to give it another try. I'm going to take another two weeks off, mostly Internet-free again, this time on the US East Coast.

Back on the WHATWG spec, the section I'm currently working on is the local network broadcast feature, which would allow applications written as Web pages running on browsers on devices in a LAN or PAN to communicate. This would allow things like party lines, multi-player games, and the like.

For Ethernet networks, I'm leaning towards a UDP-based system. Each packet would consist of the broadcasting page's domain, a colon, and the page data (text encoded as UTF-8) to the broadcast address, on a known port. The domain would then be used to ensure that only Web pages from the same domain could read that data. Well, Web pages and any native applications, of course — we want to allow anyone to write native code that interacts with these pages. (For example, a game server could be written in C++ and run somewhere on the local network, with the game client written in HTML and served from a known network address. Since the server knows the address, it knows what address to put on its headers, and which packets to read from the network when it receives some.)

I'm not sure what size packets to allow; research has suggested that if you want UDP packets to make it through the Internet you might want to limit yourself to 512 byte packets since those are the biggest size that will usually make it through intact (since some routers apparently drop bigger packets rather than fragmenting them, or something). But the idea here is local-network broadcast, not distant unicast, so fragmentation over routers seems irrelevant. That would suggest we could allow up to the full 65507 byte packets (216-1 - 8 (UDP packet header size) - 20 (IPv4 packet header size), or 65487 if we want to be forwards-compatible with IPv6 (IPv6 headers are 20 bytes longer). Then the question becomes "how do we handle transmissions above this limit"? I guess we just raise an exception, but it seems odd to allow US-ASCII users to send more text than people using, say, the plane-1 Shavian alphabet.

Sadly I know very little about those levels of the networking stack, so I'm probably spouting nonsense. If so, don't hesitate to moan at me so I can fix it.

Even worse than not knowing much about Ethernet, though, I don't know anything about Bluetooth and similar standards. I tried reading the Bluetooth spec but its 1230 pages overwhelmed me.

It would be really cool to transparently support things like Bluetooth as well, though. What I want is a way to broadcast to any listening device the name of the broadcasting page's domain, and the data that the page is sending. Anyone know how to specify this?

2005-09-16 01:10 UTC Message in a Bottle

Recently Google announced their Blog Search service. This caused me to look up "WHATWG" on both this new system and the Technorati search engine, to see what people were saying.

I found several posts giving suggestions and feedback on the WHATWG specs. But as far as I can tell, none of those messages were sent to the list.

I've made a note of those posts so that I can make sure to incorporate the comments that were made, but please, if you have comments... send them to the list! Or to me! Leaving them on your Web log will not (unless I happen to run into those comments like I did those above) result in the spec improving. Your comments are welcome, whoever you are, and however minor or controversial you might think your comments are.

2005-08-31 10:05 UTC Cor-ai

If someone accused me of writing sentences that made people go cross-eyed, I'd have to plead guilty. While trying to define the first draft of the client-side persistent storage API in HTML5, I just ended up writing the following:

When the setItem() method is called on a Storage object that is associated with a global storage entry for a domain d and was created by a StorageList object associated with a Window object x, then in every DocumentWindow object whose Window object is not x and whose globalStorage attribute's StorageList object's getDomain() method would not raise a security exception according to the rules above if it was invoked with the domain d, a storage event must be fired, as described below.

My only defence is that I'm just trying to be exact!

People are already trying to find better ways to phrase it, so don't be surprised if, by the time you check the spec, the sentence has been replaced by something much saner.

As always, feedback on WHATWG specs is welcome.

2005-08-29 08:59 UTC Small Victories

Back in July Allan and I went to Shadowcon 10. I went to Shadowcon 9 with Eira last year, and the Buffy Sing-Along was the best thing there, and this year I basically went there only for the sing-along, which was just as fun. It helps that I've been listening to the Once More, With Feeling soundtrack so much recently that I know most of the words by heart, even when there are multiple overlapping lines...

I've also over the past few months been watching lots of Top Gear, the UK motoring show (which is hilarious even if, like me, you understand nothing of what they're saying). More recently I bought Gran Turismo 4, the racing simulator. This is all part of an effort to learn more about cars in general since many of my friends seem obsessed by them and it would be nice to at least have some clue what they're talking about. I haven't played GT4 much but so far I've done my National A and B licenses, with about two thirds bronze and one third silver. One day I should probably get a real license too.

On Saturday we went to see The Lord of the Rings performed by the Oslo Philharmonic and supported by various other groups. Tim has the scoop.

On Sunday, Allan, Wilhelm and I played Civilisation the Board Game. It's a strategy game. Much better than Risk, better than Attack; not as good as Twilight Imperium III. I'm not a huge fan of any of those games, because they basically boil down to fighting instead of cooperating. The only strategy game I've really liked is OpenTTD (the free Transport Tycoon clone), and that's not a board game.

I won, leading a completely peaceful strategy, not attacking a single time (well, I attacked once, but that was with the agreement of the target and was merely so we could swap cities so he could consolidate his forces; there was no violence involved). I was a little lucky in that Allan and Wilhelm decided to keep fighting each other instead of doing the same as me, peacefully living without conflict. Almost all my settlements ended up happy, with a few exceptions which would have been happy within a few rounds if the game hadn't been ended (Allan got the UN and declared the game over).

Earlier in the week we also played Fearsome Floors, which is an interesting game where the only randomness is player-neutral. I like that kind of game. It constrasts with games like Super Munchkin, the latest in the long series of Munchkin games (of which we have all but the Fu2 expansion, I think) which are all basically completely random. I remember joining a game of Munchkin a few weeks ago that had been going on for some hours — I managed to get to level 8 or 9 in short order, while the player next to me, who had been playing since the start, was mostly hovering around level 2 or 3. There is some skill involved but frankly it's mostly about what cards you happen to get. The skill usually involves confusing people with obscure rules.

Over the past few days the SVG and CDF working groups have sent feedback to the CSS working group on CSS2.1, and Björn and I have been fielding their requests on behalf of the CSS group. Most of their requests seem to have been misunderstandings, so we've managed to answer most of them already. IRC is a great tool for dealing with this kind of thing! A few of the issues were real issues, though, so we'll be discussing those at our telecons.

2005-08-19 23:39 UTC Heroes

Tonight was Opera's 10th anniversary party, the highlight of which was Håkon's challenge for us all to go swimming in the ocean at midnight!

The swimming heroes were Håkon, of course, along with Jon (our CEO), chaals, Eira, myself, and a dozen or so others who then joined us. Most people went in their underwear, but two people (one of them being myself) went completely in the buff, which is of course much more fun! ☺

There is something quite exhilarating about skinny dipping at midnight. Highly recommended.