2006-12-02

Properly tagged music.

Alternately: Why Foobar2000 and Picard suck.

I like properly tagged music.

Obviously it's nice to be able to get your computer to tell you what song you're playing, but, if you need to be told, you probably aren't a fan of it anyway. Maybe you ripped your cds and your cd-ripper tagged the files from FreeDB, or similar, and you've ended up with the names in block-caps, or with all the lovely crazy characters removed?

I'd hope that most people would care enough to fix tags that are (incorrectly) written in block-caps (Winamp users probably wouldn't notice), but most people wouldn't bother correcting an album by ᛏᛣᚱ (yay, runes) that's been mistagged as Týr or Tyr, for instance, mainly due to the effort involved.

There are quite a few automatic solutions to manually fixing these tags, starting with FreeDB that's already been mentioned, my favourite being MusicBrainz.

They have a wonderful tool called Picard that will allow you to get information from their database into your files, including the correct spelling of ᛏᛣᚱ. Picard has a user guide, I've written an alternative Picard user guide to illustrate the way I tag stuff.

Assuming you don't care about the correct usage of the artist names, nor having credit correctly given for remixes, etc., why would you bother to process your music with Picard?

Along with ensuring that the files have the correct normal tags (that you'd normally see), it also puts extra information from the MusicBrainz database into your files, for instace, the sort-order name of each artist. This allows you to do fun things with your playlist, for instance, what I do with Foobar:

Sort order:

$if(%MUSICBRAINZ_ARTISTID%%MUSICBRAINZ ARTIST ID%, ,)$if($strcmp(%MUSICBRAINZ ALBUM ARTIST ID%%MUSICBRAINZ_ALBUMARTISTID%,89ad4ac3-39f7-470e-963a-56509c546377),%album% - %MUSICBRAINZ ALBUM ID%%MUSICBRAINZ_ALBUMID%,%MUSICBRAINZ ALBUM ARTIST SORTNAME%%MUSICBRAINZ_ALBUMARTISTSORTNAME% - %MUSICBRAINZ ALBUM ARTIST ID%%MUSICBRAINZ_ALBUMARTISTID% - %album% - %MUSICBRAINZ ALBUM ID%%MUSICBRAINZ_ALBUMID%) - %album% - %tracknumber% - %album artist% - %title%

Playlist display:

%list_index%. 
$if(%MUSICBRAINZ_ARTISTID%%MUSICBRAINZ ARTIST ID%,,UT - )
$if($strcmp($longest(%MUSICBRAINZ ALBUM ARTIST ID%,%MUSICBRAINZ_ALBUMARTISTID%),89ad4ac3-39f7-470e-963a-56509c546377),
%album% - %tracknumber% - %album artist% - %title%,
%album artist% - %album% - %tracknumber% - %title%)
$tab()
%length%

Note that both of those are whitespace-sensitive, the second is new-line insensitive, so has been split up slightly to make it at least sane to read.

What these do:

These mean that your playlist will read something like this:

A Various Artists CD - 01 - Some Artist - Track Name
A Various Artists CD - 02 - Some Other Artist - Track Name
...
Jim Bob - Another Album - 01 - Track Name
Jim Bob - Some Album - 01 - Track Name
...
Canned Beans - Album #1 - 01 - Track Name
...
UT - BLERG
...

etc, where "Jim Bob" is a person's name, so will have a sort order of "Bob, Jim", and "Canned Beans" is a band, so will have a sort order of "Canned Beans". The "UT - " prefix on files at the end of the playlist mean that they need tagging.

This has the wonderful effect of meaning that all of the albums by a single artist will be in the same place (as Jim Bob's are above) without Various Artist cds being broken up by artist, which makes no sense.

Now that I've got my playlist back to how I like it, back to the original title of this post, Picard (0.7.2) sucks for writing tags with completely different names to different types of file, for instance:

M:\Compilations\Clubland\Seven (cd1)>cat 01.mp3 | xxd | head -n 16 | tail -n 3
00000d0: 0000 034d 7573 6963 4272 6169 6e7a 2041  ...MusicBrainz A
00000e0: 6c62 756d 2041 7274 6973 7420 4964 0038  lbum Artist Id.8
00000f0: 3961 6434 6163 332d 3339 6637 2d34 3730  9ad4ac3-39f7-470

..against..

M:\Compilations\Clubland\Six (cd1)>head -n 2 "04.ogg" | xxd | head -n 19 | tail -n 3
0000100: 4d55 5349 4342 5241 494e 5a5f 414c 4255  MUSICBRAINZ_ALBU
0000110: 4d41 5254 4953 5449 443d 3839 6164 3461  MARTISTID=89ad4a
0000120: 6333 2d33 3966 372d 3437 3065 2d39 3633  c3-39f7-470e-963

Grr.

Foobar also needs a kick for making it so hard to deal with these (and debug them), along with being inconsistent (in undocumented ways) between the "sort" and the "display" shown above, which is also a major pain.


2006-11-23

Crack

My phone, after being in my pocket for ~10 months:

My phone's new screen

Ignoring that, the device still works perfectly, unfortunately I can't remember enough of the start-menu (and the file browser) to get stuff running, I think it'd be a wonderful experiment to find some software catering for the blind, see how well it copes</desperate>. :)

Update:

Some searching revealed the Windows Mobile Developer Power Toys, one of which provides a VNC-style server and client that you can run without local to the phone (except via. activesync):

My phone's new new screen

Yay!


2006-08-27

Copy Protection on Demos.

Why? Why is it necessary to bundle copy protection with demos? What is it actually protecting?

For a released game, you can quite fairly argue that any copy protection applied is useful (initially) to help deter piracy, but for a demo? The only thing I can think of here is the reliance on the copy protector's packing to prevent reverse engineering of the engine, an (eventually) futile task. The protection might hold for a month or so, but if you've actually released (or, at least, code-frozen) your product, what help is protecting your engine from the competition? They're apparently aiming for a later release date, and hence will be using a further developed engine regardless.

The alternative possibility being that the demo is limited in features up until the point where you supply an 'activation code' of some kind, an idea which has largely died out with this whole 'internet' thing (due to the ease of selling to customers and then distributing the release version of the game). See JetPack and Zone66 for some games that had properly limited (with 'post off for the full version') demos, and some of the wonderful creations in the archives of Lucky's VB Gaming Forum for some of the "greatest" home-grown copy protection schemes, ever.

Assuming, based on sheer size, that demos for modern games don't have all the game content bundled, and the developers aren't paranoid about people stealing their unpacked code, we're back to having no reason for copy protection on demos.

The only exception to this are demos (or non-sale releases) of games with network play, where you rely on the protection system to prevent the user damaging their client in some way, for instance Trackmania Nations, in which you really shouldn't be relying on an external library to protect the play (it should, ideally, be impossible to cheat because the server checks everything it's sent).

