What Are We Giving Up With E-Text?

Engineering is about tradeoffs, and each technology has its advantages and drawbacks. Whenever we leave one technology behind and adopt a new one, we’re sacrificing something. We may be making a terrific trade, getting a hundred times as much cool stuff as give up — but we’re still giving up something, and we should be aware of what it is.

We’re currently moving away from paper printing, replacing physical books with e‑books and text readers. We need to look at what we’re giving up in the process.

Lev Grossman recently wrote an article for the New York Times‘s Sunday Book Review, “From Scroll to Screen”. In it, he points out how our current book format, the codex (multiple pages bound in a rectangular shape between two covers) took over from the scroll (a single long sheet of paper wrapped around a rod or roller). He cites easy random access as the codex’s chief benefit, and an absolutely critical one.

We usually associate digital technology with nonlinearity, the forking paths that Web surfers beat through the Internet’s underbrush as they click from link to link. But e‑books and nonlinearity don’t turn out to be very compatible. Trying to jump from place to place in a long document like a novel is painfully awkward on an e-reader, like trying to play the piano with numb fingers. You either creep through the book incrementally, page by page, or leap wildly from point to point and search term to search term. It’s no wonder that the rise of e-reading has revived two words for classical-era reading technologies: scroll and tablet. That’s the kind of reading you do in an e‑book.

Not to use too much of Grossman’s text, but another section near the end of his essay points out a critical aspect of the sacrifice we’re making as we move toward e‑books:

[I]f we stop reading on paper, we should keep in mind what we’re sacrificing: that nonlinear experience, which is unique to the codex. You don’t get it from any other medium — not movies, or TV, or music or video games. The codex won out over the scroll because it did what good technologies are supposed to do: It gave readers a power they never had before, power over the flow of their own reading experience.

Except that’s not the only sacrifice involved. That’s simply the technological, UX sacrifice — but we’re also making a societal sacrifice, and it’s one that may be even worse. We’re sacrificing a huge number of readers, many of whom become writers and boosters of text as a mode of communication.

Recently, Seanan McGuire wrote “Across the Digital Divide”, in which she talks about what it’s like to be poor, and about how the current (official, U.S. government) measures of poverty are based on what was available in 1955. Read More »

A Follow-Up on Pronounceability

Late last year, I wrote about making sure your domain name is both spellable and pronounceable. Well, I just encountered a site that technically gets it right, in that its domain name is exchangebitcoins.com. But as soon as you look at their logo, which presumably tells you what they actually want to be called?

At that point, pronounceability falls apart, because their logo bills them as ExchB. How the heck do you say that? “Ecks-ch-bee” is the best I can think of, and that doesn’t exactly roll off the tongue. (Note that I’ve studied Russian, and so I consider words like znakomstvo only moderately difficult to pronounce.)

This BetaBeat story also calls them ExchB, and says in part: “‘ExchB customers can walk up to any of over 15,000 locations nationwide and make a cash deposit at any Chase or Wells Fargo branch,’ president David Sterry wrote last week.” No kidding he wrote it; if he’d tried to say it, I’m not sure what would have happened.

If anyone can tell me how to pronounce this place’s name, I’d be quite interested. I don’t mean to slag on them too much, but I’m honestly curious how their employees refer to their company in casual conversation.

Google+ Doesn’t Want “Real” Names. They Want WASPonyms.

Three pieces of news lately about Google+ make it clear that when Google claims they want you to use your “real” name, it’s a load of hooey. First off, a legally mononymous Australian journalist named Stilgherrian was told he couldn’t use that name — his actual, legal name — on Google+. He was not at all pleased, and has written one fairly professional complaint and one vitriolic and expletive-soaked rant about it (indeed, even the URL of the latter post could be considered NSFW).

Then Microsoft employee M3 Sweatt had his Google+ profile suspended. Unlike Stilgherrian, M3’s name is the one his parents gave him when he was born. His name also has the virtue of having a recognizable first name and last name. Nonetheless, Google+ says it doesn’t count.

