Well that's good. Fantastic. That gives us 20 minutes to save the world and I've got a post office. And it's shut!

Monday, June 30

Rant

You'll Never Find It In Galaxy

Jets blasting, Bat Durston came screeching down through the atmosphere of Bbllzznaj, a tiny planet seven billion light years from Sol. He cut out his super-hyper-drive for the landing...and at that point, a tall, lean spaceman stepped out of the tail assembly, proton gun-blaster in a space-tanned hand.

"Get back from those controls, Bat Durston," the tall stranger lipped thinly. "You don't know it, but this is your last space trip."



Hoofs drumming, Bat Durston came galloping down through the narrow pass at Eagle Gulch, a tiny gold colony 400 miles north of Tombstone. He spurred hard for a low overhang of rim-rock...and at that point a tall, lean wrangler stepped out from behind a high boulder, six-shooter in a sun-tanned hand.

"Rear back and dismount, Bat Durston," the tall stranger lipped thinly. "You don't know it, but this is your last saddle-jaunt through these here parts."

Sound familiar? They should. You've been watching Firefly.*

So have I, mind you. It's not a bad show. It's also not Science Fiction. It's a Western in space.

The thing that nags at me from watching the first few episodes of Firefly is not so much what's there as what's missing. They have faster-than-light travel and artificial gravity — and revolvers and 1950s spacesuits. When someone gets shot in the stomach, the wound doesn't heal in moments as you might expect; instead it's a medical emergency. Vital medical supplies don't have RFID tags on them. People don't even have mobile phones, much less embedded communicators.

The Serenity's radar seems to have an effective range of about 300 yards. What's up with that? If you're travelling at interstellar velocities and there's something within 300 yards of you, you're already dead.

There's a gas stove on the spaceship, for crying out loud. Did Joss Whedon put this in as intentional self-mockery? Have these people lost the ancient technology of microwaves? (If so, it would explain why their radar is shot.)

Also, the Serenity itself looks like the mutant offspring of an Aibo and a camel.

In Firefly's favour, despite having spaceships, guns, and a girl in a box, it's not a ripoff of Outlaw Star. Which is something of a pity, because Aisha Clanclan would liven things up no end.

* These two pieces were run side by side as an ad in the old Galaxy magazine. It then continued:

Sound alike? They should--one is merely a western transplanted to some alien and impossible planet. If this is your idea of science fiction, you're welcome to it! YOU'LL NEVER FIND IT IN GALAXY!

What you will find in GALAXY is the finest science fiction...authentic, plausible, thoughtful...written by authors who do not automatically switch over from crime waves to Earth invasions; by people who know and love science fiction...for people who also know and love it.

And that is indeed what I found. It's said that the Golden Age of Science Fiction is 13, and that's exactly how old I was when I read my Dad's collection of old Galaxies and Astoundings. Everyone should have this opportunity, to be 13 and to read some of the best SF ever written (and some real crap, too; not even Astounding was immune to Sturgeon's Law**).

** 90% of everything is crap.

Posted by: Pixy Misa at 07:30 AM | Comments (4) | Add Comment | Trackbacks (Suck)
Post contains 553 words, total size 4 kb.

Saturday, June 28

Rant

Perl Bad

I haven't used Perl much since 1998 or maybe 1999, when I discovered Python. Or rediscovered it, I should say; I knew of Python from some prior life but had dismissed it as irrelevant because it uses indentation to indicate program structure.

What?

Well, in most languages, you'd write a loop by enclosing it in markers like this:

for i = 1 to 10:
    print i.
end.
Or this:
for (i=1;i<10;i++) {
    printf("%d\n",i);
}
In the first example (written in Progress), the end statement marks the end of the loop; in the second example (in C), the loop is enclosed in curly brackets, { and }. Because the beginning and end of the loop are clearly marked, you could write these two examples as:

for i = 1 to 10: print i. end.

and

for (i=1;i<10;i++) { printf("%d\n",i); }

respectively, and the compiler would be perfectly happy. You write in whatever style you like, as long as those curly brackets or that end statement are in the right place.

In Python, though, you'd write it like this:

for i in range(0,10):
    print i
There's no end, you see. The fact that the statement print i is indented relative to the previous code tells Python that it's part of the loop. If I follow it with the line:

    print i*i
with exactly the same indentation, it will be part of the loop too. If the line isn't indented (or more precisely, is indented to the same level as the enclosing block), then it indicates the end of the loop.

Which looks really pretty, but is a bad idea, because if anything happens to your indenting, your program won't work any more. On the other hand, it's a good idea, because it's a very common problem that a programmer will change a piece of code without fixing the indenting, so that the program looks like it does one thing but really does something else.

You can't do that with Python.

