Tuesday, June 27, 2006

Thunderbirds are go (or possibly: Outlooks are go)

[reading: Guillermo Martínez, "The Oxford Murders"; recently Bill Pearl, "Getting Stronger"]

W00t. Actual users. And only 20% of them had to uninstall in the first thirty seconds.

(No cause for alarm. Nothing to see here. Just another damn customer for Redemption).

Dad: 123 with a mirror, so next up is . And yes, I looked it up on the filthy internet.

Thursday, June 22, 2006

End of an Era (for now)

We've been trying to expand our matrix of test setups for the product, so I had to get rid of my last Linux installation. Kind of sad really—I've had some machine or other running Linux since 1993, back when I had Slackware on large numbers of 3.5" disks. Still, at least I'm not completely without a UNIX box.

[Edit: Actually, I've realized that's not quite true. I've still got an old laptop with a dodgy screen, hidden away in a drawer, that has some ancient Linux version on it.]

Lesson 4

Continuing the theme of lessons learnt from Shakespeare, it appears that the core message of Coriolanus is: Don't listen to what your mother tells you.

Wednesday, June 21, 2006

Towel of Babel

[reading: Mauricio Castro, "Tango: The Structure of the Dance"]

Just realizing that in the last week I've written things in:

  • C++
  • Visual Basic
  • JavaScript
  • Makefile
  • m4
  • Wix
  • HTML
  • Perl
  • Bourne shell
  • CSS
  • Excel

(and the first half-dozen of those are in the last 24 hours). Going back a bit further to cover the last month or so, there's also:

  • Lisp
  • Java
  • DocBook
  • XSLT

No wonder I'm confused.

Friday, June 16, 2006

Strangely Quiet

My email is down. It's kind of pesky.

The folk (seem.co.uk) who do the hosting seem to be completely off the air, which means that I've got no way of finding out what's going on, or even if they're ever going to come back—the only contact details are entirely electronic. Hmm, possibly time for a change of provider.

(If anyone out there sent me mail in the last couple of days, I won't have received it. Until I get things transferred, try sending to david.drysdale _at_ workingprogram.com instead. [23Jun06] Looks to be transferred now, so back to the lurking place account.)

Thursday, June 15, 2006

Pun of the Day

When converting data between various different formats—HTML, CSV, XML etc—there's always something to blame when the conversion goes awry: the un-escaped quote.

Monday, June 12, 2006

"I curse the day wherein I did not some notorious ill"

Eleven murders, three executions, one rape, some cannibalism, three severed hands and one severed tongue. Oh, and somebody spirited away in a wheelchair because they'd fainted.

Proper writing.


The short version, if only because somebody hasn't gotten around to putting up their Globe blog.

Friday, June 09, 2006

How do I exit thee? Let me count the ways

[reading: Tom Holt, "Alexander at the World's End"]

Today I've been trying to sort out the interactions between the various different mechanisms for generating and catching errors in Windows. With the help of a noddy test program, I ended up with:

Type No handler atexit signal catch (...) set_terminate __except (EXCEPTION_EXECUTE_HANDLER) __except (EXCEPTION_CONTINUE_EXECUTION) SetUnhandledExceptionFilter
exit(0) No message Hit
abort() Visual C++ Runtime Error dialog Hit (SIGABRT)
c=*(char*)0 'Encountered a problem and needs to close' dialog Hit (SIGSEGV) Hit Hit Hit, generates infinite loop Hit
i=1/0 'Encountered a problem and needs to close' dialog Hit Hit Hit, generates infinite loop Hit
raise() No message Hit, execution continues from the raise
throw Visual C++ Runtime Error dialog Hit Hit Hit
RaiseException(0xE0000001,EXCEPTION_NONCONTINUABLE, 0, NULL) 'Encountered a problem and needs to close' dialog Hit Hit Hit Hit
RaiseException(0xE0000001, 0, 0, NULL) 'Encountered a problem and needs to close' dialog Hit Hit Hit, execution continues from the RaiseException Hit

Other key points to note:

  • All catchers only see errors from the same thread, with the exception of the SEH unhandled exception filter set by SetUnhandledExceptionFilter().
  • For (say) a null dereference, the order that various handlers get to see things is:
    • Vectored Exception Handler (VEH)
    • C++ exception handler or Structured Exception Handler (SEH), whichever has the narrower enclosing scope
    • SIGSEGV signal handler /* FALLTHRU */
    • SEH unhandled exception filter installed by SetUnhandledExceptionFilter
    • C++ unhandled exception handler installed by set_terminate
  • I've no idea why a null dereference does appear as a C++ exception in a catch (...) block, but doesn't hit the unhandled-C++-exception-handler installed by set_terminate.

Thursday, June 08, 2006

Render Unto Caesar

[reading: Christopher Brookmyre, "Be My Enemy"]

Given that the product has a large chunk of function that works as an Outlook add-in, I decided this morning that it was time to start using Outlook a bit more frequently. I can't quite face shifting to Outlook for all of my email, so I've divided things up: personal email to Thunderbird on the Mac, work email to Outlook on WinXP. To make everything consistent, I also decided to move all of my stored work-related emails across to some Outlook folders.

Which turns out to be somewhat fiddly. I was slightly surprised to find that Outlook doesn't cope with mbox format mail, but after a little bit of searching I discovered a useful page on how to make the transition. Step by step:

  • Compact the relevant folders in Thunderbird (this is needed because hidden copies of moved and deleted mails are kept in their original folders; without compaction, these removed mails will reappear during the transition).
  • Move the mail files (the ones without the .msf extension) across onto the Windows machine, giving them a .mbx file extension as you do.
  • Use the mbox2eml tool to open up each .mbx file in turn, and export it as a collection of .eml files, one per email
  • Drag and drop these emails into appropriate folders in Outlook Express.
  • In Outlook Express, export the mail folders to Outlook (don't use the "Import from Outlook Express" feature of Outlook—this changes the "Received:" date to today/now for any imported emails that were originally sent on the Thunderbird client (hint from here)).

Done, and half the morning gone already.

[A:37385 B:3218 C:346 D:9187 E:8180 Total:58316]

Saturday, June 03, 2006

Plenty Of Blood

Finally getting around to booking Titus Andronicus at the Globe, so here's your cut-out-and-keep* guide to Shakespeare's bloodiest play:
Titus Andronicus


*OK, not really.