Ben Thompson Takes a Rational Look at Uber’s Recent Problems 

Ben Thompson:

On the flipside, I, for one, view Uber’s regulatory maneuvering in a much more positive light.

One of the great things about Ben is that you can depend on him to be against overt regulation and oppression of business. I’m glad to finally see someone say this.

Then this nugget:

Moreover, one of Uber’s other “scandals” — the fact that Kalanick asked Amit Singhal to step down as Senior Vice President of Engineering after not disclosing a sexual harassment claim at Google — reflected far worse on Google than Uber: if Singhal committed a fireable offense the search giant should have fired the man who rewrote their search engine; instead someone in the know dribbled out allegations that happened to damage a company they view as a threat.

Everyone’s talking about how horrible Uber is, but Uber isn’t alone in this.

And then:

The sad truth is that for too many this is the first case of sexual harassment they’ve cared about, not because of the victim, but because of the potential for taking Uber down.

Uber isn’t a perfect company. But the app is still on my iPhone and I continue to look forward to using it. Ben’s done a service to the community. He’s done the delicate job of analyzing the positive aspects of Uber without looking like an uncaring misogynist.

macOS 10.12.4 Beta (16E183b) Breaks GPG Keychain Signing in Tmux 

Today I upgraded to Beta 5 of macOS 10.12.4 and discovered that it breaks commit signing in tmux. If you’re using pinetry-mac and if you have commit.gpgsign set to true in your git config, then every time you make a commit, pinentry-mac is supposed to auto-supply the GPG passphrase from your keychain.1 What happens however with Beta 5 is that pinetry-mac doesn’t work specifically in tmux. It works in Terminal and iTerm just fine, but if you try to use tmux in either of those programs, it doesn’t work.

What are your options? You have a few.

First, you could revert using Beta 5 and go back to the latest stable version of macOS. I’m not going to do this because Night Shift on macOS beta has become indispensable for me. I use it 24x7.

The second option is that you could quit using tmux, but tmux is a must for me. This is a non-option.

The third option is that you could quit using pinetry-mac and just supply the password everytime. To do this, just modify the ~/.gnupg/gpg.conf file by removing this line:

no-tty

This would get laborious though, having to manually paste in the GPG passphrase every time.

The fourth option, the one I’m going with for now, is just disabling commit signing for now. Commit signing is very cool and I like the green “Verified” badge that comes with it, but it’s not a huge loss to no longer have this. Disabling commit signing is as easy as running this:

git config --global commit.gpgsign false

Update: here’s the fix.

  1. Of course, you have to supply your GPG passphrase to pinentry’s dialog window the first time you’re setting this up. ↩︎

Amazon Explains What Went Wrong with S3 on Tuesday 

Casey Newton, writing at The Verge:

On Tuesday morning, members of the S3 team were debugging the billing system. As part of that, the team needed to take a small number of servers offline. “Unfortunately, one of the inputs to the command was entered incorrectly and a larger set of servers was removed than intended,” Amazon said. “The servers that were inadvertently removed supported two other S3 subsystems.”

Someone enters the wrong command in Terminal, and next thing you know, entire websites are down and people can’t turn on their IoT lights in their house. That’s one powerful Terminal window.

On Apple Switching from Lightning to USB-C for iOS Devices

This morning I made a prediction on Twitter that this year’s new industrial design iPhone will have a USB-C port.1 To my thinking, it makes perfect sense that Apple would do this, and perfect nonsense that Apple would not do this. Let’s look at the timeline.

  • September 2012: Apple ships the iPhone 5 with Lightning.
  • August 2014: USB-C spec is finalized.
  • September 2016: Apple ships the iPhone 7 with no headphone jack.
  • September 2017: Prediction: Apple ships an iPhone with USB-C.

