More Examples of Bad Technical Support

A few years ago I wrote my Why I Won't Buy Another HP Computer blog, wherein I detailed several terrible support experiences that I had to endure with Hewlett Packard's technical support people. In order to show that not everyone has terrible technical support people, I recently wrote my Why I Will Buy Another Dell Computer blog, where I described a great experience that I had with Dell's technical support people. That being said, not everyone can be a good as Dell, so in this blog I will illustrate another bad support example - this time it's from Microsoft's Technical Support.

Here's the situation: I recently purchased a Dell 8700 computer, which came with Windows 8.1 installed. Since I run a full Windows domain on my home network, I would rather run the professional version of Windows 8.1 on my computers, so I purchased a Windows 8.1 Pro Pack from Microsoft in order to upgrade my system. The upgrade process is supposed to be painless; Microsoft sends you a little box with a product key that you use to perform the upgrade.

Well, at least that's the way that it should have worked, but I kept getting an error message when I tried to use the key. So after a few attempts I decided that it was time to contact Microsoft's Technical support to resolve the issue. I figured that it was probably some minor problem with the key, and it would be an easy issue to resolve. With that in mind, I browsed to http://support.microsoft.com and started a support chat session, which I have included in its entirety below:

Answer Desk online chat
Vince P: 5:12:37 PM Hi, thanks for visiting Answer Desk. I'm Vince P.
Welcome to Answer Desk, how may I help you?
You: 5:13:09 PM I just purchased a Windows 8.1 Pro Pack Product key from Microsoft for my Dell 8700 computer, but I get an error message that the key does not work.
Here is the key: nnnnn-nnnnn-nnnnn-nnnnn-nnnn
Vince P: 5:13:43 PM I'll be happy to sort this out for you.
For documentation purposes, may I please have your phone number?
You: 5:14:02 PM nnn-nnn-nnnn
Vince P: 5:14:38 PM Thank you, give me a moment please.
As I understand, you cannot install Windows Media Center using the key that you have, is that correct?
You: 5:17:53 PM Yes, I am trying to upgrade from Windows 8.1 to Windows 8.1 Pro with Media Center
Vince P: 5:18:12 PM First, allow me to set expectations that Answer Desk is a paid support service. We have a couple of paid premium support options should your issue prove complex and require advanced resources. Before we discuss those further, I need to ask some questions to determine if your problem can be handled by our paid support or if it's something really easy that we can fix at no charge today.
I will remotely access your computer to check the root cause of this issue.
[Note: Vince sends me a URL and code to initialize a remote session to my computer using a 3rd-party application.]
You: 5:19:40 PM Why is a remote session necessary?
Vince P: 5:21:19 PM Yes, I need to check the root cause of this issue.
Or I can send you some helpful links if you want.
You: 5:21:52 PM Or you can ask me to check anything for you
What do you need to check?
Vince P: 5:22:38 PM http://windows.microsoft.com/en-US/windows-8/feature-packs
If this link doesn't work, there might be some third party application that are blocking the upgrade.
It is much faster if I remotely access your computer, if it's okay with you.
You: 5:24:34 PM I have gone through the steps in that article, they did not work, which is why I contacted support
Vince P: 5:25:06 PM I need to remotely access your computer.
You: 5:25:11 PM The exact error message is "This key won't work. Check it and try again, or try a different key."
Vince P: 5:25:16 PM Please click on the link and enter the code.
You: 5:25:46 PM Or - you can tell me what I need to check for you and I will give you the answers you need.
Vince P: 5:26:51 PM http://answers.microsoft.com/en-us/windows/forum/windows_8-pictures/upgrade-to-windows-8-media-center/6060f338-900f-437f-a981-c2ae36ec0fd8?page=~pagenum~
I'm sorry, but I have not received a response from you in the last few minutes. If you're busy or pre-occupied, we can continue this chat session when you have more time. If I do not hear from you in the next minute, I will disconnect this session.
It was a real pleasure working with you today. For now, thank you for contacting Microsoft Answer Desk. Again, my name is Vince and you do have a wonderful day.
Your Answer Tech has ended your chat session. Thanks for visiting Answer Desk.

Unbeknownst to "Vince", I worked in Microsoft Technical Support for ten years, so I know the way that the system is supposed to work and how Microsoft's support engineers are supposed to behave. Vince was condescending and extremely uncooperative - he simply wanted to log into my machine, but no one gets to log into my computers except me. I know my way around my computer well enough to answer any questions that Vince might have had, but Vince didn't even try. What's more, when Vince sent me a long support thread to read, he took that as his opportunity to simply end the chat session a few moments later. Very bad behavior, dude.

