⇥ SEO for Non-dicks

September 21, 2011
No comments
 
⇥ Permalink

SEO for Non-dicks:

So, shockingly, you should try to make your site’s content trustworthy, genuine and relevant. All of the rules have come about due to their utility in detecting those three positive metrics. Good SEO is a by-product of not being a dick on the internet.

Really good piece by Matt Gemmell. In particular, I agree, with regret, on one point: descriptive titles are important.

And I hate them, because titles are like a secret trapdoor into your content—teasing you with one meaning and then springing a completely different one once you read through. Alas, the Internet has all but killed the often understated art of writing good headings.

(Via Lex Friedman).

⇥ A New and Improved Moore’s Law – Technology Review

September 15, 2011
No comments
 
⇥ Permalink

A New and Improved Moore’s Law – Technology Review:

Researchers have, for the first time, shown that the energy efficiency of computers doubles roughly every 18 months.

Dovetails nicely with something I wrote not long ago for TidBITS.

(Via Daring Fireball).

⇥ Maybe we should all be a little more intolerant

September 12, 2011
One comment
 
⇥ Permalink

Like most other people I know, I’ve been taught that the right way to respect other people is to tolerate them. Everyone is entitled to their opinion, beliefs, choice in religion, sexual orientation, and political ideology.

That might be true, but it’s not a productive way to lead our lives. Tolerance is but a feeble excuse that allows us to keep wallowing in our misogyny, racism, and homophobia while presenting a progressive, modern façade to the outside world.

Tolerance, when you think of it, is a mightily ugly world. You “tolerate” pests; the very dictionary definition of “to tolerate” includes words like “endure,” “put up,” and “stomach.” Is this the way you want to relate to other human beings? I certainly hope not.

More than anything else, tolerance doesn’t make us better human beings. It simply makes it possible to ignore the fact that someone around us could have a better outlook on life and close in on our own beliefs without ever needing to question them.

I grew up in a fairly conservative environment: Catholic upbringing, spent a lot of time around priests and nuns. And, despite what I keep hearing about the Catholic Church, I don’t regret one bit of it. But I also grew up in a progressive environment, in which my family and teachers always pushed to keep a critical eye on the world around me.

As a result, I have developed a somewhat eclectic system of beliefs in life. I am against organized religion, and very much pro-science1; I wholeheartedly support gay marriage, and look forward to the day when the words “who is openly gay” are going to sound as absurd as “who is openly human.” I am generally against abortion, and think that Affirmative Action is a bad idea. And so on, and so forth—many contradictions that make it difficult for me to say “I’m conservative” or “I’m liberal.”

This doesn’t, however, mean that I think that people on the other side of these (and many other) issues are stupid or evil. Wrong, maybe, but never beneath me, and always worthy of discussion and discovery. Some of my best friends and colleagues have outlooks on life that are far different from mine, and I enjoy nothing more than understanding why together with them.

I don’t expect that they will change my opinion, or that I will change theirs: dig enough into any person’s moral and ethical systems, and you’ll find that they are anchored in beliefs—which, by their very nature, resist logic. But, by understanding another’s point of view, you can learn more about them, and, most importantly, you can learn to empathize with them, transforming your society-enforced “tolerance” into respect.

This kind of intolerance—call it intolerance of tolerance—can be very beneficial to society. You can either be Richard Dawkins and proudly proclaim that the 75 percent of the world’s population that believes in some sort of divine presence is stupid, or you can ask them why and try to understand where their beliefs come from. In the first case, you’re simply peddling religion by another name; in the second, you might just enrich your life a little, and maybe the lives of others.

  1. Which is not the same as saying that I do not believe in the divine, mind you.

⇥ Tunesque: better search for the iTunes Store

September 5, 2011
No comments
 
⇥ Permalink

Yes, I am still alive—it’s just been a really busy couple of months and I haven’t had a chance to update this blog…

…nor am I really going to today. It is, after all, a holiday.

