Tag: Cellular Telephones

Where Will the PC Go? -- Part 3: Business

Over the past couple of posts, I've given some of the reasons I think tablet PC's could replace traditional desktops and laptops. Today I'm going to talk about why I don't think that's going to happen anytime soon: the business market.

In enterprise, Microsoft still rules the roost, with Windows and Office. The lock-in is strong.

And while the BYOD trend isn't likely to go away, and in fact there are some major features of Android Marshmallow that are designed to make it easier to use a phone with dual profiles for home and work, that's still a far cry from replacing work-provided computers with devices that workers bring from home.

And there's a simple reason why: whatever costs a company incurs by buying a computer for every one of its employees are offset by standardizing on hardware and software to make IT's job easier. When everybody's running the same few programs on the same few models of computer, it limits the number of potential compatibility issues. When every computer is running the same stock image, it's easier to control devices' security, and when IT pushes every software update, it limits the possibility that the latest patch will break anything. And when a computer does break down, it makes it easy to replace it with a machine of the same model with all the same software and settings.

And when data is stored on an internal company server, it's less vulnerable than if it's in somebody's Google Docs account, or Dropbox, or whatever the hell MS and Apple call that thing where your home directory automatically gets uploaded to their servers now.

And that's just talking general best-practices for every company. You start getting into companies (and government agencies) where security is tightly restricted, whether that be military, intelligence, healthcare, or just a lot of sensitive proprietary information, and there's no fucking way you're going to allow people to use their personal devices for work.

(Unless you're the Director of the CIA and send confidential information to your personal fucking AOL account. But I digress.)

Convertibles

All that said, business has already started transitioning away from desktops to laptops, and I can foresee the possibility of Windows-based convertible tablets like the Lenovo Yoga and the MS Surface picking up some traction. I don't think it would be a BYOD scenario; I don't think businesses are apt to move their operations over to workers' own personal tablets -- but they could eventually start equipping every worker with a company-supplied tablet instead of a company-supplied laptop.

But first, prices are going to have to drop. The reason laptops passed desktops is that their prices approached parity; that hasn't happened with tablets yet. You can get a respectable mid-range Lenovo laptop for under $400; you can get a Lenovo tablet with a keyboard in that price range, but it's going to come with pretty anemic specs. 2GB RAM and 32GB internal storage is okay for a tablet, and might work for a device you only use when you're traveling, but I don't think a machine like that is good enough to use as a daily driver, even for end-users who only need Windows and Office. If you want a convertible tablet with comparable specs to a mid-range laptop, you can expect to pay 3 times as much -- at least, for now. Moore's Law is still in effect, and that gap's going to close, just like the gap between desktops and laptops did.

SaaS

There's one more factor that can make the puny specs of a 32GB tablet moot: apps that run in a browser instead of locally. Office 365 could potentially replace the traditional client-side version of MS Office for business users.

But most business users don't just use Microsoft Office. I've worked at companies both big and small, and nearly all of them have some sort of ancient proprietary program that they rely on for day-to-day use, and often several. Transitioning from an already-long-in-the-tooth program to a new one that performs the same features but runs on a server is not a quick, easy, or cheap task.

I'll talk more about SaaS in the next post -- and, in particular, the challenges it faces in displacing high-performance applications like multimedia editors and games -- and I think it's making major inroads. But the business sector depends so heavily on legacy software that I just don't see it transitioning entirely to the cloud within the next decade. We'll have cost-competetive convertible tablets before we have every app in the cloud.

Where Will the PC Go? -- Part 2: Possible Solutions

In my previous post, I established that, despite strides made in screen keyboards and text-to-speech programs, a hardware keyboard is still the best way to write text documents.

In this one, I'll look at how phones and tablets work as replacements for PC's.

Problem 3: Phones Are Still Phones

Of course, you can connect a phone to a computer monitor, and to a keyboard. Or to a game controller.

Awhile back I hooked my phone up to my TV, and paired it to my DualShock 4, and fired up Sonic 4.

The game ran fine -- I didn't like it very much but it ran fine.

And then my mom called me.

The game stopped, and my TV screen filled up with a message that I was getting a phone call. So I walked across the room, picked up my phone, disconnected it from my TV, and answered it.

This is not optimal behavior for a computer.

Now, there are possible ways to fix this.

Headsets and speakerphone are two ways to answer the phone without having it in your hand, but neither one is optimal. Speakerphone is often hard to hear and can have that awful echo. And as for headsets, well, do I carry one in my pocket? Do I keep one in every room where I might dock my phone and use it as a computer?

A better solution would be to "connect" your phone to a monitor and speakers wirelessly, maybe using a device like a Chromecast. That way you could keep it next to you, or in your pocket, while still editing documents, or playing Sonic 4, or whatever. And if it rang, you could answer it, and not lose whatever was on your screen -- say I get a call where I want to take notes with my keyboard (as frequently happens); there could be a way to do that.

But the easier solution is probably to have the device that's connected to your keyboard and monitor(s) not be your phone. Especially if people continue to buy other devices, such as laptops or tablets.

Problem 4: Phone Interfaces Don't Make Good Desktop Interfaces

Windows 8. Do I even need to elaborate?

Microsoft tried to design an interface that would work on phones and on desktops. It was a huge failure.

This was entirely foreseeable. A 4" touchscreen is completely different from a pair of 1080p monitors with a keyboard and mouse attached to them. An interface designed for the former is a lousy fit for the latter, and vice-versa.

So, with Windows 10, Microsoft tried something else, and something altogether more sensible: the OS was designed with a phone/tablet interface and a desktop computer interface, with the ability to switch between the two. If you connect your phone to a dock that's hooked up to a monitor, a keyboard, and a mouse, then the interface changes to desktop mode.

Which is a good idea (and one that Canonical has been moving toward for years), but Windows Phone hasn't exactly set the world on fire (and Ubuntu Phone isn't a thing that anybody seems to want). Windows tablets, on the other hand, including Lenovo's Yoga series and MS's own Surface line, have fared much better.

