2008-05-06

Windows Live OneCare

As I had no particular use of my CPU time over the weekend (I was busy force-feeding dogs ice-cream), I installed Windows Live OneCare (which has recently gained support for x64 flavours of Vista), following a promise to myself that I would install a virus scanner of some kind.

It happily scanned away, deleting three copies of the deadly EICAR virus (phew), this was (mostly) fine.

Following this, and OneCare assuring me that my system was free of viruses, spyware and other malware, awarded me the security status Fair:

OneCare - Fair, Fix, Backup

The "problem" found was, apparently, that I have chosen to disable elevation upon "setup detection", a feature built into Vista (disableable via. Local Security Policy -> UAC: Detect Application Installs..) by Microsoft in a cunning plan to ensure that lazy software developers didn't need to bother learning how manifests work, and instead could just rename their application to "setup.exe" and pray. There is no way to ignore this "problem".

The second "problem" was that I do not use OneCare (nor optical media, as it happens) for my backups. This renders the overall "security" status useless.

Next irritation comes from the attempt to use the internet. OneCare blocks outgoing connections from unisnged (it costs £40 and an e-mail address to get a code-signing certificate via. Tucows, making this a terribly poor way to decide what to trust) apps by default (well, I hope, I couldn't work out how to turn it off), and shows the following dialog:

Opera and Putty OneCare firewall elevation dialogs

That's conforting, a shielded task dialog. I'll click Allow on Opera's prompt and... wait, what's this?!

Opera and Putty OneCare firewall dialogs, elevated

I'm confused. Didn't I just say Opera was allowed through?

Also, a warning: Don't try the bottom button. It blocks the application for an indeterminate, unresettable period. Really inconvenient when you're attempting to use said application to write a blog report.

If you hadn't guessed by now, I don't like OneCare's UI. To sum it up:

OneCare\'s loading dialog

This is the dialog that you see when you restore OneCare from the system tray. No, not load from scratch. Restore. And, just in case you were worried, that's not a progress bar, it's just an "I'm doing stuff, honest!" bar.

Ignoring all those (and a few other bugs), it seems to be a very capable bit of software. Maybe you're less irritable than me, go try the 90 day free trial! :)


2008-04-30

Music ratings

I've just commited some code to my Taglib Property Handler that will (at least, hopefully) extract rating tags from files. This is proving rather hard to test, however, as I have nearly no test material.

In short, if you use or know about an application that adds rating information to files, please tell me about it. Currently, I've only really looked at some apps that are bundled with Windows and foo_rating's behaviour.

Windows asks that the rating be specified in a range between zero (unrated) and 100 (five stars), with a curiously un-even scale in the middle. It also offers the capability to return a simple rating; the number of stars (out of five).

This is fine, until you realise that there seems to be no standard, defacto or otherwise, for the range of values or the location to write rating information in the file*.

Based on the limited sample above, the code I committed attempts to find a tag named "rating" in the file, and takes it's integer value. If it is below five, it is used as a star rating, if it's below 100, it's used directly, and if it's below 255, it's mapped onto the 100 range. While this effectively deals with the cases I have encountered so far, it is, obviously, full of discontinuities. After the above mapping function, the input 4 is greater than everything below 75 (the value used to represent four stars), etc.

This should allow apps that follow the Windows (percentage) standard and the "number of stars" standard to coexist happily, but may cause strange issues when unexpected rating systems are used. Unfortunately, even if I'm aware of curious rating systems, there's little I can do about them, as, at this point in the code only the current file is visible, not others in the set (directory etc.). If someone is using 0 -> 10, everything six and above is going to show as one star. :(

(* The exception to this is, of course, id3v2, which specifies the POPM ("popularimeter", 4.17) tag, which contains an octet value (0->255) for a user rating. I have never seen an app that writes these, nor a file containing them, and, as such, id3v2 files go through the same process as everything else as a fallback.)


2008-04-14

Taglib Property Handler

I've recently released, via. Sourceforge, an alpha of my Taglib Property Handler. It allows Windows (Explorer, Search, etc.) to view the metadata that exists in a variety of audio formats.

Taglib supports (so far) ogg (vorbis), flac, oga, mpc, wv, spx, tta, mp3 and wma. The last two have some support in Windows, however, support for id3v2.4 in mp3 files is lacking.

Currently, it works best under Vista (either 32-bit or 64-bit). XP (even with Windows Desktop Search installed) seems not to be interested in the properties I have to offer. The installer (intentionally) completely does not work under XP.

Any comments welcome, but this is an alpha, and, even though there is (nearly) no risk to your files or your system stability, it's possible that something is horribly broken. :)


2008-02-20

More Java Enum fun.

I'd have thought that it'd be reasonably reasonable to expect the following code to compile:

enum Compass
{
    North(West), East(North), South(East), West(South);

private final Compass clockwise_of;

Compass(Compass clockwise_of)
{
    this.clockwise_of = clockwise_of;
}

}

It doesn't; "West" is used before it's declared.

So, how about this?

enum Compass2
{
    North(new Object() { Compass2 ref() { return West; } }.ref()), East(North), South(East), West(South);

    private final Compass2 clockwise_of;

    Compass2(Compass2 clockwise_of)
    {
        this.clockwise_of = clockwise_of;
    }
}

That's fine. Thanks, Java Language Spec!

Now, if only I didn't need four parameters to the constructor...


2008-02-14

Command-Not-Found on Windows

(Okay, not quite.)

After someposers started duplicating the functionality of the Ubuntu command-not-found package, I thought I may as well have a go on a sensible OS.

Unfortunately for me, it turns out that Windows CMD doesn't offer, as such, a function that's run when a command isn't found, so I had to add my own (everyone loves screenshots of text, right?):

My beautiful assembly defeating Ollydbg's highly competent analysis

For those of you who can't read my beautiful hand-coded assembler, when a command isn't found, my patched cmd.exe will now attempt to load "cnf.dll" from the system path, and pass the command-line to a function, imaginatively named cnf, in that dll.

Stage two, obviously, is to get some kind of useful reply...

// cl /Fecnf.dll /EHsc cnf.cpp /link /dll /dynamicbase /subsystem:console
#define UNICODE
#include <iostream>

extern "C" { __declspec(dllexport) void __stdcall cnf(const wchar_t*); }

using std::wcout; using std::endl;

void __stdcall cnf(const wchar_t* command)
{
    wcout << L"I'm sorry, it looks like you tried to call ``" << command << "'', but the command doesn't exist!" << endl << endl;
    wcout << L"Did you want to try /your mother/ instead?" << endl;
}

I started writing a loader that'd apply the patch on-the-fly/to all existing instances of cmd, but I kind of ran out of care (it should be safe, it's about a sixty-byte patch). If anyone can think of any actual applications of this...


2007-12-18

Escape the black-screen in Vista.

I've used this so many times today, I just have to share it.

Occasionally, when tabbing out of legacy games/SDL/dosbox/etc. under Vista (on my machine? New in Vista sp1 beta? With the beta nVidia drivers?), the screen will go completely black, but everything underneath will continue working, the mouse cursor will continue to move and change.

Ctrl+shift+esc (show task-manager), start+d (show desktop) and the usual set of keys don't make the black go away, nor does Ctrl+alt+delete.

The trick is to lock the machine (start+L), the screen will remain black, it's useful to have sound on at this point to ensure that it actually locked (ie. you aren't about to type your password into IRC :) ) and log back in again. Everything will return to normal. I have no idea why this fixes it. :)


« Prev - Next »