I've found that Apple's backup solutions have been too confusing to be reliable in the past, TJ Luoma at MacStories is having a similar experience. I recommend a hybrid approach of cloud storage and redundant HDDs.

I’ve found that Apple’s backup solutions have been too confusing to be reliable in the past, TJ Luoma at MacStories is having a similar experience. I recommend a hybrid approach of cloud storage and redundant HDDs.

Bill Gates on Apple v. FBI

Bill Gates weighs in on what he thinks about the Apple v. FBI showdown with regards to the San Bernardino massacre:

“This is a specific case where the government is asking for access to information. They are not asking for some general thing, they are asking for a particular case,” Gates tells the Financial Times, disagreeing with Apple CEO Tim Cook that the FBI’s request would create an iPhone backdoor.

How shamefully wrong. If this were in fact just a singular request for information, the FBI would not have done it so publicly, they would not have invoked the All Writs Acts, and if I’m to speculate a bit, they would not have purposefully sabotaged their chances at legal access to the phone’s information. What more, but the Wall Street Journal is reporting that the FBI already have twelve iPhones they would want Apple to compromise.

Certification of apps for Apple platforms

An app which allows users to pirate apps snuck onto the App Store by changing the UI based on a user’s locale, location, IP, or something akin. Macworld:

A Chinese iOS application recently found on Apple’s official store contained hidden features that allow users to install pirated apps on non-jailbroken devices. Its creators took advantage of a relatively new feature that lets iOS developers obtain free code-signing certificates for limited app deployment and testing.

Coincidentally, Apple have released some news a couple days ago of an upcoming certification renewal:

How will customers be affected by the certificate renewal?
Customers who have purchased and installed iOS apps, tvOS apps, or Safari Extensions will not be affected by the certificate renewal. Users running OS X El Capitan (v10.11 or v10.11.1) may receive a notification that your Mac app is damaged if it utilizes receipt validation to request a new receipt from Apple. They can resolve this issue by restarting their Mac or updating to OS X El Capitan (v10.11.2) or later.

It seem I’m not the only one that finds certification, provisioning, and code signing confusing …

As a side note, I ran into this bug this weekend.

GitLab 8.5 released

The open-source GitHub competitor GitLab has shipped a new version of their software which, among other things, has light project management in the form of a feature they call “Todos”:

GitLab is where you do your work, so being able to get started quickly is very important. Therefore, we’re now introducing Todos.

Todos is a chronological list of to-dos that are waiting for your input. Whenever you’re assigned to an issue or merge request or have someone mention you, a new to-do is created automatically.

Then when you’ve made a change, like replying to a comment or updating an issue, the to-do is automatically set to Done. You can also manually mark to-dos as done.

I bet GitHub are really feeling the heat. I’ve long thought it silly that many projects have their source code and their issues/milestones/bug-tracking separate. I’m very impressed by GitLab, and the version control for my next project will be between them and BitBucket.

Smartwatches out-shipped Swiss watches

What relationship does the smartwatch have with the traditional watch and is it anything like smartphones and “traditional” phones? Here’s Jacob Newman reporting for Macworld on how smartwatches out-shipping traditional watches:

Traditional watches aren’t likely to go away, as there will always be some appeal in a timepiece that’s simpler, more dependable, and not at risk of obsolescence. It’s also unclear if high-end smartwatches like the $10,000-and-up Apple Watch Edition can truly compete with the luxury Swiss watch business. Still, the explosion in smartwatch shipments shows how much opportunity exists to reach people who don’t care for mechanical watches, and should serve as a wakeup call to the big Swiss brands.

The watch market is complicated because you can win a $1 watch in a carnival game and some watchmaker’s cheapest watches are $100,000. The point is that while I would never wear a traditional watch for utility (because my phone tells time, of course) and I’d never wear a smartwatch for fashion (because even though Apple are trying, it’s still a nerd’s toy), I think many people share this experience (but feel free to express dissent here). Both of these points are diluted by two facts, however:

  • a mechanical watch at the same price range as a smart watch will likely last forever, giving it way more utility in one crucial metric; and
  • Apple are pushing the Apple Watch as a fashion and luxury device.

Perhaps this will hurt Apple in the long run as fashions change and people realize their $20,000 Apple Watch is only good for a year (or maybe that’s a benefit for people in that stratum of wealth). However as market leader and beautiful-product-maker they’ve really led in setting the fashion of technology in the past, so perhaps it will not hurt them.

