The Disambiguator (A KeePass Plugin)

Filed under Uncategorized


For the impatient crowd 🙂

  • Download The Disambiguator KeePass plugin here.
  • Unzip it and place the PLGX file in the KeePass “Plugins” folder, just like any other plugin.
  • Restart KeePass. You should see a “Compiling Plugins” notice and then KeePass should start normally.
  • In KeePass, click “Tools”, “Plugins” and verify that The Disambiguator is now in the list of loaded plugins.
  • Edit the AutoType entry for a credential set that has an ambiguous Window Title.
  • add “{exe:nameOfExecutable}” (without doublequotes) at the end of the WindowTitle. Replace nameOfExecutable with the filename of the Executable program file that the Target Window belongs to. In the case of Quicken, for instance, that would look like {exe:qw.exe}

Now open your target application and use AutoType as you normally would. If everything is set right, KeePass will now automatically select the appropriate credentials for the target window using both the Window Title and the application executable.


I’ve used the password manager KeePass for a very long time. Excellent, simple, clean install, low resource usage and fast.

Editing a Credential Set in KeePass

The AutoType support, while possibly not quite as simple as some full commercial packages, is quite flexible and has never let me down.

Well, almost never.

KeePass’s AutoType feature works by allowing the user to enter one or more “Window Titles”, which it then compares against the target window when you user presses the AutoType hotkey.

When only one configured Window Title matches the Window Title of the target window, KeePass automatically can choose that single set of credentials, and perform the autotype. It’s almost like magic!

Trouble Ahead

But, what happens when there are 2 or more credential sets that have the same Window Title?

For instance, both Quicken and Exodus request the user to login via a login screen with the Window Title “Enter Password”.

If you’re “responsible” with you passwords, and we all are as KeePass users (right?!), then you’re not using the same credentials (username and password) for two different applications. This means you likely have two different sets of credentials stored in KeePass: one for Quicken and one for Exodus. And you’ve setup AutoType for both.

But there’s the rub. Both sets of credentials have AutoType setup to key on the Window Title of “Enter Password”, as they must.

The KeePass Credential Chooser

Unfortunately, when you have, say, the Quicken Login window displayed and press the KeePass AutoType hotkey (normally Ctr-Alt-A), KeePass discovers 2 sets of credentials (and possibly more) that match. Because it can’t magically decide which to use, it pops up the Credential Chooser dialog so that you, the user, can make the choice.

This is all fine and good, but it can be a bit of a pain, and it forces the user to make a choice when the choice should be automatic.

Enter The Disambiguator

The problem here, of course, is disambiguation. Using the Window Title as the only “disambiguating” factor is ok most of the time, but, as the above example shows, it’s not always quite enough to completely identify a single specific credential set to use for autotype.

Alex Vallat has a very nice plugin for KeePass called WebAutoType which specifically allows users to configure matching URLs for autotype entries. This will almost always provide enough uniqueness to properly match a single credential set for Web Pages. But unfortunately, it does nothing for normal desktop apps like Quicken or Exodus.

That’s where The Disambiguator comes in.

to be continued

Automation Virtual Conference

Filed under Uncategorized

Ok. I’m not one to typically post notices Re: my employers, but I thought I might make the few readers I have, aware of an upcoming virtual conference that Worksoft is having on testing and robotic process automation on Oct 28.

Click here to learn more.

Troubles with Nuget v5.7

Filed under nuget
Tagged as

I’ve worked with Nuget for quite some time, both consuming published Nugets as well as creating Nugets to be published.

But I ran into a pretty vexing series of issues today, that, from what I can tell from the posts I found by Googling, might be affecting a lot of other users.

To begin with, I was running an older version of nuget.exe, ver 4.9. So, I dutifully updated to v5.7 and still had the same issues.

My first problem was this lovely message:

Illegal characters in path.
System.ArgumentException: Illegal characters in path.

After far far too much experimentation, I discovered that putting the project filename, the nuspec filename or the output directory filename in double quotes, was the problem.

In other words, this:

nuget pack ".\myapp.csproj" -Verbosity Detailed -OutputDirectory ".\bin\Release\"

won’t work. But this:

nuget pack .\myapp.csproj -Verbosity Detailed -OutputDirectory .\bin\Release\

works just fine.