Google's moving toward this sort of convergence too; it hasn't gotten as far as MS or Canonical yet, but there have been hints of future compatibility between Android and ChromeOS.

Ah yes, ChromeOS -- and the return to dumb terminals running server-side programs.

I think that's going to be key to bringing a few of the major special-case users on board with the transition to lower-powered systems: gamers and media designers.

We'll get to them soon. But in the next post, I'll be looking at the market that's really going to continue driving PC sales: business.

Where Will the PC Go? -- Part 1: Identifying the Problem

The other day, Ars Technica posted an article called Cringe-worthy “PC Does What?” campaign wants you to upgrade, about a new ad campaign the PC industry is pushing to try and convince users to buy new computers.

The PC industry is in trouble. It's built around a pattern of regular upgrades that customers just aren't buying anymore. And it's trying whatever it can to stop the bleeding.

On the other hand, rumors of its demise have been greatly exaggerated. In the comments thread on the Ars article, someone named erikbc said:

Well, if anyone believes PC is dead they need to get their head checked.
And understand some numbers:

https://en.wikipedia.org/wiki/Usage_share_of_operating_systems#Desktop_and_laptop_computers

A user named has responded:

…said every horse-and-buggy salesman in 1900 ever.

Which, okay, doesn't actually make a whole lot of sense. (In fact I am fairly confident that very few horse-and-buggy salesmen in 1900 ever said "If anyone believes PC is dead they need to get their head checked" and then linked to Wikipedia.) But, like many shitty analogies do, it got me thinking about why it was a shitty analogy.

Mainly, I don't think the PC will go away to the extent that horse-drawn carriages have. I think it's possible that tablets could completely replace desktop and laptop computers, but I don't think that can happen until they effectively duplicate the functionality of PC's -- in effect not actually replacing PC's but becoming them.

General Case: Typical End Users

While it's easy to point to the rise of the smartphone as the reason for declining PC sales, it's only one of the reasons. There's another one: the last processor most end users will ever need was released in 2006.

