Tablet UML News


News and commentary (and whatever else catches my eye)
from Martin L. Shoemaker, author of Tablet UML
and UML and Tablet PC instructor for The Richard Hale Shaw Group

Tuesday, August 30, 2005

Conratulations, Bill Wagner!
My buddy Bill Wagner of SRT Solutions has got quite something to be proud of here: a Hungarian edition of his book, Effective C#. Being unable to read so much as a word of Hungarian, I can't vouch for this one. But I highly recommend the English version!

Saturday, August 27, 2005

Liveblogging the Ann Arbor Duelist
Overhead

Welcome to semi-live updates of the eighth annual Ann Arbor Duelist tournament!

UPDATED: Final epee results added at the end. Also, we would like to thank the Ann Arbor YMCA and Dance/Fencing coordinator Grace Lehman for providing the venue for this event!

(Tech details: Toshiba Portege M200 Tablet PC. T-Mobile/Sony Ericson GPRS card. Nikon CoolPix 3200.)

Mixed Foil Entrants
Entries
Ann Arbor Dueling Society
Mixed Foil
Ann Arbor Duelist Open VII
8/27/2005

Pools: 4
Fencer's Name
1 Cho, Michael A05 RFC 1
2 Wallrabenstein, Inga A05 RFC 2
3 Hayenga, Gary B04 AADS 3
4 Kosla, Anthony C05 AADS 4
5 Murphy, Dennis C05 Liberty Lakes 4
6 Brady, William C05 Liberty Lakes Fencing Club 3
7 Megargle, Thomas J. C05 RFC 2
8 Purdy, Mike C05 RFC 1
9 Schleis, Benjamin C05 UFO 1
10 Coon, Brad C05 WMFA 2
11 Bock, Dan C03 AADS 3
12 Vance, Beth D05 RFC 4
13 Lewia, Sam D05 TRFC 4
14 Webster, Amy D05 UFO 3
15 Krueger, Terry D01 AADS 2
16 Bergstrom, Allison E05 TRFC 1
17 Leach, Michelle K. E05 UofM 1
18 Wasylyshyn, George R. U AADS 2
19 Beland, Jon U AADS 3
20 Beighley, David U GRAFA 4
21 Wilk, Steven R U RFC 4
22 Suttle, Clark U Schoolcraft 3
23 Evangelisti, Thomas U SYFC 2
24 Evangelisti, Aaron U SYFC 1
25 King, Erica U UFO 2
26 Stern, Glen U WMFA 1

Beland and Bock

Beland and Bock

Gary Hayenga

Kosla and Unidentified Fencer (apologies!)

Seeding for the Mixed Foil Direct Elimination

Rk Pool Fencer Bouts Won Hits Received
1 1 Cho, Michael 6 6 30 5
2 2 Wallrabenstein, Inga 6 6 30
3 3 Hayenga, Gary 5 5 25 11
4 2 Megargle, Thomas J. 6 5 25
5 1 Schleis, Benjamin 6 5 26
6 4 Kosla, Anthony 5 4 22 7
7 4 Murphy, Dennis 5 4 23 11
8 3 Beland, Jon 5 4 22 16
9 4 Vance, Beth 5 4 19 15
10 2 Coon, Brad 6 4 23 15
11 1 Purdy, Mike 6 4 23 19
12 2 Krueger, Terry 6 3 20 22
13 3 Brady, William 5 2 22 20
14 4 Lewia, Sam 5 2 17 15
15 3 Bock, Dan 5 2 20 20
16 3 Webster, Amy 5 2 15 23
17 1 Stern, Glen 6 2 23 21
18 2 King, Erica 6 2 21 21
19 1 Bergstrom, Allison 6 2 21
20 1 Leach, Michelle K. 6 2 13
21 4 Wilk, Steven R 5 1 9 20
22 2 Wasylyshyn, George R. 6 1 8
23 3 Suttle, Clark 5 0 11 25
24 4 Beighley, David 5 0 3 25
25 2 Evangelisti, Thomas 6 0 6
26 1 Evangelisti, Aaron 6 0 3

Krueger and Wilk

Michelle and Mike

Mixed Sabre Entrants

Entries
Ann Arbor Dueling Society
Mixed Sabre
Ann Arbor Duelist Open VII
8/27/2005

Pools: 1
Fencer's Name Rating Club Affiliation Pool
1 Sikora, Zdzislaw R. D04 RFC 1
2 Schultz, Timothy M. D03 UFO 1
3 Schleis, Benjamin E05 UFO 1
4 Zhao, Jing E05 UofM 1
5 Brady, William E04 Liberty Lakes Fencing Club 1
6 Beland, Jon U AADS 1

Beland and Bock

Schleiss & Bergstrom

Michelle and Mike

Mixed Epee Entrants

Entries
Ann Arbor Dueling Society
Mixed Epee
Ann Arbor Duelist Open VII
8/27/2005

Pools: 5
Fencer's Name Rating Club Affiliation Pool
1 Znoy, Joe A03 unattached 1
2 Leighton, Louise B05 EDL 2
3 Maczik, Adam W. B05 UofM 3
4 Hayenga, Gary B04 AADS 5
5 Bolakowski, John B04 AADS 4
6 Kocab, Gregory B04 RFC 5
7 Way, Joseph B03 Philadelphia Fencing Academy 4
8 Pienta, Chris C05 GLSC 3
9 Rahl, Daniel S. C05 GLSC 2
10 Schleis, Benjamin C05 UFO 1
11 Leighton, David C04 EDL 1
12 Mazzoli, Julio C04 RFC 2
13 Weckstein, Daniel H. C04 unattached 3
14 Herbert, Steve C03 RFC 4
15 Monroe, Hermina D05 RFC 5
16 Bock, Dan D04 AADS 5
17 Polasek, Ryan D04 AADS 4
18 Krueger, Terry D03 AADS 3
19 Jacobs, Justin E05 Raleigh Fencing Club 2
20 Favre, David E04 AADS 1
21 Trithart, Jacob E04 AADS 1
22 Marcusee, Maureen T. E04 GLSC 2
23 Bergman, Robert P. E04 unattached 3
24 O'Brien, Tina E03 UFO 4
25 Beland, Jon E00 AADS 5
26 Parkinson, James U AADS 2
27 O'Neil, Tim U AADS 3
28 Rozanski, Edward A. U GRAFA 4
29 Heslip, Ashley U RFC 1
30 Van Buren, Wendell U Saginaw 2
31 King, Erica U UFO 3
32 Znoy, Steve U WSU 5
33 Evangelisti, Thomas 0 SYFC 1

Mixed Foil Results

Official Results Sheet
Ann Arbor Dueling Society
Mixed Foil
Ann Arbor Duelist Open VIII
8/27/2005


Ranking Club Fencer Original Earned
Rating Rating

1 RFC Wallrabenstein, Inga A05
2 RFC Cho, Michael A05
3 RFC Megargle, Thomas J. C05
4 AADS Hayenga, Gary B04
5 UFO Schleis, Benjamin C05
6 AADS Kosla, Anthony C05
7 Liberty Lakes Murphy, Dennis C05
8 RFC Vance, Beth D05
9 AADS Beland, Jon U
10 WMFA Coon, Brad C05
11 RFC Purdy, Mike C05
12 AADS Krueger, Terry D01
13 Liberty Lakes Fencing Club Brady, William C05
14 TRFC Lewia, Sam D05
15 WMFA Stern, Glen U
16 UFO King, Erica U
17 AADS Bock, Dan C03
18 UFO Webster, Amy D05
19 TRFC Bergstrom, Allison E05
20 UofM Leach, Michelle K. E05
21 RFC Wilk, Steven R U
22 AADS Wasylyshyn, George R. U
23 Schoolcraft Suttle, Clark U
24 GRAFA Beighley, David U
25 SYFC Evangelisti, Thomas U
26 SYFC Evangelisti, Aaron U

Mixed Sabre Results

