Killer Rabbits from Antiquity

For those of you who thought that the killer rabbit in Monty Python's "Holy Grail" was a work of fiction, I suggest that you see the top center pane in this stained glass detail from the West Rose Window of Notre Dame in Paris. Apparently brutal bunnies must have been an issue when the French built this cathedral, or perhaps the French will run away from anything.

(Note: Giving credit where it is due, this image is originally from the web page at La Cathédrale Notre Dame de Paris.)

 Wink

Replacing a Military Radio - The Hard Way

Many years ago - more years than I would care to admit - I spent eight years in the Army as a 98G Voice Intercept Operator, which is a long title for someone that spends a lot of time listening to what other people are saying, taking notes, and then telling someone else what was being said. I won't go into any more details about what I did for a living, but for several years I was stationed in Fulda, Germany, where I was a member of the 511th Military Intelligence Company, which was attached to the 11th Armored Cavalry Regiment.

My fellow soldiers and I spent a lot of time hiding in the forests along what was then the border between East and West Germany, which is where the conditions were generally the best for our line of work. During the day we used an AN/TRQ-32(V) Radio Receiving Set, which we affectionately called the "Turkey 32."

The Turkey 32 was my favorite piece of equipment, and it's primarily used for direction finding operations. (Which means "locating the bad guys.") The only trouble with the Turkey 32 was - it used a great deal of fuel, and its generator was horribly loud, so at night we would shut down the Turkey 32 and use our AN/TRQ-30 Manpack Radio Receiving Set to continue our listening activities... which we called the "Turkey 30."

These radios were left over from a bygone era in the distant past - like the Korean War, or maybe the Civil War - so they were really starting to show their age. One of our radios was falling apart - literally. The knobs on the face panel kept falling off, the reception was terrible, the tuner barely moved, etc. I knew that my Turkey 30 was on its last legs and was in dire need of some kind of emergency maintenance, so one day I hauled my Turkey 30 to our Circuits & Electronics (C&E) office to see what my options were. (I was secretly hoping that C&E would replace the radio, but I was almost certain that it would simply spend a few weeks in the shop for repairs.) I had a good friend who was working in C&E that day, SP4 Villarreal, and he replied that as long as the radio was working, there was nothing that he could do about it.

So I started to pack up the radio, and I was probably muttering something about the fact that I had no idea how long it would take for the radio to eventually die, when Villarreal stopped me and said, "Perhaps you weren't paying attention, so listen to me very closely this time - we can't fix it, but if it doesn't work then we can replace it."

And suddenly - the light bulb turned on.

I blissfully carried the Turkey 30 back to our platoon office in the 511th building and announced to everyone, "Gentlemen, this radio has to die - today." So we spent the next hour or so having a contest to see who could throw the Turkey 30 the furthest from the 2nd-story window where our platoon office was located. After everyone had made their share of attempts at breaking the previous distance record, we declared the contest winners with the usual pomp and circumstance that is called for in such occasions - which means that several people were undoubtedly punched a few times before heading back to work.

Once that was taken care of, I packed up the Turkey 30 and strolled back to the C&E office, where I announced to Villarreal that, "For some reason my Turkey 30 has stopped working." Villarreal didn't blink as he overlooked the massive dents and broken glass and replied, "Well, we'll just have to order you a replacement."

It's times like that when it's great to have friends in the right places. Smile

IIS: Notes on Server-Side Includes (SSI) Syntax (KB 203064 Revisited)

Many years ago I wrote Microsoft KB article 203064 about using Server-Side-Include (SSI) files with IIS 4 and IIS 5, but that KB has long since vanished from Microsoft's support website because it was never updated for IIS 6 or IIS 7. I eventually turned the information from that KB article into a blog post, but that being said, I still see questions about SSI showing up in the IIS forums every once in a while. There was a great deal of useful information in that KB article about general SSI syntax and several practical examples for SSI directives, so I thought that it would make a good blog post if I updated the information from that KB for later versions of IIS.


SUMMARY

This blog post details some features that are available in the Microsoft implementation of Server-Side Include (SSI) files for Internet Information Server (IIS) and provides general syntax and examples for SSI directives.


APPLIES TO

  • Microsoft Internet Information Services 7.5
  • Microsoft Internet Information Services 7.0
  • Microsoft Internet Information Services 6.0
  • Microsoft Internet Information Services 5.0
  • Microsoft Internet Information Server 4.0