A typical end user only needs a few things in a PC: a web browser, an office suite, music, and videos. (And those last three are, increasingly, integrated into the first one; I'll circle back to that in a later post.)

In 2006, Intel released the Core 2 Duo, which, paired with even a low-end onboard graphics chip, could handle HD video and drive two 1920x1080 monitors. And it's 64-bit, so it can handle more than the 3GB of RAM that 32-bit processors max out at.

There have been plenty more, and plenty better, processors in the 9 years since. But they're not better for people who only use their computer for browsing, Office, listening to music, and watching videos. The Core 2 Duo was good enough for them.

There are people who greatly benefit from newer and better processors -- gamers and people who produce media rather than just consuming it. But they're special cases; I'll get to them later. For the average user, the difference between a Core 2 Duo and a Core i7 isn't even noticeable.

The computer industry grew up in the 1990's around the expectation that people would upgrade their computer every few years to handle new software. And people just don't do that anymore. They buy a new PC when the old one quits working; not before.

But, at least at this point, they still need a PC. People may be buying more phones than PC's, but, at least in America, a phone is not a replacement for a PC.

Problem 1: Screen Keyboards

Screen keyboards are a pain in the ass.

They're fine for short communication -- text messages and tweets -- but they're just too slow and imprecise for long-form writing. (I thought of writing this post entirely on a screen keyboard -- like last week's handwritten post -- but I think that would make me want to gouge my eyes out.)

There are still plenty of requirements for longform writing in day-to-day life -- reports for school and reports for work, for starters. And that's even in professions where you don't have to write for a living, never mind ones where you do. People who write articles, and especially people who write books, are best served with a keyboard to type on.

And maybe that won't always be the case. Maybe kids growing up with screen keyboards aren't learning to type on traditional keyboards; maybe they're faster with screen keyboards than they are with hardware ones. Maybe, within a generation, we will see essays, reports, articles, even books, all written with screen keyboards. I suspect that if we do, they'll look a whole lot different than they do today.

Or maybe screen keyboards will get better. Maybe predictions and autocorrect will improve. Maybe a faster paradigm than qwerty + swipe will catch on. There's a lot that can happen in this space.

Or maybe we won't be using keyboards at all.

Problem 2: Text-to-Speech

Speech recognition software has grown by leaps and bounds. Terry Pratchett used Dragon Dictate and TalkingPoint to write his last few novels.

But being good enough for a first draft, for a user who is no longer physically capable of using a keyboard, isn't the same thing as being able to recognize a full range of standard and nonstandard grammars and sentence structures, pick correct homonyms, and understand slang and regional dialects. (Pratchett liked to tell the story of how he had to train his text-to-speech software to recognize the word "arsehole".)

Text-to-speech software might be good enough for simple, clear documents, such as manuals, lists, daily work logs, AP-style newsbriefs, and technical writing (provided you're writing on a subject that doesn't have a lot of jargon words that don't appear in a simple dictionary). But for writing that's meant to convey personality -- editorials, reviews, fiction, even this blog post -- text-to-speech algorithms have a long way to go.

So, for now at least, a good old hardware keyboard remains the best way to input large blocks of text into a computer. In my next post, I'll examine why a dedicated PC is still the best thing to connect to that keyboard, and how phone and tablet OS's are (or aren't) working to bridge that gap.

Stuff On Screens

Handwriting
Type

This blog post is handwritten.  Instead of alt text, the complete text is transcribed in the Typed tab.


Yesterday I ran across two 2013 articles about books, literacy, and libraries in the Guardian, one by Neil Gaiman and the other by Susan Cooper. The Gaiman one is excellent, but I was disappointed by Cooper's, partly because it digresses substantially from its point, but mostly because of a couple of paragraphs I can't stop thinking about. She starts off quoting a talk she gave in 1990:

"We – teachers, librarians, parents, authors – have a responsibility for the imagination of the child. I don't mean we have to educate it – you can't do that, any more than you can teach a butterfly how to fly. But you can help the imagination to develop properly, and to survive things that may threaten it: like the over-use of computers and everything I classify as SOS, Stuff on Screens. I do realize that the Age of the Screen has now replaced the Age of the Page. But on all those screens there are words, and in order to linger in the mind, words still require pages. We are in grave danger of forgetting the importance of the book."

All that was 23 years ago and it's all still true. The screens have just grown smaller, and multiplied. In America, there are already a few digital schools, which have no books, not even in the library. And in schools across America, so many children now work on laptops or tablet computers that cursive handwriting is no longer being taught. Maybe that's also happening here. I suppose that's not the end of the world; lots of authors write their first drafts on a computer, though I'm certainly not one of them. But there's something emblematic about handwriting, with its direct organic link between the imagining brain and the writing fingers. Words aren't damaged by technology. But what about the imagination?

I am not a luddite. I've written screenplays for small and large screens. I love my computer. But as you can tell, this last author of the weekend is offering an unashamed plea for words on pages, for the small private world of a child curled up with a book, his or her imagination in direct communication with the imagination of the person who wrote the words on the page.

I have a great deal of respect for Ms. Cooper. The Dark is Rising Sequence meant a lot to me when I was a kid. And I absolutely agree with her premise that books and libraries are vital and that we must continue to treasure, support, and protect them, even in an increasingly digital world.

But her handwringing about Kids Today and their Screens just strikes me as a bunch of Old Person Nonsense.

At least she acknowledges that the decline of cursive is no big deal.

I heard my aunt bemoan the lack of cursive education in schools recently. My response was, "What the hell do kids need to know cursive for?" It's harder to read than print, it's (at least for me) harder and slower to write than print, and in the twenty-first century it's about as essential a communication skill as Latin. It may be an interesting subject to study, but it's hardly a necessary one.

In sixth grade, I had two teachers who wouldn't let us submit typed papers. Everything had to be written in ink, in cursive. One of them even had the gall to justify this restriction by saying "This is how adults communicate."

Well, it's twenty-one years later, and you know what? I can't think of a single time in my adult life that I've ever written anything in cursive. I don't even sign my name in cursive.

You know what I, as an adult, do use to communicate, each and every single day of my life? A goddamn computer.

I'm a Millennial. At least, I think I am; nobody seems to agree on just what the fuck a Millennial is, exactly. But consensus seems to be that I'm on the older end of the Millennial Generation, and I certainly seem to fit a lot of the generalizations people make about Millennials.

I've been online since I was six years old (though I didn't have a smartphone until I was almost 30); I grew up with Stuff on Screens.

And that means I read a lot.

As far as Stuff on Screens and literacy, I'm inclined to agree with Randall Munroe:

XKCD Writing Skills strip

I'd like to find a corpus of writing from children in a non-self-selected sample (e.g. handwritten letters to the president from everyone in the same teacher's 7th grade class every year)--and score the kids today versus the kids 20 years ago on various objective measures of writing quality. I've heard the idea that exposure to all this amateur peer practice is hurting us, but I'd bet on the generation that conducts the bulk of their social lives via the written word over the generation that occasionally wrote book reports and letters to grandma once a year, any day.

Millennials read all the time, and we write all the time. And that promotes the hell out of literacy, no matter how goddamn annoying it is to see somebody spell the word "you" with only one letter.

Per Cooper's contention that people experience a closer kind of bond with words on paper than words on screens, research indicates that this distinction is decreasing as more and more people become accustomed to screens. Via Scientific American:

Since at least the 1980s researchers in many different fields—including psychology, computer engineering, and library and information science—have investigated such questions in more than one hundred published studies. The matter is by no means settled. Before 1992 most studies concluded that people read slower, less accurately and less comprehensively on screens than on paper. Studies published since the early 1990s, however, have produced more inconsistent results: a slight majority has confirmed earlier conclusions, but almost as many have found few significant differences in reading speed or comprehension between paper and screens. And recent surveys suggest that although most people still prefer paper—especially when reading intensively—attitudes are changing as tablets and e-reading technology improve and reading digital books for facts and fun becomes more common. In the U.S., e-books currently make up between 15 and 20 percent of all trade book sales.

Now, there are ways in which physical books are superior to digital ones. One is DRM. DRM is a blight; it is a threat to libraries, to academia, to preservation, and to the very concept of ownership.

But it's also optional. Its not an inherent part of ebooks; it's bullshit added to them by assholes. And I suspect that, within a generation, it will be gone, just as music DRM has been gone for about a decade now.

There's one more case where paper books are superior to digital ones: pictures. I've already spoken at length about comic books shrunk to fit a 10" screen, as well as the color problems that can arise when they're not printed on the same paper stock they were designed for. The same goes for picture books, art books, photo books; for magazines whose layouts are designed for the printed page. When you put these things on a small screen, you do lose something tangible (and if you put them on a large screen, you lose portability).

On the other hand, I've currently got some 173 books and 362 comics on a 10" rectangle that fits in my backpack, and that is amazing.

People carry libraries in their pockets now. That's not a threat to literacy, it's a boon -- so long as voters and politicians understand that these portable libraries are not meant to replace the traditional kind, but to supplement them.

But for people who love books -- at least, people of my generation who love books -- it's not an either-or question. It's not "Should I read paper books, or digital ones?" It's "Holy shit, look at all the books I have access to, and all the different ways I can read them!"

The first iPhone was released in 2007. It's too early to gauge what long-term effects, nationally or internationally, the smartphone revolution will have on literacy and reading habits.

But I'm more inclined to agree with Munroe than Cooper: a generation that's reading and writing all the time is going to be better at reading and writing than one that isn't. Even if you think they're doing it wrong.


An angry hat tip to Scott Sharkey, who used to handwrite blog posts, which gave me the utterly terrible idea for this time-consuming pain-in-the-ass of a post. (Granted, I'm pretty sure he had the good sense never to do it with a six-page essay with working links.)

Also, the part where I printed an image and then re-scanned it is kind of like something this one angry lady on a My Little Pony fan site did once.

(And yes, I'm aware that I forgot to use blue pencil for the Scientific American link. I am not going back and redoing it. That's the thing about writing stuff out on paper: it's kinda tough to add formatting to something after you've already written it.)

E-Mails and Passwords

So the other day I decided it was past time to reset all my passwords.

I'm pretty good about password hygiene. I've been using a password locker for years, with a unique, randomly-generated* password for every account I use. But I'll admit that, like most of us, I don't do as good a job of password rotation as I might. That's probably because I've managed to amass over 150 different accounts across different sites, and resetting 150 different passwords is a giant pain in the ass.

(I'm thinking that, from here on in, I should pick a subset of passwords to reset every month, so I never wind up having to reset all 150 at once again. It would also help me to clear out the cruft and not keep logins for sites that no longer exist, or which I'm never going to use again, or where I can't even find the damn login page anymore.)

There was one more reason I decided now was a good time to do a mass update: I've got two E-Mail addresses that have turned into spam holes. As I've mentioned previously, I'm currently looking for work and getting inundated with job spam; unfortunately I went and put my primary E-Mail address at the top of my resume, which in hindsight was a mistake. Never post your personal E-Mail in any public place; always use a throwaway.

Which I do, most of the time -- and that's created a second problem: I've been signing up for websites with the same E-Mail address for 15 years, and also used to use it in my whois information. (I've since switched to dedicated E-Mail addresses that I use only for domain registration.) So now, that E-Mail has turned into a huge spam hole; it's currently got over 500 messages in its Junk folder, and that's with a filter that deletes anything that's been in there longer than a week. My spam filters are well-trained, but unfortunately they only run on the client side, not the server side, so any time Thunderbird isn't running on my desktop, my spam doesn't get filtered. (If I'm out of the house, I can tell if the network's gone down, because I start getting a bunch of spam in my inbox on my phone.)

So now I've gone and created two new E-Mail addresses: one that's just for E-Mails about jobs, and another as my new all-purpose signing-up-for-things address.

My hope is that the companies hammering my primary E-Mail address with job notifications will eventually switch to the new, jobs-only E-Mail address, and I'll get my personal E-Mail address back to normal. And that I can quit using the Spam Hole address entirely and switch all my accounts over to the new address. Which hopefully shouldn't get as spam-filled as the old one since I haven't published it in a publicly-accessible place like whois.

Anyway, some things to take into account with E-Mail and passwords:

  • Don't use your personal E-Mail address for anything but personal communication. Don't give it to anyone you don't know.
  • Keep at least one secondary E-Mail address that you can abandon if it gets compromised or filled up with spam. It's not necessarily a bad idea to have several -- in my case, I've got one for accounts at various sites, several that I use as contacts for web domains, and one that's just for communication about jobs.
  • Use a password locker. 1Password, Keepass, and Lastpass are all pretty highly-regarded, but they're just three of the many available options.
  • Remember all the different devices you'll be using these passwords on.
    • I'm using a Linux desktop, an OSX desktop, a Windows desktop, and an Android phone; that means I need to pick a password locker that will run on all those different OS's.
    • And have some way of keeping the data synced across them.
    • And don't forget that, even with a password locker, chances are that at some point you'll end up having to type some of these passwords manually, on a screen keyboard. Adding brackets and carets and other symbols to your password will make it more secure, but you're going to want to weigh that against the hassle of having to dive three levels deep into your screen keyboard just to type those symbols. It may be worth it if it's the password for, say, your bank account, but it's definitely not worth it for your Gmail login.
  • Of course, you need a master password to access all those other passwords, and you should choose a good one. There's no point in picking a bunch of unique, strong passwords if you protect them with a shitty unsecure password. There are ways to come up with a password that's secure but easy to remember:
    • The "correct horse battery staple" method of creating a passphrase of four random words is a good one, but there are caveats:
      • You have to make sure they're actually random words, words that don't have anything to do with each other. Edward Snowden's example, "MargaretThatcheris110%SEXY.", is not actually very secure; it follows correct English sentence structure, "MargaretThatcher" and "110%" are each effectively one word since they're commonly-used phrases, the word "SEXY" is common as fuck in passwords, and mixed case and punctuation don't really make your password significantly more secure if, for example, you capitalize the beginnings of words or entire words and end sentences with periods, question marks, or exclamation points. Basically, if you pick the words in your passphrase yourself, they're not random enough; use a computer to pick the words for you.
      • And this method unfortunately doesn't work very well on a screen keyboard. Unless you know of a screen keyboard that autocompletes words inside a password prompt but won't remember those words or their sequence. I think this would be a very good idea for screen keyboards to implement, but I don't know of any that do it.
    • There are programs and sites that generate pronounceable passwords -- something like "ahx2Boh8" or "ireeQuaico". Sequences of letters (and possibly numbers) that are gibberish but can be pronounced, which makes them easy to remember -- a little less secure than a password that doesn't follow such a rule, but a lot more secure than a dictionary word. But read reviews before you use one of these services -- you want to make sure that the passwords it generates are sufficiently random to be secure, and that it's reputable and can be trusted not to snoop on you and send that master password off to some third party. It's best to pick one that generates multiple passwords at once; if you pick one from a list it's harder for a third party to know which one you chose.
  • Of course, any password is memorable if you type it enough times.
  • And no password is going to protect you from a targeted attack by a sufficiently dedicated and resourceful attacker -- if somebody's after something you've got, he can probably find somebody in tech support for your ISP, or your registrar, or your hosting provider, or your phone company, or some company you've bought something from, somewhere, who can be tricked into giving him access to your account. Or maybe he'll exploit a zero-day vulnerability. Or maybe one of the sites you've got an account with will be compromised and they'll get everybody's account information. Password security isn't about protecting yourself against a targeted attack. It's about making yourself a bigger hassle to go after than the guy sitting next to you, like the old joke about "I don't have to outrun the tiger, I just have to outrun you." And it's about minimizing the amount of damage somebody can do if he does compromise one of your accounts.
  • And speaking of social engineering, security questions are deliberate vulnerabilities, and they are bullshit. Never answer a security question truthfully. If security questions are optional, do not fill them out. If they are not optional and a site forces you to add a security question, your best bet is to generate a pseudorandom answer (remember you may have to read it over the phone, so a pronounceable password or "correct horse battery staple"-style phrase would be a good idea here, though you could always just use letters and numbers too -- knowing the phonetic alphabet helps) and store it in your password locker alongside your username and password.
  • You know what else is stupid? Password strength indicators. I once used one (it was Plesk's) that rejected K"Nb\:uO`) as weak but accepted P@55w0rd as strong. You can generally ignore password strength indicators, unless they reject your password outright and make you come up with a new one.

* For the purposes of this discussion, I will be using the words "random" and "pseudorandom" interchangeably, because the difference between the two things is beyond the scope of this post.

Getting Sprint LTE to Work on CyanogenMod 12

Update 2015-10-12: My new advice for getting Sprint data to work on a Nexus 5 phone running CyanogenMod 12 is "Don't bother." I never did get it working right, and had to reboot at least once a day to get it working. I've since reverted back to KitKat. Original post follows, but if you want my advice it's "Stick with CM11."


First, let's get one thing out of the way: if you're using a custom Android ROM on your phone (or any device that can receive text messages), you're going to want to make sure it's up-to-date. There's a vulnerability in an Android component called Stagefright that is potentially devastating; it allows an attacker to gain control by doing nothing more than send a text message, and there are now attacks in the wild.

If you've got the stock firmware on your phone, and your phone is relatively recent, you should get the patch to fix this vulnerability automatically. (If, for example, your phone is running Lollipop, either because it came with it or automatically updated to it, you're probably good.)

But if you're running a custom ROM and don't have automatic updates enabled, you're going to want to check on whether you're running a current version that includes the Stagefright fix.

I'm a CyanogenMod user. If you're using the latest version of CyanogenMod 11.0, 12.0, or 12.1, then you've got the Stagefright fix.

I recently took the opportunity to upgrade my phone to the latest 11.x series to get the fix. And I figured while I was at it, why not upgrade to 12.1 and see if it's any good?

So I installed CyanogenMod 12.1, and everything looked like it was working fine at first -- when I was using it in my own house, on my wifi network. It wasn't until a day or two later that I realized my Sprint data connection wasn't working.

It took rather more searching than it should have, but it turns out there's an easy solution (albeit an annoying one if you've already got your phone set up the way you want it, because it involves wiping it to factory again).

mjs2011 at XDA Developers links to a sprint.zip file assembled by somebody named Motcher41, and gives these instructions for use:

The fix should be flashed during initial installation, so:

  1. Flash ROM
  2. Gapps
  3. SU (if necessary)
  4. Sprint APN Fix zip

I can confirm that you don't need to worry about setting up root before sprint.zip; it's fine if you do it afterward (my recovery, for example, sets up su right before reboot). However, I can confirm that you need to install sprint.zip after Gapps and before your first boot; if you install it before Gapps or after your first boot then it won't work.

Update 2015-09-30: After a few days my data connection quit working again. I rebooted to recovery, reinstalled sprint.zip, and it started working again. So never mind about not working if you install it after you've already booted the ROM; it will still work just as well. Unfortunately, "just as well" appears to mean "just for a few days"; I'm not sure what happened that changed my settings to make it stop working, but if I figure it out I'll update this post again.

You may notice that the linked thread is old (it's from November 2013) and was written in reference to pre-11.0 versions of CyanogenMod. However, I can confirm that it applies to the 12.x series too. This issue appears to be a regression; CM fixed it in version 11 but then broke it again in version 12.

So if you're a Sprint customer and you just installed CyanogenMod 12 on your phone and then discovered Sprint data was no longer working, this is what you're gonna wanna do to fix it.

Web Design Got Complicated

It's probably not surprising that rebuilding my website has gotten me thinking about web development.

The first six years I ran this site, I did it all by hand -- my own HTML, my own CSS, no scripting languages. I thought that CMS software was for pussies.

But ultimately, plain old HTML just doesn't scale. I conceded that when I started using b2evolution for my blog back in '06, and it's truer now than it was then.

You can poke around some of the old sections of the site a bit, the ones that haven't been updated significantly since the turn of the century -- KateStory's a good one, or the Features page (though I'd like to get at least the Features page up to date sooner than later, and maybe the KateStory one too, so maybe there'll be people reading this post well after those pages shed their 1990's style) -- and they get the job done. Breadcrumb navigation at the bottom of every section, leading you back to either the parent page or the main index.

But Jesus, you can only manually copy and paste "Back to Features / Back to Index" so many times.

And maintaining a years-long blog archive without a CMS to automate it for you? It gets old.

So, you want some automation? You're going to need a scripting language. That usually means PHP for server-side, and JavaScript for client-side.

I got to thinking the other day -- man, it's weird that you need extra toolsets to perform such common tasks as, say, reusing a navigation bar. It's weird that there's not some way just to write up a navigation bar and then write code, in HTML, no scripting required, to embed that common HTML block on the current page.

I thought this was a pretty smart observation.

For about three seconds.

At which point I realized I had just described fucking frames.

Course, the biggest problem with frames is that they weren't exactly what I'm describing. I'm talking about just an HTML snippet in some secondary file that you call from a primary file -- like an include in PHP.

That's not what frames were. Frames were complete fucking HTML pages -- <html>, <head>, <body> (or, more likely, <HTML>, <HEAD>, <BODY>, because in the old days we wrote HTML tags in all-caps) -- which is, most times, downright stupid and wasteful, and was much moreso in the days of 14.4 dialup. Even worse than the load time was the logistics -- if you used frames to build a website with a header, a footer, and a sidebar, you'd have a total of five separate web pages -- a content area, the three other sections, and some kind of main page that all of them were embedded into. This was a fucking nightmare for linking, both for the developer (who had to remember to set the target attribute on every single link, lest the page load in the navigation bar instead of the content area) and the end user (because the URL in the location bar would be the container page that called all the other pages, not the content page the user was currently looking at).

In a way, it's kinda weird that nobody's gone back to that well and tried to do it again, but do it right this time. Update the HTML spec to allow an HTML file to call a reusable snippet of HTML from another file, one that isn't a complete page.

Given all the concessions HTML5 has made to the modern Web, it's surprising that hasn't happened, even given how slowly it takes for a spec to be approved. We've got a <nav> tag, which is nice and all, but who the hell uses a <nav> tag without calling some kind of scripting language that automates code reuse? There really aren't that damn many reasons to use the <nav> tag for code that isn't going to be reused on multiple pages throughout a site.

And I dunno, I'm sure somebody's brought this up, maybe it's on the itinerary as a consideration for HTML6.

Which is another thing, really: the people making the decisions on the specs do not want the same things I want.

I liked XHTML. (In fact, lest this whole thing come off as a curmudgeonly damn-kids-get-off-my-lawn diatribe against new technologies and standards, I'd like to note that I was using XHTML Strict back when you pretty much had to be using a beta version of Phoenix -- before it was Firebird, before it was Firefox -- for it to render correctly.) I thought it was the future. I wish XHTML2 had taken off. HTML5 feels ugly and inconsistent by comparison, and, as legitimately goddamn useful as it is to be able to put something like data-reveal aria-hidden="true" in the middle of a tag's attributes, it always feels dirty somehow.

But I digress.

Point is, in 2006, I switched the blog from just plain old HTML and CSS, and added two more elements: a MySQL database to actually store all the shit, and a PHP CMS (originally b2evolution, later switched to WordPress).

And then came smartphones.

We live in a world now where every website has to be designed for multiple layouts at multiple resolutions. You wanna try doing that without using an existing library as a base? Try it for a few days. I guarantee you will no longer want that.

I think my resistance to picking up new libraries is that every time you do it, you cede a measure of control for the sake of convenience. I don't like ceding control. I like my website to do what the fuck I tell it to, not what some piece of software thinks I want it to.

I've spent the last decade arguing with blogging software to get it to quit doing stupid shit like turn my straight quotes into "smart" quotes and my double-hyphens into dashes. Just the other day, I built a page in WordPress and discovered that it replaced all my HTML comments with fucking empty paragraphs. Why would I want that? Why would anyone want that?! And that's after I put all the remove_filter code in my functions.php.

And that's the thing: WordPress isn't built for guys like me. Guys like me use it, extensively (it is the world's most popular CMS), because it automates a bunch of shit that we'd rather not have to deal with ourselves and because when we're done we can hand it off to end users so they can update their own site.

But I still write these posts in HTML. I want to define my own paragraph breaks, my own code tags, the difference between an <em> and a <cite> even though they look the same to an end user.

(And okay, I still use <em> and <strong> over <i> and <b>; there's really no explaining that except as a ridiculous affectation. I recently learned Markdown and used it to write a short story -- I'll come back to that at a later date -- and I could see switching to that. HTML really is too damn verbose.)

...and that was another lengthy digression.

So. Mobile design.

Bootstrap is the most commonly used toolkit for responsive websites. I've used it, it works well, but it's not my favorite idiom, and I've decided I prefer Zurb Foundation. So that's what I used to build the new site layout.

Except, of course, then you've got to get two dueling design kits to play nice to each other. Square the circle between WordPress and Foundation.

I started to build the new theme from scratch, and I'm glad I was only a few hours into that project when I discovered JointsWP, because that would have been one hell of a project.

JointsWP is poorly documented but has proven pretty easy to pick up anyway.

So. I've gone from HTML and CSS to HTML, CSS, and WordPress (HTML/CSS/PHP/MySQL), to HTML, CSS, WordPress, Foundation (HTML/SCSS/JavaScript, importing libraries including jQuery), and JointsWP (ditto plus PHP). And on top of that I'm using Git for version tracking, Gulp to process the SCSS, and Bower to download all the other scripts and toolkits I need and keep them updated.

So, going with Foundation (or Bootstrap, or whatever) as a standard toolkit, you get somebody else's codebase to start from. That comes with some elements that are a necessary evil (I hate fucking CSS resets, and think writing p { margin: 0; } is an abomination in the sight of God and Nature -- but if it means I can assume my site will look more or less correct in Mobile Safari without having to go out and buy an iPhone, then I guess I'll take it), and others that are actually pretty great -- I find SCSS to be really exciting, a huge saver of time and tedium, and it's hard to go back to vanilla CSS now that I've used it.

Course, with increasing complexity, you still hit those things that don't quite work right. One example I've found is that Foundation sets your placeholder text (the gray letters that appear in an "empty" input field) too light to be legible, and does not have a simple definition in _settings.scss to let you adjust it to darker. I've found a mixin that allows you to create such a definition pretty simply, but for some reason JointsWP doesn't like it (or maybe Gulp doesn't). So until I get around to finding a fix, the text stays light, and I'll just have to trust that you the user will be able to determine that the input field under the phrase "Search for:" and to the left of the big blue button that says "Search" is a search box.

I've also got loads of optimization still to do; part of that's going to mean figuring out what parts of Foundation's CSS and JS I'm not actually using and cutting them out of the calls, and part of it's probably going to mean minification.

Minification is one of those things I resisted for awhile but have come around on. It can be a real hassle for debugging, not being able to view a stylesheet or script in full, and it may not be practical just to save a few kilobytes (or a few dozen, rarely a few hundred) -- but on the other hand, well, it's not so different from compiling source code to binary; the end result is still that you take something human-readable and turn it into something much less human-readable.

And of course now that I'm using a preprocessor, my CSS file isn't my real source code anyway; it's already the result of taking my code, feeding it through an interpreter, and outputting something that is not my code. If you want to look at the stylesheet for this site, you want to look at the SCSS file anyway (it's on Github), not the CSS file. And if I'm already telling people "Look at the SCSS file, not the CSS file," then what's the harm in minifying the CSS file and making it harder for people to read?

For now -- prior to removing unnecessary code calls and minifying everything -- I feel like the site design's a lot more bloated than it needs to be. And even once I slim it down, there are going to be some compromises that go against my sensibilities -- for example, when you loaded this page, you loaded two separate navigation systems, the desktop version (top navigation and sidebar) and the mobile version (just a sidebar, which contains many of the same elements as the topnav and sidebar from the desktop version but is not exactly the same), even though you can only see one of them. That redundancy makes me wince a little bit, but ultimately I think it's the best and simplest way of doing it. Sometimes, good design does require some redundancy.

All that to say -- man, there have been a lot of changes to web design in the last twenty years. And while there are trends I really don't like (if I never have to build another slideshow it'll be too soon; gradients are usually dumb and pointless; and the trend of making visited links the same color as unvisited ones feels like a step backward into 1995), there are also a lot that I've eventually warmed up to, or at least accepted as something I've gotta deal with.

Anyway. Welcome to the new corporate-sellout.com.

And one more thing about the site before I go: it's probably worth noting that this site is different from the other sites I build, because it's mine. Its primary audience is me. I like having an audience, but frankly I'm always a little (pleasantly) surprised whenever anyone actually tells me they enjoyed something I put on this site.

Because this site isn't one of my professional sites. I didn't build it for a client. It's not my portfolio site, which I built to attract clients. This one? It's for me. As should be clear from this rambling, 2200-word stream-of-consciousness post about the technical ins and outs of web design, as it applies specifically to me and to this site.

Frankly I'm always surprised when anyone actually reads anything like this.

Job Spammers are the Worst

I'm looking for work right now.

So I've got a current resume posted publicly up on CareerBuilder.

And oh God, the spam that brings.

It's kind of amazing how many hiring agencies seem to have taken a look at the scammers who sell penis pills and decided, "Yeah, that looks like a pretty good business strategy."

I'm inundated, every day, with postings for jobs that aren't even in my state. I've gotten ten of them this week alone (and one phone call), and it's only Wednesday morning.

Most of them seem to be coming through one single distributor, or at least one single software kit -- because they follow the same format, and if you click Unsubscribe, all the Unsubscribe pages look exactly the same except for the logo.

Needless to say, they do not actually honor the unsubscribe requests. These are spammers we're talking about.

Of course, the big problem here is that unlike the spambots selling Cialis, I can't just mark these as spam and rely on Bayesian filters to sort the wheat from the chaff -- because aside from the location, these postings are indistinguishable from real job posting E-Mails, of the sort I want and need, because I am trying to find a job. Job spammers have an in that other spammers don't: they're advertising something I actually want, they're just advertising it in a place I don't want it. So I can't filter out an entire class of E-Mails, because the risk of false positives is far too high.

Which leaves me relying on filtering by domain name. Which, as anybody knows, is unreliable Stone Age Whac-a-Mole shit, because spammers use all the domain names they can get their mitts on.

Still, it's better than nothing, and I'll be putting a list of the spam domains I've filtered so far at the end of this post -- maybe it'll be of some help to some other folks out there looking for work. And maybe it'll give these agencies a little bad publicity.

But first, here's a story about the absolute worst, slimiest job spam I've gotten to date.

It's from an organization called Strategic Staffing Solutions, which started out by straight-up brazenly lying to me. Here's a portion of the E-Mail I got, with the rep's last name and E-Mail redacted -- I don't want to rain down Internet mob justice on anybody, even if they are engaging in sleazy tactics; I just want to name and shame the company that encourages this type of behavior.

From: Adam [redacted] <[redacted]@strategicstaff.com>
Subject: data scientist - MO
01/26/2015 02:17 PM

Hello Thad Boyd,

Please contact me as I have many job opportunities to discuss.

We have 24 locations within the USA.

I have called your phone number about your resume. The phone number has been disconnected.

Would you be interested in this job position? Please send me your resume.

Here are two job orders:

What followed were two job listings that have absolutely nothing to do with my education, training, or job experience.

So, straight into the circular file it went.

And then I thought, you know what? No. That line about trying to call me and my phone being disconnected was low. That's just a gross way to start any kind of relationship.

So I replied to the guy, and decided to press him on the "Your phone has been disconnected" lie.

From: Thad Boyd <[redacted]>
Subject: Re: data scientist - MO
01/27/2015 08:45 AM

Hi Adam,

I've had the same phone number for ten years, and haven't had any trouble receiving calls that I'm aware of. What number were you trying to call, and where did you get it?

He, of course, completely ignored my question, and responded with this boilerplate:

From: Adam [redacted] <[redacted]@strategicstaff.com>
Subject: Re: data scientist - MO
01/27/2015 09:55 AM

Hello Thad,

Please send me your resume.
Are you actively seeking work?

Please make use of Central Sourcing@STRATEGIC, as they can accelerate your recruiting.

I decided to press the issue one more time:

From: Thad Boyd <[redacted]>
Subject: Re: data scientist - MO
01/29/2015 09:52 AM

Hi Adam,

Yes, I'm actively seeking work.

Where did you say you got my contact details, and what phone number were you trying to call? I'd like to know if there's something wrong with my phone service. My grandfather is in the hospital right now and I need to know that people can reach me.

(And since he pretended not to notice my question about the phone, I pretended not to notice he'd asked for my resume.)

That last part is true, by the way -- Grandpa's going to be okay but he is currently in the hospital. I brought this up to make a point: lying to somebody about his phone being disconnected has consequences. If I had been gullible enough to believe his lie, I could have wound up wasting a good chunk of my day on the phone with Sprint, trying to figure out what was wrong with my phone service, and worrying all the time that I was missing important calls about a family member's health.

Lying to somebody like that -- what the hell is even the point? You think you're going to build a rapport with me by starting our relationship off by lying to me? Specifically, lying about something that could cause me a considerable amount of stress if I believed you? And how long do you think you can keep somebody believing the lie when you clearly have never even looked at his resume?

Does this actually work often enough to keep Strategic Staffing Solutions in business?

I sent that E-Mail out on the 29th. It's been four business days and I think it's a pretty safe bet that Adam's not going to be getting back to me. Not so much as a "Look, I'm sorry, they make us say that, there's no problem with your phone and I hope your grandpa gets better; is there any way I can still help you?" When faced with the potential consequences of his lie, he didn't take the thirty seconds it would have taken to come clean and apologize to me. He just chalked me up as a loss and moved on to the next sucker.

So I'm pretty comfortable in saying fuck Strategic Staffing Solutions, fuck their sleazy, dishonest recruitment tactics, and fuck the horse they rode in on. If you do business with Strategic Staffing Solutions, know that you are doing business with spammers and liars -- and that if they were so cavalier about lying to me, they're probably going to be more than happy to lie to you too.

Finally, here's a list of domains that have sent me job spam, and I'll probably add to it as time goes on. Please feel free to add them to your own spam filters. And hey, if this creates some negative word association for these domains on Google, I'd be pretty okay with that.

  • strategicstaff.com
  • enterprisesolutioninc.com
  • net2source.com
  • colcon.com
  • pyramidci.com
  • ittblazers.com
  • artechinfo.com
  • usgrpinc.com
  • diverselynx.com
  • axelon.com
  • h3-technologies.com
  • mondo.com
  • simplion.com
  • genuent.net
  • abacusservice.com
  • compnova.com
  • spectraforce.com
  • syscomtechinc.com
  • iit-inc.com
  • eteaminc.com
  • project1.com
  • globalsyst.com
  • ustsmail.com
  • ustechsolutionsinc.com
  • rconnectllc.com
  • lorventech.com
  • talentburst.com
  • softpath.net
  • waddellcareers.com
  • first-tek.com
  • quantitativesystems.com
  • advantageresourcing.com
  • gtt-it.com
  • mamsys.com
  • enterprise-logic.com
  • diversant.com
  • fortek.com
  • stemxpert.com
  • panzersolutions.com
  • opensystemstech.com
  • itstaffinc.com
  • princetoninformation.com
  • rjtcompuquest.com
  • greenlightstaff.com
  • judge.com
  • techdigitalcorp.com
  • ttiofusa.com

Microsoft Doesn't Want My Business. That Can Be Arranged.

So in case you haven't been keeping score, apparently the next version of the Xbox will require an always-on Internet connection, even for single-player games.

As you might expect, some people are unhappy about this.

Microsoft's Adam Orth knows just how to treat concerned customers: by insulting and mocking them with disingenuous analogies.

Image: Adam Orth's Twitter feed, insulting his customers' intelligence and his own

Now, one of three things is true:

  1. Adam Orth is stupid.
  2. Adam Orth thinks you're stupid.
  3. Both.

I shouldn't even have to fucking explain this, but here goes anyway:

A video game console that doesn't work without an Internet connection is not analogous to a vacuum cleaner that doesn't work without electricity or a cellular telephone that doesn't work without cellular service.

Because, you see, a vacuum cleaner, by its nature, requires electricity to function. (Technically some vacuum cleaners get that electricity from batteries, but keep in mind, Orth's analogy is very very stupid.)

A cellular telephone requires cellular service to function.

You see where I'm going with this?

A video game console does not require an Internet connection to function.

Now, some games might. Complaining that, say, World of Warcraft requires an Internet connection would indeed be comparable to complaining that a vacuum requires a current and a cellular telephone requires cellular telephone service.

But -- fun fact! -- many video games are single-player.

Refusing to buy a video game console that requires an always-on Internet connection is not analogous to refusing to buy a vacuum cleaner that requires an electrical current.

Refusing to buy a video game console that requires an always-on Internet connection is analogous to refusing to buy a vacuum cleaner that requires an always-on Internet connection.

ownCloud

My post on Unison remains one of the most popular things on this site. (The FF7 Trilogy remain my most popular posts, the ROM Collection Browser post is far and away the most popular hit on the site this month, and a number of people seem confused, as I was, by Netflix's reorganization of Doctor Who -- but Unison's still way up there.)

Well, I rebuilt my computer a few months ago, and I've opted not to go back to Unison. The main reason is that I don't just have Windows/Linux/OSX machines in the house now -- I've got a phone and a tablet both running Android now, and I'd very much like to be able to sync to them, too.

(Yes, okay, so Android is also Linux; good observation, gold star. It is technically possible to run Unison on Android. It is also, as far as I can discern, as big a pain in the ass as you would expect.)

I've decided to take a crack at ownCloud, and set my overworked G4 Mac Mini up as a server. It was a quick, easy setup, and a lot less fiddly than Unison (though it took a little bit of fucking around on the command line to enable SSL), but it's got its tradeoffs -- oddly, near as I can tell the desktop client can only set directories to sync, not individual files, while the Android client can only set individual files to sync, not entire directories.

And speaking of syncing with the Android app, it took me a day to figure out how to get it to sync in the first damn place. The sync toggle is under the system Settings menu, not, for some reason, anywhere in the app's interface, and it turns out that in order to set a file to sync, you have to upload or download it first, and then tap it in the ownCloud browser, and then there's a "Keep file up to date" checkbox. It's not exactly what you'd call discoverable, and the closest thing I can find to documentation is a damn YouTube video. (Can we talk for a minute about tutorials that are only available as videos? For my money, that trend fucking sucks. I mean, videos are great for some things, like showing you how to take apart a piece of equipment, or shave, or otherwise do something that's easier to watch than read about -- but much of the time, step-by-step instructions with the occasional illustration is a far superior method of walking someone through how to do a thing.)

So, not quite perfect. And there are some other pitfalls -- the filebrowser in the Android app can't seem to access the directory with my World of Goo save to sync it, SNESoid save files use a different extension than desktop SNES9X...plenty of rough edges that aren't actually ownCloud's fault but the fault of developers who didn't consider that users would want to sync save files across multiple systems. (It looks like you might be able to sync a file under a different name on the Android client than on the server; I'll look into that but I'm also thinking of switching from SNESoid to SNES9X EX on my phone and EX+ on my tablet. So far it looks like it's a lot more flexible than SNESoid, and while EX+ is too burly for my phone, EX runs all right once I turn off graphics filters, set scaling to integer-only, and turn on the GPU Sync Hack. Save states aren't compatible between versions, but of course save RAM is. As for World of Goo...maybe I can whip something up with symlinks or something; I'll look into it.)

And it's a pity there's no way to set up an automated wireless sync with my PSP.