New PrimePress Theme Installed

Send to Kindle

I have been wanting to change the theme on this site for a while. I am not all that sure why, perhaps, just because it’s so easy to do with WordPress. I liked the theme that I had for the most part, but I wanted an even cleaner, simpler, sharper look.

For a while, I toyed with putting in one of the newer, more complicated (as in flexible) theme frameworks, specifically, Hybrid or Carrington, and really tweak them to my liking. While I might still do that, I know I don’t have that much time at the moment. While looking around, I stumbled on the following theme: PrimePress. I liked it a lot.

So, I just made it live on the site. I made two changes:

  1. I removed the rotating headers (I actually liked them a lot, but it’s a waste of space on this blog from my perspective)
  2. I substituted my name for the Copyright holder rather than the title of the blog

For now, that’s it, though I might tweak it a bit in the coming days (probably not). I’ll take a look again in a few weeks when WordPress 2.7 is released, and see if there are any themes around that take full advantage of that, but still look this clean. If so, I might switch again.

For now, welcome PrimePress! 🙂

Welcome Vista x64

Send to Kindle

I wrote quite a while ago that I had ordered two new laptops for Lois and me, with Vista x64 on them. They took a lot longer to arrive than anyone thought (including the vendor, PowerNotebooks), due to delays in getting the LCD’s from China.

Because of all of the delays, I had to keep updating my shipping address (we’re nomads). Unfortunately, while I communicated the correct address by the time the machine actually shipped, due to human error (which originated at the vendor, but then was replicated at UPS), they shipped to the apartment, even though we were at the house. They arrived at the apartment at 7:45pm last Thursday. Once I verified with the doorman that they were there, Lois and I drove the 2-hour round-trip in the rain to bring them back to the house.

I didn’t boot mine until the morning, knowing that if I turned it on at 10pm, I would have stayed up all night. 😉

I wanted to blog about my first impressions on Saturday, but I’ve been wildly busy (largely with the new toys, but with a number of other things as well) that by now, it’s no longer fair to call it a first impression, since I’ve been using the machine full time for five days now.

First the bottom line, for those who don’t care about details (and are annoyed to have read through the intro already!): I love Windows Vista x64, and I love this particular laptop even more!

OK, on to the details, for those who care.

First, the machine, because it’s the most awesome laptop I’ve ever used. There’s only one thing I am not crazy about on it, and I’ll definitely get used to it (thankfully, I always do!).

Here’s a link to the base model of my machine. I upgraded a number of the features, notably:

4GB low-latency RAM
1920×1200 screen res
Intel P9500 low wattage CPU
4GB Turbo Memory
320GB SATA 7200RPM Disk
Windows Vista Ultimate 64 bit

Most of my friends have Macs, and they swear by them. I made a career on Wall Street deploying NeXT machines, so I full well understand the power of the Mac. There are many reasons why I haven’t been tempted to buy one, but near the top of the list is the fact that you are locked in to their hardware, and you pay a premium for the privilege, in every respect!

This machine is customized and tuned to my exact needs. And even with the above tweaks, it’s cheaper than a high-end MacBook Pro (yes, yes, I know that they look cooler, ooh…).

This machine is a screamer. I simply can’t believe how fast things load, and how fast they run. One example (of many!) is iTunes. On my pretty damn fast Windows XP machine (it had a Desktop Pentium IV running at 3.4GHz!) iTunes took forever to load before even showing the Loading Library message. On this laptop, you better not blink. You never see the Loading Library message, as iTunes is already open a second after you double click the icon. Wow.

But, the additional 4GB of Turbo Memory (the equivalent of built-in Windows Boost) is amazing. I recently wrote about my new favorite program, Digsby. While Digsby runs fast enough (even on the old machine), it actually loads quite slowly. While acceptable on the new machine, it was one of the few apps that wasn’t screaming. I config’ed it to run from the Turbo Memory, and it’s now a screamer too. Other programs that ran nearly instananeously anyway, are now truly instantaneous. Awesome!

One final word on the machine, it’s cool! No, I don’t mean cool, as in design cool like a Mac. I mean it runs cool. After it’s on for 12 straight hours, you can touch the bottom of the machine, and it’s not even warm! Practically every laptop I’ve touched in the past five years (this wasn’t the case 10 years ago!) runs hotter than an oven. You can’t put them on your lap, ever. This one feels like it wasn’t even turned on.

There are two reason why I chose the low-wattage version of the Intel CPU (25 Watts instead of 35). The first was so that it wouldn’t run so hot (man, this was a bigger win than I expected). The second is related, and that is that if it doesn’t run so hot, it would be quieter (Lois’ last machine was louder than a Jet Engine!), because the fans wouldn’t have to work overtime. This machine is whisper quiet, all day, every day!

Now the one thing I don’t like about the machine. The keyboard layout is different enough from my last machine that I keep having to look to hit certain keys (notably, the arrow keys, which are too tightly placed, and the delete key). Also, while there is a full-size shift key on the left, the right hand shift key is chiclet-sized. The enter key is a little small too. The tactile feel is OK, but pressing keys makes a louder noise than I care for, making me self-conscious when I type while Lois is asleep (happens more often than you’d think). I always get used to new keyboards, so this too shall pass, but at the moment, it’s the only annoyance I have with the machine…

I agonized for months about which OS to run on my (eventual) new laptop. I really wanted it to be Linux. I was tired of the Microsoft treadmill. I like Linux, so that wasn’t going to be a problem (I really like administering my own server). However, I knew that I would have to run Windows (any flavor) in a Virtual Machine (VM), for a number of applications that I really don’t want to live without (yes, I can easily live without them). The more I thought about it, the more I realized that I was just copping out to not just recommit to another round of Windows on the new laptop.