MORE INFORMATION

SSI files are most commonly used with IIS to allow content authors to include the contents of one file inside another file, allowing the easy creation of script libraries or page headers and footers to standardize the look and feel of your web content. SSI consists of very simple commands that are contained within HTML comment tokens, and are limited in functionality. Higher-level programming languages like ASP, ASP.NET, PHP, etc. make the need for SSI considerably less necessary than in previous years. In addition, programming features such as ASP.NET's Master Pages and Dynamic Web Template (DWT) files that are used by Dreamweaver, Expression Web, and FrontPage have replaced much of the need for SSI. Because of this, SSI is an outdated technology by today's standards. With that in mind, web developers are highly encouraged to migrate their SSI content to another technology, such as ASP.NET or PHP.

SSI Implementation Details

SSI files are mapped by file extension to a preprocessor or handler dynamic-link library (DLL), in the same way that file like ASP, ASP.NET, PHP, etc. are mapped to their requisite handlers. In the case of SSI, the specific handler is ssiinc.dll for IIS 4 through IIS 6 and iis_ssi.dll for IIS 7. SSI files on Windows are often named with .stm file extensions, although extensions of .shtm and .shtml are also supported.

Changes Between IIS Versions

  • SSI is not enabled by default on IIS 6. To enable SSI on IIS 6, set the status for the Server Side Includes web service extension to Allowed in the Internet Information Services (IIS) Manager.
  • SSI is not installed by default on IIS 7. To install SSI on IIS 7, see the Server Side Include <serverSideInclude> topic.
  • The cmd directive for #exec is disabled by default in IIS 5 and IIS 6. To enable the cmd directive, see Microsoft KB article 233969.
  • The cmd directive for #exec is now disabled for SSI files in IIS 7; you can only use the cgi directive.

General SSI Syntax

SSI is employed by the use of special preprocessing directives in SSI documents that are contained within HTML comment tokens; these directives are parsed by the SSI DLL and processed into HTML that is returned to a web client. All SSI directives take the following general form:

<!--#<DIRECTIVE> [<PARAMETER> = <VALUE>]-->

IIS supports a small set of SSI directives, and each directive has different parameters that configure the output for the directive. Other web servers may support a different set of SSI directives and parameters, so SSI files are not 100% compatible across different technologies.

Supported Directives

