<?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/1122474050.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/1142820076.shtml" />
  <rdf:li rdf:resource="http://tabletumlnews.powerblogs.com/posts/1142228521.shtml" />
  <rdf:li rdf:resource="http://tabletumlnews.powerblogs.com/posts/1141958719.shtml" />
  <rdf:li rdf:resource="http://tabletumlnews.powerblogs.com/posts/1141938092.shtml" />
 </rdf:Seq>
</items>
</channel>

<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/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/1142820076.shtml">
<title>Bonjour, Montreal!</title>
<link>http://tabletumlnews.powerblogs.com/posts/1142820076.shtml</link>
<description>This is a little late, because I've been doing post travel stuff, and then getting ready for the new VSTS class coming up. To the fine folks in Montreal, I say:...</description>
<dc:creator>Martin L. Shoemaker</dc:creator>
<dc:date>2006-03-20T02:03+00:00</dc:date>
<content:encoded><![CDATA[This is a little late, because I've been doing post travel stuff, and then getting ready for the new VSTS class coming up. To the fine folks in Montreal, I say: <i>Pardonnez-moi, svp, mes amis!</i><br />
<br />
So on Wednesday night in Montreal, I gave <a href="http://tabletumlnews.powerblogs.com/posts/1142228521.shtml">my presentation to GUMSNET: Ink in 60 Seconds</a>. Despite my rather hideous attempt to apologize in French for not being able to speak French, they were most gracious hosts. (And darn it! I rehearsed that apology over a dozen times on the trip, until I had it down pat; and then I fell apart when I actually had to give it. Here's what I meant to say: <i>Bon soir, monsieurs! Mon nom est Martin L. Shoemaker, et je ne comprends pas le français. Pardon, si vous plais. Je suis un debutante en français. Mais mon Tablet PC comprend le français!</i>)<br />
<br />
I got caught in a lot of Montreal traffic, and also had to fight to find parking in Centre-ville, so I was just a bit late. And then my machine had to reboot. But we finally got rolling, and I started writing little Tablet PC demos, with a 60 second clock running. There were occasional laughs at my expense when I missed the 60 second mark; but on the other hand, many of the demos were done in under 30 seconds. The Tablet PC API is just that powerful. By the time we were done, we were drawing pictures, editing them, erasing them, saving them, loading them, and exporting them as images. We were also drawing shapes that the Tablet PC recognized and identified. We were converting handwriting to text, in both English and French. And we even wrote some text by hand and then had the Tablet PC speak it out loud. We finished with ten ideas for great Tablet PC apps just waiting to be written. I hope that I inspired someone in the audience to go write one.<br />
<br />
There was one hang-up in the presentation; and I promised the good folks from GUMSNET that I would blog about it, including what I learned afterward. Late in the presentation &mdash; right about the time I tried to do handwriting recognition, when I needed really good ink collection &mdash; <a href="http://tabletumlnews.powerblogs.com/posts/1129576187.shtml">my wonderful Gateway CX200X Tablet PC</a> started exhibiting dead spots that were strangely reminiscent of <a href="http://tabletumlnews.powerblogs.com/posts/1128232808.shtml">the bad old days of Toshiba</a>. The dead zones weren't as consistent, but they were irritating. And they always seemed to be right where I was writing text en français to try to show off the multi-lingual power of the Tablet PC. The audience was forgiving for this, but they did insist on knowing the answer when I learned it. Well, here's what I <i>think</i> I have learned. I noticed that the pen seemed to behave better when I held it at different angles; and then I remembered that when we broke for dinner, I dropped the pen. And as far as I can recall, there were no dead zones before the break, only after. I suspected that maybe I had jammed something in the pen tip; and with a little experimentation, I found that rotating the pen around its axis or relative to the screen could sometimes make the dead zone go away. Suspecting a pen problem rather than a screen problem, I pulled out <a href="http://tabletumlnews.powerblogs.com/posts/1134009970.shtml">my spare pen</a>. And I have had no dead zone problems since.<br />
<br />
All in all, Montreal was a delightful place to visit, and I hope to return some day when I have a little more time to visit. And the folks at GUMSNET were a great audience. I ran about 40 minutes over time (gee, there's a surprise); and they were all alert and attentive right to the end. We would probably have stayed longer, but the Microsoft employee who was keeping the facility open for us wanted to go home!<br />
<br />
Of course, <a href="http://www.richardhaleshawgroup.com/RHSGroup/Community/blogs/Bloggers.aspx">Richard</a> would have my hide if I didn't mention that Ink in 60 Seconds is the opening segment of <a href="http://www.richardhaleshawgroup.com/RHSGroup/DesktopDefault.aspx?tabindex=6&tabid=61">our Tablet PC Programming Workshop</a>, where you can learn all this and much, much more about building your own Tablet PC applications. In the class, you won't just watch: you'll build a full-featured Tablet PC application yourself, and learn the Tablet PC from the inside. I hope we'll be adding a public Tablet PC class to our schedule first, but you can always bring us to your site.]]></content:encoded>
</item>

<item rdf:about="http://tabletumlnews.powerblogs.com/posts/1142228521.shtml">
<title>Ink in 60 Seconds</title>
<link>http://tabletumlnews.powerblogs.com/posts/1142228521.shtml</link>
<description>So why aren't you writing Tablet PC applications with .NET yet?...</description>
<dc:creator>Martin L. Shoemaker</dc:creator>
<dc:date>2006-03-13T06:03+00:00</dc:date>
<content:encoded><![CDATA[So why aren't you writing Tablet PC applications with .NET yet?<br />
<br />
Do you think it's too difficult? Do you think you're too busy to learn the Tablet PC API? Well, I say you're wrong.<br />
<br />
Or do you just not see what sort of Tablet PC app you might build? Do you think that there's no great Tablet PC applications out there for you? Well, I say you're wrong again.<br />
<br />
And I'm so sure you're wrong, I'm going to prove it to you at <a href="http://gumsnet.org/">the Groupe d'utilisateurs de l'archutecture Microsft .Net de Montreal</a> by building some simple little Tablet PC samples &mdash; samples you can easily adapt into your own applications &mdash; each written in under 60 seconds. (<b>Note:</b> In order to meet that time limit, I'll be writing these in C#, the language I know best. Every single one of these demos could be written in 60 seconds in VB.NET, but only by a better VB programmer than me!)<br />
<br />
Then after each sample is running, I'll explain to you what I did, how I did it, and how you might expand on it. Some of the samples I'll build include:<br />
<br />
<ul><br />
    <li>60 Seconds to Ink: Capturing Ink in a window in your application.</li><br />
    <li>60 Seconds to Ink Anywhere: Capturing Ink in <i>any</i> window in your application.</li><br />
    <li>60 Seconds to Programmatic Ink: Adding Strokes programmatically to an Ink surface.</li><br />
    <li>60 Seconds to Saving Ink: Saving your drawings.</li><br />
    <li>60 Seconds to Loading Ink: Loading your drawings.</li><br />
    <li>60 Seconds to Saving <i>Some</i> Ink: Saving part of a drawing.</li><br />
    <li>60 Seconds to Loading <i>Some</i> Ink: Loading a drawing into an existing drawing.</li><br />
    <li>60 Seconds to Exporting Ink: Savinging your drawings as images you can share with non-Tablet PC users.</li><br />
    <li>60 Seconds to Selecting, Moving, and Resizing: Manipulating the Ink that you draw.</li><br />
    <li>60 Seconds to Erasing: Erasing the Ink that you draw.</li><br />
    <li>60 Seconds to Drawing Attributes: Drawing with multiple colors, transparent Ink, and different shapes and sizes of pens.</li><br />
    <li>60 Seconds to Clipboarding: Really simple Ink clipboard functionality &mdash; and why it doesn't work!</li><br />
    <li>60 Seconds to Simple Handwriting Recognition: Simple handwriting in a form.</li><br />
    <li>60 Secondes au Français: Identification d'écriture en français.</li><br />
    <li>60 Seconds to More Handwriting Recognition: Handwriting recognition mixed with typing.</li><br />
    <li>60 Seconds to Handwriting Recognition Anywhere: Handwriting recognition from any Ink surface.</li><br />
    <li>60 Secondes à Plus Français: Plus d'identification d'écriture en français.</li><br />
    <li>60 Seconds to Text-to-Speech: A simple talking application.</li><br />
</ul><br />
<br />
And just in case those samples don't inspire you to devise a great new Tablet PC application, I'll finish the presentation by spending 60 seconds (probably more) describing each of ten different killer Tablet PC applications that I'm just too busy to write myself, but which I think <b>somebody</b> should be writing.<br />
<br />
So fasten your seat belts. This is gonna be one heck of a fast ride!<br />
<br />
And no, I'm not doing this talk just for <a href="http://www.ineta.org">the free pizza from INETA</a> and the free trip to Montreal. I certainly hope that some of the attendees are so excited that they'll want to take <a href="http://www.richardhaleshawgroup.com/RHSGroup/DesktopDefault.aspx?tabindex=6&tabid=61">our Tablet PC Programming workshop</a>, where we'll go places you just can't reach in 60 seconds.]]></content:encoded>
</item>

<item rdf:about="http://tabletumlnews.powerblogs.com/posts/1141958719.shtml">
<title>My dream Origami project</title>
<link>http://tabletumlnews.powerblogs.com/posts/1141958719.shtml</link>
<description>OK, let me first acknowledge right up front: this project is eminently impractical. For one thing, there’s the price: replacing a paper process with at least four Origamis (plus other support...</description>
<dc:creator>Martin L. Shoemaker</dc:creator>
<dc:date>2006-03-10T02:03+00:00</dc:date>
<content:encoded><![CDATA[OK, let me first acknowledge right up front: this project is eminently impractical. For one thing, there’s the price: replacing a paper process with at least four Origamis (plus other support hardware) is just a bit pricey. And for another thing, many of the target end users are just a bit suspicious of and even opposed to technological solutions. They think the paper processes are working just fine, thank you very much. (Though as someone who occasionally has to process their paperwork, let me tell you: it ain’t easy, and often their handwriting and habits complicate my job.)<br />
<br />
Still, inspired by <a href="http://tabletumlnews.powerblogs.com/posts/1141938092.shtml#95">Epee Bill</a>, I had this vision. And I really do think it would be a vast improvement over the paper processes, if people would accept it. Just imagine...<br />
<br />
Mr. Vesper stands beside the fencing strip. In his hands is an Origami: somewhat heavier than the clipboard he once would have carried, but not much larger. On the Origami screen are the names of two fencers. He calls them: "Up next. Mr. Smith. Mr. Bolakowski." The fencers enter the strip, Smith on the right and Bolakowski on the left, and hook up to their wires. Then they present their weapons to Mr. Vesper. He tests each one, and then with his finger makes two "check" gestures on the Origami to indicate that the weapons passed inspection.<br />
<br />
Mr. Vesper returns to the sideline and calls out: "Fencers ready..." The combatants assume their en garde positions. "Fence!" The wireless microphone he wears picks up this command and starts the fencing clock, as the fencers approach each other. (If Mr. Vesper preferred not to wear the mike, he could also start the clock by pressing a button on the Origami.) The fencers engage. Beat, beat, beat, feint, attempted parry, disengage, lunge! The scoring box lights up with one light, and Mr. Vesper calls "Halt!" Ideally, the scoring box automatically stopped the fencing clock; but since most scoring boxes aren’t capable of that, Mr. Vesper can also stop the clock via voice or button. Mr. Vesper calls the action, and then records a touch left by making a downstroke gesture in a box near Mr. Bolakowski’s name. The Origami acknowledges by announcing, "Touch, Bolakowski. Score is 1, 0." Meanwhile, the Origami uses WiFi to update the tournament server; and then the server posts the results live to the tournament’s Web site. One of the tournament workers is also wandering around between the strips, using another Origami to record live video and stream it to the server and from there to the site. Fencers and fans from all over the world can follow the tournament in real time. A tournament monitor near the bout table shows the live results. It has a touch screen (in fact, it’s really a larger Tablet PC device being used as a kiosk) so that spectators and fencers can navigate to different pages and check current standings. (This will, I hope, keep them from coming to the bout table and distracting us from our work by asking, "So if I win my next bout, who will I face after that?" Or "So is this an A tournament?" [Like I know how to answer that.] On the other hand, this system will do so much of my work, so I may have time for questions.)<br />
<br />
Mr. Vesper repeats, "Fencers ready... Fence," and the clock and the action start again. Thrust, retreat, thrust, retreat, ballestra-lunge! And the scoring box lights up with one white light. Off target. Mr. Vesper calls the action and records the off target by making a downstroke in a different box (colored white to match the white off-target light). The Origami announces, "Off target, Bolakowski. Score is 1, 0."<br />
<br />
"Fencers ready... Fence!" Taking a more aggressive tact, Mr. Bolakowski almost immediately leaps into a fleche. But his timing is off, and he ends up colliding with Mr. Smith. Mr. Vesper calls, "Halt! Red card." And he makes a downstroke in a third box (colored red for penalties). The Origami needs more information, so it pops up a list of possible reasons for the penalty, and Mr. Vesper checks the one that says, "Corps a corps." The Origami announces, "Red card. Bolakowski. Score is 1, 1."<br />
<br />
Chastened, Mr. Bolakowski falls back into a more defensive mode. He and Mr. Smith trade thrusts and parries and occasional points back and forth, but the action slows. Eventually, the fencing clock runs out, and the Origami announces, "Time." Mr. Vesper calls halt, and then says, "Victory to Mr. Bolakowski, 4-3." The Origami has already figured this out for itself; but since no result is official until a director confirms it, the Origami presents the results to him. He makes a check gesture, and the official results are sent to the server and the Web. Immediately his Origami screen displays the next bout, and he calls it out: "Fencing, Emerson, Jones." Mr. Jones is not immediately available for some reason, so the Origami begins a countdown clock. If he doesn’t arrive in time, he’ll forfeit.<br />
<br />
When the last pool bout of the event is complete, the server immediately produces a seed page and also an elimination table. It also pushes the list of elimination bouts out to the directors’ Origamis. The software on the Origamis knows that these are elimination bouts, so it changes the way it keeps time: elimination bouts run to 15 points, and are stopped every three minutes for a one minute break.<br />
<br />
Now again, I know this is impractical, probably for more reasons than I have identified. (Flashing blades and computer equipment may be a bad combination.) And while I do think Microsoft could be interested in unusual showcases for their devices as a way to get publicity, I’m not sure that getting involved with fencing is the way to do it, at least not in America: in a country where competitive hot dog eating is actually broadcast on ESPN, fencing can’t get any air time. But boy, would I love to see it in operation! And I could write practically this whole system by myself, without a whole lot of work; and I could <a href="http://www.richardhaleshawgroup.com/RHSGroup/DesktopDefault.aspx?tabindex=6&tabid=61">teach a team how to write it</a> in under a week. I just have no confidence I’ll ever persuade anyone to let me. But I can dream...<br />
<br />
Of course, there are other sports that could make good showcases. I’m thinking that the American biggies – football, basketball, and baseball – would make poor showcases. The fields of play are too large, and officials are too distant from the action, so no one would ever see the Origamis. So that hints at what would make a good showcase sport: one with a smaller playing field, with probably only a small number of participants (two, or maybe four), and where the officials are fairly close to the action so that the Origami will be in the camera shot quite often.<br />
<br />
Tennis, anyone?<br />
<br />
UPDATE: Fixed the score, thanks to <a href="http://tabletumlnews.powerblogs.com/posts/1141958719.shtml#102">Epee Bill</a>.<br />
]]></content:encoded>
</item>

<item rdf:about="http://tabletumlnews.powerblogs.com/posts/1141938092.shtml">
<title>All right, NOW I can talk about Origami...</title>
<link>http://tabletumlnews.powerblogs.com/posts/1141938092.shtml</link>
<description>...but Microsoft says it so much better here. As some reports have hinted, Origami devices (now known as "Ultra-Mobile PCs") are small, light, highly portable Tablet PCs....</description>
<dc:creator>Martin L. Shoemaker</dc:creator>
<dc:date>2006-03-09T21:03+00:00</dc:date>
<content:encoded><![CDATA[...but Microsoft says it so much better <a href="http://www.microsoft.com/windowsxp/umpc/default.mspx">here</a>. As some reports have hinted, Origami devices (now known as "Ultra-Mobile PCs") are small, light, highly portable Tablet PCs.<br />
<br />
And for developers, there's a lot more on Ultra-Mobile PCs <a href="http://msdn.microsoft.com/mobility/tabletpc/umpc/default.aspx">here</a>.<br />
<br />
And of course, if you want to learn how to write programs for UMPCs (boy, is that an ugly abbreviation, or what?), I would like to suggest that you start with <a href="http://www.richardhaleshawgroup.com/RHSGroup/DesktopDefault.aspx?tabindex=6&tabid=61">our Tablet PC Programming Workshop</a>. (If your organization plans to deploy a large number of UMPCs, <a href="http://tabletumlnews.powerblogs.com/posts/1138841523.shtml">Microsoft's SSP program recommends our course</a>.)<br />
<br />
UPDATE: Epee Bill (famed member of <a href="http://www.msu.edu/user/emerson1/aads.html">the Ann Arbor Dueling Society</a>) <a href="http://tabletumlnews.powerblogs.com/posts/1141938092.shtml#95">asks</a>:<br />
<br />
<blockquote><br />
And if I asked you, "Why do I want one of these and no a PDA?" what would you say? <br />
</blockquote><br />
<br />
Well, Bill, I'm not sure that my answer will make any difference to you, because you're a Mac guy. But I'll give you the answer anyway. Does the PDA run Word? Excel? Outlook? Internet Explorer? Windows media player? A wide range of PC games? MapPoint? And pretty much all of your Windows software?<br />
<br />
Does the PDA play DVDs? A UMPC will, though I expect you'll have to plug in an external DVD player on most of them, and probably a power cord. DVD playing should use a lot of battery power.<br />
<br />
And while I'm at it, does the PDA run <a href="http://www.TabletUML.com">Tablet UML</a>? Or OneNote? Or Journal? Or the Franklin Planner software? Or GoBinder? Or any other Tablet PC software?<br />
<br />
See, you're a Mac guy, so you don't have any Windows software; but a lot of people do. For them, this may be a good alternative to a high-end PDA. (Low-end PDAs will still be a lot cheaper.)<br />
<br />
And wait until we see new applications built on the power of ultra-mobile connectivity and power. I have some ideas on those, but not enough time to present them right now.<br />
]]></content:encoded>
</item>

</rdf:RDF>