Here are some reasons for my prediction. First, Lightning existed only because USB-C wasn’t finalized. The timeframe at which Apple realized it needed to actively make steps towards ditching the 30-pin connector was likely around 2010, or early 2011 by the absolute latest. USB-C as a finalized spec was nowhere in sight - it had four more years to go. If USB-C as a finalized spec had existed in 2010 or 2011, Lightning would have never been needed. In other words, the one and only reason that Lightning made sense is now gone.

Second, moving to USB-C gets Apple closer to port consolidation and interchangeability. Lightning is exclusive to iOS, which means it’s not that helpful compared to a universal option. Right now, if you buy the newest MacBook Pro and the newest iPhone, you cannot connect the two without buying an adopter. One easy fix for this, without Apple changing from Lightning to USB-C, would be for every new iPhone to come with a Lightning to USB-C cable as well as its current Lightning to USB-A cable. That’s a very specific cable though. It would be more useful and interchangeable if the iPhone came with a USB-C to USB-C cable. The idea is that Apple slowly moves us to a world where everything is USB-C. Your laptop, external monitor, iPhone, and iPad all connect with USB-C. See how simple that is? No Lightning, Thunderbolt, or USB-A. Just USB-C, which is very small and can do everything that those others can do. This is a very Apple-like thing to do. It makes good sense. There’s no reason this can’t be the future, if Apple’s willing to be brave and face the criticism.

Third, if Apple was not planning on moving the iPhone and eventually iPad to USB-C, why would it have made the MacBook and 2016 MacBook Pro use USB-C instead of Lightning? It’s not like Apple’s customer base had tons of USB-C cables in use with preexisting Apple hardware. There would be no compelling reason for Apple’s laptops to use USB-C instead of Lightning unless the iPhone and iPad were eventually going to also move to USB-C.

What about reasons Apple would not want to do this? Let’s look at Gruber’s well thought reasons against it:

If Apple had any plans to switch from Lightning to USB-C, why wouldn’t they have switched last year with the iPhone 7, when they started making tens of millions of pairs of Lightning ear buds?

This is a fair point, but I think there’s explanation. First, the Lightning ear buds come with every iPhone. Every time you buy a new iPhone, you get new ear buds. If 2016’s earbuds were Lightning and 2017’s earbuds are USB-C, it’s not a huge setback from an Apple manufacturing and cost standpoint. From a user standpoint, it’s potentially frustrating that a year-old pair of earbuds would be incompatible with a 2017 iPhone, but that’s only going to bother you if you lose, give away, or break your 2017 earbuds and want to use your 2016 pair. Those things could happen but they’re fringe cases, and Apple doesn’t base its decisions on fringe cases.

This explanation still doesn’t address Gruber’s main question though: why wouldn’t they have switched last year with the iPhone 7? There’s a couple of reasons I can give. First, Apple didn’t want to have to change the industrial design of an iPhone that would otherwise look exactly the same as the iPhone 6S. Better to measure twice and cut once. Don’t force an industrial design change until an iPhone release that actually looks different and justifies the cost of retooling and a new incompatible body. Sure, this would mean there’d be a cost in designing 2016-exclusive earbuds, but that’d be substantially lower than the cost in tweaking the industrial design of the iPhone 7.

Another way of explaining it is this. The industrial design of a new iPhone is set in stone a minimum of 12 months before the release date, according to Gruber. Apple probably works on that new industrial design at least 6 months, probably closer to 12. This means that if Apple had wanted to introduce a USB-C iPhone in 2016, it would have needed to begin exploration of that by early 2015 at the latest. Perhaps even late 2014. The spec for USB-C had barely come out by then. There wasn’t time.

Either because of money or time constraints, or both, it just wasn’t feasible having USB-C in the iPhone 7.

Then there’s this bit:

My expectation has been that iPhones will never switch to USB-C — that Apple would stick with Lightning until they can do away with external ports entirely.