The following directives are supported in the IIS implementation of SSI:

  • #config - Configures how variables and commands are displayed.
    • The general syntax for the #config directive is as follows:
      <!-- #CONFIG <ERRMSG/TIMEFMT/SIZEFMT>="<format>" -->
    • The following is an example of a simple page that uses the #config directive:
      <html>
      <body>
      <!-- #CONFIG TIMEFMT="%m/%d/%y" -->
      <p>Today's Date = <!--#ECHO VAR = "DATE_LOCAL" --></p>
      <!-- #CONFIG TIMEFMT="%A, %B %d, %Y" -->
      <p>Today's Date = <!--#ECHO VAR = "DATE_LOCAL" --></p>
      </body>
      </html>
    • Note: See the Parameter Values for the #config Directive section later in this blog for more information about configuring dates with the #config directive.
  • #echo - Inserts the value of various Common Gateway Interface (CGI) server variables.
    • The general syntax for the #echo directive is as follows:
      <!--#ECHO VAR = "<CGI_VARIABLE_NAME>"-->
    • The following is an example of a simple page that uses the #echo directive:
      <html>
      <body>
      <p>Server Name = <!--#ECHO VAR = "SERVER_NAME"--></p>
      <p>Date = <!--#ECHO VAR = "DATE_LOCAL" --></p>
      <p>Page URL = <!--#ECHO VAR = "URL" --></p>
      </body>
      </html>
    • For a list of  supported CGI server variables, see IIS Server Variables.
  • #exec - Executes CGI or Internet Server API (ISAPI) command scripts and inserts output into an HTML document.
    • The general syntax for the #exec directive is as follows:
      <!-- #EXEC <CGI/CMD>="<command>" -->
    • The following is an example of a simple page that uses the #exec directive:
      <html>
      <body>
      <p>Root Directory of C:</p>
      <pre><!--#EXEC CGI = "/cgi-bin/HelloWorld.exe" --></pre>
      </body>
      </html>
    • Notes:
      • The CMD command for the #exec directive is disabled by default on IIS 5 and IIS 6. For more information, see the following Microsoft Knowledge Base article:

        233969 SSIEnableCmdDirective is set to FALSE by default

      • The CMD command for the #exec directive is was removed from IIS 7. For more information, see the following Microsoft Knowledge Base article:

        Server Side Include <serverSideInclude>

  • #flastmod - Retrieves the last modification time of a specified file.
    • The general syntax for the #flastmod directive is as follows:
      <!--#FLASTMOD <FILE/VIRTUAL> = "filename.ext"-->
    • The following is an example of a simple page that uses the #flastmod and #config directives:
      <html>
      <body>
      <!-- #CONFIG TIMEFMT="%m/%d/%y" -->
      <p>Modified Date = <!--#FLASTMOD FILE="filename.ext"--></p>
      <!-- #CONFIG TIMEFMT="%B %d, %Y" -->
      <p>Modified Date = <!--#FLASTMOD FILE="filename.ext"--></p>
      </body>
      </html>
  • #fsize - Retrieves the size of a specified file.
    • The general syntax for the #fsize directive is as follows:
      <!--#FSIZE <FILE/VIRTUAL> = "filename.ext"-->
    • The following is an example of a simple page that uses the #fsize and #config directives:
      <html>
      <body>
      <!-- #CONFIG SIZEFMT="BYTES" -->
      <p>File Size = <!--#FSIZE FILE="filename.ext"--> bytes</p>
      <!-- #CONFIG SIZEFMT="ABBREV" -->
      <p>File Size = <!--#FSIZE FILE="filename.ext"--> KB</p>
      </body>
      </html>
  • #include - Includes the contents of one specified file inside another.
    • The general syntax for the #include directive is as follows:
      <!--#INCLUDE <FILE/VIRTUAL> = "filename.ext"-->
    • The following is an example of a simple page that uses the #include directive:
      <html>
      <body>
      <!--#INCLUDE FILE = "header.inc"-->
      <p>Hello World!</p>
      <!--#INCLUDE VIRTUAL = "/includes/footer.inc"-->
      </body>
      </html>
    • Note: See the More Information on File and Virtual Syntax section later in this blog for more information about using file versus virtual values.

Parameter Values for the #config Directive

The #config directive supports a large array of possible parameter values, which are listed in the following table. Note: All of these values are case-sensitive.

ValueDescriptionExample
%A Full Weekday Name Tuesday
%a Short Weekday Name Tue
%B Full Month Name December
%b Short Month Name Dec
%c Full Date & Time 12/28/10 19:52:19
%d Day of Month as a Number 28
%H Hours as a Number on a 24-Hour Clock 19
%I Hours as a Number on a 12-Hour Clock 07
%j Julian Date (Offset from Start of Year) 362
%M Minutes as a Number 52
%m Month as a Number 12
%p AM or PM Indicator PM
%S Seconds as a Number 19
%U Week Number (Offset from Start of Year) 52
%W Week Number (Offset from Start of Year) 52
%w Day of the Week as a Number 2
%X Short Time 19:52:19
%x Short Date 12/28/10
%Y Four-Digit Year as a Number 2010
%y Two-Digit Year as a Number 10
%Z Time Zone Name Pacific Standard Time
%z Time Zone Name Pacific Standard Time

Note: The following Windows Script Host (WSH) code will create a sample SSI page that you can use to test the parameter values for the #config directive:

Option Explicit
Dim objFSO, objFile, intCount
Set objFSO = WScript.CreateObject("Scripting.Filesystemobject")
Set objFile = objFSO.CreateTextFile("ssitest.stm")
objFile.WriteLine("<html>")
objFile.WriteLine("<body>")
For intCount = Asc("A") To Asc("Z")
objFile.WriteLine("<!-- #CONFIG TIMEFMT=""%" & _
UCase(Chr(intCount)) & """ --><p>%" & _
UCase(Chr(intCount)) & _
" = <!--#ECHO VAR = ""DATE_LOCAL"" --></p>")
objFile.WriteLine("<!-- #CONFIG TIMEFMT=""%" & _
LCase(Chr(intCount)) & """ --><p>%" & _
LCase(Chr(intCount)) & _
" = <!--#ECHO VAR = ""DATE_LOCAL"" --></p>")
Next
objFile.WriteLine("</body>")
objFile.WriteLine("</html>")

More Information on File and Virtual Syntax

