soeren says

Public Service Announcement

May 15th, 2008

Chances are you can’t read this, but maybe you’re lucky. The host running this blog, MYSTcommunity, MYSTlore, the D’ni Linguistic Fellowship as well as various other sites is experiencing DNS issues; even though the sites are running, you won’t normally be able to reach them.

You can temporarily fix this by editing your hosts file. On a Unix-like system (including Linux, Mac OS X, etc.), this file resides in /etc/hosts; on Windows NT-based systems (including 2000, XP and Vista), %WINDIR%\system32\drivers\etc\hosts. Open the file in a text editor and add a few lines like so:

216.127.69.124 mystfans.com
216.127.69.124 www.mystfans.com
216.127.69.124 chucker.mystfans.com
216.127.69.124 mystcommunity.com
216.127.69.124 www.mystcommunity.com
216.127.69.124 www.mystlore.com
216.127.69.124 en.mystlore.com
216.127.69.124 linguists.bahro.com

On Mac OS X, you also need to flush the hosts cache using dscacheutil -flushcache on 10.5 Leopard, or lookupd -flushcache on 10.4 Tiger and older (otherwise, the change won’t take place immediately).

Afterwards, launch your browser and the URLs should work as usual.

Tagged , , ,
Posted in Chuckellania

Share | No Comments

Restoration

April 6th, 2008

Suppose you want to add a feature to your app that will restore windows that were open in the previous session. Several browsers do that to varying degrees, for instance.

The model isn’t a big deal. As long as you have a way to uniquely identify the window’s contents, you’re good to go with the most relevant piece of information. Could be a URI, could be a local file path, could even be additional data from the session. OmniWeb, I believe, actually stores unsaved/unsubmitted form data in addition to the mere URLs. Or you could store previous history items so back/forward buttons continue to work. Storing window location and size is a plus, too.

Likewise, you don’t have much to think about when it comes to the controller. You could do it the lazy way and save this data when exiting the app, but then you don’t have the worst case (and ironically the one where this feature would help the very most) covered: that of your app crashing, thereby not exiting safely. So instead, you could store this (asynchronously, please: wouldn’t want to annoy the user with such mundane tasks!) as windows get opened, closed, moved around or resized. At any given time would you have an up-to-date data structure.

But then you get to the view. How does the user interact with such a feature? Does every user want such a feature?

In the simplest case, we’d just turn it on for everyone, whether they like it or not. Quit the app (or crash it, or have the computer go down from a power outage), then launch it again later on, and boom, all windows are back. Nice, huh? But that can get annoying fast. What if Joe just wanted to pull up some contact real quick, without having to wait for twenty other windows to come up just because he had them up the last time? Having to deal with launch time at all is bad enough; having several seconds added on top of it adds insult to injury.

Oh, I know what you’re thinking: suppress the ‘reopen the windows from my last session’ feature by holding the shift key (or some other modifier) when launching. Sure. For the computer-obsessed like us, that’s a perfectly fine way of asking the application to diverge from the default behavior. Unfortunately, even if everyone were to learn about such a non-obvious feature, they still wouldn’t think about it when a phone call comes, they’re stressed, almost panicking, having to look up something as fast as possible because they were technically supposed to know it before the call even took place. They would not remember to hold shift, I assure you.

Next up? “Make it an option!” Of course. Just add a checkbox “Always Reopen All Windows From Previous Session” checkbox to your already-bloated Preferences window — there’s no better way to ensure that 95% of your users will never opt against the default behavior, and, should they dislike said defaults, they’ll be annoyed and hate your app, rather than even considering the possibility that they can change them. That is, if you default to leaving this off, most won’t even know the feature exists to begin with. If you default to turning it on, most will assume that’s the way your app works, no alternatives. Consider Safari 3. As Gruber puts it:

I love Firefox’s auto-restoration of tabs and windows. Quit Firefox, relaunch it, and your previously-open tabs and windows are restored. Safari 3 has this feature, but makes you do it manually via the “Reopen All Windows From Last Session” command in the History menu. I’m sure most Safari users have no idea this feature even exists. At least as a preference, Safari should offer the ability to do this automatically.

That last sentence, however, somewhat clashes with the previous one: such a preference would only be of benefit for those who do know about the feature’s existence in the first place.

Then there’s Firefox 3’s way: when you quit while tabs are open, you get a dialog:

Do you want Firefox to save your tabs for the next time it starts?

In addition to the well-labeled buttons “Save and Quit”, “Quit” and “Cancel”, there’s also a “Do not ask next time” checkbox, thus informing any average guy that yes, this feature does exist. And when quit unsafely, you get the following upon next relaunch:

Your last Firefox session closed unexpectedly. You can restore the tabs and windows from your previous session, or start a new session if you think the problem was related to a page you were viewing.