Official Results Sheet
Ann Arbor Dueling Society
Mixed Sabre
Ann Arbor Duelist Open VIII
8/27/2005


Ranking Club Fencer Original Earned
Rating Rating

1 UFO Schleis, Benjamin C05
2 Liberty Lakes Fencing Club Brady, William U
3 UFO Schultz, Timothy M. U
4 AADS Beland, Jon E00
5 UofM Zhao, Jing U
6 RFC Sikora, Zdzislaw R. U

Mixed Epee Seeding

Rk Pool Fencer Bouts Won Hits Received
1 2 Mazzoli, Julio 6 6 29 7
2 1 Znoy, Joe 6 6 30 13
3 4 Herbert, Steve 5 5 25 9
4 5 Kocab, Gregory 5 5 23 7
5 3 Maczik, Adam W. 6 6 30 17
6 2 Rahl, Daniel S. 6 5 27 11
7 3 Weckstein, Daniel H. 6 5 29
8 1 Leighton, David 6 5 28 22
9 4 Bolakowski, John 5 4 21
10 1 Heslip, Ashley 6 4 25 19
11 2 Jacobs, Justin 6 4 23 18
12 4 Way, Joseph 5 3 18 13
13 5 Bock, Dan 5 3 21 19
14 1 Favre, David 6 3 24 22
15 3 O'Neil, Tim 6 3 21 23
16 2 Leighton, Louise 6 3 17
17 5 Znoy, Steve 5 2 18 20
18 5 Hayenga, Gary 5 2 17 19
19 4 O'Brien, Tina 5 2 16 19
20 5 Beland, Jon 5 2 16 22
21 3 Krueger, Terry 6 2 26 22
22 3 Bergman, Robert P. 6 2 24
23 1 Trithart, Jacob 6 2 20 24
24 3 Pienta, Chris 6 2 21 26
25 2 Marcusee, Maureen T. 6 2 16 26
26 4 Polasek, Ryan 5 1 14 20
27 5 Monroe, Hermina 5 1 14 22
28 2 Parkinson, James 6 1 21
29 1 Schleis, Benjamin 6 1 17 27
30 3 King, Erica 6 1 11 29
31 1 Evangelisti, Thomas 6 0 13 30
32 2 Van Buren, Wendell 6 0 9 30
33 4 Rozanski, Edward A. 5 0 2 26

Mixed Epee Final Results

Official Results Sheet
Ann Arbor Dueling Society
Mixed Epee
Ann Arbor Duelist Open VIII
8/27/2005


Ranking Club Fencer Original Earned
Rating Rating

1 RFC Kocab, Gregory
2 RFC Herbert, Steve
3 RFC Mazzoli, Julio
4 unattached Weckstein, Daniel H.
5 UofM Maczik, Adam W.
6 Raleigh Fencing Club Jacobs, Justin
7 AADS Hayenga, Gary X
8 GLSC Pienta, Chris
9 unattached Znoy, Joe
10 EDL Leighton, David
11 Philadelphia Fencing Academy Way, Joseph
12 AADS Favre, David
13 WSU Znoy, Steve
14 AADS Beland, Jon X
15 AADS Trithart, Jacob
16 RFC Monroe, Hermina
17 GLSC Rahl, Daniel S.
18 AADS Bolakowski, John
19 RFC Heslip, Ashley
20 AADS Bock, Dan X
21 AADS O'Neil, Tim
22 EDL Leighton, Louise
23 UFO O'Brien, Tina
24 AADS Krueger, Terry X
25 unattached Bergman, Robert P.
26 GLSC Marcusee, Maureen T.
27 AADS Polasek, Ryan
28 AADS Parkinson, James
29 UFO Schleis, Benjamin X
30 UFO King, Erica X
31 SYFC Evangelisti, Thomas X
32 Saginaw Van Buren, Wendell
33 GRAFA Rozanski, Edward A.

And a big thank you one and all to those who participated, and to our most excellent directors:


Jim Vesper
Patrick Webster
John Zelkowski
Sean O’Brian
B.J. Chavez
Rebecca Chavez

Posted in Fencing by Martin L. Shoemaker on Saturday August 27, 2005 at 9:39am. 3 Comments 0 Trackbacks

Friday, August 26, 2005

At last, my digits are whole again!
And as you might have guessed by now, my main Tablet PC is back from the shop. What a relief! Everything is so much faster and more reliable. The old Tablet works, but it's taxed to the hilt with all the tools that I run on the new Tablet.

(Bonus points if you recognize the source for the title of this post. Double points if you recognize the source's source.)

Thursday, August 25, 2005

I'm losing it, I know...
In my defense, I had put in a lot of time in travel, and a lot of long hours on a project.

And for a long time now, I've done all of my teaching using Windows Journal on Tablet PCs, where I used to use flip charts and whiteboards. You can do so much more. (At some point, I'll blog about why Journal should put flip charts and whiteboards out of business.) Habits build up, ya know?

Still, I have to wonder whether I'm losing it. Tablet PCs have completely taken over my brain. In an impromptu conference with the client last week, I drew a quick sketch at the whiteboard, realized I got it wrong — and I swear, I reached for the Undo button.
Not sure it's practical, but it's a fun toy!

If you're so inclined (and your machine supports TrueType), download and install this TrueType font. (If you don't know how, maybe you'd better not try. I can tell you how it's done on a Windows XP machine, but not on others.)

Once you've done that, refresh this page, and look at this post again.

Now most of you, no doubt, are saying: "What the heck sort of unreadable font is that?" Students who have attended one of my UML classes may be saying: "Hey, I recognize that chicken scratching!"

But what I say when I see it is: "Hey, I don't remember writing that! I mean, yeah, I wrote it; but I didn't write it!"

See, this font was created with My Font Tool from the PowerToys for Tablet PC from Microsoft. It's as simple as it sounds: you use a Tablet PC (of course) to write each standard character from the keyboard, and the tool converts them into a TrueType font. It also lets you tweak line, character, and word spacing for better readability.

Now this is only really practical if your printing's good. I don't think anyone could stand it if my whole blog was done in this font. But it's still rather neat to look at this page, and see what's recognizably my printing. (I especially like the way it handles bold, italic, and strikethrough.)

I haven't decided which ones yet; but I'm gonna convert some of my utility apps to use this font. It will make the machine more recognizably mine.

Wednesday, August 24, 2005

Look out, world! I've got the wheel now!
My brother-in-law Carl led me to check out the latest news from Windows Automotive. It looks like the software now supports the .NET Compact Framework. That means that, when I can get ahold of one of these, I know how to program the car. Eeeevil ideas are brewing. Heheheheheeeee...
"Nobody ever got fired for buying IBM."
This one's for my buddy, Epee Bill...

"Nobody ever got fired for buying IBM." That phrase was the bane of clone-makers in the mid-80s. Companies would willingly pay five times as much for an IBM, just because no one wanted to take the fall for problems with a lesser system.

And no, that didn't mean that IBMs didn't have their flaws. It simply meant that if you bought IBM, no one would claim you cut corners and caused the mess. It was the safe choice.

Eventually, companies got more comfortable with compatibles; and eventually, IBM lowered their prices to compete. They're still pricey, but they're also still good machines (particularly the new Lenovo ThinkPad Tablet PC).

The funny thing is, I never actually heard of anyone who was fired for not buying an IBM. I'm sure it might've happened; but the phenomenon was really all about corporate folks unwilling to take a chance.

But apparently, someone just got fired for buying an Apple (link requires free registration):


After a divisive public debate, a lawsuit brought by a former county commissioner stopped the program last month, not on its merits but on the plan to fund it with proceeds from a special sales tax approved by county voters in 2003. On Aug. 14, school board members received a stinging report from a corporate investigator alleging bias and deception in the bidding process for the contract, which had been won by Apple Computer.

School board members voted immediately to terminate the contract with Apple. Three of the seven members called for Redden's dismissal. The other four said they still had questions both about the bidding process and about how the investigative firm, Kessler International, put together its report.