High-end watchmakers shouldn’t fear encroachment from smartwatches because people don’t buy a $10,000 watch for its utility: much like Apple fans are often mocked for by fans of other products, with high-end mechanical watches, it’s about the brand.

Apple Pay launches in China

Apple has launched ApplePay in China:

You can now support Apple Pay for your customers in China, providing an easy, secure, and private way for them to pay using their China UnionPay credit and debit cards. Apple Pay lets users buy physical goods and services within your app without having to enter payment or contact information.  Learn more.

The O2O market in China is massive, and if Apple release a Venmo-like service for Apple Pay, this could change the way people do business.

Stand with Apple

Tim Cook has published a heroic defense of American’s right to privacy in the face of a court order Apple has been served by the FBI:

The government would have us remove security features and add new capabilities to the operating system, allowing a passcode to be input electronically. This would make it easier to unlock an iPhone by “brute force,” trying thousands or millions of combinations with the speed of a modern computer.

The implications of the government’s demands are chilling. If the government can use the All Writs Act to make it easier to unlock your iPhone, it would have the power to reach into anyone’s device to capture their data. The government could extend this breach of privacy and demand that Apple build surveillance software to intercept your messages, access your health records or financial data, track your location, or even access your phone’s microphone or camera without your knowledge.

Apple is doing this because this is the right thing to do: there may be not a lot a stake in unlocking this particular phone, but the precedent that the government wants to set is clear. There’s a lot of excellent journalism you can find on this topic, and I may publish a round-up post with some analysis later. But for now, I want to be absolutely clear about my support for Apple and my condemnation of any technology company which doesn’t stand with Apple on this.

Where there's no software problem: betas

Writing about Apple software quality woes, Michael Simon makes some really good points in his latest piece for Macworld. There’s something really problematic about the opening paragraph however:

Twice over the past month I’ve had to erase and restore my iPhone. Both times were related to an attempted install of the iOS 9.3 Public Beta; instead of upgrading my phone with Night Shift, secure Notes, and better News, I got stuck in an endless Apple logo loop that required plugging into the dreaded iTunes and wiping my drive.

Craig Federighi and Eddy Cue were recently on The Talk Show with John Gruber and argued that because more people are installing the software on day one more than ever, that this is one of the challenges that Apple has to contend with with regard to software quality. That was nonsense because it’s Apple themselves that are releasing more than ever, being more aggressive with upgrade prompts than they’ve ever been, and arguable seeking more users than ever. What Simon has to say about the betas being an indication of software quality is equally nonsense because they’re betas: the fact that his install failed is actually what betas are supposed to do. It’s fine that these problems crop up in the betas, the problem is that they also make it to the final build.

The Walking Dead S06E09 "No Way Out" Review

Spoilers ahead. In the mid-season premiere of AMC’s The Walking Dead, the writers killed off characters with story left to tell, protected characters who have met their narrative end episodes ago, and wrote in at least one absurdity. Let me explain.

But before I get started, I must admit I’m never sure what to expect from The Walking Dead. Sometimes it appears to be a critique of our culture, sometimes it feels  like a soap opera, and sometimes it’s clearly a unrelenting gore-fest. Zack Handlen of The Onion’s A.V. Club has a similar conundrum:

My problem, I think, is I keep expecting The Walking Dead to have a consistent narrative philosophy. I don’t mean in some kind of high-minded, “what does this all really have to say about America?” kind of way. I just want there to be a point behind the misery and death and seemingly endless stream of gore.

Perhaps it’s a strength of the show that it can take on different tones. In any case, here’s what I mean by the wrong characters died.

Negan’s people

Whoever played the character which accosts Daryl, Sasha, and Abraham was awesome. The delivery of his lines was menacing and comedic. The voiceless goons around him I won’t miss, but I do think it’s a shame he met such a quick end. However, if the show is willing to kill of a character this good early in the Negan storyline (I haven’t read any comics), I’m excited for what’s in store. Especially considering that whoever this Negan is is unlikely to take too kindly to having his people blown to bits: that was a declaration of war.