Unfortunately, Microsoft's chat application crashed after the session had ended, so I wasn't able to provide negative feedback about my support experience, so this blog will have to suffice. If I had a way to contact Vince's boss, I would have no problem pointing out that Vince desperately needs remedial training in basic technical support behavior, and he shouldn't be allowed to work with customers until he's shown that he can talk a customer through a support scenario without a remote session. If he can't do that, then he shouldn't be in technical support.

By the way - just in case someone else runs into this issue - all that I had to do in order to resolve the issue was reboot my computer. Seriously. Despite the error message, apparently Windows had actually accepted the upgrade key, so when I rebooted the computer it upgraded my system to Windows 8.1 Professional. (Go figure.)

Proper Use of Acronyms In Business Communications

I caught some people at work overusing some obscure acronyms in business emails that have considerably more popular uses, so I had to tell them to get used to spelling out phrases at least the first time in order to provide context for everyone else in the conversation. This should be obvious to everyone, but too many people fail to realize that their recipients may have no idea what the sender is talking about based on their individual knowledge.

For example:

  • HTML - This should always mean "HyperText Markup Language," and it should never mean "Happy To Make Lemonade" With that in mind, you should always write "Happy To Make Lemonade (HTML)" when you first use it, and you should probably use it throughout your email. But still, you should consider writing "HyperText Markup Language (HTML)" when you first use it, just to make everything perfectly clear to your readers, and then you can use just the acronym for subsequent references.
  • VS - This could be short for "versus," or it could mean "Visual Studio." Many English-speaking readers will probably be able to determine the correct meaning based on the surrounding text, but in a diverse work environment there is no guarantee that the intended meaning will be perfectly clear to everyone. This means that some recipients will have to re-read what the sender has written in order to verify their understanding, which could have been alleviated by simply using "A versus B" or "Visual Studio (VS)."
  • OMG - This is often used colloquially to mean "Oh My Gosh," but I've seen it used to mean "On Middle Ground." Needless to say, the sentence can have dramatically different meanings depending on how that acronym is understood by the reader. For example: "Right now both parties are having a difficult time finding issues OMG where everyone can agree."

Social media acronyms should not be used in a business context; this includes the following examples:

  • BTW - "By The Way"
  • FWIW - "For What It's Worth"
  • PDQ - "Pretty Darn Quick"
  • SOL - "Sh** Outta Luck"
  • etc.

There are a few possible exceptions which may be commonly-understood business acronyms, but you should still consider your recipients when deciding which of these acronyms you should use and which you should spell out. Here are a few examples:

  • ASAP - "As Soon As Possible"
  • FYI - "For Your Information"
  • FAQ - "Frequently-Asked Questions"
  • Q&A - "Questions and Answers"
  • PS - "Postscript"

There is one simple rule that you should always remember when writing for others:

In business communications, brevity is not always better, and ambiguity will be the death of us all. Winking smile

FTP Clients - Part 14: CuteFTP

For this next installment in my series about FTP clients, I want to take a look at Globalscape's CuteFTP, which is available from the following URL:

http://www.cuteftp.net/

CuteFTP is a for-retail product that used to be available in several editions - Lite, Home, and Pro - but at the time of this blog CuteFTP was only available in a single edition which combined all of the features. With that in mind, for this blog post I used CuteFTP 9.0.5.

CuteFTP 9.0 Overview

I should start off with a quick side note: it's kind of embarrassing that it has taken me so long to review CuteFTP, because CuteFTP has been my primary FTP client at one time or other over the past 15 years or so. That being said, it has been a few years since I had last used CuteFTP, so I was curious to see what had changed.

Fig. 1 - The Help/About dialog in CuteFTP 9.0.

To start things off, when you first install CuteFTP 9.0, it opens a traditional explorer-style view with the Site Manager displayed.

Fig. 2 - CuteFTP 9.0's Site Manager.

When you click File -> New, you are presented with a variety of connection options: FTP, FTPS, SFTP, HTTP, etc.

Fig. 3 - Creating a new connection.

When the Site Properties dialog is displayed during the creation of a new site connection, you have many of the options that you would expect, including the ability to change the FTP connection type after-the-fact; e.g. FTP, FTPS, SFTP, etc.

Fig. 4 - Site connection properties.

Once an FTP connection has been established, the CuteFTP connection display is pretty much what you would expect in any graphical FTP client.

