Welcome to Manicprogrammer Sign in | Join | Help

Here’s The Deal When Your Code Compiles But At Runtime It Can’t Find Some TFS Assemblies

I have run into this twice now. Both on the same project but different branches. The second time was about 6 weeks after the first and I could not remember where or when I had seen it first I just knew that I had. The steps go like this:

The solution compiles clean.

You go to run the solution and it may start running if it doesn’t have an immediate reliance on a TFS assembly. As soon as the application needs to load a TeamFoundation assembly it dies with the following exception:

"Could not load file or assembly 'Microsoft.TeamFoundation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.":"Microsoft.TeamFoundation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"

As it turns out I am working on an x64 machine and the Solution Platform was set to Any CPU or Mixed Platforms

image

 

 

 

 

 

I needed to open up the Solution Configuration and create an x86 platform configuration and then set each project to the x86 Platform (both debug and release). Then when I compile I ensure I have the x86 selected as the Solution Platform.

Voila! The code now runs on my x64 machine.

 

 

Technorati Tags:
Posted by michaelruminer | 2 Comments
Filed under

Team Foundation Server Administration Tool Version 1.4 Has Been Released On CodePlex

Version 1.4 has been released. Build 1.4.90426.1. It really has few user level changes from the 1.4 Final Beta. Some of the reports on the final beta have been pushed into the next release or as of yet unrepeatable from our end.

