Welcome WordPress 2.7

Send to Kindle

I just upgraded to WordPress 2.7. It was super simple, no glitches whatsoever.

Earlier in the day, I noticed that there was an updated version of the Simple Tags plugin that I use, clearly stating that it worked with 2.7. I upgraded that while still running 2.6.5.

Then I upgraded WordPress to 2.7 on my laptop, running XAMPP. The only complaint I got was about Simple Tags, which I hadn’t upgraded on the laptop (and I updated it then). All other plugins just worked, and the new theme, PrimePress just worked as well.

I hadn’t installed any betas or release candidates before, so this is my first real look at the new admin interface. I’ve seen screen shots, and it’s crisp, clean and reasonably intuitive.

I’m officially a fan, even though I clearly haven’t exercised it in any meaningful way yet. 🙂

P.S. First glitch, the Preview link gave me a 404, so something isn’t being put where it should be. Can’t find an obvious cause, so I’m punting for now, and just publishing. I’ll track down my preview problem over the weekend…

Update: I just did a test of Preview on the laptop, and it worked fine. So, there isn’t anything wrong at the WP level. I am now quessing that something about the URL scheme for Previews changed slightly, and my own rules at the NginX level are failing (the equivalent of Apache rewrite rules). When I’m sure, I’ll update again…

Solution: This morning, I discovered that if I override the permalink in the preview URL and use the old-style ?p=NNN format, the preview worked. That allowed me to search with more detail. That turned up the following patch. Ironically, the patch was just posted yesterday, so I wouldn’t have found it on Friday anyway. I don’t know if it works (because I haven’t made a new post since I applied the patch), but at least I can preview by using the old-style URL if need be…

Internet Connection Sharing

Send to Kindle

Internet Connection Sharing (ICS) has been around for a long time (formally, and through hack-like methods). I have never had a need for it (slightly amazing) until now. Yesterday I wrote about our current hotel WiFi woes. In that post, I wrote that I wouldn’t need to worry about it today, given that I would only be in the hotel for two waking hours.

After a very early breakfast, I decided to try ICS for the first time, just for yucks. There are a number of ways that I could have set it up, each as easy as the next, but I had one specific scenario in mind.

I set up Lois’ old laptop on the desk in the outer room (we’re in an Embassy Suites, so we have two rooms). I pulled out my small Linksys travel router and plugged it in there as well. I set my laptop up in the bedroom.

On Lois’ machine, I turned on ICS (there is a simple wizard) and told it that the Sprint Broadband Connection (through the USB cable to her Treo) was the real Internet connection. I then told the wizard that the wired port was the shared connection. I then plugged in the Linksys router to the wired port, with the Internet (WAN) port on the Linksys rather than the Ethernet port. So, the Linksys would be getting it’s IP address from the laptop.

Since my laptop is already configured to connect to the travel router, I didn’t need to make any changes to my machine. I went into the bedroom, and poof, I was on the Internet! This time, the Treo had a better connection than the day before, and I was getting 757Kbps downstream and 124Kbps upstream. That’s a faster downstream connection than I had yesterday on the paid WiFi!

I have heard that ICS on a Mac is brain-dead simple, and I have no doubt that it is. I can now confirm that it’s pretty darn simple on Windows too (Lois’ laptop that was serving the connection is Windows XP). You have to pick which network device is the real one, and which is the shared one, but other than that, nothing else to do.

I now don’t need to consider the hotel WiFi dilemma. Once Lois changes to the new laptop, I’ll have to consider getting an Express Card version of the modem, now that I know we can easily share that connection when necessary. It will still end up being an insurance policy, since we almost always have a free wired or WiFi connection wherever we are.

Victory! 🙂

Hotel WiFi

Send to Kindle

This post is inspired by my current hotel WiFi woes. I’ve likely mentioned this gripe before, but since I’m living it at the moment, I’ll repeat it, vigorously. It’s insane that high-end hotels charge for Internet use (WiFi or wired), while their low-end chains (owned by the same company!) give it away for free!