I’m not convinced that a day will come in which iPhones have zero external ports. To me, that makes about as much sense as having no physical power button. It’s technologically possible, but impracticable. There’s a good case to be made for not having more than one button or more than one port, but there’s also a good case for needing that one button and one port. The only universe where it’d make sense to completely remove the ports is a universe where: (1) wireless connectivity protocols have 100% uptime and zero possibility of interference or breakage (2) compiling code to an iPhone wirelessly is just as fast as compiling code with a hardwired connection. Maybe we’ll someday live in that world, but I don’t think it’s coming in the next decade. It’s ok to promote wireless with a fallback of wired, but to exclusively offer wireless is a disservice to developers and people who care about speed and reliability over aesthetic.

Then there’s the argument that the USB-C port is thicker than Lightning. That’s only barely true, and I don’t think it makes a difference. Maybe we’ll get to a point where the thickness of USB-C is actually a determining factor in smartphone thinness, but we’re quite a few millimeters away from that actually being a discussion. Either port would fit just fine in the iPhone 7, and presumably for this year’s iPhone too.

I’m with Federico:

I’m leaning towards USB-C everywhere […]

  1. Predictions are one thing that Twitter is good for, since its timestamps don’t lie. ↩︎

GitHub’s New Link Color 

  • Feb 7: GitHub donates $25,000 to a terrorist organization.
  • Feb 10: GitHub changes its nav to black.
  • March 1: GitHub changes its link to a terrible blue.

GitHub has been disappointing me lately.

Here’s Undeniable Proof that Twitter Really Is Suppressing Conservative Views 

Scott Adams:

I recently tweeted a link to my blog post that is unflattering to the proponents of climate science. I have 138,000 Twitter followers. My traffic from Twitter to my blog in a recent minute was only 14 people, while overall traffic from other sources was its usual robust self. For non-controversial topics, my Twitter-driven traffic for a tweet to my blog would be 200-300 per minute in the half-hour after a tweet. On this topic, it hovered between 10-14.

You can’t read this and then tell me with a straight that Twitter isn’t throttling Scott’s account. And you don’t have to agree with Scott’s political and social views in order to be disgusted with Twitter over this.

Is This Exploding MacBook Pro Story Real? 

Daniel Dourvaris, writing at Medium:

One afternoon as I was lying on my bed browsing the internet, my MacBook Pro suddenly turned off.

One afternoon is pretty generic. Which afternoon? You’re just now writing about it? What prompted you now, as opposed to pecking this out on your phone as soon as it occurred? Is this story time, or cataloging an actual event that really happened? Better yet, why didn’t you tweet about it on your Twitter account that you haven’t touched since 2011? Actually, your Stack Overflow and Github are pretty quiet too. You’re not the sort of person who writes on the web much, are you? Maybe your quietness explains the weirdness of this?

I turned it back on and within a few seconds there was weird hissing sound, followed by white smoke and thin flames coming out of from the back. […]

Ok.

After I had opened up all the windows in the house and cleared out the smoke, I removed the back plate to observe the damage and hopefully see if the hard disk had survived.

Wait. You cleared out the smoke and then how long did you wait? This makes it sound like you opened the laptop immediately after you opened the windows, and yet you “had to let it drop” because it was so hot and it was “almost an hour” before it cooled down. Which is it?

There’s no denying that the pictures in this article are real. But I’m having a hard time understanding how these pictures would look differently if the fire had been started externally, and a few things don’t make sense to me.1 There’s no mention of contacting Apple about this despite the numerous reader comments inquiring about it. Not only would not contacting Apple be very unnatural, it’d also be strange to say nothing about it in this article, and yet such is the case. And this whole thing is suspiciously close to last week’s iPhone explosion, as if it’s riding on its popularity wave. Also it’s curious that he was able to remove the backplate on his own. The whole thing’s lacking detail.

Maybe this story is completely real, but it’s not doing a very good job persuading me.2 Hat tip to Daring Fireball for the link.

  1. There have been many alleged occurrences of spontaneous human combustion but all of them have external explanations that are much more plausible. Same deal here? ↩︎

  2. An story as odd as this means one of two things: either someone’s a bad liar, or the truth is stranger than fiction and needs no explanation. I’m not ruling out the latter, but I’m not yet sold on it as the sole possibility either. ↩︎