Ladislau Szomoru and Peter Blomqvist have been working hard on 1.5 that has some significant changes in terms of user experience (it may end being a 2.0, I don't know yet, but they have been referring to it as 1.5. We'll definitely have a major version number change when Team System 2010 is released. What the feature set will need to be will change drastically and the configuration of environments could be much more diverse making it a challenging release for this tool. It may be like starting over.

 

For a list of all the changes since Version 1.3 follow this link. The big change from V1.3 and V1.4 is the proper support of Reporting Service for SQL Server 2008. We had that in 1.4 Beta 1 but it is still the most significant of a number of changes and the entire reason that we got moving on a 1.4 version.

 

Technorati Tags: ,

TFS Admin Tool 1.4 Final Beta

The TFS Admin Tool on Codeplex has a new build (1.4.10402.1). This is being labeled the 1.4 Final Beta. You can grab it and also see all the changes from here

Special thanks to Ladislau Szomoru and Peter Blomqvist who did most the work for this build.

 

WI Title
2937 Support for team projects without sharepoint portal and/or reporting
21505 Move unit tests to mstest
21639 Support F5 Compilation on x64 machines
21706 When move to edit permissions in grid no indication of which TP in
21707 Make it more clear how users can switch to admin a different TFS server
21731 Cancelled changes are committed
21745 DisplayName is not populated while adding a new user
21878 invalid URL for SharePoint Server -- assuming admin port

 

Technorati Tags: ,
Posted by michaelruminer | 1 Comments
Filed under ,

What’s Up With ComboBoxes and ObservableCollections in Silverlight??

I have had two different yet potentially related issues in Silverlight within the last week. Well, more than two but just two I am going to talk about in this post. Note my last post title Silverlight With A Set Of Canvases Inside A Stack Panel. To me stacking canvases as I did seems perfectly natural and acceptable but the results are canvases “stacked” on top of one another in the z-dimension as opposed to horizontal or vertical. I digress.

One issue I ran into is hard to explain but is easily presentable. See the video demonstrating it. Basically, if I opened a combobox which was not yet bound then bound it from the async return call to a web service the combobox would then render hosed up from that point forward. If I didn’t touch the combobox and then bound it it worked just fine. Justin Angel rightfully noted I should use the dispatcher to update the combobox that was on the UI thread from the async callback that would be on a different thread. Sadly, this made no difference. Ultimately I ended up locking access to the combobox using isEnabled= false until the async web service call had returned and populated them.

The next issue looked, to me, like a pure eventing issues with some event being delayed. The scenario went like this. If I had a combobox A that when the selection changed locked combbox B (so as not to get the prior issue), cleared the ObservableCollection that was the ItemsSource to combobox B and then made an async web service call rebinding the return values back into the combobox via the same obserrvablecollection, set the SeletecedIndex = 0 less than a second later a javascript error (or something of the nature) would get thrown out saying the index was not in range.

I stepped through the code. It was properly bound on the return trip, it had multiple entries and in the code behind it successfully set to 0 for the selectedindex. If I had not made a selection on combobox B prior to changing the selection on ComboBox A all worked OK.

Really just sensing that there was some in-the-framework event thread that was firing too late and that it was likely coming from the ObservableCollection I shifted it over to a List<> and problem solved.  I had 3 such dependent comboboxes and each one would have the same issue until I moved the source that I bound them to off of the ObservableCollection.

 

Hmmm…

Technorati Tags:
Posted by michaelruminer | 1 Comments
Filed under

Silverlight with A Set Of Canvas Inside A StackPanel

What would you expect to be rendered from the following? Answer in the next post.

Personally I’d expect a vertical stack of canvas each with a button and combobox beside one another. Short answer. Nope!

   1: Notice the nested canvas and the controls list a location relative to Canvas 
   2:  
   3:  
   4:  
   5:            <Canvas>
   6:                <StackPanel>
   7:                    <Canvas>
   8:                        <Button Canvas.Top="0" Canvas.Left="0" Width="50" Height="30" Content="-->"></Button>
   9:                        <ComboBox Canvas.Top="0" Canvas.Left="60" Width="250" Height="30"></ComboBox>
  10:                    </Canvas>
  11:                    <Canvas>
  12:                        <Button Canvas.Top="0" Canvas.Left="0" Width="50" Height="30" Content="-->"></Button>
  13:                        <ComboBox Canvas.Top="0" Canvas.Left="60" Width="250" Height="30"></ComboBox>
  14:                    </Canvas>
  15:                    <Canvas>
  16:                        <Button Canvas.Top="0" Canvas.Left="0" Width="50" Height="30" Content="-->"></Button>
  17:                        <ComboBox Canvas.Top="0" Canvas.Left="60" Width="250" Height="30"></ComboBox>
  18:                    </Canvas>
  19:                    <Canvas>
  20:                        <Button Canvas.Top="0" Canvas.Left="0" Width="50" Height="30" Content="-->"></Button>
  21:                        <ComboBox Canvas.Top="0" Canvas.Left="60" Width="250" Height="30"></ComboBox>
  22:                    </Canvas>
  23:                    <Canvas>
  24:                        <Button Canvas.Top="0" Canvas.Left="0" Width="50" Height="30" Content="-->"></Button>
  25:                        <ComboBox Canvas.Top="0" Canvas.Left="60" Width="250" Height="30"></ComboBox>
  26:                    </Canvas>
  27:                </StackPanel> 
  28:            </Canvas>
  29:  
Posted by michaelruminer | 0 Comments
Filed under

Moving To EMC Consulting As A Microsoft Solutions Principal For the Northeast US and Canada

Looks like I am moving back into the world of consulting but wearing a different hat than ever before. It’s not so much that the hat (technical sales) is such a different style than I have worn in the past just that I’ll not also be wearing the implementation hat. I didn’t actively seek this position out in the beginning and it was not an easy choice to transition from what I do now in leading a team (managing is such a harsh term) because I enjoy my team.

Being the technical face for sales and working deeply on the proposal is not foreign and is something I enjoy. The need to be quick on your feet, the customer interaction, proposing solutions to problems are all awesome things. I have included below the formal EMCC position description. Much is classic technical pre-sales which is exactly what it is supposed to be but I hope to provide much more. For instance my understanding is that EMC is a Microsoft Surface partner (or something) and I certainly plan to leverage that as I am bullish on surface (even if it ends up being largely after hours focus for me), I hope to bring EMCC into more community involvement in the Northeast US and foster growing relationships with Microsoft and building stronger ties with clients and partners. I’m looking forward to working with the Paul Levine who is the Practice Team Lead and who has been doing not only his job but this job as well for longer than I am sure he’d like. He’s the guys who is responsible for getting the stuff implemented so obviously he and I will work closely together.

I’m excited about the move as I always am about any new adventure. I am also appropriately humbled by the tasks I see before me. It’s a part of the business I have always been familiar with as an independent consultant, business owner and principal consultant but the scale with EMC is greater and to get to ‘own’ the role at that sort of scale brings only greater business knowledge and acumen.

I’ll keep you informed and just as importantly if you are once again a competitor… I look forward to the seeing you in the battlefield. :-)

 

----------------------

 

 

Job description

The Role of a Microsoft Solutions Principal