Unfortunately, if your project’s path happens to contain spaces, you won’t be able to specify the path properly. I haven’t investigated any way around that.

But wait, there’s more!

That got me past the “Illegal characters in path” error, only to be greeted by this:

Authors is required.
Description is required.
System.Exception: Authors is required.
Description is required.

In my case, I was using a pretty standard nuspec file, something like this:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="" >

It turns out there were two issues here:

  1. Ignore the error message. It’s terrible because, first, the xml element is <authors>not <Authors> as the message implies. And second, the token is actually $author$ (singular), not $authors$ or $Authors$ or even $Author$.
  2. But much weirder was that it failed like this because I was actually specifying a relative path to nuget.exe, like so:
    .\nuget\nuget pack blah blah

Yeah, you read that right. Believe it or not, that relative path somehow causes nuget to fail to resolve tokens in the nuspec file!

I put the nuget.exe in the same folder as my nuspec file and it worked!

So I moved nuget.exe to a folder that was on my PATH, and that worked as well!

So then I tried to fully specify the drive, folder and filename to the nuget.exe and that failed also.

Very bizarre.

I did come across a number of nuget bug reports indicating that it has problems if you rename the exe. That in and of itself is concerning and just plain weird.

But my guess is it’s trying to open the assembly via reflection, failing, an d short circuiting execution, skipping some very necessary code in the process. Regardless. Back in operation finally!

Tools, Tools, Tools!

Filed under Uncategorized

As a software developer, I spend quite a lot of time using tools of the trade. IDE’s, text editors, command line utilities like GIT, quick and dirty BAT files, file searchers, file comparers, you name it. There is a virtually limitless supply of tooling out there for software devs to (hopefully) make our lives easier.

And things like desktop icons, the TaskBar (in Windows anyway), hotkeys, macros, right click context menus, etc, make it so that the right tool is never more than a click or keypress away.

I’ve always been a bit of a “maker” and I’ve collected a pretty sizeable arsenal of actual, physical, tools  over the years. However, as that collection as grown, I’ve found myself more and more frustrated at the prospect of actually building anything because it can be so time consuming to simply find the tools I need for the job.

When I first moved into my current house, I spent a good bit of time building up some pegboard cabinets for storing tools and other bits.

They’ve worked fine for what they are, but I’ve often found that where I need whatever tools is not where they are. So I end up walking back and forth to the garage, picking up the tool I need at the moment and returning 5 minutes later for whatever else I need, repeat continuously….

So I found a toolbox and loaded it up. It’s nice and portable, but I often spend more time finding the tool I need in it, than I do making whatever it is I’m making. Decidedly, as a colleague used to say, “sub-optimal”.

And then, about a month ago, I stumbled across Adam Savage’s (yes, the “MythBusters” guy) new endeavor, Tested,  and this video he did back in 2015.

Basically, he describes several concepts, including:

  • his Theory of First Order Retrievability, meaning you should never have to move any tool to get to any other tool.
  • The F*** Drawers Axiom, basically that drawers are where good tools go to die.
  • and then general idea of “tools should easily end up where you need them”. Ok, this one is my summarization of a good bit of the discuss he has during the video…

Watching that video was an almost transcendental, profoundly eye-opening moment. And it turns out, a lot of other people thought so too. Just google “Adam Savage inspired tool cart” to see what I mean.

And so, a few weekends, and a bunch of scrap I had lying around later, I now have my very own version of Mr. Savage’s tool cart concept.

Every cart I’ve come across while researching the idea is similar but different, depending, of course, on each individuals needs and their own collection of tools.

In my case, lots of pliers, knives, screwdrivers, levels, straightedges, etc.

Starting at the bottom is a simple rack for my lesser used tools, pliers, crowbars, nippers, scissors, etc.

Next, is a hammer rack. I got the inspiration from one of the many tool carts you can find via Google. Mine added small holes for brass hammers, mallets and others.









Moving up from there is a pliers rack, plus a panel for sockets. The socket holders are Olsa Tools brand I picked up on Amazon. They’re one of the few pieces I purchased because I didn’t have anything already, and scratch building something for that just seemed like too much work.

Next up, I used a red pegboard toolrack I’d had for ages. Just made a panel to screw it to and mounted that. It’s great for screwdrivers, chisels, knives, pencils, etc.

