The revolution is Nigh…Impossible

As part of the ongoing development of the bionic cock project I’m working on, I’m in the process of teaching myself 3D modeling and 3D printing. We’re using 3D printing to make positives for molding silicone prototypes.

3D printing is amazing. It offers incredible potential for people everywhere to be able to make whatever they want on demand, as long as “people everywhere” means “people with access to computers and the Internet and 3D printers and spools of plastic, and the cognitive ability to be able to design things and operate the equipment.” So not really people everywhere, but no matter, right?

3D printing is also incredibly stupid. The state of the art is so appalling. The software is deplorable–a throwback to the bad old days of obtuse design usable only by the select few.

The first time I tried to make a print, I was horrified by what passes for design in the world of 3D printing. It’s a case study in why Linux has never made significant inroads into the desktop, despite being free. Open source software is still software made by developers for developers, with no thought (or sometimes, with active contempt) for users who either don’t want to or don’t have the time to learn every small detail of the way their systems work.

By way of comparison, if color inkjet software worked the way 3D printer software works, every time you hit the Print command on your computer, you’d be confronted by something like this (click to embiggen):

A twisty maze of confusing ad indecipherable options poorly laid out

This…is why we can’t have nice things. The open source community isn’t democratic; it’s elitist.

An Amazon Product Advertising API SimpleStore PHP script that works!

I’ve been working on a project lately that I’m excited about, but not quiiiiite ready to talk about just yet.

Unfortunately, this project has involved working with the Amazon API. I say “unfortunately” because the Amazon API is truly the Mos Eisley of the computer world: you will never find a more wretched hive of bugs and poor documentation.

Nearly all of the sample code in the Amazon developer index dealing with the Product Advertising API does not work, and has not worked since 2009, when Amazon made a change requiring cryptographic signing of all API requests. I am a PHP programmer, and the PHP sample code for dealing with the API does not work and has not worked for a very long time.

For example, the sample SimpleStore PHP script called “Amazon Associates Web Service Simple Store in PHP” in their code library was written in 2006 (ten years ago!), broke in 2009, but is still on their developer site.

You can imagine how rage-inducing this is. In science, we are all standing on the shoulders of giants. In computer science, we are all standing on each other’s feet.

So I’ve spent the last few days eyebrow-deep in Amazon’s technical documentation, trying to make decade-old sample code work so that I could do something–anything–with the API.

I’ve finally made the SampleStore PHP script work with the modern Amazon API, and fixed some bugs and closed some security holes along the way. I’ve decided to make the fixed script freely available to anyone who wants it. I’ve commented it extensively in the code.

If you’re working with the Amazon API in PHP and you’re tearing your hair out because nothing works and there is no sample code to show how to build cryptographically signed API requests, fear not! This code works. The interface is simple and ugly, but the PHP will get you up and running.

Please feel free to use, remix, copy, redistribute, or do whatever else you want. I sincerely hope that this code will help someone somewhere not have to tear their hair out the way I did.

Call to the Lazyweb: Backup

I have a problem I’ve been beating my head against for a while now, and I’ve finally given up and decided to put this out there to the hive-mind of the Internet.

I have a laptop I want to keep regularly backed up. I have external hard drives that I use to do this, one that I carry with me and one that stays in my office in Portland. I use cloning software to duplicate the contents of the laptop onto them.

But I also want to do incremental backups, Dropbox-style, to a server I own.

I do have a paid Dropbox account and I do use it. (I also have a paid Microsoft OneDrive account.) But I’d really prefer to keep my files on my own server. What I want is very simple: the file and directory structure on the laptop to be mirrored automatically on my server, like such:

This should not be difficult. There is software that should be able to do this.

What I have tried:

Owncloud. They no longer support Mac OS X. Apparently they ran into problems supporting Unicode filenames and never solved it, so their solution was to drop OS X support.

BitTorrent Sync. This program is laughably bad. It works fine, if you’re only syncing a handful of files. I want to protect about 216,000 files, totaling a bit over 23 GB in size. BT Sync is strictly amateur-hour; it chokes at about 100,000 files and sits there indexing forever. I’ve looked at the BT Sync forums; they’re filled with people who have the same complaint. It’s not ready for prime time.

Crashplan. Crashplan encrypts all files and stores them in a proprietary format; it does not replicate the file and folder structure of the client on the server. I’m using it now but I don’t like that.

rsync. It’s slow and has a lot of problems with hundreds of thousands of files. The server is also on a dynamic IP address, and rsync has no way to resolve the address of the server when it changes.

Time Machine Server. Like CrashPlan, it keeps data in a proprietary format; it doesn’t simply replicate the existing file/folder structure, which is all I want. Like rsync, it has no way to cope with changes to the server’s IP address.

So you tell me, O Internets. What am I missing? What exists out there that will do what I want?

Some thoughts on social issues in video games