It’s still a shame he died however, and for a reason I think many fans may disagree: it was Daryl who should have died. For a crew of on-guard and in-control goons to not realize Daryl disarmed their buddy and then have him grab a rocket launcher is very unlikely. The reason it happened is not so much that Daryl has narrative potential left or because it’s a likely occurrence (not that this matters much in a zombie apocalypse TV show), but because Daryl is a fan favorite and it makes a great opening. It was stupid, but man was it a surprise and wholly entertaining (a theme which is repeated later in the episode by Daryl again).

Jessie and her family

The Walking Dead is mainly the story of the Grimes family, and so when Pete (i.e. “Porchdick”) began fighting with Rick and Rick began flirting with Jessie, the ensuing death was inevitable. The decision to stop Pete was a morally tough one for Rick because while it was the right thing to do, it would strain his political capital with Alexandria. It was made even more morally murky because of his feelings for Jessie, which themselves were hard because of what happened with Lori. One of the ways that Rick could grow as a character was to learn to love again, and this is what was interesting about the Jessie storyline, especially considering the relationship Rick had with her children with Pete.

Unfortunately, I feel, this all came to a screeching halt within the first five minutes of the mid-season premiere, where the rest of Jessie’s family meet their end. Her youngest son, Sam, absolutely was going to bite the dust, Carol assured that very early in the season. Ron, however, had a tense but interesting relationship with both Rick and Carl, and I’m sorry to see that end. I’m surprised to see Michonne so unrelenting in ending the life of a teenager, just like Carl, as well. I would be shocked if this doesn’t have an effect on her later.

Ultimately, I at least don’t think Jessie should have died: it cuts short would could have been an amazing way to develop Rick’s character, and she had a lot of potential in her own right. Her brutal coming-of-age in the bloody murder of a Wolf to defend her family showed that she had strength and resilience. I find it much more likely that other Alexandrians would have died than Jessie’s dying, and I think it would serve the plot better to get rid of some of the less tough characters that clearly haven’t grown like Jessie has.

Carl

The younger Grimes is the natural successor to being the narrative center of The Walking Dead. In this episode, we see this fact cemented as a plot armor which keeps him alive despite being shot (albeit accidentally) in the face. I don’t follow the comics, but I understand that he received a similar injury there. However, despite my being a bit cynical about his plot armor, I appreciate how this happening to Carl grew other characters: first, Michonne really shows her love for Carl by first murdering someone his age to defend him and then giving him a kiss of the forehead before leaving his side to kill some zombie; secondly, Rick’s soliloquy to Carl on his son’s almost deathbed was incredibly moving.

Denise and the Wolf

I don’t know how this fits in with the rest of the story. Both Denise and that Wolf has interesting character development left, especially considering that the Wolf validated Morgan in the end by saving Denise despite it resulting in his being bitten. Here’s Vox’s Todd VanDerWerff on Denise and the Wolf:

The Wolf’s eventual death is particularly notable for the way that the spirit of trying to save others filters out first to the Wolf (who turns back to help Denise when she’s almost certainly dead) and then to Denise (who offers to save his life). Ultimately, Carol shoots the Wolf, and he falls prey to the horde.

I think really who should have died here was Carol. Sure, she has some conflict left to settle with Morgan with regards to the KILL KILL KILL philosophy vs. the “all life is precious” point of view, but I don’t think there’s as much there as there was in seeing how the Wolf could turn out to actually be good like Morgan said or to ultimately validate Carol’s attitude. Carol went from being an abused wife to a distraught mother to a vicious survivor, but I’m just not sure there’s anything left for her. Her takedown of Terminus was almost comical in its ruthlessness, and I don’t think there’s much left for her to do.

Glenn

Bryan Bishop at The Verge has some spot-on analysis of what’s wrong with Glenn’s story in this episode:

But then, for some inexplicable reason, Glenn started going a little nuts, and (apparently) decided to sacrifice himself even though he could have easily kept running. After all the nonsense last year, it looked like Glenn was going to die after all — just a huge, flaming middle finger to the audience. But THEN! In came Sacha and Abraham, miraculously saving Glenn with a hail of automatic weapons fire and a goofy one-liner. TWD managed to take an already cheap, eye-rolling moment and make it even cheaper.

