When Java fails, it fails with verbosity…

Here’s a screen shot of the CBC Prince Edward Island website at 5:00 p.m. today. In the place of exciting news, we are treated to an exciting 17 page (well, okay, it’s only one page) Java error message.

Screen Shot of CBC website showing horrible Java error

Far be it for me to, in my big glass house, throw stones at anyone for having their website show error messages. I simply wish to point out that Java error messages appear, at least to my completely Java-illiterate eyes to reveal absolutely everything but useful information about what went wrong.

I’m just off the phone with Mitch Cormier, the local web maestro, and he says the “web operations guys are on the case.” I hope they have a front end loader to help lift that error message from their brains.

This makes me wonder if what’s kept Java from being adopted by anyone other than weird space-alien like people is simply the fact that it’s so completely divorced from reality. In other words, has Java failed because it has bad error messages?

Hark, Harold: Angels Sings!

This summer I wrote, in a post titled Angels: Fear to Tread, about our experiences at Angels Restaurant in Charlottetown. A month later, owner Ken Zakem called me, apologized for our bad experiences, and asked us to come back.

Tonight we did. Man, what a difference.

Service was friendly — among the best host and server we’ve ever had. The food came at just the right time, was hot, and well-prepared. There were crayons for Oliver, and an orange balloon too. There was a baby change table in the men’s washroom (the only one in town?), and a stool to help little kids reach the taps for the sink too (the only one I’ve ever seen in a restautant!).

I started off with a seafood chowder. It was piping hot (the baseline for judging good chowder), with fresh ingredients, a nice hearty feel on the spoon, and it just plain tasted good. Catherine had the french onion soup, which she found a little too cheesy, but nonetheless a good choice.

For the main course, I had the scallop dinner, which included oven roasted potatoes (which, if memory serves, I didn’t like the first time out, but this time were fantastic), perfectly cooked vegetables (carrots, broccoli, cauliflower) and pan-fried scallops in a creamy onion/bacon sauce. Very tasty. Catherine had the pepper steak, which she ordered rare and which came to the table rare (which, apparently, is rare, so to speak); she said it was very good. She had the same vegetables and potatoes, and enjoyed them as much as I did.

Oliver had a nice plate of dinosaur chicken fingers and zingly curly fries, served with catsup and sweet and sour sauce. He also polished off a large dinner roll. He appeared to enjoy the fries, but, I think, felt a little weird about eating the head off a chicken dinosaur. The apple juice he ordered came in a little cup, with a big straw, which is evidence that Angels knows about kids. Oliver’s meal was $3.00. Which means they know about parents.

For dessert we all had cheesecake, Catherine the butterscotch, me the chocolate, and Oliver far too much of both (he kept leaping across the table to two-time us on cheesecake access): death by sugar, as you might expect, but smooth and creamy, with generous gallops of topping. We also ordered tea, which was served with some sort of ingenious innovative drawstring bag.

Our server was everpresent without being cloying; she was kind to Oliver without being Mrs. Falbo. Oliver was rambunctious and vocal throughout the meal, but there was never a hint that we weren’t welcome.

And the room just plain felt nice — the kind of restaurant space that we don’t really have in Charlottetown much (the Town and Country comes closest): not pretentious, not “family style,” not “fast casual.” Just a nice place to take the family for dinner.

God, they say, is in the details. And by taking care of almost every one of those details, from washroom stools to liberal application of chocolate on the cheesecake, Ken Zakem has elevated Angels from a moribund confusion in an old car dealership into a first class “every once in a while” place to eat. Congratulations, Ken: we’ll be back.

Recommended.

Yak

Our house, and presumably every other house on PEI, got a full-colour brochure from Yak today. They’re a long distance dial-around service in the same mold as 10-10-321 — you know, those insufferable commercials featuring old football players, or cast members from Full House that you see on American TV stations from time to time.

Basically, you dial a prefix — in the case of Yak, it’s 10-10-925 — before you dial a long distance call, and you get much cheaper rates. The charges appear on your regular phone bill. And the rates are the same 24 hours a day, 7 days a week. There are no fees, and nothing to sign up for.

I just tried Yak to call Yankee in New Hampshire. Call setup time was the same as I’m used to, and the voice quality was as usual. So, at least on the surface, it works. I can’t speak to whether they bill as they say they do until I get this month’s phone bill.

But their rates sure look good.

For example, the Aliant rate for calls from Charlottetown to Los Angeles is 57 cents a minute (during the day); the Yak rate is 5 cents a minute. That means a 30 minute call to LA would cost $17.10 with Aliant, and $1.50 with Yak.

Another example: the day rate for calls to London, England is 69 cents a minute; the Yak rate is 9 cents a minute. A 30 minute call to London would be $20.70 with Aliant, and $2.70 with Yak.

Note that in these examples I’m comparing Yak’s 24/7 rate with Aliant’s day rate. Aliant’s rates go down at night, and various savings plans can lower them as well.

The only downside of Yak would appear to be that you have to dial 7 extra digits in front of the regular number. I’d happily do that to save this kind of money. Or I’ll forget, and never do it. Who knows.