Finally, the Internet personality who goes by the (non-legally-recognized) moniker Rainyday Superstar changed her Google+ profile to list her as “Rainy O’Leary”, and told Google very explicitly that this was not her real name. She also set every other field in her profile to say, “My name is Rainyday Superstar”.

Of course, Google reinstated her Google+ account. (She has since deleted it.)

Taken together, these three events make it very clear that Google doesn’t give a damn if you’re using your “real” name. They just want you to use a “normal-looking” name. Google wants you to use a WASPonym, a name that looks like it comes from middle-class, white-bread, suburban America.

This is just one of the reasons why I’ve been putting the “real” in “‘real’ names policy” in quotes all this time. There’s also the question of what makes a name “real” at all, but it seems pretty clear that by any sane standard, M3 Sweatt’s name qualifies. It’s the name his parents gave him at birth, and one that he feels a personal attachment to.

But it’s not a WASPonym, so Google says that if M3 wants to keep using G+, he’ll have to change his handle to a name that’s not his real name.

It’s not a “real” names policy at all. It’s a WASPonym policy.

I have no idea why they’re insisting on it, but it will do absolutely nothing to hold people accountable for their words or actions, or to stop spam, or any of the other things Google keeps claiming. All those excuses are a lie and a ruse.

There is no longer any sense in calling this policy “a ‘real’ names policy”; continuing to use that terms merely aids Google’s attempts to confuse the issue. It’s a WASPonym policy, and I will call it that from now on.

The Problem With Jamie Zawinski and Regular Expressions

Jamie Zawinski, also known simply as jwz, is famous for his quote: “Some people, when confronted with a problem, think ‘I know, I’ll use regular expressions.’ Now they have two problems.” It’s a very amusing line, and I can totally see why people all over the world are using it in their .sig files: It makes them feel better about not being able to understand regexes. And it looks more erudite than just saying, “Some dude who used to work for Netscape thinks they’re a bad idea, so I don’t have to worry about the difference between \w and \S.”

(It turns out the “now they have two problems” construction didn’t even originate with Jamie; it can be found — slamming awk instead of regexes — in the .sig line of a Usenet post in comp.sys.ibm.pc.rt in 1988, and perhaps even further. Maybe this is just another instance of how, as Jamie puts it, people only remember the stupid stuff he says?)

Anyway, as witty as this line is, it’s wrong. Like any other tool, regular expressions are designed to solve a particular class of problems. And, like every other tool, there is a class of problems that they’re just not so good at handling.

Regexes are excellent for doing pattern matching. If you need to ensure that a text string is, for example, a standard ISBN, or a postal code from a particular nation, or a valid username for a given spec. In any of these (fairly standard and common) validation scenarios, regexes will save you a lot of time and trouble.

To take a fairly trivial case, suppose you want to know if a given string is a valid US ZIP code. If you don’t have regexes available (either because you’re working in a language that doesn’t support them, or because you haven’t learned them), your first thought might be:

if (is_integer($input) && $input < 100000 && $input > 0)

But this doesn’t work, because “2134” is not a valid ZIP code — although “02134” is, and can be found in Boston. Plus, this conditional won’t handle 9-digit ZIP codes. What you really need to test for is: “This string has 5 digits in a row. Then, optionally, it has a dash, and then 4 more digits.” Read More »

How Many Identities Does a Single Person Have?

(This was originally posted on Google+ itself. I’m also keeping it here, for easy reference.)

A friend of mine notes that one of the problems of the current Google+ “real names policy” is that “Google is attempting to deal with (I’m assuming) manufacturing a community of 1-to-1 RL presence-to-online presence” — in particular, he says that while he does have questions about how Google is attempting to do this, he also has a lot of respect for the fact that they are trying to.

I’m not so sure that I do. Partly because I’m not convinced that there’s any value in creating a community of 1-to-1 real-life presence to online presence.

That’s partly because I’m not convinced that there’s any such thing as a 1-to-1 correspondence between real-life presence and real-life presence. I mean, seriously, are you the same person at work as you are when you’re down at the bar with friends? As when you’re having dinner in a nice restaurant with your lover? As when you’re in bed with him or her?