But if something does happen to your indentation, your code is toast. The Pythonistas speak of a whitespace-eating nanovirus, but HTML will do the job just fine:

for i in range(0,10): print i print i*i

That's the exact same code, only this time I left it as normal HTML text. Python won't like that at all.

So from a language-design standpoint, it's kind of a problem. From a practical standpoint, though, it turns out to be a pretty good tradeoff. I've only once been bitten by the whitespace-eating nanovirus, and while it was painful I've seen plenty of code lost due to editor accidents or files getting overwritten or good old drive failures, so one lost program isn't really that bad. The fact that the layout of the program always reflects its function really is a blessing - though it still doesn't stop people from writing incomprehensible Python code.

There are a few main points that I like about Python. First, the code is clean. With Perl, you get lines of code like:

my($tag) = @_;
return ("start_$1","end_$1") 
  if $tag=~/^(?:\*|start_|end_)(.+)/;
That's not even a particularly bad example. That's pretty normal Perl code. And I find it just as nasty as you do. Python doesn't fill your screen with $@_!?^*+/ unless your modem has dropped out.

Second, it comes with a nice, flexible and fairly rich standard library. It doesn't have a vast collection of modules like Perl's CPAN, which sometimes seems to have modules for every conceivable requirement, but it does have a decent library, and it's standard. If you have Python installed, you have the standard library. (It's possible to screw this up, but it takes effort.)

Third, Python is dead easy to install on any Unix platform. Download and unpack it, then it's the familiar configure, make, make install dance. Blippy blip blip, and you're done.

Perl's install is somewhat weird. It has a Configure script, but if you don't know about the -d option, it will ask you all sorts of questions that you will probably have no idea how to answer. So you keep hitting the enter key, and after a while you start getting all these strange messages (Python's configure gives strange messages too, but it doesn't bug you constantly). Then it asks if you want to make dependencies, and you say what the hell, why not? Then you make, and then you make test, which takes forever, and then you make install -

And then your friend Susie contacts you in a panic because her blog is toast.

Oops.

But all you've done is updated Perl. Everything MovableType should need is built into Perl by default. But now it's complaining that DB_File.pm is missing in action. DB_File.pm is the code that handles MT's databases; without it you can't update anything, and though people can still read your blog, they can't leave comments.

Not good. So you take a look, and sure enough, you've overwritten every trace of the old version of Perl. Rats. Well, DB_File should have been included, but no problem, you'll just specify it manually: ./Configure -D DB_File -de to make sure this time. Then make, make install...

Which you do, only nothing changes at all. So you Configure again, only this time you actually read all of the text scroll ing past. And you notice this little bit of unpleasantness:

Checking Berkeley DB version ...
You have Berkeley DB Version 2 or greater.
db.h is from Berkeley DB Version 3.3.11
libdb is from Berkeley DB Version 2.4.14
db.h and libdb are incompatible.
I can't use Berkeley DB with your <db.h>.
I'll disable Berkeley DB.
Removing unusable -ldb from library list
libs = -lnsl -lndbm -lgdbm -ldl -lm -lc -lcrypt -lutil

So much for DB_File. Gone bye-bye.

Now you check your libraries. You've got three different versions of Berkeley DB installed (all of them out of date, of course, but not to worry, even fairly old versions work well enough), and some weird links between them, but the default library is version 3.3. So it should work.

Check your library path. It's not looking anywhere weird.

Do a find, to see if there's a copy of libdb.so lurking somewhere strange. Nope.

Eh. Well, the Configure script actually creates a little test program to see what version of Berkeley DB you have. So you copy that little test program and compile it manually, and it works. Perfectly happy. What? How?

Time to Google. Which turns out to be no help at all. MovableType's support forum isn't much good either; mostly it suggests using MySQL. But there's a mention of recent Linux C libraries including Berkeley DB themselves, and the problems this causes if you want a version of Berkeley DB other than that in the C library.

A clue.

Well, if your program found the right version of Berkeley DB, but Perl doesn't, that must mean that Perl is picking up the wrong version from the C library. So you look at the libraries that Perl is using, and sure enough, the C library is listed before Berkeley DB. Change that and keep your fingers crossed while the whole thing rebuilds...

Success! We're back on the air! After two hours of pointless wrangling with Perl, it's decided to do what it's supposed to. MT is happy, I'm happy, Susie probably won't be happy because I have a nasty suspicion that it ate her post.

The whole thing started because I was trying to set up Image::Magick so that MovableType could generate image thumbnails. Image::Magick requires Image Magick (no great surprise), which of course is not installed. And Image Magick doesn't want to compile because it doesn't like my version of Perl. No problem, that version of Perl is out of date anyway; I'll just fetch the latest release and install that and aaarrgh!

