Microsoft talks about their first WP7 software update and why they need to do better

Microsoft has posted a brief note on how their first update is going plus some Q&A.  I for one am glad that Microsoft is taking a very transparent approach to the reported problems as that’s a good way to defuse any potential situation.  The meat of the post talks about their success rate so far.

Contrary to some of the gloomy headlines out there, our preliminary internal data paint a very different picture about update progress:

  • 90 percent of people who’ve received an update notification have installed the new software patch successfully. (So when your turn to download it arrives, chances are good this will be a non-event.)
  • Of the 10 percent who did experience a problem, nearly half failed for two basic reasons—a bad Internet connection or insufficient computer storage space. Luckily, both are easy to fix.

For me personally, I don’t have a problem with update problems (mainly because I haven’t been able to update nor did the update brick my phone), missing features, and bugs that need to be worked out.  Sure it’s irritating that my app can’t be found due to marketplace keyword search problems.  But it’s all part of being an early adopter.  However, from a consumer perspective I think it’s a tougher sell.

Apple received a good bit of leeway (and press worship for that matter) on any of the issues surrounding their first release.  Of course, the iPhone was a huge game changer for phones and consumers, there weren’t any good competitors at the time and they adjusted quickly (not to mention their powerful PR engine).

The landscape just isn’t the same for Microsoft.  Microsoft’s Windows Phone 7 OS may offer a different flavor than Apple or Android but I don’t think anyone can reasonably argue that WP7 is a game changer in the same way that the iPhone was when it first released.  Microsoft is late to the game and every update problem, defect or missing feature that consumers encounter is just one more reason for the consumer to switch to any of Microsoft’s competitors or steer clear of WP7 all together.

Consumer perception is the reality here and for a company that already has trouble building mindshare, Microsoft simply can’t afford to be just okay or even above average if they want to take back meaningful market share.  They need to be great at all aspects of their phone business…from marketing to simple things like the execution of updates.  I absolutely believe Microsoft has it in them, I only hope they are able to show the consumer before the consumer loses interest.

WCF Data Services – Entity Set Access Rules

WCF Data Services provides easy set up for your services.  An example of this is how easy it is to configure allowed operations on entity sets.  For this example, we have the following entity model:

image

* Note that I am not a fan of capturing and storing username and passwords.  I’d rather let someone else do this so I don’t have to.  I’ll post something on this topic in the coming weeks. *

If you generate a WCF Data Service, you’ll end up with:

public class UserService : DataService<coreentities>
{
    public static void InitializeService(DataServiceConfiguration config)
    {
        config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
    }
}

So what does this service do?  Nothing really?  By default, WCF Data Services locks down all entities so since we haven’t explicitly set what operations are allowed on the entities then we can’t do anything.  However, adding the common line

config.SetEntitySetAccessRule("Users", EntitySetRights.All);

changes this picture so that any operation (CRUD for instance) is now allowed.  However, there’s pretty granular control available.  Changing the line above to

config.SetEntitySetAccessRule("Users", EntitySetRights.ReadSingle
    | EntitySetRights.WriteAppend
    | EntitySetRights.WriteMerge
    | EntitySetRights.WriteReplace);

now allows retrieving a single user, creating a new user, and updating an existing user.  Retrieving multiple users is not allowed.  Combine this with QueryInterceptors and ChangeInterceptors and it becomes very easy to return only the logged in users user record and limits them to only update their own record. 

[QueryInterceptor("Users")]
public Expression<func><user , Boolean>&gt; OnQueryTasks()
{
    return result =&gt; result.Username.Equals(HttpContext.Current.User.Identity.Name);
}

There are a lot of different options available and thankfully the configuration model has been greatly simplified.  The days of configuring pure WCF will not be missed…at all.

At Long Last – Kinect SDK Announced

Okay, the wait hasn’t been that long but I’ve been excited about the prospect of using a Kinect on Windows.  I mean how can you not get excited about controlling your media center from the couch just by waving your hand at the TV?  What’s really exciting about an SDK for the Kinect isn’t what we already know we can do with it, but rather what no one has yet thought of.  That’s the real beauty and power of Microsoft’s announcement…changing the way we interact with technology.

Anyway, my wife has been prepped that a Kinect purchase is on the way.  Sometime in early spring should make for an exciting day…and I don’t mean our new baby’s birth either (I’ve already set up the couch in preparation of making that statement).

Here’s the Corporate Announcement of the SDK and a good post by Craig Mundie on “Imagining a NUI future.”

WP7 – Pre “No-Do” Update

Today, Microsoft mentioned that the first update for WP7 would start rolling out soon.  While not the “No-Do” update with Copy & Paste, performance improvements (the better of the two in my opinion) and things like Marketplace (definitely be nice to be able to actually find my app), it’s still a step in the right direction. 

So what’s the update?  An update to the update process of course.  All paving the way for things to come.  And as a nice touch, there’s also an update page available now.

I connected both of my phones (one for personal use and the other a test device) and sadly neither has any updates available.  Once it’s available, I’ll provide some details of how it went.

* UPDATE 2/23/2011 *

According to Mary Jo Foley, Microsoft has pulled the update for Samsung phones so it’s not looking good for getting the update on my Samsung Focus.  Sadly, still no update for my LG device.

* UPDATE 3/2/2011 *

And the pre-update finally hit my LG phone.  The walkthrough is here.  Still nothing for my Samsung Focus.

WCF Data Services – Poorly Optimized Updates

As part of the next round of features for one of my apps, I needed to enable a synchronization / cloud scenario.  I was really loathe to head down the path of creating explicit methods for every type of access I needed so I thought it would be a good time to look into WCF Data Services.  After reading up on it and setting up some of the basics, I started trying to identify a more optimized approach to the updates. 