Fig. 5 - FTP connection established.

A cool feature for me is that CuteFTP 9.0 supports a COM interface, (which is called the Transfer Engine), so you can automate CuteFTP commands through .NET or a scripting language. What was specifically cool about CuteFTP's scripting interface was the inclusion of several practical samples in the help file that is installed with the application.

Fig. 6 - Scripting CuteFTP.
Fig. 7 - Scripting samples in the CuteFTP help file.

Anyone who has read my blogs in the past knows that I am also a big fan of WebDAV, and an interesting feature of CuteFTP is built-in WebDAV integration. Of course, this functionality is a little redundant if you are using any version of Windows starting from Windows XP and later since WebDAV integration is built-in to the operating system via the WebDAV redirector, (which lets you map drive letters to WebDAV-enabled websites). But still - it's cool that CuteFTP is trying to be an all-encompassing transfer client.

Fig. 8 - Creating a WebDAV connection.

One last cool feature that I should call out in the overview is the integrated HTML editor, which is pretty handy. I could see where this might be useful on a system where you use FTP and you don't want to bother installing a separate editor.

Fig. 9 - CuteFTP's Integrated HTML editor.

Using CuteFTP 9.0 with FTP over SSL (FTPS)

CuteFTP 9.0 has built-in support for FTP over SSL (FTPS), and it supports both Explicit and Implicit FTPS. To specify which type of encryption to use for FTPS, you need to choose the appropriate option from the Protocol type drop-down menu in the Site Properties dialog box for an FTP site.

Fig. 10 - Specifying the FTPS encryption.

I was really happy to discover that I could use CuteFTP 9.0 to configure an FTP connection to drop out of FTPS on either the data channel or command channel once a connection is established. This is a very flexible design, because it allows you to configure FTPS for just your user credentials with no data and no post-login commands, or all commands and no data, or all data and all commands, etc.

Fig. 11 - Specifying additional FTPS options.

Using Using CuteFTP 9.0 with True FTP Hosts

CuteFTP 9.0 does not have built-in support for the HOST command that is specified in RFC 7151, nor does CuteFTP have a first-class way to specify pre-login commands for a connection.

But that being said, I was able find a way to configure CuteFTP 9.0 to send a HOST command for a connection by specifying custom advanced proxy commands. Here are the steps to pull this off:

  1. Bring up the properties dialog for an FTP site in the CuteFTP Site Manager
  2. Click the Options
  3. Choose Use site specific option in the drop-down
  4. Enter your FTP domain name in the Host name field
  5. Click the Advanced button
  6. Specify Custom for the Authentication Type
  7. Enter the following information:

    HOST ftp.example.com
    USER %user%
    PASS %pass%

    Where ftp.example.com is your FTP domain name
  8. Click OK for all of the open dialog boxes
Fig. 12 - Specifying a true FTP hostname via custom proxy settings.

Note: I could not get this workaround to successfully connect with FTPS sessions; I could only get it to work with regular (non-encrypted) FTP sessions.

Using Using CuteFTP 9.0 with Virtual FTP Hosts

CuteFTP 9.0's login settings allow you to specify the virtual host name as part of the user credentials by using syntax like "ftp.example.com|username" or "ftp.example.com\username". So if you don't want to use the workaround that I listed earlier, or you need to use FTPS, you can use virtual FTP hosts with CuteFTP 9.0.

Fig. 13 - Specifying an FTP virtual host.

Scorecard for CuteFTP 9.0

This concludes my quick look at a few of the FTP features that are available with CuteFTP 9.0, and here are the scorecard results:

Client
Name
Directory
Browsing
Explicit
FTPS
Implicit
FTPS
Virtual
Hosts
True
HOSTs
Site
Manager
Extensibility
CuteFTP 9.0.5 Rich Y Y Y Y/N1 Y N/A2
Notes:
  1. As I mentioned earlier, support for true HOSTs is not built-in, but I provided a workaround that seems to work great for FTP sessions, although I could not get it work work with FTPS sessions.
  2. I could not find a way to extend the functionality of CuteFTP 9.0; but as I said earlier, it provides a COM for scripting/automating FTP functionality.

That wraps things up for today's review of CuteFTP 9.0. Your key take-aways should be: CuteFTP is good FTP client; it has added some great features over the years, and as with most of the FTP clients that I have reviewed, I am sure that I have barely scratched the surface of its potential.


Note: This blog was originally posted at http://blogs.msdn.com/robert_mcmurray/

