my poor laptop battery

I’m not a good caretaker for my laptop’s battery – I leave it plugged in for days at a time, for instance.

It’s recently been communicating its hatred of how I treat it by dying ever-quicker deaths.

When I first got the laptop, the Win7 10% (“low battery level”) and 7% (“reserve battery level”) warnings (5% is “critical battery level”, when it actually hibernates) happened all the time; everything worked great.

Now, most of the time I don’t even get the 10% warning, let alone the 7% one (I haven’t seen the 7% one in months).  The machine just dies.  Not “went into hibernation”, either – when I plug it in and turn it on, there’s no “Resuming Windows”, just the F8-style menu where I have to say “Yes, start Windows Normally”.

Now, I can go into Power Options –> Change plan settings –> advanced and change the percentages for those levels, but I know it won’t be much longer and I’ll have to replace it.

I guess I could try some full-charge/full-discharge cycles to see if that helps.  We’ll see.


request for inclusion: add Visual Round Trip Analyzer to Web Platform Installer

I was sad to see a good friend having trouble installing it:


Since the SEO Toolkit was already part of the Web Platform Installer, I was hoping VRTA would be there as well – after all, it’s a similar kind of tool (use it to improve your site’s pages) and WPI offers a great end-user experience in downloading/installing/configuring dependencies for you (like package management in many other OS’s do for ‘everything’).

However, no such luck when I ran WPI 2.0 and looked at what’s available.

As MIX10 winds down today, this would be a great addition to what WPI makes available 🙂

WCF REST lessons I learned today

These aren’t in the order I learned them.  They’re not in the order of importance, either.  They are in order, though.

  • Even if you plan on running it under IIS, do the development with the dev server built-in to VS (Cassini)
    • There’s lots of little problems you may hit running under IIS, so having it working under Cassini first lets you know which problems are caused by IIS config 🙂
  • Cassini (at least in my 2010 RC) only binds to / IPv4 when it does its localhost binding, not ::1 / IPv6
    • image
    • This surfaced when IE could do the GET on the service via localhost but Chrome couldn’t – not sure why, but Chrome was hitting the IPv6 ::1 and IE wasn’t.
    • No big deal, just changed host part of url to to force the issue in both.
  • Chrome doesn’t display xml response nicely like IE does – appears to try to render it as html.
    • Content type response header was application/xml; charset=utf-8, so it kind of surprised me that it didn’t render to something friendlier.
    • version of “ (38071)” (stable branch)
  • Under IIS, WebDAV by default includes a lot of verbs that it handles for all extensions. 
    • In inetmgr, Handler mappings -> WebDAV -> Request Restrictions -> Verbs
    • Since that list includes PUT and DELETE by default, if GET and POST work fine but those 2 don’t, that’s one thing to check.
    • Simplest fix is to fire up appwiz.cpl and get rid of WebDAV, although you could just remove those 2 verbs from the list if you wanted.  Of course, doing so you’d presumably break WebDAV clients, so I’m not sure that’s of any real value 🙂
    • image
  • Much like WebDAV, the compat settings, like [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] and <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>, may break certain verbs like PUT and DELETE for non-obvious reasons.
    • If you don’t need them, don’t use them, of course 🙂
  • You don’t have to use an interface for your service contract, it can be on the real implementation class (tons of examples do this), but if you want to have consumers use WebChannelFactory, you need an interface.
    • On a related note, I apparently wish “where T is an interface” was a viable generic constraint, since that would have been nice in this case instead of hitting it at runtime 🙂
  • I really liked putting the ServiceContract/OperationContract/WebGet/WebInvoke attributes in the interface to make the implementation class a little cleaner.
    • Certainly makes sense to have them there given the client consumption 🙂
  • It makes me sad that UriTemplate only supports string as the type if the template part being matched is a path segment.
    • It can map other types (int, long, etc) if it’s in a query string, but I’d rather do the Convert call myself than make (IMHO) uglier access URI’s 🙂
  • If you’re using something ‘manual’ like Fiddler’s Request Builder for making your REST calls, you actually get a pretty decent error message in the body of the 400 Bad Request response:
    • The incoming message has an unexpected message format ‘Raw’. The expected message formats for the operation are ‘Xml’, ‘Json’. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.
    • Reminded me to add Content-Type: text/xml and then it was happy 🙂
  • The WCF Test Client that gets run if your svc is set as your startup page will still query for WSDL and complain that it can’t find metadata for your service.
  • The WCF REST Starter Kit for 3.5 is great, but it hasn’t been / won’t be updated for 4.0.
    • The one thing it was nice to see that made it back into the framework in 4.0 was automatic generation of a REST service’s help page via <webHttp helpEnabled="true" />
    • Not clear off-hand what the help page lacks for generation of a proxy similar to SOAP/WSDL, but I haven’t dug into it, either.  It sure looks like nicely structured, but perhaps there’s some metadata not getting exposed there.

I have not failed, I’ve just found 10,000 ways that won’t work.

RC C# compiler break



Based on the last line, I’m really surprised that don’t have error reporting on by default for all pre-RTM builds (although maybe it was on in the beta and they turned it off for the RC).

Checking the compiler options, it looks like I should have gotten a prompt but didn’t.


However, I then ran Fiddler and ran the build again (causing another crash) – yup, the watson reports are getting sent in just fine.  Kinda surprised I didn’t get a prompt, but that may just be a bit they set to always send if it’s a pre-RTM build (which would be reasonable IMHO).

Getting Google Calendar Sync to work with Outlook 2010

Edit [2010-08-17]: As per a comment from CB, the official Google Calendar Sync now supports 2010, although it still only supports 32-bit.  If you’re running 64-bit Outlook and don’t want to reinstall to the 32-bit version, check some of the other options listed in the comments.

Since there’s no longer a need for the hack, I’ve removed all the instructions so hopefully people will just use the updated sync now 🙂

U-Prove link on connect may fail if you’re signed in to Connect

I was hopping over to the U-Prove CTP link (linked from Channel9 and Ars Technica)

It’s the same url that you get redirected to if you follow the “main link” for U-Prove off of MSCOM at the moment:

However, it failed to load with what amounts to a permissions error:


Notice in the above that I’m signed in, though.

If I sign out, then the link works fine:


Perhaps my Connect account has been tagged with some kind of “he’s eeeeevil!” bit, but it’s certainly the first time I’ve had more permission on a site being anonymous than logged in 🙂