Behind that is a row of removeable (yellow-blue) parts trays that came off my old pegboard cabinets. The fact that they fit there perfectly was a nice bit of serendipity in this build!





Up top, I built a small items sorter out of scrap pegboard. I left a small ledge toward the front that I drilled holes in to wrangle all my smaller pliers, wirecutters, calipers, etc.

Over to the side, I made a slide-in rack for my vise-grips, and on top of that, a small rack for a set of adjustable wrenches. You can’t see the embedded magnets in the rack that keep the wrenches from swinging when I move it.






And finally, there’s space around back for a reasonably sized clamp rack. I also put two steel rods through the inside and hang all my spring clamps off them. They’re easily accessible from the sides or the back, so no violation of the First Order Retrievability theory here!









It’s very close to “done”, at least for the moment, though there’s still a number of bit to finish out.

  • I’m building holsters for my power drill and hammer drill.
  • Magnetic catches for my various saws, hacksaws, coping saws etc.
  • A tray and magnetic catch for levels, squares, T squares, and rulers.
  • A slide out rack for hex keys, and xacto knives.
  • Magnetic tool bars for sticking smaller items like micro screwdriver bits to.
  • Anything else I can dream up!

And finally, the whole thing is on nice large locking casters I picked up from a garage sale. Makes moving it around the garage and even into the house trivially easy. And since it’s only about 18 inches deep at the base, it’ll go through even the smaller 24″ doors in the house if necessary.

All in all, a fun and easy build that has already saved me a ton of time with getting to the right tool easily and quickly. And a nice side effect from putting it together is that I’ve unearthed tools that were so buried in my toolbox, I’d forgotten I had them. Having everything “out in the open” so to speak, really serves as an inspiration when looking for that “right tool”.

Highly recommended! And my hat’s off to Mr. Savage, for reminding me that many of those things I do in the ethereal world of bits and bandwidth, can actually be applied to the physical world just as effectively.

Using only Specific Monitors with RDP Connections

Filed under Uncategorized

I’ve used RDP (Remote Desktop Protocol) for years to work on multiple systems simultaneously.

But one thing that’s bugged me for a while is that, with multiple monitors, you have basically an “All or One” situation.

There’s a nice checkbox on the RDP configuration form that allows you to “Use all monitors”.


But that’s all you get. If you have 3 or more monitors, there’s no way to specify only 2 of them to use for the RDP connection.

Or is there?

Turns out, Scott Hanselman turned up an hidden configuration element for RDP connections that does exactly this. Read up about it here.

The gist is to setup an RDP connection as normal, turn on the “Use All Monitors” option you see above, and save the connection.

Then, use a editor (Notepad will do just fine), and edit the *.RDP file you just created.

It’s a plain text file with a pretty straightforward format.

Somewhere in it, you should see:

use multimon:i:1

Just add another line like below:


where the 0(zero) and the 2 are the monitors that you want to use.

In my case, 0 is my primary and 2 is my leftmost monitor. You can find the monitors numbers by checking your display properties.

I’ve tried a few terminal apps out there (like Terminals), but, unfortunately, none of them seem aware of this either.

Launching into a Zoom Meeting directly from a Windows Shortcut

Filed under Uncategorized

Zoom has rocketed to prominence lately as just about the choice when it comes to online meetings.

I’m not yet convinced its the best, but it is pretty good, easy to use (my 16yo uses it for school during this wonderful quarantining time!), fast (worked perfectly well at my mom’s lake house with absolutely terrible internet), and doesn’t really pull any surprises, other than the myriad security issues that have turned up over the past few months.

Still, it does work well, but there’s one thing that was annoying me.

I have several meetings that I jump onto regularly, and when I do from a browser, or an Outlook link, etc, I get this annoying window from Edge Chromium:

Now, true, it’s not that big a deal, but it is annoying, so I set out to figure out a way to launch a meeting from a regular ol’ Windows shortcut with no annoying prompt.

I had a number of false starts, but eventually discovered a blindingly simple command line that works perfectly, as long as you follow a simple rule.

The command line?

            %appdata%\Zoom\bin\Zoom.exe --url=zoommtg://{your meeting number}

And the Rule?

Don’t put any dashes in your meeting number.

That’s it.

Now, you can put that in a good ol’ BAT file easily enough, or, just open Explorer, enter %appdata%\Zoom\Bin in the address bar and press enter.

