<?xml version="1.0" encoding="UTF-8"?>

<rdf:RDF
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns="http://purl.org/rss/1.0/"
 xmlns:content="http://purl.org/rss/1.0/modules/content/"
 xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
 xmlns:admin="http://webns.net/mvcb/"
>

<channel rdf:about="http://tabletumlnews.powerblogs.com/">
<title>Tablet UML News</title>
<link>http://tabletumlnews.powerblogs.com/</link>
<description>News and commentary from Martin L. Shoemaker, author of Tablet UML</description>
<dc:language>en-us</dc:language>
<dc:date>2007-04-10T14:04+00:00</dc:date>
<items>
 <rdf:Seq>
  <rdf:li rdf:resource="http://tabletumlnews.powerblogs.com/posts/1176216254.shtml" />
  <rdf:li rdf:resource="http://tabletumlnews.powerblogs.com/posts/1122474050.shtml" />
  <rdf:li rdf:resource="http://tabletumlnews.powerblogs.com/posts/1122474050.shtml" />
  <rdf:li rdf:resource="http://tabletumlnews.powerblogs.com/posts/1175861713.shtml" />
  <rdf:li rdf:resource="http://tabletumlnews.powerblogs.com/posts/1160967305.shtml" />
  <rdf:li rdf:resource="http://tabletumlnews.powerblogs.com/posts/1159974964.shtml" />
  <rdf:li rdf:resource="http://tabletumlnews.powerblogs.com/posts/1150926934.shtml" />
  <rdf:li rdf:resource="http://tabletumlnews.powerblogs.com/posts/1144193232.shtml" />
 </rdf:Seq>
</items>
</channel>

<item rdf:about="http://tabletumlnews.powerblogs.com/posts/1176216254.shtml">
<title>I'll be there, too!</title>
<link>http://tabletumlnews.powerblogs.com/posts/1176216254.shtml</link>
<description>...</description>
<dc:creator>Martin L. Shoemaker</dc:creator>
<dc:date>2007-04-10T14:04+00:00</dc:date>
<content:encoded><![CDATA[<a href="http://www.grdotnet.org/DODN07/"><img src="http://www.grdotnet.org/DODN07/images/Site-Badge-I.gif" alt="WM Day of .Net May 19, 2007 - I'll be there!" /></a> <br />
<br />
Will you?]]></content:encoded>
</item>

<item rdf:about="http://tabletumlnews.powerblogs.com/posts/1122474050.shtml">
<title>My speaking and other travel schedule (Revised April 10, 2007)</title>
<link>http://tabletumlnews.powerblogs.com/posts/1122474050.shtml</link>
<description>UPDATE: To make it easier to find this entry, I've added a link to it in the right sidebar, right under the links for my books and my classes....</description>
<dc:creator>Martin L. Shoemaker</dc:creator>
<dc:date>2007-04-10T14:04+00:00</dc:date>
<content:encoded><![CDATA[UPDATE: To make it easier to find this entry, I've added a link to it in the right sidebar, right under the links for my books and my classes.<br />
<br />
<a href="http://www.grdotnet.org">West Michigan .NET User Group</a> in Grand Rapids MI. April 17. Topic: Dee Jay: A Voice-Controlled Juke Box for Windows Vista.<br />
<br />
<a href="http://www.dayofdotnet.org/Sessions.aspx">Ann Arbor Day of .NET</a> in Ann Arbor MI. May 5. Topic: Talking with Vista.<br />
<br />
<a href="http://www.grdotnet.org/DODN07/Sessions.aspx">West Michigan Day of .NET</a> in Grand Rapids MI. May 5. Topics: Do, Undo, Redo, Do Over: A Generics Command Pattern Implementation; Talking with Vista.<br />
<br />
<a href="http://huntug.org/DesktopDefault.aspx">Huntsville New Technology User Group</a> in Huntsville AL. September 11. Topic: Dee Jay: A Voice-Controlled Juke Box for Windows Vista.<br />
]]></content:encoded>
</item>