SSI directives that use file paths can reference files by using a file or virtual path.

  • The file element is used with files that are relative to the folder of the current document. The following example includes a file in the current folder:
    <!--#include file="myfile.txt"-->
  • The virtual element represents paths that are relative to the base folder of the Web server. The following example includes a file in the /scripts virtual folder:
    <!--#include virtual="/scripts/myfile.txt"-->

REFERENCES

For additional information on using SSI with IIS, click the following article numbers to view the articles in the Microsoft Knowledge Base:

  • 169996 To run an ISAPI DLL with #exec, use the CGI statement
  • 172024 INFO: Server Side Include Directives Are Not Processed by ASP
  • 195291 How to disable #exec in Server-Side Include files
  • 289496 Error Messages Appear and Access Violations Occur After You Upload SSI ASPs in IIS 5.0
  • 299982 How to create server-side include files to package ASP scripts
  • 308176 BUG: SSI #EXEC CMD Directive Does Not Work in IIS 5.1
  • 318176 SSI Output Disappears After You Apply Security Patches
  • 954754 Mappings for server-side include (SSI) directives do not work after you upgrade from IIS 6.0 to IIS 7.0

For more Microsoft Knowledge Base articles about using SSI with IIS, click here.


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

100 Greatest Guitarists of All Time? Not Even Close.

There was a time long ago in a galaxy far, far away where Rolling Stone Magazine (RSM) had an ounce or two of actual journalistic and editorial credibility. Sadly, that time and place is long gone. Each time RSM puts out another list of the "100 Greatest This" or "50 Greatest That," RSM continues to show just how out of date and out of touch its editors really are.

This leads me to my current rant, which is the following article by RSM:

100 Greatest Guitarists of All Time
http://www.rollingstone.com/music/lists/100-greatest-guitarists-of-all-time-19691231