The depressing thing about Yak, for me, is that, assuming they’re a viable and profitable company, it’s possible to make money selling long distance at rates that are 7 to 10 times less than our local phone company. What does that say about the rates we’ve been paying Aliant all these years?

Am I missing something here?

How to record the CBC’s streaming audio

Fortunately, for all their control, control, we must have control attitude, the CBC actually has an open attitude towards the copying their content:

The materials available via this CBC/SRC Website may be copied in whole or in part for private and/or non-commercial use, provided that copyright ownership is acknowledged. Under no circumstances may copies be sold without prior written permission from the CBC or the copyright owner concerned.

To enable more of this “copying in whole or in part,” here’s a tutorial on how you can, if you have a Mac, save CBC’s streaming audio, and spread it around digitally.

First, you need to download a copy of Audio Hijack. And you should probably pay the $16US shareware fee, both because you’ll only have 10 minutes use of the program otherwise, and because it’s a very cool program, and the programmer deserves your support.

Second, you need a download a copy of the RealOne Player. You don’t need the fancy-pants version you have to pay for: look for the links to the “Free RealOne Player” on their website and download and install that.

Audio Hijack is a program that does with audio what Activewords does with keystrokes: it grabs the audio before it gets dealt with otherwise by the operating system, and lets you EQ it, filter it, and/or record it.

Once you’ve downloaded and installed Audio Hijack, start it up, and select File \| New Preset from the menu.

Enter something like “CBC RealAudio” for the Preset Name, then click on Select in the Application section, and find the RealOne Player in your Applications folder and click Open.

CBC stream recording with Audio Hijack, Step Zero

Next, check the “Open URL/File/AppleScript” box, and enter http://pei.cbc.ca/charlottetown.ram in the box below. You can actually enter your local CBC’s streaming audio URL here if you like; using this one will get you audio from Charlottetown. To find you local CBC’s audio stream URL, just hold down Control while clicking on the “listen live” link on the relevant CBC website:

CBC stream recording with Audio Hijack, Step One Bee

…and select “Copy Link Location”. This will copy the URL to your clipboard, and you can then, using Command + V, copy it into Audio Hijack.

At this point, your Preset window will look like this:

CBC stream recording with Audio Hijack, Step One

Next, click on the Recording tab, and under “When Finished Recording,” select “Encode to MP3 with iTunes.” The tab will now look like this:

CBC stream recording with Audio Hijack, Step Two

You can now close this window, and you should see the following in your main Audio Hijack window:

CBC stream recording with Audio Hijack, Step Three

You’re now set up and ready to record the CBC’s audio stream at your leisure. To start listening to the CBC (you won’t be recording yet), just select the Preset you just created and click on Hijack. This will start up the RealOne Player automatically, tune it to the CBC, and start playing. You’ll see “CBC RealAudio: Active” in the status bar, along with a counter of the number of seconds the CBC has been playing:

CBC stream recording with Audio Hijack, Step Four

Once you’re ready to record, just click on the Record button, and Audio Hijack will start recording the audio to a file on your hard disk. When you want to stop recording, just click on the Record button again. At this point, Audio Hijack will automatically start up iTunes, convert your recording into an MP3 file, and leave it ready for you to listen to, save, email, or post to a website:

CBC stream recording with Audio Hijack, Step Five

Remember that the CBC allows copying “provided that copyright ownership is acknowledged,” so if you distribute the files you record, you should ensure that the CBC is credited as the source.

Portrait of a Busy Server

Because of minor problems with the Provincial Election, we weren’t able to truly take “results on the web” out for a ride. Last night’s municipal elections solved that problem.

All election results were served from a single RedHat Linux server, sitting on the Aliant network. The server was running Apache, and was serving static HTML pages that were updated from a database every minute.

Here’s the technical breakdown of how things went, for the 24 hours of November 3, 2003, election day, with the bulk of the traffic happening between 6:30 p.m. and 11:00 p.m.:

  • Unique IP addresses served: 4,376
  • Total Page Views: 142,100
  • Total Hits: 313,465
  • Total Bytes Transferred: 1,017 MB
  • Average length of user session: 51 minutes

The server generally stood up well, although at the peak of the evening response time got a little slower than I would have liked. I played with various settings for MaxClients in Apache over the course of the evening (and actually recompiled Apache mid-stream, to allow a value greater than 256), and finally settled on 312 as a workable number. Things got hairy when I raised the value about 400, as Apache started to cascade, the load average started to rise, and I had to restart the server. With the setting at 312, response time was reasonable, and we were able to sustain traffic of 30-40 requests per second.

All of the traffic was from the .ca, .com or .net domains, with the exception of one session from the Cayman Islands.

Assuming all of the traffic came from Prince Edward Island households (which is an inaccurate assumption), using Statistics Canada figures on Internet usage in the home (39% of Island households), the number of unique IP addresses we were hit from would mean 23% of Island homes accessed the site. Obviously the real number is different, but it’s an interesting calculation nonetheless.

Pages