I did, however, want to post about Tunesque, a small app for OS X Lion that I just released last week.

Tunesque is a replacement search for the iTunes Store. It sits quietly in the System Menu until called upon to perform a search against all of iTunes’s categories, including iOS and OS X apps.

I built this originally because I can’t stand searching the Store using the iTunes or App Store apps, but it seemed like a good enough utility that I should share it with everybody else. It’s completely free, although I do use affiliate links to make a little off the backend.

⇥ Fun with… not understanding statistics

Via Daring Fireball, I came across this piece written by Kevin Drum for Mother Jones on how the Wall Street Journal has manipulated an income chart in order to show that the American middle class has all the money. That’s the chart on the left here:

Income chart

Drum made the chart on the right to show that the upper class, which he defines as anyone who makes more than $200,000 is, in fact, in possession of the bulk of the U.S. wealth.

The problem is, both charts are wrong.

Drum defines the “upper class” as anybody who makes $200,000 based on what the Democrats claim are the targets of their tax laws, which seems perfectly reasonable to me.

Inexplicably, however, after lumping the rich that way, he breaks out every other category individually. In other words, after accusing the Journal to have created an “optical illusion,” he proceeds to do exactly the same thing to prove his point.

That’s not the way this chart should have been drawn. You can’t lump together the statistical groups that are convenient to make your case and fail to do so with the others only because they are not as favourable.

A look behind the numbers

The interesting thing is, there is no need to manipulate the number to prove Drum’s point. You just need to present them the right way.

If we define the “rich” as anyone with income above $200,000, then we need to also define the “poor” and the “middle class.” But how?

According to Wikipedia, the poverty line is established at around $10,000 per person. That’s as arbitrary a number as any, but it is an officially recognized one, so we can use it and at least be on equal footing with the definition of the “rich.” The numbers on the Journal’s chart are not fine-grained enough for this income level, so I decided to use $20,000 instead1.

We can then further define the “working class” as someone who is above the poverty line but below the median income level (about $40,000—approximated up to $50,000 so that we can use the numbers in the original charts), and “middle class” anyone who makes more than $50,000 but less than $200,0002.

Once we do that, the chart appears to agree with the Journal’s interpretation of the facts—the middle class does have more money than any other group:

Income distribution by class

But that’s still pointless

This, however, brings us to the real issue at hand. The problem with the chart that appears in the Journal is not one of visual trickery, but of conceptual flaw.

Both charts in Drum’s article do not tell us anything useful because they are concerned with classes and not people. Because classes are arbitrarily-defined groups of people, knowing that one owns more of the wealth than the other doesn’t really mean much.

On the other hand, we could see how that translates into individual ownership of wealth—that is, how much of the total pie one person of any given class owns, and this is where things get interesting, because the distribution of members in each of the groups is not linear, as this chart demonstrates:

Population by class

Now we can get a more accurate picture of how wealthy each individual in the four groups I have defined really is:

Percentage of wealth by person

As you can see, the average “rich” person owns a much bigger percentage of the total wealth than the average “middle class” person, while the poor owns… well, almost nothing.

This, I presume, is what Drum wanted to demonstrate all along: that while the middle class as a whole may own more wealth than the rich, the average middle class person owns much less than the average rich person—the textbook definition of income inequality.

What does it really mean, though?

Of course, one could take this one step further and wonder what the actual meaning of these charts and the numbers behind them.

After all, the numbers only tell us that the rich are richer than the middle class, and the middle class is richer than the poor—but that’s exactly what the definitions of “poor,” “middle class,” and “rich” tell us, without the need for two pages of calculations.

My personal perspective is that these numbers on their own tell us nothing one way or another. In a capitalist society, it seems to me that opportunity, and not wealth, is the true determinant of fairness. That is, given an equal set of goals, everyone should have the same access to them, without regards to anything other than their abilities. Income inequality then becomes a function—rather than a cause—of an individual’s willingness to roll up their sleeves and make the most of their natural talents.

