Archive for July 24, 2016

Sunday, July 24, 2016

2016 MacBook – Two Months Later

Jeff Benjamin:

Although not everyone enjoys the low travel distance of the MacBook’s keys, it never posed a major issue for me. I have noticed, however, that some of the keys can get stuck as if infested with crumbs.


Jordan talked about the issues with USB-C in a prior post, and I can vouch for the fact that many of the USB-C peripherals that you’ll encounter can be finicky. I’ve experienced issues with devices abruptly disconnecting, devices that aren’t recognized without a reboot, and other annoyances.

Having a single USB-C port does occasionally present a problem, but that doesn’t bother me nearly as much as the wishy-washy interaction with some of my USB-C peripherals.

Previously: The 12-inch MacBook, Mistake One, The Developer’s MacBook.

Update (2016-07-24): Chris Turner:

I’ve had no keyboard issues, but fully concur on USB-C.

Sami Samhuri:

I bought the machine because I rarely use peripherals but have experienced USB disconnects with the battery I own.

But that is an exception. Since I don’t need max performance or use lots of peripherals, overall I love this MacBook.

Update (2016-07-25): Hampus Jakobsson (via Hacker News):

At the end of the day, I don’t think I am going back to my Mac. The ASUS [Chromebook] is super performant […] The biggest differences for me have been that there is never is a load time or memory running out.

Bridging Existentials & Generics in Swift 2

Benjamin Encz:

In an earlier blog post I pointed out some incompatibilities between type information that is statically known at compile time (Generics) and type information that is dynamically available at runtime (Existentials).


Given a heterogenous list of different instances that can be persisted we want to automatically find & call the DAO based on the type of object we encounter.


The .Self member, which would refer to the concrete type of the existential doesn’t exist in Swift 2. However, we can access the concrete type of the existential using Self from within protocols & protocol extensions.

Using a clever inversion of control we can use that Self type from within the PersistedType protocol (which all persisted types implement) to dynamically specify the generic type parameter of our GenericDAO<T>:

Exploring the App Store’s Top Grossing Chart

Graham Spencer:

One of the most striking things you’ll notice when browsing the Top 200 Grossing apps is that they are virtually all offered as free downloads. In my survey, just three apps were paid apps upfront; Minecraft (#33, $6.99), Grindr (#95, $0.99), and Facetune (#183, $3.99). The other 197 apps were free to download.


Whilst almost all the apps are free to download, it is also true that apps with In-App Purchases (IAPs) dominate the Top 200 Grossing charts. In my survey, just 2 apps did not offer any IAPs; Facetune (#183) and CBS (#200).


Games dominate the Top 200 Grossing charts, representing an overwhelming majority of 68% of the apps. The next closest is Social Networking at just 11% and comprised mainly of various dating apps.

Remote Code Execution With Image Files

CVE-2016-4631 (Hacker News):

An exploitable heap based buffer overflow exists in the handling of TIFF images on Apple OS X and iOS operating systems. A crafted TIFF document can lead to a heap based buffer overflow resulting in remote code execution. This vulnerability can be triggered via malicious web page, MMS message, iMessage or a file attachment delivered by other means when opened in applications using the Apple Image I/O API.


I was about to post that these exploits should be substantially mitigated by iOS sandboxing (you can get arbitrary code execution, but can’t get out of the exploited process’s sandbox without a second exploit), but then saw CVE-2016-4627 also in the 9.3.3 release notes, which is a local privilege escalation exploit that allows arbitrary code execution with kernel privileges.

It’s fixed in Mac OS X 10.11.6 and iOS 9.3.3.