One type of media that I own is music. This is an easy one, as all of the music that I own fits onto my iPod (and is backed up on many computers). Done.
I also own quite a few DVDs. Now, I can access them fairly easily, but if I want them online I need to rip them, and DVDs take up a few gigs each. This means I need diskspace. Cue some mirrored external FireWire drives - mirrored for robustness, because drives die all the frickin time. Drives will get cheaper in future, so I picked a good price point for now and will buy more in two years. Ripping DVDs takes a while, but now I get my DVDs all instantly accessible.
I have an old-school TiVo, which I love. However, I can't access the shows that it has recorded and save them for watching months later. Or for watching on the plane. This annoyed me for a while, until I purchased an EyeTV 400 - a FireWire digital terrestrial television (DVB-T) receiver. Free DVB-T is pretty big in the UK. So I win over my TiVo, as it is digital (MPEG2 through the airwaves) and it's now portable, so I can time- and space-shift movies to when I'm waiting at the airport. The software is quite nice: screenshot - bear in mind it's an MPEG2 snapshot reencoded as JPEG, it actually looks really good. All is good.
The EyeTV links in with an online TV guide for scheduling, which is OK. However, it can't do automated scheduling, like "record all CSI, and all good movies". Luckily, EyeTV is AppleScript-able, so Perl comes to the rescue. I've just released Mac::EyeTV to CPAN, which allows you to view scheduled programmes and schedule your own.
But that's only one piece in the puzzle. I need schedule information, which generally isn't easy to find. I used xmltv, which has a really annoying configuration process. However, with a little bit of work I can now record all CSI episodes. Now how do I know if a movie is good? Well, xmltv gives RadioTimes ratings, but they suck. Luckily, most of the data behind IMDB is available, so with a bit of hacking of ratings.list, I now record films with high IMDB ratings.
Now sadly programmes tend to clash. I detect this with DateTime::Span and DateTime::SpanSet. Two annoyances: a span has a start and an end (boo! Beginning and end, start and stop, don't mix them) and that it wasn't clear to me that a span from 9:00 to 10:00 clashes with a span from 10:00 to 11:00, pesky fenceposts).
It's all come together. I can record everything I want to record, and it's all ready to be portable or shared to my luxury flats across Europe (cough). Technology doesn't all suck, as long as I get my entertainment. Hacking this all together took an afternoon, and that's the kind of interesting project I like and want to do more of in future. Web sites just aren't da bomb any more.
In other news, I mentioned Apple System Logger in my last entry, which seems pretty much like a well-integrated messaging system, but I'm still the only hit for it... (Updated: "only two hits for it"