The Solution Principal is responsible for driving Practice bookings through the EMC field account and services sales teams. He/She will provide technical presales support and lead proposal scoping and levels of effort with the delivery team members as directed by the Managing Principal in order to produce a quality proposal.  The Solution Principal partners with the field Account Managers and Client Solutions Director to maintain coordinated account selling efforts.  The Solution Principal also partners with the assigned delivery team members to drive follow-on opportunities within active accounts.

Responsibilities

  • Build and maintain Practice engagements on a selected list of focused accounts agreed upon with management within the assigned territory
  • Maintain a broad-level understanding of the Microsoft stack (Infrastructure, Application Development and Portals)
  • Define, develop and implement actions according to account plans on selected focused accounts with account teams
  • Drive Practice business development with CSD’s to support presales activities, with a primary focus on identifying, scoping and proposing engagements
  • Coordinate sales efforts with delivery management and practice management team(s)
  • Participate in regional marketing events to promote Practice
  • Ensure formal contractual mechanisms (i.e. SOW) are established and maintained within active accounts
  • Develop new business opportunities on focused accounts
  • Deliver accurate weekly bookings forecast within assigned territory
  • Participate in account relationship and issue management activities
  • Maintain proficiency in focused offerings, value propositions and representative case studies
  • Provide high level technical direction and expertise to clients, architecting solutions and working on proof of concept projects
Technorati Tags:
Posted by michaelruminer | 1 Comments
Filed under ,

TFS Admin Tool Beta 2 Released

TFS Admin Tool Beta 2 was released. The only intended change from the beta 1 was that is now supports non-alphanumeric characters for the 2008 SQL Server name. If you ran into that issue try out the Beta 2

http://tfsadmin.codeplex.com

BTW... for the twitterati out there: #tfsadmintool and also you can follow tfsadm1ntool (note the numeral 1 in place of the i- twitter won't allow the word admin in the name)

Posted by michaelruminer | 1 Comments
Filed under ,

On Microsoft, Doorstops and Being an MVP

Under inspiration of a few beers and a friend, Steve St. Jean, I put together a little video titled "Things Are Tough At Microsoft Too". It's poking fun at myself and how unengaged I am in the little trinkets Microsoft provides in the MVP Award kit (I'm all about the MSDN license and innumerable other benefits, plus the everlasting glory ;) ) but also poking fun at what must have been a 5 lb hunk of glass they sent this year in the award kit. 

So go see the video and take it as all in fun. The production values are a little rough as I didn't have time to do more. And no... it wasn't done with Microsoft Movie Maker, but Sony Vegas Movie Studio Platinum.

 

Here is the link to where there are a few other videos and more to come:

http://vimeo.com/3685683.

And here it is embedded which they wouldn't let users do in the past without a 'plus' account but hey it seems to work now- it’s smaller dimensions than the original so for best quality use the above link. You may find you need to turn the volume up on your machine as well.

 
Things Are Tough At Microsoft Too from manicprogrammer on Vimeo.

Posted by michaelruminer | 0 Comments
Filed under ,

TFS Admin Tool 1.4 Beta Released

We just release the 1.4 beta of TFS Admin Tool on Codeplex. It’s the first release in over a year. Its big feature is that is provides support for SQL Server 2008 which had not been previously supported. The 1.4 final version will follow shortly as will hopefully a 1.5 and just as important to me a 2.0 version to start to be worked on in parallel to the 1.x releases.

Go take a look at the new features and bug fixes in this version, download it if you need it and provide feedback for what you want to see enhanced and fixed. There is plenty to do.

Posted by michaelruminer | 1 Comments
Filed under ,

TFS Admin Tool Codeplex Project Adding Improved Community Support

We are working on a new release for the TFS Admin Tool on Codeplex. It will focus on adding support for SQL Server 2008 and have a few other things thrown in for good measure but we won’t be stopping there. You may have seen posts from a few different places sending a blast out for the community to get involved at least to add in defects and feature requests but even better to submit up code.

To further the community involvement and also make it easier for the active contributors to communicate in real time and in a group other than always by email or through the forums I just added in support for a multi-user IM jabber based conference room. The goal is that people can drop in there to communicate in real time on the product. We’ll schedule structured roundtable times and I’ll encourage the contributors when working on the project, if they can, to have a presence there as well.