Why I Will Buy Another Dell Computer

Several years ago I wrote a blog post that was titled Why I Won't Buy Another HP Computer, in which I described (in detail) a series of awful customer support experiences that I had with Hewlett-Packard (HP) when I purchased an HP desktop computer.

I would now like to offer the details of an entirely different customer support experience that I recently had with what is probably my favorite computer manufacturer: Dell.

logo-dell

Why I Like Dell

To start things off, I need to point out that I am a huge fan of Dell computers, and I have been for years. The reason for my admiration is simply this: Dell's computers have always worked for me. I have never had an experience where the hardware in a Dell computer has failed, even in extremely bad conditions. For example, I used to manage the network for a small church which had somewhere around 15 to 20 desktop computers and three Dell PowerEdge servers. During a particularly bad thunderstorm, a nearby lightning strike took out the hard drives on nearly all of the computers, including the servers. Fortunately everything on the network had multiple redundant backups, but as it turns out - I didn't need to use the backups. Only the hard drives were bad - all of the computers survived the damage, and I was able to use a combination of Symantec Ghost and Runtime Software's GetDataBack to restore all of the data on the failed drives to new drives. Despite the wide swath of destruction, all of the computers were up-and-running in less than a weekend.

In addition to having lived through that situation, I have been nothing but impressed with all of the Dell computers that I have owned both personally and professionally, and I have owned a lot. My currently laptop is from Dell, as is my wife's laptop, my son's laptop, my daughters' laptops, my Windows Media Center computer, my tablet PC, and several of my work-related computers. In fact, the only non-Dell computing devices in my house right now are my home-built rackmounted server, my wife's Microsoft Surface, and the HP computer from my earlier blog - which is what led me to my recent experience.

Shopping for a New PC

The single HP computer in my household is several years old, and it was time for me to start thinking about upgrading. I had been doing a little shopping, but nothing serious. Since I am taking some graduate courses at the University of Arizona, I have found myself on the receiving end of spam that various companies throw at college students. (Dear Spammers: if you are reading this, I do not need another credit card, or back-to-school attire, or a summer internship, or student housing, etc.) But one piece of spam caught my eye: Dell had sent me an email advertising a free tablet computer with the purchase of a new computer. Since I was already in the market for a new computer, I thought that I would check out their deals.

I followed the link from the email to Dell's website, where I quickly learned that Dell's offer was for an Android-based tablet. I could care less about an Android device, but I was curious if Dell had a deal for a Windows-based device. With that in mind, I clicked a link to start a chat session with a sales representative. I don't want to give out full names for privacy reasons, so I'll just say that I wound up with a guy whose initials are "N.A." He informed me that Dell did have a deal where I could get a Windows tablet instead of the Android tablet, although it would cost more. That was perfectly acceptable to me, so I said that I was interested, but I had more questions. Our chat session wound up lasting 45 minutes, all of which was entirely due to me because I spent much of the chat session looking at various products on Dell's website and asking N.A. lots of questions about this option or that.

Bad News and Good News

I eventually decided on a deal that I liked, and I gave all of my contact information to N.A. so he could call me to get my credit card information. N.A. sent me the full text of the chat session, and he promised to call me within five minutes. But he never called. I remembered from the chat session that I had mentioned that I might want to wait 24 hours since it was the day before payday, so after 20 minutes I decided that N.A. might have misunderstood what I had meant, and I decided to wait until the next day to see if Dell would call me back.

By the following afternoon I still hadn't heard anything, so I decided to call Dell's 1-800 number to see what the deal was. I was routed through to a sales representative with the initials W.P., and I explained the situation. He did a little checking, and he informed me of two interesting pieces of information: first of all, the Dell deal for a Windows-based tablet had ended the day before, and much worse - apparently N.A. had quoted me the wrong tablet PC anyway.

Giving credit where it was due, W.P. was great throughout the call - I was understandably disappointed at the situation, and I kind of felt like I was being forced into a "Bait-and-Switch" scenario based on mistakes over which I had no control. W.P. checked with his manager, J.H., who said that he would try to contact N.A.'s department to see if they would stand behind their misquoted pricing. With that, W.P. and I ended the call.

I hadn't heard anything by the following afternoon, so I sent an email to J.H. and W.P. to ask what the status was with my situation, and I forwarded N.A.'s email with the original chat session. I also mentioned that I am a big Dell fan, and this situation was not reflecting well on Dell's ability to make a sale. Shortly after I sent out my email, J.H. called me to say that he couldn't contact the right person in N.A.'s department, so he was taking responsibility for the situation on Dell's behalf and was going to honor the deal. Very cool.

