Geeks With Blogs
Ulterior Motive Lounge UML Comics and more from Martin L. Shoemaker (The UML Guy),
Offering UML Instruction and Consulting for your projects and teams.
.NET Discussions of .NET development with any language or tool.
Dr. Strained Memory or: How I Learned to Stop Worrying and Love Compact Framework Memory Management
OK... So why has my DODO been incalculable? Well, because we've been chasing down memory problems in our .NET Compact Framework 2.0 app that runs under Windows CE 5.0. And if that just sent a chill down your spine, then you've probably been here before. You have my sympathies. If you haven't been here before but you're planning a CF/CE app: Be afraid. Be very afraid. The following is a brief summary of what we've learned (the hard way) about memory management in a Compact Framework application. "In ......

Posted On Saturday, November 15, 2008 5:53 PM

Project metrics they never taught you in Project Manager training
Project management involves lots of metrics: data you gather, measure, and analyze to assess and predict the state of your project. But I find some of the most useful project metrics are often overlooked. Here are a few to add to your toolbox. WSR (Work-to-Sleep Ratio) This is a measure of how likely your team members are to make mistakes at crucial moments. If their WSR for the week is 1 or less, they're probably bored. 1.25 or even 1.5 are signs of a team moving at a good pace. Higher than that, ......

Posted On Saturday, November 15, 2008 4:42 PM

Dee Jay, Part 5: Homophones and Alternates
So in Part 4, I said that recognizing the music key would be tricky. But why? Didn't I spend most of Part 3 explaining how cleverly I used M-SAPI so that users only had to say partial names to be recognized? Well, yes; but I've long said that programming has a Conservation of Complexity law: the less complex for the users, the more complex for the programmers. (Be glad: that's the short version. My long discussion on Conservation of Complexity would take up the rest of this post.) The reason why ......

Posted On Saturday, November 15, 2008 4:40 PM

Dee Jay, Part 4: I recognize that!
In Part 3, we built a Grammar for Dee Jay to recognize. Update to Part 3 Driving around last night, it occurred to me that I can let the user specify what sort of media is expected. For example, I could say "Dee Jay, play song Has Been" to pay the song, or "Dee Jay, play album Has Been" to play the album. This specifier should be optional, so the user only has to use it when the user knows there's a potential conflict. Besides making my Dee Jay experience a little more convenient, this also gives ......

Posted On Saturday, November 15, 2008 4:38 PM

Dee Jay, Part 3: Building a Media Player Grammar
In Part 2, we dug a little bit into MPM (Media Player Magic) to build a JukeBoxPhraseMap, mapping phrases from the Media Player to songs, albums, and collections. Now we need to turn those phrases into M-SAPI commands. In concept, we want a Choices object, which represents a choice between two or more alternate phrases. We could turn the whole map into one giant Choices, and we will; but that Choices would be pretty unusable. No user is going to remember and correctly speak some of the song titles ......

Posted On Saturday, November 15, 2008 4:35 PM

Dee Jay, Part 2: MPM, and more MPM
In Part 1, we saw how the process of building a grammar is similar to the Decorator or Composite patterns, building a larger structure out of smaller pieces. In Part 2, we'll build and recognize a grammar to see how to define and identify parts of a command. In some ways, I wish I had chosen a different example for my first speech application. I think Dee Jay is a really cool app, and I use it every day on my drive to work; but the Media Player rogramming is complex enough to be worthy of a few blog ......

Posted On Saturday, November 15, 2008 4:32 PM

Dee Jay, Part 1: Decorating, composing, or encompassing?
To understand the code behind Dee Jay, we first need to understand the basics of the M-SAPI speech recognition system. That means we need to understand three concepts: SpeechRecognitionEngine. This is the class that will listen for commands and phrases and fire events when it recognizes something. We're not ready to understand this class yet, even though it's a very simple class. Before we can look at the SpeechRecognitionEngine, though, we need to look at Grammar. Grammar. This class describes a ......

Posted On Saturday, November 15, 2008 4:30 PM

Dee Jay: A Voice-Controlled Juke Box for Windows Vista!
I wrote Dee Jay as an example for a proposed talk for the Ann Arbor Day of .NET, and as a way to learn more about the Managed Speech API in Microsoft Windows Vista. Dee Jay works with M-SAPI and Windows Media Player to give you a totally voice-controlled way to play your music. You simply say a command like "Dee Jay, play some Dire Straits", and it searches your song catalog for songs by Dire Straits, picks one, and plays it. Or you can name a specific title, or even a genre. If there are multiple ......

Posted On Saturday, November 15, 2008 4:28 PM

Jason's hearing voices...
...and they're listening to him. Jason built a C# implementation of a Z-machine, the engine that powered classic old text adventures. Now James Ashley has added a Managed SAPI user interface, allowing you to talk to the game and have it respond. Jason knows I'm very excited by M-SAPI, so he sent me a link. Now I'm sharing it with what few readers I have; and I'll be keeping an eye on James's blog. And yes, Jason, I am very excited about M-SAPI. Witness my next post ......

Posted On Saturday, November 15, 2008 4:26 PM

The 21st Century Cocktail Napkin presentation is now available on-line!
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 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 start here.) ......

Posted On Saturday, November 15, 2008 4:18 PM

The Ink in 60 Seconds presentation is now available on-line!
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 Tablet PC programming, most written in 60 seconds or less. Now, thanks to Camtasia Studio, I have a recording of this presentation from the Ann Arbor .NET Developers group on June 14, 2006. And thanks to YouTube, I can now present it to you on-line here. And you can also download a ZIP file of the slides and a cleaned-up version of the sample code. One ......

Posted On Saturday, November 15, 2008 4:17 PM

And-every-single-one-of-them-is-right!
So one time, I showed a friend a Web site for a project I was working on. And he asked an interesting question: Well, you're design guy right? Shouldn't you be writing a design document? And what I suddenly realized was unclear was that the Web site was 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 ......

Posted On Saturday, November 15, 2008 4:04 PM

Richard Hale Shaw says, "Put up or shut up!"
Well, maybe that's not exactly how he put it; but he referenced a post where I wrote: Richard Hale Shaw makes an interesting argument against the C# using statement (not the using directive; and thank you, C# team, for that bit of confusing language). I disagree with him; but it will take time and sleep before I can fully explain why. The short preview: he says you can't force people to use your class correctly; I say I can, and I'll show you how, soon.And he writes: Always wondered what you had ......

Posted On Saturday, November 15, 2008 4:00 PM

Copyright © Martin L. Shoemaker | Powered by: GeeksWithBlogs.net