Apple: More Anticompetitive Than Microsoft

Just under a month ago, an iPhone developer from Australia — one who’s previously defended Apple’s approval process — had his own app suddenly dis-approved by Apple. According to his blog post about the sudden revocation of approval, “I had convinced my company to take a gamble and make some apps for Apple’s Store. Tennis Stats had been a great success and we wanted to get on the iPad train with My Frame. Things were going well, new features were being planned money, real money was being invested. Then Apple pulled the pin”.

I could say all sorts of things about schadenfreude, or how the developer — who goes by the nom de plume “Shifty Jelly” — should have seen this coming. But the guy’s already having a bad enough month, and there are broader issues to examine. Among them the thought raised by commenter Erik K. Veland:

Remember when Apple cracked down on Podcast downloaders? It was because they themselves were introducing this very feature in iTunes.

[I] would surmise [that] Apple is now bringing “widgets” to their dashboard in the near future, and that they are pre-empting any apps conflicting with the “duplicate functionality” clause. [historical links, added by Kai]

Once you’ve considered Apple’s penchant for banning apps that compete with features that are built in to the OS, you’ve got to consider how this compares against other companies’ competitive practices. Read More »

Common Flash UI Mistakes

One of the biggest problems with Flash isn’t Flash itself. It’s Flash designers. More particularly, it’s Flash designers’ basic failure to understand why certain UI elements are the way they are. This leads to one of the most common Flash designer diseases: The drive to reinvent basic UI elements. Poorly.

Page Transitions

When a user clicks a link, they’re sending a specific message with a specific intent. That intent is “show me the information I’m interested in”. It’s not “show me a nifty animation effect that takes another 5 seconds out of my busy schedule”.

Users (rightly) consider page transitions to be the space in between what they’re actually interested in. Don’t force them to pay even more attention to them.

Reinventing Scroll Bars

This error is so common, and people screw it up so badly, that I’ve already written an entire post about it. However, I’d be remiss in not listing it here, as well.

Auto-Playing Sound

Speaking of things I’ve written about before… people have been complaining about auto-playing sound since Netscape Navigator first gave us the ability to include such an abomination, way back around 1994. Eleven years later, I listed auto-playing music as a “no-brainer”, in the sense that excluding it from your site should be a no-brainer decision.

Some people will apparently never learn.

Assuming Everyone Has Enormous Bandwidth

Yes, broadband is much more common in the United States now than it used to be. That means that people are less ready to wait a long time for your page to load, not more. And a designer, developer, or other professional who understands how HTML, CSS, and JavaScript work can arrange things so that at least part of the page (or AJAXified web app, or whatever) is usable when only part of the code has arrived at the user’s browser.

If it’s possible to provide the user with something more useful than a “Loading…” indicator before all the code has arrived, then why do Flash developers never actually do so? (This is a real, not rhetorical, questions, and an open invitation for Flash designers and developers to answer it.)

Here’s Why So Many People Disparage Flash “Designers”

For a trifecta of awfulness, check out the site for Alembic, a bar in San Francisco. On my fiber-optic, 6 Mbit connection, it takes nearly 10 seconds just for the site’s intro to load. Then, once the little rocks glass is full of liquor, the page blasts some sound at me — sound that doesn’t even convey any information. (Believe it or not, I already know what a crowded bar sounds like.)

Then there are the slow transitions from sub-page to sub-page. All told, it took me a ridiculous amount of time just to find out what their hours were. But for a true dose of awfulness, try clicking on “Menus”. Then try clicking on one of the other main menu items. The site’s “background” doesn’t even realize that there’s still a “window” open in front of it… even though both the “background” and the “popup” are just visual elements of the same Flash object!

The real kicker comes when you try clicking on one of the menu pages. Rolling over zooms them a bit, but clicking? Launches a PDF document! A separate one for each page! That zoom effect was apparently just a red herring, and trying to get the place’s full menu would require seven separate PDF downloads.

I suppose they could, somehow, have disrespected their users a little more. At least the page doesn’t literally throw a drink in the user’s face. Just figuratively.

Please, if you’re designing your sites in Flash, don’t make them like this. Don’t be the web equivalent of “that guy”.

Facebook and Privacy

Okay, so I’m a little late to the party in posting this. All the professional bloggers have already written about it, while I’ve been busy with my day job. Nonetheless, something that’s been on my mind since the beginning of the week, when it would have been timely:

I think Facebook has now hit its “cap”. People who don’t yet have Facebook accounts now seem to be saying, “I ain’t gettin’ one now!” Others who do have accounts are finally abandoning them. And I’m one of those abandoners.

I have a little bit of interest in the Disapora* Project, but I don’t think it will really take off. On the other hand, in a recent New York Times article about the project, both its staffers and backers have some things to say about just how quickly they managed to raise funding — and all of those things point to a very clear demand for an alternative to Facebook.