Then scroll down to find the Zoom.exe application.

Right click on that and drag it to your desktop to create a Shortcut to the Zoom.Exe app.

Now right click on the shortcut and choose Properties:

You’ll get the standard Shortcut properties dialog.

Scroll to the end of the “Target” value, and paste in part after Zoom.exe from above, so, this:

                           --url=zoommtg://{your meeting number}

If you’ve done it right, the value in the Target field should be just like the command line at the top of this article.

Click Ok, and you’re done.

No more annoying “The Site is trying to open Zoom” messages.

And you can create as many shortcuts to as many meetings as you need!

Shout out to

Filed under Uncategorized

Just wanted to make a quick shout out for I’ve used for many years as my web hosting provider and they’ve been really great. But some recent problems (and a price hike) made me start looking elsewhere.

NameCheap turned up in some googling I did and after a month or so now, I have to say I’m very pleased.

I don’t get anything for this. Just wanted to post about my experiences. Their support has been very fast, knowledgeable and spot on when I’ve needed them. They use the latest CPanel, which is quite nice.

Email support, domain forwarding etc all work just like you think they would. WordPress was very easy to set up, even without going the “Managed WordPress” route, which they also have.

They may have “cheap” in the name, and their pricing is definitely competitive, but so far, they’re anything but low rent!

Unable to PING under Windows 10 anymore

Filed under Uncategorized

About a month back, my main workstation updated itself to Windows 10 Creators Edition overnight.

I really didn’t even notice it at the time.

However, over the last month, I’ve had several bits that had been working stop for unexplained reasons.

The most recent that I could no longer PING other machines (specifically a RaspberryPiZero W) on my network. Worse, at least in this particular case, was that I couldn’t PUTTY into it iether.

However, I could browse to a Samba share I’d set up on the Pi and view it just fine.

After a LOT of gnashing of teeth, I discovered that for some reason, the PING hostname lookup had become CASE SENSITIVE!? What? DNS lookups should never be case sensitive.

Sure enough, though,

ping pictureframe

failed but


worked just fine.

Further, using the UPPERCASE version in Putty worked, but using the lowercase version failed.

There’s a ton of posts about this very thing, with equally as many ideas on how to fix it.

I really did not want to write up yet another BAT file and add it to my startup process, so I kept digging.

The Simple Solution

Turns out, I had IPV6 disabled in Network Properties. Turning it on fixed the lookup, even in IPV4 mode.

To do this:

  1. Got to Settings/Network/Change Adapter Options/
  2. Right Click on the network adapter in use and Click Properties.
  3. Scroll down till you find Internet Protocol Version 6
  4. Click the checkbox to enable it and close all the Setting windows.

In my case, it didn’t even take a reboot.

Granted, now, when I do a ping, I usually get a very unfriendly IPV6 address, but that’s easily remedied by using

ping computername -4

On to the next problem!

Fun With SQL (OVER and PARTITION clauses)

Filed under Hiring, SQL

I’ve been interviewing over the last few weeks for a new position (If anyone has a need for a very experienced .Net developer with some recent Ruby/Rails/Javascript/Coffeescript/JQuery etc chops, shoot me an email!)

At any rate, one company had an interesting SQL challenge.

In a nutshell, given a table with an ID field and a FLAG bit field, find all the consecutive rows where the FLAG field is 1 (ie a bad record).

The trick was that the output needed to look like:

ID RANGE        Error Count
4000-6000       2001

First, lets insert a CSV file into a table….

FROM 'c:\dev\darin\sqltest\sqltest.csv'

They supplied a 1.6 million row sample table, and expected sub 10 second response time. Sooooo, you also might want to add a clustered index to the ID field.

Let’s see some SQL!

With the sample table in place, I could get down to business.

I’ll admit, I had to google the syntax of the OVER and PARTITION clauses in T-SQL. They’re not something I use every day.

First, I needed all the rows, with a group number grouping all the consecutive rows who’s flag value was 1. I used a Common Table Expression for this. I could have used temp tables and it would have resulted in about the same performance, but… what the hey!

