Setting jqGrid column width from titles

Lately I've been playing a lot with jqGrid, a very nice Grid / Table plugin for jQuery / jQuery UI. It does some really amazing things including allowing you to have a scrollbar that replaces the standard "next page" / "previous page" that you see in most web applications. I have tables that are sortable on multiple columns that have tens of thousands of results and I can scroll through them easily. It is also easy to leverage filtering, etc. All this takes a touch of server-side code, but it is all astoundingly easy.

The one trick I couldn't figure out how to do was to set the column with based on the Title. In most grids with just a few columns, this isn't an issue - you set the size (in pixels) and go on your way. But what if you don't know the column names ahead of time (they come from the database) and you just want to make sure the column with is a minimum of a number but a maximum big enough to hold the title plus a bit of padding?

After the grid has been created, you cannot programmatically set the width of columns, so it has to be done before the grid is created. Normally you create a jqGrid as such:

    <table id="list"></table>
    <div id="pager"></div>
    <script type="text/javascript">
        var colNamesData = ['Inv No','Date Of the Transaction', 'Amount That Is Owed'];
        var colModelData = [
            {name:'invid', index:'invid', width:55},
            {name:'invdate', index:'invdate', width:90},
            {name:'amount', index:'amount', width:80, align:'right'}];
        jQuery(document).ready(function(){
        jQuery("#list").jqGrid({
            ...
            colNames: colNamesData,
            colModel: colModelData,
            ...
        });
    </script>

To set the column widths automatically to the title, for any column in the column model I added a new boolean attribute resizeToTitleWidth and only resized the column if this was set to true. Here is the new code that resizes the desired columns.

    <table id="list"></table>
    <div id="pager"></div>
    <span id='ruler' class='ui-th-column' style='visibility:hidden;font-weight:bold'></span>
    <script type="text/javascript">
        var colNamesData = ['Inv No','Date Of the Transaction', 'Amount That Is Owed'];
        var colModelData = [
            {name:'invid', index:'invid', width:55},
            {name:'invdate', index:'invdate', resizeToTitleWidth:true},
            {name:'amount', index:'amount', align:'right', resizeToTitleWidth:true}];
        jQuery(document).ready(function() {
            var ruler = document.getElementById('ruler');
            for (var i in colNamesData) {
                if (colModelData[i].resizeToTitleWidth != true) {
                    continue;
                }
                // Measure the title using the ruler span
                ruler.innerHTML = colNamesData[i];
                // The +26 allows for padding and to fit the sorting UI
                var newWidth = ruler.offsetWidth + 26;
                if (newWidth < 100) {
                    // Nothing smaller than 100 pixels
                    newWidth = 100;
                }
                colModelData[i].width = newWidth;
            }
            jQuery("#list").jqGrid({
                ...
                colNames: colNamesData,
                colModel: colModelData,
                shrinkToFit:false,
                ...
        });
    </script>

The key to obtaining the width is the additional hidden HTML span tag with the id of ruler.  This hidden span has the same CSS style as the column header, so we can place the column title text into this span and obtain the width of the text geting the span's offsetWidth. After we have the width, we pad the width with enough extra space to hold the sorting UI.

It would have been nice if the column had an attribute that forced the width to accommodate the the columns title (but allowed for a minimum width, here 100 pixels) but we find that it isn't too difficult to add the functionality ourselves.

The above example is meant to be illustrative rather that a complete working sample. I've put together what should be a simple, working sample you can try.

Console, Cygwin, and Windows 7

My DOS and Unix roots often show - I like using the command line. On all of my Windows-based systems I have Cygwin installed to provide many of the luxuries of Unix / Linux right from my windows system but the window that contains the Windows command line interface (cmd.exe) and Cygwin's bash leave something to be desired. Copy and Paste is a pain and after growing so accustomed to having tabs in my browser, not having tabs to different command lines is a pain (especially when you connect to multiple systems which I often do, especially at work). A few years ago I discovered an open source project called Console. Console is a great little program. It supports copy and paste much like XTerm (just select text and it is copied, middle click and it pastes). I've been using it daily and loving it. It has one major drawback, though, in that it isn't actively updated / worked on. Through Windows Vista that was fine, it didn't really need any work but starting with Windows 7 there is some conflict that keeps it from working correctly. I did some searching but had a hard time coming up with a suitable alternative until I discovered mrxvt. mrxvt isn't actually a Windows program at all but rather is a Unix program written in X that can be compiled and run using Cygwin.

mrxvt

Ultimately, what mrxvt provides is a tabbed xterm (well, a tabbed rxvt to be more precise). Getting it running isn't quite as easy as just clicking install because -a- it isn't a Windows program, they don't provide Windows binaries for it, and because it isn't a package that is distributed by Cygwin... but, it isn't all that difficult. The steps are as follows:

  • FIRST! If you are installing on Windows 7, start with Cygwin 1.7. This may still be in beta, you might want to look here for the beta.
  • Download the Cygwin installer and install Cygwin including X. Follow these instructions to get Cygwin and X installed. You will need the following Cygwin packages (some of which are mentioned in the previous Cygwin/X instructions)
      X-start-menu-icons
      xorg-server
      xinit
      inetutils
      openssh
      xterm
      gcc
      make
      autoconf
      automake
      libiconv
      font-misc-misc (probably already there from the earlier X packages)
      libX11-devel
      all of the cygwin rxvt packages
  • Copy the "XWin Server" shortcut from the "Cygwin-X" program group to "Startup" so Windows automatically starts XWindows at bootup
  • Download the latest (0.5.4 at the time of this writing) mrxvt into your Cygwin
  • Move the mrxvt .tar.gz file to your Cygwin home directory. If the Windows user you are logged in as is named "Kevin", your Cygwin home directory will be "c:\cygwin\home\Kevin".
  • Start rxvt or xterm. The shortcuts for these should be in Start | Programs | Cygwin or Cygwin-X - it should start you in your Cygwin home directory (in Cygwin if your Windows user name is Kevin you will be in ~/Kevin or /home/Kevin - which are the same thing)
  • Extract the files from the .tar.gz with the command, change into the newly created directory
      tar zxvf mrxvt-0.5.4.tar.gz
      cd mrxvt-0.5.4
  • Configure before compilation - if you are missing any Cygwin packages you will probably learn about them here
      ./configure --enable-everything --disable-debug --with-save-lines=99999
  • Compile and install
      make
      make install
  • You can now make a shortcut on the Start menu to launch mrxvt. The Target of the shortcut should be
      C:\cygwin\bin\run.exe -p /usr/local/bin/ mrxvt -display 127.0.0.1:0.0 -ls
  • If you prefer to run CMD.exe (Windows Commmand shell) instead of Bash, you can set the Target of the shortcut to
      C:\cygwin\bin\run.exe -p /usr/local/bin/ mrxvt -display 127.0.0.1:0.0 -e cmd.exe
  • Finally, mrxvt is very customizable. The easiest way to customize it is to create a file named ".mrxvtrc" in your Cygwin home directory. My .mrxvtrc file contains the following content
      Mrxvt.foreground: black
      Mrxvt.background: AntiqueWhite
      Mrxvt.scrollbarStyle: next
      Mrxvt.scrollbarRight: True
      Mrxvt.xft: True
      Mrxvt.xftSize: 16
      Mrxvt.xftAntialias: True
      Mrxvt.command: /usr/bin/bash -l

Hopefully one day soon Console will be updated and support Windows 7. I don't really love having to run XWindows to get a tabbed console that supports nice copy and paste, but for now this solution works.

Know of a better, simpler solution? Let me know!

TV Shows">Amazing Movie, New TV Shows

I saw the previews for Zombieland a few weeks ago. It showed some promise, but too many movies show promise and fail to deliver. I am happy to say that Zombieland delivers and in spades. I went to see it at the local gigaplex... they were offering it on normal screens and on "Giant Screen" which means they project it on their IMAX screen but without the extra IMAX features - it's large but it doesn't consume the whole screen. Anyway. It was a fun, funny movie: Dripping in style, great writing, nice effects. There isn't a single thing I would change about it. If you like comedy zombie films like Sean of the Dead you should check this out. Woody H. was a perfect choice for co-lead on this film. Jesse Eisenberg was also a very good choice although I kept thinking he was going for a Michael Cera thing throughout the movie - I could almost hear the director shouting "do more Michael Cera!". Not to be missed (but probably not for the kiddies).

On to some new TV shows (or new to us, anyway). We finally started watching Lie To Me after my sisters urging since it started. We're really enjoying it and trying to catch up so we can start season 2 which the TiVo is recording for us. We're enjoying Glee - sort of an American Idol meets sit-com. The first episode of Community was a huge train wreck, in our opinion (which is too bad, we like most of the people), but the second episode redeemed it self a bit and was watchable - we'll see how it shapes up. Parks and Recreation is still "pretty new" and is continuing to show promise. The Forgotten is very Cold Case-ish but we're enjoying it. Sons of Anarchy isn't terribly new to me (I loved season 1) but if you aren't watching it, go get the season 1 DVDs and get busy. Finally, Flash Forward is showing real promise - very interesting premise and solid execution so far.

Sad, Yet Thankful

My dad, the best man I know, died this last week. He battled cancer for a couple years and finally it got the best of him, although he put up a good fight.

I am thankful for good doctors. Even though he endured surgery, chemo-therapy, and radiation treatments I am thankful that at the end he was only in the hospital for about a week and the suffering was controlled reasonably well. I am thankful his brother Jim and all of my siblings and I made it to see him, talk with him, and laugh with him one last time before he died. He generally appeared to be asleep, but he was often responsive even when you expected he wouldn't be.  I am thankful for what a great man he was, what a great role model, and what a changer of lives he was.

I am thankful for friends who know how much my father meant to me and have helped and supported me through this, each in their own unique way. I am thankful for my siblings who share my sadness and were able to be with me last week with me, making it that much easier to bear. I am thankful for my amazing wife who is always by my side (and reminds me to come to bed when I am up re-writing my blog at 3am for the 10th time because I can't seem to write exactly what I am feeling).

I lost my mom in 2001 to cancer. I miss her every day, but I am thankful my dad found Ann. Ann and her family were not only a blessing to my father, but they continue to be a blessing to me and my family. Thank you Ann (and all of your wonderful family).

Not the least of all I am thankful my parents chose me. They loved me unconditionally and even through great distances of time, space, or life they have never and will never leave my side or my heart.

Foaming Hand Soap

I love the foaming hand soap. I don't recall where I used it first but over the last couple years it has become very popular - we use it exclusively at home (we evening use foaming dish soap when we do dishes in the sink) and we find it in more and more resturants, etc.  I think the soap folks know that people really like the foamy stuff so they charge a premium for it. I just did a search on FreshDirect (which I am sad that I cannot use at our new apartment because we're too far away) and I found that 7.5 ouces of Dial Antibacterial Liquid Soap is $2.19 while 7.5 ouces of Dial Antibacterial Foaming Hand Wash is $2.99. In the past I have paid the premium for the foaming stuff becase I really do like it better, but I'll let you in on a secret I learned not long ago...

What makes this foaming soap special is not the soap - it is, I believe, the exact same soap! The difference is the pump's dispenser. Make a one time purchase of the soap in the foaming soap dispenser and but then when it is empty keep the bottle. For all future purchases buy the less expensive non-foaming variety. What is even better is that you don't use the entire bottle! Put about 1/8 of the non-foaming liquid in the foaming bottle and then fill the rest of the bottle with water (this is a necessary step - the non-diluted soap is too thick for the foaming dispencer). Give the bottle a little shake and now you have foaming soap. For $2.99 + $2.19, a total of $5.18, you now have nine bottles of foaming soap - that's about $0.58 a bottle. Just continually refill the foaming bottle with this soap-water mixture until the pump breaks.

MP3 Tips">MP3 Tips

I am an audiobook lover. I've come up with some steps and software that will aid you on your quest if you're like me and want to enjoy your audiobooks on your iPhone or iPod (most steps apply to listening on any device).

Before I get into the gorey details below, I will mention that Audible.com can be an excellent source of audiobooks. They make it very easy to buy books, get them on your device (without all of the steps below). You will own them as long as Audible exists and can delete them from your device and re-download them later.  I like Audible, but while they are somewhat reasonably priced they aren't free. The below steps will aid you in getting audiobooks on CD that you own or have borrowed from the library onto your device.

Finally before we get started: if you are checking out audiobook CD's from the library, please respect the system. If you have borrowed the audiobook for 3 weeks and gone through the process below to get it onto your device, please listen to the book and delete it once your lending period is over. I'm not encouraging you to steal audiobooks, I'm just trying to give you a more convenient way to listen to the ones you have. Certainly if you have bought the audiobook CD's, keep them on your iPod as long as you like. I have recently found the Amazon is sometimes selling the audiobook CD's nearly as cheaply as the hardcover. I'd love to see audiobooks become even more mainstream.

Ripping the book to many MP3s

  1. As I mentioned before, don't forget your local library. Most libraries check out audiobooks on CD (skip the tapes these days). Many libraries even have "download" support for audiobooks that uses the "Overdrive" service. These are a great source of free audiobooks. Also of note, Cracker Barrel restaurants rent audiobook CD's at a modest price last I checked.
  2. There are a ton of CD ripping programs out there. My personal favorite free one is CDex. If configured correctly, this will rip a CD right to MP3 using the LAME encoder which is a really great, free MP3 encoder. I suggest ripping each disc to its own folder. Make sure before you rip that you are giving filenames that include a track number. In CDex, go to Options | Settings | Filenames to change the filenames it writes and the directory to write the files to. I prefer a filename setting similar to "%1\%2\%7 %4".
  3. When encoding music, a high bitrate in stereo is preferable (at least stereo, 160 kbps). When encoding an audiobook, I always generally encode at 64 kbps, mono, 44.1khz frequency, CBR (constant bitrate). I don't recommend VBR (variable bitrate), especially  for audiobooks.
  4. For tagging MP3 files, I love the free program Mp3tag. It's pretty easy to use and does pretty much everything.

Renaming & Re-tracking the MP3s (so you can merge them)

    1. Start Mp3tag
    2. Set the "Directory" (on the left) to be the folder that contains all of the folders. The right pane should then contain all of the files from the audiobook, across all of the discs.
    3. Sort the files in the right pane by "Path" but clicking on the "Path" column header. Scan through the list, it should now be ordered by disc and within a disc it should be ordered by track number (this order should be the correct order for the entire book).
    4. Select all of the files for the audiobook (click on one file, then press Control-A). We will now renumber the tracks numbers. Select Tools | Auto-numbering wizard (or press Control-K). Make sure "Leading zeros..." is checked and "Reset counter..." is not checked. Click OK.
    5. We want to rename the files to include this new track number. All of the files should still be selected. Select Convert | Tag - Filename (or press Alt-1). A format such as "$num(%track%,4) - yourbookname" is probably appropriate. The "4" specifies the total number of digits (padded with leading zeros) that will be used in the filename when writing the track number. "4" is good for books with 1000-9999 tracks. If you have fewer than 1000 tracks, you can use a smaller number than "4".
    6. Now that we know the mp3s contain a track number that is unique across the entire book and that this new, unique track number is reflected in the filename, we want to move them all to a single directory. Still with all of the files for the book selected, select Edit | Move. Select the single folder you want all of the files moved to. Once you click "Select Folder" Mp3tag will move all of the files to that folder.

    Merging the MP3s

    1. The next thing we want to do is to merge all of these files into a single MP3 file. Currently my favorite program for doing this is MergeMP3. Start MergeMP3 and drag all of the files you want to merge to the MergeMP3 window. Make sure the order is correct (look at the track numbers in the filenames) - if the order is incorrect, click on the File Name column header once or twice until the order is correct.  Check the "Include ID3 Tag" and fill out the information for the ID3 tag. I always specify a Genre of "Audiobook" for my audiobooks. Select File | Merge to start the merge process. I generally write the merged MP3 file to a filename such as "author - booktitle.mp3". This merge process will just take a few seconds (maybe a minute or so for a long book).
    2. You now have the entire book in a single file. You don't need to keep the individual files you used for the merge - you can delete them.

    Adding the Merged MP3 to Your iPod / iPhone

    1. Assuming you are using an iPod or iPhone, drag that single file file into iTunes.
    2. By default, the new MP3 will appear in Music, but we don't want it there. Search for it in Music then right click on it and select "Get Info".
    3. First check the Info tab. Make sure it is tagged how you want it. Make sure Name, Artist, and and album are filled in. Make sure Genre is "Audiobook". Second, go to the Options tab. Change the Media Kind to "Audiobook" and check both "Remember playback position" and "Skip when shuffling". Third, go to Artwork. In a web browser do a Google Image search for your book's author and title. Once you find an image you like, click on it to open it and then the click on "See full size image" (top left). Drag the image into the iTunes Artwork box. Now close the iTunes window by clicking OK. It may takes iTunes from a few seconds to a couple minutes to write the new details to the file.
    4. The book will now be located in iTunes not in Music but in Audiobooks. On the left, click Audiobooks to see that it now appears there.
    5. Sync your iPhone or iPod and you are ready to start enjoying your book "on the go".

    Downtown Dallas Disappearing

    I attended my cousin's wedding which was great! It was a wonderful ceremony, a couple great partys, lots of good food and it was really great to see family that I don't see nearly enough of. I wouldn't trade my family for any other I have ever met... and my great family just keeps getting bigger with more great families. Congratulations to John and Kate!

    While we were in Dallas for the wedding, the missus and I stayed at the Hotel Lawrence. The "main" wedding hotel was across the street at the Hyatt but the missus and I love to venture out and find new and interesting places. Lawrence is trying to be a "boutique" hotel. They aren't yet quite there, but they are getting close. We enjoyed our stay there, but it could use just a teeny bit more polish before I would call it complete (you can tell they are trying hard, though).

    Both the Lawrence and the Hyatt are in the "convention" area of downtown Dallas. This is adjacent to "West End" and a couple miles from "Deep Ellum". I lived in Dallas for about a year during college and both West End and Deep Ellum have a special place in my memory as fun spots for shopping and night life. I took the missus to both a few years ago when we were in Dallas and we went back this last weekend to see them again. Sadly, both West End and Deep Ellum are both all but gone. With the exception of just a small handful of restaurants, everything is closed. This is so sad to me.

    Happily, we were able to take the TRE train (almost) from DFW airport practically to the door of our hotel (it took a couple buses to get to the train, but they were both DFW buses and it was really easy). Coming home wasn't quite as nice as the TRE train we used to get to the hotel doesn't run on Sunday. How stupid. Just as stupid, the TRE only seems to run about every 90 minutes on Saturdays. We were going to take the TRE west to do some shopping (since there isn't any shopping near our hotel since West End Market is now closed) but since we just missed the TRE train, we wouldn't have time to catch the next one and be back in time for the wedding. Oh well. We looked at taking one of the other trains, but their guides don't do a good job of telling you what trains stops are convenient to what shopping the shopping trip was pretty much a bust. Dallas folk just haven't even remotely gotten the hang of public transportation. Sure, when I lived in the southwest I had a car and never used public transportation for anything but now that I use the subway, buses, and trains for almost all of my everyday needs, I am sad whenever I visit a city with a bus and/or rail system that just doesn't do what it should. Other cities really need to take more notes from NYC, DC, and Boston.

    DNS Alive Again. My FIOS story.">DNS Alive Again. My FIOS story.

    I had Verizon FIOS a few years ago when we lived on Roosevelt Island and I loved it. It is considerably faster than DSL or Cablemodem. When I learned our new apartment could get FIOS (for Internet / TV / Phone) I decided (well in advance of moving) to get it. There was a slight mishap with the installer not showing up, but that was probably because I changed the order somewhat late (adding TV, Phone to the order). Oh well. The installation went pretty smoothly (although several days late). The service worked, as advertised, right from the outset giving me almost 20 megabits down and 4 megabits up (which is pretty fast).

    The problems appeared a couple days later about 10 minutes after I hooked up my desktop PC and changed the wireless settings to a more secure configuration. I didn't appear I was getting any Internet traffic at all. I determined there must be an outage so I called Verizon tech support. They had me go through the normal steps (reboot, etc.) but we determined pretty quickly the problem was at the router. While there was connectivity, my router wasn't passing DNS. A hard reset of the router solved the problem. I hoped it was an isolated incident.

    Not long after this I determined that this problem occurred (the router losing the ability to server DNS) 1 - 20 minutes after I connected my desktop PC (a specific computer). Highter internet traffic seemed to make the problem occur faster. The router would happy talk to the Internet, but it just wouldn't resolve names (so I could go to the web site http://74.125.45.100/ but I couldn't go to http://www.google.com/).  It was definitely something that only occured when my desktop machine was connected and fixing it required a hard reset of the router. This happened when the desktop machine was connected to the router on absolutely any port and with any Ethernet cable.

    "Just in case" I did full virus, spyware, etc. scans of the desktop machine but I firmly believe there is nothing the computer should be able to do to make the router stop passing DNS. I have since talked to several Verizon techs (and network folk in general) and they all agree on this point. For what it's worth, my PC got a clean bill of health.

    I talked to Verizon again on Thursday and we came to the conclusion it was either an inherent problem in the Actiontec router or it was a problem with that specific unit. He over-nighted me a replacement router. The "new" router appeared last night and it quickly exhibited the same problems. I called Verizon and that tech strongly doubted the problem was the router and insisted it must be my machine, despite the fact that that machine worked correctly for years with my Linksys WRT54G router.

    Knowing (from previous conversations with Verizon) that I could have Verizon switch the FIOS ONT (Optical Network Terminal, where FIOS comes into the apartment) from passing Internet on coaxial cable (the FIOS default) to Ethernet, which would allow me to remove their Actiontec router from the mix and allow me to use my own Linksys router, I started investigating the Ethernet wiring that existed in my apartment. I did a bunch of reading on Cat5 cables, the specific wires in the cable that were required, and how the jack in the walk should be wired and inspected the patch panel in the closet. I determined that the Ethernet jacks were wired to the patch panel, but the jacks themselves were wired incorrectly (silly installers). I re-wired the jack (at the wall) and then attached an Ethernet cable to the patch panel and tested that the wiring in the wall was now passing from my new cable to the jack in the wall. I was all set.

    I called Verizon again and asked them to switch my FIOS ONT Internet from coax to Ethernet. This took about 15 minutes. After a bit of fuss (and double checking some of my wiring) the FIOS Internet was now running through the wall to my Linksys router, the FIOS TV was running on coax (still), and I didn't need that stupid Actiontec router any longer because my TiVo HD uses cable cards (I don't use a Verizon Set Top Box).

    I've now been running with FIOS via my (5+ year old) Linksys router and it is both faster and passes DNS traffic without a hitch. I am so happy to be free of that stupid Actiontec.

    I wish I knew what the desktop machine was doing that the Actiontec didn't like, but it doesn't matter anymore.

    M-O-O-N. That spells Moon.

    Yesterday was the first I heard about the new movie Moon. It was described as sci-fi, a bit like 2001, which sounded interesting. It was directed and the story written by Duncan Jones, the son of David Bowie. I looked it up and discovered that it was out in limited release and was showing in New York City. As I had some free time last night (the missus was at the ballet with a friend) I went over to Times Square and saw it.

    The comparisons to 2001 are appropriate - if you see Moon and don't feel it is reminiscent of 2001, you need to have your head examined. While I don't want to give anything away, I will say it moves slowly but deliberately. It is an interesting story that unfolds nicely and the goal, unlike lots of sci-fi, isn't to scare you - this is sci-fi not sci-fi-horror. What it is missing from 2001 is the acid-trip ending (while I like 2001's ending, it is probably a bit out there for most). The music, done by Clint Mansell, it is (not surprisingly)reminsiscent of The Fountain.  I was going to attach a tailer for the movie, but I think the trailer gives away too much. Resist the urge to read about the movie or see a trailer and just go see it.

    Busy busy busy

    The week before the move I went to the JavaOne conference in San Francisco. It was a fun week, I learned new stuff and reinforced other stuff I already knew.

    The missus did some packing while I was gone. After I got back, we boxed and boxed and boxed. We had most of it done but the last odds and ends always take longer than expected and we didn't finish until the wee hours of the morning before the movers came. The movers arrived a bit early (which is nice) and they did a good job - I would recommend them. They must have used a CASE of packing tape - those guys go crazy with packing tape and moving pads (which is great). We now have a cube of boxes in the living room ready to be unpacked but the furniture is in place, which is nice.

    Our new place is considerably larger than the previous three places we loved, which we love. The train is much closer and noisier and will take some time to get used to, be it is already fading into the background for us. I didn't even notice the trains the last two nights, for the most part.

    Saturday night the missus and I went and finished cleaning the old apartment. She is shampooing the carpets this morning (thank you, missus!). By mid-day everything should be done at the old place.

    The FIOS guy came on Sunday and installed my super-duper-fast Internet (about 20 megabit). I had FIOS a couple years ago and have missed it. The FIOS TV seems as good or better than Cablevision and the channel layout (SD vs HD) is more logical, I think. I'm happy with it so far. I tried to just use an antenna to get over-the-air HD channels, but it wasn't stable enough for our TiVo habits.

    So, the road ahead is clear - unpack, unpack, unpack and wedding, wedding, wedding (three more weddings in three different states this summer). Maybe sometime in there we'll get a couch or love seat for our new larger living room -I'm looking forward to that!