Unless you’ve spent the last year living entirely under a rock, far from the hustle and bustle of normal life, and entirely without any sort of Internet connection, you’re probably aware to some extent of a rather lengthy fuss about the heart and soul of computer gaming. This fuss, spearheaded by a diverse group of people loosely gathered under a name whose initials are similar to GargleGoose, is concerned about the future of comic book and video game entertainment. They believe that a sinister, shadowy cabal of “social justice warriors”–folks who are on a mission to, you know, right wrongs and uplift the oppressed, kind of the way Batman or Superman do only without the fabulous threads. This cabal, they fear, is coming for their video games. The social justice warriors, if we are to believe GameteGoose, are so obsessed with political correctness that they wish to make every game in the world a sanitized, sterile sandbox where not the slightest whisper of sex or violence may be seen.

Okay, so granted that’s not likely the characterization GrizzleGoose would put to their aims, though I think the general gist is there.

And they’re not entirely wrong, though they’re pretty far from right. There is a battle going on for the heart and soul of entertainment. For decades, comic books and video games have catered to straight white middle-class guys, who overwhelmingly make up the demographic that bought the games, read the comics, and to whom writers, artists, and developers catered with laser focus.

But times have changed, comics and games have gone mainstream, and they’re attracting more and more people who aren’t straight white dudes any more. And as other folks have come into the scene, they have started pointing out that some of the tropes that’ve long been taken for granted in these media are, well, a little problematic.

And merely by pointing that out, the folks talking about these problematic things have provoked pushback. When you live in a world where everyone caters to your exact tastes, the idea that some people might start making some things that aren’t to your liking feels like a betrayal. And the suggestion that there might be something about your taste that isn’t quite right? Well, that can quickly turn into an existential threat.

GooeyGoose has effectively capitalized on that existential threat, rallying straight white dudes into believing they’re the Rebel Alliance who are under attach from the forces of social justice while adroitly handwaving away the reality that when it comes to popular taste in entertainment media, straight white middle-class dudes are and have always been the hegemonizing Empire.

But here’s the thing. You can point out that popular entertainment media is problematic without saying the people who like it are bad people.


I play Skyrim.

Skyrim is an open-world role-playing game where the player takes on the persona of a mythic hero trying to save a world plagued by dragons, a civil war, and the restless undead. It’s almost entirely unstructured, with players having the ability to choose to do just about Anything. Non-player characters the player interacts with offer advice and provide quests, which the player can choose whether or not to do.

It’s a lot of fun to play. I’ve lost quite a number of hours of my life to it, fighting dragons, deciding which side of the civil war to support, participating in political intrigue, exploring creepy dungeons, and exploring a lush and richly detailed world.

It also has some problematic issues.

This is Haelga, one of the characters in the game. The player can be given a minor side quest in the game by her niece, who works for Haelga but doesn’t like her very much. Haelga’s niece, Svana Far-Shield, tells the player that Haelga is having sex with several different men, and wants the player to get proof in order to shame and humiliate Haelga.

The way the quest is written, it’s sex-negative as hell. It plays to just about every derogatory trope out there: open female sexuality is shameful, women who are perceived as sexual are “sluts,” and pouncing on a woman with evidence of her sexual attitude is a sure way to humiliate (and therefore control) her.

You might argue that Skyrim is set in a time that is not as enlightened as the modern-day West, but that ignores a very important reality: Skyrim is set in a time and place that never existed. There’s no compelling reason to write sex-negativity into the script. The game works well without it. It’s there not because the distant faux-medieval past was sex-negative, but because modern-day America is.

But that, too, misses a point, and it misses the same point the GiggleGoose folks miss:

It is possible to recognize problematic elements of a game and still enjoy the game.

I recognize that this quest in Skyrim is sex-negative, and that’s a problem. I still like the game.

The people who play these games and read these comic books are not bad people for doing so. The content of the games and comics is troubling to anyone who cares about people other than straight white middle-class men, sure, and it’s certainly reasonable to point these things out when they occur (though they happen so damn often that one could easily make a full-time career of pointing them out). That doesn’t make the people who like them Bad And Wrong simply because they enjoy them.

GiddyGoose believes that saying video games are a problem is the same thing as saying people who enjoy video games are a problem. And if you identify with comic books and video games so strongly that you can not separate your entertainment media from your sense of self, they might be on to something.

But most folks, I think, are able to take a deep breath, step back a half pace, and recognize that the writers and developers have done some really cool, fun stuff, but they can still do better. It would not kill anyone if the quest in Skyrim were rewritten (how about have Haelga’s character replaced by a man? There’s a thought…), or even dropped entirely. Nobody suffers from recognizing that it’s not cool to make fun of people who aren’t like you.

Nobody’s saying that Skyrim shouldn’t exist, or that people who play it are terrible people. I would like to think, on my optimistic days, that that’s an idea anyone smart enough to work a computer can recognize.

eBook Design Illuminated

A short time ago, I was hired by Talk Science To Me to do the eBook version of Tantra Illuminated, a very lengthy academic work on the history of Tantrick religious traditions in India.

The book was large and beautifully designed, with a great deal of content from original Sanskrit sources. The design used a number of different, complex elements, including copious margin notes.

I’m in the process of blogging about the complexities of eBook design with non-English alphabets and complex layouts. Part 1 of the series is up on the Talk Science To Me blog. Here’s a teaser:

The project turned out to be far more daunting than I’d imagined, even knowing from the outset that it would likely be more complex than it first appeared. I could easily write a book on the various technical, layout and rendering challenges I encountered creating this e-book (in fact, that might be a good future project!), but we’ll just look at a few of the interesting potholes we encountered on the road to creating the e-book.

A tale of two diacritics

The text in Tantra Illuminated contains significant lengths of transliterated Sanskrit. Sanskrit uses a non-Latin alphabet for which a standard transliteration system called the International Alphabet of Sanskrit Transliteration (IAST) exists. This is the system employed by the transliterations in Tantra Illuminated.
The IAST relies heavily on Latin characters with diacritic marks. Most of these marks are supported by the majority of e-book readers, so I didn’t anticipate difficulty with the transliterations.

I was wrong.

You can comment here or over there.

Nome, Alaska: Ruins of the White Alice facility

There’s a mountain overlooking Nome. It’s called Anvil Mountain, and on that mountain is a kind of monument to the Cold War. You can see it from just about anywhere in town. These four enormous antennas squat over the landscape, a silent testament to the money and lives squandered on endless political bickering.

When I saw them, I had to check them out.

These four antennas are part of the old “White Alice” system, a communication system that was part of the old Distant Early Warning radar installation all along Alaska, constantly searching the sky for signs of Russian bombers sneaking over the Arctic and heading across Canada toward the United States.

The system was designed in the 1950s, when fear of the Commies was really starting to gain traction. The Distant Early Warning line was a set of remote high-powered radar facilities all along Alaska, but the designers had a problem. Alaska is huge. If you count the string of islands that extends from its western edge, many of which were home to DEW radar, Alaska is about the same distance stem to stern as the distance from California to New York.

And there are no roads, no telephone lines, and no power lines. Even today, there is no way to get to Nome by road; roads linking it to the rest of Alaska simply do not exist. You get in and out by air or barge, and that’s it.

The radar stations along the DEW line needed to be able to talk to command and control centers. Normal radio wouldn’t work; Alaska is so large that the curve of the earth renders line-of-sight radio unworkable.

So the Air Force came up with an idea: troposphere scattering. Basically, they decided to use enormous antennas pointed at the horizon to blast an immensely powerful radio signal, so strong it would bounce and scatter from the upper layers of the atmosphere, reaching stations beyond the curve of the earth.

The system was code-named “White Alice” and was built at enormous cost in the 1950s and operated through the 1970s, when satellite communication made it obsolete. By the time it was decommissioned, there were 71 of these stations, including the one on Anvil Mountain.

Eve and I borrowed a 4×4 and drove up the mountain. The facility is surrounded by a chain-link fence that has long since been pulled down and yanked apart in places. An ancient, battered sign warns trespassers that it’s a restricted area; the locals seem to use it for target practice.

The White Alice installations were powered by enormous diesel generators. Each of the four antennas at a facility consumed up to 10 KW of power; the generators provided power for the transmitters, the living quarters, and small line-of-site microwave dishes that provided short-range communication.

Most of the White Alice facilities have been completely dismantled. Several of them are toxic waste sites, as diesel fuel and other contaminants have been dumped all over the place.

When the Anvil Mountain White Alice facility was decommissioned, the residents of Nome asked the Corps of Engineers to leave the four big antennas. Everything else is gone.

These antennas are huge–about five stories tall.

Cost overruns, under-engineered specifications, and overly optimistic maintenance projections made the White Alice project run ten times over budget. Most of the materials to build the installations–hundreds of tons of equipment for each one–were shipped to remote mountain peaks by dogsled. Airbases were constructed at many of the sites to get fuel, people, and supplies in and out. Technicians worked at these sites year round, facing minus 30 degree weather or worse during the winter.

We went up twice, once during the afternoon and once at 1:30 in the morning to watch the simultaneous sunrise and sunset. I can only imagine how miserable it must have been to work here; in the middle of one of the warmest summers on record, when Nome was facing over-70-degree weather, it was cold and windy on top of the mountain. Winter, when the sun hardly comes up, must have been brutal.

I used my smartphone to take a panorama showing the whole installation from the very peak of Anvil Mountain. Click to embiggen!

An Open Letter to Brogrammers

Computer programming is a tough job. It’s not for the faint of heart or the fair of sex. It’s grueling, high-stress work, demanding that you sit on a comfortable chair in an air-conditioned office for hours on end, typing on a keyboard while looking at a monitor. Women just aren’t rugged enough for that.

Plus, as everyone knows, women can’t code. At best, they can maybe contribute in their small way to large open-source projects, but really, they’re much better suited for accessorizing PowerPoint presentations written by real coders. Manly coders.

If this is the world you live in, bro, I’m afraid I have some really bad news for you.

I’d like to introduce you to someone. This is Augusta Ada King, Countess of Lovelace. She was a lady’s lady, an aristocrat who lived in the 1800s and who did all of the things young women of noble birth did back then–danced, wrote poetry, and penned long flowery letters to her tutor.

