any recommendations on windows-based ISO extractor?

I need to back up a couple of CD’s (not copy, just create ISO files).  Any recommendations?  Something free – there’s lots of commercial ones out there, but I’m not going to pay for something when I could, worst-case, pop it in my linux box and use dd bs=2k 🙂

I tried ones like ISO Recorder, ISO Buster, MagicISO, etc – the ones I’ve run across either have size limitations or are commercial or didn’t work (DVD Decrypter, for instance, only works for DVD’s – I’m surprised it wouldn’t create the same ISO-9660 image from a CD when it had less work to do since there’s no CSS involved).

cheap Raleigh-area meat store?

A place in Fayetteville that’s a “meat store” (sells meat relatively cheap) is called Kinlaw’s – you can see an example of their weekly newspaper ad here.  $1.39 for boneless/skinless chicken breast, 0.99 for boston butt or whole pork shoulders, $3.99 for t-bone loins, etc.

It seems likely that such a place exists around Raleigh, but I’m having a hard time finding it (at least via google).  Places like Costco seem to have much more high-end meats at much higher prices, and that’s not what I’m looking for – just the basics for throwing in the freezer at a hopefully-cheap price with all the end-of-year/post-Christmas sales.

Anyone know of a place in the Raleigh or Triangle area?

some favorite pics from christmas

I’m sure I could format these better, but drag-drop from firefox into WLW is too easy to pass up.

Jessica getting her Snowth (video) DSCF0131.JPG


Jessica and JT DSCF0155.JPG


construction kids, including Sarah in the hard hat DSCF0156.JPG

Sarah loving on her new doll DSCF0081.JPG

Princess! DSCF0085.JPG

if the tiara fits … DSCF0090.JPG

cocoa krispies x4 DSCF0067.JPG


Sarah opening a present during Cothran Christmas DSCF0032.JPG

pic Jill and Chas snapped – I had passed out with Sarah on me DSCF0113.JPG

Sarah with Snowth eyeballs DSCF0073.JPG

lack of support for Vista / IE 7 on web sites

I wanted to check the local wal-mart’s advertised sales – clicking around, I got here

Unfortunately, clicking on “December Advertised Values” gets me a page saying I’m not using a supported “computer configuration” (both from Firefox and MSIE 7.0)

  1. doing an explicit OS check seems dumb – hopefully they’re not doing that, but it’s certainly possible given the platforms Firefox runs on.
  2. hopefully they’re not checking specifically for IE 5 or 6 (there are published best practices)
  3. I’m curious exactly what the “Microsoft Windows web site” is going to tell me in terms of how to upgrade from Vista to 98, 2000, ME, or XP.
  4. Yes, Vista isn’t widely available yet.  However, a *ton* of sites have managed to update just fine for Vista and IE 7.  Anybody serious enough to be using Akamai ( in the URL) should know better.
  5. While the “User Agent String Utility” exists for IE 7, I was surprised that Firefox didn’t have easier User-Agent modification.  Yes, I know about Opera 🙂

when it's hard to nail down the root cause

