Pure *buntu is now a Python script

For years, I've been creating pure *buntu tutorials with commands to remove metapackage dependencies with almost every new Ubuntu release.

I figured I should probably script it to save myself some trouble. It's a Python script that just needs apt-rdepends and then will generate the list of packages to remove. Check it out!

purebuntu

Exploring nuance in the Talia Jane / Yelp-Eat24 drama

Recently, Talia Jane's An Open Letter To My CEO post on Medium has stirred a lot of emotions on the blogosphere (in other Medium posts, in the Medium comments on her original post) and on Twitter.

There seems to be a pretty sharp divide in how people react to the piece. On the one side, you have the "You're an entitled Millennial who made bad choices, and now you're whining? When I was your age, I worked five jobs and walked up hill both ways to work. Deal with it!" reaction. On the other side, you have the "This is absolutely horrible. I can't believe you went through this. Let me donate to your right away" reaction. And I haven't seen a lot of nuance in the reactions yet.

Just as with Angry Asian Trademarks from last year, I'm really trying to see both sides of the issue.

The English Major

Some of the commentary I've read on Ms. Jane's piece has been along the lines of "Well, you were an English major. You're an idiot if you think you can live off of that. Why didn't you pick a more practical major?" Thing is—there is nothing wrong with majoring in something impractical. Some of the best colleges are liberal arts schools in which the whole point is to major in something impractical. I went to a liberal arts school and majored in English. I didn't expect to make a lot of money. Very few English majors do. I haven't even seen Avenue Q, but I know of What do you Do with a B.A. in English?/ It Sucks to be Me, and I'm not the only one.

I ended up with an English major planning to be a teacher. I knew other English majors who wanted to go into academia or publishing or fiction-writing or journalism. None of those people imagined that being an English major would lead to raking in the big bucks. We did, however, want a living wage. We wanted to be able to pay our rent and eat food. There is (and should be) a middle ground between millionaire status and abject poverty.

Housing and Rent

The primary criticisms of Jane's piece with regard to housing are two-fold:

  1. She wants to move to San Francisco to be close to her dad (since we’ve never gotten to have much of a relationship), but she can't live with him to save money?
  2. She pays $1245 for an apartment far away from work, because that's the cheapest apartment she can get that's the closest (even though it's far from work), but there's no indication that she's sharing the apartment with roommates to save on rent.

Giving Ms. Jane the benefit of the doubt as much as I can, it's very possible that, because she and her dad haven't had much of a relationship, she didn't feel super comfortable asking to stay with him. I think the idea was that previously they didn't have much of a relationship, but her hope was that by living nearby she could foster one with him. Also, she says she wants to be close to her dad, but we don't know where exactly in the Bay Area her dad lives. If he lives in Milpitas, Danville, or Petaluma, then living with him doesn't really help her commute to San Francisco easily/feasibly.

The roommate thing seems to be a far more legitimate criticism. I get why you might not want to live with a roommate, but if you're getting paid minimum wage in San Francisco, sharing housing seems the absolute obvious thing to do to reduce rent. Instead of paying $1245 to live far away, Ms. Jane could be paying $900 to rent a room in a nice house with three or four other people. It really isn't clear from her piece why she didn't at least consider that possibility before rejecting it.

That's a Lot of Rice

In her piece, Ms. Jane says

I haven’t bought groceries since I started this job. Not because I’m lazy, but because I got this ten pound bag of rice before I moved here and my meals at home (including the one I’m having as I write this) consist, by and large, of that. Because I can’t afford to buy groceries. Bread is a luxury to me, even though you’ve got a whole fridge full of it on the 8th floor.
In response, someone has created a site called "That's a Lot of Rice" - Talia Jane debunked that shows photos from Ms. Jane's Instagram account (these photos were also cross-posted on her Twitter account) that involve expensive meals, elaborately home-cooked meals or baked goods, and just generally expensive random stuff.

I had mixed feelings about the debunking site. On the one hand, I get it. She's making it sound as if she's starving and has been living on rice alone. Maybe she's a fraud.

At the same time, there are a few things to consider here:

  • The shaming "See what pictures of food you posted?" exposé reminds me a bit of the extra scrutiny people get when using food stamps for luxury items. The thing is—people are human. Even when you're poor, you want to indulge every now and then. Did you read Charlie and the Chocolate Factory and think Charlie was irresponsible for wasting money on an unhealthy-for-him chocolate bar? You also have to consider that people who are stressed out about money don't always make the best decisions. It's far easier to be prudent about your spending, ironically, when you don't have as strong a need to be prudent.
  • We don't know the exact context of these photos. In the social media age we live in now, there's a strong pressure (I believe especially among younger folks) to make it seem in your social media presence that you're always doing fun things or living a rich (doesn't have to be money) experience. It's honestly kind of a downer to post to your Instagram every day "Another serving from my ten-pound bag of rice. Yum!" Maybe the Lush product was an in-store sample. Maybe the baking was part of a baking party with friends. Maybe a richer friend of hers (who works as a software engineer or technical writer) treated her to a nice breakfast, which she usually doesn't get.
  • She says her meals at home consist, by and large, of [rice]. She didn't say "I exclusively eat rice and absolutely nothing else. When friends want to be nice and treat me to a meal, I always refuse, saying 'No, I must appear dirt poor at all times!'"