<item rdf:about="http://tabletumlnews.powerblogs.com/posts/1122474050.shtml">
<title>My speaking and other travel schedule (Revised April 10, 2007)</title>
<link>http://tabletumlnews.powerblogs.com/posts/1122474050.shtml</link>
<description>UPDATE: To make it easier to find this entry, I've added a link to it in the right sidebar, right under the links for my books and my classes....</description>
<dc:creator>Martin L. Shoemaker</dc:creator>
<dc:date>2007-04-10T14:04+00:00</dc:date>
<content:encoded><![CDATA[UPDATE: To make it easier to find this entry, I've added a link to it in the right sidebar, right under the links for my books and my classes.<br />
<br />
<a href="http://www.grdotnet.org">West Michigan .NET User Group</a> in Grand Rapids MI. April 17. Topic: Dee Jay: A Voice-Controlled Juke Box for Windows Vista.<br />
<br />
<a href="http://www.dayofdotnet.org/Sessions.aspx">Ann Arbor Day of .NET</a> in Ann Arbor MI. May 5. Topic: Talking with Vista.<br />
<br />
<a href="http://www.grdotnet.org/DODN07/Sessions.aspx">West Michigan Day of .NET</a> in Grand Rapids MI. May 5. Topics: Do, Undo, Redo, Do Over: A Generics Command Pattern Implementation; Talking with Vista.<br />
<br />
<a href="http://huntug.org/DesktopDefault.aspx">Huntsville New Technology User Group</a> in Huntsville AL. September 11. Topic: Dee Jay: A Voice-Controlled Juke Box for Windows Vista.<br />
]]></content:encoded>
</item>

<item rdf:about="http://tabletumlnews.powerblogs.com/posts/1175861713.shtml">
<title>I'll be there!</title>
<link>http://tabletumlnews.powerblogs.com/posts/1175861713.shtml</link>
<description>...</description>
<dc:creator>Martin L. Shoemaker</dc:creator>
<dc:date>2007-04-06T12:04+00:00</dc:date>
<content:encoded><![CDATA[<a href="http://www.dayofdotnet.org"><img src="http://www.dayofdotnet.org/images/DoDNBadge.png" alt="Day of .Net May 5, 2007 - I'll be there!" /></a><br />
<br />
Will you?]]></content:encoded>
</item>