Sure, some people pay for it (including me, last night), so you could argue that it’s smart. It’s not. It’s brain-dead stupid.

We are on a mini-vacation visiting our godson in Birmingham, AL for the long Thanksgiving weekend. We left the office on Tuesday and drove to Durham, NC where we stayed in a Hampton Inn for the night. We picked up a mutual friend the next morning and drove all day to Birmingham, where we are spending five nights in an Embassy Suites (owned by Hilton, which also owns Hampton Inn). We head back north on Monday morning.

Since it’s a vacation, we’re using Hilton HHonors Points to stay for free this trip. We stay in Hampton Inns nearly 100% of the time, both for business and for pleasure. We like them, they provide good value, a predictable experience, and free Internet access.

There is a Hampton Inn not too far from our godson’s apartment in Birmingham, but there is an Embassy Suites closer, and we’re having Thanksgiving Dinner at the Ruth’s Chris in that Embassy Suites tonight (getting closer, the mouth is already watering…), and, most importantly, it was the same exact number of points to stay there as to stay at the Hampton Inn.

So, I got on to the site, and thought I saw that the Internet Access was free. I was wrong… When I logged on last night, I paid the $9.95 for the 24 hour period. I was annoyed. No, I’m not cheap, but yes, I’m value oriented. Lois has a laptop too, so are we expected to pay $20/day for access? Yes. Never mind connection sharing strategies (which I can employ, but most people can’t).

I actually could go into great detail about that, and intended to, but I’ll pass and spare the poor readers. Our new laptops use Vista x64, and as I’ve noted in other posts, the only thing I don’t have working is the USB connection to our Treo phones (in fact, I can pair with Bluetooth, but I can’t get BT to work for syncing or phone-as-modem either).

So, I can’t use my Treo as a modem to connect to avoid the WiFi fees, which is what I would have done in the past. But, Lois hasn’t switched yet (another very long story), so I did whip out her Treo, and connected her laptop instantly via Sprint. That’s why I didn’t need to hassle with connection sharing. She was fine immediately.

Since I couldn’t use my Treo, I paid. But, whereas the average Hampton Inn gives me a 1.5Mbps connection, upload and download speed, this for pay connection was 537Kbps download and 236Kbps upload. Wow. Charge me, and give me an inferior connection. Real smart. Just for comparison, Lois had a bad connection (perhaps because we’re on the eighth floor), and she was getting 236Kbps download and 126Kbps upload (not much worse than my crappy WiFi connection!).

But, I paid (you say), so they are smart. Wrong. First, if I had realized that they charged, I would not have stayed there (forget that I’m using points, the same would have applied if I were paying with cash). If it wasn’t points, that could have put me in another chain as well, not necessarily a Hilton. Second, they are ensuring that my stay isn’t as pleasant as it might otherwise be. Tomorrow, I will only be in the room for two waking hours. No way I will pay, so I will be using only my Treo for email, and I will blame Hilton.

Next, while I made this mistake this time, I’m not likely to make it ever again. So, Embassy Suites has likely lost all future business that they might have gotten from me. Considering that I’m a Diamond VIP HHonors member, that loss might not be insignificant!

To be clear, everything else about our stay is very nice. The people are delightful. The breakfast was wonderful, The room is gorgeous. And yet, instead of making me want to pay up a little in the future (over a Hampton Inn), they are guaranteeing that I will be running back to Hampton Inn (at least they have won my business for their other chain) rather than spending more for an Embassy Suites stay. That’s why it’s dumb.

Aside from the above, there is a business center downstairs, and also two Internet Kiosks. I didn’t check, but it wouldn’t surprise me to find out that the Business Center offers free Internet usage (for browsing on their machines). If that’s true, it makes it even more stupid to charge for the use in the rooms.

In this hotel, and others, there are other opportunities for the hotel to charge money (typically food, via restaurants or room service). If you encourage me to stay in the room, then I’m likely to use hotel amenities. If I feel ripped off, I’m likely to avoid anything that’s in that specific hotel. Free WiFi will tend to keep people engaged in their room, and therefore hanging around in the hotel.