What possessed Six Apart to write MT in Perl in the first place I'll never know. There are people in the world who program in Perl by choice, just as there are people who eat brussels sprouts or live in North Dakota or listen to System of a Down.

If they'd written it in Python this whole hideous mess could have been avoided. Of course, then I'd have had to find something else to rant about.

Posted by: Pixy Misa at 01:17 PM | Comments (4) | Add Comment | Trackbacks (Suck)
Post contains 1372 words, total size 9 kb.

Tuesday, June 17

Rant

You Feel A Sense Of Loss

George Goble's web site is gone. Gone!

Curse you, people in charge!

But blessings be upon the Wayback Machine, for they have the true web site. Or most of it, anyway.

Don't do this at home. Unless you have someone filming you.

Posted by: Pixy Misa at 04:54 AM | No Comments | Add Comment | Trackbacks (Suck)
Post contains 54 words, total size 1 kb.

Monday, June 09

Rant

Postman Pat Vs. The Internet

Over at Gweilo Diaries, Conrad points us to an article on the evils of spam, and a possible solution, running in The Weekly Standard. Conrad concludes:
Something needs to be done and, in the end, the only solution may be an e-mail "postage fee".
This suggestion has been floated before, and has been largely ignored because, for a variety of reasons, it is completely impractical.

First off, the Internet is global. Unless every country in the world charges an email postage fee, any country that doesn't charge such a fee will become an instant spam-haven. So the spammers will relocate their servers at minimal cost, and spam will continue unabated.

Second, no-one runs the email system. Anyone can run an email server; I run three myself. Indeed, I've written an email server myself. How are you going to enforce this postage fee, when the way email actually works is one (privately owned) server passing the message to another, with no "post office" of any sort involved?

Third, even if you passed legislation that all SMTP (the Internet mail protocol) transactions on the public internet incur a fee, and enabled law-inforcement agencies to go after the free-email offenders, the immediate result would be that people stop using SMTP and start using something else. It's quite easy to send email over an SSL-encrypted HTTP connection so that it looks just like a web page. Tax that.

Fourth, there are many, many useful public mailing lists that send out thousands, sometimes tens of thousands of messages a day. An email tax would kill them instantly to no good end.

Finally, the technological solutions do work. I have 600 spam emails in my Junk folder, trapped there by Mozilla's Bayesian filtering. Christopher Caldwell's article shows a basic lack of understanding of how Bayesian filters work:

The primary tool that exists today is the "Bayesian" filter, which seeks out words like "Viagra" and phrases like "online gambling." Spammers have long been able to evade such filters with subtle misspellings (TURN HER ON WITH HERBAL VIARGA!).
In fact, this is precisely the problem that existed before Bayesian filtering, and which Bayesian filtering is designed to solve.

The key here is that spam looks like spam. With Mozilla, there's a training period where you need to tell the program this is spam and this is not spam. It quickly learns to recognise the characteristics of spam; not just individual words, but all the patterns found in both the headers and the body of the message, the same things that let you tell at a glance that a message is spam.

Which is not to say that I don't favour anti-spam legislation. Even when it's filtered out automatically, I'm still paying to download the spam in the first place. The right legislation would let spammer's internet connections be blocked promptly, preventing the flood of messages going out in the first place... And leading us back to my first point. But at least we won't have some ghostly beaureacracy monitoring our emails and extracting a penny a piece.

Posted by: Pixy Misa at 03:24 AM | No Comments | Add Comment | Trackbacks (Suck)
Post contains 515 words, total size 3 kb.

Sunday, June 08

Rant

Hooray for England

Steven den Beste points to an "opinion piece" by Tom Utley in The Telegraph (the English one, not Sydney's Daily Terror):
"You know, Tom," this sage said to me, glancing up from his well thumbed copy of Heidegger's Sein und Zeit, "we really ought to make Prince William Governor-General of Australia."
There are a number of problems with this ill-conceived attempt at humour, not least of which is that it's not funny. The one I choose to point out, though, is that the Brits can't make anyone our Governor-General. We send the Queen a list, and she approves one of our choices. I believe that the last list we sent only had one name on it - not a particularly good choice, in my opinion; in any case, it's rather strongly hinted which of the names is to be approved.

Oh, and as for Tom's lady friend who failed to find love in the Land Down Under: There certainly are heterosexual males even in Sydney, but most of them are already hooked up with beautiful Australian women. If you can't find a man in England, dear, you're not going to do any better down here.

Posted by: Pixy Misa at 10:41 AM | No Comments | Add Comment | Trackbacks (Suck)
Post contains 199 words, total size 1 kb.

<< Page 1 of 1 >>
59kb generated in CPU 0.07, elapsed 0.3936 seconds.
52 queries taking 0.3477 seconds, 215 records returned.
Powered by Minx 1.1.6c-pink.
Using https / https://ai.mee.nu / 213