One of the scenarios I wanted to support was updating an entity that hadn’t just been retrieved from a query.  Just like EF, WCF Data Services has an Attach method that is geared towards attaching an existing entity.  My example entity is:

image

The simplified example looks like:

Category category = new Category
{
    // Created an entity with
    // the primary key and
    // referential key.
    Id = 1,
    UserId = 1,
};

category.Name = "Updated Name";

// context is the generated proxy for my WCF
// Data Services.
context.AttachTo("Categories", category);
context.UpdateObject(category);

context.SaveChanges();

This saves (concurrency is disabled here for simplicity).  However, the save overwrites all of the other properties.  So while Name is correct, DisplayOrder, CreatedOn, ModifiedOn, and Version have all been set to their default .NET values.  As this was my first foray into WCF Data Services, this was definitely not the behavior I expected.

I dug into this further and it looks like WCF Data Services does not respect the change tracking that the underlying entity does on the client side.  The UpdateObject method marks the entire entity as modified but the SaveChanges appears to disregard the actually changes that have been specified on the entity.  I of course can get it to work correctly by either querying the entity and then modifying it or populating it from storage based on a previous query.  However, the concern here isn’t just functionality it’s bandwidth.  For large entities or a large number of entities (such as a synchronization scenario), this can lead to a lot of unnecessary traffic which is going to be problematic for mobile clients.

I found a blog post that covered this problem and a potential work-around.  To be honest though, I’m a little surprised that there isn’t support for optimizing bandwidth consumption (especially given the mobile world).  I’ve reached out to Microsoft in hopes that my findings and the alternative suggested in the post is not the entire picture here.  I’ll update this post if I hear something back.

WP7 – Marketplace Keyword Search Problems

I recently updated Tasks Anywhere to version 1.5.  I successfully published it to the Marketplace and was able to navigate to it under the Productivity category.  However, I was not able to find it when searching for any of the keywords that I had submitted with it.  I searched the forums and found a few support folks mention that it could take several hours to a few days to start showing up in the search results.  I seem to recall hearing some rumor about patience being a virtue, so I waited…and waited…and waited.  After a few days had gone by (plus a few just to make sure) and not finding anything encouraging in the Forums, I sent an email to support.

A few more days go by, and I get a very polite response back from Microsoft support which goes something like this:

I just searched your app and I was able to locate it using some of the keywords used in your meta-data. You should be able to confirm this on your end as well.

I check and I’m still not able to see it by searching for any of the keywords (like Tasks – which should be an easy match given that it’s part of the app name).  Sure, I can find it if I search for Tasks Anywhere but that seems to defeat the purpose of a discoverable marketplace.  Um…okay…I check the Zune Marketplace. Sure enough, Tasks Anywhere shows up in the keyword search results.  I send a follow up email to support to verify that it shows up on the phone and not just Zune (I know, I’m picky like that).

The device itself doesn’t always sync with the results displayed on the Zune client. I would suggest re-submitting an app update. Let me know if the problem persists after the new submission is on the Marketplace.

I send another follow up asking if there’s something I need to do differently with my submission to make sure it doesn’t happen again.

Unfortunately at times there can be an error with the submission.

Who am I to judge?…I’ve certainly had a defect or two slip by testing.  It’s hard for me to think that this isn’t a problem with something in my submission given that the free version of the app also isn’t searchable but we’ll see what support says. 

The NoDo update is rumored to fix some of the Marketplace discoverability problems (including my problem…hopefully at any rate).  Unfortunately, the update appears to have slipped to early March.  The update can’t come soon enough for me as it would be great if consumers could actually find my app. 

* UPDATE 2/21/2011 *

After posting another round of updates, I experienced a similar set of problems and sent another email to support.  Microsoft’s response was:

We are actively looking for a resolution/workaround for your issue.  Updates will be provided as they become available.

Based on this, I’m guessing I’m not the only one experiencing this kind of problem.  Hopefully it has been fixed as part of the upcoming March release.  Hang in there if you’re having the same problems.

Tasks Anywhere – Free is now available in the marketplace

Despite some minor issues publishing Tasks Anywhere – Free, it is now in the Marketplace for download.  As I’ve mentioned before, this free version of the app is available for a limited time due to our mistake with the marketplace (let’s not speak of it again).

Tasks Anywhere – Free (1.4)

imageDue to a recent problem with the full version of Tasks Anywhere and the Marketplace, we are offering Tasks Anywhere 1.4 for free for a limited time. Tasks Anywhere makes it easy for you to keep track of what you need to do. You can easily organize your tasks by active, completed, due soon or by a custom category that you specify. Need to call some people as part of your task or take a look at a few websites? It’s easy with Tasks Anywhere because you can just click on the phone number or website directly within the description. No need to remember it later or write it down.

Some of the productivity enhancements in the app are:

  • Organize your tasks by priority so you can easily find your most important tasks.
  • Auto-correcting text fields so you don’t have to worry about spelling.
  • Just click on a phone number or website you’ve entered and the app will call or open the browser.
  • Overdue items are highlighted so you can easily see what you need to take care of ASAP.
  • Always want to see your tasks by category when you first open the app? Simply set it as your default view and the app will remember it for next time. Same with linking for phone numbers and websites.
  • Easy to use designed to get you in and out of the app as quickly as possible.
    This version is provided for a limited time only and may be removed from the marketplace at any time. Please purchase the full version of Tasks Anywhere.

Please leave some feedback to tell us what you think.

 8_Settings1_TasksActive2_TasksCategories3_TasksPriorities4_TasksComplete5_TasksDate6_TaskEdit7_TaskView

Follow

Get every new post delivered to your Inbox.