Archives / 2003 / November
  • The Weekend

    So many projects, so little time. 

    A reader posted a comment asking about an old project, the PocketPC RSS Aggregator. That project has been frozen at the current build for a while; here's what's been cooking in the back of my mind. I've been working on Speech2Blog, and was hoping to eventually provide a complete end-to-end rss solution with speech recognition, rss reading, blogging, and output to pocketpc. That's the eventual goal, and hopefully it won't drag on too long...

    On a personal note, this weekend really has been a stress reliever.  I just finished my first published article, that should be out either later this month or December, and I'll be performing at Carnegie on Sunday, with rehearsals in the city all weekend.  There's an excuse to go to Wo Hop. I hope everyone else has had a refreshing holiday!


  • Speech SDK

    John Lawrence writes about speech2blog:

    “Now if the blog page was navigable with the Speech Application SDK speech controls, that would be really cool.“

    So I dug out the cool cds & dvds that I hadn't gotten to look at yet from the PDC, and checked out the Speech Application SDK (PDC gave out v1.0b3).  There's also a "Must Have Cool Stuff For Developers" CD (a great hook if ever I heard one), which contains speech enabled versions of the Commerce Starter Kit and the Fitch and Mather Stock app (among other things).

    In response to John's comment, it'll be tough to add support in Speech2Blog since it's a Longhorn app, and SASDK will not install on Longhorn (OS Requirements state 2000sp3, 2003, or XPProSP1).  The MS Enterprise Instrumentation Framework is also required (download link in this post ).  The feature looked like adding support for speech navigation to .Text, rather than through my app. From the marketing info: "Multimodal applications use Internet Explorer as the client."

    This does sound intriguing, though.  Here are some highlights from the documentation I was given as far as ASP.NET and the SASDK:

     *ASP.NET Speech controls (needs either Telephony Services client or the "Speech Add-in for MSIE")
     *Speech Application Project Wizard
     *Grammar editor
     *Modify pronunciations (with the Semantic Script Editor) 
     *Record Phrases: "you can associate prerecorded .wav files with transcriptions in the Transcription Window" (I wonder if this means we'll finally be able to do voice recognition from .wav files, rather than being forced to use the microphone!) From the website FAQ: "The SASDK supports only 8 kHz, 8 bit, mono, PCM recording."
     *Speech Debugging Console: "Tells you what is recognized and how confident the speech engine is in that recognition."

    Link to order/download free copy of the SASDK


  • Microsoft Enterprise Instrumentation Framework

    After previously being available for download only by MSDN Enterprise and Universal subscribers, the Microsoft Enterprise Instrumentation Framework is now available here.

    “The Microsoft Enterprise Instrumentation framework (EIF) enables applications built on the .NET Framework to be instrumented for manageability in a production environment. This framework provides an extensible event schema and unified API which leverages existing eventing, logging and tracing mechanisms built into Windows, including WMI, the Windows Event Log, and Windows Event Tracing. An application instrumented with this framework can publish a broad spectrum of information such as errors, warnings, audits, diagnostic events, and business-specific events. In addition, Enterprise Instrumentation enables tracing by business-process or application service, and can provide statistics such as average execution time for a given process or service.“

    This should make some rudimentary in-production performance testing and stability monitoring of ASP.NET applications much easier...


  • Speech2Blog Plans

    I was all set to code for Speech2Blog, and work on an article I'm writing, but Whidbey doesn't want to play nice tonight. Unfortunately, this pushes back development of Speech2Blog quite a bit, as well as prevents me from working on the code portions of my article.  I did manage to get quite a bit ahead through the use of code from an external source; it looks like now the application is going to support the metablog api, which should remove the only-.text limitation.  I'm adding in lots more features, now that the app is evolving into something more than the proof-of-concept that Alpha 1 was. 

    Some future features:

    • Voice command (both interaction with the posting, and some minor windows interaction as well.  Think “run notepad“ and “begin post,“ “send post“
    • Longhorn flyout (this is halfway there for bare functionality, but still quite a way from where I want it.
    • Posted source code


  • Whidbey - Hosed

    Whidbey finally gave up on my machine. All of the controls in the toolbox are greyed out, but I can copy controls from other forms onto the form I'm working on.  The properties dialog also is non-functional (greyed out). On the plus side, I'll get to test out the “Restore installation to its initial state” feature in Whidbey.  I'll update this post with the results of the attempted repair.

    Update - It turns out this was due to “VSCorePackage” getting corrupted. Restoring Whidbey helped a bit, but it's still acting a little odd. It looks like “devenv /resetskippkgs” might have saved me the trouble though.


  • Manually Compile your XAML into BAML

    For those of you who are hardcore console compilers, here's how you can manually compile your BAML partial classes, using the Windows Application Compiler:

    The file, ac.exe, can be found in the %installdrive%:\WINDOWS\Microsoft.NET\Avalon directory. You can either apecify the project (*.lhproj) file or XAML. If you choose XAML, you can specify whether to compile to “full code” (instead of BAML) using the -code directive, all XAML files in the directory (the -dir ), or perhaps the strangest, “Create a combined source file only  (No IL)”, using the -so directive.

    Update - from the comments, Rob Relyea writes that ac.exe is obselete, and XamlC.exe (available at the LHSDK prompt) should be used instead.  Thanks for the correction!

    Update2 - Rob Relyea posts more on why to compile your XAML, when you don't have to compile, and what you need to have in order to do so here.


  • Whidbey Distributed Applications

    While exploring Whidbey, sometimes the most interesting features have a “This feature is not available in the Visual Studio 'Whidbey' Alpha release” teaser accompanying them.

    Under Visual Studio Solutions in the new project dialog box, there's a new template called “Distributed Application.” After clicking away the message, an *.ADM file is created.  If you try to add a new item to the project, there's an additional item type listed: Distributed Application Diagram (the *.ADM file). This is reminiscent of the web services zoning tool shown during the 2nd PDC Keynote.  I'm eager to try this when it's ready...


  • Directories for the DOS Inclined

    I found a new surprise in Longhorn today; here's something that should be fixed: 

    Say you create a new user, with a spelling that's slightly off.  So you log on as “BortSimpson” only to realize that you spelled your name wrong.  You would think that changing the user name would also repoint the directories to “BartSimpson,” however when you look at the directories in “Documents and Settings,” it retains the old names... looks like “Bort” is sticking around for a while, even if Windows learned your name is really Bart.  I do forsee WinFS doing some of this legwork in the future, but only time will tell.


  • Whidbey Gotchas

    So far, developing in Whidbey has been great, with one gotcha that I've seen so far.  I have a windows form, with 4 textboxes, 4 labels, and a couple of buttons.  Clicking on one of the textboxes, entering “Edit Properties Mode,” and changing the text property gets VS stuck in an exception loop. 

    Longhorn seems to have a memory leak in explorer.exe that may only get bad during the default screen saver.  (~900mb after 4 hours of non-use)

    So, this does not take anything away from the products in this early stage; this isn't a bash.  It's best to know about the issues as they come up.


  • my first spoken post

    this is my first post from an application I am writing and to recognize speech and have it instantly show on your web log . it uses the speech API in longhorn. I will post an Alpha version as soon as I clean up the code , since it is so embarrassing right now. my initial results are pretty good and I can speak quite quickly without a great deal of corrections from the suggestions More information will come later.


  • Speech2Blog Alpha 1

    As promised, here's my first release of Speech2Blog. It will take your speech, and post it to a .Text weblog.  (Thanks Scott for clarification of the asmx address.) Since this is an Alpha release, here's the gotcha's:

    • User settings must be set on every use of the app. (it'll hold them until the application is closed, though)
    • It will only work with .Text
    • It will only work on Longhorn (It does use the great new Longhorn Speech API, after all!
    • No source code (It's still pretty jumbled, and filled with worst practices) yet (I will be releasing it after it's been cleaned up)

    Feedback is much appreciated. Enjoy!


  • Longhorn Sidebar RSS Howto

    Well, after trying to compile and run the RSS Newsfeed sidebar from MSDN, it threw an exception on explorer.  Notice the file “bullet.png” is not available on the web site, and just replacing it with another png file did not do the trick.

    The answer is to use the file from the SDK on the DVD. This link will only work if you have the Longhorn SDK installed.  It shows where you can download the full set of files as a zip, and extract it out.  Simply extract to a folder, open up the Longhorn Build Environment (shortcut on your start menu), navigate to the folder, and type: “msbuild NewsFeedTile.csproj”.  From there, copy the newly compiled dll, “bullet.png” and “setup.cmd” to a new folder (wherever you want to consider it “installed”), and run “setup.cmd”.  Right click on the sidebar, and click “News Feed”.  It comes default loaded with a MSDN feed; personally I like this one; right click the news feed app, and click on “News Feed Tile Properties” to replace it.  Now we just need to allow for multiple feeds...


  • LH/VPC Speed boost?

    In response to a post by G. Andrew Duthie, Drew Marsh tells of a possible speed tweak for the longhorn/virtual pc combo:

    Did you guys make sure to 1) compact the VPC HD image and then 2) defrag the physical drive that image was created on? VPC dynamically expands the disk, which means it has to allocate new space for the HD each time which can result in a terribly fragmented VPC HD image file. Try the above (in order) and you should get some better performance.


    P.S. I'm not saying it's gonna BLAZING FAST after that, but I got a noticeable boost. ;)
    Thanks Drew!


  • Longhorn Bug Reporting

    Well, since the WindowsBeta site doesn't accept bug reports this iteration, Microsoft recommends either the Longhorn public newsgroups: (a great source of information, with many a Microsoft employee posting helpful advice) or the Report Client on the Longhorn DVD 1 (x:\ReportClient\Microsoft Beta Client 1.1.msi). The funny thing is, in order to install it, you need .NET framework 1.1 installed. I am surprised that they didn't compile it to work with 1.2 (2.0). Suffice it to say, though, that once you do have it installed, you get a very clean looking reporting tool, and now you don't have to worry about a time limit to finish the bug report (or should I say "Windows Issue Report").  Here's to helping make a better product!


  • Namespace Management

    With all of the new classes in 2.0, I sometimes find myself guessing at the dll's in order to find out how to reference them in a project. Case in point: with the MONAD namespaces (System.Management) , I didn't realize that they were actually found in the “Program Files\Longhorn Command Shell Preview” folder.  Another point (from 1.1), the System.ComponentModel.Design namespace is actually held in System.Design.dll. I was recommended to use Reflector to search for the classes, but what about classes that are not included in the framework?


  • New Keyword: yield

    The new yield keyword lets you return a value from an enumerated method.  You can use this wherever either you can't use a ref or out param, or when you can't use a return value.

    The best time to use this is when you want to iterate through the return values of a method. Here's a rather convoluted example of when you could use this keyword.  The outmethod returns the Fibonnacci sequence and the OutMethod iterates through the results and formats them.  

    static IEnumerable FibSeq(int maxValue)
           float veryOld = 0;
           float old = 1;
           float fAbsValue = 0;
           yield old;
           while ((veryOld+old)<maxValue)
              fAbsValue = veryOld + old;
              yield fAbsValue;
              veryOld = old;
              old = fAbsValue;

       protected static string OutMethod(int iterations)
           StringBuilder sb = new StringBuilder();
           foreach (float fib in FibSeq(iterations))
           return sb.ToString();


  • Whidbey Avalon Projects

    After installing Whidbey, and looking for some of those new Avalon projects under C# Projects, I realized that the Longhorn SDK actually installs additional project templates for Whidbey.

    The additional product templates are:

    • Longhorn Application
    • Longhorn Custom Control
    • Longhorn Document
    • Longhorn Hosted Application
    • Longhorn Navigation Application
    • Longhorn Screensaver
    • Longhorn Tile
    • Indigo Service Framework Service
    • Indigo Messaging Framework Service
    • Indigo Messaging Framework Client


  • Longhorn Product Activation Info

    Just thought I'd let everyone know that we can install this on multiple pc's if we want. Now I can have a virtual pc install, as well as a dedicated install.

    “This pre-release product uses product activation technology. You must activate your copy of "Longhorn" within 14 days of installation. You have been provided with a product key that permits 31 activations. All activations will expire after 365 days. After expiration, you cannot log on to this pre-release product.”


    Update: Just so people understand, I will not send out a Longhorn key.  You have to get the key through whatever source you got Longhorn through, whether it be MSDN, or a conference.