The Boston Diaries

The ongoing saga of a programmer who doesn't live in Boston, nor does he even like Boston, but yet named his weblog/journal “The Boston Diaries.”

Go figure.

Monday, April 01, 2013

Don't Bother Reading The IntarWebs Day

I'm going through the websites I typically read each day, and I'm getting alarmed at all the weirdness I'm seeing. Some sites appear down. Some are behaving oddly. One has even been seized by Homeland Security, but it's only when I see one site with a My Little Pony theme do I realize what's going on—it's the annual “Don't Bother Reading The IntarWebs Day” Day.

Tuesday, April 02, 2013

Unintentional performance art

[HR Happy Fun Time Corner] Now Available to Input Individual 2013 Goals
Mon, 1 Apr 2013 14:27:00 -0500

This might be a phishing message and is potentially unsafe. Links and other functionality have been disabled. Click here to enable active content. This is not recommended. Read more about e-mail safety.

All [Corporation] Employees,

We are pleased to announce that the [HR Happy Fun Time Corner] system is now available for you to enter your 2013 Goals. Please work with your manager to enter individual goals that are tied to the 2013 Corporate Goals. As a reminder, the 2013 Corporate Goals are listed below …

While I would love to think that The Corporate HR Department has engaged in a subtle form of performance art satirizing the nature of mission statements as part of a April Fools' joke, the sad thing is—I think the HR department is serious, and it's the Exchange Server that is engaging in a subtle form of performance art.

Wednesday, April 03, 2013

A good example of building parsing expressions on the fly

As part of the regression test, one of the ways I check the results is to scan through the log files, checking the output matches what we expect to happen. The components (and there a quite a few) log KPIs in the format:

stats|F0021: fooreq=123 fooabrts=0 fooerrs=1 foo-qs=2/14 foo-latency=1.2/4.2/15.2ms foo-bar-xlats=3

(Each log line from each component contains a unique identifier which makes it easy to grep for particular lines of interest in the logs.)

In the past week, a major change was made in how the KPI are reported (used to be cumulative over the run of the program—now they're reset as they're logged) required a change in how my testing program processed the logs and I decided this was a good time as any to make a dramatic change in how that's done.

Prior, I used the built in Lua string patterns (think regular expressions) for parsing, but as happens, such code tends to be hard to read, and additional processing is required to massage the resulting values from strings to numbers. So I thought, why not use LPeg for my parsing needs?

-- The rest of the code assumes the following has been declared
local lpeg = require "lpeg"

local Ct = lpeg.Ct -- capture results into a table
local Cc = lpeg.Cc -- matches "", return given value as capture
local Cg = lpeg.Cg -- capture results and assign to given name
local R  = lpeg.R  -- range capture
local P  = lpeg.P  -- literal capture
local S  = lpeg.S  -- character set capture

To parse a number, we look for at least one character in the range of “0” to “9” (inclusive), and pass the match to a function that will convert the string to a numeric value, which is returned as the capture:

local num = R"09"^1 / function(c) return tonumber(c) end

For non-integers, we can use the following bit of code—yes, this won't parse all floating point numbers, but we won't need much more than this for what's logged—an optional minus sign, followed by digits, and an optional decimal point plus more digits, which is also translated t a numeric value:

local fnum = (P"-"^-1 * num * (P"." * num)^-1) / function(c) return tonumber(c) end

We also have a few multi-value KPIs, some with two values, and some with three values. These are parsed with the values returned in a table with the values in conveniently named fields:

local lat  = Ct(                        -- latency
                  P"no-data"      *
                  Cg(Cc(0),'min') *
                  Cg(Cc(0),'avg') *
                  Cg(Cc(0),'max') *
                 Cg(fnum,'min') * P'/'  *
                 Cg(fnum,'avg') * P'/'  *
                 Cg(fnum,'max') * P'ms' *

local cnt  = Ct(                        -- counts
                 P"no-data" *
                 Cg(Cc(0),'avg') *
                 Cg(Cc(0),'max') *
                 Cg(fnum,'avg') * P'/' *
                 Cg(fnum,'max') *

The only wrinkle here (and it's not much of a wrinkle) is that

foo-qs=no-data foo-latency=no-data

can be logged and we need to take that into account. If no-data is seen, the code returns the following table (if we're parsing the three value KPI; the two value KPI returns something similar):

  min = 0.0,
  avg = 0.0,
  max = 0.0,
  valid = false

otherwise, the following will be returned:

  min = 1.2,
  avg = 4.2,
  max = 15.2,
  valid = true

To parse the actual KPIs, I could have done something like:

F0021 = Ct(
            P": " -- I have a reason for starting the parse at the ':'
          * P"fooreq="        * Cg(num,'foofeq')      * P" "
          * P"fooabrts="      * Cg(num,'fooabrts')    * P" "
          * P"fooerrs="       * Cg(num,'fooerrs')     * P" "
          * P"foo-qs="        * Cg(cnt,'foo-qs')      * P" "
          * P"foo-latency="   * Cg(lat,'foo-latency') * P" "
          * P"foo-bar-xlats=" * Cg(num,'foo-bar-xlats')

But I didn't. Not because it's a lot of typing, but because the probability of errors is high because of the repetitious nature of it—I'm repeating the field names twice (look closely and you can see where I messed up). I'd rather not repeat myself, especially since I have multiple lines of KPIs to parse. Ideally, I'd like to specify the name of the field once, something like:

  { "fooreq"		, num } , -- might as well include
  { "fooabrts"		, num } , -- the type of the KPI
  { "fooerrs"		, num } , -- while I'm at it
  { "foo-qs"		, cnt } ,
  { "foo-latency"	, lat } ,
  { "foo-bar-xlats"	, num } 

And, because LPeg is composable, I can get away with that:

local function mkmatch(list)
  local pattern = P": "

  for i = 1 , #list do
    pattern = pattern
            * P(list[i][1])		-- look for name of field
            * P"="
            * Cg(list[i][2],list[i][1]) -- capture value as name
            * P" "^0			-- optional space at the end

  return Ct(pattern) -- return all captures in a table

F0021 = mkmatch {
  { "fooreq"		, num } ,
  { "fooabrts"		, num } ,
  { "fooerrs"		, num } ,
  { "foo-qs"		, cnt } ,
  { "foo-latency"	, lat } ,
  { "foo-bar-xlats"	, num }

And there goes the repetition.

Now, why do I start parsing at the colon? Simple, I use the Lua string patterns to quickly check the log lines—that's fairly easy to see what's going on, and from there, I can call the appropriate LPeg pattern to further parse the KPIs.

Friday, April 05, 2013

You thought programming was hard!

My Lovely and Talented Copy Editor has been complaining that my recents posts have gotten rather technical in nature. Well, to that, I reply: yes, but that's because computers are easier to reason about than English spelling (which is, oddly enough, one of the current topics on a computer related mailing list I'm on). For instance:

Four letters cause me disillusion
OUGH makes phonetic confusion
Four simple letters with four pronunciations
Make learning English tough for Asians.

OUGH has no logic, no rule
Or rhyme or rhythm; it will fool
All who struggle to master expression
English may cause thorough depression.

I pour some water in a trough
I sneeze and splutter, then I cough.
And with a rough hewn bough
My muddy paddy fields I plough.

Loaves of warm bread in a row
Crispy crusts and doughy dough.
Now, my final duty to do
And then my chores will all be through.

My lament is finished, even though
Learning this word game is really slow.
It is so difficult, it's very rough
Learning English is really tough.

If a trough was a truff
And a plough was a pluff
If dough was duff
And though was thuff
If cough was cuff
And through was thruff
I would not pretend, or try to bluff,
But of OUGH I've had enough

Enough Is Enough by Rosemary Chen

And another neat gem from the computer related mailing list I'm on: take this sentence:

Show this bold Prussian that praises slaughter, slaughter brings rout. Teach this slaughter-lover his fall nears.

Remove the first letter of each word, and you get a completely different sentence!

How his old Russian hat raises laughter—laughter rings out! Each, his laughter over, is all ears.

English is weird (and here I thought “I” before “E” except after “C”—I guess that makes “weird” weird).

Of course, there exist other poems about the oddities of the English langauge, like this one:

When the English tongue we speak
Why is break not rhymed with weak?
Won't you tell me why it's true
We say sew, but also few?
And the maker of a verse
Cannot rhyme his horse with worse?
Beard is not the same as heard,
Cord is different from word,
Cow is cow, but low is low,
Shoe is never rhymed with foe.
Think of hose and dose and lose,
And think of goose and yet of choose,
Think of comb and tomb and bomb,
Doll and roll and home and some.
And since pay is rhymed with say,
Why not paid with said I pray?
Think of blood and food and good;
Mould is not pronounced like could.
Why is it done, but gone and lone
Is there any reason known?
To sum it up, it seems to me
That sounds and letters don't agree.

But perhaps the most well know is this poem:

Dearest creature in creation
Studying English pronunciation,
I will teach you in my verse
Sounds like corpse, corps, horse and worse.

I will keep you, Susy, busy,
Make your head with heat grow dizzy;
Tear in eye, your dress you'll tear;
Queer, fair seer, hear my prayer.

Pray, console your loving poet,
Make my coat look new, dear, sew it!
Just compare heart, hear and heard,
Dies and diet, lord and word.

Sword and sward, retain and Britain
(Mind the latter how it's written).
Made has not the sound of bade,
Say—said, pay—paid, laid but plaid.

Now I surely will not plague you
With such words as vague and ague,
But be careful how you speak,
Say: gush, bush, steak, streak, break, bleak,

Previous, precious, fuchsia, via
Recipe, pipe, studding-sail, choir;
Woven, oven, how and low,
Script, receipt, shoe, poem, toe.

Say, expecting fraud and trickery:
Daughter, laughter and Terpsichore,
Branch, ranch, measles, topsails, aisles,
Missiles, similes, reviles.

Wholly, holly, signal, signing,
Same, examining, but mining,
Scholar, vicar, and cigar,
Solar, mica, war and far.

From “desire”: desirable—admirable from “admire”,
Lumber, plumber, bier, but brier,
Topsham, brougham, renown, but known,
Knowledge, done, lone, gone, none, tone,

One, anemone, Balmoral,
Kitchen, lichen, laundry, laurel.
Gertrude, German, wind and wind,
Beau, kind, kindred, queue, mankind,

Tortoise, turquoise, chamois-leather,
Reading, Reading, heathen, heather.
This phonetic labyrinth
Gives moss, gross, brook, brooch, ninth, plinth.

Have you ever yet endeavoured
To pronounce revered and severed,
Demon, lemon, ghoul, foul, soul,
Peter, petrol and patrol?

Billet does not end like ballet;
Bouquet, wallet, mallet, chalet.
Blood and flood are not like food,
Nor is mould like should and would.

Banquet is not nearly parquet,
Which exactly rhymes with khaki.
Discount, viscount, load and broad,
Toward, to forward, to reward,

Ricocheted and crocheting, croquet?
Right! Your pronunciation's OK.
Rounded, wounded, grieve and sieve,
Friend and fiend, alive and live.

Is your R correct in higher?
Keats asserts it rhymes with Thalia.
Hugh, but hug, and hood, but hoot,
Buoyant, minute, but minute.

Say abscission with precision,
Now: position and transition;
Would it tally with my rhyme
If I mentioned paradigm?

Twopence, threepence, tease are easy,
But cease, crease, grease and greasy?
Cornice, nice, valise, revise,
Rabies, but lullabies.

Of such puzzling words as nauseous,
Rhyming well with cautious, tortious,
You'll envelop lists, I hope,
In a linen envelope.

Would you like some more? You'll have it!
Affidavit, David, davit.
To abjure, to perjure. Sheik
Does not sound like Czech but ache.

Liberty, library, heave and heaven,
Rachel, loch, moustache, eleven.
We say hallowed, but allowed,
People, leopard, towed but vowed.

Mark the difference, moreover,
Between mover, plover, Dover.
Leeches, breeches, wise, precise,
Chalice, but police and lice,

Camel, constable, unstable,
Principle, disciple, label.
Petal, penal, and canal,
Wait, surmise, plait, promise, pal,

Suit, suite, ruin. Circuit, conduit
Rhyme with “shirk it” and “beyond it”,
But it is not hard to tell
Why it's pall, mall, but Pall Mall.

Muscle, muscular, gaol, iron,
Timber, climber, bullion, lion,
Worm and storm, chaise, chaos, chair,
Senator, spectator, mayor,

Ivy, privy, famous; clamour
Has the A of drachm and hammer.
Pussy, hussy and possess,
Desert, but desert, address.

Golf, wolf, countenance, lieutenants
Hoist in lieu of flags left pennants.
Courier, courtier, tomb, bomb, comb,
Cow, but Cowper, some and home.

“Solder, soldier! Blood is thicker”,
Quoth he, “than liqueur or liquor”,
Making, it is sad but true,
In bravado, much ado.

Stranger does not rhyme with anger,
Neither does devour with clangour.
Pilot, pivot, gaunt, but aunt,
Font, front, wont, want, grand and grant.

Arsenic, specific, scenic,
Relic, rhetoric, hygienic.
Gooseberry, goose, and close, but close,
Paradise, rise, rose, and dose.

Say inveigh, neigh, but inveigle,
Make the latter rhyme with eagle.
Mind! Meandering but mean,
Valentine and magazine.

And I bet you, dear, a penny,
You say mani-(fold) like many,
Which is wrong. Say rapier, pier,
Tier (one who ties), but tier.

Arch, archangel; pray, does erring
Rhyme with herring or with stirring?
Prison, bison, treasure trove,
Treason, hover, cover, cove,

Perseverance, severance. Ribald
Rhymes (but piebald doesn't) with nibbled.
Phaeton, paean, gnat, ghat, gnaw,
Lien, psychic, shone, bone, pshaw.

Don't be down, my own, but rough it,
And distinguish buffet, buffet;
Brood, stood, roof, rook, school, wool, boon,
Worcester, Boleyn, to impugn.

Say in sounds correct and sterling
Hearse, hear, hearken, year and yearling.
Evil, devil, mezzotint,
Mind the z! (A gentle hint.)

Now you need not pay attention
To such sounds as I don't mention,
Sounds like pores, pause, pours and paws,
Rhyming with the pronoun yours;

Nor are proper names included,
Though I often heard, as you did,
Funny rhymes to unicorn,
Yes, you know them, Vaughan and Strachan.

No, my maiden, coy and comely,
I don't want to speak of Cholmondeley.
No. Yet Froude compared with proud
Is no better than McLeod.

But mind trivial and vial,
Tripod, menial, denial,
Troll and trolley, realm and ream,
Schedule, mischief, schism, and scheme.

Argil, gill, Argyll, gill. Surely
May be made to rhyme with Raleigh,
But you're not supposed to say
Piquet rhymes with sobriquet.

Had this invalid invalid
Worthless documents? How pallid,
How uncouth he, couchant, looked,
When for Portsmouth I had booked!

Zeus, Thebes, Thales, Aphrodite,
Paramour, enamoured, flighty,
Episodes, antipodes,
Acquiesce, and obsequies.

Please don't monkey with the geyser,
Don't peel 'taters with my razor,
Rather say in accents pure:
Nature, stature and mature.

Pious, impious, limb, climb, glumly,
Worsted, worsted, crumbly, dumbly,
Conquer, conquest, vase, phase, fan,
Wan, sedan and artisan.

The TH will surely trouble you
More than R, CH or W.
Say then these phonetic gems:
Thomas, thyme, Theresa, Thames.

Thompson, Chatham, Waltham, Streatham,
There are more but I forget 'em—
Wait! I've got it: Anthony,
Lighten your anxiety.

The archaic word albeit
Does not rhyme with eight—you see it;
With and forthwith, one has voice,
One has not, you make your choice.

Shoes, goes, does. Now first say: finger;
Then say: singer, ginger, linger.
Real, zeal, mauve, gauze and gauge,
Marriage, foliage, mirage, age,

Hero, heron, query, very,
Parry, tarry, fury, bury,
Dost, lost, post, and doth, cloth, loth,
Job, Job, blossom, bosom, oath.

Faugh, oppugnant, keen oppugners,
Bowing, bowing, banjo-tuners
Holm you know, but noes, canoes,
Puisne, truism, use, to use?

Though the difference seems little,
We say actual, but victual,
Seat, sweat, chaste, caste, Leigh, eight, height,
Put, nut, granite, and unite

Reefer does not rhyme with deafer,
Feoffer does, and zephyr, heifer.
Dull, bull, Geoffrey, George, ate, late,
Hint, pint, senate, but sedate.

Gaelic, Arabic, pacific,
Science, conscience, scientific;
Tour, but our, dour, succour, four,
Gas, alas, and Arkansas.

Say manoeuvre, yacht and vomit,
Next omit, which differs from it
Bona fide, alibi
Gyrate, dowry and awry.

Sea, idea, guinea, area,
Psalm, Maria, but malaria.
Youth, south, southern, cleanse and clean,
Doctrine, turpentine, marine.

Compare alien with Italian,
Dandelion with battalion,
Rally with ally; yea, ye,
Eye, I, ay, aye, whey, key, quay!

Say aver, but ever, fever,
Neither, leisure, skein, receiver.
Never guess—it is not safe,
We say calves, valves, half, but Ralf.

Starry, granary, canary,
Crevice, but device, and eyrie,
Face, but preface, then grimace,
Phlegm, phlegmatic, ass, glass, bass.

Bass, large, target, gin, give, verging,
Ought, oust, joust, and scour, but scourging;
Ear, but earn; and ere and tear
Do not rhyme with here but heir.

Mind the O of off and often
Which may be pronounced as orphan,
With the sound of saw and sauce;
Also soft, lost, cloth and cross.

Pudding, puddle, putting. Putting?
Yes: at golf it rhymes with shutting.
Respite, spite, consent, resent.
Liable, but Parliament.

Seven is right, but so is even,
Hyphen, roughen, nephew, Stephen,
Monkey, donkey, clerk and jerk,
Asp, grasp, wasp, demesne, cork, work.

A of valour, vapid, vapour,
S of news (compare newspaper),
G of gibbet, gibbon, gist,
I of antichrist and grist,

Differ like diverse and divers,
Rivers, strivers, shivers, fivers.
Once, but nonce, toll, doll, but roll,
Polish, Polish, poll and poll.

Pronunciation—think of Psyche!—
Is a paling, stout and spiky.
Won't it make you lose your wits
Writing groats and saying 'grits'?

It's a dark abyss or tunnel
Strewn with stones like rowlock, gunwale,
Islington, and Isle of Wight,
Housewife, verdict and indict.

Don't you think so, reader, rather,
Saying lather, bather, father?
Finally, which rhymes with enough,
Though, through, bough, cough, hough, sough, tough??

Hiccough has the sound of sup …
My advice is: GIVE IT UP!

The Chaos by Gerard Nolst Trenité

After that, I think understanding call with current continuation with monads is easier to grok than English spelling.

Babies with lightsabers

Whatever you do, LOCK UP YOUR LIGHTSABERS! Kids and lightsabers don't mix.

Tuesday, April 09, 2013

Of course it's a catch-22, it's the 1040!

Well, tis' the season, when the IRS crawls out of its hole and charges a ton of money regardless the state of its shadow. So I'm all set to fill out the 1040-EZ when Bunny holds up a 1099-DIV I received because of some stock I own. “I think you should fill out the normal 1040,” she said. “You don't want to get into trouble for not reporting $26.35 of income.”

“I see you learned how to hyperlink your speech,” I said.

“Ha ha.”

“Sigh. I suppose you are right.”

So I'm reading the instructions when I see the following:

Use Form 6251 to figure the amount, if any, of your alternative minimum tax (ATM). Also see the Instructions for Form 6251 to see if you must file the form.

1040 Instructions

Okay, I think, let me check the Form 6251 instructions to see if I need to bother filling this out …

Who Must File

Attach Form 6251 to your return if any of the following statements is true.

  1. Form 6251, line 31, is greater than line 34.

Instructions for Form 6251

Let me get this straight … I have to fill out Form 6251 before I can know if need to fill out Form 6251 …

I always did find it amusing to fill out the full 1040 (but I'm outside the Alternative Minimum Tax income range—that is, if Wikipedia is to be trusted).

It also turns out that the extra $26.35 of extra income did not bump my income to the following line in the 2012 Tax Table, although if it did, I would have owed an additional $14.


Wednesday, April 10, 2013

Three issues with profiling code

I had three issues with profiling code at The Corporation. I manged to solve all three:

  1. gprof has issues dealing with multithreaded code—namely, it doesn't handle it very well. I did find a fix for the issue, and while it's a small bit of code, explaining why it works is more than I care to get into at this point in time (it comes down to—if you know why you need this, then you'll understand what it does).

  2. gprof always uses the same file for output, gmon.out, regardless of the program name. This is okay when you are working with one program. It's not okay if you are working with multiple programs (right now, I'm testing two programs, running one instance of one, and up to 200 instances of another one).

    But thankfully, there is a fix for this issue as well. You just need to set an environment variable to a unique name, and the output file will be that name with the process-id. Since I run all these programs from a Lua script, it's easy enough to ensure that this environment variable is created.

  3. Compiling all these programs to be “profile-enabled.” Yes, I could modify the Makefiles, but some third-party libraries use their own build system (and depending on the programs, libraries and platforms, I have to edit one of sixteen or so files). But I don't always want a “profile-enabled” build (which would mean re-editing a bunch of files). What I want is a simple way to get a “profile-enabled” build, or not.

    Yes, I could take the time to extend the Makefiles and custom build systems to include a “profile-enable” option, but frankly, breaking the build is scaring me off that route. So I decided that for me, the simplest thing that could possibly work would be to write a wrapper around gcc that would add the proper option (and remove conflicting options) to do a “profile-enabled” build (based on an environment variable).

    The code is basically, add the (and remove) the appropriate option(s) to the command line, then run the compiler.

    It beats editing a ton of files.

Tuesday, April 16, 2013

45 years old and can still pack a wallop

The blast, when it came, was loud without being overwhelming. We were close enough that there wasn't more than a quarter second's delay between the flash and the sound, and I felt the warmth of burning kerosene exhaust roll over me. The gas generator spoke with a deep rumbling, topped with a rocket's crackle-crackle-crackle—a sound I'd always thought was just the microphone clipping when listening to recordings of rocket launches. The overall noise of the thing was impressive—probably about as loud as a loud rock concert—but we were far enough away not to need hearing protection. The gas generator produced a long horizontal column of flame, which held steady for the entire test. It was impressive, but it was even more impressive when I reminded myself that in a real F-1 all this fire and noise and smoke was merely used to drive the machinery that fed fuel into the engine for the real fireworks.

Via Instapundit, How NASA brought the monstrous F-1 “moon rocket” engine back to life

I did know know that the F-1 rocket of the Saturn V (of which there are five as part of the first stage) were actually two rockets—the smaller, producing 55,000hp just to drive the pumps of the main rocket (producing approximately 32,000,000hp—remember, that's just one F-1 rocket).

I also did not know that there existed quite a number of F-1 rockets, and as the article states, there's a group working to test fire an F-1 rocket. It's pretty amazing to think that these are still the most powerful rockets every produced and they're over 40 years old.

Simply amazing.

Friday, April 19, 2013

Notes from a service station at mile marker 144 along the Florida Turnpike

Bunny and I are going out of town for the weekend. We're on the Florida Turnpike, and had just turned into the Port St. Lucie Service Plaza only to find a total mob scene.

It wasn't just crowded. It was packed with barely enough room to squeeze inside the main service building. There were literally over a thousand kids milling about the place, over a dozen long distance touring buses, and State Troopers stationed liberally throughout the parking lot.

The kids were all from Broward and Palm Beach high schools, headed north for some large powwow in central Florida and by pure coincidence, all the buses had decided to stop at the same plaza just minutes before we arrived.

The State Troopers had nothing to do with the students—they were there due to a “heightened security level from the Department of Homeland Security” (which to me, is something I would have expected from the Soviet Union, not the United States). Nothing more was said about the threat.

First impressions of Chalet Suzanne

So Bunny and I arrive at Chalet Suzanne in lovely Lake Wales, Florida. Bunny made the plans a few months ago, wanting to stay at the historic hotel and eat the six course dinner at its renowned dining room. How renowned? It has its own airstrip!

We arrive and I am … underwhelmed. I heard “Chalet Suzanne,” “4-star dining,” “private airstrip” and I'm picturing something along the lines of Biltmore, a stately building reminiscent of classical French or Swiss architecture, and yet, here we are, at … um … eclectic Disneyesque.

[It's … eclectic] [But this is said to be a 4-star restaurant]

It certainly has character.

But the staff is proving to be very nice and helpful. We're lead to our room, which is above the dining lounge, towards the back of the building.

[Character!  It has character!] [They sure made it easy to get to the roof.] [The Governor North Room, where we are staying] [The porch continues on around the room]

As we were lead to the room, I couldn't help but feel like I was on the set of Popeye.

[I did not realize this is now a tourist attraction in Malta]

I have to keep reminding myself that this has character, although I doubt that the Popeye set was across the water from a modern housing development.

[It seems the Hinshaw family did not own all the property around the lake]

The Governor North Room itself is quite nice, if you don't mind its non-Euclidean geometry. There's the low and uneven ceiling; the slight north-sloping floor of the entry hall and sitting room; the bedroom is about six inches lower than the rest of the suite, and the color, which some would call “pastel green” I would characterize as “institutional mint green” (in other words—it's not a color I would use).

Character, in other words.

[The sitting room, no television, amazingly enough] [The writing desk—granted, one can move the chair] [The bedroom; this room has the television, viewable from the bed] [The bathroom.  It's … uh … pink] [Dispite how ridiculous it looks, it is quite comfortable] [Complimentary bathrobes in the pinkest closet I've ever seen]

As we were getting settled in, one of the staff hand delivered (did I mention how nice the staff is?) a plate of two chocolate truffles. If these were anything to go by, the food should be quite good here.

Our plans for tomorrow include dinner at this renowned 4-star restaurant, plus a possible visit to Isengard, weather permitting.

It has “character”

I wouldn't say I hate Chalet Suzanne; it's just that I'm having some cognative dissonance between my expectations, Bunny's enthusiam, and the reality of the place.

In fact, out entire dinner conversation this evening was spent talking about the right word to describe Chalet Suzanne. I offered my description, but Bunny felt the connotations were too negative, and offered a few alternatives. But I felt the connotations of the words she suggested were more negative than the word I used, and countered with some alternatives. Bunny countered that those were too negative and suggested some other ones, which I felt were more negative than what I was feeling.

Yes, our entire dinner conversation was spent trying to compromise on a word that describes Chalet Suzanne, and about the best we can agree on is “character.”

It has “character.”

Saturday, April 20, 2013

Some clarifications about our trip and our room

Bunny is concerned that I've given the impression that she forced me on this trip to Chalet Suzanne, but that is far from the truth. While she did come up with the idea, she did ask me if I wanted to go and I said yes. No coersion involved.

There is one other thing I need to clarify—I said that the bedroom was six inches lower than the rest of the suite—and it is. It's just that there's two steps leading down into the bedroom—it isn't a sheer drop or anything bad like that.

A good sign

Bunny and I hit the Chalet Suzanne Dining Room Lounge for breakfast.

[Okay, I can see this being a 4-star restaurant]

The Dining Room Lounge is a multi-level facility. Really, each room is practically its own level, usually a few steps up or down as you work your way through the place. The decor reeks of a high-class restaurant and the staff is, as always, exremely nice. We're lead through several rooms (and levels) to our table, overlooking the lake (and incidentally, right below our room—yes, we didn't have that far to walk); jazz music barely audible in the background. Our waitress handed us the breakfast menu, a piece of slate just slightly smaller than an iPad with that day's selection.

Bunny and I both ordered the pancakes and bacon.

The plates came with three stacks of pancakes. The pancakes were roughly dollar coin sized, perhaps three, four inches across, and less “pancake” and more “crêpe”—very thin, nearly translucent. And excellent, some of the best pancakes I've had.

And the bacon? Well, it's bacon. Bacon is always good. If this is the level of food we can expect, then dinner should be well worth the trip.

Isengard, a spooky place, and a gang of turtles

The weather permitted.

We saw Isengard!

[Isengard!  It seems the Uruk-hai have yet to show up]

Okay, it's really Bok Tower, a rather large and imposing musical instrument which is acoustically engineered such that the sound only carries to the immediate vicinity around the tower itself.

We learned that there is an elevator inside, so the carillonneurs don't have to climb twenty flights of stairs to get to the keyboard.

We also learned that there are very few pictures from inside Bok Tower, and the few that do exist (of the first floor) are mostly in black-and-white.

After leaving Isengard, we then found ourselves at a nearby attraction, Spook Hill.

[I think it's an optical illusion] [Wow!  We really are moving backwards!]

The illusion is pretty good. Stop the car at the white line, place it in neutral and let off the break, and yes, you do start rolling backwards. The perspective makes it appear as if you are moving up the hill, but that's all it is—an illusion. A darned clever one, but only an illusion.

Once back at Chalet Suzanne, Bunny asked if I could take pictures of the turtles in the lake. I cheerfully obliged and started taking pictures of the happily swiming turtles, but then, things turned ugly—they started bum rushing me!

[The turtles are out to get me!]

Well, it wan't much of a bum rush—they are turtles after all, and I could easily outpace them back to the safely of the room. But they did rush towards me, sticking their little heads up at me, daring me to defy them and their territory.

Well … something like that.

By then, it was time to dress for dinner anyway …

So, how good is the Chalet Suzanne Dining Room Lounge?

Bunny and I arrived at 5:00 pm for our five course dinner. We really didn't have far to go, just outside our room, down some stairs and around the building.

First up, the appetizer. I'm not fond of grapefruit, and a am thoroughly not a fan of chicken livers, so I opted for the Maryland Crab Cakes; Bunny kept with tradition for this course and had the Caramelized Grapefruit and Organic Chicken Liver. The crab cakes were very good, but not quite as excellent as the crab cakes at Cap's Place (which I'm surprised I haven't written about, seeing how getting there involves a boat ride). Bunny loved the Caramelized Grapefruit and Organic Chicken Liver.

Next course, soup, and both of us had the traditional Romaine Soup, which doesn't have any romaine in it (and hasn't had romaine in it since 1957, when the recipe changed so it could be canned and sold). It does however, have spinach and mushrooms. Bunny loved the soup. I didn't care for it. I found it to be a bit heavy in pepper, with a subtle other flavor that I couldn't quite place, but I didn't like. It wasn't repulsive and I could eat it, but for me, the soup that went to the moon could have stayed there with Apollo 15.

Next course, salad, and here, I kept with tradition with the unique Chalet Cæsar Salad, while Bunny bucked tradition and went with Baby Blend Salad. Bunny loved the salad, whereas I … well …

Okay. I have to explain something about my food dislikes. Generally speaking I have a thing about sweet dishes, and I tend to dislike the mixing of savory and sweet. I will admit to not being at all consistent about this (I love bacon and syrup for instance) and I have a larger problem with sweet dishes than I do savory. For instance, don't bother serving me rice pudding as that triggers my gag reflex. I just can't eat rice pudding. But risotto? I love risotto. The thing is, there's no difference in texture (another thing I have—I find some food textures revolting) as both are soupy, but rice pudding is sweet and risotto is savory. Same deal with bread pudding. Instant gag reflex, yet I love the bread in French Onion soup (and Bunny loves pointing out that French Toast is a type of bread pudding, but not in my universe). Again, it's a sweet/savory thing.

Cream cheese—I hate the flavor of it. And the idea of cheese anything in dessert is another thing I find repulsive. Don't get me wrong, I generally like cheese (except for cream cheese), and because I associate “cheese” with “savory,” I don't care for it in desserts.

And finally we get to gelatin. Me, I associate gelatin with dessert. You know, Jell-o. The idea of a sweet dessert-type item in a savory dish I find revolting. And that means aspics. Which reminds me of horrible things from the 70s and …


So the Cæsar Salad sitting before me. The unique Chalet Cæsar Salad. The artichoke in the middle of the salad is unexpected, but okay, I can deal with that. What I couldn't deal with were the two bits of slime on either side of the dish—orange aspic and tomato aspic.


Okay, yes, the non-contaminated portions of the Cæsar Salad were very good; perhaps some of the best Cæsar Salad I've had. But I could not wrap my head around the slimy bits of aspic in the dish. For me, they marred an otherwise excellent salad.

Yes, I'm still emotionally scared over the incident.

Anyway, onto the next course, easily the most problematic portion of our dinner—the entrée.

We both ordered the Grilled Buffalo Ribeye, medium for Bunny, medium rare for me. And not being a fan of winter vegetables, I was able to substitute mushrooms for the zucchini.

The entrées arrived. Mashed sweet potatoes. See above about sweet and savory. My buffalo ribeye was cooked fine, but Bunny's was still a bit too raw for her liking. So they took both dishes back. I to get regular mashed potatoes, and Bunny to have her buffalo ribeye placed on the grill for another couple of minutes. The dishes came back and we started to eat.

“Is your steak tough?” asked Bunny. “Because mine is very tough.”

“It's buffalo,” I said. “It's a game animal.”


“Yes,” I said. “Buffalo.”

“This isn't beef?”

“Nope. Buffalo.”

“I thought ‘buffalo’ meant a type of cut!”


Suffice to say, Bunny did not enjoy the Buffalo Ribeye.

I, on the other hand, found it to be very good.

The mashed potatoes weren't that great (Bunny tried them, liked them, but realized they had cheese. I'm not a fan of cheese in mashed potatoes, prefering a more pure approach of a dash of milk and a bit heavy on the butter).

And the mushrooms … well, let's just say I found the taste I didn't enjoy in the non-romaine Romaine Soup.

Finally, dessert. Bunny had the Crème Brûlée and I the Orange Aspic Pound Cake.

Hey, just because I found the orange aspic on my Cæsar Salad doesn't mean I don't like orange gelatin. It just has to be in the right context—in this case, dessert (yes, I'm weird that way).

And the desserts where very good. But at this point we really couldn't finish them, as we were both stuffed at the end of a five course meal, and passed out in a food coma as soon as we waddled back to our room.

Overall, the food was good; the only major failings were our own expectations on the food (mushrooms and aspic for me; buffalo for Bunny). Was it worth the price we paid? Even had we enjoyed the full meal, I still feel it was too expensive.

Notes from an overheard dinner conversation at a 4-star restaurant

“Look, there's an aligator in the lake.”

“I don't see it.”

“Over there.”

“Hmm … looks like a log to me.”

“I've never seen a log move like that before.”

“The wind is making it bob like that.”

“I'll bet you that's an alligator.”

“How about loser pays for dinner.”

“Oh is that another 'gator in the lake again? I swear we had one removed just last week.”


“I was paying for dinner anyway.”

“I wonder what they eat?”

“The turtles.”

“But it can't eat through the shell.”

“Alligators pretty much swallow their food whole.”

“But what happens to the shell?”

“I guess it comes painfully out the other end. Oh,sorry. Waitress, could we get an extra napkin?”

Sunday, April 21, 2013

Final thoughts on Chalet Suzanne

Aaaaaaannnnnnnnnnnnnnd we're back!

Final thoughts on our stay at Chalet Suzanne—I don't regret staying there. Aside from the non-Euclidean geometry of the buildings and the (in my opinion) odd color schemes, the place was clean, the bed was quite comfortable, and the staff were extemely friendly. The food, overall, was good.

Was it worth the price? I, personally, felt it was more expensive than it should be (and yes, if you expect to stay and eat there, have a fat wallet on hand), but that's me.

Obligatory Picture

[Don't hate me for my sock monkey headphones.]

Obligatory Links

Obligatory Miscellaneous

You have my permission to link freely to any entry here. Go ahead, I won't bite. I promise.

The dates are the permanent links to that day's entries (or entry, if there is only one entry). The titles are the permanent links to that entry only. The format for the links are simple: Start with the base link for this site:, then add the date you are interested in, say 2000/08/01, so that would make the final URL:

You can also specify the entire month by leaving off the day portion. You can even select an arbitrary portion of time.

You may also note subtle shading of the links and that's intentional: the “closer” the link is (relative to the page) the “brighter” it appears. It's an experiment in using color shading to denote the distance a link is from here. If you don't notice it, don't worry; it's not all that important.

It is assumed that every brand name, slogan, corporate name, symbol, design element, et cetera mentioned in these pages is a protected and/or trademarked entity, the sole property of its owner(s), and acknowledgement of this status is implied.

Copyright © 1999-2017 by Sean Conner. All Rights Reserved.