She also wrote the world’s first computer program in 1842, in the margins of a technical document she was translating from Italian into English.

Yes, you read that right. Ada was so fucking baller she wrote code before computers had even been invented. You think you’re hardcore because you can use agile development strategies to link a big data repository to a high-performance querying front end without SQL? Pfaff. This woman invented coding before there was anything to code on.

And then there’s this woman, who could kick your ass sideways, steal your lunch, and then fart out code better than anything you’ll ever be capable of if you live to be a thousand years old.

This is “Amazing” Grace Hopper. She took leave from Vassar to join the Navy, where she invented or helped invent the entirety of all modern computer science, including nearly every wimpy-ass tool your wimpy ass laughingly refers to as “coding.” Compared to her, you’re nothing but a little kid playing with Tinker toys. Tinker toys she invented, by the way.

Yeah, I know, I know. You think you’re all badass and shit because you can get your hands right down there and compile a custom Linux kernel with your own task scheduler that reduces overhead for context changes by 16%, and…

Ha, ha, ha, ha, you are just so cute! It’s absolutely precious how you think that’s hardcore. That kind of shit is duck soup. Seriously, no-brains-required duck fucking soup compared to what she did. That C compiler you love so much? Grace Hopper invented the whole idea of writing code in a language that isn’t machine code and then compiling it to something that is. She was the one who came up with the notion of a “compiler” (and wrote the very first one ever), pausing along the way to invent code testing and profiling.

Thanks to her, you’re living in the lap of luxury. you can write code without having to know the exact DRAM timing. You have conditional branches and loops–neither of which existed when she started programming the Harvard Mark 1. (She made loops by taking long strips of paper tape and, no shit, taping their ends together to get the computer to execute the same code again.)

You want to see hardcore programming? I’ll show you hardcore programming:

This is what real hardcore coders do. No compilers, no syntax checkers, just a teletype machine and a bunch of fucking switches that change the computer’s memory and registers directly.

And you know what? For her, that was luxury. She and all the other early computer programmers–almost all of whom were women, by the way–started out programming by plugging patch cords into plugboards, because that’s how they rolled, motherfucker. Fuck keyboards, fuck front-panel switches…those things were soft. If you wanted to code back then, you needed a postgraduate degree in mathematics, an intimate understanding of every single component inside the computer, and the ability to route data with your bare fucking hands.

Grace Hopper was so badass that when she retired from the military, Congress passed a special act to bring her back. Twice. And then when she retired for real (for the third time), the Navy named a guided missile destroyer after her.

Trust me when I say you will never be this badass, bro.

So the next time you see something like this:

and you think that girls can’t code, just remember girls invented coding. And invented the tools that finally let softies like you play at being programmers. They did the heavy lifting so programming could be easy enough for noobs like you.

Of Android, iOS, and the Rule of Two Thousand, Part II

In part 1 of this article, I blogged about leaving iOS when I traded my iPhone for an Android-powered HTC Sensation 4G, and how I came to detest Android in spite of its theoretical superiority to iOS and came back to the iPhone.

Part 1 talked about the particular handset I had, the T-Mobile version of the Sensation, a phone with such ill-conceived design, astronomically bad build quality, and poor reliability that at the end of the year I was on my third handset under warranty exchange–every one of which failed in exactly the same way.

Today, in Part 2, I’d like to talk about Android itself.


When I first got my Sensation, it was running Android 2.3, code-named “Gingerbread.” Android 3 “Honeycomb” had been out for quite some time, but it was a build aimed primarily at tablets, not phones. When I got my phone, Android 4 “Ice Cream Sandwich” was in the works, ready to be released shortly.

That led to one of my first frustrations with the Android ecosystem–the shoddy, patchwork way that operating system updates are released.

My phone was promised an update in the second half of 2011. This gradually changed to Q4 2011, then to December 2011, then to January 2012, then to Q1 2012. It was finally released on May 16 of 2012, nearly six months after it had been promised.

And I got off lucky. Many Motorola users bought smart phones just before the arrival of Android 4; their phones came with a written guarantee that an update to Android 4 would be published for their phones. It never happened. To add insult to injury, Motorola released a patch for these phones that locked the bootloader, rendering the phone difficult or impossible to upgrade manually with custom ROMs–so even Android enthusiasts couldn’t upgrade the phones.

Now, this is not necessarily Google’s fault. Google makes the base operating system; it is the responsibility of the individual handset manufacturers to customize it for their phones (which often involves shoveling a lot of crapware and garbage programs onto the phone) and then release it for their hardware. Google has done little to encourage manufacturers to backport Android, nor to get manufacturers to offer a consistent user experience with software updates, instead leaving the device manufacturers free to do pretty much as they choose except actually fork Android themselves…which has led to what developers call “platform fragmentation” and to what Motorola Electrify, Photon and Atrix users call things I shan’t repeat in a blog as family-friendly as this one.

But what of the operating system itself?

Well, it’s a mixed bag of mess.