The idea of a 1-to-1 correspondence between real life presence and online presence is based on the idea that there’s a 1-to-1 correspondence between identities (personalities) and physical bodies. That idea is wrong. We all shift identities based on who we’re interacting with and what situation we’re in. That’s part of why we even shift our names based on that:

  • My fiancée calls me “Darling”, “Sweetheart”, “Dear”, “Love”, or “Honey”, according to her whim at the time. (We like variety, and we like to avoid getting too canalized to one particular term of endearment.)
  • My co-workers usually call me Kagan.
  • My friends usually call me Kai.
  • My siblings usually call me Kai, but my brother sometimes calls me “brother” or “bro” — and, truth be told, I like this occasional familiarity.
  • Sales people and waitrons and so on call me “Sir”. And this is not an outlying data point, because I answer to it, and I expect them to call me by this name. We all consider it right and proper.
  • Telemarketers and professional service people (bankers and whatnot) would do well to call me “Mister MacTane”. They often presume that they can call me “Kagan” — but this is a mistake on their part, because they are presuming a level of familiarity which (unlike my brother) they have not earned and do not deserve.

All of these different names, and different reactions to them, are signs that indicate that I enact different identities in different contexts. We all do.

And a social network that tries to straitjacket me into a single identity is doomed to omit huge chunks of who I really am. In so doing, it fails to serve my needs. It makes it harder for me to engage with the network at all… which makes it much more likely that I’ll leave.

I understand that Facebook is very deliberately built to enforce a single-identity model, because (as I’ve posted here before) Mark Zuckerberg actually believes that “[h]aving two identities for yourself is an example of a lack of integrity.” But Google doesn’t have to subscribe to Zuckerberg’s delusion.

Sadly, I see little hope that they’ll deviate from the “one physical body, one online identity” model that Google+ currently tries to operate under (and can never successfully enforce without causing even more problems).

Before You Can Talk About the Singularity, You Must Define It

If you think about technology, and where it may be taking us, it’s impossible to ignore the idea of the Singularity. But if you’re going to talk about it at all, it’s best to start off by defining just what it is you mean. Different people are using the term for a few different concepts these days. (Though at least the memetic mutation isn’t nearly so scattered as the ridiculous array of meanings and outright hot air clustered around “Web 2.0”.)

The Original Singularity: Mathematicians, Represent!

The original concept was the mathematical singularity: A point at which a given mathematical function’s output is not defined. For example, the asymptotic point in the graph of y = 1/x (the classic hyperbolic curve); when x = 0, y is completely undefined — a literal “divide by zero” error.

This gave rise to the gravitational singularity: A point in space-time where the manifold’s curvature (and hence the gravitational field, and the density of any objects) is either unmeasurable or infinite.

Vernor Vinge’s seminal paper, The Coming Technological Singularity, maintains this idea of “change that becomes too fast to measure”, of graph-lines going asymptotic. Vinge writes: When greater-than-human intelligence drives progress, that progress will be much more rapid. In fact, there seems no reason why progress itself would not involve the creation of still more intelligent entities — on a still-shorter time scale…. Developments that before were thought might only happen in “a million years” (if ever) will likely happen in the next century. (In [Blood Music], Greg Bear paints a picture of the major changes happening in a matter of hours.)

Marc Stiegler’s 1989 short story “The Gentle Seduction” also uses the term in a rate-of-change sense, with one character introducing the idea as “a time in the future. It’ll occur when the rate of change of technology is very great — so great that the effort to keep up with the change will overwhelm us.”

Variations Abound

But others are using the term in slightly different ways. Wikipedia’s article on the technological singularity describes it as an event where the rate of change is so great that “the future after the singularity becomes qualitatively different and harder to predict.” This isn’t quite the same idea. Instead of saying that the Singularity itself will be too difficult to comprehend, it’s saying that the time after the Singularity will be too different for us to understand. It’s something like the distinction between a singularity and an event horizon (a boundary beyond which we cannot see). Yes, one causes the other, but they’re not the same thing. Read More »

The Difference One Site Can Make