SpaceX to Send Two Private Citizens Around the Moon 

SpaceX:

We are excited to announce that SpaceX has been approached to fly two private citizens on a trip around the moon late next year. They have already paid a significant deposit to do a moon mission. Like the Apollo astronauts before them, these individuals will travel into space carrying the hopes and dreams of all humankind, driven by the universal human spirit of exploration.

Late next year is a long way away, but at some point the identity of these two travelers is bound to leak out.

Basic Introduction to UIScrollView in Xcode 8.2

My work with Quillify’s native iPhone app has plunged me into Swift and Xcode. I found auto constraints in UISCrollView to be non-obvious to a beginner such as myself, so I made a YouTube screencast of it once I figured it out.

Smash Hit 

I very rarely play iOS games but Smash Hit by Mediocre AB is addicting and I highly recommend it. On the premium app I have 5-shot rounds up to level 8, with 89 balls. It’s the same company that came out with PinOut! late last year. Check it out.

An Easy Way to Change Your RSS Guid Schema without Flooding Readers and Twitter with Old Posts

For a while now, I’ve been advocating having www in domains. I also believe in using HTTPS. Also I’ve fairly recently come to see the importance of having dates in your URLs.

A challenge comes when you’re trying to make such changes to your site’s permalink structure, however. Assuming you have your post’s full URL as the guid in your RSS (and if you’re not then you’re doing it wrong1), it means that scrapers will incorrectly think that all items in your XML feed are new.

A specific example should make this clear. Let’s say you decide to go from HTTP to HTTPS. You update your site URL in your site’s core configuration, and this update perpetuates across the board, including your RSS. Your feed’s guid entries went from this:

<guid isPermaLink="true">http://example.com/2017/02/22/some-post/</guid>

To this:

<guid isPermaLink="true">https://example.com/2017/02/22/some-post/</guid>

Since the guid is the unique identifier for RSS scrapers,2 you can see how the scraper is going to incorrectly think that you’ve published something new when in fact you’ve simply tweaked the URL of something previously published. If you’ve integrated something like dlvr.it as a means of auto-tweeting your new posts, this means you’re going to be sending out promiscuous tweets as well. It’s a real debacle.

Here’s how you fix it. You update your RSS so that any old items just don’t show up. Inside my main for loop of my feed.xml that loops through the most recent posts, here’s what that looks like in Jekyll:

{% capture posttime %}{{post.date | date: '%s' | minus: 1487640396 }}{% endcapture %}
{% if posttime contains '-' %}
  {% continue %}
{% endif %}

Change out the “minus” value to the timestamp cutoff you need. It’ll be a hardcoded value. In my experience this is usually the current timestamp at the time I’m needing the cutoff, and so I just head over to unixtimestamp.com and grab it from there. Once you do this, you’re all set. You can now make changes to your URL schema without having to worry about spamming your readers with a bunch of preexisting content. If you like keeping your code clean, after you’ve published enough new things that your posts prior to this change no longer appear in your XML feed, you can always revert your commit that added this conditional.

I wish I’d known about this “hack” years ago, because I’ve had clients, friends, and acquaintances that needed it. I’ve seen it plague 8-figure businesses.

You can add this to your growing list of things that Jekyll’s way better at than WordPress too, by the way. Editing your RSS feed in Jekyll is a breeze.

  1. To quote again from Harvard’s Berkman Center for Internet & Society, the entity responsible for the official RSS spec:

    In all cases, it’s recommended that you provide the guid, and if possible make it a permalink.

    I’m a firm believer in following specs unless there’s a very good reason not to. ↩︎

  2. That’s assuming, of course, that the guid is present; otherwise, scrapers look for other means of uniqueness. But you can be very sure that in such situations, these scrapers mumble and grumble about how the feed they’re inspecting doesn’t adhere to the proper syntax specification. ↩︎