Where I'm blogging from
Hartsfield-Jackson Atlanta International Airport. Because I can.
Posted in Travel by Martin L. Shoemaker on Wednesday August 24, 2005 at 8:30am. 0 Comments 0 Trackbacks
Where've you been, Martin? (Part II)
Well, after getting most (but not all) of the needed files onto the backup machine, I had to run to one client, work all day, run home, install more files, fly to Atlanta, and then work-work-work for another client. This project's a bit of a departure for me, but fun: the client wants me to model an existing, pre-UML system for them, so that they can use the model as guidance in transitioning to their next generation system. So I've been immersing myself in a wholely new, unfamiliar problem domain and trying to learn to think like an old hand; and then I've been converting my understanding into UML and communicating that back to the client, so that they can confirm or correct what I've learned. It's all NDA stuff, so I can't share any samples; but it's a great example of why I emphasize UML as a form of communication. I start with only a lay understanding of their problem domain; they start with only a classroom exposure to UML; and in striving to communicate between us, we're growing our understanding in both directions. It's loads of fun!

But that can't take up all of my time, can it? No, but it took up a lot. Then my weekend got derailed by an unfortunate ATM incident (since resolved) that left me planning how to stretch $20 for I wasn't sure how long. So none of the fun stuff I planned to do and blog about took place: no visit to the Bonsai gardens (next trip) and no visit to Borders to get fresh reading material. I just sat in the hotel room and worked on various projects and watched lots of Bond films.

And now it's my last day in Atlanta, and what a day it was! Today, we had our first review meeting, which went better than I dared hope.

Then I drove to Borders, and was delighted to find my book on the shelves. (For all that I'm unimpressed by their discount program, I'm usually pleased to find that Borders carries my book in most outlets.)

