Archive for November, 2008

My Lenovo Story – It only takes ONE person !

I got lots of email about my Lenovo post and tweets yesterday.

Lenovo never did answer the phone.

Even the internal Microsoft Lenovo Reps never followed up.


“Mark” from Lenovo read my blog posting and emailed me.

When I replied he immediately phoned me.

Not only did he commit to ship me a new keyboard, but he spent time with me on the Lenovo web site to determine exactly which phone number I called so that he could follow up at Lenovo to improve both the phone response and the web site.

Now I know some of you are saying, “yea, but you work for Microsoft and I’ve had bad service from you guys, so you have nothing to complain about!”

Bad service at Microsoft makes me furious and I literally spend hours every day “servicing” developers who contact me from all over the world. All the guys I work with at Microsoft feel the same way I do about helping our customers.

So, it’s not when systematic things (like a phone system problem or a web design mistake) cause a terrible customer support experience that makes me nuts, it’s when that bad experience is followed by apathy !

“Lenovo Mark” (I do know his real name but didn’t ask his permission to publish it so I’ll call him “Lenovo Mark”) took an enthusiastic approach to solving what was a simple problem.

Though he offered to have an on-site tech to my office “next day”, I declined since all I needed was a replacement keyboard.

Mark shipped it over night. It arrived before 10:00AM today, it took 5 minutes to install and I’m typing on it right now.

No company is perfect, but even the actions of one person reveal the “culture” of a company.

If I hated my Lenovo Laptops, I suppose it would matter less to me, but I LIKE the hardware.

Thanks to Mark for turning a horrible support experience into a great one !


It turns our I was on hold with a SALES line. After looking up my warantee information I clicked in a call link labeled services whihch was not, in fact, for “service” as in technical support, but as in the sale of “services”.

Upon more detailed searching I did find a list of “Technical Support NUmbers”

Mark challenged me to try THAT support call and see how long I waited !

I called three times.

I NEVER got put on hold, and the longest it took me to get to a real human service representative was 70 Seconds (Note, that’s SECONDS not minutes.)

Though I did spend 4 hours on hold with Lenovo – it was not with Technical Support !

Could the web site have been more clear – yes.

Could the copious verbal messages on the service sales live provided some iodentification that would have suggested I was in the wrong place – yes.

Could the Lenovo customer been a bit smarter – ok, yes : )

It almost makes me look forward to the next time I need support.

Murach’s ASP.NET 3.5 Web Programming with C# 2008

At the top of this book it says “TRANING AND REFERENCE” in capital letters.

That sums it up 🙂 1000 pages of soup to nuts learning about developing ASP.NET applications in C#, updated for ASP.NET 3.5 and C# / Visual Studio 2008.

In addition to all the concepts for ASP.NET, C#, OOP, IIS, etc, the book has sections on Data Access (AND LINQ), AJAX, Listview & Datapager, CSS and more.

Murach’s makes great textbook style learning material. As I’ve said before. if I were teaching a college class on the subject, this would be on the short list for the textbook of choice.

[ Click HERE to check it out on ]

Announcing the Web Platform Installer Release Candidate!

The Web Platform Installer (Web PI) is a simple tool that installs Microsoft’s entire Web Platform, including IIS7, Visual Web Developer 2008 Express Edition, SQL Server 2008 Express Edition and the .NET Framework. Using the Web Platform Installer’s user interface, you can choose to install either specific products or the entire Microsoft Web Platform onto your computer. The Web PI also helps keep your products up to date by always offering the latest additions to the Web Platform. 

New Updates! Now supporting Windows XP and Windows Server 2003, Web PI makes it easy to install and stay up-to-date with the Microsoft Web Platform.  This updated release lets you install ASP.NET MVC, Visual Studio Tools for Silverlight, and much more!

[ CLICK HERE to get the details. ]

Dear Lenovo – Is hardware support a conspiracy ?

Some time ago I bought a top-of-the-line Lenovo T61 Laptop for personal use (meaningt not a Microsoft Asset).

I paid for the 3 year, on-site, warranty.

This weekend one of the keys popped off the keyboard, and then a poped anoth one tryingf to get the firts one back on. It looks like the bracked that the key(s) mount to is broken (it’s really flimsey) and needs to be replaced.

So I called Lenovo support…..

And waited on hold for more than an hour – then finally gave up.

This morning I called back and here I sit, listening to a message about how my call is important to Lenovo – FOR OVER AN HOUR.

So, if anyone from Lenovo reads this, I have a question.

Is your hardware support upgrade option a conspiracy ?

I mean, if you never answer the phone it’s all profit, right.

IN the mean time I guss I need to start shopping for another hardware vender.

MSR Asirra – Prove your user is human !

Every one has used CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart) or HIP (Human Interactive Proof).

Captcha is usually numbers and letters and the more obscure they are to prevent programmatic interpretation, the more difficult to read.

Microsoft Research has an interesting alternative.

Asirra (Animal Species Image Recognition for Restricting Access) is a HIP that works by asking users to identify photographs of cats and dogs.

You can get a complete description and implementation guidance at

But remember, it’s still beta !

What makes me Frustrated by Design ?

I received an email yesterday asking why I was “Frustrated by Design”.

Well. When I joined Microsoft in 2001 I had just sold a company and didn’t need a job for financial reasons (my wife and I have had children since then, so now I actually HAVE to work).

I had actually planned to start another company but the Sept 11th terrorist attacks happened in 2001 and changed my plans.