The button labels “Restore Previous Session” and “Start New Session” are a bit lengthy, but clear enough.

But the trouble is, quitting safely is not the point in time you typically know whether you do in fact want those windows open again. The next launch is.

That’s presumably why Safari’s developers instead opted not to have any dialog at all — neither when quitting nor when launching — , because both of those get in the way of your normal workflow. Rather, there’s a menu item underneath “History”: “Reopen All Windows From Last Session”. Which brings us back to lack of discoverability.

To recap so far:
A typical application does not sport such a feature. Therefore, a user does not expect it to exist unless they are inadvertently exposed to it, at which point it is likely to annoy them. A preference would not be discoverable, and leaving the preference out would require a default, which some users would inevitably dislike (and assume to be unchangeable). Moreover and needless to say, any added preference needlessly obscures the potentially more relevant existing preferences.
Asking on quit or on launch gets in the way. Whether quitting or launching, the user probably wanted to accomplish something swiftly without being interrupted. Asking on quit also doesn’t handle the crash case, which is why Firefox gives special treatment to that one — something to be avoided as well.

And yet, I look at Firefox 3 for the solution. When you’ve entered a password, it features a new, non-modal panel asking whether you’d like it remembered. It doesn’t get in the way of your regular workflow; you can dismiss it but don’t have to in order to proceed.

That, I think is what’s needed here as well: a bar, a portion of the status bar, or perhaps even so little as an icon, to inform you that you could restore windows from your previous session if you were so inclined. An offer. One that you have plenty of time to think over and don’t have to deal with now, or even at all. This also allows another addition to the feature: a popup menu letting you choose particular windows to restore, one by one. Just have an “All Windows” option in bold as the default, a separator, and then one menu item per previously stored and now recoverable window. On Windows, bonus points for decorating each menu item with the respective window’s icon. On Mac OS, not so much.

The bad news is that implementing it this way takes a ton of time. Such a UI control, while increasingly commonplace, still doesn’t come standard with most frameworks. But on the upside, you have just implemented this in a way that, even if arguably not right1, you put a ton of thought in, and only a fool wouldn’t applaud you for that.

  1. UI design is hard. Getting UI design right for everyone is virtually impossible.

Tagged
Posted in Elaborated

Share | No Comments

Protected: The Demoralizer. In a few moments, transverse magneto energy will surge through your brain.

March 24th, 2008

This post is password protected. To view it please enter your password below:


Posted in Life

Share | Enter your password to view comments

Expression Web vs. Web standards

March 22nd, 2008

Contrary to Mark Pilgrim, I agree with Joel Spolsky that Microsoft is facing a dilemma. They’re damned if they do make Internet Explorer 8 significantly more standards-compliant by default — because it will break thousands of websites, particularly on the often-overlooked niche of company intranets — ; they’re damned if they don’t, because that would further confirm everyone’s impression that Microsoft is deliberately slowing down progress on the Web at large.

Denis, then, makes the amusing suggestion of giving Internet Explorer a new name. In doing so, they would have plenty of justification for ThisNewBrowser to have a significantly changed (or wholly replaced) engine, with different behaviors; it would, effectively, give Microsoft some breathing room and a fresh start at establishing their browser as one that complies with standards and moves everyone forward.

Stop laughing.

This isn’t quite as absurd as it may come across at first. Not only is it not the first time for Microsoft to use a different engine: Tasman, back in 2000, was well ahead of its time, being the first to ship complete CSS 1.0 support. It also isn’t the first time they drop one Web-related app in its name, brand and face, replacing it with a superior substitute: Expression Web is a refreshing change from years of FrontPage, and Microsoft alleges its engine is “the most accurate rendering engine available today”. Denis’s suggestion may not seem quite so unthinkable now.

Of course, it still isn’t very likely. Microsoft has already made the first beta of IE 8 available, and luckily for us, they had previously rolled back on their initial decision to make IE 7-style rendering the default. Still, they don’t seem very confident about this: why develop multiple mutually competing engines in-house, other than one not fulfilling the requirements of the other? Had it been in any way feasible, I’m sure they would have preferred to ship Expression Web with Trident, their IE engine, and still call it “the most accurate”. But it wasn’t, and everyone knows that, so they had to impress us by creating a new engine, and creating it well.

How well do they stack up to that goal?

To me, the first part of giving a good impression on that would be to make the product page validate, or at least come close to that. getfirefox.com validates, as does opera.com; however, neither microsoft.com/ie (173 errors) nor apple.com/safari (7 errors) do. So, does Expression Web’s page? No, sir; 72 errors.