Sure, I think in her actual piece, she should have put more nuance in (instead of me, a total stranger, having to fill in the blanks with nuance after the fact). Again, if you're worried about money, feeling stressed out about it, and really angry... I don't think you're going to go for nuance. She may have, in fact, exaggerated. That doesn't mean she is a total fraud necessarily.

CVS

One story Ms. Jane recounts involves going to a CVS and an employee overhearing a conversation of hers and, unsolicited, giving her $6 of his own money. Some people have chided her for being condescending in consider the CVS employee beneath her somehow. I read the passage over again, and I'm not seeing that at all.

This is how she concludes that paragraph:

Did you know that after getting hired back in August, I’m still being trained for the same position I’ve got? But Marcus at CVS has six dollars in his wallet, and I’m picking up coins on the street trying to figure out how I’ll be able to pay him back.
Not seeing the condescension there.

Health/Dental Benefits and Commute

Some people have criticized Ms. Lane for complaining, even though she had full health coverage at Yelp (except for $20 co-pays) or for not knowing that her company probably had some kind of pre-tax commuter program for BART.

On this front, I'm a bit more on her side. It's awful that many workers in the U.S. have not-so-great (but technically still ACA-compliant) coverage for healthcare at their workplaces. To imply that means she should be grateful for decent coverage even though she's poor... I don't buy that. (Of course, I'm also a bleeding-heart liberal who believes that America should have single-payer health care instead of merely "Obamacare.")

And I remember being 25 and have very little money. I didn't fully understand pre-tax stuff and how it could benefit me and my spouse. I didn't get that money I was putting aside was money I would be spending anyway, and I would actually (with flexible spending or with pre-tax commuter) end up spending less from my paycheck. All I could think (and I'm guessing Ms. Lane thought the same thing) was "My paycheck is already so small—you want me to take more out of it before it hits my checking account?"

Per hour after taxes?

I've read some criticisms of Ms. Lane's piece that point to her saying I make $8.15 an hour after taxes as disingenuous, because it's making it sound as if she's making less than she really was (the pre-tax minimum wage of $12.25/hour). The context in which it comes up, though, is in talking about how much she has to spend on transportation and gas/electric. When you have to spend money on actual items, you are most likely focusing on the spending relative to the amount that's in your checking account—that is, your post-tax (take-home) pay.

PayPal, Venmo, Square Cash

I'm not sure what to think on the plea for donations at the end of her post. Before she wrote the post, she didn't know she'd be fired from Yelp. The responses to her post seem to indicate that at least some people donated to her. I don't know how many people donated or how much they each donated on average. Now that she's lost her job, even with a few thousand dollars, that'll probably last her a month or so.

I'm not tripping too much on the donation front. No one is coercing you into donating. I did not donate to her, I don't plan to, and I don't feel pressured to. She can certainly ask.

Career Impatience and Millennial "Entitlement"?

Up until this point, I may be coming across as a Talia Jane apologist. I tend to want to empathize before judging. This bit I just don't get, though:

I felt it was fair that I start out working in the customer support section of Yelp/Eat24 before I’d be qualified to transfer to media. Then, after I had moved and got firmly stuck in this apartment with this debt, I was told I’d have to work in support for an entire year before I would be able to move to a different department.
[Emphasis not added]

I'm scratching my head on this one, along with the rest of the peanut gallery. You took a customer support job (the kind of job in which you get hired the same day you interview), and you expected to be transferred to another department in less than a year? Maybe I'm just old school, but I think you generally put in your dues when you're in your early and mid twenties before you start zipping up and around career-wise, unless you happen to be a unicorn-successful tech entrepreneur.

I certainly don't judge Millennials as a whole. Most Millennials I've worked with have been hard-working and level-headed. At the same time, I can't think of any Gen X'er friends (or former co-workers) who, at 25, were appalled at having to fetch coffee or make photocopies (or do customer support) for more than a year before moving on to something more interesting career-wise.

I'm not a curmudgeon, though. I do think there is a balance to be had. If we can get to a point where people's lives can be more rewarding, we shouldn't make people's lives intentionally difficult just because life was difficult for us when we were younger. At the same time, nobody should expect and demand that life be less difficult when those who came before didn't get to magically jump ahead.

Talia Jane is not representative of Millennials or the attitudes (yes, plural) they possess. There is definitely some entitlement in the piece, and I do think that's where a lot of the over-the-top backlash is coming from... maybe slightly justified but still over the top.

Larger issues about affordability and a living wage

Some people have suggested this may be less about Ms. Jane's specific case and more about Bay Area (lack of) affordability in general. I don't think so. That is a real problem. Middle-class and working-class people (and—I hate to say it—even relatively well-off tech workers) are struggling to keep up with the rents and housing prices in the Bay Area. But those real debates are happening in the streets, at dinner conversations, in letters to The San Francisco Chronicle, on Twitter and Facebook. Talia Jane's piece doesn't really bring a whole lot more to it. We all know there isn't enough housing and that minimum wage is tough to live on in San Francisco.

What's next for Talia Jane?

If I were Talia, I'd take some of the criticism to heart (Yes, I knew I wouldn't be paid a lot, and yes, I know I signed a lease for an apartment I couldn't afford, and I should have gotten a roommate), and I'd be a bit nervous (I just got fired. Who's going to hire me again?), but I'd also be excited. If her goal was to get more Twitter followers, she certainly got them. You can call her a troll if you want to be uber-cynical about it, but she certainly got attention, and—since she wants to be a writer—now would be the perfect time to strategize about how to leverage all this attention into an actual career.

How I fixed the lag issue on my Nexus 5x

If you Google Nexus 5x lag, you will see many users complaining about lag on the Nexus 5x. If you follow the threads, some people will complain about lag. Others will say they've experienced no lag. Some seem to think it has to do with faulty units (vs. non-faulty units). Others seem to think it has to do with not-yet-optimized-for-Marshmallow apps.

I, too, experienced the lag, but I chalked it up to Marshmallow still needing some kinks ironed out or the difference in performance between an encrypted Android vs. an unencrypted one. It also wasn't horribly debilitating a lag—it was just slightly annoying. It would be an extra second switching apps or an extra second for an app to load after being selected.

I tried uninstalling some apps I thought might be problematic. I also tried clearing the cache partition (that would make things a little better for maybe an hour or so, but then the lag would return).

Finally, I did what I really didn't want to do: I did a factory reset. I backed up all my data to my computer and did a full wipe of all my phone's contents. Now this, I think, is the most important step: when setting up the phone, I chose not to restore backed up data from Google's servers and just do a fresh, clean setup. It was annoying, of course, because I had to go through all my settings and tweak them and manually download all my apps again, but it was totally worth it. Now there's absolutely zero lag. The phone performs just as well as my old Moto X 2013.

I don't know that this is the definitive solution, but it worked for me. So if you're one of those Nexus 5x users who's experiencing the dreaded lag, take the 3-4 hours to back up your data locally, do a factory reset, do not restore backed-up data associated with your Google account, then re-download your apps, restore your local backup, and re-configure everything again fresh. You, too, may find it totally worth the trouble.

Star Wars, Episode VII success not a surprise

What is with Entertainment Weekly?:

So now what? Just as it was hard to predict The Force Awakens’ opening weekend, it’s also hard to predict what it’ll do from here. Because of the holidays, movies opening in December usually see a smaller debut but much, much bigger multiples. A December opening like this is unheard of (the previous December record was held by The Hobbit: An Unexpected Journey, which debuted to $84.6 million). But movies like Avatar, which only opened to $77 million in 2009, went on to make almost $750 million domestically, making it the biggest movie of all time. We’ll have to see what happens over the next few weeks and whether The Force Awakens can not only score a big opening, but a big final total, too. [ Emphasis added ]

Are they kidding? It's not hard to predict. The pre-sale tickets sold out immediately. Everyone I knew who was a Star Wars fan (and even those who don't identify that way) was itching to see the film. Right now—during opening weekend—I have a lot of friends who have seen the film multiple times and have plans to see it more times still.

After three horrible prequels (yes, they were horrible!), people are looking for just at least a passably average sequel now, and they got something half-way decent (some people are saying amazing, but I'll respectfully disagree), so they're going to town. The Force Awakens will continue to break records. We don't have to see if it will "score... a big final total." We just have to wait to see how big the big final total is.

Manually installing an OTA update for the Nexus 5x

In theory, your device should automatically check for an OTA (over-the-air) update, download it in the background, and then prompt you to install the update. No matter how much I manually checked, my device kept insisting it was up to date (I know Google likes to do staggered automatic rollouts, but it's just annoying when I manually initiate a check and Google still insists on not giving me the update).

These are just slightly more detailed step-by-step instructions based on Android 6.0.1 Marshmallow OTA Links for Sideloading. This GitHub page has a list of OTA updates for Nexus devices. Find the download for your device. I'm using my device (Nexus 5x) as an example. In theory, the instructions should be very similar for other Nexus devices.

Find your device's build number

There are two different 6.0 builds for the Nexus 5x (MDB08L and MDB08M). To find out which one was mine, I had to go to Settings > About phone > Build number to find out my build was MDB08L.

For the U.S. version of the Nexus 5x, the upgrade is MHC19J from MMB29Q.

Enable USB debugging

While you're in the About phone section, tap the Build number and keep tapping it until you get a notification that developer options are now enabled. Then go to Settings > Developer options and scroll down until you get to USB debugging and tap the toggle next to it to enable it.

Get the Android SDK

Google used to have an easy-to-find SDK download link. Now it points you to Android Studio instead, which you can use to install the SDK using SDK Manager if you go to Tools > Android > SDK Manager. You may, somewhere on the Android developer website be able to track down a standalone SDK download if you dig around enough.

It took me a while to find exactly where the SDK installed to. Eventually, I found it it was installed to /Users/username/Library/Android/sdk/platform-tools (I'm using a Mac—it's probably a similar path for Windows, maybe in /Users/username/AppData?).

Do the actual flashing of the OTA

Disclaimer: Uh, these instructions worked for me, but absolutely this is at your own risk. I'm not at all responsible (nor is the person who wrote the tutorial on which this is based) for any damage you might do to your device.

Open up a terminal (again, I'm using a Mac, so it's in /Applications/Utilities/Terminal.app; if you're using Windows, find cmd.exe and launch that up instead).

At this point, plug your device into your computer using a USB cable. You may have to switch to PTP mode to get it to work.

Change directories to where adb is:

cd /Users/username/Library/Android/sdk/platform-tools
Substitute in your actual username for username. And don't forget you can use the Tab key to autocomplete directory names instead of manually typing out the full path.

Make sure your device shows up in the list of devices:

./adb devices

Reboot to the bootloader:

./adb reboot bootloader
Use the volume down key to focus on Recovery. Once that's in focus, press the power button to select it.

You'll see what looks like an error and a dead Android lying on its back. Press the volume up key and power buttons at the same time until you get to a list of menu options.

Use the volume down key until you get Apply update from ADB into focus. Then press the power button to select it.

You should then see a message that says Now send the package you want to apply to the device with "adb sideload ."

Back on your computer, enter a command similar to this one (again, Tab completion is your friend—you don't want to manually retype the full filename of the OTA update you downloaded:

./adb sideload ~/Downloads/f67821b18f5a3bc6552039f0997fc9511f05c2c3.signed-bullhead-MMB29K-from-MDB08L.zip

You'll then see output similar to this in the terminal on your computer:

loading:
'/Users/username/Downloads/f67821b18f5a3bc6552039f0997fc9511f05c2c3.signed-serving:
'/Users/username/Downloads/f67821b18f5a3bc6552039f0997fc9511f05c2c3.signed-serving:
'/Users/username/Downloads/f67821b18f5a3bc6552039f0997fc9511f05c2c3.signed-serving:
'/Users/username/Downloads/f67821b18f5a3bc6552039f0997fc9511f05c2c3.signed-serving:
''/Users/username/Downloads/f67821b18f5a3bc6552039f0997fc9511f05c2c3.signed-Total xfer: 2.12x
with little progress percentages going up along the way.

Meanwhile, on your phone/Android device, you'll see output similar to this:

Finding update package...
Opening update package...
Verifying update package...
Installing update...
Source: google/bullhead/bullhead:6.0/MMB29Q/#######:user/release-keys
Target: google/bullhead/bullhead:6.0.1/MHC19J/#######:user/release-keys
Verifying current system...
Verified system image...
Verified vendor image...
Patching system image after verification.
Verifying the updated system image...
Verified the updated system image.
Patching vendor image after verification.
Verifying the updated vendor image...
Verified the updated vendor image.
Patching the boot image...
Writing bootloader...
Patching radio...
script succeeded: result was [1.000000]

Install from ADB complete.

When that's done, use the volume up key to highlight Reboot system now and then press the power button to select it.

After your device reboots, you should see something like Android is upgrading...
Optimising app # of 66
.

That's it! Your update should now be installed.