Archive for January 17, 2015

Saturday, January 17, 2015

Vintage Mac About Boxes

Riccardo Mori:

I started going through them one by one (the applications, at least; the games are more than 200!), and invoking their About boxes to find out exactly which version they were. I found some very old versions of popular applications and — equally interesting — there were also not-so-old versions of popular applications but in French and even German. I thought this exploration was worth capturing, so I took a few screenshots. Here’s a selection of the most interesting findings.

100 Years of Computer Science

Chris Ford (via Ole Begemann):

I came to appreciate academic papers relatively late. While a student, I can only specifically remember reading two papers, one of which (by Claude Shannon) appears below. As a professional programmer without a strong theoretical background, papers seemed difficult and unapproachable, and it took me a long time to realise what I’d been missing.

Some colleagues, responding to my new-found enthusiasm, asked me for recommendations on where to start. Inspired by similar lists by Michaels Feathers and Fogus, I’ve compiled a timeline of papers that (for me) represent something of the spirit of the development of computer science over the past 100 years.

He chose one paper from each decade.

Mergeable Persistent Data Structures

Benjamin Farinier et. al. (PDF) (via Adrian Colyer):

Distributed version-control systems (DVCSs) are widely used to manage the source code of software projects. These systems are at the core of any workflows to produce and maintain large software stacks that involve many branches of development and maturity. DVCSs are used to keep track of change provenance and help to relate newly discovered bugs in the software to the context of the modification of the source-code which caused it.

We wish to see the same kind of workflow applied to data as well as source code. What if you could version-control a (mutable) persistent data structure, inspect its history, clone a remote state and revert it to a previous state? We find that using the existing tools around source-code DVCS and applying them to application data results in significant benefits to developing distributed applications. Instead of structuring our system like a conventional database, we instead provide the functionality as a library that can be linked and customised directly by the application logic.

Real World Swift

Chris Surowiec (via iOS Dev Weekly):

Our biggest gripe – and source of frustration – with Swift is probably not the language itself, but the tooling around it. Xcode (Apple’s Objective-C and Swift IDE) does not yet feel solid with Swift code. During development of our app, the IDE would often slow down noticeably or crash. There was no (or very slow) code completion most of the time, basically no debugger, unstable and unreliable syntax highlighting, a slow text editor (once the project reached a certain size), and no refactoring tools.

Additionally, compiler errors are often incomprehensible and there are still quite a few compiler bugs and missing features (e.g. type inference sometimes goes awry).


The number one crash group (at ~30% of all crashes) comes from an external Objective-C library. In fact, four of the top five crash groups come from Objective-C land (the fifth being a failing assert, which we leave enabled in production builds).

Also of note, the seventh most common crash comes from the previously mentioned Apple-provided Objective-C function that will sometimes @throw exceptions without being documented as such (-[AVAssetWriterInputHelper markAsFinished]).


You can certainly tell that some of Xcode’s features become slower and slower as your project grows, and we are not the only ones noticing. Iteration time (the time it takes after making a code change, hitting CMD+R, and having your app run in the simulator) is also worse than in Objective-C. A quick test shows that adding a single line brings the wait up to 14 seconds, and this varies greatly depending on what you do. Making a similar change in our Objective-C based app takes about two to three seconds.

iOS App Sales Data

Dan Gray shares the sales numbers for the Monument Valley (App Store) game.

Marco Arment (tweet) shares the numbers for his Overcast (App Store) podcast client.

William Wilkinson (tweet) shares the numbers for his Manual (App Store) camera app.

Skip the FFI: Embedding Clang for C Interoperability

Jordan Rose:

Most languages that aren’t a superset of C provide a Foreign Function Interface (FFI) that allows one to interface with existing C libraries. FFIs are often an afterthought, requiring manual or source-to-source translation from C header files to a subset of the target language, resulting in complicated build processes, frequent manual tweaking, and numerous implementation challenges.

This talk will discuss an alternative approach that embeds Clang into an LLVM-based compiler front end to provide C compatibility without the traditional FFI. Embedding Clang provides seamless access to C APIs, moving the translation of APIs from external tools into the compiler itself. Moreover, one can leverage Clang’s deep knowledge of C record layout and calling conventions to simplify the C interface and make both bring up and porting of a new compiler front end simpler.

The Stunning Scale of AWS

Todd Hoff (via Steven Sinofsky, comments):

All 14 other cloud providers combined have 1/5th the aggregate capacity of AWS (estimate by Gartner in 2013)


The cost of networking is escalating relative the cost of all other equipment. It’s anti-Moore’s law. All other gear is going down in cost, networking is getting relatively more expensive over time. Relative monthly costs: servers: 57%; networking equipment: 8%; power distribution and cooling: 18%; power: 13%; other: 4%.


Amazon’s solution 5 years ago was data driven and radical: they built to their own networking designs. Special routers were built. A team was hired to build the protocol stack all the way to the top. And they deployed all this themselves in their network. All services worldwide run on this gear. […] source of the improvement was simplicity. The problem AWS was trying to solve was simpler than the problem enterprise gear tries to solve. Enterprise gear must adhere to a lot of complicated specs that go unused and only make the system more fragile. By implementing just the functionality that was required meant a much simpler system which lead to higher availability.

Something Slightly Less Terrible

Loren Brichter:

It’s not like a boat with a couple of holes that we can patch; it’s more like trying to sail across an ocean on a pile of accrued garbage. Sure, some of the stuff floats, and it keeps some other stuff from sinking. A better question might be: which parts are good? And you can only answer that if you look at a thing in isolation. Like, I could say that Rust is good. But even that enshrines the Von Neumann philosophy, and so you can crawl your way down the stack questioning everything, which isn’t practical.


Personally, I’m tired of the trivial app stuff, and the App Store isn’t conducive to anything more interesting. I think the next big thing in software will happen outside of it.

Video and iOS Rotation Lock

Tim Schmitz:

In fact, I leave auto-rotation enabled for one simple reason: video. Most video fits far better in landscape orientation than in portrait. The iPhone's screen is perfectly shaped for wide-aspect video in landscape. Unfortunately for me, iOS won't rotate video into landscape orientation unless it can rotate the whole OS into landscape. Put another way, if I use rotation lock to keep the phone in portrait orientation, that applies to video as well. That means video gets letterboxed into a postage stamp-sized area in the center of my screen.

I wish it would show video in landscape and everything else in portrait.

Update (2015-01-25): Garrett Murray:

There are, however, two cases in which I want the option to use landscape mode: playing games and watching video. Tim’s suggestion of video ignoring rotation lock would be perfect (applied to games as well, obviously). If I had my way, I’d remove landscape from iPhone in iOS entirely but for these two scenarios.