This challenge was a column of keyboard pictures (like “img” below), each presented with one of two cat pictures. One cat picture was Dvorak with cat-ears, and one was the Keyboard Cat.

The pictures which accompanied the keyboards:

img=Binarize@;

The keyboard pictures represented binary (black key is a 0, and no black key is a 1) for ASCII.
I use this reference image to work out the columns in which we can check for a black pixel. It turns out that the appropriate values are {30,50,80,100,130,150,172,195}.

binFromImg[img_]:=FromDigits[1-Flatten[ImageData/@(ImageTake[Binarize@img,{10},{#}]&/@{30,50,80,100,130,150,172,195})],2]//FromCharacterCode

I then dumped the web page into a folder on my Desktop; thanks to the puzzle creators, the relevant pictures were precisely the PNG files.

imgsList=Import["~/Desktop/CUCaTS Puzzlehunt_files/"<>ToString[#]<>".png"]&/@Range[0,25];

letters=binFromImg/@imgsList

StringJoin[%]

cats=ToExpression/@(%183[[2;;-1;;3]])

Pick[letters,cats,1]//StringJoin

Pick[letters,cats,2]//StringJoin

I went up a blind alley here, testing all possible Vigeneres; that chunk is after this text bit. We solved this challenge eventually by typing into a text editor.
The solution was to type the letters which had the Dvorak picture next to them in Dvorak, and the remaining ones in QWERTY. The string thus revealed was “Colemak is better, anyway.”

<<Encryption`

Function[{x,y},StringJoin[If[cats[[#]]==1,EncryptCaesar[letters[[#]],x],EncryptCaesar[letters[[#]],y]]&/@Range[Length[letters]]]]@@@{{0,24}}

CrackVigenere["Cspemav g; bdkkeow alywaye"]

SortBy[%,StringFitness]