<item rdf:about="http://tabletumlnews.powerblogs.com/posts/1160967305.shtml">
<title>The 21st Century Cocktail Napkin presentation is now available on-line!</title>
<link>http://tabletumlnews.powerblogs.com/posts/1160967305.shtml</link>
<description>The 21st Century Cocktail Napkin is a talk I presented to the Ann Arbor .NET Developers group on June 14. It's an example of a smart cocktail napkin application...</description>
<dc:creator>Martin L. Shoemaker</dc:creator>
<dc:date>2006-10-16T03:10+00:00</dc:date>
<content:encoded><![CDATA[<b>The 21st Century Cocktail Napkin</b> is a talk I presented to <a href="http://www.aadnd.org/" target="_blank">the Ann Arbor .NET Developers group</a> on June 14. It's an example of a smart cocktail napkin application built using the Tablet PC API. In a a smart cocktail napkin application, you draw shapes as part of some design you'll share with other readers; but as you draw, the Tablet PC also recognizes and understands what you draw, and creates information behind the drawing. (For an example of a smart cocktail napkin application, you can <a href="http://www.TabletUML.com">start here</a>.)<br />
<br />
Now, thanks to <a href="http://www.techsmith.com/camtasia.asp" target="_blank">Camtasia Studio</a>, I have a recording of this presentation. And thanks to <a href="http://www.YouTube.com" target="_blank">YouTube</a>, I can now present it to you on-line:<br />
<br />
<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/TgZubvggaAg"></param><embed src="http://www.youtube.com/v/TgZubvggaAg" type="application/x-shockwave-flash" width="600" height="350"></embed></object><br />
<br />
And you can also <a href="http://www.TabletUML.com/21stCenturyCocktailNapkin.zip">download a ZIP file of the slides and the sample code</a>.<br />
<br />
Look for more recorded presentations soon. And if you're looking for an easy-to-use UML tool for Tablet PCs, check out <a href="http://www.TabletUML.com">Tablet UML</a>.]]></content:encoded>
</item>

<item rdf:about="http://tabletumlnews.powerblogs.com/posts/1159974964.shtml">
<title>The Ink in 60 Seconds presentation is now available on-line!</title>
<link>http://tabletumlnews.powerblogs.com/posts/1159974964.shtml</link>
<description>Ink in 60 Seconds! is a talk I have presented to a number of user groups (some courtesy of INETA). It consists of a number of small little demos of...</description>
<dc:creator>Martin L. Shoemaker</dc:creator>
<dc:date>2006-10-04T15:10+00:00</dc:date>
<content:encoded><![CDATA[<strong>Ink in 60 Seconds!</strong> is a talk I have presented to a number of user groups (some courtesy of <a href="http://ineta.org/DesktopDefault.aspx">INETA</a>). It consists of a number of small little demos of Tablet PC programming, most written in 60 seconds or less.<br />
<br />
Now, thanks to <a href="http://www.techsmith.com/camtasia.asp">Camtasia Studio</a>, I have a recording of this presentation from <a href="http://www.aadnd.org/">the Ann Arbor .NET Developers group</a> on June 14, 2006. And thanks to <a href="http://www.YouTube.com" target="_blank">YouTube</a>, I can now present it to you on-line <a href="http://www.youtube.com/watch?v=eNh0odkas6w">here</a>. And you can also <a href="http://www.TabletUML.com/InkIn60Seconds.zip">download a ZIP file of the slides and a cleaned-up version of the sample code</a>.<br />
<br />
One part of the video may need explanation. Part of the fun of this talk is the deadline: <em>can I write that code in 60 seconds?</em> And if not, I expect the audience to heckle and laugh. But just in case they need encouragement, I wrote a little tool called Egg Timer. When I launch it, it starts a 60-second clock; and if I don't stop it before the clock elapses, <em>it</em> will heckle me. So if you hear a strange computer voice at spots in the video, it means I ran out of time.<br />
<br />
And for those who are curious: yes, <a href="http://tabletumlnews.powerblogs.com/posts/1154498812.shtml" >my car is much better now</a>.<br />
<br />
Look for more recorded presentations soon! And if you're looking for an easy-to-use UML tool for Tablet PCs, check out <a href="home.aspx" target="_blank">Tablet UML</a>.<br />
<br />
<b>Update:</b> Here's an attempt to embed the video in this post:<br />
<br />
<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/eNh0odkas6w"></param><embed src="http://www.youtube.com/v/eNh0odkas6w" type="application/x-shockwave-flash" width="600" height="350"></embed></object><br />
<br />
<b>Update:</b> Fixed the link to the ZIP file. Thank you, )<a href="http://tabletumlnews.powerblogs.com/posts/1159974964.shtml#165">Stéphane Torres</a>.]]></content:encoded>
</item>

<item rdf:about="http://tabletumlnews.powerblogs.com/posts/1150926934.shtml">
<title>Lessons in porting</title>
<link>http://tabletumlnews.powerblogs.com/posts/1150926934.shtml</link>
<description>At a client's request, I've been porting my Tablet PC labs to VB.NET. In the process, I've learned some lessons that might be helpful to others who have to make...</description>
<dc:creator>Martin L. Shoemaker</dc:creator>
<dc:date>2006-06-22T01:06+00:00</dc:date>
<content:encoded><![CDATA[At a client's request, I've been porting <a href="http://www.richardhaleshawgroup.com/RHSGroup/DesktopDefault.aspx?tabindex=6&tabid=61">my Tablet PC labs</a> to VB.NET. In the process, I've learned some lessons that might be helpful to others who have to make this sort of a port. This is strictly programmer geek stuff, so I'm hiding it. The rest of you may prefer to <a href="http://mfrost.typepad.com/cute_overload/2006/06/is_there_room_e.html">look at the cute baby llama</a>.<br />
<br />
<div class="trigger" id="sheoq7lab3.6b"><a href="#" onClick="document.getElementById('heoq7lab3.6b').style.display = 'block'; document.getElementById('sheoq7lab3.6b').style.display = 'none'; return false;">I'm ready for programmer geek stuff...</a></div><br />
<div class="hidden" style="display: none;" id="heoq7lab3.6b"><br />
<br />
<b>Note:</b> In no way is this intended as a slam against VB.NET. Anything I can do with C#, I can do with VB.NET, and vice versa. It's simply a pair of lessons to keep in mind if you work in both languages.<br />
<br />
But before the lessons, let me briefly describe the porting process, since either of these lessons might not have been learned if I had written the VB.NET code from scratch. I started with 200 pages of C# labs (yes, folks, <a href="http://www.richardhaleshawgroup.com/RHSGroup/DesktopDefault.aspx?tabindex=6&tabid=61">our Tablet PC class</a> is that intensive, and more). Then I built a VB.NET project, recreated the UI elements by hand, pasted in the C# code, and edited the code until it was syntactically correct for VB.NET. And except for these two lessons, it seems to have worked well.<br />
<br />
<b>Lesson 1: Divide <> Divide</b><br />
<br />
I had a strange bug in the VB.NET version of the labs. In C#, I could scroll the document to the end of the page. In VB.NET, I would get an exception after the scroll passed the half-way point. Digging into the debugger, I found that my scroll bar ranged from 0 to 99; but I was trying to set the scroll bar value to 101. Further investigation led me to discover differences in the behavior of division in the two languages.<br />
<br />
Let's look at some C# code first:<br />
<br />
<blockquote><br />
static void Main(string[] args)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;object result = 51 / 100;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(result.GetType().Name +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" - " + result.ToString());<br />
}<br />
</blockquote><br />
<br />
This code divides two integers and stores the result in an <b>object</b>, the .NET base type that all other types derive from. That means that any value can be stores as an object. The code then displays the real type of the object, as well as a string representation of the value of the object. And here's the result:<br />
<br />
<blockquote><br />
Int32 - 0<br />
</blockquote><br />
<br />
Now here's what <i>seems</i> like the same VB.NET code. This is exactly what I get by following my copy-and-make-it-compile porting strategy:<br />
<br />
<blockquote><br />
Sub Main()<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;Dim result As Object = 51 / 100<br />
&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(result.GetType().Name + _<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" - " + result.ToString())<br />
<br />
End Sub<br />
</blockquote><br />
<br />
And here's the result:<br />
<br />
<blockquote><br />
Double - 0.51<br />
</blockquote><br />
<br />
This is probably not news to any VB or VB.NET or even just Basic programmers out there; but it's important for porting programmers to keep in mind:<br />
<br />
<b>In Basic, any numeric divisor or dividend is converted to a Double (i.e., a double-precision floating point value) before the division, and the resulting quotient is a Double.</b><br />
<br />
Anyone who knows VB.NET will see the obvious error in my port: I should have used the special integer division operator, \:<br />
<br />
<blockquote><br />
Sub Main()<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;Dim result As Object = 51 \ 100<br />
&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(result.GetType().Name + _<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" - " + result.ToString())<br />
<br />
End Sub<br />
</blockquote><br />
<br />
And here's the result:<br />
<br />
<blockquote><br />
Int32 - 0<br />
</blockquote><br />
<br />
The results are exactly the same as we saw with the original C# code.<br />
<br />
The problem with this lesson is that it completely undermines my copy-and-make-it-compile porting strategy: the copied division symbol <i>compiles</i>, but it doesn't yield the same results.<br />
<br />
And it gets slightly more complicated yet. Let's modify that C# code:<br />
<br />
<blockquote><br />
static void Main(string[] args)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;object result = (int)(51.0f / 100.0f);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(result.GetType().Name +<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" - " + result.ToString());<br />
}<br />
</blockquote><br />
<br />
Here, I <i>know</i> I'm dividing floating point values; but then I cast back to an int. And here's the result:<br />
<br />
<blockquote><br />
Int32 - 0<br />
</blockquote><br />
<br />
It's exactly the same as the original, because the final cast truncates the fractional portion.<br />
<br />
Now here's the "same" code, VB.NET style:<br />
<br />
<blockquote><br />
Sub Main()<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;Dim result As Object = CInt(51.0f / 100.0f)<br />
&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(result.GetType().Name + _<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" - " + result.ToString())<br />
<br />
End Sub<br />
</blockquote><br />
<br />
And here's the result:<br />
<br />
<blockquote><br />
Int32 - 1<br />
</blockquote><br />
<br />
The result is an integer, just like in C#; but instead of the remainder being truncated, it's rounded, either up or down. (And then, just to offend mathematical norms, a precise value of 0.5 will round <i>down</i>.)<br />
<br />
So I could see that the division results needed to be converted; but I didn't see that as they were converted, they were rounding.<br />
<br />
Keep in mind as you port: Divide != Divide.<br />
<br />
<b>Lesson 2: Name <> Name</b><br />
<br />
Inside a C# Form (i.e., inherited from System.Windows.Forms.Form), I wrote code that looked like this:<br />
<br />
<blockquote><br />
private void OpenDrawing()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (dlgOpen.ShowDialog(this) == DialogResult.OK)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenDrawing(dlgOpen.FileName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</blockquote><br />
<br />
Ported to a VB.NET Form, the code looked like this:<br />
<br />
<blockquote><br />
Private Sub OpenDrawing()<br />
&nbsp;&nbsp;&nbsp;&nbsp;If (dlgOpen.ShowDialog(Me) = <b>DialogResult.OK</b>) Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenDrawing(dlgOpen.FileName)<br />
&nbsp;&nbsp;&nbsp;&nbsp;End If<br />
End Sub<br />
</blockquote><br />
<br />
Both versions compiled. Both versions ran correctly. But when I compiled the VB.NET version, I got this warning on the highlighted code:<br />
<br />
<blockquote><br />
Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.<br />
</blockquote><br />
<br />
After a little thought, I remembered that System.Windows.Forms.Form has a property of type DialogResult that is also <i>called</i> DialogResult <i>and</i> that the return type from ShowDialog is <i>also</i> of type DialogResult.<br />
<br />
Now you might question the wisdom of using the same name for a property and its type. Heck, I've done it a lot myself, but now <i>I'm</i> questioning the wisdom. Because it appears that VB.NET and C# have different rules for resolving that name: C# looks to the name first, while VB.NET looks to the property first. Now as it happens, VB.NET sees the property used as a qualifier to access a value within the type, sees the qualifier as superfluous, issues a warning, and just uses the type. So the end result is the same; but the VB.NET programmer gets a confusing or possible scary warning message.<br />
<br />
Now there's a very easy way to avoid that message: simply be explicit. Here's a modified version:<br />
<br />
<blockquote><br />
Private Sub OpenDrawing()<br />
&nbsp;&nbsp;&nbsp;&nbsp;If (dlgOpen.ShowDialog(Me) = <b>System.Windows.Forms.Form.DialogResult.OK</b>) Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenDrawing(dlgOpen.FileName)<br />
&nbsp;&nbsp;&nbsp;&nbsp;End If<br />
End Sub<br />
</blockquote><br />
<br />
When you explicitly qualify the type, VB.NET won't be confused about what you mean, and the warning goes away.<br />
<br />
<div class="trigger"><a href="#" onClick="document.getElementById('sheoq7lab3.6b').style.display = 'block';document.getElementById('heoq7lab3.6b').style.display = 'none'; return false;">Too geeky for me! Make it go away!</a></div></div>]]></content:encoded>
</item>