When I first got my Android phone, I noted how the user interface seemed to have been designed by throwing a box of buttons and dialogs and menus over one’s shoulder and then wired up wherever they hit. System settings were scattered in three different places, without it necessarily being obvious where you might find any particular setting. Functionality was duplicated in different places. The Menu button is a mess; it’s filled with whatever the programmer couldn’t find a better place for, with little thought to good UI design.

Android is built on Linux, an operating system that has a great future on the desktop ahead of it, and always will. The Year of Linux on the Desktop was 2000 was 2002 was 2005 was 2008 was 2009 was 2012 will be 2013. Desktop aside, Linux has been a popular server choice for a very long time, because one thing Linux genuinely has going for it is rock-solid reliability. When I was working in Atlanta, I had a Linux Gentoo server that had accumulated well over two years’ continuous uptime and was shut down only because it needed to be moved.

So it is somewhat consternating that Linux on cell phones seems rather fragile.

So fragile, in fact, that my HTC Sensation would pop up a “New T-Mobile Service Notice” alert every week, reminding me to restart the phone. Even the network operators, it would seem, have little confidence in Android’s stability.

It’s a bit disappointing that the one thing I most like about Linux seems absent from Android. Again, though, this might not be Google’s fault directly; the handset makers and network operators do this to themselves, by taking Android and packaging it up with a bunch of craplets of spotty reliability.

One of the things that it is really, really important to be aware of in the Android ecosystem is the way the money flows. You, as a cell phone owner, are not Google’s customer. Google’s customer is the handset manufacturer. You, as as a cell phone owner, are not the handset manufacturer’s customer. The handset manufacturer’s customer is the network operator. You are the network operator’s customer–but you are not the network operator’s only customer.

Because of this, the handset maker and the network operator will seek additional revenue streams whenever they can. If someone offers HTC money to bundle some crap app on their phones, HTC will do it. If T-Mobile decides it can get more revenue by bundling its own or someone else’s crap app on your phone, it will.

Not only are you not the customer, at some points along the chain–for the purposes of Google ad revenue, say–you are the product being sold. Whenever you hear people talking about “freedom” or “openness” in the Android ecosystem, never forget that.

I sometimes travel outside the US, mainly to Canada these days. When I do that, my phone really, really, really wants me to turn on data roaming.

There are reasons for that. When you roam, especially internationally, the telcos charge rates for data that would make a Mafia loan shark blush. So Android agreeably nudges you to turn on data roaming, and here’s kind of a sticking point…

Even if you’re connected to the Internet via wifi.

It pops up an alert constantly, and by “constantly” I really do mean constantly. Even when you have wifi access, it pops up every time you switch applications, every time you unlock the phone, and about every twenty minutes when you aren’t using the phone.

Just think of it as Google’s way to help the telcos tap your ass that revenue stream.

This multiple-revenue-streams-from-multiple-customers model has implications, not only for the economics of the ecosystem, but for the reliability of your phone as well. And even for the battery life of your phone.

Take HTC phones on T-Mobile (please!). They come shoveled–err, “bundled”–with an astonishing array of crap. HTC’s mediocre Facebook app. HTC Peep, HTC’s much-worse-than-mediocre Twitter client. Slacker Radio, a client for a B-list Internet radio station.

The presence of all the various crapware that comes preloaded on most Android phones, plus the fact that Android apps don’t quit when they lose focus, generally means that a task manager app is a necessary addition to any Android system…which is fine for the computer literate, but less optimal for folks who aren’t so computer savvy.

And it doesn’t always help.

For example, Slacker Radio on my Sensation insists on running all the time at startup, whether I want it to or not:

Killing it with the task manager never works. Within ten minutes after being killed, it somehow respawns, like a zombie in a George Ramero movie, shambling after you no matter how many times you shoot it:

The App Manager in the Android control panel has a function to disable an app entirely, even if it’s set to launch at startup. For reasons I was never able to understand, this did not work with Slacker. It was always there. Always. There. It. Never. Goes. Away. You. Can’t. Hide. From. It.

Speaking of that “disable app” functionality…

Oh, goddamnit, no, I don’t want to turn on data roaming. Speaking of that “disable app” functionality, use it with care! I soon learned that disabling some bundled apps can have…unfortunate consequences.

Like HTC Peep, for instance. It’s the only Twitter client for smartphones I have yet found that is even worse than the official Twitter client for smartphones. It loads a system service at startup (absent from the Task Killer screenshots above because I have the task killer set not to display system services). If you let it, it will download your Twitter feed.

And download your Twitter feed.

And download your Twitter feed. It does not cache any of the Twitter messages you read; every time you start its user interface, it re-downloads the whole thing again. The result, as you might imagine, is eyewatering amounts of data usage. If you aren’t one of the lucky few who still has a truly unmetered data plan, think twice about letting Peep have your Twitter account information!

Oh, and don’t try to disable it in the application control panel. If you do, the phone’s unlock screen doesn’t work any more, as I discovered to my chagrin. Seriously.

The official Twitter app isn’t much better…

…but at least it isn’t necessary to unlock the damn phone.