Securing Skype 

Nick Heer:

I rarely use Skype, so I was surprised when I was notified upon signing in yesterday that I needed to change my password. I didn’t really think much of it — I was about to jump into a meeting — but I was told today that one of my contacts, who I haven’t contacted over Skype in about a month, received a pretty sketchy link from me recently.

I just went through the consolidation process that Nick linked to. Feeling better already. Thanks Nick.

Mark Zuckerberg 2020 

Ben Thompson:

It is certainly possible that, as per recent speculation, Facebook CEO Mark Zuckerberg is preparing to run for President.

With his usual thoroughness, Ben makes a compelling case that it might not be a good idea having the the world’s #1 website and the world’s #1 most powerful nation ruled by the same person. Still, it’s fascinating to conjecture the possibility. I’d love to watch a debate between Zuckerberg and Trump.

Inconsolata-g 

At a coworker’s suggestion, I’ve been using the Inconsolata-g font for the past 24 hours in my IDEs and Terminal. It’s a beautiful font and it’s free. I recommend checking it out.

Are These Complaints about Apple’s Lack of Diversity Warranted? 

Jacob Kastrenakes, writing for The Verge:

[Apple] argues that it already has “much broader” diversity efforts at work and, in the past three years, has made “steady progress in attracting more women and underrepresented minorities.” […]

[…]

The company’s answer isn’t good enough for Maldonado. He says Apple is leaning too heavily on retail stores to improve its diversity figures while doing little at the senior level (82 percent of Apple’s leadership is white, versus only 56 percent of its retail employees). If that practice continues, Maldonado fears it’ll hurt Apple’s business in the years to come.

Maldonado, a Donald Trump supporter, isn’t going to get the board to pass his proposal any time soon. Every time a vote is taken, he’s in the single digits. One of the age-old arguments against such affirmative action is spilled in the comments:

In a world where people of color and women want to be acknowledged and have the same opportunities, hiring women and people of color simply for being women and people of color goes against exactly the principle of fairness to everyone.

And also, from another reader:

So I am all for diversity. It will only help everything. But forcing it or doing it unnaturally is only harmful. To everyone.

Pretty much no informed person wants what Maldonado is proposing. A company ought to be able to hire the right person for the job. If there’s a disproportionate number from one group that is qualified, that’s indicative of something, but it’s not the company’s job to change that. Don’t put a blame or burden on the company. Spend your energy elsewhere.

Polymail’s One-Way Mirror 

From Polymail’s features page:

Know exactly when your messages were read and who read them with real-time notifications and activity feed.

In an email update today:

In our latest update, Polymail now detects and blocks email tracking on your incoming messages to prevent senders from knowing when you’ve opened their emails!

This is a double standard in a way, but I see nothing wrong with it. If you don’t want to “spy” on when others read your email, you don’t have to use this feature. And if you don’t want others spying on you, just use Polymail as your email client and enable this prevention feature.

Chris Brogan on Decentralizing Your News Source 

Chris Brogan:

I could get all nerdy-techy and also go deep into the “back in my day,” but the part you should be thinking about is this: people CHOSE their news sources, curated their own interests, and managed their own consumption of media. They could stay connected to communities that mattered to them, and grow with the combined developments that were brought to light in those communities.

Spot on. Being on Facebook and Twitter should come secondarily to your RSS reader.

The Saga of Twitter’s Artificial Tweet Suppression Continues 

Scott Adams:

Here’s a fresh example (today) of how Twitter throttles back my free speech when it doesn’t fit their political views. This only happens for Trump-related content, as far as I can tell.

I have no way of knowing if Twitter is deliberately suppressing Trump-related content, but it sure seems that way. I’m still sticking to my guns that the government shouldn’t get involved in this though. Twitter should have the right to be a jerk if it wants to. That said, it would sure be terrible to experience what Scott is going through with this. I feel his pain.

Scott’s assessment of Twitter’s inevitable downfall is also interesting:

I won’t ask you to believe me about Twitter’s backdoor assault on the First Amendment. That would be a waste of energy. Just file it away in your brain and remember that I warned you. Twitter’s business is about to fall apart and I expect that you’ll see this story emerge from whistleblowers.

I will watch with great amusement when this falling apart happens. The cost of convenience of not owning your own data is perpetual instability and uncertainty, and it’s about to come home to roost for Twitter. When the downfall occurs, people will hopefully learn to be very distrustful of ever again spending hundreds of hours on a platform that isn’t decentralized. As the saying goes, Fool me once, shame on you; fool me twice, shame on me.

Here’s a Simple Way to Calculate Today’s Remaining Builds on a Free Codeship Account

I just now put together an EcmaScript 2016 gist for calculating how many remaining Codeship builds you have without overstepping your average daily allotment. Since the premium accounts for Codeship start at $49/mo, it makes sense for a lot of amateurs such as myself to dabble in the sandbox account, which limits you to 100 builds per month. Here’s what the code looks like:

/**
 * This function gratefully taken from
 * http://stackoverflow.com/a/1185804/1591507
 */
Date.prototype.monthDays = () => {
  const date = new Date();
  const d = new Date(date.getFullYear(), date.getMonth() + 1, 0);
  return d.getDate();
}

/**
 * @param {string} numberofBuildsDone - the number of builds
 * that you’ve already used for the current month
 */
const calc = (numberofBuildsDone) => {
  const numberFreeBuildsPerMonth = 100;
  const daysInMonth = new Date().monthDays();
  const currentDayInMonth = new Date().getDate();
  const availableBuildsPerDay = numberFreeBuildsPerMonth / daysInMonth;
  const numBuildsLeftForToday = Math.round((availableBuildsPerDay * currentDayInMonth) - numberofBuildsDone);
  return `You can make ${numBuildsLeftForToday} more builds today.`;
}

Just take this code, paste it into your Chrome console, and then run something like this:

calc(37);

Since it’s February 13 and there are 28 days in this month, running that right now outputs this:

You can make 9 more builds today.

Pretty cool, right?

Every time I publish something on DC, that takes a build. Every time I update a post, that takes a build. In theory if I do zero editing and I don’t work on any other projects that I’ve integrated with my Codeship account, that means I can publish a maximum of 100 posts on DC in a month. That may sound like a lot, but when you remember that DC is my version of Twitter, that means the equivalent of not being able to tweet more than 100 times in a month. I’ll probably eventually change my tech stack so I’m not confined to this limit, but for now, it’s kind of a fun constraint.

If you’re on the free plan of Codeship for something and you want to keep an eye on how quickly you’re burning through your allotted amount, feel free to fork or star my gist.

Evan You on VueJS 

Fascinating backstory from VueJS founder Evan You at GitHub Stories:

I started Vue as a personal project when I was working at Google Creative Labs in 2013. My job there involved building a lot of UI prototypes. After hand-rolling many of them with vanilla JavaScript and using Angular 1 for a few, I wanted something that captured the declarative nature of Angular’s data binding, but with a simpler, more approachable API. That’s how Vue started.

As I use it more, I’m quickly preferring VueJS over Angular and React. When you combine the good parts of Angular and React, you end up with VueJS.

GitHub Changes Its Nav Bar from White to Black 

It’s going to take some getting used to, but I think it’s here to stay. It’s been available already to enterprise users for some time, apparently. It makes sense to go with black for a couple of reasons:

  1. The logo looks more natural when the cat is dark and the surrounding is light. This is the way that the logo has usually appeared heretofore on GitHub’s products and elsewhere.
  2. The multi-tier nav system becomes more distinguishable when the top nav is black and the secondary navs underneath are white. The difference between a black and a white nav is striking and brings clarity in a way that is much more difficult to achieve when everything shares the same dark-on-light scheme.

Looking forward to hearing any official word from GitHub about the change.