I realize that these types of lists are highly subjective, and as such no single person will ever be 100% happy with the results - with the notable exception of the guy that made the list. But just the same, here's how I would measure any guitarist's legacy - I use the TOAD elements to gauge their level of impact:

  • Talent
    (And by this I mean technical prowess on the guitar; songwriting skills and vocal talent do not matter here.)
  • Originality
    (Guitarists that make a career out of sounding like some other guitarist aren't worth much in my book.)
  • Affect on other guitar players
    (What influence does this guitar player have on other guitar players?)
  • Durability in the music industry
    (Even a one-hit wonder can still impact future generations, while other guitar players might have an entire catalog of utterly forgettable music.)

With this in mind, I took a long look at the RSM list, and it's really quite pathetic. Most of the guitarists in their list simply don't belong on anybody's list of guitar greats, while many others are badly slighted or given way more credit than they are due.

Here's a few of my thoughts on the top ten, in the order that they appear on the list:

  1. Jimi Hendix:
    I'd have to agree with RSM, more or less. Whenever you create a list with all of the guitarists who have had significant talent, originality, and influence on other guitar players - Hendrix has to be in the top 10. I may not like everything that he did, and he may have acted like an idiot when he was offstage, but few guitarists have had Jimi's level of direct or indirect influence on future generations of guitarists.
  2. Duane Allman:
    You have got to be kidding me. I like the Allman Brothers, and Duane may certainly belong in the top 100, but he should never he be at #2. Sure, Duane was a skilled guitar player, but few people in the past two decades (1990 through 2010) pay much attention, so Affect and Durability are moot.
  3. BB King:
    Mr. King always belongs in a top 100 list; good call. Maybe not always in the top 10, but certainly in the top 100.
  4. Eric Clapton:
    I would more or less agree with a top 10 rank - for sheer volume of work, guitar skills, influence, etc. Clapton always deserves to be on anyone's top 100 list.
  5. Robert Johnson:
    RJ definitely had chops, but Johnson has influenced more guitar players indirectly than directly; his influence is there, but typically as someone who influenced someone else who influenced someone else, etc. I would put him in a top 100 list, but not in the top 10.
  6. Chuck Berry:
    One of the first real showmen on the guitar, Chuck has all of the TOAD elements, and several of his signature riffs are copied to this day. I would always put Chuck in a top 100 list, but perhaps not in the top 10.
  7. Stevie Ray Vaughn:
    Stevie had all four TOAD elements and plenty to spare. As 80's-era guitarists kept branching off into neo-classical styles, Stevie kept mercilessly stomping everyone into the ground with killer blues chops. I would always put Stevie in a top 100 list, if not in the top 10.
  8. Ry Cooder:
    RC is a lot like Duane Allman - a lot of guitar players from the past twenty years ask, "Who's Roy Cooper?" [sic] Ry definitely has chops and probably deserves to be in anyone's top 100 list, but he just doesn't have the lasting impact to belong in anyone's top 10 list. (With the notable exception of lists that are created by Ry Cooder fans.)
  9. Jimmy Page:
    I'd have to more or less agree. All too often I see Page at #1 on these types of lists, and I would never put him there. But Page always belongs in the top 10 for the sheer variety and volume of work, not to mention his influence on other guitar players. Even though it has long since been proven that Zep ripped off a lot of other artists for many of their most significant works, Page still gets kudos from me for his arrangements of other people's songs.
  10. Keith Richards:
    Three words: No Freaking Way. I'm sorry to all of you Rolling Stones fans out there, but Keith just does not belong in anyone's top 10 list - he doesn't have the chops, or the originality, or the influence on other guitar players. Personally, I wouldn't put Keith in a top 100 list if it meant leaving out the scores of guitar players that didn't make the RSM list.

That wraps up my tirade for the top ten, so here are some assorted thoughts for the rest of the list:

  • Kurt Cobain (#11):
    I live in Seattle where KC is still worshipped as the prophet of angry youth and misplaced rage. That being said, no one can argue the point that Cobain had a tremendous affect on other guitarists in his age group as one of the heralds for the emerging grunge invasion. The trouble is - Kurt was attempting to distance himself from the blazing speed metal guitar gods of the 1980's, so Kurt made his claim to fame by being bad at his instrument, somewhat like members of the punk phase did back in the 1970's. So when you look at the TOAD elements:
    • Talent - Kurt was only a so-so guitarist
    • Originality - Kurt was definitely original (although I would go out of my way to not sound like him; for example - by tuning my guitar)
    • Affect - Kurt definitely influenced other guitarists (for better or for worse)
    • Durability - only time will tell
    So in the end, Kurt might deserve a place in a top 100 list, but certainly not at #11. (Maybe at #100.)
  • Dick Dale (#31):
    Yup - Mr. Dale defined surf guitar back in the 1960's. Good call.
  • John McLaughlin (#49):
    I have no arguments with McLaughlin's inclusion - but if you're going to include one jazz player, then where are the others? Where's Al Di Meola? Pat Metheny? Joe Pass? Allan Holdsworth?
  • Ike Turner (#61):
    No way. Never. Nope. Nada. Ike doesn't belong in a top 100 list. Not for what he did to Tina, but simply because he doesn't really measure on the TOAD scale as a guitarist.
  • Vernon Reid (#61):
    Always an underrated artist, it was good to see Vernon on this list.
  • Eddie Van Halen (#70):
    Like him or hate him - Eddie Van Halen defined rock guitar for the 1980's, inasmuch or to an even greater level than Hendrix did for the 1970's. No guitar player of the 1980's was more copied and no rock group name was more immediately recognizable in the 1980's than Van Halen - period. Even if you didn't listen to rock music you still knew who Van Halen was. Eddie has a solid grasp on all of the TOAD elements (with plenty of room to spare), so to see him at #70 is just plain stupid.
  • Joni Mitchell (#72):
    This launches a weird dilemma - Joni doesn't have any chops where great guitar players are concerned, but she is a very skilled singer/songwriter that has all of the TOAD elements if you are willing to look the other way for her technical chops on the guitar. But if you do so, then you need to add Jim Croce, Paul McCartney, Neil Young, and a whole host of other singer/songwriters that may not have had killer guitar skills but have everything else that it takes to be an original and durable artist with plenty of influence on future generations. Personally, I'd rather drop Joni and everyone else that I just mentioned from any top 100 guitarists list, and I'd drop George Harrison (#21) from the list at the same time.
  • David Gilmour (#82):
    Gilmour definitely needed to be on this list, but #82 is probably too low on the list. David's impact on rock guitar is considerably more valuable than the contributions made by the endless barrage of average guitarists that were placed higher in the list. And the fact that David is lower on the list than Joni Mitchell (#72) is ridiculous.
  • Joan Jett (#87):
    In the Runaways it was Lita Ford doing all the dangerous guitar, and in the Blackhearts it was Eric Ambel or Ricky Byrd on guitar during their heyday back in the 1980's. While Joan's music has something of lasting durability, she just doesn't have it where it counts as a guitar player - she doesn't have the chops, or the originality, or any level of influence on other guitar players.

So who got missed? A lot of truly great guitarists. Here are just a few:

  • Joe Satriani:
    The fact that Joe didn't make this list shows just how out of touch the idiots people that put this list together really are. Anyone that knows anything about guitar knows that Joe belongs on any top 100 guitarists list - and usually in the top 10.
  • Ted Nugent:
    The fact that Uncle Ted didn't make this list is further proof that the people who write for RSM are on drugs. When Ted doesn't make the list and Duane Allman gets a #2 slot even though Ted's guitar could single-handedly track Duane through five Midwestern states in a blizzard, then capture Duane and skin him before his heart stops beating is ample proof that this list's priorities are seriously in question.
  • Steve Vai:
    Steve's music is way too weird for me, but look at his credits: Frank Zappa's band, Alcatrazz (replacing Yngwie Malmsteen), David Lee Roth's band (more or less replacing Eddie Van Halen), Whitesnake (replacing both Vivian Campbell and Adrian Vandenberg), and a recurring slot on the G3 tour. Vai has a solid grasp of all the TOAD elements - dropping Vai from this list is ridiculous.
  • Eric Johnson:
    Eric gets nominated for Grammy awards every few years because - let's face it - he's a really talented guitarist with boatloads of originality. The fact that Eric was dissed on RSM's list is a travesty.
  • Prince:
    Personally, I can't stand Prince. He's a pompous idiot and his music makes me want to hurl. But I cannot argue the fact that he has all of the TOAD elements, even if I don't like him.
  • Yngwie Malmsteen:
    Yngwie is probably the most arrogant son-of-a-gun on the planet, but it's undeniable that he has Talent, Originality, and Affect elements to spare, even if Durability remains to be seen. But it's inescapable that he was one of the biggest heralds of the neo-classical rock guitar genre, for better or worse.
  • Alex Lifeson:
    Since everyone knows that RSM hates Rush, it's easy to understand why Alex didn't make this list. But come on people, whether you like Rush or not is irrelevant here - Alex has put out more music with greater originality than probably 90% of the guitarists that made the list. And he did so by not ripping off other artists like Jimmy Page (#9) and George Harrison (#21) did.
  • Al Di Meola:
    The omission of countless scores of great Jazz guitarists from this list is bad enough, but leaving out Al Di Meola, who is probably one of the greatest fusion guitarists ever, shows that this list's creators just don't get it.
  • Kerry Livgren:
    The music of Kansas has an incredible legacy - and generations of future guitarists will still be trying to master Carry On Wayward Son or Dust In The Wind, even if it's just on the latest version of Guitar Hero. All of that music is thanks to one ingenious and soft-spoken guitarist from Kansas named Kerry Livgren.
  • Steve Morse:
    Besides the fact that Steve Morse is probably one of the most talented guitarists in history, he's also been in the Dixie Dregs, Kansas (replacing Kerry Livgren), and Deep Purple (replacing Ritchie Blackmore).

I am, of course, leaving out the incredible number of great classical, fingerstyle, and country guitar players; people like Chet Atkins, Andres Segovia, Leo Kottke, Julian Bream, Doc Watson, Christopher Parkening, etc. Each of these guitarists have talent, originality, influence, and durability way beyond most of the guitar players that made the list. Leaving them out is just as dim-witted as the omission of the other guitarists that I had already mentioned.

So there you have it - Rolling Stone Magazine put out another worthless list, and once again they demonstrated that their editorial staff is so out of touch with musical reality that their journalistic credibility is probably beyond reconciliation with their readers. Perhaps someone should explain to them what a guitar is and how it's played, and then build on that foundation until these idiots people understand what it means to be a truly great guitarist.

Disabling Local Loopback Checks on Web Servers that Run IIS

I've run into this situation more times that I can count: I set up a new web server and no matter what I do, I cannot log into websites on the server that require authentication while I am browsing to them from the console. I used to pull my hair out over this problem until I discovered the problem is in the Windows Local Security Authority (LSA) and it can be easily remedied.

  1. Open your registry editor by going to Start –> Run and enter regedit and click OK.
  2. Go to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa in the registry editor.
  3. Right-click Lsa, click on New and select DWORD value.
  4. Enter DisableLoopbackCheck and press Enter.
  5. Right-click DisableloopbackCheck and select Modify.
  6. In the Value data box, enter 1 and click OK.
  7. Reboot your server.

Several years later someone wrote the following KB article that includes this fix with a description of the problem, as well as an alternate workaround:

http://support.microsoft.com/kb/896861

HTH

Adding Windows Phone 7 Support to BlogEngine.NET

I love BlogEngine.NET, and I love my Windows Phone 7 mobile phone, so it goes without saying that I would want the two technologies to work together. I'm currently using BlogEngine.NET 1.6.1, but Windows Phone 7 is not supported by default. That being said, it's really easy to add support for Windows Phone 7 by modifying your BlogEngine.NET settings. To do so, open your Web.config file and locate the following section:

<appSettings>
<add key="BlogEngine.FileExtension" value=".aspx" />
<!-- You can e.g. use "~/blog/" if BlogEngine.NET is not located in the root of the application -->
<add key="BlogEngine.VirtualPath" value="~/" />
<!-- The regex used to identify mobile devices so a different theme can be shown -->
<add key="BlogEngine.MobileDevices" value="(nokia|sonyericsson|blackberry|samsung|sec\-|windows ce|motorola|mot\-|up.b|midp\-)" />
<!-- The name of the role with administrator permissions -->
<add key="BlogEngine.AdminRole" value="Administrators" />
<!--This value is to provide an alterantive location for storing data.-->
<add key="StorageLocation" value="~/App_Data/" />
<!--A comma separated list of script names to hard minify. It's case-sensitive. -->
<add key="BlogEngine.HardMinify" value="blog.js,widget.js,WebResource.axd" />
</appSettings>

The line that you need to modify is the BlogEngine.MobileDevices line, and all that you need to do is add iemobile to the list. When you finish, it should look like the following:

<add key="BlogEngine.MobileDevices"
  value="(iemobile|nokia|sonyericsson|blackberry|samsung|sec\-|windows ce|motorola|mot\-|up.b|midp\-)" />

You could also add support for Apple products by using the following syntax:

<add key="BlogEngine.MobileDevices"
  value="(iemobile|iphone|ipod|nokia|sonyericsson|blackberry|samsung|sec\-|windows ce|motorola|mot\-|up.b|midp\-)" />

That's all there is to it. ;-]


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

Who is this Santa, Really?

I spent the weekend in Leavenworth, Washington, with my wife, our kids, and my future son-in-law. It was a fun-filled weekend of bright lights, snow-capped mountains, hot apple cider, chestnuts roasting on open fires, and Christmas carols sung by choirs. But the more that I listened to Christmas carols, the more I started to get an interesting picture of Santa Claus.

Like many other people, I grew up with the concept of Santa Claus as a kindly old gentleman that brought gifts at Christmas to all the good children of the world. Santa was like the ultimate grandfather - with a bright red suit, a cheery disposition, a full beard of whiskers, and a sleigh that flew through the air by magic reindeer.

But this year the words to some of the traditional Christmas carols began to really sink in, and I started to see a different Santa. A darker Santa. A scary Santa. Let me give you just a few examples:

  • "Santa Claus is Coming to Town" - Think about it: "He sees you when you're sleeping, he knows when you're awake..." Wait - Santa is IN MY ROOM and WATCHING ME SLEEP? Holy cow - I never realized that Santa was stalking me. I don't think that I can match eyes with him in the mall from now own; it's just too creepy.
  • "I Saw Mommy Kissing Santa Claus" - So Santa is breaking up marriages now, eh? Does DADDY know that Santa is spending a little too much time under the mistletoe with MOMMY? How does Mrs. Claus feel about this?
  • "Santa Baby" - That's obviously not MOMMY that's singing those lyrics, so Santa must be two-timing mommy with someone else. And she sounds well-taken-care-of. I wonder how many pretend Mrs. Clauses Santa has scattered around the globe.
  • "Rudolph the Red-Nosed Reindeer" - All those years of prejudice and abuse that Rudolph had to endure, and what did Santa do about it? Nothing. Santa ignored the whole affair, until a foggy Christmas Eve came around, and suddenly he has a use for Rudolph. That poor abused reindeer is nothing but an opportunistic tool to Santa.

My childhood illusion is finally shattered - this Christmas Eve Santa isn't filling STOCKINGS hung by the chimney with care, he's STALKING you by the chimney with care. That's why he's sneaking into your house like a burglar, and why he has so many aliases around the globe - even James Bond doesn't use as many pseudonyms: Saint Nicholas, Father Christmas, Kris Kringle, Grandfather Frost, Yule Man, Sinterklaas, Дед Мороз, etc.

So this Christmas Eve I suggest that you heed the wise advice found in the "Here Comes Santa Claus" Christmas carol: "Jump in bed and cover up your head, Because Santa Claus comes tonight."

In Honor of Veteran's Day

The Soldier

It is the soldier, not the reporter,
who has given us freedom of the press.

It is the soldier, not the poet,
who has given us freedom of speech.

It is the soldier, not the campus organizer,
who has given us the freedom to demonstrate.

It is the soldier, not the lawyer,
who has given us the right to a fair trial.

It is the soldier,
who salutes the flag,
who serves under the flag,
and whose coffin is draped by the flag,
who allows the protester to burn the flag. 

--By Father Dennis Edward O'Brien, USMC

Misadventures with Foreign Languages

I served in the Army for 8 years as a Russian translator. When I was still in Russian school, we were required to attend "conversation" class, where a group of students would sit down and discuss various topics with one of the instructors.

One day the instructor asked me what I had been doing the previous evening, and I said that I had played soccer. She asked what position I played, and since I didn't know the Russian noun for a goal keeper, I took a chance and replied in Russian that "I played goalie." She looked surprised, and asked if I was often goalie when playing soccer, and I replied yes - I usually play goalie. After that we chatted back and forth about how I preferred to play goalie, why I preferred to play goalie, etc. This conversation continued for about a minute, when she switched to English and informed me that in Russian "goalie" (голый) is the adjective for "naked".

So I had spent the last part of the conversation waxing poetic about my preference for playing soccer... well... you know. ;-)

Uh, yeah - I meant to fix that...

One of my coworkers (Mike Pope) sent me the link to a great blog post by Raymond Chen that was titled "Don't forget to replace your placeholder bitmaps with real bitmaps". Raymond's blog was a good story, but he referenced another great blog post titled "We Burned the Poop", and let's be honest - who can resist reading a blog post with a great title like that? (Note: I won't spoil the impact of that blog - you should read it first.)

But reading those two blog posts made me think back about the various code blunders that I've made over the years, which have [thankfully] never been as bad as the stories in those blog posts.

But one mistake that I made which I have never been able to live down is when I wrote the MetaEdit 2.x utility for editing the IIS metabase.

Every day I was making a huge number of changes to the MetaEdit code, and it was getting hard to keep track of everything that I needed to finish. Of course, there are several ways to track work items, and the preferred method is to keep track of everything in a bug database. But I also like to flag sections of code with comments that say things like "TODO" or "BUGBUG", that makes it easier to do a search on the code before inadvertently checking it in with something that needed to be completed.

As the deadline was rapidly approaching for me to check in the final build of MetaEdit for the Windows Server 2000 Resource Kit, I decided to add a dialog box that MetaEdit would display if you were using it with a version of IIS that was later than IIS 5.0, which we were shipping with Windows Server 2000. I wanted to make sure that MetaEdit would warn users that they might have problems using MetaEdit with a later version of IIS since I didn't know how the metabase would work in the future, or if we would deprecate the metabase like we eventually did in Windows Server 2008. I was obviously distracted for some reason and I didn't finish that section of code, but I hadn't added a comment with the text "TODO" or "BUGBUG", so I dutifully checked the code into the Resource Kit database and I didn't think anything about it.

At least I didn't think about it until we released Windows Server 2003.

If you'll recall, IIS 6.0 was shipped with Windows Server 2003, which meant that anyone who wanted to use MetaEdit in order to modify their metabase was rudely greeted with the following nonsensical and ultimately useless dialog box:

Suddenly I was receiving emails from all over the place asking me what the heck that dialog box meant. The text was supposed to have a generic warning about damaging your metabase with some sort of "use-at-your-own-risk" verbiage and a set of Yes/No buttons that would allow you to opt out of opening the application.

(Deep Sigh)

Eventually Henrik Walther wrote KB 555081 that informed users what to do, but still - I should have fixed that. Darn.

My apologies to everyone that ever saw that dialog box. ;-]


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