Facebook Co-Founder and CEO Mark Zuckerberg has lately been saying that privacy is no longer a social norm, but lots of people don’t accept this. In fact, many of us think that Zuckerberg is saying such things in the hope of making them come true, rather than as observations of something that’s already come to pass. Read More »

Calling Something An “Internet Meme” Is Not Complimentary

Think about some of the great Internet memes: (Warning: Most of these links have auto-playing sound.) All Your Base Are Belong to Us. The Viking Kittens, and Longcat (who is looooong). The Badger Badger Badger song. “Don’t tase me, bro!”, “I kiss you!”, and “Leeeeeeeroy… Jenkins!!!” Why do we get “Internet memes”, but not “radio memes” or “printing press memes” or anything else like them?

Let’s try a biological analogy: Imagine you had some microorganism that could only survive in a Petri dish full of agar solution, between 60 and 80 degrees Fahrenheit (roughly 15 to 25 degrees Celsius). Make it too hot or too cold, and this thing will die. Change its food supply to some other, less plentiful, sugar source, and it can’t continue to reproduce.

Wouldn’t this organism be destined to die out?

In the real world, sure. But it might be able to thrive in a specially engineered, very gentle environment, like a climate-controlled lab.

The Internet is just such an environment, but for data and memes instead of living creatures. It’s an environment designed explicitly to propagate information — with no regard to what kind of information it is.

When we say something is “an Internet meme”, what we really mean is “a meme that’s too unfit to survive anywhere else”. Some memes — like democracy, or the works of Shakespeare, or fashion trends or the latest commercial jingle or catch-phrase — can survive and thrive outside the Internet, but some could never have taken off without the Internet making it easy for them.

They’re like hothouse flowers. Calling something “an Internet meme” is effectively calling it “an idea that could only thrive in the Internet’s no-fail sandbox”. It’s not a compliment to the meme at all.

Augmented Reality vs. Low Tech — Ready? Fight!

I’ve written before about augmented reality, Sixth Sense, and so on. Here’s a question: Is this really augmentation? As augmented reality takes hold, we’ll have more and more people wandering around looking at their smartphones’ screens rather than what’s actually in front of them. The smartphone delivers some extra information, of course, but it imposes a cost, too: the information takes a while to arrive; it takes attention to process; focusing on the screen means sacrificing practically all your peripheral vision…

It’s a trade-off, and I’m probably missing some aspects of it. What I’m wondering about, simply, is whether the trade is a net gain or a net loss.

Another way to put this — in harshly evolutionary terms, in fact — is: If someone with augmented reality and someone without it were competing for some life-or-death resource, who would win? Read More »

Can You Learn From a Prediction That Was Wrong?

Recently, a bunch of the blogs and journals I read (including my friends, not just big, famous sources) have had some bones to pick with Clifford Stoll’s 1995 Newsweek opinion piece, “Why Web Won’t Be Nirvana”. Stoll said: “no online database will replace your daily newspaper, no CD-ROM can take the place of a competent teacher and no computer network will change the way government works.”

A lot of people have been, effectively, pointing and laughing at Stoll’s failed prediction. I’d rather consider it a cautionary tale: The man who was so totally wrong wasn’t just a random pundit who didn’t know what he was talking about. He was Clifford Stoll — author of The Cuckoo’s Egg, a man who had been online for 20 years at a time when most people were just beginning to hear that there was a such thing as the World-Wide Web, and the man who traced German cracker Markus Hess through umpteen layers of insecure computer systems and networks.

In short, the man knew what he was talking about. He wasn’t a Senator Ted Stevens. If he could be so wrong, how much faith can I place in my own predictions about where the Internet’s headed?

But wait, there’s more — how wrong was he? Read More »

How Failtastic Can One Phone Be? Just Ask Palm About the Prē!

Here are a few things that I consider to be basic requirements for functionality in a smartphone, along with notes on how my Palm Prē fails to deliver:

When I press the power switch, the phone should turn on.
(Assuming the battery is charged, of course. And I’m willing to accept that a modern smartphone needs to be charged every night. No problem there.) But given that, when I press the “on” switch, I should see the screen light up within, say, one second. It should not take ten seconds. By the time ten seconds go by, I’ll assume that I must not have pressed the power switch hard enough, and I’ll try pressing it a second time.

Did you know that the Palm Prē stores power-switch presses in its input buffer? That means that when the phone finally does get around to waking up, it processes the first impulse, lights up the screen… and then immediately blanks it again as it processes the second impulse. This is extremely frustrating.

When the screen lights up and shows me an “unlock” icon, it should actually let me unlock the unit.
I’m not complaining about the fact that it shows me that icon. I recognize that it’s there to conserve my battery life by making me prove that I’m a human being, and not an inanimate object that jostled the phone in a crowded purse or backpack. I’m fine with that.

