Firefox 3.0b3. Sexy.
TechnicalIn spite of my previous rant, I'm not prepared to give up Firefox just yet - even in the face of blazing speed increases from the Safari camp. Now the Firefox team has given me one less reason to switch (albeit a superficial one). The new beta3 release is gorgeous, borrowing heavily (it's homage, right?) from the Safari UI, it seems to me.
I've only had it installed for a few minutes so I can't speak to any other improvements, but I like the look (a lot) and they appear to have fixed a bug that prevented me from editing blog posts in the beta2 version.
Leaving Firefox Behind
TechnicalI keep trying to leave Firefox behind. And trying. And trying. Not behind, behind like feathered hair or roadkill, but behind as in dropping it as my primary browser. I haven't had much luck so far and it's pissing me off just a little bit. This I tell you this now because I just installed 3.0 b2 on my Mac hoping it would be better than 2.x and my bitterness is a bit more acute at the moment. Needless to say, it's not better. Not really, anyway. It doesn't even look that much better. I may even prefer the look of 2.x with one of Aronnax's outstanding grApple themes applied, to be honest.
I adopted Firefox as my primary browser somewhere around the 0.8 release. It was fresh, clean and snappy and it was just a pleasure to drive. I don't know when the transition occurred, but somewhere in the last year or so it's begun to feel clumsy, cumbersome, bloated and generally heavy. Memory leaks, crashes, sluggishness when simply opening a new tab (which I have set to load about:blank) and seemingly random beach ball appearances have all taken their toll on my patience. And before you ask, no, I don't have an endless parade of extensions loaded. I've long since gone through the effort of identifying those that are really useful to me and those that are merely convenient or even whimsical and weeding them out. Nothing has helped. Certainly not enough to make me truly enjoy the experience of browsing with Firefox.
I've tried Safari. I like it. It's fast. Unfortunately, it's not even remotely extensible. Yeah, I know you can pimp Safari, but those aren't extensions. Safari doesn't offer an official extension architecture, as far as I know. The very fact that any extended functionality exists at all is owed entirely to the talented developers who wanted more and cared enough to dig deep and find a way. Apple could slam that door any day, if they chose to do so. I don't want to become dependent on something that could disappear tomorrow.
I've tried Flock. Nice, but too much social butterfly bloat for my tastes. Full disclosure: I didn't spend enough time with it to even determine whether extensions are available. I may go back and give it another shot if I hear of any reason to think it's better than I give it credit for.
I had hoped that "Site-Specific Browsers" like Fluid (Mac only) and Prism (née WebRunner) might fill the void. I love the concept. The ability to run web applications as independent desktop applications solves a lot of problems for me - real and imagined. On the "real" side, I love that I have some measure of protection if/when my browser crashes. My apps are running independently and are unaffected by whatever fit of irritability strikes my browser. On the "imagined" side I have better control over my desktop clutter. Throughout the day, I spend a lot of time in Gmail and Google Reader. I also spend a fair amount of time in Basecamp, several different Trac projects, Google Docs and few others. That's a lot of tabs in a browser window so I typically leave only Gmail and Google Reader open. Two permanent tabs are somewhat manageable. More, well, aren't.
Site-specific browsers spare me from having to make that choice. I can create a separate desktop application for each web app and have each window open all day long without affecting my browsing experience. On the Mac, I have the added capability of hiding windows (via Cmd+H) to keep them open, but further reduce desktop clutter. Those I don't explicitly hide away are hidden away for me by SpiritedAway (a very handy utility for clutter freaks like me).
Alas, none of these are extensible either.
I tried Camino, but to be honest, I did so when I was still pretty enamored with Firefox. I may not have given it a fair shake. I think I'll venture back in that direction for a little while.
Maybe I just need an intervention. Maybe I'm hopelessly addicted to the extensibility that Firefox offers and its sluggishness and unresponsiveness are the price I pay. Between extensions and Greasemonkey scripts, maybe my life has become too productive within the browsing experience for me to sacrifice it in favor external issues. Maybe Meatloaf was right and objects in the rear view mirror really are closer than they appear. Firefox 3 is still in beta. Maybe there's still hope...
SuperDuper 2.5 (Finally) Released
TechnicalI've been looking forward to this for a long time now. SuperDuper, of course, is the outstanding backup software for Macs and this release offers compatibility with OS X Leopard. It's not free, sadly, but it's one of those apps that is far enough ahead of its free counterparts that I believe it's worth paying for. Yeah, I know Leopard ships with TimeMachine. Wonderful. Fantastic. Not good enough. Doesn't work for me.
I don't mean that it literally doesn't work for me. It probably functions just fine. My problem with it is that TimeMachine forces me to park a big ol' external hard drive on my desk and hard-wire it to my machine. One of the reasons I transitioned to laptops all these years ago is because I really like the small footprint. My workspace doesn't feel as cluttered as it did when it was dotted with a monitor (or two) and all of the other accoutrements. I actually have room to, you know, work. My mission is minimalism - even at the expense of a proper backup, apparently. Why TimeMachine can't natively support backups to a network server, preferably over wireless, I don't know. The cynic in me is inclined to wonder whether it was a deliberate ploy to create a market for Time Capsule, though the fanboy in me keeps the cynic from getting too belligerent. The point is, TimeMachine doesn't backup to a network server. Nor is a TimeMachine copy bootable. A SuperDuper copy is, though. Another check in favor of the latter, as far as I'm concerned.
I upgraded to Leopard about a week after its release (when was that? October? November?) and hadn't done a backup until two nights ago after installing the SuperDuper upgrade. I was fortunate that nothing catastrophic happened in the interim, to be sure. I waited to write this until I had performed two backup operations - one kicked off manually and the other scheduled - and I'm happy to report that the upgrade was every bit as seamless as I could have dreamed it to be. Not only was the upgrade itself easy, but even after several months worth of file system changes, both backups ran without issue.
Comparatively speaking, I'm feeling very safe these days thanks to the guy(s) at ShirtPocket Software.
Fail Now, Fail Loud, Fail Proud
TechnicalI write less code than I used to (particularly during the daylight hours), but I inherit a lot of code and I review a lot of code in addition to that which I still write. Today I read something that reminded me to write about a trend - or maybe it's an oversight - I've noticed in the last few years. It seems that a lot of developers are afraid of errors. Somewhere, somehow, it seems like it became the norm to create "bug-free" software by masking bugs and failing silently. Why? Or, more assertively...stop that.
Contrary to popular belief, errors are user-friendly (at least in the long run). Errors are certainly developer-friendly. In almost every case, the latter begets the former, I've found.
I've spent hours of my life on the phone with customers attempting to articulate some cryptic, unexpected behavior in their own vernacular expressed through their perception of events. It's irritating and frustrating for everyone involved, but it's not their fault. If the software I've created or inherited hasn't provided them with a more precise avenue by which to relay the problem - a clear, concise error message - then this is the only means I've allowed them. This will not end well. Not for anyone.
Users are using software for their own reasons and their reasons almost never include carefully monitoring action sequences in case they need to replay it later for support or development staff. Really. When they're forced to do so, the result is often wildly inaccurate and littered with assumptions. Likewise, support and development staff have their own assumptions and even their own vocabulary. Sync'ing so many variables across disparate actors is challenging at best.
Many of these challenges can be easily avoided with proper error messages. Errors should be written clearly and concisely, but with sufficient detail. If detail must be omitted from the message presented to the user for spatial or security reasons, at least log the necessary level of detail. More information translates directly into easier reproduction, quicker isolation, more precise adjustments and faster turnaround time. That translates nearly as directly into a happy user.
Here are my requirements for error messages:
- Use complete sentences. Sentence fragments can sound terse and "unfriendly".
- Briefly, but clearly, state the nature of the error.
- Provide additional detail about the error. This might include where it occurred, when it occurred, the previous action, etc.
- Offer a few common, known causes of the error (if applicable).
- Provide the details of a workaround (if any).
The first two requirements are mandatory. The third is highly recommended, but may be logged rather than displayed. The last two are optional largely because they may not be applicable. Adding this level of information, though, gives the user a sense of empowerment and is generally well received.
Most (reasonable) users I've encountered don't mind errors (to a point). When errors occur, most genuinely try to provide as much information as they can and are even willing to work with support and development staff to reach a level of comfort that the problem has been clearly expressed. Articulate error messages bring that process to a happy conclusion much faster by removing ambiguity.
Don't Break the Web
TechnicalIn light of Microsoft's plans (or is it just a proposal?) for browser version targeting, I'd like to weigh-in on a more philosophical level. There are a lot of very smart people chiming in on this who are much closer to the situation than I am at a practical level. They are better equipped to speak to any implementation concerns. My concern rests at a higher (as in more abstract, not better) level.
The IE team's fundamental principle, they've said, is "Don't break the web". Noble. I actually mean that. I'm glad that they recognize the influence (both positive and negative) that they've have on the web and on the sites and applications that have been created for it. That's important, I think. I do have a problem with the principle, though, and it's kind of a big one. I can't help but wonder if that's really the best we can do. "Don't break the web?" I'm all for not breaking the web, but there should be more to it. For any company, "Don't break the web" is a frighteningly passive principle. For a company with the influence and resources of Microsoft it's simply not sufficient. How about "Progress the web" instead? Speaking normatively, of course, shouldn't the end goal of any software be to improve itself and to improve its context? Hell yes, it should.
In order to progress, backwards compatibility cannot be the guiding force. It's important, yes, but it's not the Holy Grail of software development and it simply can't be. Complete backwards compatibility introduces bloat, discourages refactoring and often prevents the adoption of evolving best practices. It probably does more undesirable things, but those jumped to mind immediately. None of those are good things. As I mentioned, I'm not arguing that backwards compatibility shouldn't be considered or shouldn't be a goal. I'm arguing that it shouldn't be the end game. Sometimes it's okay to break some things. It's just another trade-off.
I'll leave as much backwards compatibility as I can without affecting the future of my software; I'll provide automated tools, where appropriate and possible, to assist in the upgrade process; I'll share as much knowledge and provide as much consultation as I possibly can to help users perform any manual operations, but I have to keep thinking about the next version of my software, not the last 4 versions. If I'm forced to make a choice between doing what's right moving forward and preserving backwards compatibility, I'm going to choose the former almost every time (I actually can't think of a time when I wouldn't, but I don't want to paint myself any further into a corner, here).
As an example, let's talk IE7 for a minute. I'd have preferred that it go further, but with respect to this topic I'm quite satisfied with how it got released. There's a lot of backwards compatibility, but some stuff broke. That's fine. That which broke was broken in the interest of progression. I might even go so far as to argue that the breakages were a good thing. The number of broken, um, features were reasonably manageable. Sites that hadn't been maintained in 5 years maybe didn't need to remain online. Or maybe they did. The ones that did made the necessary changes and the ones that didn't were perhaps discovered, audited and taken down. The point is, a lot of stuff still worked and what didn't wasn't prohibitively difficult to fix - especially since they were being fixed for the better. Progression is worth a little effort.
With respect to the X-UA-Compatible meta tag, I need - and intend - to do more reading and thinking, but my gut reaction is this: I'm okay with the mechanism (the introduction of a new tag), but not with the implementation. I think it's exactly 180 degrees from correct. Default to standards compliance and allow for backwards compatibility.
Progression is worth a little effort.
Attractive Accessibility
TechnicalGenerally speaking, I do everything I can to avoid images in content. Simple text is easier, more maintainable, more accessible and, for added incentive, I'm a spectacularly inept designer. Predictably, though, there's always an exception. When an exception arises and I have to use an image, I still want the markup to be semantic and accessible.
The technique I use isn't revolutionary or even new, but I don't see it used very much where I work, so I thought I'd write it down. Who knows? Maybe it's less common than I've been assuming it is.
Let's pretend, for example, that I have a logo for robwilkerson.org that I want to use in lieu of the text that appears now (work with me here). Since it's the name of my site, it's also the most important text on any given page of the site - a perfect candidate for h1 status. Except I need to use an image to get the branding right. Hmmm...
Fortunately, it's not so hard to do both using semantic markup and a background image. Using this example, my markup would look like this:
<h1><a href="/"><span>robwilkerson.org</span></a></h1>
h1 because it's important text. a because I want to be able to click on the site name and get back to the site homepage. span because, well, you'll see. Now that I have my text, it's time to apply the logo image. I do this in my stylesheet:
h1 {
background: url(/path/to/my/logo.png) top left no-repeat;
height: 57px;
}
h1 a {
display: block;
height: 100%;
}
h1 a span {
visibility: hidden;
}My logo image is applied as a non-repeating background on the h1 element. To make this work, the element's height must be at least equal to the height of the logo. The nested anchor element is given a block display so that its height can be set. Given this styling, the entire logo will be clickable. Lastly, the inner span is hidden so that only the logo is visible. If I hid either the anchor or the heading then the logo wouldn't be clickable.
One important detail is the use of the visibility property rather than the display property to hide the text. Many, maybe all, screen readers will not read text whose display is set to none. Most, and again maybe all, will read text that is simply hidden.
Stylish, accessible and searchable.





Loading....