Closing Remarks

This entire experience reinforced my appreciation for Dell - not because I wound up getting a good deal, but primarily because a series of people took responsibility for someone else's mistake and worked to make things right.

Ultimately these people's actions made their company look great, and that's why I will buy another Dell computer.

 

FYI - The computer and the tablet both arrived and they're great. ;-]

How to Merge a Folder of MP4 Files with FFmpeg (Revisted)

I ran into an interesting situation the other day: I had a bunch of H.264 MP4 files which I had created with Handbrake that I needed to combine, and I didn't want to use my normal video editor (Sony Vegas) to perform the merge. I'm a big fan of FFmpeg, so I figured that there was some way to automate the merge without having to use an editor.

I did some searching around the Internet, and I couldn't find anyone who was doing exactly what I was doing, so I wrote my own batch file that combines some tricks that I have used to automate FFmpeg in the past with some ideas that I found through some video hacking forums. Here is the resulting batch file, which will combine all of the MP4 files in a directory into a single MP4 file named "ffmpeg_merge.mp4", which can be renamed to something else:

@echo off

if exist ffmpeg_merge.mp4 del ffmpeg_merge.mp4
if exist ffmpeg_merge.tmp del ffmpeg_merge.tmp
if exist *.ts del *.ts

for /f "usebackq delims=|" %%a in (`dir /on /b *.mp4`) do (
ffmpeg.exe -i "%%a" -c copy -bsf h264_mp4toannexb -f mpegts "%%a.ts"
)

for /f "usebackq delims=|" %%a in (`dir /b *.ts`) do (
echo file %%a>>ffmpeg_merge.tmp
)

ffmpeg.exe -f concat -i ffmpeg_merge.tmp -c copy -bsf aac_adtstoasc ffmpeg_merge.mp4

if exist ffmpeg_merge.tmp del ffmpeg_merge.tmp
if exist *.ts del *.ts

The merging process in this batch file is performed in two steps:

  • First, all of the individual MP4 files are remuxed into individual transport streams
  • Second, all of the individual transport streams are remuxed into a merged MP4 file

Here are the URLs for the official documentation on each of the FFmpeg switches and parameters that I used:

By the way, I realize that there may be better ways to do this with FFmpeg, so I am open to suggestions. ;-]

Some Useful and Obscure FTP Configuration Settings

I get a lot of question about various configuration settings for the IIS FTP service, and most of the settings that I discuss with people can be configured through the FTP features in the IIS Manager. That being said, there are some useful configuration settings for the FTP service which I periodical send to people that have no user interface for setting them. With that in mind, I thought I would write a quick blog to point out a few of these obscure settings that I personally use the most-often or I send to other people.

Using Domain Name Syntax as an FTP Virtual Hostname

I use this setting on all of my FTP servers because it seems a little more natural to me. Here's the scenario: the IIS FTP service supports two kinds of hostnames:

  • "Real" FTP hostnames - these are real FTP hostnames that are specified by using the FTP HOST command (as defined in RFC 7151)
  • "Virtual" ftp hostnames - these are FTP hostnames that are specified as part of the FTP USER command

Real FTP hostnames are pretty straight-forward: an FTP client specifies the hostname with a HOST command when a user is connecting to the server. Once the IIS FTP service receives that command, the FTP service routes the FTP session to the correct FTP site.

That being said, the FTP HOST command is still rather new, so only a handful of FTP clients currently support it. Because of that, you can use FTP "virtual" hostnames with the IIS FTP service. By default that syntax uses the "vertical line" or "pipe" character to differentiate between the hostname and user name. For example:

  • "ftp.contoso.com|username"
  • "ftp.fabrikam.com|username"

When you are specifying your FTP credentials in your FTP client, you would enter your username like the preceding examples. While this syntax is valid for both the IIS FTP service and the underlying FTP protocol, it seems a little odd to most users (including me). With that in mind, we added a configuration setting for the FTP service that will allow you to use the more-familiar domain\username syntax like the following examples:

  • "ftp.contoso.com\username"
  • "ftp.fabrikam.com\username"

To enable this feature, use the following steps:

  1. Open a command prompt as an administrator.
  2. Type the following commands:
    cd /d "%SystemRoot%\System32\Inetsrv"
    appcmd.exe set config -section:system.ftpServer/serverRuntime /hostNameSupport.useDomainNameAsHostName:"True" /commit:apphost
    net.exe stop FTPSVC
    net.exe start FTPSVC
  3. Close the command prompt.