<item rdf:about="http://tabletumlnews.powerblogs.com/posts/1144193232.shtml">
<title>And-every-single-one-of-them-is-right!</title>
<link>http://tabletumlnews.powerblogs.com/posts/1144193232.shtml</link>
<description>So one time, I showed a friend a Web site for a project I was working on. And he asked an interesting question:...</description>
<dc:creator>Martin L. Shoemaker</dc:creator>
<dc:date>2006-04-04T23:04+00:00</dc:date>
<content:encoded><![CDATA[So one time, I showed a friend a Web site for a project I was working on. And he asked an interesting question:<br />
<br />
<blockquote><br />
Well, you're design guy right?  Shouldn't you be writing a design document?<br />
</blockquote><br />
<br />
And what I suddenly realized was unclear was that the Web site <b>was</b> a design document. It was just a design document of a very different sort. It was basically a step one design document, serving as a way to put the ideas in a concrete form for discussion. The team kinda knew what the product should do, but not every last detail yet. Some team members were ready to jump in and start coding right away, and just call it Agile Development if we needed to justify the work. Instead we said, "Wait a minute. We have a vision, but no details. If we don't explore what some of the users will demand from the system, we won't design the architecture to accommodate them properly. So before we can write a line of code, we need to explore what a range of users need. Then we can design an extensible architecture that should support most of those needs. And <i>then</i> we can jump in and start coding." So the Web site was, in part, a format for exploring what different sorts of users would want, by telling stories of how they would use the system. And since the system was intended to be marketed to users who could use those same stories as a way to envision using the system themselves, it made sense to document those stories in a marketing-oriented Web site. But marketing-oriented or not, the Web site still served a purpose as a design document.<br />
<br />
Now my friend would never be so rigid and unimaginative as to say that the Web site wasn't a design document; but I have met people who are so wedded to hidebound procedures that they would have argued exactly that, just because it didn't conform to some formally defined design document template or fit into some formally defined design methodology. And that reminded me of <a href="http://www.kipling.org.uk/poems_neolithic.htm">Kipling</a>:<br />
<br />
<blockquote><br />
"There are nine and sixty ways of constructing tribal lays,<br />
"And-every-single-one-of-them-is-right!"<br />
</blockquote><br />
<br />
Design is a heuristic problem, meaning that there are techniques that can lead to a solution, but no single guaranteed and inviolable path to a solution. Quoting from <a href="a href="http://en.wikipedia.org/wiki/Heuristic"">Wikipedia</a>:<br />
<br />
<blockquote><br />
In computer science, a heuristic is a technique designed to solve a problem that ignores whether the solution can be proven to be correct, but which usually produces a good solution or solves a simpler problem that contains or intersects with the solution of the more complex problem.<br />
</blockquote><br />
<br />
Note the word "usually" in that description. Some heuristics are better than others, but none can be proven to be right, especially not in the general case.<br />
<br />
There are many ways to design, because design is really just a means of communicating and refining your ideas. Different people communicate better in different fashions. Some people are more visual, and some or more verbal. Some are more instinctive, and some are more methodical. Some are more detailed, and some have a broader view. And so there's no one right way to communicate a design to other team members and stakeholders. The only "right" approach is multiple approaches, to ensure that you cover the same material in different ways to gain different perspectives.<br />
<br />
As an example, some people love written design docs, and just can't see any benefit in design diagrams. Others believe in making excruciatingly detailed UML diagrams, and sometimes see those as "complete" designs. Now I'm pretty fanatical about using UML for my designs; but when <a href="http://www.richardhaleshawgroup.com/RHSGroup/DesktopDefault.aspx">I teach UML</a>, I always point out that neither text nor pictures is sufficient. You need both. Different people and different teams will emphasize one over the other, but you need both.<br />
<br />
That doesn't mean that there aren't better ways and worse ways to design. I would never consider a marketing-oriented Web site to be a <i>complete</i> design, just a step in building the design. But when we built that Web site, we were definitely participating in a design effort. Because...<br />
<br />
<blockquote><br />
"There are nine and sixty ways of constructing tribal lays,<br />
"And-every-single-one-of-them-is-right!"<br />
</blockquote>]]></content:encoded>
</item>

</rdf:RDF>