Anyway, once this trip is over, and definitely once Lois switches to her new machine, I’ll be canceling the phone-as-modem options on both of our Treos. That will be a big loss for Sprint. We pay a huge premium (yes, it’s purely insurance, since we rarely use them in this mode). Since we rarely use the service, this is essentially free money to Sprint. But, since they haven’t pressured Palm to support Vista x64, and haven’t done anything about it themselves, they will lose this revenue.

Second, since the phone will no longer be a multi-purpose device, it will be slightly less useful to me. Also, since it doesn’t sync with my laptop any longer, it will be even less useful. That means that in the next few months, I’ll be in the market for a new phone, even though I like my Treo 755p a lot, and I am perhaps the only happy Sprint customer, and I pay them a small fortune every month, and I use next to zero services.

Yes, I’m an idiot, but I’m a happy idiot, and they are driving me away! More stupidity, but this time, not by a hotel chain… I believe that my next phone will likely be an Android-based one, on Verizon. I might have to wait six months to see a model I’ll be happy with, but once it exists, I’ll be switching.

I’m reluctant to go the extra step and get an express card data modem (or USB one), because I now know from experience that I will use it 3-4 days a year. It’s just a stupid premium to pay for that small amount of usage, but that too could still happen…

Wake up people, in this economy, these kinds of customer alienations will be even more damaging than they otherwise might be…

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.


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…

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.

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.

PowerNotebooks Laptops Ordered

Send to Kindle

I’ve written about my laptop a number of times. Separately, I’ve written about Windows XP, Vista, Linux and what I might choose when buying a new laptop.

This morning, I ordered two identical laptops from, one for me and one for Lois. Here is the link to the specific model: PowerPro I 8:17. I max’ed out a bunch of the options (but not all), so these are extremely sweet machines.

First, a few words about The last five laptops that I have paid for personally have all come from (with these two, that makes seven!). My current Sager NP8890 was the first one purchased from them, over four years ago. I still love the machine, and will definitely feel a bit like I’m cheating on it with my new one.

Since then, I’ve purchased two other Sager models, one for Lois, and one for my godson. I then bought a PowerPro for my goddaughter, and then a PowerPro for my godson. carries a number of brands. We’ve been extremely happy with our Sagers and PowerPros. They stand behind their machines, and have been incredible in solving problems when they’ve come up over the years. Pricing is very fair as well, for these extremely high-end machines.

I really can’t say enough about the choice and customer service offered by, and am proud to count myself among their happy and loyal customers.

Now for my choice of OS. I’ve railed in the past against Vista. At the time, it was inconceivable to me that I would ever install it on any machine under my control. While I was reasonably happy with XP, I was heavily leaning toward running Linux and having XP available in a virtual machine. I spent a few seconds considering a Mac, which most of the tech people I know use and love.

As much as the romance of running Linux appealed to me, I knew that I couldn’t remotely consider not having XP available in a VM (the same would be true if I bought a Mac). The more I thought about it, the more it annoyed me that I was desperately trying to work around pretending that I wasn’t somehow married to Windows. In other words, I wasn’t being pragmatic, and I like being pragmatic.

So, I spent an inordinate amount of time thinking about and reading as much as I could about Vista, specifically Vista x64. As I noted in a previous post, Vista SP1 seemed to have solved the most heinous problems that I personally noticed in the original release of Vista.

Pragmatism has ruled the day (for me), and I am at peace with my decision. I have no doubt that I will love the PowerPro (from a hardware point of view). I will report back a few days after it becomes my regular machine on how I feel about Vista (64 bit or otherwise). That should be roughly two weeks from now.

While I can’t imagine that I’ll switch away from Vista, at least with this hardware choice, I could easily revert to XP or Linux. If I bought a Mac and didn’t like it, I could run XP natively as well, but I would have grossly overpaid for the hardware for that scenario.