Normally XKCD is amusing for very positive reasons. But I frequently feel a lot like the guy with the beard in this cartoon. It's really frustrating. So, today's XKCD is darkly amusing to me. Freedom is such a hard sell before people lose it. People choose convenience every time, frequently until it's almost too late to fix the problem all the while berating the people who were worried in the first place.

I've noticed that people frequently are incapable of believing that some things Google does are for the reasons Google says they're doing them. For example (and I don't really have the time to find references just now) many people seem to think that Google Doodles, those fun, timely modifications to their main search page, are a marketing tool, when in fact they are largely done purely out of whimsy.

I suppose, in one sense there is marketing purpose. Google is projecting their image of themselves out into the world. It's brand building. But, on the other hand, there isn't. I doubt that Google Doodles started as an idea for brand building in some marketing department. I'm betting some random small group of people decided one day that it would be fun to do, and the idea sort of caught on and now it's a tradition.

But people seem to want to analyze doodles for the marketing message they contain, despite the fact there generally isn't one. The more enigmatic the doodle is, the more determined people seem to be to find the marketing message in it.

This means there is a disparity in perception between people outside Google and people inside Google. One that might serve Google very poorly in the future. It's very important that Google understand this and respond appropriately. Perception is reality and people and organizations live up to expectations. Google risks becoming what people perceive them to be unless they act to correct that perception.

Google also frequently doesn't realize how the fact that they are so large and powerful affects people's perceptions of them. Witness the brouhaha over Buzz. Google did do some somewhat wrongheaded things in introducing it, but Buzz was not anywhere near the privacy destroying aggregator that people thought it was. And the fact that people perceived Buzz in this way seemed to mystify people inside Google, even though it was predictable given Google's size and people's perceptions.

Again, this points to a need by Google to better manage people's perceptions of them, and to manage their product releases better in terms of how people perceive them.

Eben Moglen suggests, quite wisely, that one thing Google could do is to change their policy on contributing internal changes back to Open Source projects. I think this is a good idea, but I doubt it will really be enough.

I am a little worried that if Google takes this advice to heart that they will grow a PR arm that does what every other PR arm in the world does, which is to try to make sure that perception stays far more positive than reality instead of simply trying to make perception match reality. But Google should do something, since I think people think far more ill of them than they generally deserve.

Google is, in fact, the only company I know of that has a revenue stream greater than 1 billion dollars a year that I actually have a positive opinion of.

Flash is a despicable disgrace. Most of the time when I talk to a Flash developer, the thing they're the happiest about is the control they get over my computer. This is directly because the Flash player is a piece of garbage closed source tool that purposely caters to developers over end-users. The Open Source gnash (not ganash) player has an option to pause a Flash program. The Adobe player will never, ever end up with that option, ever. Giving me control over my own computer is against Adobe's best interest. That makes Adobe's Flash player is little more than a widely deployed trojan horse that, IMHO, is little better than spyware (Flash cookies anyone? Where's my control over those?).

I wouldn't complain so bitterly about this if the gnash player were actually a decent drop in replacement for the closed source Flash player, but it isn't. I have to either choose my freedom to have my computer do what I want instead of what some random corporation wants with Flash that is broken most of the time, or Flash that works while giving up my freedom. I will choose my freedom, thank you very much, but I will be bitter about the stupid choice I'm forced to make.

So, when one maker of a closed, proprietary platform that steals people's freedom purposely does things to the detriment of another closed proprietary platform that steals people's freedom, I can't help but cheer. And I hope Adobe finds a way to play nasty games with Apple too. The more these two companies can find ways to hurt eachother, the more the rest of us benefit.

If Adobe Open Sourced the Flash player (I could care less about the developer tools, they will end up with Open Source implementations no matter what Adobe does if the player is truly open) my objections to Flash would completely disappear. I could realistically choose a fully functional Flash player and I'm certain I could find one with a pause button, or one that refused to store cookies for longer than a week. I could make it myself if I wanted to.

And lest you tell me that I'm just whining, the majority of large sites out there no longer look right without Flash. By not using Flash, I'm cut off from a significant part of the experience of the web. I shouldn't be forced to give up control of my computer in order to browse the web. That's a completely and utterly ridiculous assertion.

It's common programmer tech speak to talk about 'walking' data structures, meaning following all the pointers around to put all the data back together again. I think that 'brachiation' is a more apt metaphor, and fits well with the concept of 'code monkey'.

Case in point, the Net::IP module. The documentation looks nice. It handles IPv6 and IPv4 addresses. It looks clean and simple.

Then, I decided I would like to be able to have IPv4 mapped IPv6 addresses match the IPv4 address ranges I'm singling out for special treatment. So I look into its tool for extracting an IPv4 address from an IPv6 address.

The call, ip_get_embedded_ipv4 doesn't seem to work on IPv6 addresses created with 'new'. It only works on IPv6 addresses represented as strings. This leads me to dive into the implementation.

I discover that the is no coherent internal representation. Just a lot of different attributes that are used at different times for different purposes and are converted from one another as needed.

Additionally, there appears to be no way to import particular symbols of certain classes from the module. You have to import them using the import statements specified in the documentation or take your chances on whether or not it will work. This is because the import mechanism and which symbols are global or not is handled in a fairly ad-hoc sort of way and re-implemented in each module according to the whims of the author.

