On the day of Windows 7’s release, Apple reminds me why I’m a loyal customer

Apple Store Mall of AmericaI had a simple objective when I set out for the Mall of America at 9:00 this morning. I was going to go to Best Buy to purchase the Windows 7 Home Premium Upgrade along with the new Porcupine Tree CD. Yes, I am a frequent Microsoft basher, but I will admit I do harbor genuine enthusiasm for Windows 7. I think Vista was a joke, but after having tried out Windows 7 RC for the past several months, I was convinced it was (finally) a solid replacement for the ancient Windows XP.

Now, it’s true that the stores at Mall of America officially open at 10 AM, but I’ve learned from previous big product launches earlier this year — Apple’s Snow Leopard release and the Beatles boxed set/Beatles Rock Band extravaganza on 9/9/09 — that when there’s a hot new product out, the stores will often open early. At least half of my interest in heading out to buy Windows 7 this morning was to see whether there would be an enthusiastic crowd queued up outside Best Buy, or milling around inside Best Buy. Would there be huge Windows 7 banners? Would there be a live video feed of Steve Ballmer on all of the HDTVs?

As it turned out, no. Best Buy was still closed, and no one was visibly waiting for it to open. So I figured that as long as I had (probably) an hour, I’d head to Starbucks — which had to be open for all of those mall walkers who were already out in force — and then stop by the Apple Store, to deal with… my problem.

Yes, as I described in excruciating detail, and with photographic evidence, a couple weeks ago, I had a problem with my MacBook: the Mini DisplayPort adapter was… well… jacked up. I had broken the cardinal rule of not using undue pressure to jam a plug into a jack. If it doesn’t fit, don’t force it. Well, I had forced it. And pretty seriously screwed up the adapter plug in the process.

So, as I said, this morning when I found Best Buy deserted, I headed down to the Apple Store. I didn’t have a Genius Bar appointment, but I decided to take my chances. When I entered, I was asked if I had an appointment. I said no, and described my situation. I was told the Genius Bar was booked up until 2:30, but they’d put me on standby, and I should have a seat at the bar. So I did. About 15 minutes later, a “genius” came over to attend to me. I explained the situation, he tried the port himself, and determined that the pin that is supposed to hold the plug in place was bent up. (For some reason, that possibility had not occurred to me — I was convinced all along that the pin was too big.)

He took my MacBook in the back room for a minute to use “dental tools” to straighten the pin, then brought it back out and tried some new adapters in the port — and they worked perfectly. Problem solved. But… there was still the matter of my damaged Mini DisplayPort-to-DVI adapter, which I hadn’t brought with me. No worries, he grabbed a new one off the shelf and gave it to me as a replacement (a $29 value); no need to return the old damaged one. I walked out of the Apple Store 20 minutes after I arrived, with a fixed MacBook and a new replacement adapter. And how much did all of this cost me? Nothing.

Make dubious arguments about Apple’s high prices all you want (though the fact remains that Apple simply isn’t trying to compete in the low end of the market, and other PC manufacturers’ mid-range and high-end computers, comparable in specs to Apple’s, usually cost the same or slightly more), but I challenge you to walk into any other computer store in the land and get that kind of customer service. I didn’t have to buy an extended warranty or a bogus service plan or any other B.S. All I had to do was buy an Apple product in the first place… lifetime Genius Bar support included at no extra charge.

I wonder how the new Microsoft retail store (opening today in Scottsdale, AZ) compares.

CakePHP Auth component, Flash and Internet Explorer… a deadly combination

OK, it’s not really deadly at all… other than that it will kill your CakePHP session and log you out.

My CakePHP-based CMS uses YUI Uploader, a Flash-based file uploader utility. It’s much better than the default HTML file uploader, because it supports a fully CSS-customizable progress bar and multiple file uploads.

It’s pretty slick, even though I did tear some hair out earlier in the year trying to get it integrated into the CMS. All went well for several months, until one particular client, using Windows Vista and Internet Explorer 8, discovered a showstopper of a problem: whenever you uploaded a file, all would seem well until you went to save your changes and you’d get kicked back to the login screen, without the changes being saved. Bad news!

I did some diagnostics and determined that, yes indeed, the CakePHP session was in fact being dropped as soon as the Flash process finished queuing the file uploads (an AJAX-based process), before you actually click the “Save” button… but since there’s nothing else happening dynamically on the page, it wasn’t obvious that the session had been killed in the background.

Anyway, some research led me to a perfect explanation of the problem, and an equally perfect solution: Flash is sending a different user agent string, which was resetting the CakePHP session. I’m still not sure why it was only affecting Internet Explorer, but at any rate, a simple change to the app/config/core.php file solved the problem in a snap. The critical line:

Configure::write('Session.checkAgent', false);

I suppose by removing this line, the application is ever-so-slightly less secure, but there should be enough other precautions in place that removing the user agent check as part of the process of validating a session should not pose a significant security risk.

Network Solutions: You’ve spoken. We’ve listened. We’re just idiots.