Obviously, that’s never the case, and wealth undoubtedly plays a factor into the real access to opportunity, but that’s not something that we’re going to learn by looking at charts like the ones published by the Journal, by Drum, or by yours truly.

And now, for some intellectual honesty

I would be remiss if I didn’t alert you to the fact that I didn’t have a lot of time to work on these charts, and had to cobble together data from different sources in a hurry. In some cases, I also had to resort to correlating data from slightly different sets by throwing in an intelligent guess or two.

Therefore, it’s possible that my numbers are off and my conclusions incorrect, though I don’t think that’s the case. Or, to be more precise, my numbers may be slightly off, but the end result should be consistent with reality.

  1. This gives me enough data to work with without affecting the end result, because the lower end of the scale has very little wealth. Structure of Social Stratification in the United States

⇥ On being human

If I had to pick a “best sentence of 2010,” it would be this little tidbit:

I do like and have tried to champion OpenSource software. How can I square that with my love of Apple? I’m complicated. I’m a human being. I also believe in a mixed economy and mixed nuts. I love our National Health Service and the National Theatre, but I also love Fortnum and Mason’s and Hollywood movies.

It comes, of all places, from a piece that Stephen Fry wrote on January 28th, in occasion of the launch of the original iPad. If I had to pick a “best reason why I admire Stephen Fry,” by the way, this sentence would encompass it precisely as well.

The reason I love this short paragraph is not that it has to do with Apple, or the iPad, or open-source software. Rather, it’s the fact that it’s an honest admission that being human means dealing with a never-ending supply of conflicting feelings, contradictory ideas, and seemingly irreconcilable realities.

The real trick in life is not to reach absolute conviction, but, rather, to process all your inputs, distill what you can learn from them, discard that which is unhelpful, and formulate a personal philosophy with the knowledge that it will become a living, ever-changing thing.

It’s an amazingly difficult thing to do, which is probably why so many people prefer to adhere to One Real Truth instead. People who do that without ever questioning themselves or their beliefs frighten me if they are in charge, disgust me if they are trying to sell something, and make me sick if they just do it to feel part of a group.

⇥ Postscript to “the lost art of using your brain”

My recent blog post The Lost Art of Using Your Brain ended up on both Hacker News and Reddit, where it generated a considerable amount of traffic and comments.

Several of the comments were interesting and even improved on my original thoughts; for example, one point that was made concerned this sentence:

The third, finally, is that a lot of people are not taught to deal with the consequences of their actions. From childhood, they are told that they are special, that they deserve better, that it’s OK to be less than the best.

Some folks noted (correctly) that being nothing but the best is a bit of an absurd demand on any person. There can only be one “best” under any given set of circumstances, and that means ipso facto that not everyone can be the best.

The problem is that the word “your” slipped out of that sentence when I first wrote it; thus, I ended up writing “to do the best” and, on the second pass, my poor brain recognized that those words didn’t quite fit together and made me fix them the wrong way.

I actually meant to say “to do your best.” And I stand by that: it’s one thing to fail despite one’s best intentions and efforts, and quite another to fail because one is being lazy. Unfortunately, the prevailing attitude towards life these days seems to be the latter.

A number of people also took umbrage to my apparent dislike for IDEs. (I will leave those who seem to think that I am one of those “old guys who wrote assembler” and that I want us to work without tools at all to drown in their own stupidity. I have nothing to say to them.)

I have absolutely nothing against IDEs. The whole point of my post was that you need to evaluate the benefits and drawbacks of every tool you use and decide if it works for you—including, of course, IDEs.

For example, I don’t normally use an IDE when I write server-side code. I’ve simply never had any reason to use one, and can’t find one that adds anything useful to my development process1.

This doesn’t make me special. It doesn’t make me feel different. It simply makes me a person who doesn’t use an IDE when writing server code.

If you do use an IDE for whatever work you do, good for you. We have no quarrel as long as you don’t splash that fact around as if it makes you smarter than the rest of us.

  1. To be clear: I work daily with a codebase that is several tens of thousands of lines long, spread across at least four or five different systems.