If you go to http://tfsadmin.codeplex.com you’ll find a link to the wiki page that contains more details.

It’s an effort to make it easier for the active contributors but also provide a mechanism for the community at large.

Watch the TFS Admin page on Codeplex as well as this blog for an upcoming meeting for you to come in and discuss the tool.

Free 184-page preview chapter

From @chrisbowen tweet:

Free 184-page preview chapter (by Scott Guthrie) from "Professional ASP.NET MVC 1.0" -

Posted by michaelruminer | 0 Comments
Filed under

Upgrading TFS SP1 VPC To SQL Server 2008

If you are wanting to use the Team Foundation Server SP1 VPC and plan to do an upgrade of the SQL Server from 2005 to SQL Server 2008 don’t make the mistake I did and try to use the Std or Enterprise Edition of SQL Server 2008 to do the upgrade. The reason is that the VPC is running the Developer Edition of SQL Server 2005 (not supported in a production environment) and you cannot upgrade the dev edition to 2008 Std or EE. BUT as Brian Randell pointed out to me you can upgrade it to SQL Server 2008 Dev Edition.

Just what the doctor ordered.

Posted by michaelruminer | 3 Comments
Filed under

TFS Admin Tool 1.4 En Route And Wants Your Input

The TFS Admin Tool on Codeplex is about to go through a new iteration to plug some defects and add a few feature enhancements. I am now the primary coordinator external to Microsoft on this and I posted the following on the wiki:

We will be creating a new release whose primary goal is to address work item 18247- "Error with TFS 2008, SQLServer 2008 on Windows 2008" but the release will also include a few additional bug fixes/enhancements that are already in process or that can be fit in within the time box to fix 18247. This time box is as of yet undefined but the delivery target date will be defined within the next week When this release is complete we'll start another iteration to address a larger set of defects and enhancements and will continue on until no one finds value in adding to the tool any longer.
There will be some additional wiki pages added to assist in planning and current discussions that have kicked off this effort will be moved to that location and to inside the forum for wider participation. Speaking of wider participation, I would like to invite anyone and everyone to contribute. Right now the best mechanism is grab the code, make the contribution you'd like and upload a patch. I want to get much wider contribution. There are a lot of users out there and a lot of scenarios and a lot of people with good stuff to contribute. So send it on.
Please blog/tweet/*cast/yell that we are actively taking contributions and requests and tell everyone to "come on in the water's fine". Keep a close eye on the discussion area of this project. We'll be adding some wiki pages but a lot will begin in the discussion forum.

A part of my goal is to meet the immediate needs, reduce defects in the product and actively get it moving forward for a real V2 product. So… blog it, tweet it, yelp it, Facebook it, *cast it, do everything you can. I want to hear the feature requests, I want you to submit your code for new features for the product. Bring it on and you can not only demand the features you need but provide the code as well.

I hope we see many more contributors and want as much transparency and to be as community driven as possible. I think there a lot more people that could contribute than do. There are about 50 downloads a day so there should be plenty of feedback available and I know there are plenty of people that would like to hack up some code.

Check the discussion forums on the site and watch for the 1.4 release to be relatively soon.

Posted by michaelruminer | 1 Comments
Filed under

UCMA 2.0 Bot

I've lamented over twitter that I wasn't seeing any automated bot samples. Others noted the same. Apparently, I am not in the twitterverse of any of the people in the know because they are right there in front of my face. If you go to the Office Communications Developer Portal and click Get Started

image

you will see it

image

Likewise there is a Walkthrough: Author an IM Agent for Information Access in the Unified Communications Managed API 2.0 Workflow SDK Documentation

image

and in the SDK installation folder locally:

C:\Program Files\Microsoft Office Communications Server 2007 R2\UCMA SDK 2.0\Workflow\Sample Applications\InstantMessagingBot

 

I respectfully cease my grumbling.... on this. :-)

Posted by michaelruminer | 0 Comments
Filed under

A Silverlight Work Item Time Entry Control And Sub-System For TFS

Update: I have added this code to the MSDN Code Gallery (click adjacent link) you can grab it there.

 

Attached to this blog post is a reasonably extensive sample of using a Silverlight application as control for time entry logging against work items. This is a custom winform work item control for embedding into TFS work items but that underlying it is a Silverlight App. Being lazy as a programmer I like to build as little as possible to get the most out of it. With that in mind I decided I would port my existing time entry control from a winforms control to something that underneath I could more easily expose on web pages and have the same interface wherever needed. There are a number of ways to skin this cat but this is the one I chose as a proof of concept and here is the prototype.

First a few caveats:

Since time entry is really a disconnected sort of activity that really, in my case, only cares who the user is and what work item with which to associate the time I can get away with this very disconnected model. My time entry control is not going to change based on other actions or states in the work item.

This prototype is not the least bit concerned with security or any sort of edit level logging e.g. you can claim to be any user and go to the url directly and update a time entry to any work item regardless of work item level security.

It uses the FREE Silverlight AgDataGrid from DevExpress so you'll need to grab that also.

Error checking and all that jazz -- knock yourself out adding it in.

Here is how it looks in some of my work items. I have the control hosted under a tab:

time entry control 

 

Here is the basic concept I used hack it all together:

I created a windows custom control that implemented IWorkItemControl as needed to provide a custom control for TFS Work Items. This is the ZydecoTimeControl project in the sln. This does nothing more than house a WebBrowser control that gets passed a URL that contains a username and work item id in the query string to let the target page know what user and work item to associate to. It will not show the browser control if the work item is not yet saved. I started putting in the text to display in lieu of the browser control but it's not a functioning piece of code, yet. Also I do not know how well behaved the WebBrowser control is as I implemented. I never call dispose myself because I don't really know when I would as I don't know when the user closes the work item or how well it performs if I open up 20 work items etc. There is some potential for issues when using the WebBrowser control.

The browser control calls up a URL of the following format

http://TIMESERVICEMACHINE:8091/TimeControl_TFS.Web/TimeControl_TFSTestPage.aspx?name={0}&wi={1}

where {0} and {1} are replaced with the username and work item id respectively. The project that hosts that page is the TimeControl_TFS.Web project in the sln. All this does is house a page that loads up the Silverlight control I created in the project TimeControl_TFS. I have the WCF service that the Silverlight control calls into in it's own project, TFSServices, but there is no reason it couldn't be in the TimeControl_TFS.Web as well.

The Silverlight control itself calls into a WCF service over HTTP with basicHttpBinding .  That service does some very basic CRUD operations against the simple data store. I have included a DBPro project TimeDB that contains all the simple tables and stored procedures etc.

The next step I plan to do is wrap/inherit the same Silverlight control in a simple web control that implements the needed interface for Team System Web Access and voila I can just update the Silverlight control and easily push the same user experience to both winform and web interfaces for work item level time entry.

Most likely you'd like to add better security and all the good stuff of proper exception handling etc. But this should get you going. Replace the appropriate values in the config files, string constants etc to represent your paths, ports etc and dump in the couple of data tables and you are off and running.

 

Below is the source zipped up from my skydrive. If you don't see the below image and link then follow this.

I have added this code to the MSDN Code Gallery (click adjacent link) you can grab it there.

Posted by michaelruminer | 1 Comments
Filed under ,

Microsoft Recite

http://recite.microsoft.com Now this is good stuff.  I do this already with the voice memo but the the problem is I have remember to annotate the memo and then find it again. This has real potential.

Posted by michaelruminer | 0 Comments
Filed under , ,

Wondering Where OCS 2007 R2 Is In Subscriber Downloads

Wondering why I can go to MSDN Subscriber downloads and OCS 2007 R2 is not there for download despite the launch yesterday and yet I can get a 180 day free public trial.

I Wish My Burndown Chart Were In A Downturn

In this post I share that I am in the midst of a failed sprint that is to be canceled and started again.

This is the first sprint in a year (the entire lifetime of this specific scrum team) that I have gotten to 2 weeks in and the burndown chart flattened out into a barren wasteland. It's an unrecoverable situation in terms of delivering the product features to which we committed. I wish it weren't true but it is. A couple of good things are that the team is already looking forward to the sprint retrospective so everyone can share what they learned and what we don't want to do again. The second strange but potentially true benefit is that since we hit our deliverables with regularity, historically, I think there may have been a growing sense that somehow there was sandbagging going on- boy, did we prove that wrong this time if ever anyone had that thought.

We have not yet had the retrospective but here are some of my thoughts. From my perspective we took on too much risk. We lost a team member and added a replacement which is always an increased risk no matter how skilled the person as it's all about team dynamics. We took on some deep technical challenges and over engineered a solution that should have been been either scaled back or planned for a smaller set of deliverables in this sprint and the remaining deliverables in the next sprint. We had some high priority tasks that simply weren't delivered in a timely manner thus pushing everything else back. We just didn't gel. And of course since we had a failed sprint with all these factors that means I simply didn't properly lead. It happens from time to time but it doesn't remove the suckage factor.

Part of the beauty of a Scrum style approach is that we saw this flat line and within two days I knew this sprint was a failed delivery. No denial, no death march, no dropping this on expectant parties just before we should deliver. I should have seen it sooner as the burndown chart was moving along in total remaining work but I wasn't seeing completed stories. I wasn't too alarmed as a lot of this was new development and there was some infrastructure we took on that front loaded it all (did I mention the risk we took on haha). We passed a tipping point on Friday of last week. Actually we passed a tipping point as soon as we started but it needed to be proved out. We recognized the tipping point last Friday.

Every now and then a sprint has to just blow up. The best thing is we'll start a new sprint and in 30 days we'll deliver again and hopefully it will be another year before we see a blown sprint.

Posted by michaelruminer | 0 Comments
Filed under

More People Using The Phrase 'Barack Obama' Link To The Washington Post Than NY Times -- and more people using my name link to my blog than either of those-- and other not true statements from egosurf.org

I love egosurf.org because it's so fun and totally worthless. For instance I can get a higher score than Barack Obama using his name and BarackObama.com as the domain. Coming in at about half the rate for Obama when using his direct website if you use whitehouse.gov. Surprisingly, I expected it to go off the charts if I put Barack Obama and nytimes.com (how many people must have written - 'The NY Times reported Barack Obama...' and linked to the article??) It came in near the same value as whitehouse.gov. Using foxnews.com he barely registers; yet, washingtonpost.com gets you about 50% higher than nytimes.com. Interesting. And Worthless.

Posted by michaelruminer | 1 Comments
Filed under

A Community Inspired Power Tweeting Week

I attended two different 1 day "conferences" this week. Thursday was MSDNDevCon in Boston and today was Data Camp V1.0 (Code Camp but around Data).  I decided I'd use the Twitter and Facebook as outlets to the community for the content I sat in on. So I tweeted content and thoughts back live - 140 characters at time. On Thursday at the MSDNDevCon (which I tagged every message with #MSDNDevCon) I sent out about 80 tweets in the course of the day. I did this old school  - not from a notebook but from my mobile phone - so I should have beefy thumbs that now look like the modern teenagers. At least I have a full keyboard on my mobile and didn't have to do multi-tap entry. Today was data camp (#DataCamp) and I sent out about 75 tweets. It was good. I even took a few questions via @replies and direct msgs from twitter followers and passed them along in sessions and back out to the person asking the question. It was indeed a power tweeting week. I'd do it again.

#DataCamp ~ 75

#MSDNDevCon ~ 80

jQuery with ASP.NET And the Need To Improve My Deployment Process

I started this last week working with jQuery with ASP.NET. I have a different post in process that discusses some of the lessons learned in terms og jQuery UI and jQuery API and the great idea but seemingly (at the moment) less than ideally functional ThemeRoller. Starting to use jQuery has pushed one more compelling reason why I need to beef up the deployment process we use to be more automated and scripted. Since I want the developers to have access to the jQuery maximized scripts and intellisense (which I still haven't gotten working  despite the special .vsdocs.js file and the hotfix) but I want to deploy the minimized files and not the intellisense docs. This is just one more thing that needs to be done during deployment and may be the straw that broke the camel's back.

 

What I have been trying to find time to do is set up WF (Windows Workflow) that function in response to build quality change events- I guess it's time to get to it more fully.

Why An IM 'bot' Is Not Like An IVR Application - Or What I Fear I'll Find in OCS 2007 R2

Let me begin by saying that I'm still figuring all this stuff out and blogging on it as I go along so that those interested can follow along. I continue to evolve an IM bot that communicates with a developer to perform tasks or provide information. It's an exercise in connecting Team Foundation Server to the developer in different ways than would normally be done.

As I look much more closely at Speech Server 2007 and OCS 2007 and think about how what I see there will likely be the model for what I see in the 'bot' a.k.a. 'automated agent' abilities for IM bots in OCS 2007 R2 I see something that concerns me. I have a suspicion that the bot support will be very similar to an IVR (interactive voice response) system. I see the two as very different animals but suspect I'll find the bot support largely stapled onto the grammar recognition and as simply another endpoint.

These differ in at least three large ways.

  1. With an IVR system that most people build for telephony type applications there is a distinct session. A call initiates and it ends. The system knows easily when a new session and thus a new context begins. Not true in the classic use of IM.
  2. With an IVR system there is a largely sequential flow with a question-response sort of activity. Not true in how I want to interact in IM.
  3. With an IVR system there is generally synchronous activities. This statement is a sort of combination and resultant of the prior two points. In IM it's very asynchronous and often times multi-threaded.

Some if not all of these issues can be overcome programmatically using the System.Speech API along with grammars but as with all software if the system was designed with the idea that an IM bot is really an IVR application, but in text, then there will be limitations that are hit upon from architectural decisions made in the servers design.

If I take the preceding point 1, in an IVR application I connect to the telephony endpoint and thus starts the session and the context for that session is an empty slate. I close out the session by disconnecting. IM doesn't have such defined boundaries. If I start an IM conversation with a bot I may leave it for 3 minutes before I send the next message that was a part of the same conversation. How can one best handle the context with such porous boundaries and an entirely different time scale than in a classic IVR. Most likely some agreed upon 'etiquettes' need to be in place to mark beginning  and ending portion of context and time out values on the bot side to toss out a conversational context.

For point 2, in an IVR you are typically in a question-response mode. The system asks a question the user speaks a response. Some responses may be more sophisticated than others and circumvent the need for the system to then ask a series of follow on questions but the general question-response rules apply. In IM I am more likely to provide a conversational tone. One example I have done in the past is to provide context for the conversation I might say to the bot 'Concerning Team Project TeamPatterX' to which the bot responded 'It's all about TeamPatterX now'. Then I write 'show me the failed builds'. In an IVR application typically if the system prompts 'What would you like to do?' I need to provide a more discreet set of responses to that specific question versus a more free form sense that a user expects in IM. They expect to be able to just blurt out 'Let's talk about Team Project TeamPatterX'. (this goes to point 3 about asynchronous) It's not to say that an IVR system can't have that level of sophistication but the user interaction is different and the user comes in with different expectations of how they can interact.

Likewise I have already found in setting up the grammars that in written text you must handle scenarios that are identical in spoken speech. In spoken speech 'List all team projects, please' and 'List all team projects please'  are the same but in defining the grammars for written text I need to account for the fact that it needs to treat 'projects,' and 'projects' (one has a comma) the same. I don't know if the OCS R2 IM bot API will have the built in support to strip punctuation or if the punctuation will need to be built into the grammar rules. I hope the former but fear the latter. 

To point 3-- a big appeal of an IM bot is in using it as a part of notification features. I may tell the bot 'queue build XYZ'. It does so and when it finishes it initiates a message indicating that the build completed and what its status was. I may be in the middle of a conversation with the bot and this message would appear right in the same session and in line with the other interaction I have going on. This can be a difficult thing to handle no matter what. But you don't usually see an IVR system than just pipes up and tells you 'Hey, BTW, we just sent your bill out.'

The last part I wonder about in the implementation of 'bots' under OCS 2007 R2 is did they move over the ideas from BuddyScript and Windows Live Agent of all sorts of handling for phraseology like 'How are you?' to which the bot will respond in kind based on its personality setting or if it will work only like a classic IVR of 'I'm sorry I didn't understand that response.' And if it will have the lists for expletives etc. Again it's not that an IVR system couldn't handle these scenarios it's just that you don't call an IVR system and chat with it. You expect an IM bot to have basic 'chat' capabilities even if it's stupid that you are asking a machine 'how are you?' It's a different expectation.

 

Maybe I'm wrong and may be all that will be there... but I can't tell you yet and I am highly skeptical. I sure hope I am pleasantly surprised. If it's not there the it looks like I'll have a lot of fun building it all.

Speech Server 2007 'Red X' and 'Can't attach to process' Fixes

If you have a machine in which you are doing Speech Server 2007 development and also have Visual Studio 2008 installed you may run into two distinct issues.

You may find you have a 'Red X' on your workflow activities in which case you need to apply the following a hotfix KB950210.

Separately you may find that you cannot attach the debugger to the process in order to debug from Visual Studio 2005 your speech application workflow. In this case you should add the following to you web.config file:

   1: <system.webServer>
   2:     <handlers>
   3:         <remove name="SpeaxMap" />
   4:         <add name="SpeaxMap" path="*.speax" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" responseBufferLimit="0" />
   5:     </handlers>
   6: </system.webServer>
Just thought I'd share. In OCS 2007 R2 there will be support for Visual Studio 2008 but for Speech Server 2007 you still need VS 2005 and this should keep you moving along.
Posted by michaelruminer | 2 Comments
Filed under

Appreciation For DevDiv and Microsoft's Visual Studio Team System Folks in Particular

Occasionally things happen to remind you to appreciate certain constructs in your life. A case in point for me was the recent desire to get moving into Office Communication Server 2007 (OCS) R2 for the purpose of building an IM bot/agent. When I couldn't get any sort of access to the bits of the upcoming R2 release in order to do my development it was an exercise in frustration and a reminder to appreciate Microsoft's Team System groups for their exceptional access and visibility.  

I built the first prototype using Windows Live Agent because it's what was available from Microsoft to create a bot. The problem is that architecture is designed for public facing interaction not for fully housed within the corporate firewall. In OCS 2007 R2 the grammar capabilities available historically under speech server would be available as well for use in IM for the purposes of bots. This is the architecture I was looking for. Add to it that  shortly after the announcement of OCS 2007 R2 Microsoft put an end of life to the Windows Live Agent SDK and it was clear I wanted to be doing this in OCS 2007 R2. The problem was that the beta was a very tightly limited group. The formal release is February 3rd of 2009, it's in RTM as I write this (mid Jan 09) but still there is no broader availability outside that limited beta group. I would have expected when it hit RTM it would be in MSDN subscriber downloads but it's not. It's frustrating to have to wait for a product to be fully released to the public to be able to develop against it.  I burned more than two months in a holding pattern not wishing to invest further in Windows Live Agent but not able to develop against OCS 2007 R2. At least they laid out the end of life on Live Agent earlier rather than when OCS 2007 R2 was released. In fairness, I have work I could have been doing and actually began work on it yesterday in the form of moving my grammars over from the BuddyScript Windows Live Agent to Speech Server 2007 GRXML and expanding that grammar. But it's a good bit less motivating to not be able to work with it immediately in the context of the IM bot when that is it's intended purpose. Plus the OCS 2007 R2  model for the workflow and programming is a bit different than Speech Server 2007 (if I understand correctly- this is all a bit new to me) so I am avoiding doing any real workflow style conversation work and focusing on grammar only. I hope I don't get burned by it all. That's a part of the lack of motivation- the risk of investing time in something that may not work just right because I am trying to work against what seems to me to be a black box until Feb 3rd.

All in all it's made me really appreciate even more than I already did the early and often CTP's from the Team System groups, the visibility and the willingness to do the extra work that it takes to make these things available to the large community that makes for a much better release of the product as you have a wider workforce ready to use and champion the product. With the OCS 2007 R2 release I am stuck with my own reservations about how it will work for me much less able to champion the product to others. It makes me hesitant to make a choice centered around the technology when I don't have better visibility into the futures and the impacts it will have on my selections now. This specific case is inconsequential but it's a lesson learned if ever I had a choice to make that was of consequence I would be very hesitant to invest in development for this platform where it seems too murky what the future holds.

Microsoft Tag- It Rocks

This application rocks. Put Microsoft Tag  on your Windows Mobile, iPhone, Blackberry, Symbian or J2Me phone and when you start up the app it will automatically flip on the camera. When you point the camera at a tag like the the one below (really you can even point the camera right at the screen and get it to work)  it will take you to a url, dial a number, provide a vcard or provide free text etc. If you have the app and point it at the below it takes you to my blog home page on your device. This could be put on web pages, printed into documents or on material etc. You can set it to resolve the tag, store it for later or share it via your phones MMS or email applications (though when I sent the tag via MMS to my own email address I didn't have anything attached- this was in Window Mobile 5). All in all it's pretty nifty.

manicprogrammer_tag

Here is a slightly larger version of the same tag with one of the default render styles.

tag_manicprogrammer

 

Here is a tag that simply returns to you some text without directing you to a URL.

tag_txt

Posted by michaelruminer | 1 Comments
Filed under
More Posts Next page »