There is little to actually review about the TiVo Cachecard, but I will try to do my best here for those interested. Soon after the TiVo’s release, enterprising hackers figured out ways to expand the system’s capabilities. One of the more common modifications is adding additional hard disks (or replacing the hard disks entirely) to increase the recording time of the unit. The problem with this is that as you expand the capacity of your TiVo, you really do start exceeding the design intent. While the TiVo works with gigantic drives, as the number of recorded programs increases so does the amount of time it takes to work with that program database. People with expanded TiVos generally notice delays (sometimes very large) when doing everything from simply viewing the “Now Showing” listings to Adding/Rearranging their Season Passes. The problem is that the TiVo stores this database on it’s disks, which are already being abused by recording and playback of the video streams. This isn’t so much of a problem when the database is small, but as it grows, it slows.
The CacheCard is a expansion card for the factory test connector on Series 1 TiVos. The card has a single DIMM slot that accepts industry standard PC133 512MB SDRAM. When the proper drivers are installed, they create a cache of the entire TiVo program database in that memory, and all read requests for the database now hit off of that cache, instead of the disks. The net effect is that database access time is drastically decreased, by 2-3 times. In addition to the memory slot, the CacheCard also provides a 100BaseTX Ethernet controller (since most “TiVo Hackers” are already using the factory test connector for an EtherNet adapter and the CacheCard would displace that).
Installation was pretty straightforward, but then again I had already installed a TurboNet card in my TiVo a few years ago, so it would be more involved for someone “starting from scratch”. I downloaded the “native” driver installer (that runs directly on the TiVo) and ftp’ed it over to the TiVo. I telnetted in and installed the driver software. I then shutdown the TiVo and took the cover off. I removed my TurboNet card and replaced it with the CacheCard without issue. It’s a real tight fit (even moreso in the DirectTiVos, I understand), and both the DIMM socket and the card connector were both pretty tight, but I squeezed it on there. I connected the network cable to the new card and booted the TiVo. After the gray “Just a bit longer” screen appeared a cool CacheCard screen was displayed. Unfortunately for me, this screen was red and said Error on it. This was real bad news for me.
I tried reseating the RAM and the card itself and tried again, but still no dice. I disconnected the network cable and removed the ram, and tried again, and still no dice. This time I let the TiVo boot completely and did the remote control trickplay to bring up the Unix log files up on the television. I saw that the TiVo wasn’t recognizing the card properly, so I shut things down again. This time I really jammed the hell out of the card and the RAM, really pressing hard on it, and then rebooted again. This time, I got a blue CacheCard screen instead of a red one, and there was a little progress bar showing the caching/verification status.
This initialization process on boot takes quite awhile. It seems to copy the database into memory, then verifies the copy (to make sure there were no copy errors), then it “caches”. I’m not quite sure what it is doing in this step, being that the database had already been copied over, but the net effect is that the boot process now takes about 2-3 minutes from it’s stock .5-1 minute. But that tradeoff is definitely worth it…. When the TiVo was finished booting I brought up the Now Playing menu and it appeared instantly for the first time since I added 80G to the TiVo. I then went to the Season Pass Manager and rearranged the order of two of the passes. When I “committed” the changes, it still took awhile to resolve all the dependencies, but it went much faster than before. As far as the “primary intent” of the CacheCard, it passed with flying colors.
Finally, I wanted to test the network performance of the CacheCard. The first network card for the Tivo was the TivoNet, which provided an ISA slot off of the factory test connector which a 10Mbps NIC was inserted into. The next generation of NICs for the TiVo was the (aforementioned) TurboNet, which was a “native” 10/100 NIC for the TiVo. It offered increased performance (although the top throughput of the card wasn’t anywhere near 100Mbps due to limited bandwidth on the factory test bus). Later the AirNet was introduced, which provided a PC Card slot for an 802.11b Wireless NIC. The CacheCard advertised increased performance over the TurboNet card, which was impressive, but I was skeptical. After pulling a few program streams down off the TiVo last night I can say that their claims are true, the CacheCard NIC is about 20-30% faster than the TurboNet. In addition, since the disks inside the TiVo are now being used less due to the database cache, things like Tivoweb run faster as well.
I think the CacheCard is a very impressive product, and I highly recommend it to anyone who has expanded their Series1 TiVo. It is a pretty easy install and the benefits are clearly tangible. It’s almost a no-brainer.
I played \$2/4 Hold’em last night at a home game in Cambridge, and I ended the night down \$16. I overplayed a bunch of pocket pairs, I still haven’t developed the discipline necessary to be a good player. I am still in the middle of reading poker books, so I pretty much sat down last night for fun, but I hate losing money either way.
Tonight is the Mum concert with , , equalize and his friend Michelle. I think we have one extra ticket if anyone is interested. I might be videotaping the show for the Brainwashed Eye along with Jon, but we’ll see. He’s interviewing the band before the show, and they are playing two shows tonight (6pm and 8:30pm), and we are going to the later show, so I’m not sure which show he plans of filming.
After work, I met up with and her friend Sara (who was in town for a Slow Food tasting/fundraiser event) at the apartment. After chillin’ for awhile we headed over to BU for the actual event, which was awesome. There were like 11 restaurants and vineyards represented there, and while Corinna was there to taste wine, I was there to taste food. I had some fantastic aged beef from Grill 23, as well as a lovely roulade from Caffe Umbra.. There was plenty of other fantastic food, but it’s too much for me to recount it all. :) After the tasting we dropped Sara off at South Station to catch her train.
After we got back, Corinna went to bed and I installed the CacheCard in my TiVo. I had some trouble getting it seated, but once I did it worked like a champ. The TiVo takes about 3x longer to start (it has to copy the entire 512MB database onto the DIMM), but once it is up and running it screams. The “Now Playing” menu, which used to take 5 seconds or so to appear (due to the increased program capacity afforded by my second HD in there) now appears in “no time” (not long enough to really count). I also rearranged a season pass, and while it still took a significant amount of time, it was MUCH less than before. I don’t have any actual benchmarks, so you are just going to have to trust me when I say it’s faster. Note to : Send me your stupid address already! I have mailed your CSH address several times asking for it and haven’t heard anything back.
We will be having a ice-cream social on Wednesday, June 23 at 2:30 pm in the Cafeteria. All are invited.
grahams - - 1 min read
Eye Q Optical had the same frames I had in a different color, so I now have Black and Blue frames (as opposed to Brown and Green). They gave me a discount on the replacement too and had them ready in like 30 minutes. Hopefully this pair doesn’t break again, but who knows… After getting the glasses we went to the Fenway 13 theatre to see Dodgeball, which I really liked. Everyone at the club seemed to agree that we are growing tired of Ben Stiller’s schtick though. Vince Vaughn was really funny, and there were some great gags in it. In addition, I wholeheartedly welcome the return of Jason Bateman to the screen.
I got a Gmail account over the weekend, seems pretty cool, although I’m not a big webmail user. And grahams was taken as a username, so I had to pick something else, which sucks.
Last night I saw Skinny Puppy at Avalon. I wasn’t expecting much, but I was really impressed… They pulled off a good show and I really enjoyed it. Sure they may just be a visage of their former selves without Dwayne, but they can still kick out a brap. They played some OLD songs (Glass Houses, Smothered Hope, …) which really surprised me.. It was a good balance of new and old (and their new album isn’t too shabby either). I also got a new t-shirt to torture my mother with..
I really felt out of sorts at the show last night. It seemed like everyone was either 18 or 40, and I felt like the only guy in the middle. I guess that’s what happens at a gig for a band who is 20+ years old, but still. Plus I have given up “wearing all black”, so I was set apart once again. Tweaker was the opening band, and they weren’t terrible, but they were definitely very Stabbing Westward-level industrial blah…
My glasses broke this morning, so after gets out of the shower she is driving me to the glasses place so I can hopefully rectify that situation.
I got into an argument with someone regarding an interview question. The question is “write a function to print out the fibonacci sequence”, and then the person went on a rant about someone they interviewed who solved the problem but didn’t use recursion. His argument is that using recursion showed a bit more “programming prowess”, but the problem I see is that with a recursive solution you end up recomputing terms you have already computed (This iteration’s (n-1) is the prior iterations (n-2). In addition, with a recursive solution you have to give an upper bound to the series.
In my mind, a simpler solution would go something like this:
int main() {
unsigned int current = 0;
unsigned int previous = 1;
while(1) {
unsigned int new = current + previous;
printf("%i ", current);
previous = current;
current = new;
}
}
Voila, problem solved without inane stack growth. There are possibly other (even “better”) non-recursive solutions to this problem, but in my opinion, this would be a “good enough” answer if I was interviewing someone. Of course, I rarely am interested in making people write code on whiteboards in interviews, so I probably wouldn’t ask it in the first place, but that’s a different story. This argument reminds me of one awhile back where someone was arguing that you don’t always need to use the bounded string functions in C because sometimes you “know how much space you need”.
P.S. I do realize that without a ceiling on the calculation I will eventually roll the int over, but that’s tangential
P.P.S. Of course using new as a variable name was a bad choice (since it is also a C++ keyword), but again, that is tangential, so stop whining at me about it.
and I decided against going to the “secret screening” last night; I wouldn’t say we were “movied out”, but it was more we were tired from so many nights out this week. We stayed in and watched Pitch Black, which wasn’t bad at all (wasn’t great either, but it wasn’t bad). It definitely had the nice " Aliens Ripoff" feel, but so what, it’s not like Alien was wholly-original either.
After the movie, I spent some time fixing my photos, which are now back up. If you poke around it you will see a bunch of pictures I added late last week but forgot to mention, including a few of and slacklining, ’s Graduation, and pictures of Corinna’s brother’s sculptures.
Sci-fi nerd-of-the-moment, Cory Doctorow, gave a talk at Microsoft about why DRM is a bad idea. It is a pretty good read, perhaps I will read some of his fiction now.