All this crapware does more than eat memory, devour bandwidth, and slow the phone down. It guzzles battery power, too. One of the default Google apps, Google Maps, also starts a service each time the phone boots up, and man, does it hog the battery juice…even if you don’t use Maps at all. (This screen shot, for instance, was taken at a point in time when I hadn’t touched the Maps app in days.)

You will note the battery is nearly exhausted after only four hours and change. I eventually took to killing the Maps service whenever I restarted the phone, which seems to have improved the HTC’s mediocre battery life without actually affecting Maps when I went to use it.

Another place where Android’s lack of a clear and consistent user interface–

AAAAARGH! NO! NO, YOU PATHETIC FUCKING EXCUSE OF A THING, I DO NOT WANT TO TURN ON DATA ROAMING! THAT’S WHY I SAID ‘NO’ THE LAST 167 TIMES YOU ASKED! SO HELP ME, YOU ASK ME ONE MORE TIME AND I WILL TIP YOU STRAIGHT INTO THE NEAREST EMERGENCY INTELLIGENCE INCINERATOR! @$#%%#@!

Sorry, where was I?

Oh, yes. Another place where Android’s lack of a clear and consistent user interface is its contact management, which is surely one of the more straightforward bits of functionality any smart phone should have.

Android gives you, or perhaps “makes you take responsibility for,” a level of granularity of the inner workings of its contact database that really seems inappropriate.

It makes distinctions between contacts which are stored on your SIM card, contacts which are stored in the Google contact manager (and synced to the Google cloud), and contacts which are stored in other ways. There are, all in all, about half a dozen ways to store contacts–card, Google cloud, T-Mobile cloud, phone memory card. They all look pretty much the same when you’re browsing your contacts, but different ways to store them have different limitations on the type of data that can be stored.

Furthermore, it’s not immediately obvious how and where any particular contact is stored. Things you might think are being synced by Google might not actually be.

And worse, you can’t, as near as I was ever able to tell, export all your contacts at once. Oh, you can export them, all right; Android lets you save them in a .vcf file which you can then bring to another phone or sync with your computer. But you can’t export ALL of them. You have to choose which SET you export: export all the contacts on your SIM card? Export all your Google contacts? Export all your locally-saved-on-the-phone-memory-card contacts?

When I was in getting my second warranty replacement phone, I asked the technician if there was an easy way to take every contact on the phone and save all of them in one export. He said, no, there really isn’t; what he recommended I do was export each group to a different file, then import all those files to my Google contact list, and then finally delete all the duplicates from all the other contact lists.

It worked, but seriously? This is stupid user interface design. It’s a user interface misfeature you might not ever encounter if you always (though luck or choice) save your contacts to the same set, but if for whatever reason you haven’t, God help you.

Yes, I can see why you might want to have separate contact lists, stored and backed up separately. No, that does not excuse the lack of any reasonable way to identify, sort, and merge those contact lists. C’mon, Google engineers, you aren’t even trying.

And speaking of brain-dead user interface design, how about this alert?

What the fuck, Google?

Okay, I get it, I get it. WiFi sharing uses a lot of battery power. The flash uses battery power. Android is just looking out for my best interests, trying to save my battery…

…but don’t all the Fandroids carry on about how much better Android is because it doesn’t force you to do what it thinks is best for you, it lets you decide for yourself? Again I say, what the fuck, Google?


So far, I have complained mostly about the visible bits of Android, the user interface failings and design decisions that demonstrate a lack of any sort of rigorous, cohesive approach to UI design.

Unfortunately, the same problems apply to the internals of Android, too.

One early design decision Google made in the first days of Android concerns the way it handles screen redraws. Google intended for Android to be portable to a wide range of phones, from low-end phones to full-featured smartphones, and so Android does not make use of the same level of GPU acceleration that iOS does. Instead, it uses the CPU to perform many drawing tasks.

This has performance and use implications.

User interface drawing occurs in an application’s main execution thread and is handled primarily by the CPU. (Technically speaking, each element on the screen–buttons, widgets, and so on–is rendered by the CPU, then the GPU handles the compositing.) That means that applications will often block while screen redraws are happening. On HTC Sense, for instance, if you put a clock on the home screen and then you start switching between screens, the clock will freeze for as long as your finger is on the screen.

It also means that things like populating a scrolling list is far slower on Android than it is on iOS, even if the Android device has theoretically better specs. Lists are populated by the CPU, and when you scroll through a list, the entire list is redrawn with each pixel it moves. On iOS, the list is treated as a 2D OpenGL surface; as you scroll through it, the GPU is responsible for updating it. Even on smartphones with fast processors, this sometimes causes noticeable UI sluggishness. Worse, if the CPU is interrupted by something else, like updating a background task or doing a memory garbage collect, the UI freezes for an instant.

Each successive version of Android has accelerated more graphics functions. Android 4 is significantly better than Android 2.3 in this regard. User input can still be blocked during CPU activity, and background tasks still don’t update UI elements while a foreground thread is doing so (I was disappointed to note that in Android 4, the clock still freezes when you swap pages in HTC Sense), but Android 4’s graphics performance is way, way, waaaaaaay better than it was in 2.3.