⇥ Understanding the post-PC world

There is a post by Paul Hontz at The Startup Foundry that keeps popping up on my Twitter feed and has really started to grate at me.

Hontz’s thesis: the iPad needs iTunes to be activated and, therefore, is not a “post-PC” device. Android devices activate out of the box and, therefore, are “post-PC” devices.

Box and inbox

Let’s start with the obvious: the iPad does need iTunes to activate. There is no denying that.

If you set activation aside, however, the iPad is perfectly capable of running independently of a PC of any kind. I’m pretty sure I haven’t synced mine in a while, and I know of plenty of users who are in the same boat (and loathe the thought of syncing and backing up).

One could even argue that Apple has made damn sure that as much of the iPad’s life can take place untethered. Even if you wipe out your device, there are ways to get most of your content back without connecting to a computer1.

In fact, if you happen to buy your iPad in an Apple Store, they’ll be more than happy to activate it for you. It takes only a few minutes.

Still, Hontz is entirely right when he says that you need iTunes to activate the iPad.

So what?

However, if you think that untethered activation is what makes a device “post-PC,” you’ve completely misunderstood the meaning of the term; you are staring intently at a tree, while a majestic forest is growing all around you—and, pretty soon, you’ll turn around and figure out you’re lost.

“Post-PC” is not about the liberation of the device from the PC. It’s the liberation of the user from the concept of PC.

If you’re a developer and all you ever do is thinking like a developer, a device like the iPad makes no sense whatsoever. It’s closed, limited in what it can do; it lacks a keyboard; it can’t be used to write code. And so on, and so forth.

Users—regular folks—don’t think like developers, though. Users dread computers, and only deal with them because they must.

From the perspective of a normal person—no matter how intelligent or erudite—a computer is something that breaks easily and takes a lot to be fixed, either in terms of money, or in terms of condescending looks from an obnoxious IT person.

Computers make you feel stupid; unless you know the exact incantations, key sequences and special shortcuts, they’ll refuse to yield the results you want and go rogue on you.

IT specialists, of course, generally make no effort to improve things. We like being part of a special group that “gets it,” and actively—if unconsciously—endeavour to keep outsiders where they belong. We’re the world’s geekiest secret society.

What post-PC really means

The genius of iOS—rivalled, so far, only by Windows Phone 7—is that it is, essentially, a foolproof system. Short of throwing an iPad against the wall, or falling prey to regular wear-and-tear, there is no real way to do irreparable harm to it that requires expert repair.

Of course, this doesn’t mean that its software is perfect, just like “it just works” doesn’t mean that Macs don’t crash or break. It simply means that you can use it with reasonable certainty that you will not dig yourself into a hole.

IT people seem to have a really, really hard time understanding this. For the past three or so years, I have been telling anyone willing to listen that it’s about time for us to stop promising people that computers will cure cancer and take us to the moon, and start showing them that the average person can, instead, use them to put together a Powerpoint presentation that doesn’t look like it came straight from a cow’s digestive system. More often than not, when I make that point, I am met by blank (or, worse, condescending, “Tabini is crazy” stares).

Imagine if you walked into your car tomorrow, and the dashboard looked like the cockpit of a 747. How would you like that? Would you take the car for a spin? That’s the way the average user feels in front of a computer.

Instead, your car has simple controls. Strangely, this doesn’t mean that the average automobile is a low-tech affair. Think of the hundreds of years of engineering advancements that went into making driving so easy that an unfortunately large number of people can master it. Sure, Michael Andretti probably laughs every time he sees a Tercel, but I doubt he’s the prototypical customer Toyota had in mind when they designed that car.

The similarities between an iPad and a car are startling. An automobile has one last-ditch failsafe mechanism: the ignition key. Even though it’s ostensibly there to prevent theft, you know, at the back of your mind, that, should everything suddenly take a turn for the worst, you can just yank the key out and the car will come to a complete stop.

