Adventures with the Easter Vampire

A few years ago I wrote a blog titled "Adventures with the Tooth Werewolf", where I wrote about how I rose my children with a belief in the Tooth Werewolf instead of the Tooth Fairy. In that same blog I also briefly mentioned that I had come up with the Easter Vampire instead of the Easter Bunny. (I'll bet you wish your parents had been this cool, right?)

That being said, one of my daughters sent me the following video, which she appropriately-labeled, "The Easter Vampire?"

Smile

Atheist Prayer Warriors

Did you ever notice how many atheists are actually the fiercest prayer warriors?

Every time they declare, "GD this!" or "GD that!," they are - in fact - calling on a God whom they claim does not exist to intervene on their behalf.

The tragic part about this fact is that in so doing they are praying more times per day than most Christians.

Recovering a Mirror Set on Windows 10

I run a mirror on the C drive for one of my Windows 10 systems, and a few nights ago that system wouldn't boot; I kept getting errors like "VOLMGRX internal error" and "A recently serviced boot binary is corrupt". I tried a few of the automatic Windows 10 recovery options while my system was rebooting, but nothing seemed to work. Skipping past the steps it took to get there, I also tried using the "bootrec /fixmbr" and "bootrec /fixboot" commands, with no luck, either.

However, since I was using a mirror set for the primary drive, I was able to do the following:

When I rebooted my system, I chose Troubleshoot for my startup option.

windows_10_recover_mirror_set_1

Step 2 - On the Troubleshoot screen, I chose Advanced options.

windows_10_recover_mirror_set_2

On the Advanced options screen, I chose Command prompt.

windows_10_recover_mirror_set_3

When the Command prompt opened, I typed the following commands:

diskpart
list volume

This returned a table like the following illustration, and I looked for the volume which showed status as "Failed Rd":

Volume ### Ltr Label Fs Type Size Status Info
---------- --- ----------- ----- ---------- ------- --------- --------
Volume 0 C C-DRIVE NTFS Partition 1848 GB Failed Rd Boot
Volume 1 ESP FAT32 Partition 500 MB Healthy System  
Volume 2 WINRETOOLS NTFS Partition 454 MB Healthy Hidden  
Volume 3 Image NTFS Partition 12 GB Healthy Hidden  
Volume 4 DELLSUPPORT NTFS Partition 1087 MB Healthy Hidden  

Once I knew the volume that was having the issue, I was able to run the following commands to recover the mirror set:

select volume 0
recover

I knew that the recovery was going to take a long to complete, and I could have used "detail volume" command every few minutes to check the status, (which will show "Rebuild" in the status column). But the truth is - it was already way past midnight, so I simply went to sleep for the night. When I got up the following morning, everything was fine and I was able to reboot successfully.


FYI - The following article has all the information you need about using the Windows DiskPart command, although be forewarned - you can really screw up your system if you do something wrong.

DiskPart Command-Line Options

Running IIS Express on a Random Port

I have found myself using IIS Express for a bunch of web projects these days, and each of these projects is using different frameworks and different authoring systems. (Like Windows Notepad, which is still the one of the world's most-used code editors.)

Anyway, there are many times when I need multiple copies of IIS Express running at the same time on my development computer, and common sense would dictate that I would create a custom batch file for each website with the requisite parameters. To be honest, for a very long time that's exactly how I set things up; each development site got a custom batch file with the path to the content and a unique port specified. For example:

@echo off

iisexpress.exe /path:c:\inetpub\website1\wwwroot /port:8000

The trouble is, after a while I had so many batch files created that I could never remember which ports I had already used. However, if you don't specify a port, IIS Express will always fall back on the default port of 8080. What this means is, my first IIS Express command would work like the example shown below:

CMD> iisexpress.exe /path:c:\inetpub\website1\wwwroot

Copied template config file 'C:\Program Files\IIS Express\AppServer\applicationhost.config' to 'C:\Users\joecool\AppData\Local\Temp\iisexpress\applicationhost2018321181518842.config'
Updated configuration file 'C:\Users\joecool\AppData\Local\Temp\iisexpress\applicationhost2018321181518842.config' with given cmd line info.
Starting IIS Express ...
Successfully registered URL "http://localhost:8080/" for site "Development Web Site" application "/"
Registration completed
IIS Express is running.
Enter 'Q' to stop IIS Express

But my second IIS Express command would fail like the example shown below:

CMD> iisexpress.exe /path:c:\inetpub\website2\wwwroot
Copied template config file 'C:\Program Files\IIS Express\AppServer\applicationhost.config' to 'C:\Users\joecool\AppData\Local\Temp\iisexpress\applicationhost2018321181545562.config'
Updated configuration file 'C:\Users\joecool\AppData\Local\Temp\iisexpress\applicationhost2018321181545562.config' with given cmd line info.
Starting IIS Express ...
Failed to register URL "http://localhost:8080/" for site "Development Web Site" application "/". Error description: Cannot create a file when that file already exists. (0x800700b7)
Registration completed
Unable to start iisexpress.

Cannot create a file when that file already exists.
For more information about the error, run iisexpress.exe with the tracing switch enabled (/trace:error).

I began to think that I was going to need to keep a spreadsheet with all of my paths and ports listed in it, when I realized that what I really needed was a common, generic batch file that would suit my needs for all of my development websites - with no customization at all.

Here is the batch file that I wrote, which I called "IISEXPRESS-START.cmd", and I will explain what it does after the code listing:

@echo off

pushd "%~dp0"

setlocal enabledelayedexpansion

if exist "wwwroot" (
  if exist "%ProgramFiles%\IIS Express\iisexpress.exe" (
    set /a RNDPORT=8000 + %random% %%1000
    "%ProgramFiles%\IIS Express\iisexpress.exe" /path:"%~dp0wwwroot" /port:!RNDPORT!
  )
)

popd

Here's what the respective lines in the batch file are doing:

  1. Push the folder where the batch file is being run on the stack; this is a cool little hack that also allows running the batch file in a folder on a network share and still have it work.
  2. Enable delayed expansion of variables; this ensures that variables would work inside of conditional code blocks.
  3. Check to see if there is a subfolder named "wwwroot" under the batch file's path; this is optional, but it helps things run smoothly. (I'll explain more about that below.)
  4. Check to make sure that IIS Express is installed in the correct place
  5. Configure a local variable with a random port number between 8000 and 8999; you can see that it uses modulus division to force the random port into the desired range.
  6. Start IIS Express by passing the path to the child "wwwroot" folder and the random port number.

One last piece of explanation: I almost always use a "wwwroot" folder under each parent folder for a website, with the goal of managing most of the parts of each website in one place. With that in mind, I tend to create folder hierarchies like the following example:

  • C:
    • Production
      • Website1
        • wwwroot
      • Website2
        • ftproot
        • wwwroot
      • Website3
        • wwwdata
        • wwwroot
    • Staging
      • Website1
        • wwwroot
      • Website2
        • ftproot
        • wwwroot
      • Website3
        • wwwdata
        • wwwroot

Using this structure, I can drop the batch file listed in this blog into any of those Website1, Website2, Website3 folders and it will "just work."


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

Happy Pi Day!!!

In honor of "Pi Day" (3/14), here are the first 256 digits of Pi set to music... (which was achieved by taking the numbers in Pi and overlaying them on a C major scale).

At first I thought about overlaying the digits on a pentatonic scale to create a little more harmony, but it turns out that it wasn't necessary. (Of course, the bass line and drum parts add a lot, too.)

I also thought about doing something with a pentatonic scale, but as I said earlier it didn't appear to need it. I also thought using about some sort of timing extraction from the numbers in Pi instead of using 8th notes, but most of my experiments started to sound far too random and chaotic.

FWIW - I also did a version in 7/8 time, just 'cause... you know... RUSH.

Do you think that the Russians want war?

In response to Vladimir Putin's recent proclamation that Russia now has "Invincible Nuclear Weapons," someone posted a link to Dick Gaughan's 1983 song "Think Again:"

The problem with songs like Gaughan's is that they do a tremendous injustice to what was actually going on in the world when that song was written. At the time, there were a great deal of songs written to protest the Cold War and to encourage everyone to "give peace a chance." The problem with naive statements like "give peace a chance" is that many a conquered nation has wanted peace at all costs, but their desire for peace did not prevent their eventual destruction. Appeasement of Hitler prior to WWII is a perfect example: most of Europe did nothing as Hitler stormed through country after country because everyone else remembered WWI, and the rest of Europe would rather stand by and let a madman conquer the world than upset their personal peace.

Which brings us back to Gaughan's song and it's central question: "Do you think that the Russians want war?" The target of Gaughan's lyrics was the policymakers in the West, who have largely done nothing whenever madmen went to war, because the West typically seeks peace at all costs. The West wanted peace with Hitler, and peace with Stalin, and with Khrushchev, and with Brezhnev. The West may not have approved the actions of these madmen, but the West would much rather have peace than declare war on every psychopath who comes along. But here's the thing: even though the West wanted peace, the Russians - in the form of the Soviets - very clearly wanted war.

15 countries ceased to exist with autonomy in the name of Russian/Soviet war: Armenia, Azerbaijan, Belorussia, Estonia, Georgia, Kazakhstan, Kirghizia, Latvia, Lithuania, Moldavia, Tajikistan, Turkmenistan, and the Ukraine. These countries did not want war, but Russia gave them war anyway. As a result, these conquered territories became the 14 satellite republics of the Soviet Union. But let us not forget that Afghanistan also did not want war, yet the Russians/Soviets invaded anyway. Afghanistan was destined to become the 16th Soviet republic, until clandestine meddling from the United States helped turn that war in favor of the Afghanis, (and thereby bring about the collapse of the Soviet Union, but that's another story).

But it doesn't end there, because the Russians/Soviets also brought war to Albania, Bulgaria, Czechoslovakia, East Germany, Hungary, Poland, and Romania. These countries were conquered by the Russians/Soviets to serve as sacrificial "buffer states" in the event of hypothetical invasion from the West, (rather than becoming formal Soviet republics).

While Gaughan's lyrics pontificate about the 20 million people slaughtered by Nazi invasion, it does nothing to address the 30 million or so of their own countrymen killed by the peace-loving Russians/Soviets, nor does begin to account for all of millions of people slaughtered senselessly during the Russian/Soviet invasions of the countries previously mentioned, nor does it account for the hundreds of thousands of casualties incurred during the brutal suppressions carried out by the Russians/Soviets whenever one of those countries fought for their independence. (Nor do those numbers address the additional tens of millions of people slaughtered by the USSR's allies in the Far East and South/Central America; but let us refrain from digression and stick to Russia, shall we?)

People can claim that the "Average Russian" did not want war, and that all of these atrocities were caused by the actions and ideologies of their leaders. I must admit, there is undoubtedly a grain of truth to that perspective. But then again, you have to realize that millions of "Average Russians" actively participated in conquering of all of the countries that I have mentioned. Those countries wanted peace; Russia brought them war. As a result, those millions of "Average Russians" are no less guilty than the millions of "Average Germans" who brought the Nazi War Machine to peaceful Europe.

I have quoted this poem before in other contexts, so please forgive my repetition here; following WWII, the German pastor Martin Niemöller expressed the folly of "Average Germans" doing nothing about the Nazis when he wrote:

First they came for the Socialists, and I did not speak out -
because I was not a Socialist.
Then they came for the Trade Unionists, and I did not speak out -
Because I was not a Trade Unionist.
Then they came for the Jews, and I did not speak out -
Because I was not a Jew.
Then they came for me - and there was no one left to speak for me.

Niemöller's sentiments may not be a call to arms, but they certainly condemn the cowardice of those who do nothing while their fellow countrymen commit atrocities.

Gaughan's song attempts to lay the desire for war at the feet of the West's leaders because - as he put it - we didn't "like their political system." To restate what I have said earlier, no one liked Russia's political system. But the Russians/Soviets forced their political system on millions of innocent people through decades of violent bloodshed. Gaughan conveniently ignores all of that.

I have stated many times before that Russia is never more than one madman away from becoming the Soviet Union again, and we're seeing that come to fruition. Under Putin's leadership, Russia has once again annexed the Ukraine, and it has violently suppressed dissension in other former Soviet republics. And once again, the West has done nothing, because despite the flowery rhetoric of naive dreamers like Gaughan, the West still desires peace more than war. But Gaughan ignores all of that, too.

As I have mentioned all along, the West has almost always wanted peace; that much is clear from the staggering amount of reticence that it has shown whenever another madman has come along and started conquering its neighbors. The West attempted to intervene in the Far East, with disastrous results, and we have learned our lesson. As a result, the West typically does nothing now, because most people in the West believe in peace at all costs. But as the saying goes, "Peace is a fleeting fantasy, embraced by fools, signifying nothing." A desire for peace does not prevent war; at best it only delays the inevitable.

With that in mind, to answer Gaughan's question: even though the West wants peace, Russia has always wanted war.