Spam Karma 2.0 rocks

As a little bit of an aside…

I’ve been running Spam Karma 2 (SK2) beta for a while and it was working OK, but there were a bunch of things that didn’t quite work on my server (in all fairness that probably had more to do with an outdated/feature poor version of PHP than with SK).

Anyway, I was beginning to get a flurry of annoying comment/trackback spam that squeaked in under SK2 beta’s radar. Between 1 to 5 a day. Nothing I couldn’t handle manually, but enough to spur me on to update to the final 2.0 release.

Just in time too.

This is a snippet from the first report after I updated:

There are currently 0 comments in moderation
<url snipped>

There have been 27 comment spams caught since the last digest
report 1 day, 1 hour ago.

Spam summary report:

=======================================================
Report on comment number 1 (id=1357)
Comment Author: Wilhelm Johnsson
Comment Type: trackback
Comment Content: 
 trailer-ass-f***
...

YEAH! Take that you slimy comment-spam weasels!

Happy Birthday… to me.

Yup, that time of year again. This year I am officially the answer.

For the entire year. I hope that works out for me.

In more amazing news, Al’s parents sent me a great gift. They tracked down a copy of The Buffy-Porson – A car you can build and drive (the book I talked about in this post).

buffy_porson_book.jpg

It was very cool to flip through the pages and have the memories flood back. I remember many of the steps in the construction as if it were yesterday.

Have I ever mentioned how amazing I think my in-laws are?

Selecting a subset of Objects in a WORepetition

Often you need to allow a user to select a subset of items from a WORepetition to be able perform an action on them. This example will do that for you:

public Object item; // The "item" binding on your WORepetition
public NSMutableArray selections = new NSMutableArray();
 
public void setSelectedItem(boolean selected) {
    boolean hasItem = selections.containsObject(item);
    if (selected) {
        if (! hasItem) {
            selections.addObject(item);
        }
    } else if (hasItem) {
        selections.removeObject(item);
    }
}
	
public boolean selectedItem() {
    return selections.containsObject(item);
}

Add a WOCheckbox to your WORepetition and bind its checked binding to selectedItem. Any item selected will be added to the selections array when the form is submitted.

Building a PVR: Status

Setback

It looks like I’ve got a defective Hauppauge PVR-500. I set up the tuner in the PVR-350 and both of the tuners in the PVR-500. Everything looked like it was working fine so I started programming recording schedules. If I tried to use all three tuners at once – record two shows while watching a third – MythTV would hang (mythfrontend would loose connection to mythbackend).

I restarted and tried just switching through the cards (Y key). Every time I hit the second PVR-500 tuner I’d see the same symptoms.

Finally, I deleted all of the capture card settings and configured each of the tuners individually. That seems to confirm that the second tuner in the PVR-500 is failing. The /var/log/messages shows the ivtv drivers initializing the card/tuner successfully, but when MythTV tries to access the stream it times out and fails.

A thorough search of Google reveals that lots of people are successfully using this card with MythTV and/or KnoppMyth so it looks like it’s personal :-(.

Update: Not a defective card, an IRQ conflict. It looks like it’s unresolvable too. I’ve moved the card around (I’ve only got two slots) and mucked with the BIOS settings but I can’t seem to get both tuners to work at the same time.

Likes

I’m liking the ability of taking control of the TV. Using keyword and title searches is pretty cool. I’ve already told the box to record "Charlie Brown’s Christmas" and "A Christmas Carol" two specials I would have missed otherwise.

Dislikes

The noise – The GX240 is pretty quiet as far as PCs go, but it’s still pretty noisy in my quiet living room.

It’s ugly – I wish I had a AV cabinet to hide it in, but we have a pretty minimalist living room.

Observations

The hardware MPEG encoders/decoder do their job well. While recording one show and watching another the CPU is running at about 6% utilization. That’s pretty amazing.

Remaining

DVD playback – I’ve only tried one commercial DVD (The Incredibles if you must know) and it didn’t work. It looks like there is a bunch of tweaking that needs to be done to make that work.

Update: It’s working now. Not a bunch of tweaking, just one step.

Remaining remote button mapping – There are several buttons that are not mapped correctly (or at all) on the Hauppauge remote.

Audio routing – I’ve got to scrounge the correct cables to get the audio from the PVR-350 card routed through the onboard audio card, to unify the TV/DVD audio, and so MythTV can control the volume.

Building a PVR: PVR-350 TV out

The Hauppauge PVR-350 card has a tuner, hardware MPEG-2 encoder, hardware MPEG-2 decoder, and TV out. By using the TV out and taking advantage of the hardware MPEG-2 decoder you can greatly reduce the load on your CPU.

However, X11 in KnoppMyth is not configured to use the TV out on the PVR-350 card by default. Luckily, there is a perl script called pvr.pl that will do this for you. First, su to root and run getpvr.pl and follow the instructions. getpvr.pl will ask you some questions and grab the correct version of pvr.pl for you.

Since there doesn’t seem to be a pvr.pl script specifically for KnoppMyth R5A26 just yet, I selected the R5A22 release instead and that seemed to work for me.

Also, the pvr.pl script will configure X11 to use the S-Video output on the PVR-350. If you need to use the composite output you’ll have to modify the /etc/X11/XF86Config-4 file directly.