Tag: Cellular Telephones

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.

Bloat

Tonight I wanted to print something.

For some fucking reason, this required me to download a 140MB "driver file" that appears to be composed primarily of videos, one of which tells me how to use my printer and the other is just a fucking animated HP logo.

In my personal and professional opinion, shit like that is completely inexcusable. There is no fucking reason why I should have to download 138MB of crap just so I can get at the 2MB driver file.

At least there was a feedback form at the bottom of the page. I filled it out! It was a lot like this post but with less cursing. (Although I did tell them that I am offended "as a programmer, as a customer, and as a guy with SHIT TO DO.")

Increased processing power and widespread high-speed Internet has made programmers lazy. (Though in the programmers' defense, this particular little call has "marketing department" written all over it.) On the plus side, the increasing prevalence of smartphones is forcing developers to think about smaller footprints, both in system requirements and bandwidth consumption. But unfortunately that's probably not going to convince anybody to make Windows device drivers smaller.

Dragon Quest 1&2 SFC

I've occasionally been poking through the Super Famicom remake of the original Dragon Quest on my cell phone -- you know, when I've had downtime and haven't had my PSP or DS or suchlike with me.

First of all: man, onscreen D-pads suck, even for games that require as little precision as DQ. I have to savestate-spam just to get around the outside wall of Rimuldar without accidentally walking out.

Second: there's so much that's wonky about the interface of this remake. The stupid little half-steps you take instead of moving a full tile at a time, the bizarre decision to stick the action button on X and leave the menu on A (something they stuck with on up through 7 on the PS1!)...frankly I'm almost inclined to tip the Game Boy remake as the superior version of the game despite its inferior graphics and sound, just on its smoother interface.

(Also I recall the GB version having a more charming translation. I probably snorted out loud in class when I took the Princess to an inn and the keeper remarked the next morning that we'd sure been up late last night.)

(Yeah, I played Dragon Quest in class for most of CSE122. If you'd ever tried to sit through a lecture with that instructor, you'd understand.)

Buggy Messes

I had some harsh words yesterday for the EaseUS software for Mac. Mainly, it constantly locked up and didn't do much of anything.

I'm not quite ready to let EaseUS off the hook just yet, but I'm seeing that same behavior in a lot of programs now. At this point I'm pretty confident that, in setting my Mac up to run like a Hackintosh, I have wound up with a system that has all the stability and reliability of a Hackintosh.

Regrettably, I'm having much the same problem with MIUI, which I installed on my phone the other day (as something to do while I waited for diags to run on my Windows 8 drive). It's slow and it crashes like a motherfucker. I really think the monthly release cycle is a pretty poor idea; what we've got is bleeding-edge code (in this case Jelly Bean running on a phone that was never meant to support it) instead of stable code.

Which is a pity because there's really a lot to love about MIUI. For starters, it's the most paranoid OS I've ever seen -- its security settings are granular as hell; it doesn't just tell you what data your program is going to have access to at install time, it defaults to warning you at access time, too -- and giving you the opportunity to refuse.

Trust the Chinese to be thorough about who's listening in on them.

It also comes with a lot of mostly-pretty-useful programs out of the box.

Except that weather program. The one that thinks I live in some place called Temperanceville (and that's not autocomplete on me typing in "Tempe", that's the location it automatically set itself to), consistently tells me I have no network connection even though I have a network connection, and can't be uninstalled. I don't like that one very much.

So I don't think I'll be sticking with MIUI. I guess the question is whether I should just restore CyanogenMod 7 from backup, or try some other ROM.

Decisions, decisions...

Setting Up MikG on an Evo 4G

As recently noted, I finally joined the twenty-first century and got me a smartphone. It's an HTC Evo 4G, purchased from friend and Brontoforumgoer TA, and I'm rather enjoying it. But it was a bit of a pain to set up, and, as I am wont to do when I find myself banging my head against the wall over a technical problem, I'm inclined to write up a little howto. (My #2 most popular post is the one about filesyncing with Unison. And because I know you'll ask, the #1 post is the one about FF7 mods.)

The first hurdle was that the phone was running Cyanogenmod. (So, first of all, it was already rooted. This is not a rooting guide; my phone was already rooted when I got it.) Now, from all appearances Cyanogenmod is great -- but what TA and I didn't know is that you can't activate your phone with Cyanogenmod on it.

The guy at the Sprint store suggested I unroot the phone and restore it to factory default. As I found out from a helpful thread on XDA Developers, you do not have to unroot your phone to activate it. You do have to flash it with a Sense-based ROM. (Sense, BTW, is HTC's UI.)

I found several recommendations for Sense ROMs, many outdated (and many of those unavailable for download since MegaUpload's been taken down). One that is recent and still available, and which I saw recommendations for all over the place: MikG.

Now, guides to flashing your Android ROM are legion (here's one from Android Authority), and recovery software varies, so the exact menu options may be different from one to the next. But here are the basics:

Download the MikG ROM.

Copy it to your phone's SD card.
I actually found that I couldn't mount my phone as an external drive on any of my computers when it was booted to Cyanogenmod for some reason; fortunately I was able to mount it when I booted to recovery mode -- see next step. Copying the zipfile straight to the sdcard root is probably the easiest way to go -- at any rate, don't unzip it.

Boot to Recovery Mode.
If your phone is already rooted and already has a custom ROM, like mine did, then you've most likely already got a recovery boot enabled. Shut your phone down, then power it back on, holding the Power and Vol- buttons. From here the touchscreen won't work; you'll only have access to the Power button and the Volume rocker. The rocker moves the cursor up and down, and the power button operates like the Enter key.

Back up your shit.
There should be an option to back up your system. Do this, because you're about to wipe everything out and you're going to want to be able to restore if anything goes wrong.

Wipe userdata, cache, and dalvik cache.
Seriously, this is a necessary step; do not skip it or it will fuck everything else up. Just don't do anything stupid like wipe your SD card in the bargain; you need that.

Flash the ROM from zip. That'd be the zipfile you copied to the card earlier.

Troubleshooting: Kubuntu lies. I just couldn't get the thing to flash; I kept getting errors. I found that the zip's checksum on the SD card didn't match the one on my computer, I copied and tried over and over again and even reformatted the card -- long story short, don't trust Kubuntu when it says the file has finished copying or when it says it's safe to remove the device. I don't think it's a KDE problem per se since I had the same problem using Nautilus, but at any rate -- start the filecopy and then go do something else for a little bit; give it more than ample time to copy. Just in case. I did the same thing with the unmount -- after I'd let enough time pass that I was sure the file had copied, I clicked Unmount and then waited awhile just to make sure that had happened cleanly. Patient waiting and the file finally copied correctly; MikG installed and was running.

But I still had to actually activate the thing.

Rather than take another trip to the local Sprint store (which would likely have been easier and taken less time, in hindsight), I did it through the Sprint website.

The first bit's easy enough: assuming you've already got a Sprint phone, you just deactivate that and tell them to move your number over to the new phone. You'll need to enter a serial (which you have to remove the battery from your Evo to get at), and they'll send you an E-Mail.

Follow the instructions in the E-Mail, not the ones on the website. They are not the same and the ones on the website are incomplete.

The E-Mail looks something like this (I've redacted my personal information):

You may need to enter the following information in your new phone to complete the activation process:
6-digit programming code: [...]
MDN (Phone number): [...]
MSID (IMSI): [...]

If you are programming a used phone, look in the manual programming instructions for your steps. If you don't find the instructions to program a used phone, follow the steps below to clear or reset your phone to its factory settings. Important note: This will remove all personal information, including texts, pictures, contacts, applications, etc.

To program a used phone:

  1. On the dial pad, press ##786 followed by an additional # symbol
  2. Follow any on-screen prompts to Reset your phone
  3. Enter the 6-digit code
  4. Select Reset
  5. Confirm any on-screen Reset to default messages
  6. After the reset, press ## followed by the 6-digit code, followed by an additional # symbol (Example: ##123456#) Note: The last # entered will not show on the display

It's easy enough when you do it like that; my problem was that I followed the guide on the website. Which didn't quite work right.

Anyhow, hopefully I've saved somebody somewhere some trouble -- maybe it'll be my new #2 most popular post.


So far I've stuck with MikG, for a couple reasons. One is that Sprint's data plan is ridiculously overpriced and I'm tempted to jump ship to Virgin Mobile or some other Sprint reseller -- and it'd be nice to still have a Sense ROM on there so I can activate.

But another is that I'm really kinda digging the design of Sense. It's fast, it's straightforward, most of the built-in widgets are actually useful and the ones that aren't are easy to remove, and if you had asked me if someone would be able to convincingly pull off a smooth, intuitive seven-workspace layout on a damn phone screen I would have told you you were out of your mind -- but damned if they didn't do exactly that.

I'm a tinkerer by nature, so I may not stick with it. Maybe I'll switch back to Cyanogenmod. Maybe I'll fuck around and install Ice Cream Sandwich or Jelly Bean -- I'm not really that concerned about watching Netflix on my phone or using the front-facing camera, and Sprint doesn't even have 4G in my state.

Food for thought, anyhow.