OK OK, Network Solutions. Don’t get your nsUndies* in a bunch. (*You’ll get that joke in a minute.) I’m still a diehard Network Solutions supporter, recommending all of my clients go with you instead of the sleazy likes of GoDaddy, despite your considerably higher prices. (My argument is, if you’re willing to spend thousands of dollars on a website project, why not spend an extra $25 on a better domain registrar?)

Anyway… just because I recommend you, doesn’t mean I will refrain from criticizing this: today I logged into my Network Solutions account to make some changes to my own DNS configuration, and I was confronted with the following ghastly announcement…

Network Solutions has listened, apparently.

What? Someone actually told you “I don’t understand what ‘Web Site’ means. Can you please call it something more obvious? Like, maybe, ‘nsBusinessSpace’? Yeah, that would be great.” Well, OK, maybe someone like Bill Lumbergh would think that. But he’s not really human.

I’ve seen something like this before, though. In fact, I’ve blogged about it before. But with Microsoft, it almost, just barely, managed to seem like they were in on the joke.

Zeldman on Outlook 2010

Jeffrey ZeldmanI’ll take Jeffrey Zeldman over Jakob Nielsen any day. (Case in point.) And Zeldman’s criticism today of Microsoft’s inexplicable use of the Word HTML rendering engine in Outlook 2010 despite IE8’s genuine efforts to become standards compliant is true to form. A quote worth repeating in its entirety, re-tweeting (if it weren’t over 140 characters), and having tattooed on your favorite body part:

Big companies love these fictions where one part of the company “pays” another, and accountants love this stuff as well, for reasons that make Jesus cry out anew.

How to not bother testing websites in Internet Explorer 8

Or: What Microsoft probably doesn’t really want you to do.

Internet Explorer 8 is supposed to be more standards-compliant. Ya-freakin’-hoo. (No relation to Yahoo!) I don’t especially care, and I’d like to think the best way IE8 could become standards-compliant is to not exist in the first place. But, it’s here, and when Windows 7 arrives later this year, we (the web designers and developers of the world) will have to get used to it.

I do have Windows 7 RC running in a virtual machine on my MacBook, so I can test IE8. But waiting for several minutes for it to log in (for some reason), I came to the decision that maybe it’s not worth testing in: maybe it’s best to just take advantage of its “IE7 Compatibility Mode” to not need to test in it. It’s not like IE8 being standards-compliant (yet, somehow, still not rendering pages like Firefox and Safari) is really going to save me any time, because I’ll still need to test in IE7 (and, God help me, IE6) for years to come. Why add a third Bizarro-world Microsoft browser to the mix?

IE8, brought to you by people who don't see anything wrong with this image.

Internet Explorer 8, brought to you by people who don't see anything wrong with this image.

So I googled ie8 ie7 compatibility mode and found a helpful, if slightly douchey, blog post from a Microsoft “developer evangelist.” Of course, his blog renders completely f’ed up in Firefox, and even if it didn’t it would probably still be displaying the hideous matted-to-white-transparent-GIF-on-a-dark-background you see here.

Nonetheless, he did still give me the code snippet I need. Stick this in the header of all of your pages (which, hopefully, means editing just one file, riiiight?), cross your fingers, bow your head in the direction of Redmond and, if all goes well, you won’t have to think about IE8 (ever?) again.

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

I’m going to try it out now.

Perhaps I went out on a limb when I referred to this blog post as douchey. Never mind the fact that the guy is a “developer evangelist” for Microsoft, which is enough in itself. The two d-bag moments for me were: 1) the opening couple of sentences: “As you all know, the Internet Explorer team has been working hard to make IE8 the most standards compliant browser around. Unfortunately, not all web sites confirm [sic] to these standards today.” In other words, Microsoft has undertaken a noble effort to build something perfect and wonderful, but all you apathetic and/or malevolent web designers out there are conspiring to destroy it. And 2) “Lastly, for those of you running Apache instead of IIS (shame on you!)…” Yes, shame on you for using the most popular and stable web server software in the world. Actually, yes, shame on you for running Apache on a Windows server. You’re an even bigger douche than he is.

Update: Adding this meta tag to a client site I’m currently working on didn’t seem to have any effect on IE8, but that may be because I had manually clicked the compatibility mode button in a previous session, turning it off. (So, in other words, I am positing that if the user has manually turned off compatibility mode, it will stay off even if the page tries to activate it.) Turning compatibility mode on manually did work — the rendering issues I saw with IE8 in its normal mode went away.

Now, the thing that concerns me about all of this is that my page should be pretty damn well standards-compliant: the doctype is XHTML 1.1, which is very unforgiving, and I’ve validated it. The page looks fine in Firefox and Safari. It’s possible that the source of the problem is my IE-specific CSS file, that is fixing IE7 problems that don’t exist in IE8 (and thereby introducing new problems there). The next step would be modifying the conditional comments so that IE8 doesn’t load the IE-specific CSS, and checking whether that solves the problems. The culprit may also be IE7.js, which I viewed as a lifesaver when I started using it about a year ago, but increasingly seems to be of little to no benefit.