WITH parts AS (
   SELECT *, id - ROW_NUMBER() OVER (ORDER BY id) AS grp
   FROM flags
   WHERE flag = 1

Next, I needed the count of each group as part of the result set….

WITH counts AS (
   FROM parts

With those two CTEs in place, all that was left was the output Select….

SELECT cast(min(id) as varchar(20)) + '-' + cast(max(id) as varchar(20)) as IDRange, 
   cnt as ErrorCount
FROM counts
WHERE cnt >= 1000
GROUP BY grp, cnt

In this case, I only cared about blocks of errors of more than 1000 rows. The concatenated SELECT is just to make a nice output format. realistically, I’d probably only select MIN(ID), MAX(ID), CNT

I haven’t used CTE’s a lot, but I’m finding more and more uses for them.

And the OVER clause is something I really need to get more familiar with.

For the 1.6 million row source table, I was getting sub 2 second response times on this query. No doubt, there’s ways to speed this up, but that’s not too shabby.

PhaseShift and Frets On Fire X Song Packs

Filed under Arcade, AutoHotKey, Frets On Fire, Games, Guitar, Stepmania

PhaseShift is an excellent freeware (not open source yet, as far as I can tell, but here’s hoping) version of the RockBand genre of games. It’s even more interesting in that it can interoperate with guitar controllers, game drum kits, vocals, keyboards, MIDI, and even step pads (for Dance Dance Revolution style games, all at the same time!).

Very cool stuff.

What’s even better is that it can read both Frets on Fire songs as well as Stepmania format songs.


There are a ton of great song packs available out on the web, and most that I’ve found work seamlessly with PhaseShift. However, I’ve run into a bunch that do not.

The problem appears to be with the NOTES.MID file (the file that contains all the midi notes that is used by the game to show the onscreen “notes”).

After some digging using a hex editor (my favorite right now is Tiny Hexer), I discovered that in all the cases that failed, the NOTES.MID file appears to contain extranous junk. In many cases, it was a string of keyboard key names, in others it was code snippets. I’m guessing that whatever MIDI editor was used to generate those MID files didn’t properly clear garbage out or compact memory.

At any rate, FoFix appears to ignore the extra junk but PhaseShift does not.

Enter EOF

EOF is a song editor for “fretting” songs for use with rhythm games like Frets On Fire and PhaseShift. The latest version even has specific features to take advantage of elements of PhaseShift that don’t exist in Frets On Fire.

I found that simply using FILE – IMPORT MIDI and importing the NOTES.MID file into EOF, then immediately SAVING the file (and clicking YES to the prompt of “The file hasn’t changed, Save Anyway?”), fixed the problem for every single song I tried it on.

It worked so good in fact, that I wrote up a simple script in AutoHotKey to just run through all the files in a directory and perform those magic steps on them

Convert songs via EOF


loop, 1 {
    ;match anywhere in title
    SetTitleMatchMode, 2
    IfWinExist \Songs\
        msgbox No Window

    ;Copy full path name
    sleep 500
    SendPlay ^+C
    sleep 500
    SendPlay ^+C
    ;msgbox %clipboard%

    ;Over to EOF
    IfWinExist EOF -
        msgbox No EOF

    sleep 500
    SendInput {F6}{F6}
    sleep 500
    SendInput %clipboard%{enter}
    sleep 1000
    Send ^s
    sleep 500
    Send ^s!FS
    sleep 200
    SendInput Y
    sleep 200
    SendInput Y

    ;Back to DirOpus
    IfWinExist \Songs\

    sleep 500
    SendPlay {down}


Change the loop value from 1 to some count if you want to run it through more than one song at a time.

To explain:

The F12 key I’ve mapped to a reload just to make editing this script easier. It’s not necessary for actually running the script.

The F11 key hooks to the secret sauce.

I used the SEARCH feature in Directory Opus to list only the NOTES.MID files from all songs in all subdirectories of a folder I was targeting. If you don’t have DirOpus, you’ll need to recode the script to accommodate some other logic for getting the list of full pathnames to process.

The script starts by activating the DirOpus window and copying the full path to the selected NOTES.MID file.

Then it switches to EOF, (which needs to already be loaded), and performs the FILE – IMPORT function, pasting in the filename of NOTES.MID.

It then immediately does a FILE – SAVE (and supplies a few Y keypresses to answer the “save anyway” prompt.

And finally, it switches back to DirOpen and moves down to the next file.

It’s a hack to be sure. But it worked a treat for me.

Rock on!