More information about this feature is available in the IIS configuration reference at the following URL:

FTP Credential Caching

The FTP service caches user credentials for successfully-authenticated user sessions in order to help improve login performance, and I wrote the following detailed blog about this a couple of years ago:

Credential Caching in FTP 7.0 and FTP 7.5

I don't want to re-post an old blog, but I have sent several people to that blog over the years, so I thought that it was worth mentioning here since it seems to be referenced quite often. The problem that people seem to run into the most is that their old password is still valid for FTP after they have changed it, and this is caused by the FTP service caching their user credentials.

This is especially annoying for me personally when I am working on a development computer where I am creating an authentication provider. Unless I disable credential caching on my development computer, I can never seem to get any work done. To resolve this issue, I disable credential caching for the FTP service by using the following steps:

  1. Open a command prompt as an administrator.
  2. Type the following commands:
    cd /d "%SystemRoot%\System32\Inetsrv"
    appcmd.exe set config -section:system.ftpServer/caching /credentialsCache.enabled:"False" /commit:apphost
    net.exe stop FTPSVC
    net.exe start FTPSVC
  3. Close the command prompt.

The blog which I mentioned earlier goes into more detail about setting a custom timeout interval for credential caching instead of disabling the feature entirely, and all of the settings for FTP credential caching are in the IIS configuration reference at the following URLs:

FTP Client Certificate Authentication

FTP Client Certificate Authentication is an often-overlooked feature of the IIS FTP service, and I think that this is due to two reasons:

  1. There is no user interface to configure the required settings
  2. Configuring the required settings is very difficult

My second reason cannot be understated; I usually have to set up FTP Client Certificate Authentication once or twice a year in order to test various scenarios, and each time I do so I am reminded of just how difficult it can be to get everything right, and equally how easy it is to get something wrong.

Fortunately I took the time a couple of years ago to write a blog which documents everything that it takes to configure the FTP service, and I have used my notes in that blog several times. In complement to my blog on the subject, Vivek Kumbhar wrote an excellent blog series with additional steps to configure your Active Directory for certificate authentication. With that in mind, here are all of the requisite blog posts that you would need to set up this feature:

As I have mentioned before, configuring this feature is not for the faint-of-heart, but it can be very beneficial from a security standpoint.

For more information about the settings that are required for FTP Client Certificate Authentication, see the following articles in the IIS configuration reference:

That wraps it up for today's post. ;-]


Note: This blog was originally posted at http://blogs.msdn.com/robert_mcmurray/

A Short Ride on a Hot Summer Day

I thought that I would take a quick 9-mile ride today in the 100F+ afternoon temperatures just to see what that was like. (Spoiler alert - this was a dumb idea.) My friend Keith had done a similar ride several years earlier on the hottest day in Seattle history, and even though he admitted in hindsight that it probably was a bad plan, sometimes experience is the best teacher - so this is a lesson that I had to learn for myself.

It is a measured 4.5 miles from my doorstep to the guard shack at the Saguaro National Park, which makes it a fairly easy 9-mile ride round-trip on a good day, (with the option of adding an additional 8 miles if you ride through the park itself). There is only 250 feet of elevation change from my house to the park, so I can generally average about 15mph without too much effort.

I use CycloMeter on my Windows Phone to track my rides, and it uses the Windows Phone "Zira" text-to-speech voice to announce each mile that I have travelled, every 10 minutes that I have been riding, and every 100 calories that I have burned.

CycloMeter

