This weekend was an exercise in frustration. I was locked in a maze of twisty little passages, all different. I was following the dreaded tree of open source dependencies.
I have all of the familiy photographs and MP3’s on a Solaris file server. We primarily use the MP3 on my kids iPods. The kids are always complaining that they don’t have any good music on their iPods, but this is primarily because they don’t really know what songs we already have. So, my wife went to play them some music that she thought they would like. Much to her chagrin, she discovered that when she played the music through the computer monitor speakers, they sounded awful. She wants to play the music through our home theater. One button, no configuration.
I used to have the audio output of the sound card routed to the home theater, but we could hear the TV sound through monitor speakers which was quite annoying. I had no idea how to fix that, so I ended up just disconnecting the cables. Now, we have a Tivo, and I know that Tivo can stream music and video from a server, so the obvious solution was to play the music through the Tivo.
I had played with this a couple of years ago on my previous file server, but the streaming daemon used more memory than I could afford on that system, so I couldn’t just let it run, which defeated the purpose. But since then I got a new server with a lot more memory, so it was probably feasible to just let the service run.
The most popular Tivo server is a piece of software called “Galleon”. It is highly configurable, has lots of plugins for different applications and is written in Java. Great, I thought, I had it working before, it’s probably even better now. So I went and downloaded Galleon.
First thing I noticed is that it isn’t a lot different than it used to be. When Tivo released their SDK, there was a flurry of activity around making all kinds of applications, but after about 6 months or so the novelty apparently wore off, and the development since then is at a trickle, mostly around keeping things working when a new version of the Tivo software comes out. There is some new work being done, but not much. Too bad.
So, anyway, I download Galleon, and install it and the first thing I discover is that although it is written in Java, it uses a native executable wrapper program to start the JVM, and the Main class has been removed, so it can no longer start standalone. Doh! I start looking around, and I find a message from somebody else with the same problem, wanting to run it on Solaris and noting that the wrapper is not available on Solaris. Darn. But a little more looking and I find that it actually is now available on Solaris. Yah. What were the Galleon developers thinking? They had a 100% “write once, run anywhere” application, and they tied it to specific platforms over a minor convenience function.
Okay, now I can start galleon and get it running. It just sits there, because I haven’t configured it yet. I’m almost home free right? Wrong. There is virtually no documentation on how to configure it directly. There is a gui program you need to run to configure it. The only thing is, when I run the gui function, the JVM cores. There used to be docs on how to configure it manually, but they are no longer on the site. Game over.
Back to Google. I know there are other applications for the Tivo. Maybe I can’t have the swiss army knife, but a steak knife will get the meat cut anyway. So for the next half an hour I go through various apps one by one, trying to find one that is suitable. I finally found pyTivo.
The pyTivo program is a Tivo application written in Python. I looked at the docs and checked the system, and lo and behold, I have a suitable version of python already installed. So I went to get the latest version of pyTivo and discovered that it uses a download protocol called “git”, and no, I don’t already have git installed.
Well, I figure that git should be easy enough to build and install. So I download git. I configure and try to build it, then discover that git needs “curl”. So then, back to google, but before looking for curl, I look around a little more and finally find a link to a zipped archive of pyTivo source, so I don’t need git or curl after all.
So, now I build pyTivo and discover that it needs a package called ffmpeg to do the transcoding of the formats into Tivo native format. I find ffmpeg and discover that it is so complex that I don’t even want to start on porting it. Luckily, i found that a fairly recent version is already available on blastwave. So off to blastwave.
I already have blastwave installed, but it was a long time ago, so when I run pkg-get from blastwave, it wants to upgrade itself. But to upgrade itself, it also wants to upgrade its own dependent packages. And so on and so on. And unfortunately, although you can tell it to just go ahead and upgrade everything, it still runs pkgrm and pkgadd, which each have a yes/no prompt that pkg-get apparently will not answer for you. So for the next half hour I sit there typing “y” and
“return” over and over again.
Finally, it’s done and ffmpeg is installed. I configure pyTivo (2 lines changed in a text file) and start the server up, and bingo! Music over the Tivo. Unfortunately, the interface is a little clunky for the Tivo. I have the music organized by genre, artist and album, but since the Tivo can only display about 10 lines at a time and starts from the beginning at each level, it means you might have to scroll through a lot of pages at the artist level to find the one you want. Using iTunes and Media Monkey, you usually do a direct keyword search to find something you want. I might be able to add another layer just for the Tivo with each letter of the alphabet, I’ll have to play with it some more. Actually the worst thing about having to scroll through the whole artist list is now my wife is seeing all the music that I have that she didn’t know about. Our tastes in music don’t exactly coincide.
Unfortunately, the saga doesn’t end there. Having this capability with the Tivo led to having to reprogram the universal remote, which meant I had to track down the users guide, etc., etc. It just never ends.