Things that may or may not be going wrong with my linux box:

  1. it’s overloaded with comment spam, even after renaming wp-comments-post.php, as the flood if incoming attempts to post still take up some apache time (although I wouldn’t think much).  For now, I took the list of 224 machines that were attempting the comments spam and just iptables -A INPUT -s -j DROP’d anything from them.  So far it seems to be helping, but we’ll see.
  2. the main hard drive is dying.  I’ve had DMA failures from the drive for years (and the drive passed the bad-disk checker from maxstor or WD or whoever), and for now I’m shoving it back into PIO mode to see if there are still problems.  The second drive showed the same problem (I’ve confirmed the connections are fine), so it may be controller or driver related.  Either way, if there are problems even in PIO mode, I’ll either swap drives or do something more drastic.  The main drive is 80GB and the secondary is 160GB, but currently the second drive is used for online nightly backups, so if I swap over to it, I’ll probably move the 80 somewhere else and pick up an external for backups (or use S3 or whatever)
  3. hard drive accesses aren’t failing, they’re just never coming back.  A lot of the symptoms I’m seeing “feel” like the app is sending a I/O request to glibc/syscall/etc and the request is just getting hung out to dry – it’s not failing, it’s not succeeding with corrupt data, it’s just never coming back.  I’m sure there’s ways to see which process(es) are currently stuck waiting on syscalls, but I don’t remember off the top of my head and it’s not currently worth figuring it out.
  4. There’s a lot of thrashing going on.  The machine’s “only” got 256MB (PC133 really should be cheaper by now, although I’m guessing it’s more a supply/demand issue more than lack of moore’s law), and it’s running mysql, postgres, apache2, postfix, and various other services (dhcp, named, etc.) – it’s typicall running a little in the swap, but not much – the rate of page faults is typically fine, but during “comment spam storms”, the machine grinds as even swap gets exhausted and the load average shoots up over 100 as everything’s waiting on disk i/o.
  5. the main processors are cooking.  During one of the hard drive’s pukings (spewing tons of kernel stacks to the console, presumably BUG() calls, although I didn’t look into it, as I had to power cycle and the stacks were going too fast to read, and I didn’t bother to check the syslog after rebooting), the CPU’s went from their usual idle selves to actually pegged.  After power cycling, the poor machine wouldn’t finish starting up, as lmsensors caused lots of console messages about the CPU temps being 80 C and wanting to shut down.  That at least makes me happy that the sensors are working.  After opening the machine up and having the overhead fan on it for a few minutes (oh, and hooking the incredibly-loud CPU fans back up, that I had disconnected about a year ago due to noise), it seems fine.

I’m actually starting to think about getting rid of the linux box (dual celery 366) as a separate machine and just use a vmware/virtualpc/whatever chunk of the p4/2.6+2GB Vista machine.  Maybe with VirtualPC 2007 – we’ll see.  I could donate the dual celery to a good cause, then 🙂

HTTP spec violations are fun

With recent builds of Fiddler, it’s been fun to see how many sites have HTTP spec violations and of what kind.  As a tool, it’s helped me track down some corner case problems in our own product at work. 🙂

Today’s selection comes from amazon by way of imdb – a simple request tracker hit:

The offending entry

The request (fun user agent, eh?)