So, with that, I had to decide whether to stick with XP, which I basically like (I certainly don’t love it), or give Vista a shot, or wait until Windows 7, etc. After helping a friend with a new Vista laptop, I was an instant hater of Vista, and quite vocal about it. I blogged about how stupid Microsoft was for forcing people to take Vista instead of extending the life of XP (which they ended up doing at least twice!). So, I’m not coming at this from a fanboy perspective.

Then I heard from a few friends that after installing Vista SP1 (Service Pack 1), their machines became rock solid. When my friend’s machine was overtaken by spyware, I agreed to clean it for her. It was as painful dealing with it as it was the first time. But, after fighting it for a few hours, I was finally able to force SP1 to install (from a USB key, which I downloaded SP1 onto from my XP laptop!). Once SP1 was on the machine, it became completely stable.

That gave me at least the courage to consider Vista. I started reading as many blogs as I could about people’s actual experiences with it. The more I read, the less nervous I was. People were also raving about Vista x64. I wanted the benefits of extra memory, the Turbo Memory, etc., but I was worried about compatibility. Most people said it simply wasn’t an issue. So, nervously, I chose the x64 flavor.

I am very glad I did. I can’t believe how well the 32-bit emulation/virtualization works. It’s invisible. Everything installs normally (no warnings, just into a separate “Programs (x86)” directory. You can’t feel any difference in the speed (at least not on this class of machine). Programs that I was really afraid would give me a hassle just worked, perfectly, the first time.

In addittion, quite a number of programs are available in native 64 bit versions, including iTunes!

So far, there is a single program that I have that doesn’t fully support Vista x64. Palm Desktop. Even that runs in 32-bit mode, correctly (even though their page doesn’t even make that claim, simply stating that the application isn’t supported on 64 bit operating systems, implying it won’t even install!). The only thing that doesn’t work (and it’s a biggie!) is that they don’t support Hot Syncing over a USB cable (which I really need, regardless of the fact that I have built-in Bluetooth support on the machine and on my Treo 755p).

So, they were too lazy to get a 64-bit USB driver coded? Seriously, that’s all that’s missing. And people wonder why Palm is going out of business as fast they possibly can. Mac is going 64 bit, Vista is, the world is (eventually), but Palm can pretend that it just doesn’t matter to them…

Am I annoyed? A drop, but it will simply accelerate my switch to a non-Palm phone, even though I’m reasonably happy with my Treo (I started with the 650, upgraded to a 700 and then to a 755, so they will be losing a very loyal customer), I will likely get a Google Android phone, whenever the right model becomes available on Verizon (I’m currently a happy Sprint customer, yes, the only one perhaps, but they too will be losing me over issues like this…).

So, that leaves 32 vs 64 bit decisions. For example, there are versions of Firefox (my default browser) that are 64 bit (code name Minefield). After thinking about it a lot, and reading a lot, I decided that I’d rather go for the latest build, supported by Mozilla, with the latest security patches. So, I have gone with 32 bit versions whenever the 64 bit version isn’t natively supported by the vendor. I have had zero regrets. Firefox screams, Thunderbird screams, Google Chrome screams, etc.

I was a tad worried that apps like Sling Box wouldn’t work well. Wrong. Not only is it running nicely, it’s the latest version (which was an upgrade for me) 2.x. It even correctly updated the firmware on my Sling Box at home (300 miles away at the time I did it) over my Verizon FiOS link (which is fast enough for me not to have worried about doing it remotely!). Of course, my Poker software runs too, whew! 😉

So, other than Palm being stupid and lazy, I haven’t found anything that didn’t just work. Any compatibility issues between my favorite XP apps and Vista were theoretical, thankfully. I am not giving Vista the credit for the speed improvements, as I bet that this laptop would have run XP way faster than my old one did, but still, Vista hasn’t slowed me down, or gotten in my way.

Since the machine is fast, I have all of the animations (Aero stuff) turned on. They’re cool, and since they aren’t even slowing me down even slightly, I’ll keep the eye candy on! (They’re off on Lois’ machine, because the motion makes her sick, literally, so it’s not a speed issue there either.)

Finally, one of my favorite features of Vista (it’s also available to be downloaded and installed in XP) is Windows Desktop Search (WDS). I have been a long-time user of X1 (I started when they had a deal with Yahoo!, calling the download Yahoo! Desktop Search). To me, it killed Google Desktop Search (though GDS has had a number of version upgrades, so I’m comparing old versions). X1 indexes everything, including my Thunderbird mail, and I find things instantly.

In addition, I also ran Launchy for keyboard launch services (very happily, it’s a great program). Neither is necessary any longer. WDS is fantastic, and instantaneous as well. There are a number of ways to get at it, but the simplest is to press the Win key (or click the Windows Icon, previously known as the Start Menu). Then just start typing.

I use it to launch programs (rarely do I have to type more than the first two characters, then hit Enter). I use it to search for text in documents, contact info, etc. The only problem for me at the moment is that it doesn’t natively index Thuderbird email (it does a wonderful job of Outlook mail, obviously). There is a years-old plugin for Thunderbird 1.x, and I don’t want to install it. I can index Thuderbird files as if they were just plain text files, but I’ve chose not to as yet.

I’m waiting (patiently) for Thunderbird 3.0, a few more months only (I hope), because it has a plugin for WDS to enable native search. That will be the final icing on this wonderful cake. Not to start a flame war (seroiusly), but I’ve looked over the shoulder of Mac users when they used Spotlight, and it’s a funny joke to me that anyone would consider it usable…

So, from a true hater of Vista, to a true fanboy, in about six months. And, of course, a major fanboy of PowerNotebooks as well.

Digging Digsby

Send to Kindle

I’ve been a very long-time user of Pidgin (previously called Gaim). I’ve also been a very happy user with no particular impetus to look into other IM clients.

In addition to IM, I have accounts with a number of social networking sites. I am not particularly active on any of them (with the exception of Twitter), but I do log on when I get email alerts from any of them. Recently, I’ve been logging on at least daily to Facebook (I used to go weeks between logins).

I was recently friended by someone I went to High School with. Shortly after accepting the invitation, I received a chat invitation from her on the Facebook page. We chatted for a while, through the browser interface. It wasn’t bad, but it wasn’t great either, and more importantly, it meant that I had to have the Facebook page in focus in order to chat.

Yesterday I stumbled upon an article that mentioned IM clients that could connect to the Facebook chat system. I searched for “Pidgin Facebook Chat”, and indeed, there was a plugin available that supported this. Cool! However, in the Google search results page, I noticed an article on LifeHacker was in the list. I don’t visit that site often enough, but whenever I do, I find their recommendations spot on.

I clicked through and saw that they (and their readers, via the comments) were in love with an IM client called Digsby. What distinguished Digsby from other IM clients was that in addition to being a multi-protocol IM client (AIM, ICQ, MSN, Yahoo!, Jabber, etc.), it also connected directly to Social Networking sites (currently four, more planned) and email accounts (web-based, like Hotmail, Yahoo!, Gmail, as well as POP and IMAP servers).

It sounded very cool, but from reading the comments, it was clear the Digsby users really loved the program. It started out as Windows only, but has since expanded to have Mac and Linux versions as well. I run Windows, so that’s the version I installed.

I’ve been using it for just under one day now, but I am definitely not going back. That’s not a knock on Pidgin, which is excellent as a multi-protocol IM client. It’s just that Digsby is that too, and a whole lot more!

I have Digsby connected to all four social networks that it supports: Facebook, MySpace, Twitter and LinkedIn. I have it connected to my Gmail account, and to my main Jabber account (and through that, to my AIM and ICQ accounts). In addition to connecting to Facebook for the feed, I separately have it connected to the Facebook chat system as another IM protocol.

It all works flawlessly, is extremely attractive in the default skin (though there are more to choose from, that I haven’t bothered looking at). I tested the Facebook chat with a friend of mine who has complained about the Facebook chat system. I told him that from my side (the Digsby side), it was no different that any other chat. I believe he will be installing Digsby today. 😉

It means that I am now available to any of my Facebook friends for a chat, whenever I am logged on to my computer, even if I haven’t opened the Facebook web page. It also means that as my friends update their status on any of the four social networks, I see a popup letting me know that instantly.

In addition to that, I can hover my mouse over any of the social network icons, and get a wonderful time-line summary of the news feeds from each site. It’s an instantaneous way to see what you missed and what people are up to. Clicking on any link takes you directly to the correct page (a person’s profile, for example) from that summary, so even logging on to each network is now a click away.

Even the IM client has some nice touches (I want to say innovations, but for all I know, this exists in other multi-protocol clients). One of my favorites is collapsing multiple instances of the same contact from different networks into one icon. Here’s a specific example.

I have three separate contacts for Rob Page, the CEO of Zope Corporation. My primary connection with him is through my own Jabber server. We use an encrypted channel, on a private server, so that all of our jokes are top secret. 😉

We are also connected via AIM and ICQ. Now that Rob has a shiny new iPhone, his AIM account is also linked via SMS to his iPhone, so that he appears available at all times.

In Pidgin, all three took separate rows in the client. I never expected it to be different, so it didn’t bother me, but it made for long contact lists, since whenever Rob was logged on, all three were available. It also meant that I could accidentally IM him on ICQ when I meant to use Jabber.

In Digsby, I drag the AIM and ICQ contacts and drop them on the Jabber one (my default). Now I only see one Rob contact (I can call it whatever I want). If he’s logged on to any of the three services, I see a green icon, indicating that Rob is available. If I double-click to send him an IM, it will go to the first available service. So, if he’s logged in to Jabber (my first choice), the IM will always go there. If he’s not, it will go to the next one that is available. Since he’s always available via SMS (through AIM) to his iPhone, I always see a green icon for Rob.

Still, it only takes one row in my contact list, and I can’t ever send an IM to a secondary service (by accident) if he’s logged in to Jabber. By hovering on his icon, I can select any of the specific services that he’s logged in to, so I haven’t lost the ability to target a specific service, I’ve just gained space, and an automated priority hierarchy. Simple awesome!

Anyway, if you are interested in other features of Digsby, there are many places to learn more about it than I have articulated above. The point of this article is just to declare myself to be their newest fan, and very vocal one at that! 🙂


Send to Kindle

I have written twice now about taking over the maintenance of Jack Kapanka’s website. There were three distinct phases of working on the site:

  1. Fix the broken links
  2. Change the home and store pages (adding PayPal support)
  3. Redesign (rebuild) the site from scratch

All three phases are now done, though there is no trace of #1 or #2 left, now that #3 is complete.

I have zero design skills. I have very limited experience building websites. Therefore, I struggled mightily along the way. I had to Google my brains out, and still had a number of false starts and long debugging sessions.

So, I decided to write this post for two reasons:

  1. I’m sure I’ll be building other sites in the future, and I could easily forget some of the things I discovered along the way
  2. While everything I did was discovered through the web, I found different bits on different sites, so I might save some poor soul a few minutes in the future if they stumble on this post

I did not take notes along the way, so this will most definitely not be exhaustive. If I later recall anything that is material, I wll come back and update this, again, just for posterity.

The site I inherited was being hosted on a shared system, running Windows Server, with IIS serving up the pages. As far as I know, I have no access to the IIS instance (which is likely shared, though I don’t really know). I have no shell access, just web and FTP.

The site was coded a long time ago, was optimized for 800×600 resolution, and was stitched together with a complex web of HTML tables, with images in different cells, which had been sliced up from original PSD files, to create a look and feel. Everything was an image, but they weren’t uniform in size. Some spanned multiple columns, other multiple rows, etc. Rearranging anything on the stite was a nightmare (for me, with my limited skills!).

The menu system was 100% JavaScript (JS). Each menu item had an image background, with the top level menus having images for the labels. Many other navigation elements on the site were JS-based, giving little or no feedback to the user that clicking would take them somewhere. There were no scroll bars for any long content (like the Bio), as they wanted the neatness of an 800×600 design, so you paged a few paragraphs at a time with JS controls.

Having nothing to do with code, the site was typical of many artist sites, very dark (in this case brown), and completely image-laden. I am sure that they think it’s edgy and cool, and perhaps it is. That said, it’s also often hard for people (especially older people, who might actually have disposable income) to see well or navigate. Lois and I prefer lighter themes, with less images, when possible.

Many of the links on the site were broken, and the reasons varied (target was missing, link had a typo, target was renamed, but still existed on the site, etc.). Some of the important content needed to be updated to reflect updated contact info and to correct typos as well.

So, the first sweep of the site was straightforward, but painful. I fixed the broken links and the content. The only thing that made that painful was tracking down the right targets or deleting the links, and finding the content which was buried deep within nested tables, while ensuring that I didn’t disturb the flow in the small viewport.

Once the site was stabilized, the next priority was getting a PayPal button on the site, and an embedded YouTube video of Angel In My Arms (perhaps Jack’s most famous and successful song) right on the front page. Most people who visit the site are looking for that, and for the ability to purchase a copy to use for the Father/Daughter dance at their wedding.

I had never incorporated PayPal into any site before, but this turned out to be the easiest part by far. Once you have a PayPal account, which Jack did, you basically log on to your account there and fill in a small form and they generate a button and the associated code that you simply cut and paste into your site. It just worked, the first time.

Embedding the video on the home page was much more painful. I didn’t have the skill (HTML or image manipulation) to embed it into the existing table structure, possibly requiring a different slicing and dicing of the background images. I wrote a separate post about Table2CSS describing this amazing tool that helped me accomplish that. Basically, Table2CSS turned the home page into a CSS-based page (no tables whatsoever), with every cell from the original table becoming a named DIV.

This allowed me to position things with much greater accuracy, at the CSS level, without having to worry about spanning rows and columns. As I said in that post, this is not a good way to code a production site, but it was the perfect way to quickly accomplish my goal, and buy myself time to consider the real redesign.

Once that was done, I was ready to consider the new site. I have direct experience with two systems for building websites: Zope and WordPress. is built in Zope, and this blog is built in WordPress. Both of those systems are designed to produce pages dynamically, assembling the pieces with programming logic and content that is typically stored in a database. They offer tremendous power. Zope and WordPress are but two of dozens of extremely popular Content Management Systems (CMS). They are designed to handle this exact type of problem.

Unfortunately, they are also typically designed to run in a slightly higher-grade hosting account (shared is still fine), with WordPress being more available on some lower-level hosting accounts. Neither seemed to be a good option for this account, and I didn’t want to be one of those people who told Jack “You have to upgrade your account, because I have a hammer, and therefore all problems are nails…”

Also, while I wanted/needed the benefit of a template-based solution (on the existing site, the JS-based menu was embedded directly in 50+ static HTML files!), it didn’t need to be a dynamic template system, since for the first cut, there was no need for personalization (i.e., different users don’t get different views of the same URL).

So, the first two decisions that I made (after way too much Googling, reading and a bit of experimenting) was to select the YUI Grids CSS for the base CSS layout engine and the htp: HTML pre-processor for the static templating system. The live site uses both, so those initial decisions stuck. That said, along the way, the YUI Grids frustrated me enough that I nearly bagged it, and went so far as to implement another one before switching back.

The entire YUI system (of which Grids is but one small piece) is very powerful, elegant, and well-documented. Unfortunately, I didn’t want to have to read for days, to create a simple layout, so I didn’t. In not reading, I missed one crucial piece, which none of the examples or Layout generators included. As a result, while the layout looked exactly like I wanted it to, the reset portion of the Grids system (amazingly, I actually knew what that meant) 😉 wiped out all styles. So, lists didn’t look like lists. Headings didn’t look different than normal text, etc.

Fixing it turned out to be trivial, but not when I had no clue as to what was going on. The fix meant including just one more YUI component, Base (which redefines all of the various HTML elements to a sane default that Yahoo feels works well in most browsers). I agree, and for the most part have kept their defaults, but I was pulling out my remaining single hair until I realized what I was missing.

I looked at a number of template systems, and I am completely used to the concept of templates in both Zope and WordPress. This was the first time I used a static template system. Basically, you assemble the final production page from a variety of different inputs (page fragments that can be stored in separate files, variables, blocks, etc.). You run the preprocessor on a template input file, and create the resulting static HTML file to be put on the live site.

HTP is quite powerful, yet unbelievably simple to use for the use-case that I had. I couldn’t be happier with my choice in that regard. I have a single master template for the entire site (at the moment). That one template includes a number of different files: the head section of each page (where CSS files are referenced, etc.), the header (where the Jack Kapanka graphic is placed on every page), the menu (so that I can change the menu in one place and regenerate all of the pages with a single command!) and the footer. The template then references variables and variable blocks, which fill in the title of each page and the main content and right sidebar content.

I can restructure the entire site (navigation or look-and-feel) simply, or change the content or sidebar for any individual page just as easily.

To make my life easier, after struggling for a while, I gave up on trying to pin the footer to the bottom of the actual browser page. Not only do I know that this can be done (I found many excellent working examples of how to do this), I have even done it before on other projects. What I couldn’t do was get it to work within the confines of the YUI Grids CSS, without reading tons of stuff. I just gave up, and put in scrolling content in the main viewport, ensuring that no page was too large. I’m not thrilled with the result, but it got me to where I wanted to be much more quickly, so the tradeoff was reasonable (from my personal perspective).

Aside from the YUI CSS, there are only two other CSS files. One for the menus and the other for the content. Pretty simple to maintain and both are relatively small.

Because I am sensitive to people who have poor vision (after all, I live with someone who is essentially legally blind), I coded the various CSS elements to be sized in ems, rather than pxs. This way, if people resize the content by pressing Ctrl+ or Ctrl-, the page resizes fairly elegantly (at least it did for my hundreds of tests on four different browsers, YMMV).

Finally, I also tracked down a flash-based MP3 streaming embeddable object (the first one that I used worked fine in all but IE), and used that to stream the 30-60 second snippets of a variety of Jack’s wonderful songs.

Right before making the site live, I considered that I was putting up a vastly reduced number of pages as well as renaming some basic pages from .htm to .html. That meant that links that people had bookmarked, or perhaps more importantly search engine indexes, would break on nearly every page. That just didn’t feel right.

Redirecting would be trivial in a real CMS, where the headers get spit out by the CMS, and writing logic to catch all missing pages (404s) is generally built in or trivial to write. That wasn’t the case here, and there were roughly 30-40 pages that needed to be redirected (not necessarily to a direct replacement page, but to one of a variety of catch-all pages for each category).

I found the answer on a number of sites. It involved making a directory called XXX.htm (for example). In that directory you create a single file called default.asp. In that file is a tiny VBScript that calls two functions that redirect the page. It was trivial, though tedious to do for all 30+ pages.

I’m sure I’m leaving tons of stuff out (e.g., along the way, to debug the CSS, I ended up installing the Firefox plugin called “Web Developer”, which very nicely complemented Firebug). It was a godsend to be able to change CSS on the fly, and see the result in real-time in the browser window. I also made very heavy use of the JS Console window in both Google Chrome and Safarai (on Windows). They are very similar (with Safari being more sophisticated, but Chrome being much faster).

Like I said above, if I realize that I’ve left out something material, I’ll come back and edit this in the future…

Jack Kapanka

Send to Kindle

A few weeks ago, I wrote two posts about a website I was working on for a new friend. Neither of those posts is really germane to this one, but for reference, they were here and here. Those were techie posts, this is not, other than repeating how we came to discover Jack Kapanka in the first place. Sometime later this week (could even be today, who knows), I’ll complete the techie part about the site as well.

Regular readers of this space know that our goddaughter got married on July 5th, 2008. Prior to that wonderful event, the father-of-the-bride emailed Lois with a link to a father-daughter dance song that he was considering for the wedding. For whatever reason, the link was broken and Lois couldn’t find the song.

Instead, she Googled the name of the song, Angel In My Arms, and found a YouTube video of the song. Lois didn’t realize it was a different song, by a different artist, with the same song title! She fell in love with the song immediately, and wrote back our friend telling him so. After another back-and-forth, they realized that they were talking about different songs.

Lois decided to buy two copies of Jack’s CD (which includes Angel In My Arms on it), so that our friend would have a copy for the wedding, should he decide to use the version we fell in love with. The only problem was that Jack’s website was a little broken, and Lois had trouble placing the order. After hunting around a lot more than she should have needed to, she found a valid email address and wrote that she was unable to order the CD.

Jack himself answered the email, and Lois and he conducted the sale directly, and a few days later we had the two CDs in our hands. It turns out that the rest of the CD is fantastic as well, so it was a real treat given that we had only heard one song before ordering it.

You can read Jack’s bio for yourself, where you will learn that he’s already had one helluva ride through life. For example, he was born blind, and miraculously regained sight in one eye at the age of two! What’s important about Jack’s life isn’t any sadness or pain that he might have endured, it’s that it has given him a perspective and a voice that come through in all of his incredibly moving songs.

Jack jokes that he can write a jingle about almost anything, quicker than most. Not only do I believe him, but I’ve heard a number of them that will likely never see the light of day, so I know it to be true for a fact. He empathizes with everyone he meets, and captures the deepest meanings of any moment that he writes about. Yet, he does it in the plainest language, that we can all appreciate and understand, placing us in that moment as well.

In addition to being an amazing songwriter, he also has a heart of gold. Jack has written (and performed) theme songs for a number of wonderful organizations, including (but certainly not limited to!) the Special Olympics, Military Veterans and Freedom Ride.

Finally, he has a wonderful voice. All of the songs on the CD feature him singing lead, and we can listen to his voice all day long. Still, even though he is an excellent performer (he sang in front of 70,000 people at the 2002 Citrus Bowl!), he’s first and foremost a wonderful songwriter, who can tell very varied stories while extracting the core lessons we can all share from those stories.

Once we got a taste of his CD we continued to correspond with Jack and have since become good friends. We’ve had the pleasure of meeting him as well and verifying his qualities and talents face-to-face. As a result, I undertook to fix his broken website. After simply fixing the broken links, I then added a PayPal button making it easy to order his CD (so, go there now, and order the CD, no delaying!).

However, both Lois and I still didn’t like the ancient design (and I couldn’t stand the code), so I redid the site from scratch (which will be the subject of another post). This site has significantly less content than the previous one (so far), but it should be easier to navigate, order the CD, and build from here (which we fully intend to do). You can listen to 30-60 second clips of 13 songs (he actually has enough material for another CD waiting in the wings!). You can read the lyrics to those songs, read the stories behind seven of them, and watch six videos (full sound tracks) as well, all at this link.

The new site launched on Halloween, so it’s still fresh, and possibly contains problems that I am as yet unaware of. Feel free to leave me feedback in a comment to this post, or contact me directly if you find a problem, or have a suggestion for improving it that won’t be beyond my meager technical skills.

We are lucky to know Jack, and now the rest of you are lucky to be able to discover Jack’s gift for yourselves.

I am not a hardware guy

Send to Kindle

Repeating the title, I am not a hardware guy. I also have fat fingers, and my hands aren’t all that steady. I would never even consider soldering anything, etc.

As I’ve mentioned in the past, I am the tech support guy for many people, including our cul-de-sac neighbors, who we are very friendly with.

Last night, the teenage daughter called to say that her laptop lid was broken, and the replacement parts had arrived that day from Dell. I told her that I’d come over this morning to take a look.

Previously, the keycap for the “`” key (where the shift of that is “~”) broke off. It didn’t just fall off, the clips broke so the key couldn’t be put back. Kids don’t tend to use that key much (programmers do) and you could still press the flat part to produce the right keystroke, so I advised them to leave it alone.

Since they were ordering a new laptop lid, they also ordered a new keyboard.

When I showed up this morning, I saw that the hinge for the left hand side of the display was broken off. They told me that the night before, the laptop actually sparked. I could see that the cable connecting the LCD to the motherboard was slightly frayed, which is probably what sparked. This was out of my league, but I knew I was still better equipped than they were.

So, the LCD itself was fine (other than the possibility that the frayed cable was useless), but the lid that it was attached to was broken. That’s the part they bought, plus the keyboard. Ironically, you have to completely remove the keyboard to fix the display panel, so I was going to be killing two birds with one stone anyway.

I used the mom’s laptop to log in to Dell’s site, because, unbelievable as this sounds, no instructions come with the spare parts. The online manuals are excellent though, and I was able to follow the hundreds of steps necessary to take everything apart.

In no particular order, and in no attempt to be comprehensive, here’s what I had to do:

  • open the mini-card housing and detach the antennas for the mini-WiFi card
  • remove tons of screws
  • pop off the hinge above the keyboard
  • remove the keyboard
  • detach the cable for the webcam and microphone
  • detach the cable for the display
  • detach the ground cable
  • remove the display bezel
  • remove the LCD display from the housing
  • remove the webcam and microphone from the housing

After tossing the old housing and keyboard, reverse all of the above steps, first putting some tape over the frayed part of the LCD cable. The toughest part was getting the keyboard ribbon plugged back in and locked into place.

I could not believe it when the laptop booted up and the LCD worked perfectly. The laptop looks brand new. I guess I’m now officially a hardware guy. 😉

Table2CSS is Cool

Send to Kindle

Two days ago, I wrote about a website that I was working on for a new friend. I mentioned that it was written a while ago, optimized for 800×600. It was rigidly coded, with very complex nested tables, with multi-column and multi-row spans, with absolute positioning, with image backgrounds in each cell, stitching together the desired look.

In the end, it appears to be one cohesive image on the back of any given page. That’s great if you don’t want/need to change anything. But, the second you want to introduce a new element on the page, it becomes maddening at best, and impossible at worst (without working on the actual background images to incorporate your new layout!).

I still haven’t pointed anyone to what site I’m talking about, but that might happen as soon as next week, we’ll see… In the meantime, I’m still just talking theory.

We wanted to embed a YouTube video of one of his most popular songs directly on the home page. In addition, we wanted to incorporate the new PayPal button (referred to in the previous post) on the home page as well, since most of the people who currently visit the site want to buy his CD rather than just poke around (trust me, we know that to be the case).

I tried modifying the tables to accomplish that quite a number of times. Each time, I broke the layout in one way or another, usually in a manner that was simply not acceptable.

Since I had no intention of redoing the entire site yet, and I didn’t want the home page to be jarringly different than the rest of the pages (which weren’t about to change), I was stuck. I decided to search for a conversion tool which would take a table-based design and turn it into a CSS-based one.

I found a great tutorial from someone who did a very complex site by hand, and I appreciate the effort he undertook to share that with the rest of us (and I’ll link to it to share the love). But, I had no interest or intention of doing this by hand.

I then found a site called Table2CSS that sold a tool that does exactly what I wanted. They supplied a trial version (that’s marginally crippled). I installed the trial, converted the home page, and it looked identical to the table version. Perfect!

Even though that was the only page that I needed/intended to convert for the moment, obviating the need for me to purchase the product, I decided that the author more than earned the $40 (OK, $39.95) 😉 that he was asking for the program, given that he saved me a ton of time already.

Before I continue, I need to point out that there are many articles on the net that claim (rightly so!) that this is a stupid thing to do (or even want to do), as the resulting CSS is absurd at best, basically mimicking each and every table cell in a ridiculous manner. I agree 100%, so I don’t want any reader to think that I endorse this as a wholesale (or default) approach to converting and then maintaining a site (or even a page) using this technique.

That said, I had a singular mission in mind, to achieve a short-term goal, and this tool was perfect for me. I did indeed purchase the product!

Here’s what it allowed me to do. I wanted to embed a YouTube video and the PayPal button (as noted above). Unfortunately, even though I could have used CSS to place the YouTube after the tables were rendered (avoiding having to touch the tables), the embedded video was larger than the blank area avilable on the home page, and spilled (covering) into a number of other areas (keep in mind that this was an 800×600 layout!).

Because the table cells spanned multiple rows and columns, it was extremely difficult to change the size of any cell without breaking the layout horribly. Also, because the cells had images associated with them, that added extra pain.

Even though the CSS layout was as rigid, and absolute, there was no concept of spanning any longer. Each original cell was now a div, taking up as much room as it required. This alone, along with the ability to easily decide when an image should be repeated (because I was growing a cell) or not (because the image wasn’t a simple background gradient) was a big win.

I was able to reposition the cells using pure CSS quite easily. I had to add a repeat for some images, and create one new image as a filler (by cropping an existing image to fit a hole that I created). I was then able to add just two new divs, and two new CSS blocks, one for the video and the other for the PayPal button.

The new home page looks identical to the old one, except for those additions. I don’t love the general look-and-feel of the site (so I’m not praising it, nor my ability to manipulate it), but I accomplished my goal exactly as I had hoped, with significantly less pain than it would have taken without Table2CSS.

So, thanks again Table2CSS for saving me a lot of grief, or more accurately, for enabling me to accomplish a task I would have otherwise foresaken, for sure! 🙂

Fixing an Old Website

Send to Kindle

Lois and I have recently befriended an amazing Nashville-based Singer/Songwriter. Since I intend to write a long post about him in the coming weeks, I’ll leave his identity as a mystery for the moment, since it has little to do with the specifics of this post.

The story of how we met him is interesting in and of itself, but a key piece of it involved the fact that his website was badly broken. As a result, Lois sent him an email (letting him know that), and ended up striking up a friendship in the process.

His website was built a long time ago, when he was employed by a record label. At the time, the code was likely cutting edge, but by today’s standards, even if it worked (which it didn’t), it would be considered a wild mess, and extremely difficult to maintain. One example, the site is optimized for 800×600 viewing, and bothers to tell you that on each and every page. 😉

The site broke when the record label folded. They were kind enough to hand him all of the code, but he’s not a techie. Someone (I have no idea who) put it up on a hosting provider, but I can’t imagine that they tested it, or bothered to fix it if they did. Worse, the site has gone through many iterations, and all of the code for every iteration is still laying around on the host in one directory or another.

He told us that another friend of his offered to fix the site, but she got sick and hadn’t found the time to get to it. Finally, I couldn’t take it any longer, since we were too embarrassed to point people to the site (even though we love his music!) so I offered to give it a shot.

As technical as I am, I am a horrible designer and I don’t have as much web experience (as a programmer) as people might think. The only two systems that I’m reasonably familiar with are Zope (which runs the main Opticality website) and WordPress (which powers this blog). I had never written a single line of JavaScript, and while I thoroughly understand HTML and CSS, my lack of design skills (and sense) cripple me when starting from scratch in those arenas.

Last week, I officially took control of his site as his new webmaster. My goal was to fix the site, not improve it in any way! In other words, it would still be the ancient look-and-feel when I was done, but at least it would work! After much head-banging, I finally achieved that last night. I’m still not announcing that site in this post, for a number of silly reasons, but my initial goal has been met.

Why am I writing this? Because I want to share a few revelations that I learned along the way.

There was a page on the site that had JavaScript-based popups to bring up the Lyrics and Stories behind a number of his songs. The popups didn’t work. Since I had never coded up any JS, nothing jumped out to me as obviously wrong. I wrote some standalone tests that mimicked what the popups did, and they all worked for me. In other words, I proved to my satisfaction that it wasn’t my browser settings that were blocking the popups.

Long story short, after much head-banging and Googling, it turns out that the popups were being blocked inside the site’s HTML/JS! What? Norton Symantec Personal Firewall, in an attempt to save its users from themselves, rewrites HTML files before they are served. It inserts a series of JS functions to override and onerror() and a few other functions. At the end of the file, it resets them.

Still, who cares what a personal firewall does on a user’s machine? We all do! My guess (and I’m reasonably sure I’m right here) is that the friend who took the files from the old record label, and put them up on the hosting provider for the musician, had the Norton Symantec Firewall installed on their machine. Each time they touched one of the HTML files, the Norton Symantec JS was inserted into their copy, which they then uploaded to the hosting site, and voila, all of the popups stopped working, for everyone!

I had to hand-strip all of the inserted JS. Why? Because unlike Zope, WordPress, or any other CMS-like system, any design element (or coding error) is propogated among dozens of individual files. The bad JS was in 50+ files, that I hand-edited. If I didn’t like a menu item, instead of changing it in one place (like I would in Zope or WP), I had to go into every page on the site that displayed that menu, and make the identical change.

You might ask why I didn’t factor out those parts. The main reason is that I wasn’t looking to introduce new problems. One of the things I’m particular good at is doing rote tasks extremely quickly. Once I knew exactly what I needed to do, I was able to accomplish the edits faster than most people. I am also proud of the fact that I didn’t introduce a single typo in all of those edits (to my knowledge).

I also added a PayPal cart for him (he was taking orders via email!). I had never done that before either, so that was another learning experience. Within 24 hours of my putting up the new cart, he has already received orders (successfully) from both the US and the other side of the world! Cool! 🙂

Finally, I incorporated a free streaming flash player so that people could listen to 30-60 snippets of a number of his songs. I had never done that kind of stuff before either, so that was an interesting learning exercise as well.

Bottom line: inheriting an old site, laden with problems, is not a fun task for someone with as few web skills as I have (had?). But, since I love learning stuff (in particular, web stuff), the overall experience was positive for me, and I’m very happy to have helped our new friend.

I can now take my time, possibly going for a complete redesign, knowing that at least he can easily take orders for his CD now, even if the site is still not much to look at…

Update: Painful epilogue. I commented out (or thought I did) one menu item. I used an HTML comment, as in “<!– blah blah blah –!>”. I tested it in both Firefox and Google Chrome, and the menu item was gone. Unfortunately, I didn’t test it in IE. A few minutes ago, I pulled up the site in IE to test something else (lucky for me), and noticed that some of the pages were 100% blank. Removing the “!” from the closing “>” made it work in IE. Ugh. Of course, since I haven’t refactored yet, I had to update 45 files by hand again… I also found one other thing that doesn’t work in IE, but that’s a Flash thing, so some more work to be done.

September 2008 Poker

Send to Kindle

Since I won’t be playing tonight, I can safely report this month’s results. Also, since I intend to keep this very short, I’ll start with the bottom line, then a few highlights.

Bottom line: Profit of $642.25.

Not bad. 🙂

I finally cashed again in the big Sunday Hold’Em tourney. It had been quite a while. I also won that seat, so the profit margin was pretty good. I came in 31st out of 800+ players, which was my best placing so far, but they pay the same for 31-40, and I’ve finished 38th and 39th before, so it just tied my best cash in that tourney (not that I’m complaining).

I also cashed again this month in the big Saturday Omaha tourney (which made it three weeks in a row!). Unfortunately, even though that was my favorite tourney each week, the site discontinued it right after that win. Oh well.

So, now I typically play in one medium-sized Omaha tourney a day. I have taken some pretty bad beats there, so I’m not currently above water in that one yet, but it’s not hurting the account too badly, and I’ll catch a card one of these days and make it worth my while.

Google Chrome First Impressions

Send to Kindle

Before I begin, for the record, I love Firefox, and continue to use it as my primary browser. I also have IE7 and Safari installed (I’m running Windows XP Pro).

Of course, I had to try Google Chrome, even though it wasn’t touted as being ready for Prime Time just yet. After some initial struggles (to be described below), I switched to the Developer version (you need to download and run chromechannel-1.0.exe to select the Developer build rather than the normal Beta build).

Even after doing that, I continued to have some problems. This morning, the Google Updater brought me a new version of Chrome ( While it hasn’t solved all of my problems, it’s a significant improvement over the last version, so it’s getting there.

First, a few of the problems. One of the sites that I use more than I should admit is MSN’s TV Guide. For years I used the site, then they changed it for the worse. Then I switched to Yahoo’s TV Guide for a number of years, then they broke it (it’s back to normal now, I think, but I’m sticking with MSN). MSN’s site is very heavy JavaScript (JS). Given that Chrome is supposed to include the fastest JS engine of the current browsers, that seemed like a good page to check out.

Unfortunately, the normal Beta build, and the first Developer build, would consistently hang when trying to switch providers (something I do frequently, since we’re rarely in one place for more than a few days). Eventually, the page would crash (but the browser wouldn’t!). That happened to me on a few other pages as well. This is fixed in today’s updated Developer build!

Another problem that I had (now fixed) was that Chrome wouldn’t offer me to import my Firefox settings (any kind: bookmarks, passwords, etc.). Lots of forum posts with lots of suggestions, but the other day, I finally found one that worked. I had ancient entries in my Windows Registry for versions of Firefox from bygone days (versions 0.9, 0.91, etc.!), that somehow confused Chrome. Ridiculous, since my default browser is Firefox, so the correct key can be found by all other apps other than Chrome.

Still, the fix was easy. I deleted those registry keys, and Chrome did indeed correctly import everything from Firefox.

Finally, when I had the last Developer build installed, clicking on the About Google Chrome menu item would bring up the panel, showing the version number, but the automatic check for whether this was the current version or not would hang forever, 100% of the time. I was always able to click OK to dismiss the panel, but was never able to be sure whether there was a newer version or not. That too has been corrected in this morning’s update. Now I am informed that I have the current version.

Final issue (for me) is SSL personal certificate support. I was very pleasantly surprised when Chrome auto imported my certificates from Firefox. For IE, I export the certs from Firefox, then import them, and they all work correctly. But, when I went to author this post in Chrome, I was unable to log in to my admin interface using OpenID (using SSL certs for verification). It just hung and eventually told me that the site was temporarily unavailable. This is not a big deal, but still means that there are things I can’t use Chrome for (like authoring this site!).

On to the good. I like the clean, minimalist look. The browser is definitely the fastest (by a good measure) than the others on my system. Not just JS, but HTML as well. The home page for this blog is very large. It renders nearly instantaneously in Chrome.

Like I said above, I love Firefox, and I ascribe a good amount of the difference in speed to the fact that I have numerous plugins in Firefox, all of which likely hook the content for various things, before I finally get to see it. That slows things down, but gives me functionality that I chose to install and turn on. If similar functionality was available in Chrome (which it likely will be at some point), I would likely choose to slow Chrome down as well, to gain that functionality.

Still, for now, the speed improvement it welcome.

Another major speed improvement, also likely tied exclusively to plugins, is pure launch speed. Chrome comes up really fast. Firefox doesn’t. Of course, by default, when I launch Firefox, it’s checking whether there are any updates for any plugins, so it’s not just a size and initialization problem, but a networking one as well. So, no blame for Firefox here, just a temporary enjoyment of a simpler and faster experience.

To summarize, Firefox is still my default browser, and I have no material complaints about it. I also very much look forward to version 3.1 coming near the end of the year, also supposedly with a much faster JS engine included.

But, now that Chrome has solved some niggling problems that I was experiencing, I am likely to use it more than I have been, and who knows what will eventually happen. It wouldn’t shock me if it becomes my default at some point in the future.