There are still some limitations, though. Because UI updates occur in the main execution thread, even in Android 4, background tasks can still end up being blocked while UI updates are in effect. This actually means there are some screen captures I wanted to show you, but can’t.


One place where Android falls down compared to iOS is in its built-in touch keyboard. Yes, hardcore geeks prefer physical keyboards, and Android was developed by hardcore geeks, which might be part of the reason Android’s touch keyboard is so lackluster.

One problem I had in Android 2.3 that I really, really hoped Android 4 would fix, and was sad to note that it didn’t, is that occasionally the touch keyboard just simply does not work.

Intermittently, usually once or twice a day, I would bring up an app–the SMS messenger, say, or a notepad, or the IMO IM messenger, and I’d start typing. The phone would buzz on each keypress, the key would flash like it does…but nothing would happen. No text would be entered.

And I’d quit the app, and relaunch it, and everything would be fine. Or it wouldn’t, and I’d quit and relaunch the app again, and if it still wasn’t fine, I’d reboot the phone, and force quit Google Maps in the task manager, and everything would be fine.

I tried very hard to get a screen capture of this, but it turns out the screen capture functionality doesn’t work when your finger is on the touch keyboard. As long as your finger is on the keyboard, the main execution thread is busy drawing, and background functions like screen grabs are blocked.

Speaking of the touch keyboard, there’s one place iOS really shines over Android, and that’s telling where your finger is at on the screen.

That’s harder than it sounds. For one, the part of your finger that first makes contact with the screen might not be where you think it is; it’s not always right in the middle of your finger. For another, when your finger touches the screen, it’s not just a single x,y point that’s being activated. Your finger is big–when you have a high-resolution screen, it’s bigger than you think. A whole lot of area on the touch screen is being activated.

So a lot more deep programming voodoo goes on behind the scenes to figure out where you intended to touch than you might think.

The keys on an iPhone touch keyboard are physically smaller on the screen than they are on an Android screen, and Android screens are often bigger than iOS screens, too. You’d think that would mean it’s easier to type on an Android phone than an iPhone.

And you’d be wrong. I have found, consistently and repeatably, that my typing accuracy is much better on an iPhone than an Android phone, even when the Android phone has a bigger screen and a bigger keyboard. (One of my friends complains that I have fewer hilarious typos and bizarre autocorrects in my text messages now, since I switched back to the iPhone.)

The deep voodoo in iOS appears to be better than the deep voodoo in Android, and yes, I calibrated my touch screen in Android.

Now, you can get third-party keyboards on Android that are much better. The Swiftkey keyboard for Android is awesome, and I love it. It’s a lot more sophisticated than any other keyboard I’ve tried, no question.

But goddamnit, here’s the thing…if you pay hundreds of dollars for a smart phone with a built-in touch keyboard, you shouldn’t HAVE to buy a third-party keyboard to get good results. Yes, they exist, but that does not excuse the pathetic performance of the stock Android keyboard! It’s like saying “Well, this new operating system isn’t very good at loading files, but that’s not a problem because you can buy a third-party file loader.” The user Should. Not. Have. To. Do. This.

And even if you do buy it, you’re still not paying for the amount of R&D that went into it. It’s a losing proposition for the developer AND for the users.


My new iPhone included iOS 6, which feels much more refined than Android on almost every level.

I would be remiss, however, if I didn’t mention what a lot of folks see at the Achille’s heel of iOS: its Maps app.

Early iPhones used Google Maps, a solid piece of work that lacked some basic functionality, such as turn-by-turn directions. When I moved to Android, I wrote about how the Maps app in Android was head, shoulders, torso, and kneecaps above the Maps app in iOS, and it was one of the best things about Android.

And then Android 4 came along.

I don’t know what happened to Maps in Android 4. Maybe it’s just a problem on the Sensation. Maybe it’s an issue where the power manager is changing the processor clock speed and Maps doesn’t notice. I don’t know.

But in Android 4, the cheery synthesized female voice that the turn-by-turn directions used got a little…weird.

I mean, it always was weird; you should hear how it pronounces “Caesar E. Chavez Blvd” (something Maps in iOS 6 pronounces just fine, actually). But it got weirder, in that it would alternate between dragging like a record player (does anyone remember those?) with a bad motor and then suddenly speeding up until it sounded like it was snorting a mixture of helium and crystal meth.

It was a bit disconcerting: “In two hundred feet, turn llllllllllleeeeeeeeeeffffffffftttttttt oooooooooonnnnnnnnn twwwwwwwwwwwwweeeeeeeeeeennnnnnnnttttyyyyyyyy–SECONDAVENUEANDTHENTURNRIGHT!” There was never a rhyme or reason to it; it never happened consistently on certain words or in certain places.

Now, Maps on iOS has been slammed all over Hell and back by the Internetverse. Any mapping program is going to have glitches (Google places a street that a friend of mine lives on about two and a half miles from where it actually is, in the middle of an empty field), but iOS apparently has a whole lot of very silly errors.

I say “apparently” because I haven’t personally encountered any yet, knock on data.