The same is true of the iPad’s home button. Officially, it “takes you back to the home screen.” To a regular user, however, it’s a big red button that screams “LET ME OUT OF HERE.” Press it, and you’re safely back at the beginning, no matter what you have done.

And so, it seems to me that “post-PC” has nothing to do with openness, tethering, or even tablets. It has everything to do with the rebirth of the computer into a device that average people can put to good use, without fear, for the performance of the tasks that matter to them.

Miss that, and you’ll shut yourself out of a huge opportunity.

  1. Except for videos and music—though we have content providers and their wonderful business practices to thank for that.

⇥ The lost art of using your brain

“I thought all serious programmers used an IDE”

“My tests have 100 percent code coverage!”

“You mean you don’t use OOP?”

If words like these ever escaped your mouth in my presence, you should know that only the strongest rules of good social behaviour stopped me from punching you in the face.

We may agree or disagree on whether IDEs are useful, or whether code coverage is an important metric of the effectiveness of your testing strategy, or whether object orientation is an important, useful and positive technique to use in your code.

But one thing we need to agree on: people need to use their brains more and rely on the brains of others less.

The world of technology is riddled with inhabitants who treat tools as if they were religions. OOP, unit tests, patterns… these are all instruments that are supposed to make some jobs better, and not theological formulas that will magically make every single line of code written on the face of the Earth better.

And yet, the vast majority of people treats them like they are, sparking everything from language wars to endless—and pointless—discussions on whether a particular technique is better than another. I swear I sometimes look at threads on mailing lists that look like one giant Hello, world program: not merely pointless, but counterproductive.

Tools are not just pieces of software

Programming is about one thing, and one thing only: solving problems. As developers, we must look at everything that we do in that light; whenever we don’t, we are doing ourselves and our clients a horrible disservice.

The fact is, there is no accepted “true” way of writing code. This should serve as a powerful hint to developers that there is no “best” way to work; rather, we must build a war chest of tools, attempting to understand how each of them can best be applied to a specific problem.

The “why,” as is so often the case, is more important than the “how.” And yet, so much of the training material that we have at our disposal is focused on the latter and completely ignores the former, leaving the incautious student in the same conditions as a plumber who is given a wrench and not told they should make sure the water is off before unscrewing the faucet.

My partner Keith Casey made a great example of this at last year’s Codeworks tour; he picked an example from a book on unit testing that shows a simple class (I can’t remember what the class did, but it was something absolutely trivial) and then the associated unit tests. The example concludes with something like “of course, you would never write a class like this in real life, but this is how you achieve 100 percent code coverage on it.”

The question is: if I’m never going to write code like this in real life, how am I supposed to learn why I should use unit tests?

The why of the why

I can think of at least three reasons why this malaise seems to be so commonly spread.

The first is that the proponents of a tool are usually less than fully honest about its benefits and drawbacks themselves. This could be out of intellectual dishonesty (that is, because they want to sell you something), or because they want to see their own work validated by means of adoption. Nothing wrong with either of these things—people have to eat, and hard work needs rewarding. Why, I am probably doing the same thing right now.

The second is that it’s easier to sell a practical something than a theoretical something else. We like to delude ourselves into thinking that we like choice, but the harsh reality is that end users don’t want to choose: they want to be told what to do. This includes most developers, who would rather rely on someone else’s blind advice than apply their own critical thinking. We all do it—it’s a common failing of all men and women.

The third, finally, is that a lot of people are not taught to deal with the consequences of their actions. From childhood, they are told that they are special, that they deserve better, that it’s OK to be less than the best. And this shows in so much of the work I see every day: “architect” makes a decision that goes south; “architect” disappears; remainder of the company is left to deal with “architect’s” mistake. Rinse, lather, repeat.

The way to the how

How does one stand apart from the masses? Simple: by learning to apply his or her own critical thinking to a problem.