With this in mind, I don’t think that unlikeliness of cheesiness of this sequence is the biggest writing crime here, but rather it’s putting Glenn in such a silly situation so soon after the dumpster fiasco at all. In my opinion, it would have been better to have this part of the story be mostly about the reuniting of Glenn with Maggie, which we don’t really get to see because of all the silliness. The look that Maggie gives Glenn, with the audience knowing that she’s pregnant, was absolutely heart wrenching, and this was cheapened by an unnecessary action sequence in an already action-packed episode. So while I’m glad they didn’t kill Glenn, if they’re going to keep putting him in these situations, they should just do it.

Daryl

I said at the beginning of this piece that Daryl should have died in lieu of Negan’s snarky associate, and I think that Daryl’s actions later in the episode only validate this further. Sure, it’s damn awesome to pour gasoline out of a big tank, fire a rocket into that gasoline, and sit back while all of your zombie problems are burned away. Cinematograph-ily and narratively, this was a welcome and exciting surprise. But practically, what a joke: Daryl pours valuable gasoline onto a lake and then proceeds to fire rocket into the lake when literally a match would have sufficed.

The reason this happened is obvious: Daryl is played out as a character. He started as the wild and unfriendly but good-hearted survivor, and we really saw that good-heartedness grow and develop over the seasons. Throughout, he always had little to say but did let his actions speak for him. But because his character has nowhere to go from being good and “cool”, the writers have had him become more brooding and more “cool”. While he’s a fan favorite, I think that his “awesomeness” in the latest episode only goes to show he has no more story left to be told.

Perhaps I’m wrong, though, and all in all, I wholeheartedly enjoyed the latest episode.

Machine Learning in Swift: Linear Regressions

I’m going to implement a simple linear regression algorithm on a data set which maps square footage onto housing values in Portland, Oregon in Swift. With this algorithm, I’ll be able to predict housing values given square footage. For this exercise, I’m going to use pure Swift and keep my only dependency as Darwin. If you want to skip right to the code, here’s a Playground .

First, I’m going to need to define a point, with $x$ and $y$ values. If I were using CoreGraphics I could make use of CGPoint, but I won’t add that dependency and there doesn’t appear to be a Swift Point, which I find a bit surprising. Because Swift value types are much more efficient, I’m going to make my point a struct.

struct Point {
 var x: Float
 var y: Float
}

Great. Now I’d like to define a collection of points as an object so that I can perform operations on it. I’ll use a Swift Set because my data isn’t ordered.

typealias Data = Set

Unfortunately this is where I run into my first problem with Swift: my Point cannot go into a set because it’s not Hashable; and to be Hashable, the struct must also be Equatable. So let’s do some stuff to make the compiler happy:

func ==(lhs: Point, rhs: Point) -> Bool {
 return lhs.x == rhs.x && lhs.y == rhs.y
}

extension Point : Hashable {
 internal var hashValue : Int {
  get { return "(self.x),(self.y)".hashValue }
 }
}

Now that I have all the preliminaries done, I’d like to define an extension on my new custom Point type which adds all of the functions I’ll need to perform a linear regression.

extension Data { }

This causes my second run-in with the Swift compiler: it seems that constrained extensions must be declared on the unspecialized generic types with constraints
specified by a where clause. This means that instead of using my custom Data object, I’ll have to use Set and constrain the Elements to Point structures. Let’s see what happens:

extension Set where Elements : Point { }

Unfortunately this also does not work: the compiler is complaining that I’m constraining Elements to a non-protocol type Point, which is true. I cannot quite tell, but it seems that this feature may be coming in a future version of Swift, along with the following syntax (which also did not work for me this time):

extension Set where Generator.Element == Point { }

In any case, I’ve now found the winning combination to get the functionality I want while keeping the compiler happy: a PointProtocol which defines an x and y, a Point struct which implements PointProtocol, and an extension on Set where the Elements conform to (the admittedly superfluous) PointProtocol:

protocol PointProtocol {
 var x: Float { get }
 var y: Float { get }
}

struct Point : PointProtocol {
 var x: Float
 var y: Float
}

extension Set where Element : PointProtocol { }

Now it’s time to implement the derivative values I’ll need to plot a linear regression on my Set of Points. With Andrew Ng’s first three lectures fresh in my mind and a little help from Salman Khan, I came up with the following implementation:

extension Set where Element : PointProtocol {
 var size: Float {
  get { return Float(self.count) }
 }

