Joe White’s Blog

Life, .NET, and Cats


Archive for May, 2007

My Script Frenzy plot

Monday, May 28th, 2007

So I’ve signed up for Script Frenzy. Fame and fortune, here I come.

I’ve finally (almost two weeks after learning about Script Frenzy, three days before curtain) decided on a plot… of sorts. It’s still just the one-sentence summary from Step 1 of the Snowflake Method. But hey, it’s a start, right? Here’s what I’ve got:

In the modern Midwest, a teenager must rescue the girl she loves from a power-hungry Faerie Lord.

We’ll see if I’m still using that same plot by the time June is over.

As with this past NaNoWriMo (which I never did actually finish), I’ll be writing this on Google Docs, so I can share it with a few people without making it totally public. That way, I can sell it for more money when all the Hollywood studios come knocking my door down. Denial springs eternal, and all that.

Let me know if you want to read along as I write. My contact form doesn’t seem to be working (grumble grumble blog software that doesn’t report the actual mail server error grumble grumble), but you can e-mail me using my hotmail address, which has “ip255” before the at sign. Put something about Script Frenzy in the subject line so I know not to feed you to my hamster.

Only four Delphi jobs? Depressing.

Thursday, May 24th, 2007

DavidI just posted about Delphi developer jobs available in the US. He said “some of you have asked me where the Delphi jobs are… You can always find the latest Delphi job openings at the PermIT job openings site.”

I checked it out. They only list five Delphi job openings for the entire United States, and one of them is closed.

My question is, why list the closed one? Wouldn’t just listing four have been depressing enough?

Correction: dSpec does have the optional Message parameter

Monday, May 21st, 2007

In my last post, I incorrectly said that dSpec doesn’t have the Message parameter. Jody corrected me. Here’s the syntax:

Specify.That(FRate, 'Tax rate').Should.Equal(0.10);

I kinda like this syntax — it puts the label right next to the thing it’s labeling, rather than putting the label last like DUnitLite does now. What do you guys think? Which of the following syntaxes would be best for DUnitLite?

Specify.That(FRate, Should.Equal(0.10), 'Tax rate'); // (a)
Specify.That(FRate, 'Tax rate', Should.Equal(0.10)); // (b)
Specify.That('Tax rate', FRate, Should.Equal(0.10)); // (c)

Currently DUnitLite uses (a). (b) is more like dSpec.

The advantage to (c) would be when your expressions are long enough to line-wrap. If the label is likely to be shorter than the expression being tested (and, therefore, more likely to fit on the first line without wrapping), then this kind of formatting might work really well:

Specify.That('State tax rate',
TInvoiceCalculator.CreateForState(FCustomer.State).TaxRate,
Should.Equal(0.10));

But without wrapping, having a label as the first parameter might get in the way of readability. I’m not sure.

Which syntax seems most readable to you?

Readable behavior-driven tests for DUnit: DUnitLite

Saturday, May 19th, 2007

DUnitLite (formerly DUnitAssertions*) version 0.1 is now available. (downloads, documentation) It’s open-source (MPL).

DUnitLite is similar to dSpec, except for the placement of parentheses:

// dSpec:
Specify.That(TheAnswer).Should.Equal(42);
// DUnitLite:
Specify.That(TheAnswer, Should.Equal(42));

But I think my approach has a few advantages (which is why I kept working on my version even after I found out about dSpec). As I see it, DUnitLite currently has two things one thing going for it that dSpec doesn’t have:

  • Support for an optional “message” parameter, so that if a test does more than one Specify, you can tell which one it failed on. Just like the optional third parameter to DUnit’s CheckEquals(). dSpec doesn’t currently support this, and it’s not clear (to me) how its syntax could even be extended to support it. Correction: dSpec does support the “message” parameter.

  • Support for enums and records. Okay, “support” is a strong word; you have to write code to support the types you care about — but not much. In DUnit or dSpec, you’d have to write lots of methods to make this work (trust me, I’ve done it many times with DUnit). But in DUnitLite, the duplication has been pulled out. Once you write the code once, the new type is supported everywhere: Specify.That(), Should.Equal(), Should.Not.Equal(), Should.Be.GreaterThan(), Should.Not.Be.Between(), etc. dSpec’s current class structure would make this more work. I think.

There’s also an interesting issue with dSpec’s .Unless() syntax, which can’t be ported to .NET because it relies on a clever deterministic-finalization hack. And if I implemented the same feature in DUnitLite, I think it would work just fine in .NET, just because of the difference in where the parentheses go. But that’s a story for another day, when I haven’t stayed up until after 5:00am trying to release a project.

So anyway. DUnitLite is out there, and it even has a little bit of documentation. It’s an early version (it’s just whatever I had working when I finally got the intellectual-property waiver back from my employer this week), but all of the supported syntax and types should be fully working. Go check it out, and let me know what you think. Enjoy!

* The reason for changing the project’s name is explained in another footnote. “DUnitLite” isn’t that much better, but at least it hasn’t got “Assert” in its name.

NaNoWriMo goes to the big screen

Wednesday, May 16th, 2007

The folks behind NaNoWriMo — aka “let’s everyone write a novel in a month” — are at it again.

This time, the NaNoWriMo team — newly re-christened The Office of Letters and Light — is introducing Script Frenzy, aka “let’s everyone write a screenplay (or stage play) in a month”. And, not to break with tradition, they picked a month — June — with only 30 days.

They’ve got some good articles on screenwriting on their site. I’ve already followed their advice by reading the screenplays for two movies I already know well. (Oddly enough, I managed to pick two that both starred Bill Murray and were both directed by Harold Ramis: Ghostbusters and Groundhog Day (PDF).)

Even if you think the idea of writing a screenplay sounds a little too crazy, I really would recommend reading some screenplays (their Web site has some links to screenplay sites to get you started). It was really cool to see, not just how a screenplay is formatted and how it flows, but also to see early drafts of movies I already know. I was really interested to see places where the early script kind of rambled, that had been tightened up in the final movie — and on the other side, to see bits of dialogue that were virtually untouched from the early draft clear through to the final cut. You never get to see early drafts of the books you read, but early drafts of movie scripts are out there to see. Very worth reading for any kind of writer — everyone talks about how important editing and revising are, but here you can get a chance to actually see what they look like.

First Quality Experience

Wednesday, May 2nd, 2007

CodeGear’s new CEO is serious about “First Quality Experience“.

Delphi 2007 was released March 16 — over six weeks ago. But as of the beginning of this week, we still didn’t have the copies that we had already paid for via Software Assurance. This is the second year in a row they’ve done this.

So on Monday, after talking to my boss, I e-mailed Jim Douglas directly, because this is exactly the sort of “quality” he commented on wanting to improve.

I can’t confirm blogger Jim‘s experience of hearing back “within a few minutes“. (Not surprising; a CEO is a busy guy. When he first e-mailed me back, he had just gotten off a plane.) But I can say that, two days later, I’ve received e-mails back from CodeGear’s CEO, their VP of North American Sales, and their Senior Director of Global Customer Support. And we have Delphi 2007.


Joe White's Blog copyright © 2004-2011. Portions of the site layout use Yahoo! YUI Reset, Fonts, and Grids.
Proudly powered by WordPress. Entries (RSS) and Comments (RSS). Privacy policy