And then a little advance scouting had told me that nearby was Fire of Brazil, a Brazilian churrascaria restaurant. That means that the cooks skewer various meats on swords and cook the meat over open flames; and then gauchos bring the meat-laden swords around to the tables. You get a little card, red on one side and green on the other. If you turn it to green, they stop at your table and offer to cut you off a slice of whatever they happen to be carrying. Today I had slices of tenderloin, top sirloin, pork loin, turkey, pork sausages, and so many other meats I can't remember them all. It's not for every day (well, unless you're an Atkins devotee), and it's pricey; but as a treat, it's not to be missed.

And tomorrow, I get to fly home, and get my computer back from the shop, and see my wife and dogs, and then head to Ann Arbor for the 8th annual Duelist. I'll try to post photos.

Tuesday, August 16, 2005

Where've you been, Martin?
Short answer: when you crack the LCD on your Tablet PC, it kinda puts a kink in your plans.

When you do so four days before travel to another state, it only makes life more complicated.

Transfering files to the backup machine and installing all necessary software is really time-consuming...

Friday, August 12, 2005

Tell me again why I have DirecTV?
Or any satellite service? Or cable?

Not that I don't enjoy DirecTV's service. But I was glancing over my DVD shelf, and realized that there are a lot of DVDs there.

12,120 minutes, to be precise.

That's 202 hours.

That's almost eight-and-a-half days.

And that's not counting DVD extras.

And that's not counting all my VHS tapes.

And that's only my DVD shelf. My wife has at least as many, and more VHS tapes.

As a very rough estimate, if I watched 6 hours of video a day, I could probably go a month without having to repeat a video. And that would be a month of videos that I actually chose, as opposed to just whatever happened to be on.

It makes me wonder why I need DirecTV. At this point, habit has to be a pretty major factor.
Posted in Personal by Martin L. Shoemaker on Friday August 12, 2005 at 10:46am. 0 Comments 0 Trackbacks

Wednesday, August 10, 2005

Time to write a check to the Illinois Democrats?
It will be, if this guy (story linked by eWeek) gets the Republican nomination:


A public interest lawyer who is also intending to run as a Republican in the 2006 Illinois gubernatorial race is taking his fight to Microsoft in hopes of preventing the company from releasing what he calls "bad code."

Andy Martin of The Committee to Fight Microsoft on Tuesday announced his intentions to block Microsoft from releasing Windows Vista. Martin intends to ask Microsoft for an unconditional warranty that the operating system is free of bugs that could result in security vulnerabilities.


When Mr. Martin, a trial lawyer with a bit of an Ahab complex when it comes to Microsoft, writes and releases a single secure application that survives assaults from thousands of hackers the world over, then I'll take his opinions on software seriously.

But I think the Illinois Democrats will have to get by without my contribution. Despite being insane enough to nominate Alan Keyes in 2004, I can't imagine even the Illinois Republicans will nominate Mr. Martin for dogcatcher, much less governor. I think his positronic brain needs ajustment, so he can understand how the real world works.
Pragmatism in the morning after
Last night (or this morning, depending on your perspective), Dean linked to these Razrwire Bluetooth cell phone sunglasses. As I said in his comments, only three things were stopping me from ordering a pair:

1. It's not available for T-Mobile. Right now, T-Mobile service gives me stuff I need, so I'm sticking with them for a while longer.

2. I've been too cheap to get a Bluetooth cell.

3. They don't mention an option for those of us with prescription lenses.

But with the sober thinking of the morning, it occurs to me that I'll meet all of my criteria if I go with one of these Bluetooth headsets. I don't have to get new prescription lenses, I'm sure I can get support for T-Mobile, and I'm probably going to get a Bluetooth SmartPhone eventually anyway. Plus the headsets run a lot cheaper than the Razrwire.

I won't look as cool as Dean in his shades; but really, some of those headsets look straight out of Star Trek, so they're sorta geek cool.
Catching up on Tablet PC news
Here are some Tablet PC stories that slipped past me while I was busy with other stuff (including my latest monster-sized UML post)...

--------------------------------------------------------

Tablet PC Review Spot has a review of the Acer TravelMate C314XMI Tablet PC:


The Acer C314 is an excellent full-featured Tablet PC that is powerful enough to function as a desktop replacement. The generous 1024MB of RAM, 100GB hard drive, Built-in Bluetooth and fast 2.0GHz processor are a good value for the price. This machine is great for students or consumers who want a Tablet to be their "only" PC.

Although there is value in the features that are included, it is obvious that Acer has cut back in their technical support. I would not recommend this model to any first-time computer user who might need to talk to a reliable tech support representative without having to wait for 20 minutes on hold.


I like the thoroughness of the reviews on Tablet PC Review Spot (and on their companion site, Notebook Review). They don't just review; they benchmark and compare in great depth. And heck, you gotta love a review that includes calling tech support and measuring how long it takes to talk to a human being. Now that's practical information!

--------------------------------------------------------

Pocket-lint reviews the HP Compaq TC4200 Tablet PC. You know you're in trouble when a Tablet PC review starts like this (emphasis added):


WHAT IS IT?: Tablet PC

THE GOOD: Powerful, great battery life, affordable

THE BAD: It’s a Tablet PC


Uh, guys? That's the point of the machine. And it's a good thing, not a bad thing.

The review itself isn't nearly so biased:


The move from slate design to the versatile clamshell will certainly prove a popular choice with buyers, as it will allow you to use the TC4200 primarily as a notebook but with the added functionality that comes with the Tablet PC operating system. If you haven’t been converted to Tablet PC before, now may well be the time to give it a second chance.


It makes you wonder if the person who wrote the "scorecard" at the start bothered to read the review.

--------------------------------------------------------

Lora from What Is New makes a valiant effort at a quantitative response to the snarky statement by The Register that I linked to the week before last. While I would love to embrace her conclusions, I have an innate skepticism toward all such "how many Google hits" studies. I'm just enough of a statistician to know that I'm not enough of a statistician to evaluate the validity of such studies. So my default response to all such studies is skepticism, even when I support the conclusions.

--------------------------------------------------------

Both eWeek and Computerworld discuss Fujitsu's tepid non-Tablet "but maybe Tablet soon" machine, the P1500. It has a touch screen, but not the Tablet PC OS. The reasons for this hodgepodge decision make little sense:


The LifeBook P1500 will run Windows XP Professional rather than any version of the Tablet PC operating system as a way to keep costs down and let customers leverage their current standardization on XP, according to Fujitsu officials in Sunnyvale, Calif.


The Tablet PC OS by itself doesn't represent that big of a cost differential. And as for "leveraging their current standardization on XP," the Tablet PC OS is a superset of XP. It should fit right in at any organization that has standardized on XP.

I suspect that cost is an issue; but it's the cost of digitizing hardware that meets Tablet PC specs, not the OS. I'll have more on this topic in the next item.

--------------------------------------------------------

I've seen this mentioned in a couple of places, but the Jakarta Post was where I saw it first: a review of the Dialogue FlyBook. This is a nice looking little machine; but in one respect, the review is flat-out wrong:


A Stylus? Yes, because it is also a Tablet PC. Surprisingly, though, the pre-installed operating system on this unit was Windows XP Home Edition, not the Windows Tablet PC Edition.


Here they made the same mistake as eWeek and Computerworld: a Tablet PC is more than just a laptop with a pen, as I wrote elsewhere. What makes the Tablet PC great is not the pen, it's the operating system that works with that pen — an operating system that should be properly named as Windows XP Tablet PC Edition. In other words, first, it's Windows XP. In fact, it's Windows XP Professional, not that wimpy Windows XP Home Edition. Any worries about standardization are misplaced.

But then beyond that, Windows XP Tablet PC Edition adds the Tablet PC API. And that, boys and girls, makes a world of difference. I already explained the reasons why, so I won't repeat myself; but suffice it to say that without the Tablet PC API, you're missing the Tablet PC experience.

Along with the wrong OS, the FlyBook shares with the LifeBook P1500 the wrong input technology (emphasis added):


The 8.9-inch widescreen, which displays sharp lines and characters as well as brilliant colors, can be rotated and folded flat on top of the keyboard. It is a touchscreen, actually, so it is not exactly the same as the screen on a typical Tablet PC. We can move the cursor and emulate double-clicking with our finger.


In other words, it's emphatically not A Tablet PC. With a touchscreen, you give up a lot:


  • In-air gestures and in-air cursor movement.

  • Eraser-end pens.

  • Barrel-button pens.

  • The ability to rest your hand on the screen while writing.



But perhaps most importantly, you give up resolution. Typical Tablet PC digitizers have a resolution suited for detecting a fine-point stylus. The resolution is actually smaller than a pixel. Typical touchscreens, meanwhile, have a resolution suited for detecting fat fingers — i.e., pixel-sized or larger.

None of this is to say that the FlyBook or the LifeBook are bad machines. They may be very nice machines. But they're laptops or notebooks with touchscreens. They're not Tablet PCs. And the difference is important.

Say it with me, children... A Tablet PC is more than just a laptop with a pen... A Tablet PC is more than just a laptop with a pen... A Tablet PC is more than just a laptop with a pen...

--------------------------------------------------------

SHAMELESS PLUG: And if you want to learn more about why a Tablet PC is more than just a laptop with a pen, and if you want to write your own great Tablet PC applications, then I have to recommend our Tablet PC Programming BootCamp in Boston.

Tuesday, August 9, 2005

Yes, I'm bizarre
This post will have an inordinate number of typos. To demonstrate a point, all paragraphs after this one will appear exactly as I type them the first time, with no editing.

I'm dfascinated by how the brain works and adapts.

Before I ever went to school, I was fascinated by my bnrother's tupewtiter. U know my letters, and I wanted to use that machine to tell stories. So I started typing at around age 6. At that age, I couldn't reach the tanle, so the great bnig manual typewriter went in my lap. To thus day, ketboards go in my lap (except when they don't — see below).

So I was too busyt typing to learn to tuype. People would laufgh at my 2+ finger typing, though they had to admit two things: I was fast (six pages per houe on a manual typewriter), and I was accurate (an average of five errors per page, despite what you see in this post). I always took a twisted pride tht I was so fast and accurate even though I wasn't a touch tuopist. And that certainly served me werll as a prohrammer.

But then a cowroker saidf, "Yes, you are a touch typist." He watched me, and had discovered that though I wasn't using traditional ten-finhered style, I was seldom if ever actually looking at the keyboard. Quite without intentional training, my brain had simply learned QWERTY and a form of touch typing simply through habit and practice.

At first, I disbelieved him. And like the old joke about the centipde who couldn't walk once he thought about how to coordinate his feet, I lost the ability to type any time I thought about where the keys were. But if I just let go and typed, I knew where the keys were.

Ober the years, I got used to this. But tonight, I'm laying doewn and listening to TV as I blog. Since I;m on my back, the only place for my Tablet PC to go, really, is on my chest. So the keyboard is actually parallelto my sterbnum. My head is propped up on a pillow so I can see the creen, but there's no way I can read the jkeys. Ny left elbow is firmly planted on the cushion, with my left thumb under the keynoard, and my left indesx and middle fingers reaching out for keys from aboyt T left. My right elbow is airborne, so my right middle finger can reach out for allof the other keys. The whole thing would give an ergonomicist the heebie-jeebies, and would give a carpal tunnel surgeon dreams of his next yacht.

And with all of that, mty trypintg is no worse than you see here, and my rate isn;t down at all. (It might be up, in this post, since I'm not slowing down to correct.) This can'tr be muscle memory (the usual explanation for such automatic performance): I'm not even using the same fingers on the same keys as I notmally use. It has to be something else. Somewhere in my brain is a map of the QWERTY keyboard (gee, I only spend about 14 hours a day in front of one, where would my brain get a map) that can be rotated spatiallu and navigated by my fingers not by muscle memory, but by the sort of subhconscious coordination of eye and brain and body that lets us not think abourt how we move, just move.

This stuff fascinates me, it reallyu does. If you asked me to draw or lay out a QWERTY keyboard, I don't think I could. But ask me to just use one, and I can do it, even in unfamiliar positions and circumstances. Some part of the brain takes over, some part I can't ecen tell is there, and just does the job. Wow!
Posted in Personal by Martin L. Shoemaker on Tuesday August 9, 2005 at 12:02am. 0 Comments 0 Trackbacks

Monday, August 8, 2005

What's the point(er)?
Richard Hale Shaw continues his Moving Away from C++ to C# series:


You might ask: ok, if we don’t need them, then why are pointers still supported in the C# language? The answer is that pointers were retained for the purpose of accessing legacy code (calls to API methods or COM interface methods) that take pointer parameters or return pointer values.


A related concern is that some legacy hardware actually still demands particular addresses. I don't see this much in the traditional PC world, but I still see it in automated manufacturing systems built around PC hardware. Those people have a "good enough for the 1980s" view of computer technology.

(Full disclosure, in case it wasn't clear from the header of this blog: Richard is the agent for my UML courses, all of which are run through the Richard Hale Shaw Group, which also offers high quality intensive training on a wide range of .NET topics, as well as on XML and other topics. And as I announced recently, we've got a Tablet PC programming course coming up in Boston. (And yes, that was a shameless plug.))
Posted in C# by Martin L. Shoemaker on Monday August 8, 2005 at 11:26pm. 0 Comments 0 Trackbacks
Tablet PC BootCamp in Boston
Moved to the top because it's marketing, ya know? It doesn't make sense to let your marketing messages scroll off the cliff...

Well, I can now announce the big news: The Richard Hale Shaw Group will be holding a Tablet PC BootCamp at the Microsoft offices in Waltham MA, created and taught by yours truly. This will be a hands-on class for C# and VB.NET programmers, running November 1-4.

If you're planning or considering a project using Tablet PCs, this is the class for you. I'll teach you easy ways to get productive with Tablet programming quickly; but then I'll take you beyond the easy stuff, and into the real power of the Tablet API. Check out that course description.

But we'll do more than just program the Tablet PCs. We'll also discuss what makes a good Tablet PC app (or a bad one), and we'll discuss design considerations for Tablet development. (Given my perspective, there will inevitably be some UML creeping in there, too.)

We're still finalizing details, so registration won't open until next week. This will be a BYOT (Bring Your Own Tablet) class, but we're hoping to have a few rental units, too. I'll announce details when we have them.

Like all RHS Group classes, show up prepared to work, to be productive, to learn a lot, to have great food, and to have great fun!

UPDATE: Like all Richard Hale Shaw Group classes, this one is also available at your site. You can train a busy development team all at once, and save money in the process! Contact Richard for details.


Everyday UML, Installment 2: Identifying and Organizing Domain Objects
This will be the second in a series of posts that will demonstrate simple use of the Unified Modeling Language in the context of a simple project. (Thanks to James Hudnall for the inspiration.) For the first installment, click here.




Objects and Classes



In our last installment, we identified and organized actors, the people and systems with which Your Comic Source will interact. Then I promised that in this installment, we'd identify and organize examples of our second UML concept: domain objects, the information and things that are of interest to the actors and that are affected by the things they do.

Now when I said "objects" above, some of you ran screaming from the room, thinking, "Oh, no, that means object-oriented programming! That's hard!" Well, personally, I think that "objects are hard" is very much old-school thinking. Literally old-school: the object-oriented (OO) approach is a hard transition for programmers who have mastered and adjusted to functional or structured programming. But in my experience, it's actually easier to teach new programmers using OO, because it's a more natural match to how we think and speak about the world.

And when I said "objects" above, others of you shook your heads in disapproval, thinking, "Oh, no, that means object-oriented programming! That means design and code. It's too early for that." There is a tendency to think:


objects = classes = code (Wrong!)


As I argue in my book and in my classes, objects are not just a code construct. Objects are everywhere, becuase they're just things and concepts in the world around us (and thus in the problem domain). Really, the proper formulation is simply this:


objects = nouns (Right!)


Objects are things. The actors and customers and end users are concerned about and work with things. Therefore, actors and customers and end users are concerned about and work with objects. And therefore, objects are an essential part of analysis, not just design and code.

But above, I also mentioned classes. "Aha!" cry the nitpickers. "Now classes are code! And it's too early for code. We told ya so!"

And again, I have to disagree. "Class" is really just another name for "category" or "kind" or "type" (though "type" also has code connotations). It just means a grouping of very similar objects that can be described in similar traits and terms. "Dog" is a class; Betsy, Bluebell, Jake, Radar, and Frosty are particular objects of the class Dog. They differ by many characteristics — breed, sex, height, weight, coat, color, age, and name being the main ones — but they're all Dogs just the same. Meanwhile, Gomer — who has a breed, a sex, a height, a weight, a coat, colors, an age, and a name — is fundametally not a Dog. He's of class Cat. We recognize Dog and Cat as different categories, even though it might be convenient to lump them together in the code.

So while it's true that OO programming languages have a concept called classes, it's not true that classes = code. Classes are a useful part of our analysis model, too. (Insisting that objects = code or classes = code is an example of the That’s Design, Not Analysis antipattern, as I discuss in Requirements Patterns and Antipatterns.)

But categories can themselves be grouped into categories. Or to speak in OO terms, a class can have a base class (or sometimes called a superclass, or a general class, or a parent class, or a number of different synonyms based on the speaker's programming language and habits) that describes common characteristics shared with other classes. For example, Dog and Cat have a base class of Mammal; and it's in Mammal that we describe the characteristics of breed, sex, height, weight, coat, color, age, and name. Because those characteristics are part of Mammal, they are implicitly part of Dog and Cat.

And just as a class can have a base class, it can have multiple subclasses (or sometimes called a derived classes, or a general class, or a child class, or other synonyms) that add more specific characteristics and details. The relationship between base class and subclass is sometimes called "inheritance", because the subclass inherits characteristics from the base class. The relationship is also sometimes called "specialization", because the subclass is a more specialized form of the base class. And in "official" UML parlance, the relationship is called "generalization", because the base class is a more general form of the subclass. (I really must apologize for all these different synonyms. They arose through different branches of OO evolution, and we're just kinda stuck with them. I'll try to consistently use "base class", "subclass", and "inheritance"; but I may slip up from time to time.)

I find that it's usually easier to analyze requirements in terms of classes of objects, not specific objects themselves. So even though I say we're going to identify domain objects, we're really going to look at domain classes more than objects. (I apologize if my terminology is confusing, but it's a habit I find hard to break.)

But what defines a class? Well, UML defines four basic parts to a class:


  • Name. This part is obvious: what do we call the class (as distinct from individual objects of the class)?

  • Attributes. What are the characteristics that describe objects of the class, and that may help us to distinguish one object from another? In our Dog example above, breed, sex, height, weight, coat, color, age, and name are all attributes.

  • Operations. What are the things that all objects of the class can do? In our Dog example, all Dog objects can hunt and play and bark.

  • Relations. How do individual objects relate to each other? How does the entire class relate to other objects and classes? A Dog object can have one or more Owner objects (and vice versa, trust me). Inheritance is an example of a relationship between two classes.



Brainstorming About Domain Objects



So now that we're all on the same page regarding domain objects, we can start identifying them. As with actors, if I'm completely new to a problem domain, I won't try to identify a lot of domain objects up front. Instead, I'll go straight to identifying use cases (the subject of our next installment), and then see if any domain objects are discovered through the use cases (as we'll see, possibly in installment 3, possibly installment 4 — I don't have a firm outline yet). I use the use cases partly as an exploratory mechanism, helpng me to explore and learn an unfamiliar domain. (I explain this approach in UML Applied.)

But when you know something about the problem domain, it may be easier to start by brainstorming and listing candidate domain actors. And as I explained in the last installment, I know a fair amount about comic stores! So I'm pretty comfortable in identifying and describing a lot of domain objects. As with the candidate actors from installment 1, this list won't be perfect: I'll miss a lot of domain objects, and I'll list some that we'll end up never needing. But this list is just a starting point for discussion.

So with a little thought, I came up with the domain objects shown in Figure 9:

Figure 9: YCS Domain Objects

Figure 9: YCS Domain Objects


The standard UML symbol for an actor is a three-compartment rectangle. The top compartment lists the name, the middle compartment lists the attributes, and the bottom compartment lists the operations. In Figure 9, I also drew some relations between classes, which I'll add to as my domain knowledge evolves.

Note that the domain objects in Figure 9 don't appear in any particular order, as should be expected from brainstorming. These domain objects are described below:


  • Action Figure. A plastic, metal, or plush figure, usually of a character from some Comic Book or other Book. Often partly or fully articulated. (Don't ever call them "dolls" if you want to get out of the store without a lecture!)

  • Board Game. A Game in which the rules and actions involve moving pieces or counters around a board.

  • Book. A single volume publication consisting primarily of text, usually paperback or hardbound.

  • CCG. a.k.a. Collectible Card Game.

  • Comic Book. A single volume publication consisting primarily of fully illustrated stories (with text as only a secondary element), usually bound in glossy paper or card stock. A single Comic Book may tell all or part of a story.

  • Comic Series. A continuing, regularly published series of Comic Books (i.e., numbered "Issues") that involve a common theme, common characters, or common creators.

  • Customer. A person who buys Comic Books, Books, Games, or other merchandise at the store. (See below for more discussion of Customer.)

  • Customer Order. An Order placed by a Customer to purchase various merchandise.

  • Distributor. In most cases, comic stores do not deal directly with individual vendors. Instead, they work Distributors who research and buy from vendors and then solicit orders from the stores.

  • Distributor Order. A merchandise order that the store places with the Distributor.

  • Employee. This object represents the information that is known about a particular Employee. (See below for more discussion of Employee.)

  • Game. A product which allows one or more players to compete against each other or against a set of challenges, all according to a set of rules.

  • Game Calendar. A calendar of upcoming Game Events.

  • Game Event. A scheduled playing session at which one or more players will play one or more Games.

  • Graphic Novel. A single volume publication consisting primarily of fully illustrated stories (with text as only a secondary element), usually bound in hard back or heavy card stock. A single Graphic Novel usually tells one complete story, and usually contains more pages on higher quality paper stock than a typical Comic Book.

  • Magazine. A single volume publication consisting primarily of ads, illustrations, stories, articles, and editorials, all of which involve a common theme, common topics, or common creators. Most Magazines are periodicals (with a regular publication schedule), but some are special editions. A magazine is usually bound in and printed on glossy paper.

  • Payable Account. An account of funds that the store owes (usually to a vendor, a Distributor, or an Employee).

  • Receivable Account. An account of funds that the are owed to the store (usually by a Customer).

  • Release Calendar. The schedule of when particular merchandise is expected to arrive in the store.

  • RPG. a.k.a. Role Playing Game. A Game in which the rules and actions involve players telling an interactive story in a setting and plot devised by a gamemaster.

  • Subscription. A request by a Customer to purchase in advance every issue of a Comic Series or a Magazine.

  • Supplement. A Game that does not stand on its own, but rather adds additional rules and options to some other Game.

  • Supplies. Merchandise such as counters, dice, comic bags, and other materials which may be used with a Game or Comic Book or other merchandise, but which would usually not be of interest to anyone who hadn't purchased said merchandise (i.e., most people have no use for comic bags unless they buy Comic Books to put in them).

  • Time Sheet. A record of the hours an Employee worked.

  • Trade Paperback. A single volume publication that collects a number of issues of a Comic Book, usually bound in hard back or heavy card stock. The material contained is not original, but a Trade Paperback is otherwise very much like a Graphic Novel. A single Trade Paperback usually tells one complete story, and usually contains more pages on higher quality paper stock than a typical Comic Book.

  • Video Game. A game played by one or more players on a computer or a game console.

  • Work Calendar. A schedule of hours to be worked by various Employees.



Note that two of these classes, Customer and Employee, have the same namea as actors from Installment 1. These objects represent the information we know about those actors, not the actors themselves. You may find it confusing that the actors and the classes have the same names. I do, too, honestly, so my usual practice would be to call these "records": Customer Record and Employee Record. But to some people, record = database = design, and they jump back to the That’s Design, Not Analysis antipattern. So when I think that might disturb them, I avoid the phrase "record". In retrospect, I'm feeling that the name confusion is every bit as bad as That’s Design, Not Analysis; so maybe a better choice would be Customer Info and Employee Info. "Info" is such a nice, vague word that no one can really mistake it for a design decision. So I'll switch to those terms as we move forward.

Relating and Organiing Domain Objects



To repeat: the domain objects in Figure 9 appear in a scattershot stream-of-consciousness order, with little thought about how particular domain objects might relate to each other. And just as with the actors in Installment 1, it will be useful to organize the domain objects into packages and also to expand upon the relations between them. So I'll start by subdividing the domain objects into the packages shown in Figure 10:

Figure 10: YCS Domain Object Packages
Figure 10: YCS Domain Object Packages


Accounting Objects



We'll look at each of these packages in more detail below, starting with the easiest: Accounting. This package's contents are shown in Figure 11:

Figure 11: YCS Accounting Objects
Figure 11: YCS Accounting Objects


In this diagram, I added a new class, Account, to represent characteristics and behavior that are common to both Payable Accounts and Receivable Accounts. I also added two classes found in the Parties package but related to classes in this package: Employee Info and Party (discussed under the Parties package below). I drew these two classes in dark red to make them stand out, as a way to indicate that they're external to this package.

There are two kinds of relationship shown in Figure 11:


  • Generalization. As above. Shown with a triangle-headed arrow.

  • Association. Shown with a line or arrow, this relationship between two classes indicates that the classes collaborate in some way. You should prefer a line when the two classes interact freely. You should prefer an arrow when one class controls or "owns" the interactions. In Figure 11, for example, there are navigable association from Payables Account and Receivables Account to Party, indicating that the accounts are Paid To or Owed By particular Parties. There is also a simple association between Time Sheet and Employee Info.



(Other types of relations are possible, as we'll see in future installments of Everyday UML.)

Note also that I added specific attributes and operations to some of the classes: an Account has a Balance, and you can Deposit or Withdraw funds (in specific Amounts) or transfer them to another Account; and a Time Sheet indicates the Hours Worked. But I didn't add any attributes or operations to the other classes. In part, this represents that I simply haven't thought through those other classes yet. But it also reflects an important UML practice: not every detail you know appears in every diagram. I called this The Model Rule in UML Applied:


We saw The Model Rule in chapter 1; but it bears repeating. To use UML effectively, you should never be simply drawing pretty pictures; you should always be editing an underlying model, using the pretty pictures as your user interface. Thus, the model should contain more information than is displayed in any one diagram; and information in one diagram should not explicitly contradict information in another diagram. Information that is found in one diagram but not in another should not be considered a contradiction. Rather, this simply indicates that the former diagram displays more detail than the latter. Details may be omitted from a given diagram to make it more comprehensible.

But how do you keep these diagrams consistent with each other? How do you maintain the underlying model? This is where a good modeling tool proves its worth: a good modeling tool will maintain the model as you create and edit your diagrams. If you are not using some sort of modeling tool, this very mechanical burden will fall on you, rather than on the machine. That’s a poor division of labor: brains should do brain work and machines should do mechanical work. If you do the mechanical work, you will do it imprecisely and inefficiently, and you’ll have no time for brain work.


Note the plus sign (+) in front of the attributes and operations in Figure 11. This indicates visibility, a concept which has a lot of design and code implications, but can be summarized pretty simply: the visibility of an attribute or operation indicates where it can be seen and used. Public visibility (+) means an attribute can be read and changed by any part of the system, or an operation can be requested by any part of the system. Private visibility (-) means an attribute can only be read and changed by the class that defines it, or an operation can be requested by the class that defines it. And protected visibility (#) is like private, but the attribute or operation is also visible to all subclasses of the class that defines it. For analysis work, public visibility is the most common, and you shouldn't worry too much about visibility concerns.

Calendar Objects



The contents of the Calendars package are shown in Figure 12:

Figure 12: YCS Calendar Objects
Figure 12: YCS Calendar Objects


As in Figure 11, Figure 12 indicates an external class (Game) in dark red. I also added attributes to the Game Event class, and I indicated that a Game Calendar contains zero to many (0..*, in UML notation) Game Events.

But the largest addition in Figure 12 is the two added base classes: Schedule and Chronology. These are based on the Chronologies pattern from Requirements Patterns and Antipatterns. Here's a brief excerpt:


Start with an Event class. It should have attributes that describe an event, and that distinguish one event from other similar events. Some of these attributes might include a name, a description, and start and end times for the event. You might also want to indicate whether the event is recurrent (and if so, on what interval) and also whether the event has been completed or not. And you may want your Events to be able to issue notices when they’re due. Event may also be a base class, from which you derive more specific event types. And Event objects may relate to other Event objects. For example, an appointment Event might involve one or more reminder events that remind the user that the appointment will soon occur.

Next, add a class, Chronology, that represents a list of events. It should include operations to add and remove Events. This general class contains Events both past and future. You may also want to add specific Schedule and History subclasses to represent future and past event lists. If you want to maintain both historical and planned events, then your Schedule class should include an operation to complete an Event and move it into a specific History.


Given that excerpt, it makes sense to add an Event base class, modifying Figure 12 to look like Figure 13:

Figure 13: YCS Calendar Objects (Revised)
Figure 13: YCS Calendar Objects (Revised)


The change from Figure 12 to Figure 13 is an example of applying a pattern. Again, from Requirements Patterns and Antipatterns:


So putting the two definitions [of "pattern"] together, we see that patterns are a little bit of art and a little bit of science. The science part comes in as three tasks:


  • Discovery. Finding some best practice, and recognizing that it is common enough to be worthy of documenting as a pattern.

  • Cataloguing. Documenting a number of patterns in detail, including how to recognize them, how to apply them, and even when not to apply them.

  • Study. Learning to recognize the patterns, and understanding them well enough that they become part of your nomenclature.



Then the art part comes in when you apply the patterns. You have to learn how to speak in terms of the patterns, how to see where they fit, and how to apply them. It takes a good eye to see the opportunities that patterns create for you; but when you do, they will save you a lot of effort, because they will give you a lot of basic, common, starting ideas without you having to invent those ideas yourself. That will leave your brain free to focus on the aspects that are unique to your problem and your team.


I like to tell students that good patterns let them walk into a new project with some great ideas "in their back pockets", ready to pull out as soon as they see a need. You can apply a lot of established wisdom by building on patterns (where appropriate). We'll see more pattern usage ahead, in both this and future installments.

Party Objects



The contents of the Parties package are shown in Figure 14:

Figure 14: YCS Party Objects
Figure 14: YCS Party Objects


In this package, we see more detail on the Party class that was introduced in Figure 11. This is based on the Party pattern from Martin Fowler, as described in Analysis Patterns : Reusable Object Models. This is a pattern that abstracts out the common characteristics or people and organizations into a base class, Party. A Person, then, is a subclass of Party that represents an individual; and an Organization is a subclass of Party that represents a group of Parties. Person and Organization then serve as base classes for our existing classes: Employee Info, Customer Info, and Distributor Info.

Besides the Party pattern, Figure 14 is also based on the Contact Info minipattern from Requirements Patterns and Antipatterns, in which a single Party can have multiple types of Contact Info, a base class with subclasses that represent different ways a Party might be contacted.

Order Objects



The contents of the Orders package are shown in Figure 15:

Figure 15: YCS Order Objects
Figure 15: YCS Order Objects


I added the base class, Order, as well as a Line Item class to represent items in an order. The Order is placed by a particular Party. (The upper part of the diagram is a simplification of the Orders pattern from Requirements Patterns and Antipatterns.)

I also changed Subscription to be a subclass of Customer Order, one which references a particular Periodical to which the customer subscribes. (The Periodical class is described below.)

Merchandise Objects



The top-level of the Merchandise package are shown in Figure 16:

Figure 16: YCS Merchandise Objects
Figure 16: YCS Merchandise Objects


I added a base class, Merchandise, to represent things sold at YCS. I also added a subclass, Publication, to represent printed Merchandise.

Game Objects



The contents of the Games package are shown in Figure 17:

Figure 17: YCS Game Objects
Figure 17: YCS Game Objects


Publication Objects



The contents of the Publications package are shown in Figure 18:

Figure 18: YCS Publication Objects
Figure 18: YCS Publication Objects


I added a Periodical class to represent a scheduled release of issues of some Publication. A Comic Series, then, is a subclass of Periodical; but after a little thought, I decided that a Magazine is also a subclass of Periodical, and it is individual Magazine Issues (a new class) that are published on the schedule.

Note also that I show a new UML relation in Figure 18: dependence, shown as a dashed arrow. While an association (either navigable or not) indicates some structural or functional connection between two classes, dependence indicates a simple "awareness" from one class to another. In Figure 18, we have an association from Periodical to Publication, indicating that a Periodical will consist of some number of Publications. So it would be redundant and even possibly confusing to also have an association from Comic Series to Comic Book, or from Magazine to Magazine Issue. Instead, I redrew those relations as dependence, indicating that a Comic Series "knows about" the Comic Books that make it up, and a Magazine "knows about" its individual issues. (We'll see more about dependence in future installments of Everyday UML.)

Other Merchandise Objects



Although this won't add much of interest, the contents of the Other Merchandise package are shown in Figure 19 for the sake of completeness:

Figure 19: YCS Other Merchandise Objects
Figure 19: YCS Other Merchandise Objects


What's Next?



In my next installment of Everyday UML, we'll finally get to some use cases. I can't give a schedule for that, so keep your eyes open!


Related Posts (on one page):

  1. Everyday UML, Installment 2: Identifying and Organizing Domain Objects
  2. Everyday UML, Installment 1: Identifying and Organizing Actors

Friday, August 5, 2005

A Tale of Two Discount Programs...
...or The Best of Discounts, the Worst of Discounts

An open letter to Borders Books:

First, let me make it absolutely clear that I love Borders. I've been shopping at your stores since 1981, back when you only had "store", not "stores". And I still maintain that your original store (now in a new location, of course) has the best selection of computer programming books in any brick-and-mortar store I've ever seen (and as a traveling UML and Tablet PC instructor, I see a lot of book stores — note how cleverly I met my shameless plug quota for this post). For Christmas one year, Mom and Dad gave me a $50 bill and a shove in the direction of Borders (and to show my age, that $50 netted me a grocery bag full of paperback books). I seldom visit Ann Arbor without a Borders visit. I'm a huge fan, despite your complete blindness to any Michigan market west of Ann Arbor (guys, open a Grand Rapids store already — and no, Waldenbooks stores don't count, since they don't have the same selection). And now you've added DVDs to their inventory, easily the best DVD selection I've seen anywhere. And you have TMobile Hotspots in many stores, and I'm a Hotspot member. And your staff has been knowledgeable and helpful, without fail. Heck, you even validate parking in downtown Ann Arbor, which is valuable in itself. I think it's safe to say that I'll always be a Borders customer, with or without a discount program.

Which is good news for you, since your discount program sucks.

To understand why, let's look at a discount program that doesn't suck: the Barnes & Noble Member Program. (And hey, Borders: B&N has six stores on my side of the state, three within 30 miles of my house. Guess who gets more of my money?) Here are the plan details: I pay them $25 per year, and I save 10% on nearly every item online at Barnes & Noble.com and in Barnes & Noble bookstores — including books, CDs, DVDs, bargain books, sale items, and everything in the store Café.

Now this very simple program has one down side: it's not free. But with my buying habits, it pays for itself multiple times over in a year. (OK, I'll be honest: sometimes it pays for itself in a single visit.)

Now here's the Borders program, Border's Rewards: I sign up (for free). Then, when I spend a combined total of $50 or more in one calendar month at Borders, Borders Express, or Waldenbooks, you'll reward me with a Personal Shopping Day. I can redeem that Personal Shopping Day within 30 days after it is issued. On that one day, I'll save 10% on almost everything in your stores, in as many visits and stores as I want. Every calendar quarter, I can earn another Personal Shopping Day. And you gave me one free when I signed up.

But wait, there's more! For each calendar month through October that I spend a combined total of $50 or more, 5% of my qualifying purchases accrue in my Holiday Savings Account. Once that reaches $10, I'll be awarded Holiday Savings in increments of $10 that I can use between November 15, 2005 and January 15, 2006. Also, I'll get exclusive email coupons and special offers. And I can manage my account online.

OK, let's start with the good parts: it's free; it's really easy for me to rack up $50 each month to qaulify for that Personal Shopping Day; and while I haven't tried it yet, the online account management sounds good in principle.

But after that, it's all down hill:


  • I have to "qualify" for a discount. I don't just get it. Yes, it's easy for me to qualify, but it means I have to think about it when I'm shopping: "Hey, do I have a Personal Shopping Day or not?" With B&N, I know I'm saving money every time I walk in the door.

  • Once I actually qualify for a Personal Shopping Day, I have to use it in 30 days, or it expires. Now that might be less of a problem if you had a store on my side of the state (and don't think I'm done complaining about that). But as it is, I'm pretty sure I've already lost one Personal Shopping Day, simply because I haven't been to Ann Arbor recently. Again, with B&N, my discount never expires, except for the annual renewal. And there, the B&N cashier helpfully reminds me that it has expired when I make my next purchase, offers to renew on the spot, and then immediately applies the discount to that purchase when I inevitably accept. Couldn't be simpler.

  • It sounds great that your Personal Shopping Day applies to all visits to all stores on that day; but really, how many people will visit multiple Borders stores or make multiple visits to a single Borders store on a single day? All right, I'll admit it, I've done it. I've even made three visits (with purchases) to two stores in one day. But I've already proven that I'm an addict. The Borders Rewards program had no influence on my shopping that day. So will the casual shopper become a more committed customer due to this "benefit"? I doubt it.

  • The Holiday Savings Account is, over all, a pretty good thing. But contrast it with the Suncoast Replay program. Replay isn't free; but they do issue you a reward certificate just for signing up, and those almost make up for the entry fee. And their reward certificates arrive all year long, not just during the holidays. On the whole, I appreciate theirs more, because the rewards show up in the mail more often. Think about it: their customers are pleasantly surprised and reminded of their store all year long; yours are pleasantly surprised only during the hectic holiday season.

  • Exclusive email coupons and special offers? Please. You were sending me those (admittedly not as good) before I joined the program. And ya know what? I never, ever, ever remember to print those out and bring them with me. And why should I, honestly? This is the modern age of WiFi. A lot of your customers (me included) have our wireless devices with us; and you already have TMobile infrastructure in many of your stores. So why can't I use the coupons through my computer, somehow? I haven't figured out a good way, yet, but I can't solve all of your problems. Work on it!

  • The Borders Rewards program doesn't apply to online purchases through Borders.com, which is actually a partnership with Amazon. Now it may well be that the Amazon pricing is better than the B&N discounted pricing; but it appears like you're taking something away.

  • Your cashiers only seem to remind me about the program about 50% of the time. That's important, since I need to qualify for Personal Shopping Days. By contrast, B&N has never forgotten to ask about my card.



And finally, Borders Rewards is just too complicated. Even if by some calculation it's a better deal, people won't be able to follow it. My buddy Bill Heitzeg of Emerald Software, Inc. has done a lot of work with phone rating systems, and knows people who can find me a phone plan that, based on my unique personal calling habits, will give me the lowest possible bill; but the rules I'll have to follow and the hoops I'll have to jump through are more than I can keep straight, so I (and customers like me) go with simple plans from big names like AT&T or SBC. Similarly, the Barnes & Noble plan is just simpler to understand. When plans are complicated, people worry that they're not getting everything they could get, and they suspect the company is pulling a fast one on them. That's not a way to build customer loyalty, which is the whole point of a discount program.

Sorry, guys, but you'll have to go back to the drawing board on this one.

Your loyal customer despite this mistake,

Martin L. Shoemaker

P.S. When are you going to open a Grand Rapids store?

UPDATE: Borders has politely responded to my open letter.


Thank you for contacting Borders Customer Care with your comments.

Feedback from valued customers like you is essential to us as it allows us to keep in touch with areas where we can improve our services. Your suggestion will be included in our regular reporting to our various departments and in information presented to the executives at Borders. While I cannot guarantee that a change will be made, we appreciate your sending us your ideas.

Thanks again for taking the time to write to us. If you should have any other thoughts on how we can improve the shopping experience at Borders stores, please don’t hesitate to share these with us.

Sincerely,

*******
Borders Customer Care
http://www.bordersstores.com


That's fair enough. I don't expect them to change their policies in response to one guy on a blog. I do, however, expect them to listen when customers speak, and think about it. They always have in the past, and they continue to do so now.

Now about that Grand Rapids store...
Posted in Books, Opinion by Martin L. Shoemaker on Friday August 5, 2005 at 1:07pm. 2 Comments 0 Trackbacks
Seen around the tech blogs this week...
From The Earth To The Moon reports that Buzz Aldrin has released a children's book on space travel. (They also continue to advertise a deluxe DVD edition of From the Earth to the Moon, the stunning miniseries from Tom Hanks. Drool...)

Dotfuscator and James Avery's book get a mention on Slashdot.

Speaking of books, Bill Wagner reviews Keith Brown's .NET Developer's Guide to Windows Security. "As I said at the top of this review, “The .NET Developer’s Guide to Windows Security” should be required reading for every .NET developer."

And speaking of James Avery, he got asked about blogs and RSS in a job interview this week. Hey, James, I hope that doesn't mean you'll take a new job out of town before I show up next month!

Tablet PC Buzz links to this Channel Insider report on unexpectedly high demands for the new ThinkPads, including the new ThinkPad Tablet PCs. "The ThinkPad Tablet has sold so fast since its introduction that Lenovo quickly ran out of stock and is now working to catch up, he said. The product, intended for vertical markets such as health care, has caught on in the mainstream marketplace, he said."

Howard Lovy takes a hiatus from his blogging hiatus to post outtakes from his Wired story on nanomedicine and cancer. These are parts that were cut for space, but they add nice depth to the overall article. I hope Mr. Lovy finds full-time employment soon, so that he can spare more time for blogging on nanotechnology.

Julie Lerman points out The Regulator, a regular expression testing and learning tool. RegEx has always frustrated me, since it seems to be very powerful yet is incredibly poorly documented. And no one seems to be able to recommend a good book on it. Instead, I hear, "Read chapter such-and-such from that O'Reilly book on SED," or something like that. The Regulator looks like a great help. Thanks, Julie! And thanks, Roy Osherove, for writing it. (Julie also experienced a tornado recently. We have a family friend who was trapped when her house was collapsed by a tornado, and I've had tornado-phobia my whole life. A post like Julie's will give me nightmares tonight. Thanks, Julie...)

Chris from PowerBlogs (my blog service provider; and yes, I'm very pleased with the service) reports that reports are working again. That will be good, because I haven't actually seen reports since I signed up. Now lest you think that's a complaint, I entirely understand the reasons why: Chris was away on his honeymoon; and unlike some people I know, he actually stayed away from tech for the duration. (Actually, judging by the timing, Chris was setting up my account somewhere right in the middle of last-minute wedding stuff.) I look forward to checking out the reports.

Sam Gentile posts on the power of blogs. "So what's the message? An investment in reading quality bloggers every day will increase your knowledge and make you a better Developer/Architect/Marketer, and also your own blog could do wonders for your career and exposure."

me: under a microscope (found via Eric Maino) struggles to balance school and work and like. At that age, I thought it would get so much simpler when I could drop school out of the mix. Sorry to tell ya, bud, but it only got more complicated. Keep working on your balancing skills. They'll serve you well.

Mike Swanson posts on the new WinFX, as well as other new stuff. Mike also bucks the trend in ironic, imaginative, and generally silly blog names, with "Michael Swanson's Blog". I respect that.

hack-a-day links to a robotic drum set that would make Herbie Hancock proud. (And if you don't get the allusion, you must not have spent the early 80s letting MTV rot your brain.)

Thom Robbins points out some new Sharepoint application templates. Some day, I'll understand what that means...

Patrick at The Tablet PC in Teaching & Learning asks about a tool for using Ink in IE. A commenter links to IE Ink 2004, which lets you Ink on any Web page and then save a local copy. I'll have to try that out. Patrick also points out a new Tablet PC commercial from Microsoft, aimed at the education market. This ad almost makes me want to go back to college!


UPDATE AND SHAMELESS PLUG: And And since there's Tablet PC information in this post, Richard Hale Shaw would have my hide if I didn't recommend our new Tablet PC BootCamp.

Related Posts (on one page):

  1. Seen around the tech blogs this week
  2. Seen around the tech blogs this week...

Wednesday, August 3, 2005

While I'm poking around Down Under...
(And no, I'm not apologizing for any disturbing images that title may elicit.)

...Craig Errey (referenced in this post) kindly sent me a link to more of their essays that are worth some attention.

Now let me say up front that all of these essays have a bit of the self-serving and self-promoting about them. Well, guess what? So does this blog. Get over it. With very rare exceptions, no one makes a living writing tech essays. (Tech news is a different matter; but I've heard tell that even that's scarcely a living for most practitioners.) Most people who write tech essays have at least a secondary motiv