Archive forAugust, 2003

Bad Internet citizen: Optimum Online

[Update: A very helpful friend got in touch with some Optimum Online support staff, thereby working around the black hole that is abuse@cv.net. They disconnected the problematic customer, and I haven't gotten any messages from them since. Thanks!]

I’ve previously complained about the volume of mail I’ve been getting from the SoBig.F worm. About a week ago, I decided to do something about it. I noticed that rather than getting only a few messages from each of thousands of different computers, I was getting thousands of messages from a few specific computers. I started to contact their ISPs and request that each ISP take action.

Some appear to have done so; I’m not getting mail from their systems any more. Then there’s Optimum Online. I’ve called them twice and each time been told, “Sorry, we can’t do anything. You have to email abuse@cv.net.” So I’ve done that. Twice. Pointing them to the specific IP address that’s causing problems: 67.82.176.191. And giving them the headers of one of the messages.

The result? Nothing. Not even a “Sorry, we need more information” response. I got another 150 or so messages from that same computer last night. You’d think an ISP would care that one of their customers is bulk-mailing the world, but apparently Optimum Online doesn’t care.

Comments (3)

Debugging tips

John Chang just posted a terrific list of debugging techniques for Mac OS X. I’ll add a few random ones of my own:

  • p (char[4]) foo prints foo as a four-char code.
  • Put a breakpoint on -[NSException raise] to catch the point at which your code raises an exception. It’s much easier to figure out what’s going on at that point than any time afterwards. Do this even when you don’t think an exception’s being raised…sometimes you’ll be surprised.
  • If you’re seeing a pointer randomly get stomped on, try using a watchpoint. watch *<address> will cause gdb to break whenever the memory at <address> is changed.

That’s about all I can think of for now. It’d be great if these made it into a tutorial at MacDevCenter.com or something like that. It’s so much easier to write code for an OS when you know how to debug effectively on it.

Comments (2)

RSS and mailing lists

Chuq has an interesting piece about RSS and mailing lists, inspired by a post on Brent Simmons’ weblog about RSS and email.

I think Chuq’s making things a bit too difficult, or perhaps going a little too far. Or maybe he’s just looking farther into the future than I am. Anyway, the connection between RSS and mailing lists that I’d love — heck, I’d pay for this — could be done today. I just want to be able to read mailing lists, specifically Apple’s, via RSS. I subscribe to a number of lists that I don’t post to, or to which I’ll post so infrequently that I don’t mind going through a few extra steps when I do. But trudging through the 100+ email messages posted to carbon-development every day is a lot harder via Eudora than it would be via NetNewsWire. Part of that’s due to workflow issues — Eudora opens a new window for every message (which I normally like), but that works poorly when you’re just skimming through messages. NetNewsWire is faster than Eudora, it’s easier to mark many “messages” read at once in NNW, and messages in NNW expire so I don’t have to manually delete them the way I’d have to do that via email.

There are reasons why mail<->news gateways work very well for some mailing lists. Most of those reasons would apply to mail<->RSS feeds as well, even if posting wasn’t possible from the RSS side. I’d love to see someone — ideally Apple, though I probably can’t influence that — give it a shot.

Comments (6)

Requiring correctness in software

As a follow-up to my previous post, I’m curious to hear of any example of a protocol or specification in software that satisfies these requirements:

  • is widely used on standard desktop systems
  • has a well-documented specification
  • provably rejects all uses that fail to adhere to any portion of the specification
  • is not used for security (e.g. SSL or Kerberos)

I’m not so confident as to say that there isn’t any such protocol, but I can’t think of one. I should note that I’m excluding security protocols because for those, accepting any sort of invalid data could be considered a security problem, so anything that handles those can’t be liberal in what it accepts. Security protocols can’t have underspecified areas for the same reason.

To give a few random examples:

  • RSS was discussed in the previous post
  • HTML is definitely a non-starter
  • C and C++ compilers definitely accept code that is in gray areas of the specification
  • HTTP servers certainly differ in what they accept, even across the same version of the HTTP specification

Of course, the goal of a C compiler isn’t to be liberal in what it accepts, but you’ll never get all C compiler authors to change their code to accept or reject the same code everywhere and to continue to do so from now till the end of time.

This little exercise isn’t trying to show that RSS readers should accept anything. Instead, I’m trying to show that having all RSS readers reject all invalid feeds is likely to prove impossible to maintain in the real world, if only because different readers will disagree about what an “invalid” feed is.

Comments (2)

Thou shalt not besmirch Jon Postel, for he was right

Dave Winer posted an article today on “Postel’s Law”. That’s Jon Postel’s famous axiom of software design: “Be liberal in what you accept, and conservative in what you send.” Apparently there’s been a debate in the XML community in recent days (and particularly in the RSS community) over whether the Law is valid for XML. Some, like Winer, argue that RSS readers should only reject invalid feeds. Winer goes so far as to say that Brent Simmons’ NetNewsWire, which may well be the most widely used RSS reader, accepts invalid feeds partially because doing so is in Simmons’ best interests, and not those of the XML community in general.

As Simmons says (albeit in nicer words than me), this is downright silly. Any RSS reader — whether NetNewsWire, Radio, or any other — has to tolerate some degree of flakiness in feeds if it’s going to be used by a wide audience. The reason for that is simple — software has bugs. No matter how perfectly specified RSS is, someone’s going to generate it incorrectly and someone’s going to write a reader that accepts the incorrect feed. Someone else is going to write a library that generates RSS that gets some edge case wrong, and yet another person will write a library that reads RSS that allows that incorrect edge case. That’s just the way software works. At least, that’s how software that users like works, because if an RSS reader starts to reject feeds that other RSS readers accept, some number of its users will switch to readers that support those feeds.

Of course, Postel’s Law works best in a fractured marketplace in which nobody has a monopoly. Web authors for years have been very willing to generate HTML that only IE on Windows handles because IE has enough of a market share that those sites don’t care about other browsers. That in turn forces the hand of minority browser authors — like it or not, they have to mimic IE’s quirks to be able to handle many sites. As long as there are a multitude of RSS readers, though, RSS authors will be under pressure to maintain compatibility with multiple readers, and in doing so they’ll have to at least come reasonably close to adhering to the standard. That’s about as good as anyone can ask for, until some theoretical day years in the future when all bugs are eliminated from software (or at least from RSS generators). Demanding perfection when perfection isn’t possible is simply setting yourself up for disappointment.

Comments (1)

Matching faces to names

In the past few months I’ve had the chance to meet a number of people whom I’d previously only known through their weblogs. First was Erik Barzeski, who came out to California for two weeks earlier in the summer. Last week, Buzz Andersen started work at Apple and Judi and Eric Sohn took a trip to California that landed them in Cupertino on Friday.

It’s been great to get to meet all of them. It’s always somewhat strange to meet someone whom I’ve known only via a weblog (or, in Judi’s case, via Usenet postings and mailing lists for seven years in addition to her weblog), but so far everyone’s been terrific. I’d say that we should do get-togethers like these more often, but Judi and Eric are three thousand miles away in one direction and Erik’s three thousand miles away in a slightly different direction. That makes things a bit harder. At least I know that if I ever find myself in Connecticut, Orlando, or the second floor of One Infinite Loop, there’s a friendly face nearby that I’ll now recognize.

Comments (2)

Dave Barry takes on California

And he’s right about everything. Except perhaps the gravity bit. I think that’s on next year’s ballot.

Comments off

Maintaining compatibility

Dave Hyatt talks about the challenge of getting Safari to work with web sites that rely on bugs in Mozilla, sites that rely on bugs in WinIE, and who knows how many other quirks of sites.

This isn’t a new problem. It’s one that exists in any environment that has a standard API with multiple implementations. Java’s a great example — Apple’s Java team has to strive to be bug-for-bug compatible with Sun’s VM on Windows, IBM’s VM on Windows, Sun’s VM on Linux, etc. And each of those may have to be bug-for-bug compatible with Apple’s JVM at times. The POSIX APIs might be an even better example. In a market with no dominant player and an at-times underspecified specification, the best anyone can do is to try to be compatible with other implementations. If some application that depends on an undocumented aspect of some POSIX API is ported from Linux to FreeBSD, the FreeBSD folks may have to mimic the Linux behavior to get the application to work.

All of these cases — HTML/CSS, Java, POSIX, and others — have the same solutions on both sides. If you’re developing something that uses a specification, test on as many different implementations of the specification as possible if you care at all about compatibility. And if you’re implementing a specification, the best you can do is to mimic the behavior of existing implementations, even when they differ from the specification, so existing code will work with your code. Finally, if you’re ever in a position where you can influence the writing of a specification, do your best to close loopholes before applications start to depend on them. As Hyatt knows, it’s much easier to change a specification as it’s being written than to explain to your customers that their application won’t work any more because you changed your code to follow the letter of some specification they don’t care about. Customers just want their stuff to work.

Comments off

Maybe it’s only the law if I issued the decision

The news is filled with reports on Alabama Supreme Court chief justice Roy Moore’s refusal to remove a monument of the Ten Commandments from the state judicial building. While I disagree with Moore’s view that the monument’s presence is acceptable in a government building, that’s not the problem here. He has a right to his opinion, as I have a right to mine.

All the way up to the U.S. Supreme Court, the courts have decided that the monument must be removed. Moore’s refusal to remove the monument says that he finds ignoring a court’s decision acceptable. While he may believe that a different kind of law applies, that view is very improper from a judge. If he disobeys the order, he should be removed from his position. Otherwise, what’s he to say when a losing party in a case before him refuses to follow his decision? How can he be right in this case and keep those whose cases are presented before him from following his example?

If Moore believes that Christian beliefs take precedence over court decisions, I sincerely hope that I never find myself in his courtroom. A country that shares those views is not one in which I’m welcome.

Comments off

Spam, spam, spam, spam, mail, spam, and spam

I’ve been absolutely flooded for the past few days by email messages generated by the various Windows worms that are currently making their way around the Internet. In six hours today, I received 482 messages at my Stanford account. 449 of those were spam, and most of those were sent by the worms. That’s one spam every 48 seconds.

Unfortunately, I’ve never gotten around to setting up automatic spam deletion for my mail. I’ll probably start to do that if I switch to Mail when Panther comes out (which I’m leaning towards doing). SpamAssassin runs on most of my mail and tags almost everything correctly, but I still have to delete tagged messages by hand. It’s really starting to annoy me. Today was the first workday in longer than I can remember when I didn’t keep a window open with my incoming Stanford mail, just because new messages came in so often and were almost invariably spam. I’m used to getting about 40% spam, but this is ridiculous.

On the bright side, I haven’t gotten a single spam message at my Apple account since starting work at Apple in January. Whoever’s in charge of Apple’s mail filters is doing a terrific job as far as I’m concerned.

Comments (2)

« Previous entries