Switching OpenID providers through delegation

Back in the days, when I decided to join StackOverflow, I was forced to create an OpenID – because this is the way to login on StackOverflow.

I decided to use an independent OpenID provider, called myOpenID. I also set up OpenID delegation. This way I could use my own domain name as my OpenID. (OpenID uses URLs as user names, like http://manski.net.)

Now, myOpenID is shutting down on Feburary 1, 2014. Thus, I had to switch my OpenID provider.

Fortunately, OpenID delegation makes this easy – you just replace the two delegation <link> tags and you’re done.

Unfortunately, not all OpenID providers seem to support this. I tried Google (which should work according to this), but StackOverflow always wanted to create a new account for me. (May also be StackOverflow’s fault, I don’t know.)

Fortunately, StackOverflow provides its own OpenID service:

https://openid.stackexchange.com/

So I created a new OpenID there, replaced the <link> tags (details), done. Works like a charm.

Disable UAC in Windows 8

In Windows 8, Microsoft changed the UAC slider’s lowest setting from “Disable UAC” to “Hide UAC”.

So, even with the lowest setting programs will still not run with Administrator privileges (like in Windows 7).

Windows' "Run" dialog with UAC still active.
Windows’ "Run" dialog with UAC still active.

To disable UAC, execute this PowerShell script as Administrator (e.g. via powershell from an Admin Command Prompt):

Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System" -Name "EnableLUA" -Value "0"

After that restart and UAC is disabled.

Windows' "Run" dialog with UAC disabled.
Windows’ "Run" dialog with UAC disabled.

Notes:

  • Only do this, if you’re aware of the consequences. Disabling UAC may make the system less secure.
  • The Windows 8 Store can’t be used anymore if UAC is disabled. (You can, especially, no longer installed Windows 8.1.)
  • To reenable UAC, use -Value "1" in the command above.

Calculate return value for sort by int

Most programming languages (such as C#, Java, …) allow you to sort lists. Most of them also allow you to specify a sorting function so that you can customize the sort order. These functions usually take parameters a and b and define the return value as follows:

Return value if
less than zero a is less than b
equals zero a is equal to b
greater than zero a is greater than b

Usually you would do something like this (code in C#):

int Compare(int a, int b) {
  if (a < b) {
    return -1;
  }
  else if (a > b) {
    return 1;
  }
  else {
    return 0;
  }
}

However, when comparing int values, there’s a much quicker way to do this:

int Compare(int a, int b) {
  return a - b;
}

That’s it.

Note: Care should be taken if a and/or b can come close to int.MaxValue or int.MinValue. In this case the results may not be what one wants (like if a = int.MinValue and b = 1 then the result will be int.MaxValue which is wrong obviously).

Ping/Identify Computers By Computer Name In Windows

Some routers (like the Fritz!Box) provide DNS names for all computers in a network – based on the computer names.

For example, in my network I have a Windows computer called Beeblebrox and a Linux computer called Marvin. They can be reached by name through beeblebrox.fritz.box and marvin.fritz.box respectively.

When I’m on my Linux computer I can just type ping beeblebrox and will ping my Windows computer.

When I’m on my Windows computer on the other hand, this doesn’t work – at least not out of the box.

C:\Users\manski>ping marvin
Ping request could not find host marvin. Please check the name and try again.

To make this work, …

  1. go the Control Panel, then System.
  2. In the left sidebar click on Advanced system settings.
  3. The dialog “System Properties” will open. Choose the tab Computer Name and click on Change….
  4. The dialog “Computer Name/Domain Changes” will open. Here, click on More…
  5. Enter the DNS suffix in the box.
  6. Confirm all dialogs with “OK” and restart the computer afterwards.

set-domain-suffix.png

Now you can ping/identify any computer on the same network by using just its name:

C:\Users\manski>ping marvin

Pinging marvin.fritz.box [192.168.42.5] with 32 bytes of data:
Reply from 192.168.42.5: bytes=32 time=2ms TTL=64
Reply from 192.168.42.5: bytes=32 time=2ms TTL=64

Windows Setup, Boot Manager, And Multiple Disks

Although Windows Setup has evolved since the days of Windows 95, it sometimes is still a real pain in the ass.

Today, I spent the whole morning figuring out why Windows Setup always placed the Windows boot manager on a separate drive – and not on the drive I was installing Windows onto.

The “easiest” solution would be to unplug all other drives, install Windows, and then replug all drives. But since I’m a engineer I wanted to find out the real cause of the problem.

Turns out, the root problem is the BIOS’ boot order (a.k.a. boot sequence). A computer’s BIOS has a boot order list which basically defines from which device (hard disk, CD drive) to boot. If the BIOS can’t boot from the first device, it tries the second one, and so on.

The BIOS usually lets you define this order. Either all devices are in one big list, or each device type (CD drives, hard disks) has its own list.

Example of a boot order menu item in a BIOS

Now, when you install Windows, the setup asks the BIOS for this list. And no matter what you do, Windows Setup will always install the boot manager on the first hard disk in this boot order list.

In particular, the disk on which you want to install Windows has no influence on where the boot manager is being installed.

So, the only way to influence the location of the boot manager is to change to boot order in the BIOS.

Side note: New devices are usually added to the end of the boot order list. So if you have multiple hard drives and replace one (e.g. because the old one was broken or too small), the new drive may end up at the end of the list – and not at the position where the replaced drive was before; thus messing up the boot order.

Determining the Boot Manager Partition

So, how can one determine the location of where boot manager is installed?

From Windows Setup

Determining on which drive Windows Setup will install the boot manager onto is almost impossible from Windows Setup itself.

The only hint you get, is if:

  • your installation disk has no partitions (i.e. is empty) …
  • .. and then you can create a partition on this disk.

In this case Windows Setup will show you a dialog reading:

To ensure that all Windows features work correctly, Windows might create additional partitions for system files.

If this happens and you click on “OK”, Windows Setup will automatically create a partition called “System Reserved” where it’ll install the boot manager.

boot-manager-in-windows-setup.jpg

If this doesn’t happen the boot manager may or may not be installed in the correct location. If this is the case, you can only check the location after Windows has been installed.

From Windows

To determine the partition where the boot manager is installed, go to:

Control Panel > Administrative Tools > Computer Management > Disk Management

The partition where the boot manager is installed has the word System in its status.

sytem-partition.jpg