It's really quite surprising the module works at all. And I'm left feeling like I really ought to re-write it if I want something I can count on.

In reality, looking at the module's implementation was a mistake. This is always what happens to me when I look at a perl module. Either it works in a completely mysterious way using language mechanisms I've never seen used before, or it works in a way that's totally broken and practically guaranteed to break for any use that varies from the specific use-cases described in the documentation. Frequently both are the case. Aigh! Run away!

The iPod, the iPhone, and the new iPad. I hate them all. They are a horrible abomination that appeals to the worst in us, the part that thinks if we all just let someone else handle all the details for us that everything will be OK and we don't need or want to take any personal responsibility for the things we own, for the attitude that convenience beats freedom.

And this isn't because they are small and not a 'full-fledged' computer or anything like that. I would love a world full of tiny useful gadgets that help people get stuff done without getting in their way. No, I hate them because you can't open them up and tinker with them. You can't make them do anything you want them to do, you can only make them do what Apple wants you to be able to do.

And this author has distilled for me at least one incredibly important reason why this freedom is so important in his short essay "Tinkerer's Sunset".

I got my start with computers because of that exact sense. This is the ultimate gadget! I can make it do absolutely ANYTHING! I just have to figure out how to tell it in a language it can understand.

None of the products I mention have that. They all treat 'developers' as a special class that you have to jump through hoops to become a member of (and what kid is going to go do that?). And even then, people who choose to be in that class still don't get to make the machine do anything, just what Apple approves of. That is very, very not OK.

I'm not an Apple hater here. I own one of their laptops because I get root access on it, just like I would own an iPhone if I got root access on it. The laptop is a good piece of hardware, and it's the only laptop I've ever used that I've really enjoyed using.

The most excusable of them all is the iPod. It masquerades as a simple, single-purpose device. But even then, the fact that Apple purposefully hobbles the platform in various ways in order to try to keep you from doing things Apple doesn't want you to do has kept me from even considering buying one.

It's my hardware! MINE! I should get to do whatever the heck I want to with it. This whole 'joint ownership' thing (especially when they pretend it isn't happening) with some large corporation is totally broken. It really distresses me that so many choose convenience over freedom (hint: it doesn't have to be a dichotomy, and I suspect that Google will get this right). My only, rather bitter, consolation is that such people will get the future they deserve.

Note, that I am most definitely not insisting that everybody should open up their appliances and tinker with them. I don't want you all to become developers or anything like that.

What I'm insisting on is that you choose appliances that you can open up and tinker with. Not because you know you want to, but because having the freedom to do so taken away from you is very bad for everybody, especially children who will never get the chance to learn they enjoy tinkering because their corporate overlords forbid them from doing so.

Unfortunately, people who buy such devices may also end up, by their aggregate choices, dragging me into a future that I don't want. Network effects (as in marketing speak network effects) are king on computers. If freedom destroying gadgets become popular, it starts to become really hard to use anything but freedom destroying gadgets.

Edited 2010-02-01 00:14 PST: People who commented before then are commenting on a diatribe where I didn't try nearly so hard to separate the nice things the gadget does from the freedom destroying effects of the policies of the corporation that makes it.

I purchased Clearwire for tazfrog because Speakeasy was being annoying about getting DSL into her place (so annoying that I dropped them myself) and Comcast was totally unpalatable for any number of reasons.

It worked out well. I set up a nice Linux based router for her that would automatically configure a nice 6to4 IPv6 tunnel with the public IP address that Clearwire assigned to it. It would act as a NAT and a firewall for all the machines inside the network.

Well, recently Clearwire 'upgraded' all of their boxes. And now the boxes assign themselves the public IP address and force all of your computers to use NAT. No more IPv6 tunnel. It's very, very irritating, and also just plain wrong. If you get a fake IP address, you aren't really getting Internet service.

They claim that Motorola, the manufacturer of these boxes, just delivered them that way and there is no way to turn the NATting behavior off. The nice support person gave me a way to log into the web UI of the Motorola box and set up port forwards and such (which doesn't really help for what I actually want to do). But poking around the UI makes it seem like Motorola was intending to support more modes of operation and just never got around to finishing them.

I'm kinda peeved. I was considering outright anger as I was suspecting this was a policy decision on Clearwire's part. But it appears to be simply incompetence and not a policy decision. Being evil by accident seems somehow more excusable than being evil on purpose. And I think giving people NATted IP addresses is definitely evil and wrong. It's not real Internet service.

It's like the phone company putting you behind a PBX and not telling you the extension. Sure you can make all the calls you want, but nobody can call you. And, of course, when you complain you're asked "Of course you have phone service! You can call anybody you want to. What? Why would anybody want to call you?! You're just a dumb consumer! Everybody wants to call in to the radio shows and stuff, that's what the phone is for. We can't be bothered to support your little 1% use-case here! Look, if you want people to talk to you, just dial up one of those conference line places like everybody else. They'll hook you up.".

I put my first Erlang program in a pastebin. It's a concurrent prime sieve. Likely not the most efficient way to do things, but I'm still all pleased with myself. :-)

I may or may not choose to program more sophisticated things in Erlang, but I figured a passing familiarity was in order. Especially since I'm thinking of using CouchDB for something and it's written in Erlang. While knowing Erlang isn't necessary to understand CouchDB, I figure that it certainly can't hurt.