It was perhaps inevitable that Apple should eventually roll their own app (if by “roll their own” you mean “buy map data from Tom Tom”), because Google refused to license turn-by-turn mapping to Apple, so as to create a product differentiation point to make bloggers like me say things like “Wow, Google’s Android Map app sure is better than the one on iOS!” That was a strategy that couldn’t last forever, and Google should have known that, but… *shrug* Whatever. Since Google lost the contract to supply the Maps app to Apple, they took a hit larger than their total Android revenue; if they want to piss it away because they didn’t want Apple to have turn-by-turn directions, I think they really couldn’t have expected anything else.

In part 3 of this thing, I’ll talk about T-Mobile, and how they’re so hopelessly dysfunctional as a telecommunication provider they make the North Korean government look like a model of efficiency.

The Birth of a Meme, or, Why I love the Internet

As the American electorate went through the motions of choosing a candidate of someone else’s choosing this week, the Internetverse was alive with political commentary, flames, racial epithets, and all the other things that normally accompany an American campaign season.

At the height of the election, Twitter was receiving 15,107 tweets per second…an eyewatering amount of data to handle, especially if you’re a company with little viable revenue stream other than “get venture capital, spend it, get more venture capital.”

Some of those tweets were tagged with the #romneydeathrally hashtag, and for a few days, how the Internet did shine.

If you do a search on Twitter for #romneydeathrally, you’ll find some of the finest group fiction ever written. The Tweets tell a strange, disjointed account of a political rally straight out of Lovecraft, with bizarre rites taking place on stage and eldritch horrors being summoned to feed on the crowd.

The hash tag went on for days, the Internet hive-mind creating an elaborate communal vision of a dark supernatural rally filled with horrors.

I even got in on the action myself:

Eventually, it caught the attention of the media. The Australian Hearld Sun ran an article about the hash tag that painted an interesting narrative of the meme:

In further evidence that Democrats are winning the social media war, hundreds of people have taken to Twitter to “report” on a fictional event where Republican Presidential hopeful Mitt Romney has called upon satanic powers in a last ditch effort to swing the election in his favour.

DigitalSpy has their own take on the meme, also saying Twitter users are talking about Mitt Romney calling upon Satanic powers.

When H. P. Lovecraft references get labeled as “Satanic powers,” I weep for the lost literacy of a generation…but I digress.

By far the most bizarre response to the meme was posted by Twitter user @nessdoctor over on Hashtags.org with the title “Twitter Users Threaten Mitt #RomneyDeathRally”. According to Ms. Doctor,

The hasthag #RomneyDeathRally trended after tweets spread placing Presidential candidate Mitt Romney (@MittRomney) of the Republican party under the light of resorting dark satanic techniques to win the upcoming US national elections on November 6, 2012.

This is, of course, a nasty hashtag and while its purveyors insist it’s for humor (and sometimes it is), it is done in bad taste. […]

There were also posts that threatened to kill Romney, with some even threatening to join domestic terrorism and attack the White House and the people in it if Romney sits as president.

The article has been rewritten a number of times; at first, it stated that the hashtag was all about threats to kill Romney and his family, then it made the strange claim that the hash tag came about after rumors had spread that the Romney campaign was trying to use Satanism to win the election. For a while, the article had screen captures of threats against Romney with a caption claiming the threats were part of the #romneydeathrally hash tag; that claim has since been dropped. I have no idea what the article will say if you, Gentle Readers, should visit it.

But where did it come from? (I’ll give you a hint: it didn’t start because of rumors of Satanism.)

Like most Internet memes, the #romneydeathrally hashtag craze started small. On November 4, Mitt Romney held a campaign rally in Pennsylvania. For whatever reason, the rally was late getting started, it was cold, and some people who were there complained on Twitter that Romney campaign staffers were refusing to permit them to leave the rally, citing unspecified “security” concerns.

Some of these tweets were picked up by reporters covering the event.

It didn’t take long to turn into a public relations disaster. Some folks started talking about the “death rally” that you could never leave on Twitter, and the #romneydeathrally hashtag was born.

Naturally, the Internet being what it is, it really didn’t take long for some folks to decide they’d ride that train to the last station:

And, inevitably, Lovecraft got involved. Because if there’s one thing you can count on about the Internet, it’s por–okay, if there are two things you can count on about the Internet, one of them is that the Internet will always insert references to Lovecraft and Cthulhu wherever it possibly can.

And thus the meme was born.

It had nothing to do with threats on Romney, nor with rumors that the Romney campaign was dabbling in Satanism. Instead, it was the Internet doing what the Internet does: seizing on something that happened and taking it to an absurd conclusion.

The Romney Death Rally was a PR own-goal for the Romney campaign, sparked by staffers doing something really stupid at a rally.

There are two lessons here. The first is that if you’re a prominent politician and you’re hosting a rally, it’s probably a bad idea to refuse to allow people to leave. People have cell phones, and Twitter, and some of them will complain, and their complaints might be heard.

The second, though, is less about politics than it is about news reporting. For the love of God, if you have a journalism degree, you should be able to recognize a reference to the Cthulhu mythology when you see it.