“Click Here” Links are a Scourge of the Internet!

I love reading Ivan Levison’s newsletters. But I have to admit to a very visceral reaction when I see anyone advocating click here links or buttons (as he did in his December 2012 newsletter). I think they are a scourge of Internet usability because they require the user to read (and re-read) the text before the link to have any idea what the link leads to. Imagine if every link were done this way. You might get text like this:

To backup your files, click here. To view your files, click here. To delete your files, click here.

Compare the usability of that to this:

You can back up your files, view your files or delete your files.

The second option is better because:

  • It is more compact.
  • The links are more useful and much less ambiguous.
  • The links will improve SEO because they include relevant text.

Now, I understand the “imperative magic” of “click here” (probably from reading one of Ivan’s newsletters and other research I’ve seen). But that doesn’t mean we can’t try a little harder and be a little more creative (and effective) with our imperatives. There are plenty of free HTML button maker sites and other inexpensive dedicated button maker programs out there.

The take-away message for today… The Internet would be a better place with more Buy Now!, Read Results and Delete Files and fewer Click Here links and buttons.

My two cents. 🙂

How to send Ctrl+Alt+End to a Windows Remote Desktop Session

I recently was stymied when I needed to send the Ctrl+Alt+End keystroke to a Windows Server 2008 machine that I was remote desktopping to via Internet Explorer running on Windows 7 using VMWare Fusion on my MacBook Air running Mountain Lion. Phwew! That’s a mouthful.

The first problem is that there’s no End key on the Mac keyboard. VMWare can send Ctrl+Alt+Delete from a special menu, but that gets caught by Windows 7. I needed to reset my password on the server (or get locked out) and needed to use Ctrl+Alt+End. Here’s the magic Mac keyboard combination:

fn-ctrl-option-rightArrow

Works like a charm!

Lessons Learned Code Signing a Visual Studio 2008 .MSI Setup Project

I thought my mission was an easy one:

Code sign an existing MFC application (Metafile Companion) setup installer

I should have known better. 🙂 I was successful and it really isn’t that hard once you find out what to do. But there’s the rub – the web is full of options that end up being dead ends. Below are some of the lessons I learned.

Lesson 1: You really can pay $99 for a one-year signing certificate from K Software.

There are other more expensive Certificate Authorities (e.g. VeriSign and Comodo) that charge more than this. But the K Software certificate (issued by Comodo) seems to work just fine. I would recommend using either Firefox or Internet Explorer to place your order and later downloading your certificate so it is added “automagically” to the system certificate store. Also, follow their export instructions so you have a backup of your certificate.

Lesson 2: To see what certificates are on your system, run “certmgr.msc”. 

This is how you can be assured that your certificate was properly stored on your system.

Lesson 3: The MSDN article “How to: Sign Application and Deployment Manifests” doesn’t apply to older MFC / VC++ projects.

While this might work for newer C# projects, for my older MFC / VC++ application in Visual Studio 2008, it doesn’t. So don’t try to hard to find options that aren’t there.

Lesson 4: The SignCode utility is “obsolete”; use SignTool instead.

SignCode has a nice wizard mode, but it doesn’t show you a corresponding command line for the options you choose. SignTool is command line only, but is the current tool.

Lesson 5: Add a call to SignTool as the PostBuildEvent property for the Setup project.

Once you figure out all the options you need, adding the event is easy. Here’s what I used for my project:

signtool sign /a /v /d “Metafile Companion” /du http://www.CompanionSoftware.com/ /t http://timestamp.comodoca.com/authenticode “$(BuiltOuputPath)”

You can read the documentation for what the various options are. One time-saving thing is the “/a” option which automatically uses the “best” signing certificate it finds in the store. If you only have one, there this works like a charm. A while back, I had added a “self-signed” certificate to play with. I had to remove this (using CertMgr.msc) to get my purchased certificate to be the “best” one.

I hope these lessons help anyone else that might be trying to do something similar!