I could have gone to work for either IBM or Microsoft and I choose Microsoft because I thought it would be more fun.

And, because I hate when people just sit back a complain about what other SHOULD have done without being will to “put their feet in the pond” themselves.

My friends all thought I was nutz and asked me about my decision to join Microsoft, “You spent 20 years being part of the solution, what makes you want to go be part of the problem !?”

It’s very liberating to work for a company when you can actually afford to get fired 🙂

It’s part of my wiring to be a little idealistic. Joining Microsoft I still believed that one person could make improvements and drive changes.

One of my managers in the early years at Microsoft (Mike O) observed that I was constantly frustrated when a group would simply be satisfied with the status quo. He said that I was “Frustrated by Design”.

Seven years later I’m STILL Frustrated by Design, but still an idealist.


URL Rewrite for IIS – SEO Friendly URLs love it ! is ok for a download link but is meaningless to a search engine !

The answer to SEO friendly URLs is to change the URL to something that has semantic context.

For IIS we have the IIS Re-Writer.

Some of the features are ….

  • Rules-based URL rewriting engine. Rewrite rules are used to express the logic of what to compare/match the request URL with and what to do if comparison was successful. Web server and site administrators can use rewrite rule sets to define URL rewriting logic.
  • Regular expression pattern matching. Rewrite rules can use ECMA-262 compatible regular expression syntax for pattern matching.
  • Wildcard pattern matching. Rewrite rules can use Wildcard syntax for pattern matching
  • Global and distributed rewrite rules. Global rules are used to define server-wide URL rewriting logic. These rules are defined within applicationHost.config file and they cannot be overridden or disabled on any lower configuration levels. Distributed rules are used to define URL rewriting logic specific to a particular configuration scope. This type of rules can be defined on any configuration level by using web.config files.
  • Access to server variables and http headers. Server variables and HTTP headers provide additional information about current HTTP request. This information can be used to make rewriting decisions or to compose the output URL.
  • Various rule actions. Instead of rewriting a URL, a rule may perform other actions, such as issue an HTTP redirect, abort the request, or send a custom status code to HTTP client.
  • Support for IIS kernel mode and user mode output caching. IIS 7.0 output caching provides significant performance improvements for web applications. URL rewrite module is fully compatible with both types of output caching. This means that it is possible to safely cache responses for rewritten URL’s and thus boost the performance of web applications that rely on URL rewriting.
  • Lower case conversion. A lower case conversion function called “tolower” can be used within rewrite rule to convert any rule input string or substitution URL to lower case.
  • Rewrite maps. Rewrite map is an arbitrary collection of name-value pairs that can be used within rewrite rules to generate the substitution URL during rewriting. Rewrite maps are particularly useful when you have a large set of rewrite rules, all of which use static strings (i.e. there is no pattern matching used). In those cases, instead of defining a large set of simple rewrite rules, you can put all the mappings between input URL and substitution URL as keys and values into the rewrite map, and then have one rewrite rule which references this rewrite map to look up substitution URL based on the input URL.
  • Failed Request Tracing support. IIS7.0 Failed Request Tracing can be used to troubleshoot errors related to URL rewriting.
  • Rule templates. Rule template is an extension for URL rewrite module user interface, that simplifies creation of rewrite rules for a particular task.  The GoLive release of the module includes 3 built-in rule templates, plus it allows plugging in any number of custom templates.
  • UI for testing of regular expression and wildcard patterns. A GUI tool for testing rule patterns is included into the module’s user interface. The tool can be used to quickly check how the regular expression or wildcard pattern works. Also, it can be used for troubleshooting and debugging of problems related to pattern matching.
  • UI for managing rewrite rules and rewrite maps. Rewrite rules and rewrite maps can be added, removed and edited by using “URL Rewrite Module” feature in IIS Manager.
  • GUI tool for importing of mod_rewrite rules. URL rewrite module includes a GUI tool for converting rewrite rules from mod_rewrite format into an IIS format.

[ Click HERE to get the IIS URL Re-Writer ]

ActiveState Releases Komodo 5

I often want something between Visual Studio and NotePad 🙂

ActivieState makes some GREAT software and I recently installed Komodo 5 (I’m a longtime Komodo user)

I especially use it or Python, Perl, and various script dialects !

Some of the new stuff as described on the Komodo web page…

  • Shared code: With new support for the Git, Mercurial (hg), and Bazaar distributed version control systems (or the already supported Subversion, Perforce, and CVS), you can share your code with whichever SCC system you choose. And smart cross-SCC system checkout wizardry makes it easier to get to work on shared repositories.Shared beauty: Consistent formatting improves code readability and maintainability in a team. Easily hook external code formatting tools (like PHP Beautifier, Perltidy, and astyle) into Komodo IDE 5.0 or add tighter integration via an extension.
  • Shared speed: Komodo IDE 5.0 is now built on the Mozilla 1.9 codebase (the same codebase as Firefox 3) and Python 2.6, so it’s speedier, prettier (particularly the more native look on OS X), and has new features to aid in stability.And more, of course: Like multiple top-level windows, slicker UIs for tabs and sidebars…. Check out the Komodo IDE 5.0 documentation for all the details.

    [ If you click HERE you can get a free trial. ]

  • DotNetSlackers – Building applications for Windows Azure

     Since the PDC last week I’ve had many email asking about Azure.

    Tanzim Saqib just published a super article with sample code on Azure on DotNetSlackers

    I hope you will give it a read.

    [ Read the Article on .NET Slackers HERE ]