Following that, back to the normal.. moaning about applications that don't work correctly as a limited user on Windows.

I recently downloaded the Just Causedemo, and was (pleasantly) suprised to see that the installer is limited user aware, even offering to install into your Application Data directory, which would undoubtedly irritate some sys-admins (with roaming profiles turned on). That is, it works fine, right up until a few seconds before the end, where it dies with a error message quoting "Access Denied", with no other useful information. Woe. Looking at Regmon / Filemon logs doesn't give any further information, either.

That wasn't wholly unexpected, but having uninstalled it and re-run the set-up program as an administrator (which works fine), I try to run the demo (as either user), and get given:

A required security module cannot be activated. This program cannot be executed (5016). Please have a look at http://www.securom.com/message.asp?m=module&c=5016 for further, more detailed information.

(That link was dead at the time of writing, too.)

Lovely. Well, I certainly won't be buying the game, then. Good work, demo.


2006-07-20

Foo.

Something I learned today..

Windows XP's explorer doesn't appear support long path names (ie. paths over MAX_PATH, 260 characters long), neither do the GnuWin32 utils.

This is a major pain, if, for some strange reason (don't ask) you happen to have accidentially created a large number of folders called "foo", each being a child of the next.. you can't delete or browse them, the only operation that works is move (rename).

Simple solution; run the following a few times:

for /F "usebackq" %f in (`seq 1 500`) do mv foo foo2 & mv foo2\foo . & rm -r foo2

Oh, such a nasty hack.

For anyone who doesn't have a clue what's going on there, all it does is (500 times): Rename 'foo' to 'foo2'. Move 'foo2''s first child to the current directory. Delete (the now empty) 'foo2'.

Simple, eh?


2006-07-13

Kensington locks

At IBM, due to the sheer number of Thinkpads lyring around on desks, all laptops are supposed to be secured to the owner's desk using a Kensington MicroSaver, simply to stop people walking in and grabbing a pile of laptops.

The first hit on Google for "Kensington lock" was, t the time of writing, a Digg post about picking Kensington locks, the essence of which is: Cardboard tube with the same diamter of the lock and some jiggling.

My 'lockpick', fashioned from a pencil, a few bits of scrap paper and some sellotape (all of which were lying around on my desk at the time):

With this, and about 5 minutes trying to get the technique right, I managed to get the lock off my laptop.. repeat attempt (knowing which way to 'lean', which you can work out easiest by looking at the key, but that's cheating, of course..) took about 30 seconds to get the lock off.

So much for not being able to just grab them off desks..


2006-07-08

Boredom

Following the CompSocBFL 2006 and a week at home, I've moved to the Southampton area for my IT year at IBM Hursley.

Not having had an internet connection for most of that time, I've had to come up with some other things to do (besides watching QI).

First, anyone who's used GnuWin32's CoreUtils' ls will probably have noticed how slow it was (for example, it takes ~4 seconds to list the files on my desktop); it also lacks actual checking of the owner/group of the file, the permissions and the colouring/console-width-awareness provided on other platforms. I can (now) appreciate the permissions, but the others.. Anyway, I decided to rewrite it. Going reasonably well, but reading the permissions (for anyone but the current user) is a pain. A serious pain.. if I ever manage to do it successfully, I'll probably write about it. As far as I can tell, nobody else has ever managed it, so things aren't looking good.

It's not ready for general use yet, but it's definitely working:

Secondly, having seen both Silver's ConResMgr (a tool that lets you drag-resize Windows Command Prompt windows), and the way he lays out windows on his screen, I thought I'd have a go at doing it semi-automatically.

The result was the imaginitively 'FauWM Assistant', which, when you Ctrl+drag or Ctrl+resize windows will show a dialog prompting you for which sextant(s) of which screen(s) you'd like the window to be placed in.

The result is that it's very easy to get a window setup that looks something like:

The (ultimately sexy) prompt for window position currently looks like:

So, to use:

  • Grab (pretty much) any window by the title bar, I know it doesn't work with Winamp and (partially) Putty.
  • Hold control and just drop the window anywhere; the Segment Select.. window shown above will come up under your cursor.
  • Drag a box through some of the rectangles shown.
  • The window should now be where you wanted it.

You can download FauWM Assistant (sig), it needs the Visual Studio 2005 (8) Runtime Library.


« Prev - Next »