In fact, the errors start with the incorrect claim that the page is XHTML 1.1. It’s delivered as text/html, presumably to make it compatible with Internet Explorer, a compatibility mode that isn’t allowed in XHTML 1.1. Among the more glaring problems in the hard-to-read markup are a duplicate head element as well as the odd decision not to close li elements. I say ‘glaring’ exactly because they would seem so simple to fix.

To be fair, their claims focus largely on CSS, and the page fares a lot better in that regard; in fact, most of the errors from the CSS validator are due to pre-CSS 3 feature Microsoft makes use of.

Still, I question the value of their “support for XHTML” when their very own browser still fails to properly1 support it.

But perhaps the engine itself is better than the promotional website.

Well, I’d be happy to tell you the current Expression Web 2 beta comes close to passing Acid2, if only that were true.

This result is hardly any better than those of Internet Explorer 6 or 7, and doesn’t quite constitute “most accurate”. One can argue that some of the mistakes stem from the fact that Expression Web is an editor, not a browser, and thus deliberately positions things slightly differently (such as by providing rulers and visual guidelines), but that wouldn’t explain some of the crass rendering errors.

Expression Web is not a bad app. It’s quite a leap from Front Page, provides nice autocomplete functionality and, in 2.0, even integrates a lot of PHP functionality — despite Microsoft having its own, also-supported alternative in ASP.NET. But it falls very short of the marketing claims regarding its engine. I cannot find a single objective piece of information on the Web on how it is better at all, much less in any way, and it certainly does not deserve a superlative. A shipping version of Safari (with WebKit) passed Acid2 over two years ago; multiple browsers did in 2006. Given that IE 8 will pass Acid2, it seems as if the Expression Web team should simply move back to the Trident engine and work to improve that even faster, if they haven’t already.

Meanwhile, WebKit is at 95/100 for Acid3
. I’d feel a lot more sorry for the conundrum faced by Microsoft’s engine developers if only they could show that they’re trying as hard as they can to solve it.

  1. Where by properly, I mean served as application/xhtml+xml.

Tagged , , , , ,
Posted in Chuckellania

Share | 2 Comments

Follow Me

March 22nd, 2008

Call social networks overhyped, or call them part of the giant buzzword bubble that is Web 2.0; I think they have their uses, and I also can’t imagine them going away, short of being replaced by a superior concept. So, instead of waiting for this bubble to burst, let’s separate cream from crop.

Arguably, relationships are the core aspect of your personal network. Facebook calls them “friends”, as do MySpace and similar sites. LinkedIn, in an attempt to come off as more professional, calls them “connections”. And Twitter? The URL says “friends”, but the concept is largely presented as “following” someone.

And “following” is indeed what it is: when they shower, leave for a trip or have thoughts while doing somestufforother. From the mundane to the intriguing, plenty of information is constantly pushed to the site, then pulled by clients and distributed to many a user.

Some “tweets” are amusing, including the occasional nerd humor; others provide in-depth insight. E.g., despite the common misperception that Apple employees are barred from publicly participating on the Internet1, people like Deric Horn or Bill Bumgarner have happily done exactly that2.

But our hours per day are limited. We could just follow everyone, thus minimizing the risk of missing out on something worthwhile, but would that be practical? Bizarrely enough, some seem to think so. Others pride themselves on a seemingly absurd number of followees, such as nearly twenty-five hundred, or close to seven times the monkeysphere. Apparently in response to me having BarackObama, “he” (presumably a staff worker or bot of his) added me back — but so did “BeatMcCain” as well as, uh, “RudyGiuliani32″. I’m hardly alone in my bewilderment of this apparent desire to follow such complete strangers in person as well as personality. Says Matt Gemmell:3

Why do such random people follow my tweets? “Married mom of 3 toddlers who’s loving real estate”, welcome to… Cocoa development?

I still pile on to my list of “friends”, “connections” and “followees”. But I also occasionally carefully pull some out from the bottom. Instead of the entire stack falling apart, it actually ends up more stable.

This may seem too much of a business approach, but I find that if I don’t build my network carefully, choosing whom to include as well as whom not to include, the concept doesn’t benefit me. Following fifty people on Twitter, give or take a few, works for me.

When people add me on top of hundreds of others, are they really interested in me? Inspired by me? Do they learn from me? Uli Kusterer is, of course, right:

Well, if they don’t have anything better to do, let them :-)

…but my puzzlement remains.

  1. As found, for example, in this article’s assertion of “Forget corporate blogs — Apple doesn’t seem to like anyone blogging about the company.” (which, unsurprisingly, isn’t backed up at all by any references).
  2. Consider Deric’s enthusiastic fielding of questions after the iPhone SDK press event, such as here.
  3. Update: turns out she’s a Mac user.

Tagged , , , , ,
Posted in Rants

Share | No Comments