Of course, there's some dispute as to whether Pluto should count as a planet. It's pretty darn small. And I the calculations that led to its discovery were flawed, and it just happened to be in the right place at the right time.
Saturday, July 30, 2005
Of course, there's some dispute as to whether Pluto should count as a planet. It's pretty darn small. And I the calculations that led to its discovery were flawed, and it just happened to be in the right place at the right time.
Thursday, July 28, 2005
This is a great notebook if you want a machine that can do practically anything. It can run all or nearly all of today's most demanding games, and it can do what other notebooks can't, act as a tablet. For someone looking for tablet functionality and not wanting to give up the power of a notebook the M4 can't be beat.
I wish Toshiba's product listings were as thorough as this review!
UPDATE AND SHAMELESS PLUG: And should any proud new Tecra M4 owners want to learn how they can really leverage the power of Tablet PC programming, I should recommend our new Tablet PC BootCamp.
Wednesday, July 27, 2005
"Broad horizontal corporate markets should start to make an impact on the market in 2005, as average selling prices fall well below $2,000," said Brian O'Rourke, In-Stat analyst. "A combination of greater Tablet PC software availability and larger form factors that directly address the corporate market should help Tablet PC sales."
So Tablet PC software will be a driving factor, eh?
The Register reports the same story with the more cynical bent I have come to expect from them:
So far the greatest demand for Tablet PCs has come from vertical markets, which is where all Microsoft's previous attempts to take pen computing into the mainstream have ended up. Tablet PC was heralded by some observers as the version that would at last succeed, but it's clear it's as niche as past stylus-operated Windows devices have been.
UPDATE AND SHAMELESS PLUG: And should you want to catch the wave and meet the new market with your own great Tablet PC programs, I should recommend our new Tablet PC BootCamp.