What I’m not fine with is having to try three-to-five times to get the icon to recognize my input. And it’s not like the Prē stores this stimulus in its input buffer, so if I just wait for it to catch up… it blanks out the screen and I have to try again.

Read More »

Why I’m Ditching Slackware

I went to find a package to install Git. The page at http://www.slackware.com/packages/ still says that the Slackware Package Browser has been moved to http://packages.slackware.it/ — it’s said this for years, and I keep wondering when they’re going to move the package browser back onto the main Slackware site.

But this time, when I followed that link, I found a page that’s so short, I can reproduce it in its entirety here:

The Slackware Package Browser

The old package browser was broken — instead of trying to fix it I am creating a new one from scratch. I’ll be using the Django framework. I’m also looking into Solr and Haystack to see if they can be of some use here.

It’s not going to take a lot of time and I will publish the working portions of the Package Browser as I finish and test them. Also, we’ll have some other thing to announce in a few days, so stay tuned 😉

You should follow us on Twitter here.

The cherry on top of this sundae of fail awaits at the Twitter feed: the last tweet in it is from October 23rd, 2009. As of the time I’m writing this, that’s four months ago.

The one saving grace is that that last tweet includes a link to a web-browsable repository where I was able to download the package I needed. And yes, I do realize that Slackware’s essentially a volunteer project in Patrick Volkerding’s spare time. And I really do appreciate and love the distro’s commitment to remaining Unix-like.

But I need something that’s a little more rigorously maintained.

(Now I need to figure out what to migrate to. That’s likely to be quite a headache.)

What Would an Ideal Portable-Computing UI Look Like?

Right now, the question of what you need in a mobile computing platform is most often phrased in terms of “Do you need a netbook or a full laptop? Or perhaps one of the new high-end smartphones will manage?” I think the question isn’t one of capabilities as much as it is a question about how we access those capabilities.

For some people, the iPhone’s lack of a physical keyboard is a deal-breaker. For me, the smaller-than-standard keyboard on the average netbook is a powerful disincentive: If I had to use one, it would slow down my interaction with the netbook — and if I learned to be fluent and productive with the small keyboard, it might mess up my muscle memory for dealing with full-size keyboards on my “real” computers. It’s not a trade-off I’m willing to make.

The Palm Prē’s physical keyboard is tiny. I can only key it with my thumbs, and there’s no risk of interference with my pre-existing keyboarding skills. Inputting data with it is achingly slow, but offset by the device’s wonderful portability (it fits into a pocket even easier than an iPhone does). But I can’t really edit text with it, because there’s no D-pad to do precise cursor positioning with. Even the Orange+finger-movement trick is balky and awkward, in my experience; if I want to correct a single-letter typo, getting the cursor after the incorrect character so I can backspace and correct it is such an ordeal, it’s often quicker and easier for me to use Shift+Backspace to delete the entire word and then retype the whole thing.

In effect, even though the phone has the ability to edit text, the interface makes it so difficult that I can’t use the capability. It might as well not be there. What would a better interface mechanism look like? Read More »

Silly Coding Tricks: “Inverted” String Match

First things first: Never actually do this. This is just a fun curiosity, for amusement value only.

Because of the way JavaScript’s search() method works, you can do:

var my_url = 'http://kai.mactane.org';
if (! my_url.search(/http:\/\/kai.mactane.org/)) {
    alert("Your URL is http://kai.mactane.org");
} else {
    alert("Nope, your URL isn't http://kai.mactane.org");
}

Try running this, and it will correctly claim that “Your URL is http://kai.mactane.org” — even though there’s a ! at the beginning of the test. What gives?

That exclamation point looks like it’s saying: “If the search for http://kai.mactane.org within the given string fails…” But what that test is really saying is: “If the search for http://kai.mactane.org returns Boolean false — or anything that evaluates as Boolean false…”

What that search() call actually returns is the character index at which the needle is found, or -1 if it isn’t found. Since the needle is found at the very beginning of the haystack — at character index 0 — search() returns zero. Which evaluates to false in a Boolean context.

If the needle isn’t found, the search will return -1 — which evaluates as true in a Boolean context!

Effectively, the ! operator is reconciling the disagreement between search()’s idea of falsehood and if()’s idea of falsehood: search() returns -1 for a false result (a failed match), but if() considers -1 to be true, not false.

This trick only works with needles that you are sure will only occur at the beginning of the haystack.

Once again, you should never, ever actually write code like this for any serious purpose or in anything you intend to deploy in the real world. The maintainability problems are not worth the amusement of confusing all your co-workers with a test that looks reversed. Instead, use a positional anchor in your regex, and explicitly test against -1…

if (my_url.search(/^http:\/\/kai.mactane.org) != -1)

…like any sensible JavaScript coder. (Yes, that last bit is intended to be ironic. I wrote something once about the silliness of having to add that extra test; I’ll have to see if I can find it and republish it here. )