The first step is never to accept anything at face value. Question everything—not for the sake of questioning, but for the sake of getting to the truth. Once you have all the facts, making a decision is a matter of weighing each factor against the others and picking the tools that give you the best resolution. You’ll still make mistakes, but your batting average will get much better. (Also: you’ll have some way to figure out why you made a mistake and learn something.)

The second step is to continuously question your knowledge. In the past eighteen months, I have begun writing for Macworld, taught myself how to program in Objective-C for both OS X and iOS, have played with XNA and just started delving into Ruby with some level of details. I haven’t become a master at any of these1, but I have learned things from each one of them that I have been able to apply elsewhere in my day job.

The third step is to surround yourself with people who have as different (and diverse) a perspective from yours as possible. If you only ever stick around people who think the same way you do, you will stagnate and never grow. If you surround yourself with people who respect you but don’t always agree with what you have to say, you’ll be forced to question yourself more often and learn a thing or two.

Of course, these things are true of many other aspects of life—politics, philosophy, sports, you name it. As applied to technology, however, they will at least make you not be one of those people I want to punch in the face.

Update: I posted a postscript to this post in response to some of the comment I received.

  1. To be clear, they have generated a reasonable amount of personal income, but that’s only relevant to me because money is *my* motivator. That’s not the reason why I picked up all these other things.

The problem with the word “free”

February 17, 2011
3 comments
 
⇥ Permalink

Jan Wildeboer, writing about the limitations imposed by Microsoft on the Windows Phone 7 developer agreement:

Note the full scope: in whole or in part. This means that you cannot use Libraries that are under this ominous “Excluded License”. Or use documentation that is licensed under the ominous “Excluded License”. You get the point. If you use whatever stuff that is under this ominous “Excluded License” your app will not be added to the marketplace.

So far, so good. This is, indeed, a limitation imposed by MSFT on all its standard development contracts.

So each and all “equivalents” to the GPLv3, LGPLv3, Affero GPLv3 license are excluded. Any license that allows requires redistribution at no charge is excluded.

The consequences of this strange exclusion are not fully clear to me as I am not a lawyer. But one thing is extremely obvious. Microsoft wants to keep its platform clear of Free Software. Period.

This coming from the company that publicly calims to be a friend of Open Source, that wants to make windows the best ever platform for Open Source should make app developers think again if this mobile platform is the platform of choice.

See, this is the problem I have with proponents of “free” software. A lot of them just don’t understand the meaning of the words they use.

Let me explain.

Microsoft has a problem with the GPL. I think they’ve been pretty clear on that particular fact; for example, here’s Steve Ballmer, quoted in a piece by The Register:

Ballmer was trying to articulate his concern, whether real or imagined, that limited recourse to the GNU GPL requires that all software be made open source.

“The way the license is written, if you use any open-source software, you have to make the rest of your software open source,” Ballmer explained to an excessively credulous, un-named Sun-Times reporter who, predictably, neglected to question this bold assertion.

Agree or not (and, for the record, I happen to disagree with his assertions here), there is nothing sneaky or sinister about the fact that Microsoft doesn’t allow GPL software in its store. It’s right there, in black and white, and it’s no different from GPL proponents imposing their terms on anyone who decides to use their software: righteous or not, they’re both limiting other people’s freedoms to impose their own.

Most importantly, however, is a far cry from saying that Microsoft isn’t friendly to open-source projects, because open source is not “just” the GPL. Open source is a movement that encompasses a much broader set of licensing terms and distribution philosophies. Microsoft is not a fan of OSS, perhaps, given that its entire business model is based on charging people for software, but they have very much evolved over the years to incorporate OSS into their modus operandi and to participate in the broader communities that their software touches.

This is not just splitting hairs. As a proponent of OSS, and an opponent of the GPL, I find the continued confusion both annoying on a personal level and hindering on a professional one. People who profess to value honesty and truth should do a better job.

Disclaimer: Microsoft is a client of Blue Parabola—and curiously enough, BP has developed several pieces of OSS software (released under a BSD license) for the company.

[Via Simon Phipps.]