Archive for July 7, 2012

Saturday, July 7, 2012

Retina MacBook Pro Upgrade

I mentioned before that I upgraded to a Retina MacBook Pro earlier than I would have under normal circumstances. However, it’s been a very pleasant upgrade. Subjectively, it feels much faster. And in terms of benchmarks, it takes 4m26s to build on the 2010 MacBook Pro (2.66 GHz dual-core i7, SSD) vs. just 2m2s on the Retina MacBook Pro (2.6 GHz quad-core i7). Backups and restores using a Voyager S3 are between 2 and 4 times faster since the new Mac has USB 3. It also has more internal storage, so I can now put VMware Fusion on the flash drive, which makes a huge difference. So far the only hiccup has been that it wouldn’t recognize the native resolution of my external display until I Option-clicked the “Scaled” radio button in the Displays preference pane. I’m also looking into using an HDMI cable to connect my Dell display, so that I won’t need the flaky, USB-powered Mini DisplayPort to Dual-Link DVI Adapter.

Update (2012-07-19): The “Dual Link” cable that I got only worked up to 1280×800. I now believe that there are no HDMI-to-DVI cables that work with dual-link resolutions. An active adapter may be required.

Update (2012-09-06): Mark Aldritt:

[This] is the first time I’ve gotten a new Mac laptop that was dramatically faster than my previous machine. The combination of solid-state disk, lots of RAM and a fast CPU make the machine very responsive. Building my Script Debugger 5 product from scratch went from ~4m30s down to ~1m15s.

The Grind

Philip Guo:

This book chronicles my six years of working towards a Ph.D. in Computer Science at Stanford University from 2006 to 2012.

The Developer News Window

Paul Kafasis:

After exploring many different ways to talk to our active customers, we finally realized the best way to do it was right in the application itself. By talking to users inside the application, we can reach them as they’re most likely to need the information we’re providing.

I tried adding something like this to my apps and was told by App Review that it violated rule 2.21 “Apps may not use update mechanisms outside of the App Store.” They allowed it when I explained that it was only an emergency communication mechanism.

Microsoft’s Downfall

Vanity Fair (via Hacker News):

Kurt Eichenwald traces the “astonishingly foolish management decisions” at the company that “could serve as a business-school case study on the pitfalls of success.” Relying on dozens of interviews and internal corporate records—including e-mails between executives at the company’s highest ranks—Eichenwald offers an unprecedented view of life inside Microsoft during the reign of its current chief executive, Steve Ballmer, in the August issue. Today, a single Apple product—the iPhone—generates more revenue than all of Microsoft’s wares combined.

Apparently Amazon and IBM also use Glengarry Glen Ross–style “stack ranking.”

Update (2012-07-29): The full article is now available online.

Let’s Build NSNumber

Mike Ash:

NSNumber is a conceptually simple class which mainly exists so that we can stuff numeric values into Cocoa collections, but its flexibility implies a fair amount of underlying complication. By implementing a workalike MANumber class, we can see what kinds of things NSNumber has to be doing on the inside. Automatic conversion to different integer types requires a fair amount of boilerplate code, and reliable conversion between number of different types can get pretty complicated.

Python’s implementation of number objects is also interesting.

Target The Forward Fringe

Daniel Jalkut:

Because HiDPI customers may be a fringe group, but they are a forward-facing fringe. They represent the users of the future, and the more we cater to them now, the more deeply embedded our products and designs will be in their culture. The future culture. The same arguments apply to aggressively embracing newer web browsers standards, and the latest technologies in platform operating systems such as iOS and Mac OS X.

Scripting Bridge Problems

Hamish Sanderson (via Clark Goble):

SB, on the other hand, does its hardest to pretend that it is a genuine Cocoa API with Cocoa-style behaviour, so layers on a large amount of magic. The result is something superficially appealing to Cocoa developers, but as soon as those abstractions start to leak - as abstractions invariably do - you are completely at sea in terms of understanding what’s going on. For example, SBElementArray claims to be an array - it even subclasses NSMutableArray - but when you actually try to use its array methods, half of them work and half of them don’t. In fact, it isn’t a real array at all; it’s a wrapper around an unevaluated Apple event object specifier, faked up to pretend it’s an NSMutableArray.

Clipstart 1.5

Manton Reece:

Today I released Clipstart 1.5 for direct download customers and removed the previous version of Clipstart from the Mac App Store. Even though I’ve written about leaving the Mac App Store several times, actually pulling the trigger was difficult. But I believe it’s the right thing for my app, right now.

Risk Probabilities

Nick Berry (via Dave Dribin):

With just a small number armies on both sides, the defender has the advantage. This is because, in the result of a tie on the dice, the defender wins.

For battles where the number of attackers and defenders is the same 1v1, 2v2, 3v3, 4v4, then the defender has the mathematical advantage. However, once 5v5 has been reached, advantage swings to the attacker (because the benefit or being able to roll one extra die each round becomes more significant than losing on a tie.



When your MacBook Pro switches from integrated Intel graphics to the dedicated GPU, power consumption goes up considerably. Which API calls or program attributes trigger this switch is not totally clear, and programs that you least expect might be draining your battery.

Cody Krieger’s free gfxCardStatus will tell you when a switch occurs and lists which programs are causing this.

Unfortunately, there doesn’t seem to be a list of which APIs trigger the discrete GPU. The system thinks that EagleFiler and BBEdit need it, even if they are just displaying text files.

Apple Ditching Google Maps

Jacqui Cheng:

It looks like Google’s terms for use of the API clearly restricts companies like Apple from offering turn-by-turn navigation in their apps. But this leaves at least one unanswered question: what if Apple and Google had worked out their own agreement that isn’t necessarily subject to the TOS that are applied to everyone else?

Street View and integrated transit information seem like big losses.


Andreas Arvanitis (via Hacker News):

Eero is a fully binary- and header-compatible dialect of Objective-C, implemented with a modified version of the Apple-sponsored LLVM/clang open-source compiler. It features a streamlined syntax, Python-like indentation, and other features that improve readability and code safety. It is inspired by languages such as Smalltalk, Python, and Ruby.

Update (2012-07-11): There’s a thread about Eero on Apple’s Objective-C Language mailing list.

You Should Use Core Data

Drew Crawford:

Just to be clear: if your requirements never change and you never update your applications, you never interact with remote objects, your users never make mistakes, your data operations are all instantaneous, your users all run 12-core Mac Pros, and you only have one view, Core Data is definitely not the correct tool for you. Go, write your own data stack, and be merry. The rest of us should be using Core Data.

Also to be clear, using Core Data here and there does not magically solve all your thread synchronization problems, or build a complete sync engine for you. It’s not some magical dust you sprinkle on and life is sunshine and rainbows.

He also has an interesting post about using NSIncrementalStore with Web services.