Only a year ago, I was against infinite scroll. In design meetings, I’d point out the way it breaks various aspects of the scroll bar. (You can’t tell how far through the full data-set you are; dragging the “thumb” down causes it to suddenly change place, etc.)

But now, I almost expect it when I’m scrolling through certain types of web pages. It’s slightly disorienting to me when I bump into the bottom of a page and have to manually click “next” or whatever.

What happened? In a word: New Twitter.

Okay, it’s not really “new” Twitter any more (it was rolled out from September through October of 2010 — less than a year ago, but those 9 months are an eternity in Internet time). But still, that roll-out was the impetus for my change in opinion. Twitter, a site I use every day, changed its UI and started doing infinite scroll. And now that interaction is a part of my daily life, and somewhere along the way, I got used to it. And now I expect it, at least in certain cases.

And it’s because one site changed its interface. And because that one site is one I use many times every day.

Logically speaking, there’s no reason why I should expect, for example, Google’s search results or my Dreamwidth reading page or TechCrunch’s front page to behave like Twitter does. One site’s UI shouldn’t — and doesn’t — have a damn thing to do with any other site. But the things we use frequently shape our habits, and that includes habits of thought.

As a side effect of my having gotten used to Twitter’s infinite scroll, I’ve gotten far less inclined to check the position of the scroll-bar “thumb” to see how far through the page I am… except on the kinds of pages that I expect to not have infinite scroll. For example, an article or story has a natural end, and it just makes sense for a calendar to be paginated.

But blogs? Or search results? Or anything that doesn’t have a natural break-point in it? There’s no reason why these things should require me to find the “load more” link. And there’s really no reason why that link should load stuff in a whole new page. Dynamic pagination with URL parameters like “?skip=40” was always a kind of awkward idea; it’s just that there didn’t used to be anything better. But now there is.

Right? I mean, that really is the case, isn’t it? I don’t just think so because one of the sites I use every day has retrained the way I think… right?

Some Helpful Tips for Recruiters

I received a phone call at work this past week, while I was in the middle of debugging some complicated JavaScript. Usually, my desk phone shows the internal extension that’s calling me; this time, it showed a series of asterisks. Intrigued and confused, I picked it up… and discovered it was a recruiter calling me. Apparently a row of asterisks must be how this phone indicates “Caller ID blocked”. (Now I know.)

The next morning at 7:53, I got a call at home from a number that didn’t report any name. I always let those go to voice-mail. I heard another recruiter leave a message, including “it’s eleven o’clock”.

Two different recruiters in two days, making such elementary mistakes? I’ve been working on this article on the back burner for a couple of years, but it’s obviously time I finished it up and posted it.

Never Call a Prospect At Work

And I really do mean, never. You don’t know if your prospect’s current employer monitors calls. You don’t know if your prospect has already told their employer that they’re looking for other opportunities — but it’s safest to assume that they haven’t, because it is definitely not safe for an employee to tell their employer that. Especially in “at-will employment” states (like California), where an employer can terminate an employee at any time, for any reason or none at all, there’s an all-too-real possibility that the employer will just fire the worker immediately. (I’m not saying this would be a smart thing for the employer to do. And I’m not saying the likelihood is high. But it does exist, and it’s too much risk for the employee to take.)

Telling your employer that you’re looking for a new job can get you canned, posthaste. Having your employer find out from some third party that you’re looking for a new job can also get you canned. You know what’s the one thing that would be even worse than getting fired for being on the job market before you can find a new job? Read More »

My Favorite Firefox Extensions That You Haven’t Heard About

Before you comment or email me asking how I could have left out AdBlock Plus, FlashBlock, NoScript, Firebug, or Chris Pederick’s Web Developer Toolbar: Please re-read the last five words of this post’s title. If it’s a well-known extension, it’s off-limits for this post. This is about extensions that very few people have heard of, but that more people should have heard of, because they’re so useful.

I’ve tested and made sure that all of these extensions work with Firefox 4.