With that in mind, here is the conversation that ensued between my Windows Phone and me during today's ride:

  • Leaving the house:
    • Me: Hmm... it's a little warm. What's the temperature?
    • Me: [Looks at the Weather Channel app.]
    • Me: 101 degrees, not too bad.
  • At the 0.5-mile mark:
    • Me: Let's just casually glide between these speed bumps and the curb, shall we? No sense beating up the bike.
  • At the 1.0-mile mark:
    • Zira: You've ridden 1 mile.
    • Me: Yeah, yeah. I'm aware of that - I know right where I am.
  • At the 1.7-mile mark:
    • Me: OK - quick break at the Houghton Road stoplight. Time to hydrate.
  • At the 2.0-mile mark:
    • Me: There's the road that marks off 2 miles from my house.
    • Zira: You've ridden 2 miles.
    • Me: Um, yeah - didn't I just say that?
  • At the 2.5-mile mark:
    • Zira: You've burned 100 calories.
    • Me: Cool. Is it me, or is it getting warmer?
  • At the 3.0-mile mark:
    • Me: This was a dumb idea. I hate this hill.
    • Zira: You've ridden 3 miles.
    • Me: I must remember that this big hill with the turn is the 3-mile mark.
    • Me: (Didn't I tell myself that the last time I rode this way?)
  • At the 4.0-mile mark:
    • Me: This was a really dumb idea. It's pretty hot out here. How much Gatorade do I have left? Where am I?
    • Zira: You've ridden 4 miles.
    • Me: Oh, that's where I am. This was a really dumb idea.
  • At the 4.5-mile mark:
    • Me: OK - I'm at the guard shack; time to turn around. Should I stop to refill my water bottle? Nah, takes too long.
    • My Evil Subconscious: Hey, as long as I'm here, should I enter the park and add the 8-mile desert ride onto this?
    • My Good Subconscious: I hate you. Shut up.
  • At the 5.0-mile mark:
    • Zira: You've ridden 5 miles.
    • Me: It's really hot; did I mention that already? This was such a dumb idea.
    • Zira: You've burned 200 calories.
    • Me: Well, that takes care of lunch.
  • At the 6.0-mile mark:
    • Zira: You've ridden 6 miles.
    • Me: I'm almost out of Gatorade; I should have filled up with water at the park entrance. I'm such an idiot.
  • At the 6.7-mile mark:
    • Me: I should be at the 7-mile mark!!! What's up with this stupid GPS??? There's the stupid road that's 2 miles from my house!!!
    • Zira: (Silence.)
    • Me: Oh wait, wrong road; there's the correct road up ahead. This was a dumb idea.
  • At the 7.0-mile mark:
    • Zira: You've ridden 7 miles.
    • Me: Shut up. No one likes a smarty-pants. Why is it so hot?
  • At the 7.3-mile mark:
    • Me: Must catch the stoplight at Houghton Road...
    • Me: Must catch the stoplight at Houghton Road...
    • Me: Must catch the stoplight at Houghton Road...
    • Me: Caught it.
  • At the 7.5-mile mark:
    • Zira: You've burned 300 calories.
    • Me: By the time I get home, I will have burned off breakfast and lunch. How's my blood sugar? Is it crashing yet? Perhaps I should have eaten more?
  • At the 8.0-mile mark:
    • Zira: You've ridden 8 miles.
    • Me: Why does my Gatorade taste like I boiled it? Maybe a black water bottle was a bad idea.
  • At the 8.5-mile mark:
    • Me: Who put these stupid speed bumps here???
  • At the 8.9-mile mark:
    • Me: I'm right by the house!!! Why doesn't this stupid GPS say 9 miles???
    • My OCD Subconscious: You have to ride through the neighborhood to pick up the extra 0.1 miles and make it an even 9.0 miles.
    • My Hindsight Subconscious: You actually fell for that? You're an idiot.
  • At the 9.0-mile mark:
    • Zira: You've ridden 9 miles.
    • Me: I'm done!!! Throw bike in garage... Grab water bottle from fridge... Pour ice water in my hair and drink the rest... Jump in shower... Why is this tap water so warm??? I haven't even turned on the hot water!!!

That's pretty much how the whole ride went down. Just in case you were wondering, the starting and ending temperatures for the ride were both 101 degrees.

Did I mention at any point that this was a dumb idea?

A=444Hz Tuning and the Magic 528Hz Frequency

One of my guitar-playing friends recently posted the following article to Facebook as a joke:

http://themindunleashed.org/2014/03/miracle-528-hz-solfeggio-fibonacci-numbers.html

I know that my friend was just being silly, but the actual content of that piece is more drivel in a long line of mathematical silliness which forces me to heave a deep sigh for the fate of humanity. The article in question reinforces my conviction that some people will believe just about anything: bigfoot, aliens, unicorns, Obamacare, leprechauns, etc. But one of my personal favorites is the assertion that altering the base frequency in a tuning scale will somehow lead to a perfect universe.

What a bunch of hooey.

As I mentioned earlier, I know that my friend was posting the article to be silly, but just for the sake of argument, I can't resist taking a look at the math from the article. At the risk of being overly self-indulgent, I know that I have used my A=432Hz Tuning blog post to refute concepts like this in the past. But that being said, my blog post examines a lot of the actual math behind these sorts of silly ideas, and they just don't stand up to scrutiny. Oh sure, there's a bunch of purported facts in the article that my friend posted, (once you get past the gooey new age crap). But as I said earlier, people will believe just about anything.

Here's a case in point: when I visited Machu Picchu I was assured by my tour guide that one of the stones in one of the walls had been certified by NASA as the harmonic center point of all nature. I didn't believe my guide, but in hindsight her statement seems considerably more plausible than anything that was presented in the "Magic 528Hz" article. (Note: I meant that humorously; you can't trust NASA to find the harmonic center point of anything.)

In any event - let's take a look at some of the math from the 528Hz article, shall we?

If you use A=444Hz as the article suggests, that does NOT make the frequency for C fall on an even interval - it's off by a diminutive fraction:

Note Frequency
A 444.00 Hz
Bb 470.40 Hz
B 498.37 Hz
C 528.01 Hz
C# 559.40 Hz
D 592.67 Hz
Eb 627.91 Hz
E 665.25 Hz
F 704.81 Hz
F# 746.72 Hz
G 791.12 Hz
G# 838.16 Hz
A 888.00 Hz

As you can see, the frequency for C falls pretty close to 528Hz. But as I mentioned in my blog, what your ear actually wants to hear are frequencies which harmonically-derived perfect intervals across the scale. However, the frequencies in the tuning scale that the article's author is using are based on equal-temperament, which is a harmonically imperfect standard. Because of this fact, you would not use equal-tempered tuning if you were actually trying to calculate harmonically-perfect intervals, so the 528Hz article is completely busted right there. (On a side note, even frequencies in a full scale like this do not matter to your ear - because they just don't. Period. You can have uneven decimal points for perfect intervals in a harmonically-derived scale if you do your math correctly; arguing about decimal points is just stupid.)

That being said, the author spends a great deal of time rambling on and on about Fibonacci sequences, (which are really cool by the way). However, the author completely fails to mention (or perhaps to even notice) that 528 doesn't fall in the standard Fibonacci sequence:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377,
610, 987, 1597, 2584, 4181, 6765, 10946, etc.

Now, if the number 528 had actually fallen inside the standard Fibonacci sequence, that would have been a pretty cool factoid for the article. But that being said, it still wouldn't mean anything.

Just for the fun of it, let's see how we can manipulate the math a little, shall we?

For example, if you use A=431.33333Hz as your base frequency, then the frequency for Eb will be 610.00Hz, which is actually a valid number in a standard Fibonacci sequence. That's kind of amusing, but it doesn't mean anything useful. All that means is that I spent a lot of time in Excel typing in random base frequencies until I bumped into a number that worked. Likewise, if you use A=443.99Hz as your base frequency, then your C will actually be 528Hz, but that's just as useless. (And good luck trying to find a tuner that will let you use A=443.99Hz as your base frequency.)

In the end, the article which my friend posted to Facebook is an amusing work of fiction, although reading it will waste several minutes of your life which could have been spent doing something considerably more productive.

Case Study: Migrating Microsoft's .NET Community Websites to Microsoft Azure

Have you ever wondered how much work is involved when migrating a traditionally-hosted production website to Microsoft Azure? If so, the following case study might be of interest to you:

Microsoft Azure Migration: Microsoft’s .NET Community Websites
Migrating Microsoft’s ASP.NET and IIS.NET Community Websites to Microsoft Azure

Here's a little background information on this migration case study: last fall Microsoft worked with two of it's hosting partners, Neudesic and Orcsweb, to migrate the www.asp.net and www.iis.net websites from a traditional web hosting scenario (e.g. websites hosted on physical servers) to virtual machines that are hosted in the cloud on Microsoft Azure. Here's what the web farm looked like before the migration:

After the migration, Microsoft had reduced both the hosting costs and the number of servers required by almost 50%.  Here's what the web farm looked like when the migration had been completed:

There are a lot of people who helped make this migration a success - and there are far too many to name here - but I would like to say a special "thanks" to everyone at Neudesic and Orcsweb for making this migration process as painless as possible.


Note: This blog was originally posted at http://blogs.msdn.com/robert_mcmurray/

How Much is that Lizard in the Window?

I was sitting at the desk in my office when I heard scratching on my window, so I opened my blinds and I saw this guy trying to get in.

For those of you who have never seen one before, this is a Desert Spiny Lizard, and apparently he was confused by the window glass. Based on the fact that the slats in my window blinds are 1.75 inches apart, that places the length of this big guy at somewhere between 10 and 11 inches in size.

I am reminded daily that living in the desert is kind of an adventure... Smile