GET /e/ir?t=internetmoviedat&l=as2&o=1 HTTP/1.1
Accept: */*
Accept-Language: en-us
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; .NET CLR 3.0.04320)
Proxy-Connection: Keep-Alive

The response is just the typical 1-pixel gif image:

% wget -q -O foo.gif ‘′
% file foo.gif
foo.gif: GIF image data, version 89a, 1 x 1

Vista's problem reporting tells me (indirectly) about Firefox

Firefox’s auto-update took me from to, and in the process introduced a regression (hitting one of my credit card web sites now crashes the browser reproducibly).  I sent in the reports (both through Vista and the talkback agent), and got a notification of an update that’s available.

The link (hovered over to make it clear) is just the generic firefox page, but it in turn mentions

I’m very happy to see that as an end-user experience.  Application crashed (non-Microsoft one in this case, but it shouldn’t matter since the Watson/reporting interface is open to anyone) and I got some feedback (none about this particular bug being fixed, but that’s fine) that let me know about a version that may help me out.  Very cool.

recognize .wav file using System.Speech from .NET 3.0

It’s a tiny little app since they provide you the right methods in their object model (at least for .wav files 🙂


using System;
using System.IO;
using System.Speech.Recognition;

namespace Recog
    class Program
        static void Main(string[] args)
            if (args.Length != 1)
                Console.Error.WriteLine("Usage: Recog <file.wav>");
            string wavfile = Path.GetFullPath(args[0]);
            if (!File.Exists(wavfile))
                Console.Error.WriteLine("Error: Cannot find file {0}", wavfile);

            DictationGrammar dictationGrammer = new DictationGrammar();
            using (SpeechRecognitionEngine engine = new SpeechRecognitionEngine())
                Console.WriteLine("Using default recognizer: {0} [{1}]", engine.RecognizerInfo.Id, engine.RecognizerInfo.Description);

                while (true)
                        Console.WriteLine("Calling engine.Recognize");
                        RecognitionResult result = engine.Recognize();
                        if (result == null)
                            Console.Error.WriteLine("Exiting by way of Recognize returning null");
                        Console.WriteLine("Recognized text of {0} [confidence {1}]", result.Text, result.Confidence);
                    catch (InvalidOperationException)
                        Console.Error.WriteLine("Exiting by way of Recognize throwing InvalidOperationException");

quickie notes on Vista speech recognition through System.Speech (.NET 3.0)

Just to play around with it, I wrote a quickie app to call the .NET 3.0 interfaces for Vista’s speech recognition.  In particular, it accepts a .wav file as a param and just has the recognition engine run over that.

Some quick notes:

  • The default recognition engine isn’t necessarily the one you want.
  • On my system, I have 3 installed, one of which is the one from Office 2003 (still installed on the machine).  This appears to be the one I’m getting by default when I don’t specifically specify the recognizer to use.  Calling SpeechRecognitionEngine.InstalledRecognizers() gives, for me:
  • Installed recognizer: MS-1033-61-DESK [Microsoft English (U.S.) v6.1 Recognizer]  <– this is likely the one from Office 2003, and is the one I got by default
  • Installed recognizer: MS-1033-80-DESK [Microsoft Speech Recognizer 8.0 for Windows (English – US)]
  • Installed recognizer: MS-2057-80-DESK [Microsoft Speech Recognizer 8.0 for Windows (English – UK)]
  • When I’m constructing the SpeechRecognitionEngine, using “MS-1033-80-DESK” for the recognizerId string works fine and gets me the recognition I expect.
  • The API seems to assume you want call Recognize or RecognizeAsync multiple times.
  • While looping, there’s no way to check when to end (when to stop calling Recognize) except for checking when you get an InvalidOperationException.  Here’s some quickie PowerShell showing 2 valid calls and then the invalid one once we reach the end of the (short) wav file.  I really hate how end-of-file is an exception since it’s NOT an exceptional condition (at least in the pre-recorded audio sense – I understand why it is for a microphone).
    • C:\> [void][reflection.assembly]::loadwithpartialname(‘system.speech’)
      C:\> $rec = new-object ‘System.Speech.Recognition.SpeechRecognitionEngine’
      C:\> $rec.RecognizerInfo.Description
      Microsoft Speech Recognizer 8.0 for Windows (English – US)
      C:\> $rec.LoadGrammar((new-object ‘System.Speech.Recognition.DictationGrammar’))
      C:\> $rec.SetInputToWaveFile(‘C:\Documents and Settings\admin\Desktop\downloads\test.wav’)
      C:\> $rec.Recognize() | fl text,confidence
    • Text : This is a test 12345678
      Confidence : 0.6058533

      C:\> $rec.Recognize() | fl text,confidence

      Text : 910 this was a test
      Confidence : 0.6938771

      C:\> $rec.Recognize() | fl text,confidence
      Exception calling “Recognize” with “0” argument(s): “No audio input is supplied to this recognizer. Use the method SetInputToDefaultAudioDevice if a microphone is connected to the system, otherwise use SetInputToWaveFile, SetInputToWaveStream or SetInputToAudioStream to perform speech recognition from pre-recorded audio.”
      At line:1 char:15
      + $rec.Recognize( <<<< ) | fl text,confidence
      C:\> $error[0].exception.innerexception.gettype().name

  • Recognition on “bad” input may actually return null from Recognize (and depending on the size of the file, may block for quite awhile).  Here’s a normal (comes with Vista) wav file.  It doesn’t have any actual speech in it.
    C:\> dir $env:windir\media\start.wav
    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Windows\media
    Mode  LastWriteTime     Length Name
    —-  ————-     —— —-
    -a— 8/23/2001 8:00 AM   1192 start.wav
    • Here’s recognition on that file returning null
      C:\> $rec.SetInputToWaveFile(“$env:windir\media\start.wav”)
      C:\> $output = $rec.Recognize()
      C:\> $output -eq $null

    in Vista, Sound Recorder now forces WMA

    I wanted to make a simple .wav file for some testing.  I decided to use the Sound Recorder that’s been in Windows for awhile.

    Your only option for saving from the built-in Sound Recorder (assuming you’re not using the “N” edition for Europe et al) is WMA now – you can’t save as .wav any more.

    The help spells this out, but their phrasing of “By default” made it sound to me like there would be an option for .wav (and not just that the N editions used .wav still).

    Scanning around for something simple to convert the .wma files to .wav’s, this one seems simplest and least intrusive as a command-line app (that I can therefore most easily script).