 var avgOfXs: Float {
  get { return self.reduce(0) { $0 + $1.x } / self.size }
 }

 var avgOfYs: Float {
  get { return self.reduce(0) { $0 + $1.y } / self.size }
 }

 var avgOfXsAndYs: Float {
  get { return self.reduce(0) { $0 + ($1.x * $1.y) } / self.size }
 }

 var avgOfXsSquared: Float {
  get { return self.reduce(0) { $0 + pow($1.x, 2) } / self.size }
 }

 var slope: Float {
  get { return ((self.avgOfXs * self.avgOfYs) - self.avgOfXsAndYs) / (pow(self.avgOfXs, 2) - self.avgOfXsSquared) }
 }

 var yIntercept: Float {
  get { return self.avgOfYs - self.slope * self.avgOfXs }
 }

 func f(x: Float) -> Float {
  return self.slope * x + self.yIntercept
 }
}

I have been trying to find a way to generalize the averaging functionality and pass in just the value I want to use in the summation, but I have yet to find a good way to do that.

Now that I have all the tools I’ll need, it’s just the matter of plugging in some data and running the regression:

var data = Data([
 Point(x: 2104, y: 400),
 Point(x: 1600, y: 330),
 Point(x: 2400, y: 369),
 Point(x: 1416, y: 232),
 Point(x: 3000, y: 540)
])

for var i in [0, 1000, 2000, 3000, 4000, 5000] {
 XCPlaygroundPage.currentPage.captureValue(data.f(Float(i)), withIdentifier: "")
}

This creates a beautiful graph in Xcode’s Playground which reveals to me the profound insight that a house with 0 square footage should be worth $267,900 in Portland, Oregon. More interestingly, at the 3000 square footage mark, just like we might expect by cross-referencing with out original data set, my linear regression shows the house should cost $522,146. Take a look for yourself:

Screen Shot 2016-02-14 at 1.06.43 AM

 

Watch apps worth making and the enterprise

Everyone, even Apple, still seems to be trying to figure out what people want or need to do on their wrist. Prominent WatchKit developer David Smith muses:

What doesn’t work is easiest to say. Apps that try to re-create the functionality of an iPhone app simply don’t work. If you can perform a particular operation on an iPhone, then it is better to do it there. The promise of never having to take your iPhone out of your pocket just isn’t quite here yet. The Apple Watch may advance (in hardware and software) to a point where this is no longer true but the platform has a ways to grow first.

In response, Federico Viticci:

[…] As I tweeted yesterday, my favorite Watch apps aren’t trying to mimic iPhone apps at all. If the same task can be completed on the iPhone, I don’t see why I would try on a smaller, slower device.

Something you might not hear elsewhere: I’m rather interested in the possibilities of fleets of watchOS devices in enterprise. I’ve heard of a real, albeit crazy, case of a company deploying a fleet of iPhones that workers wear on their wrists to inform them of certain events as they happen. Of course, the Apple Watch would be perfect for this, but it’s been billed and tooled to be such a personal device, I don’t think the platform is quite ready for enterprise needs like multi-user of deploying many of them.

But perhaps one day.

Sync is still hard

Sync is still hard. Versioning documents, resolving conflicts, and issues of connectivity still cause every cloud storage solution trouble. Even for high-profile software like iCloud and Dropbox. Consider that Federico Viticci just tweeted:

Just lost 1.5k words I had prepared for tomorrow because I wanted to try iCloud sync instead of Dropbox this week.

In response, Manton Reece writes that iCloud is too opaque:

I hear that people love iCloud Photo Library and Notes, and that the quality of these apps and companion services has significantly improved. That’s great. (I also think that CloudKit is clearly the best thing Apple has built for syncing yet.)

But to me, it doesn’t matter if it’s reliable or fast, or even if it “always” works. It only matters if I trust it when something goes wrong. Conceptually I’m not sure iCloud will ever get there for me.

This is absolutely right. I used to be “all-in” on Apple’s software when iPhoto was around, because I could back up the managed folder and still access that data in a directory structure that made sense to me. I migrated to a Dropbox and Adobe Lightroom based workflow because of performance, reliability, power, and predictability. Perhaps Photos is simpler and more convenient for most consumers, but it just is too risky and too opaque for me.

This discussion reminds me somewhat of why Marco Arment and David Smith use their own Linux servers instead of BaaS.