Location: Exit 61 overpass on US131.
Upon close inspection (not a good plan: that's a busy on-ramp), I found that the letters are not painted on, but rather adhered. So someone pasted the "p" on upside down. And no one in the crew of at least four noticed.
Monday, July 25, 2005
Anecdote: Programmers Are Weird!
Symptoms: Customers who get frustrated talking to developers who are working as analysts. The jargon and abstraction overwhelms them.
Context: Projects where programmers act as analysts (i.e., programmer-analysts) yet lack training or experience in customer communications. Usually not projects where the customers are also technical personnel.
Motivations:
- Programmers like technology, like to talk about it, and spend much of their time immersed in it. It forms a comfortable language for them, including standards and conventions that simplify and clarify communication.
Programmers further develop writing habits (i.e., coding standards) that help produce more readable and maintainable code. They internalize these habits and tend to use them across the span of development activities. Yet despite programmers’ “comfort level” with these habits, the habits can be completely confusing to regular people.
Programmers develop writing habits that help produce more readable and maintainable code, but can be completely confusing to regular people.
- Programmers also like to work in the realm of abstractions: ideal cases and especially common cases that allow programmers to create a solution once and then apply it (with necessary modifications) across a wide range of cases.
Customers and end users tend to work in the world of the concrete: real, distinctive jobs to be done for real, distinctive clients – and with real, distinctive problems and complications and consequences that popup. While they may think about abstract general principles when they need to, their work biases them toward the concrete. Most end users don’t deal with abstractions to the degree that programmers do.
While customers may think about abstract general principles when they need to, their work biases them toward the concrete.
- For various reasons – cost, trying to facilitate communication, and simply not knowing any better being chief among them – many development organizations have programmers serving as programmer-analysts, but without training as suggested under the Trained Analysts pattern.
Problem: The problem, I hope, is obvious: programmer jargon can confuse customers and end users. That’s not news to anyone, and it’s a major consideration in many of the patterns in this book. But I want to draw particular attention to two common but confusing programmer habits: coding standards and abstractions.
Programming standards lead programmers to write (and sometimes talk) in odd-but-precise ways that have specific meanings to computers. And beyond that, we (I can be as guilty as anyone) like to show how clever we are by using these odd formulations in non-technical settings. It becomes a form of in-joke: “Let me just access the ICashMachine interface over here so I can instantiate some cash objects.” Our fellow programmers get the joke, laugh, and probably then try to top us. And if regular people took at us funny, shake their heads, and mutter “Geeks,” we take it as a badge of honor. They don’t get the joke, but we do.
And those odd formations really do serve a useful purpose in code; but boy, do they look odd! We stick an “I” in front of anything we “talk” to: IAccount, IBankSystem , ILeasingCompany. And as the examples above show, we like to jam together longStringsOfWordsThatNameSomething, and to use funny capitalization when we do so. And we like to use odd punctuation combinations, such as “==”. “::”, “->”, and “///”.
| And believe it or not, every one of those odd usages has a specific and useful meaning. I could teach it to you, even if you’re not a programmer. As a customer, you could learn how to understand it. But why should you have to? Those odd usages are designed to help us to talk to computers, not to people. Just because we geeks can understand them doesn’t mean those habits belong in a requirements discussion. And yet they often end up there. Even when they’re being serious, programmer-analysts who write documents and especially programmer-analysts who create models tend to sprinkle them liberally with coding standards, with their vision of how the code might look. That makes it harder for customers and end users to understand those documents. Since the audience for those documents is people, not computers, that’s just not a smart idea, no matter how compelling it seems to the programmers. |
|
Abstraction is a more insidious problem, because it has some real benefits during analysis as well as some real drawbacks. It’s important for analysts (including programmer-analysts) to identify general principles, commonalities, and other abstractions that can aid their understanding of the problem domain. But it’s also important to realize that customers and end users may not think in those abstractions; and trying to force them to do so may actually hinder communication. It’s all right to introduce an abstraction into the conversation and see if it helps; but you have to be ready to fall back on the concrete if the abstract doesn’t work.
There’s another potential problem with abstractions during analysis: they’re often a sign that you’re designing, not analyzing. When programmer-analysts start seeing possible solution abstractions, they may introduce those into the requirements documents. Not only can this confuse customers and end users, but it can also lead stakeholders to assume that these design concepts are actually requirements (as discussed under the That’s Design, Not Analysis antipattern).
Solution Name: Speak English!
| Solution: Fortunately, this is usually a self-correcting problem. Just remind programmer-analysts to rewrite their text or models and to revise their remarks to aim for a general audience. That should be enough to get them to correct themselves. |
|
In particular, ask programmer-analysts to strip out coding standards wherever they appear, unless the requirement they’re documenting is actually a coding requirement (such as a required interface or protocol or algorithm). And if they’re using abstractions that seem too far from your problem domain for you to understand, ask them to go back to specifics first. From there, ask them to talk you through to explain the benefits and purpose of the abstraction, including how they expect the abstraction will apply across a wide range of cases. And if they can’t do that, then explain to them that the abstraction may be useful as a design concept – and should be documented in their design notes – but is complicating matters when it comes to requirements.
Resulting Context: With a few reminders from customers and end users (and a few jokes at their expense, as needed), programmer-analysts should learn to communicate with a general audience.
Discussion: This antipattern can be a special case of another antipattern: The Department of Obfuscatory Verbiage. And the solution relies heavily on The Echo Effect: stakeholders have to let programmer-analysts know when they have failed to communicate. And the ultimate solution, of course, is Trained Analysts, whether they’re programmers by title or not.
Saturday, July 23, 2005
This part made me laugh:
It's said that Germans make no small mistakes. Since everyone makes mistakes, that should hint at the kind of mistakes that Germans make. And I think Dutch and the Germans are a lot alike. (Being of both Dutch and German ancestry, there's a lot of that in me.)
He may make big mistakes, but I've never seen 'em!
Watch for Tablet PC sales to go way up this year.
Let's hope he knows what he's talking about!
UPDATE AND SHAMELESS PLUG: And should you want to catch the wave and meet the market with your own great new Tablet PC programs, I should recommend our new Tablet PC BootCamp.
And to make it even sweeter, I first saw the ad in tonight's episode of Monk, my favorite first-run show on TV.
UPDATE AND SHAMELESS PLUG: And should this commercial inspire you to create your own great Tablet PC programs, I should recommend our new Tablet PC BootCamp.
Friday, July 22, 2005

...where the main attraction is this:

I'm every bit a high tech guy. I couldn't imagine doing anything for a living other than what I'm doing now. But despite all that, I love the old Tall Ships. The way those wooden vessels harnessed the winds and the currents under the will and muscle of valiant sailors is just astonishing. In these days of GPS and satellite phones, navigating by star and by instinct and communicating by flags and by signal shots looks incredibly daring.
And the Constitution is the best of them all. A trip to Boston without seeing Old Ironsides is incomplete.
Here's the bow view:

And here's the gangplank with her nickname:

I'll try to have more and better pictures sometime after SD Best Practices.
If you've been to Microsoft events before and found them rather stale and packaged and way too party-line... Well, then you've never been to Code Camp! Thom gets the best expert speakers he can find; and then rather than give them canned slides from Microsoft, he lets them expound on what they love about MS technologies, as well as how they use the stuff. And it's no holds barred: when there's something they don't like, they say that, too. And they tell you how they get around the limitations of the technology. You get honesty, both pro and con, and you get a great education in two very info-packed days.
This event is immediately before SD Best Practices in the Boston area, so I'm going to try to attend both. With luck, I'll even be speaking at Code Camp. I hope I see you there!
And speaking of Boston... Next week, we plan to announce a new RHS Group class in Boston. Stay tuned!
Thursday, July 21, 2005
Cue up the Buffalo Springfield:
There's something happening here.
What it is ain't exactly clear.
Well, enough of that. The rest of that classic, haunting tune is ominous and foreboding, when I'm really feeling just the opposite right now. And the reason why I'm in such an upbeat mood is the Tablet PC. And like the song says, there's something happening here, and what it is ain't exactly clear – yet. But it sure is exciting!
My excitement began before I ever touched a Tablet PC. Call me a victim of Microsoft marketing (or too many years of watching Star Trek); but from the moment I saw the demo announcement, two years before the first models were available for sale, I saw something new there, something different. And I knew I wanted to be a part of it. I just didn't know why.
And then I got my first Tablet PC. And it was a fun toy, but I still couldn't explain to people why I wanted it – indeed, why I put up with a two-month backlog to get it. "It's a laptop with a pen, but without as much memory or processor," they said. "Big deal." And these weren't just any people. These were fellow programmers, and even extreme gadget freaks; and yet, aside from the novelty, they didn't see what the big deal was. But I just knew they were wrong. Somehow, this was more than a laptop with a pen.
And then I started programming it. And for me, that was where the real fun began. I've always said that rather than play video games, I'd choose to write them. To me, programming of almost any sort is just a fun game. Problem solving isn't just my job, it's my passion. Given a computer, I would program even if nobody ever paid me a dime for it (don’t tell my clients!). And programming .NET is even more fun. And programming the Tablet PC using .NET is F-U-N.
But my excitement reached a whole new level when I noticed something: I kept accidentally building really cool Tablet PC programs.
Now we all know better than that, right? No one accidentally builds anything in software, at least not anything useful or successful. As a UML instructor, I spend much of my time teaching how purposeful design leads to successful systems. And yet here I was, Mr. UML Guy, accidentally building really cool Tablet PC programs. Unless we're in the Realm of Infinite Monkeys, code doesn't just happen. There has to be intent there. But I'm used to the process being: intent-thought-work-thought-work-thought-work-work-work-work... But these Tablet PC apps felt like accidents, like unexpected surprises out of nowhere, because the process was closer to intentthoughtworkdone! Developing these apps felt like an accident, like a discovery, like there were solutions lying around just waiting for me to find them and tie them together.
What makes the Tablet PC under .NET easier to program and more fun than other platforms (even easier and more fun than .NET alone) is that it adds one more namespace that's right up there with the core .NET namespaces in terms of power and flexibility. And that new namespace provides new and powerful user interface metaphors. Right now, our common user interface metaphors are Console (keyboard) and Forms (keyboard and mouse). Well, you can use Ink for the Forms metaphor; but Ink also adds an electronic paper metaphor, or as I like to call it, the Smart Cocktail Napkin metaphor. It's the ease of use of paper combined with the ease of editing of electronic documents, plus you can add the ease of interpretation that lets the computer parse meaning from the drawing.
There's a downloadable demo for the Tablet PC that's really impressive: the Tablet PC Composition Tool, which shows you musical staves and lets you write in notes, edit them, erase them, and so on. And then you can play those notes, with different digital instruments assigned to each part. It lacks some things for a production tool, from my perspective (it is a demo, after all). But even within its limitations, it's a compelling toy for people who know music: they just start using it, without instruction. You write like paper, you erase and edit like a word processor, and the computer interprets and plays based on what you write. And that last part is key. Without the interpretation, it's "only" electronic paper: easy to draw, easy to edit. That's pretty easy and fun by itself. (I keep having to steal my Tablet PC back from my nieces, because it's the most fun coloring book they've ever had!) But with interpretation added, it's the Smart Cocktail Napkin: you get a good idea, you jot it down, and the computer acts on it.
This really is something new. Mark my words: the Tablet PC is more than just a laptop with a pen. It's something new, something we haven't really grasped yet, some combination of the right technologies at the right time to change computing in ways we haven't really foreseen yet. And I think a big key to the change will be the Smart Cocktail Napkin metaphor, which, when combined with the power and ease of use of .NET programming, just keeps letting me do really complex, really powerful things in a way that is simultaneously:
- Easy for my user to use, because Microsoft wrote all the really hard pieces that go into a natural, intuitive user interface based around Ink;
- Easy for me to write, because the Tablet PC API and .NET provide a tremendously rich base functionality;
- And easy for me to reuse, so my repertoire of powerful programs keeps growing. .NET makes code reuse easier than I've ever experienced before. This was always the promise of OO (and then later of components); but for the first time, I feel like the promise is really delivered. .NET makes it just as easy to design for reuse as to design in the first place, and almost as easy to move something into the library after it's designed for one app.
And I haven't yet scratched the surface of the other two technologies that add power to the Tablet PC: ubiquitous WiFi and ubiquitous speech recognition. By spec, the Tablet PC has to have both of these technologies. And once you know you can take those for granted, you can envision new applications that weren't worth discussing before.
So that's the metaphysics part of this blog: in ways we haven't begun to grasp yet, the Tablet PC is not just a laptop with a pen. It's something new, something different, and something more. In a fundamental way, it's like Windows 3.0 and .NET before it: when you can take certain capabilities for granted and just not have to write them, it liberates you to solve new problems by building on top of those capabilities. Through this blog, I hope to convince you that The Tablet PC Changes Things.
So I'd like to close as I opened, with a little 60s protest music. This time, The Beatles:
You say you want a revolution...
It's here. Let me show you...
UPDATE AND SHAMELESS PLUG: And if I've inspired you to write the next great Tablet PC program, I should recommend our new Tablet PC BootCamp.
Wednesday, July 20, 2005
Topic: ASP.NET 2.0.
70% reduction in code size for our apps.
Project Architectire:
* Project-less Development. Easier to manage (according to some people; I don't see it).
* Code Separation. Code beside, not code behind.
* Dynamic Compilation. Can browse to the pages without requiring compilation.
* Pre-Compilation of Applications.
Data Sources and Controls
* Easier data binding.
* Flexible.
* New controls: GridView, DetailsView.
Master Pages: Control look and feel of site with a single set of Master Pages. (Sounds like templates to me! Also sounds long overdue.) Cleaner than User Controls, and works in design, not code.
Navigation
* Easy creation of SiteMaps.
* Create TreeViews and Breadcrumbs (?).
Security
* Integrated Membership, Role Manager
* Cookieless authentication.
* Personalization: flexible profile storage,
* Themes: Create user selectable themes. Can work with CSS. (Sorta server-side CSS.)
Web Parts and Portals
* Modular Content.
* Rich User Experience.
* Compatible with SharePoint (future), Content Management Server, and Office 2003.
Caching: SqlcacheDependency lets SQL database invalidate the cache automatically.
* Cross-Page Posting.
* Validation.
* Wizard Framework. Lets you create wizards easily.
* Client-Side Scripting, including Client Callbacks.
New Controls (Even More!)
* Bulleted List
* File Upload
* Hidden Field
* Table
* MultiView and View
* ImageMap
New Events in Lifecycle
* PreInit
* PreLoad
* LoadComplete
* PreRenderComplete
Demo...
What an embarassment! The Microsoft projectors and screens have an automated timer: just in case someone forgets and leaves the system running, the projectors turn off and the screens roll up at 8 p.m.... right in time for the start of Drew's presentation. Now we have to wait for it all to warm up again...
HTML View now supports drag-and-drop from the designer toolbox.
Demonstrating dynamic compile. Pretty slick!
Code-beside: much sparser than Code-behind. Relies on Partial classes. Replaces the kludgey inheritance mechanism from 1.0.
Drew struggles to write VB.NET code:

Demonstrating new data source controls and binding. A page viewing rows from a database, with paging and sorting, in under 5 minutes and maybe 5 lines of HTML. (NO code-beside/behind/whatever!)
Added editing with two minutes, two lines of HTML, no code!
I don't believe that 70% reduction in code figure. It looks like almost 95% of the ASP.NET code I ever wrote won't be needed anymore!
Adding a filter to the data view. Looks like maybe four to five lines of HTML. Oops! First HTTP error. Not bad, really.
Defining SQL query parameters in the HTML, and then tying them to controls. Again, no code!
Applying themese automatically. Simple, simple, simple!
Administration pages added to the site automatically. Allows config, membership, etc. Can easily add log-in pages, registration option, Get My Password, etc.
My word, when can I start using this stuff?
Member security (as above) is normally in an automatically generated SQL Server Express database. Can be stored in your database instead. And is accessed via an interface which you can implement, in case you want to work through your existing user accounts mechanism.
Giveaways: Writing Secure Code (2 copies), Introducing Microsoft ASP.NET 2.0 book (2 copies), some tool kit.
For more on GANG, go to http://www.migang.org.
BONUS UPDATE: After the giveaway, Drew gave more demos, mostly of the Master Pages stuff. (The meeting theoretically ends at 8:30 p.m.; but we stay until the MS contact guy throws us out. And since the MS contact guy is Drew Robbins, we could be here a while!) I missed most of his start, because I just got a call that my Mom is in the hospital with acute pancreatitis.
Demo: creating content placeholders, and then creating content elements to fill those elements. Manoman, I sweated and sweated to try to get all of those non-commercial blog engines to work before signing up with PowerBlogs (who are giving me fine service, don't get me wrong); and here ASP.NEt 2.0 gives me all the features I would need, all really easy to use. Cool, cool, cool!
We found the X41 Tablet to be a robust solution that possesses all the features of its X Series counterparts, plus additional tablet functionality, yet it's still priced competitively, starting at $1,900.
UPDATE AND SHAMELESS PLUG: And should any proud new ThinkPad X41 owners want to learn how they can really leverage the power of Tablet PC programming, I should recommend our new Tablet PC BootCamp.
What the Heck is UML?
For those who are new to the Unified Modeling Language (or UML), here's a very brief introduction. UML is essentially a set of blueprinting notations for various aspects of system design, with an emphasis on communication to customers, end users, and other developers. Sadly, a lot of software isn’t really designed in the traditional sense. If I gave you a pile of nails and lumber, I’ll bet you could build a decent doghouse by eye. You might build a decent house, but you’d probably want to draw a sketch, at least; and I’ll bet you’d never pass inspection without that sketch, whether you needed it or not. And if you tried to build a skyscraper without detailed plans, you’d never get it off the ground without it collapsing; and government types would shut you down before somebody got hurt. (Thanks to Steve McConnell for the analogy.)
Well, a lot of software is built with doghouse methods, even if it’s a skyscraper project. UML is an industry-standard set of diagram types and modeling syntax that help you draw the plans. It's a standard maintained by the Object Management Group. It won't solve all your problems, but it's a useful tool to help you progress from doghouses to skyscrapers.
Defining the Model
Before you begin modeling, it's always a good idea to identify the purpose of the model. That will help you to know the scope of your model and to thus limit and focus your work.
For this stage of Everyday UML, our model will be defined as follows:
This is a model of operations for Your Comic Source, a full-service comic and game store with both storefront and online sales and events.
Note that this model is described as a model of operations for the comic store. That implies that this is a business model, focused on the operations of the business as a whole, not just on the operations of the software. Remember my message from UML Applied and UML BootCamp:
UML is not about software design; it's about system design, where a system is structure with behavior and goals. And software is certainly one kind of system, but it's not the only kind.
And in this particular set of examples, the system will be the entirety of Your Comic Source.
A business model is only one kind of model you might construct with UML. We'll see other kinds of models in future installments of Everyday UML.
Brainstorming About Actors
It's time to introduce our first UML concept: actors. No, we're not talking John Cusack or Marisa Tomei here. In UML, an actor represents a person or system or event with which your system interacts. It's the things outside your system that either ask your system to do things, or that do things for your system, or both.
If I'm completely new to a problem domain, I'll start with a single actor, Customer, use that as a probe for finding use cases and then participating actors, and then use those actors to probe for more use cases and more participating actors, and so on. (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 actors. This list won't be perfect: you'll miss some actors, and you'll list some that you'll end up never needing. But remember another lesson from UML Applied:
Don’t worry about being perfect all at once (or ever!). If you’re communicating, you’re using UML effectively. There’s always room for improvement; but don’t let imperfection stop you from progress. That’s a key point in learning UML and in applying UML as part of a process. Your designs will not be perfect; but as your team reviews them and you refine them, they will become good enough: good enough to build the system, good enough to guide the testing and the documentation, good enough to drive the management of the process. A team that waits for perfection is just as bad as a team that is wedded to code-and-fix: neither team produces an effective design that leads to a successful system. Remember: code-and-fix bad; design-and-fix good.
One look at my bookshelves should serve as proof that I've spent a lot of time in comic stores. So I felt pretty comfortable in modeling actors for Your Comic Source (a.k.a. YCS) as shown in Figure 1:

Figure 1: YCS Actors
The standard UML symbol for an actor is a stick figure (whether the actor represents a person or not.) Note that these actors don't appear in any particular order, as should be expected from brainstorming. These actors are described below:
- Bank System. A computer system at the bank. The YCS system will collaborate with this system for payments and other transactions.
- Browser. Someone who visits the YCS Web site but who isn't yet a Member.
- Customer. Someone who purchases comics or games at YCS, either in person or online.
- Gamemaster. This is a person who arranges and runs game events for Gamers.
- Gamer. A person who plays games at the YCS store. (Games stores often have space for regularly scheduled games, as a way to expand interest in those games and sell more products.)
- Manager. The person in charge of day-to-day operations at YCS.
- Member. This is a Web site visitor who has moved beyond Browser status by creating an account and identifying interests. When comics or games of interest to that Member are released, YCS will send out email notices. Members will also qualify for special discounts and deals.
- Publisher. A person or company who publishes comics for sale at YCS.
- Special Guest. An artist, writer, game designer, publisher, or other individual who will visit YCS for a special event such as a book signing or a talk.
- Staffer. Someone who works the shelves or the counter at YCS.
- Store Owner. The owner of YCS.
- Subscriber. Someone who signs up for and purchases particular comic books in advance, and whose books are then delivered automatically (either in person or via delivery service).
- Vendor. This actor represents a person or company that sells or distibutes or consigns products for sale by YCS. (Definitions: Sells = "YCS purchases the item directly. All future profits or losses accrue solely to YCS." Distributes = "YCS stocks the item, but does not purchase it. Upon sale, proceeds are split between distributer and YCS. After a period of time, YCS may return unsold items." Consigns = "Similar to distribution, but a one-time arrangement between YCS and a private individual.")
- Vendor System. A computer system owned or run by a Vendor. It will work with the YCS system to transact business.
Remember a key rule in regard to actors: an actor represents a role that individuals or systems may play, not any specific individual and not any specific job title. One person or system may fill multiple different actor roles at different times, and a single actor role may be filled by different people or systems at different times. For example, the owner of YCS may fill the Store Owner role primarily, but may also act as a Manager or even a Staffer from time to time.
Relating Actors
To repeat: the actors in Figure 1 appear in a scattershot stream-of-consciousness order, with no real thought about how particular actors might relate to each other. But actually, there's a lot of things we know about these actors already. Next we want to capture that knowledge. Some of these things are shown in Figure 2:
-small.gif)
Figure s: YCS Actors (Reorganized)
There are two kinds of relationship shown here:
- Generalization. Sometimes also called specialization, inheritance, or subclassing. Shown with a triangle-headed arrow, this relationship between two actors indicates that one actor is a special case or special kind of another actor (the one to which the arrow points). For instance, Figure 2 says that a Publisher is a special kind of Vendor.
- Association. Shown with a line or arrow, this relationship between two actors indicates that the actors collaborate in some way. You should prefer a line when the two actors interact freely. You should prefer an arrow when one actor controls or "owns" the interactions. (We call this a "navigable association", perhaps because the UML standards committee is fond of multisyllables). In Figure 2, for example, there is a navigable association from Manager to Employee, indicating that a Manager has Employees that work for him or her. Note also that the association includes a measure of multiplicity on the Employee end (where it reads "0..*"). Multiplicity indicates how many actors of a given type are involved in the relationship. "*" indicates an unspecified number; so 0..* in our example means that a Manager might have any number of Employees (including 0 — maybe they all got fired?).
(Other types of relations are possible, as we'll see in future installments of Everyday UML.)
Note also that I added some new actors into Figure 2. These actors represent common behavior shared by a number of different actors, and let us describe the common behavior in a common way. This is an abstraction, and can be useful. But you have to be careful: too much abstraction too early can confuse your audience. (For more on this topic, see item 64: Geek Speak from my upcoming book, Requirements Patterns and Antipatterns: Best (and Worst) Practices for Defining Your Requirements, coming soon from Addison-Wesley.) These additional actors are:
- User. This actor represents behavior common to all users of the YCS Web site. (This is a simplified version of item 56: Extended Inverted Org Chart from Requirements Patterns and Antipatterns.)
- Authorized User. This actor represents users who have some level of privileges within the YCS Web site, such as editing their personal preferences, etc. (This is another element of Extended Inverted Org Chart.)
- Employee. This actor represents common behavior for all persons employed by YCS. (This is a simplified version of item 55: Inverted Org Chart from Requirements Patterns and Antipatterns.)
Organizing Actors
Notice how I drew lines around groups of actors in Figure 2, dividing them into groups by relations. That suggests better ways to organize the actors. But to organize them, I first need to introduce UML packages. A Package is simply a hierarchical subdivision of a model. It functions very much like a folder on your hard drive, letting you organize a large collection of things into smaller, more comprehensible collections of related things. The icon for a UML package even looks like a file folder, just like a folder on your hard drive.
Looking at Figure 2, it seems natural to me that we should organize the actors into the packages shown in Figure 3:

Figure 3: YCS Actor Packages
This is a stripped down version of item 48: Actor Hierarchy from Requirements Patterns and Antipatterns. The Human Actors package is split into two subpackages, as in Figure 4:

Figure 4: YCS Human Actors
The Users package models the various kinds of users, as in Figure 5:

Figure 5: YCS Users
The Customers package models the various kinds of customers, as in Figure 6:

Figure 6: YCS Customers
And finally, the Systems package shows systems with which YCS must interact, as in Figure 7:

Figure 7: Systems that Collaborate with YCS
Organizing Your Model
Well, that's enough about actors for now. This installment is already a lot longer than I intended. But there's one more topic I want to cover: where these actors fit in the larger model that we're creating. There are a lot of ways that you can organize a model. I like to use an organization scheme as shown in Figure 8:

Figure 8: Organizing Your Requirements
The Actors package contains all the work we've seen in this installment. The Domain Objects package will contain details on things and types of things of interest to the actors of YCS. The Use Cases package will show Use Cases: the operations that actors perform within YCS, including the business rules that apply to those operations. And the Architecture package will show software systems and interfaces that will support the use cases.
What's Next?
In my next installment of Everyday UML, we'll look at some domain objects. I can't give a schedule for that, so keep your eyes open!
Related Posts (on one page):
- Everyday UML, Installment 2: Identifying and Organizing Domain Objects
- Everyday UML, Installment 1: Identifying and Organizing Actors
Monday, July 18, 2005

And for the sake of completeness, here's the front:


It will take you to Microsoft's Tablet PC Development Tools page, where they promote third-party tools that are available for Tablet PC development. Yes, Tablet UML is on the list; but so are some other mighty fine tools you should investigate.
Besides the banner ad, there's a full-page ad:

This ad has appeared or will appear in:
- Pencomputing Magazine, April
- CoDe Magazine, May/June
- MSDN Magazine, June
- MSDN Magazine, July
- Dr. Dobbs Magazine, August
- Visual Studio Magazine, TBD
Keep an eye out for it!
Sunday, July 17, 2005
But after long days of consulting for SRT Solutions and then a session of UML BootCamp in Georgia, I'm a little exhausted. So I'm sticking to light topics for now.
But here's my UML plan:
- As UML news comes out, I'll comment from time to time. Now most UML "news" I see these days is really just press releases from tool manufacturers. Don't expect me to comment much on those. But if there's legitimate news, I'll let you know.
- From time to time, I'll upload some UML examples and discuss what they mean, why I chose to draw them that way, and alternate ways to draw them.
- If I get any UML questions, I may discuss them here.
That's the plan today. It's all subject to change at whim, of course...
Those of you in the know just stopped reading, and turned on your TVs. Those of you not in the know don't know what you're missing. Unfortunately, they're currently running episodes from the third, last, and weakest season. There are still some good laughs, but not like in the first season. Also, the jazzy, big band theme isn't nearly as prevalent.
Still, it's the Tick on TV. That's a good thing. (And maybe this means that DVDs will soon follow?)
The Israeli team dominated yesterday's fencing competition, grabbing four golds out of five. Israel's Tomer Or, 27, defeated the top-ranked American, Dan Kellner, in the Men's foil final by a score of 15 - 9 to win his first Maccabiah title at the third attempt.
But we were gracious about it:
Kellner, who skipped the US nationals to compete in his first Maccabiah games, complimented Or. "Tomer fenced great today. We are the best foil fencers here and it was fun and challenging," he said.
At least we weren't the only ones they defeated:
While the foil final was fought by two athletes who aspire to compete in the 2008 Olympics in Beijing, the Saber final featured two recently-retired Olympic fencers. Russia's Sergei Sharikov, 31, winner of four Olympic medals in three Olympics two team golds and one bronze, as well as an individual silver, faced 34-year-old Ukrainian Vadim Guttshayt. The latter won the bout, 15-13.
Israel won another three gold medals as Marat Israelian won the epee final over the U.S.' Michael Feldschuh with a score of 15-9, while the women's competition provided two all-Israeli finals. In the epee final, Anastasia Ferdman defeated Ana London, and in the foil final, Delila Hatual won over Julia Tikhonova.
Congratulations to the Isrealis!
Saturday, July 16, 2005
I put in a long night with little sleep doing some requirements analysis consulting for Josh and the folks at SRT Solutions; and Josh wanted to meet for breakfast to discuss the inevitable last minute changes. And while I was waiting for Josh in the Big Boy parking lot, rather bleary eyed, a giant cow ambled by. I knew that was going to be a long day...
Sunday, July 10, 2005
The new ThinkPad X41 Convertible Tablet gives you all the advantages of a tablet PC without any of the annoying side effects.
Download the patch here.
UPDATE: more details from the GeekZone.
I have to say, I've never understood the fan fascination with Jack Kirby's art. As I've gotten older, I've mellowed toward it; but the overly-square-jaws and the heavy-black-bands-signifying-metallic-sheen just never looked right to me. As one of Dean's commenters said, "He has a distinctive style, not quite to my taste, but not bad." Once you saw a Kirby work, you could recognize a Kirby work or a tribute work instantly. But I always preferred Swan & Anderson, Neal Adams, and Mike Grell. Their styles were just as recognizable to me, with the added advantage that they looked right.
I know, this is heresy for many comic fans. I can't help it. I actually thought Kirby was better as an idea man than as an artist. I do think he was very inventive when it came to layouts and story flow. And he did intricate machinery and intricate details really well. But his characters never appealed to me.
Long ago, the Duke of Milan commissioned a little known artist to erect a Mammoth statue of a horse. The time was 1481. The artist was Leonardo da Vinci. The guy on the donkey's just a guy on a donkey.
So begins one of the funniest and most unappreciated films of the 90s. And while the movie got some of the details wrong, the story is true, more or less:
From around 1482 to 1499, Ludovico Sforza, Duke of Milan [1], employed Leonardo and permitted him to operate his own workshop complete with apprentices. It was here that seventy tons of bronze that had been set aside for Leonardo's "Gran Cavallo" horse statue (see below) were cast into weapons for the Duke in an attempt to save Milan from the French under Charles VIII in 1495.
That might have been the end of the story; but instead, Frederik and Lena Meijer (heads of Meijer, Inc.) stepped in. They donated funds to support Nina Akamu in her project to realize da Vinci's design. The Meijers actually funded the casting of two full-sized horse sculptures: one donated to Milan, fulfilling da Vinci's commission; and the other at the Frederik Meijer Gardens & Sculpture Park, located near me in Grand Rapids, Michigan.
Here's a picture of da Vinci's horse, with my nieces and their friend and a whole bunch of other kids standing under it:

This is a 24-inch version of the horse, cast as a test. They have mounted it near the big horse, with a plaque that describes the project both in Roman characters and in Braille. This lets blind guests appreciate the full horse, not just the hooves and legs:

Keeping with the horse theme, this skeletal looking horse is made entirely of driftwood:

This is Eve, one of two Rodins at the Gardens:

And this rather confused piece is Hagar by Lithuanian sculptor Jacques Lipchitz:

There's a lot more to the Gardens, but we had a busy day, and didn't get there until late. Next visit, we'll spend more time on the indoor artwork, and on the various botanical and horticultural exhibits.
So this will be the place to learn what's up with Tablet UML and with my UML training classses. And I'll also comment on other items as they come up: UML, Tablet PCs, .NET, and more. Lots more, most likely. We'll find out.