NextPlease!
Go to the next page in a multi-page or multi-part sequence, with a single keystroke (Ctrl-Shift-right arrow). Includes the ability to use any phrase or image found in the page to determine the next/previous URL. This one is pretty handy for dealing with the kinds of sites that break their articles into multiple pages, but it becomes super-useful when you’re trying to catch up on a webcomic. You no longer have to find the “next” link or button on every page; just keep pressing Ctrl-Shift-right arrow and reading new comics.
Uppity
This makes a good complement to NextPlease!. Instead of trying to find links within the page to forward or backward, this one look at the page’s URL itself, and makes it easy to move up the directory tree. Press Alt-up arrow to move to the parent directory (or from subhost.domain.tld to www.domain.tld and then to just plain domain.tld), or press Alt-down arrow to see a drop-down list of available shortened levels. This one comes in handy when you follow a dead link and want to try to truncate the URL until you find something useful.
keyconfig
Lets you remap what keystrokes are bound to what actions. Since quite a few extensions try to bind to keystrokes, collisions are bound to occur if you have as many extensions as I do. Keyconfig allows me to resolve those collisions. Additionally, just hitting Ctrl-Shift-F12 will give you a dialog box that shows what all your currently active keystrokes are, with the collisions highlighted. Even if you don’t need to change any of them, just knowing what they all are can be seriously useful.
FoxInput
Fixes those silly pages that don’t automatically put the focus on the first text field in the form you need to fill out. Hit a configurable keystroke (Ctrl-I by default) to advance forward through all text fields and textarea elements in the page. Very useful on SquirrelMail’s “compose” window, where moving from the Subject field to the Body field would otherwise take 8 repetitions of the Tab key.
Echofon
A wonderful in-browser Twitter client. It’s particularly useful if you have more than one Twitter account, because you can have your browser be logged into one account, and have Echofon logged into a different account. It’s also available as a native Mac application and a native app for iPhone and iPad.
Browser View Plus
For web developers who occasionally need to check out pages in other browsers, this one is way better than (the rather well-known) IETab. It lets you configure up to 5 other browsers to open things in, then lets you access any of them on your right-click menu.
JSView
Another one that’s useful for web developers. Puts a little icon in your status bar that provides a pop-up menu of all JavaScript and CSS files linked to by the current page. Hovering over any filename gives a tooltip with the full URL; clicking on the item opens the file as if you’d done “View Source”, and right-clicking gives you options such as “Copy file URL”, “Open in new tab” (either focused or in the background), or even “Open in external editor”.

The extreme power of some of Firefox’s extensions is a large part of why I haven’t become a Chrome convert yet. With the level of customization that all these extensions allow, Firefox feels like my browser. It obeys my desires much more smoothly than Chrome does. Sure, I have to restart it on occasion… but since Firefox (like Chrome) is a modern, sane application that makes restarts easy, that’s not much of a drawback.

COICA Is Dead, Long Live the PROTECT IP Act

And by “long live the PROTECT IP Act”, I really mean, “let’s kill the PROTECT IP Act, as quickly and as dead as possible”.

[Update: At least one petition to the US Congress opposing this bill can be found at Demand Progress; I will update with others as I find out about them.]

Back when COICA was winding its way through legislative committees, Representative Zoe Lofgren (D-CA) gave an interview to Ars Technica, in which she said:

I was in the Congress when we did the Digital Millennium Copyright Act. [The content industry] wanted to go farther; at one point, the original draft outlawed Web browsing, which I thought was interesting. We did the bill, and they’re complaining. It’s what they wanted, but it’s not enough. Now they want to do something else, which is really pretty draconian

Rep. Lofgren also predicted that “if this passes, in a couple years they’ll come back with something even more draconian.” She was mostly right: Even though COICA was killed before reaching a floor vote by Senator Ron Wyden (D-OR), they’re back with something more draconian anyway.

As Wired notes, PROTECT IP, like COICA, would force credit card companies, ad networks, and DNS server to enact the appropriate form of shunning or blackholing against sites deemed “infringing”. Credit card companies could no longer process payments for the site; ad networks could no longer serve ads to them, and DNS providers would have to cease resolving their IP addresses. But PROTECT IP goes further, requiring search engines to censor their own listings. Read More »